Greasy Fork is available in English.

觅影

原网页解析VIP视频、快捷跳转在线观看、移动端豆瓣净化

Från och med 2020-04-14. Se den senaste versionen.

// ==UserScript==
// @name         觅影
// @version      20.4.13-1
// @author       (o˘◡˘o)
// @description  原网页解析VIP视频、快捷跳转在线观看、移动端豆瓣净化
// @note         最近更新:添加更多的优质在线源
// @namespace    (o˘◡˘o)
// @supportURL   https://gitee.com/ecruos/oo
// @icon         https://p.pstatp.com/origin/fe690000c9141955bbac
// @license      GPL License
// @include      *
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        unsafeWindow
// ==/UserScript==

!function() {
  let _Mathmax = Math.max;
  function Is(n, e = Href) {
    return e = (n.source || n).includes("=http") ? e : e.replace(/=http[^&]+/, ""),
    "string" == typeof n ? e.includes(n) : n.test(e);
  }
  function IsNot(n, e) {
    return !Is(n, e);
  }
  function getGlobal(n) {
    return (hasUnsafeWindow ? unsafeWindow : window)[n];
  }
  function setGlobal(n, e) {
    window[n] = e, hasUnsafeWindow && (unsafeWindow[n] = e);
  }
  function parseStoreData(n, e = null) {
    if ("string" == typeof n) try {
      n = JSON.parse(n);
    } catch (n) {}
    return null === n ? e : n;
  }
  function getCdnUrl(n) {
    return "https://cdn.bootcss.com" + n;
  }
  async function fetchCdnUrl(n, e) {
    let t, o;
    const i = /^\/\w/.test(n);
    if (n = i ? getCdnUrl(n) : n, !e && i) {
      const e = n.match(/cdn.bootcss.com\/([^\/]+)\/([^\/]+)\/.+(\.\w+)$/);
      t = e[1] + e[3], o = e[2];
    } else t = e.name || n, o = e.version || VERSION;
    const r = GlobalStore.get(t);
    let a;
    return a = r && r.version === o ? r.data : await window.fetch(n).then((function(n) {
      return n.text();
    })).then((function(n) {
      return GlobalStore.set(t, {
        data: n,
        version: o
      }), n;
    })), a;
  }
  async function addJs(url, opts) {
    const data = await fetchCdnUrl(url, opts);
    return eval(data);
  }
  async function addCssUrl(n) {
    addCss(await fetchCdnUrl(n));
  }
  function addCss(n) {
    let e;
    return /^(http|\/)/.test(n) ? addCssUrl(n) : (n = n.replace(/\n+\s*/g, " "), e = document.createElement("style"),
    e.styleSheet ? e.styleSheet.cssText = n : e.appendChild(document.createTextNode(n)),
    e.type = "text/css", void document.getElementsByTagName("head")[0].appendChild(e));
  }
  function prefixCss(n, e) {
    let t, o, i, r, a = e.length;
    e += " ", n = (n = (n = n.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g, "")).replace(/}(\s*)@/g, "}@")).replace(/}(\s*)}/g, "}}");
    for (let s = 0; s < n.length - 2; s++) t = n[s], o = n[s + 1], "@" === t && (i = !0),
    i || "{" !== t || (r = !0), r && "}" === t && (r = !1), !r && "@" !== o && "}" !== o && ("}" === t || "," === t || ("{" === t || ";" === t) && i) && (n = n.slice(0, s + 1) + e + n.slice(s + 1),
    s += a, i = !1);
    return 0 !== n.indexOf(e) && 0 !== n.indexOf("@") && (n = e + n), n;
  }
  function get$() {
    function n(n, e) {
      try {
        return n(e);
      } catch (n) {
        return e;
      }
    }
    function e(n, e) {
      return n && (l(e) || c(e)) ? an.test(n) ? e.getElementsByClassName(n.slice(1)) : sn.test(n) ? e.getElementsByTagName(n) : e.querySelectorAll(n) : [];
    }
    function t(n) {
      return n.replace(dn, (function(n, e) {
        return e.toUpperCase();
      }));
    }
    function o(n, e, t) {
      if (t) {
        for (let t = n.length; t--; ) if (!1 === e.call(n[t], t, n[t])) return n;
      } else for (let t = 0, o = n.length; t < o; t++) if (!1 === e.call(n[t], t, n[t])) return n;
      return n;
    }
    function i(n) {
      let e = [];
      for (let n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];
      let t = arguments.length;
      if (!t) return {};
      if (1 === t) return i(pn, n);
      for (let e = 1; e < t; e++) for (let t in arguments[e]) n[t] = arguments[e][t];
      return n;
    }
    function r(n, e) {
      let t = n && (n.matches || n.webkitMatchesSelector || n.msMatchesSelector);
      return !!t && !!e && t.call(n, e);
    }
    function a(n) {
      return n instanceof ln;
    }
    function s(n) {
      return !!n && n === n.window;
    }
    function l(n) {
      return !!n && 9 === n.nodeType;
    }
    function c(n) {
      return !!n && 1 === n.nodeType;
    }
    function p(n) {
      return "function" == typeof n;
    }
    function d(n) {
      return "string" == typeof n;
    }
    function f(n) {
      return void 0 === n;
    }
    function u(n) {
      return null === n;
    }
    function m(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    }
    function h(n) {
      return d(n) ? function(e, t) {
        return r(t, n);
      } : p(n) ? n : a(n) ? function(e, t) {
        return n.is(t);
      } : n ? function(e, t) {
        return t === n;
      } : function() {
        return !1;
      };
    }
    function g(n, e) {
      return e ? n.filter(e) : n;
    }
    function v(n) {
      return d(n) && n.match(fn) || [];
    }
    function b(n, e, t, o) {
      let i = [], r = p(e), a = o && h(o);
      for (let s = 0, l = n.length; s < l; s++) if (r) {
        let t = e(n[s]);
        t.length && en.apply(i, t);
      } else for (let r = n[s][e]; !(null == r || o && a(-1, r)); ) i.push(r), r = t ? r[e] : null;
      return i;
    }
    function y(n) {
      return 1 < n.length ? Y.call(n, (function(n, e, t) {
        return Z.call(t, n) === e;
      })) : n;
    }
    function x(n, e, t) {
      if (c(n)) {
        let o = G.getComputedStyle(n, null);
        return t ? o.getPropertyValue(e) || void 0 : o[e];
      }
    }
    function w(n, e) {
      return parseInt(x(n, e), 10) || 0;
    }
    function _(n) {
      return un.test(n);
    }
    function j(n, e) {
      if (void 0 === e && (e = _(n)), e) return n;
      if (!mn[n]) {
        let e = t(n), i = "" + e[0].toUpperCase() + e.slice(1);
        o((e + " " + gn.join(i + " ") + i).split(" "), (function(e, t) {
          if (t in hn) return mn[n] = t, !1;
        }));
      }
      return mn[n];
    }
    function k(n, e, t) {
      return void 0 === t && (t = _(n)), t || vn[n] || !m(e) ? e : e + "px";
    }
    function S(e, o) {
      let i = e.dataset[o] || e.dataset[t(o)];
      return bn.test(i) ? i : n(JSON.parse, i);
    }
    function I(e, o, i) {
      i = n(JSON.stringify, i), e.dataset[t(o)] = i;
    }
    function $(n, e) {
      let t = n.documentElement;
      return _Mathmax(n.body["scroll" + e], t["scroll" + e], n.body["offset" + e], t["offset" + e], t["client" + e]);
    }
    function C(n, e) {
      return w(n, "border" + (e ? "Left" : "Top") + "Width") + w(n, "padding" + (e ? "Left" : "Top")) + w(n, "padding" + (e ? "Right" : "Bottom")) + w(n, "border" + (e ? "Right" : "Bottom") + "Width");
    }
    function U(n) {
      return "none" === x(n, "display");
    }
    function A(n, e) {
      return !e || !on.call(e, (function(e) {
        return 0 > n.indexOf(e);
      }));
    }
    function M(n) {
      return jn[n] || _n[n] || n;
    }
    function T(n) {
      return n[xn] = n[xn] || {};
    }
    function P(n, e, t, o, i) {
      let r = T(n);
      r[e] = r[e] || [], r[e].push([ t, o, i ]), n.addEventListener(e, i);
    }
    function z(n) {
      let e = n.split(wn);
      return [ e[0], e.slice(1).sort() ];
    }
    function E(n, e, t, o, i) {
      let r = T(n);
      if (e) r[e] && (r[e] = r[e].filter((function(r) {
        let a = r[0], s = r[1], l = r[2];
        return !!(i && l.guid !== i.guid || !A(a, t) || o && o !== s) || void n.removeEventListener(e, l);
      }))); else for (e in r) E(n, e, t, o, i);
    }
    function q(n) {
      return n.multiple && n.options ? b(Y.call(n.options, (function(n) {
        return n.selected && !n.disabled && !n.parentNode.disabled;
      })), "value") : n.value || "";
    }
    function N(n) {
      if (!d(n)) return [];
      if (Cn.test(n)) return [ O(RegExp.$1) ];
      let e = $n.test(n) && RegExp.$1, t = Un[e] || Un["*"];
      return t.innerHTML = n, pn(t.childNodes).detach().get();
    }
    function R(n, e, t, i, r) {
      i ? n.insertBefore(e, t ? n.firstChild : null) : n.parentNode.insertBefore(e, t ? n : n.nextSibling),
      r && function(n, e) {
        let t = pn(n);
        t.filter("script").add(t.find("script")).each((function(n, t) {
          if (Mn.test(t.type) && H.contains(t)) {
            let n = O("script");
            n.text = t.textContent.replace(An, ""), o(Tn, (function(e, o) {
              t[o] && (n[o] = t[o]);
            })), e.head.insertBefore(n, null), e.head.removeChild(n);
          }
        }));
      }(e, n.ownerDocument);
    }
    function V(n, e, t, i, r, a, s, l) {
      return o(n, (function(n, a) {
        o(pn(a), (function(n, a) {
          o(pn(e), (function(e, o) {
            let s = t ? o : a, l = t ? n : e;
            R(t ? a : o, l ? s.cloneNode(!0) : s, i, r, !l);
          }), l);
        }), s);
      }), a), e;
    }
    let D = {
      class: "className",
      contenteditable: "contentEditable",
      for: "htmlFor",
      readonly: "readOnly",
      maxlength: "maxLength",
      tabindex: "tabIndex",
      colspan: "colSpan",
      rowspan: "rowSpan",
      usemap: "useMap"
    }, L = document, G = window, H = L.documentElement, O = L.createElement.bind(L), B = O("div"), F = O("table"), W = O("tbody"), X = O("tr"), K = Array.isArray, J = Array.prototype, Q = J.concat, Y = J.filter, Z = J.indexOf, nn = J.map, en = J.push, tn = J.slice, on = J.some, rn = J.splice, an = /^\.[\w-]*$/, sn = /^\w+$/, ln = function() {
      function n(n, t) {
        if (!n) return;
        if (a(n)) return n;
        let o = n;
        if (d(n)) {
          let i = (a(t) ? t[0] : t) || L;
          if (o = /^#[\w-]*$/.test(n) ? i.getElementById(n.slice(1)) : /<.+>/.test(n) ? N(n) : e(n, i),
          !o) return;
        } else if (p(n)) return this.ready(n);
        (o.nodeType || o === G) && (o = [ o ]), this.length = o.length;
        for (let n = 0, e = this.length; n < e; n++) this[n] = o[n];
      }
      return n.prototype.init = function(e, t) {
        return new n(e, t);
      }, n;
    }(), cn = ln.prototype, pn = cn.init;
    pn.fn = pn.prototype = cn, cn.length = 0, cn.splice = rn, "function" == typeof Symbol && (cn[Symbol.iterator] = J[Symbol.iterator]),
    cn.map = function(n) {
      return pn(Q.apply([], nn.call(this, (function(e, t) {
        return n.call(e, t, e);
      }))));
    }, cn.slice = function(n, e) {
      return pn(tn.call(this, n, e));
    };
    let dn = /-([a-z])/g;
    pn.each = o, cn.each = function(n) {
      return o(this, n);
    }, cn.removeProp = function(n) {
      return this.each((function(e, t) {
        delete t[D[n] || n];
      }));
    }, pn.extend = i, cn.extend = function(n) {
      return i(cn, n);
    }, pn.guid = 1, pn.isWindow = s, pn.isFunction = p, pn.isNumeric = m, pn.isArray = K,
    cn.prop = function(n, e) {
      if (n) {
        if (d(n)) return n = D[n] || n, 2 > arguments.length ? this[0] && this[0][n] : this.each((function(t, o) {
          o[n] = e;
        }));
        for (let e in n) this.prop(e, n[e]);
        return this;
      }
    }, cn.get = function(n) {
      return f(n) ? tn.call(this) : this[0 > (n = +n) ? n + this.length : n];
    }, cn.eq = function(n) {
      return pn(this.get(n));
    }, cn.first = function() {
      return this.eq(0);
    }, cn.last = function() {
      return this.eq(-1);
    }, cn.filter = function(n) {
      let e = h(n);
      return pn(Y.call(this, (function(n, t) {
        return e.call(n, t, n);
      })));
    };
    let fn = /\S+/g;
    cn.hasClass = function(n) {
      return !!n && on.call(this, (function(e) {
        return c(e) && e.classList.contains(n);
      }));
    }, cn.removeAttr = function(n) {
      let e = v(n);
      return this.each((function(n, t) {
        c(t) && o(e, (function(n, e) {
          t.removeAttribute(e);
        }));
      }));
    }, cn.attr = function(n, e) {
      if (n) {
        if (d(n)) {
          if (2 > arguments.length) {
            if (!this[0] || !c(this[0])) return;
            let e = this[0].getAttribute(n);
            return u(e) ? void 0 : e;
          }
          return f(e) ? this : u(e) ? this.removeAttr(n) : this.each((function(t, o) {
            c(o) && o.setAttribute(n, e);
          }));
        }
        for (let e in n) this.attr(e, n[e]);
        return this;
      }
    }, cn.toggleClass = function(n, e) {
      let t = v(n), i = !f(e);
      return this.each((function(n, r) {
        c(r) && o(t, (function(n, t) {
          i ? e ? r.classList.add(t) : r.classList.remove(t) : r.classList.toggle(t);
        }));
      }));
    }, cn.addClass = function(n) {
      return this.toggleClass(n, !0);
    }, cn.removeClass = function(n) {
      return arguments.length ? this.toggleClass(n, !1) : this.attr("class", "");
    }, pn.unique = y, cn.add = function(n, e) {
      return pn(y(this.get().concat(pn(n, e).get())));
    };
    let un = /^--/, mn = {}, hn = B.style, gn = [ "webkit", "moz", "ms" ], vn = {
      animationIterationCount: !0,
      columnCount: !0,
      flexGrow: !0,
      flexShrink: !0,
      fontWeight: !0,
      gridArea: !0,
      gridColumn: !0,
      gridColumnEnd: !0,
      gridColumnStart: !0,
      gridRow: !0,
      gridRowEnd: !0,
      gridRowStart: !0,
      lineHeight: !0,
      opacity: !0,
      order: !0,
      orphans: !0,
      widows: !0,
      zIndex: !0
    };
    cn.css = function(n, e) {
      if (d(n)) {
        let t = _(n);
        return n = j(n, t), 2 > arguments.length ? this[0] && x(this[0], n, t) : n ? (e = k(n, e, t),
        this.each((function(o, i) {
          c(i) && (t ? i.style.setProperty(n, e) : i.style[n] = e);
        }))) : this;
      }
      for (let e in n) this.css(e, n[e]);
      return this;
    };
    let bn = /^\s+|\s+$/;
    cn.data = function(n, e) {
      if (!n) {
        if (!this[0]) return;
        let n = {};
        for (let e in this[0].dataset) n[e] = S(this[0], e);
        return n;
      }
      if (d(n)) return 2 > arguments.length ? this[0] && S(this[0], n) : f(e) ? this : this.each((function(t, o) {
        I(o, n, e);
      }));
      for (let e in n) this.data(e, n[e]);
      return this;
    }, o([ !0, !1 ], (function(n, e) {
      o([ "Width", "Height" ], (function(n, t) {
        cn[(e ? "outer" : "inner") + t] = function(o) {
          return this[0] ? s(this[0]) ? e ? this[0]["inner" + t] : this[0].document.documentElement["client" + t] : l(this[0]) ? $(this[0], t) : this[0][(e ? "offset" : "client") + t] + (o && e ? w(this[0], "margin" + (n ? "Top" : "Left")) + w(this[0], "margin" + (n ? "Bottom" : "Right")) : 0) : void 0;
        };
      }));
    })), o([ "Width", "Height" ], (function(n, e) {
      let t = e.toLowerCase();
      cn[t] = function(o) {
        if (!this[0]) return f(o) ? void 0 : this;
        if (!arguments.length) return s(this[0]) ? this[0].document.documentElement["client" + e] : l(this[0]) ? $(this[0], e) : this[0].getBoundingClientRect()[t] - C(this[0], !n);
        let i = parseInt(o, 10);
        return this.each((function(e, o) {
          if (c(o)) {
            let e = x(o, "boxSizing");
            o.style[t] = k(t, i + ("border-box" === e ? C(o, !n) : 0));
          }
        }));
      };
    }));
    let yn = {};
    cn.toggle = function(n) {
      return this.each((function(e, t) {
        if (c(t)) {
          (f(n) ? U(t) : n) ? (t.style.display = t.___cd || "", U(t) && (t.style.display = function(n) {
            if (yn[n]) return yn[n];
            let e = O(n);
            L.body.insertBefore(e, null);
            let t = x(e, "display");
            return L.body.removeChild(e), yn[n] = "none" === t ? "block" : t;
          }(t.tagName))) : (t.___cd = x(t, "display"), t.style.display = "none");
        }
      }));
    }, cn.hide = function() {
      return this.toggle(!1);
    }, cn.show = function() {
      return this.toggle(!0);
    };
    let xn = "___ce", wn = ".", _n = {
      focus: "focusin",
      blur: "focusout"
    }, jn = {
      mouseenter: "mouseover",
      mouseleave: "mouseout"
    };
    cn.off = function(n, e, t) {
      let i = this;
      if (f(n)) this.each((function(n, e) {
        (c(e) || l(e) || s(e)) && E(e);
      })); else if (d(n)) p(e) && (t = e, e = ""), o(v(n), (function(n, o) {
        let r = z(o), a = r[0], p = r[1], d = M(a);
        i.each((function(n, o) {
          (c(o) || l(o) || s(o)) && (E(o, d, p, e, t), a !== d && E(o, a, p, e, t));
        }));
      })); else for (let e in n) this.off(e, n[e]);
      return this;
    }, cn.on = function(n, e, t, i, a) {
      let m = this;
      if (!d(n)) {
        for (let o in n) this.on(o, e, t, n[o], a);
        return this;
      }
      return d(e) || (f(e) || u(e) ? e = "" : f(t) ? (t = e, e = "") : (i = t, t = e,
      e = "")), p(i) || (i = t, t = void 0), i ? (o(v(n), (function(n, o) {
        let p = z(o), d = p[0], f = p[1], u = M(d), h = d !== u, g = d in _n;
        u && m.each((function(n, o) {
          if (c(o) || l(o) || s(o)) {
            let n = function n(s) {
              if (h && (s.___ot ? s.___ot !== d : s.type !== d || s.target["___i" + d] && (delete s.target["___i" + d],
              s.stopImmediatePropagation(), 1))) return;
              if (s.namespace && !A(f, s.namespace.split(wn))) return;
              let l = o;
              if (e) {
                let n = s.target;
                for (;!r(n, e); ) {
                  if (n === o) return;
                  if (n = n.parentNode, !n) return;
                }
                l = n, s.___cd = !0;
              } else if (g && s.___ot === d && o !== s.target && o.contains(s.target)) return;
              s.___cd && Object.defineProperty(s, "currentTarget", {
                configurable: !0,
                get: function() {
                  return l;
                }
              }), Object.defineProperty(s, "data", {
                configurable: !0,
                get: function() {
                  return t;
                }
              });
              let c = i.call(l, s, s.___td);
              a && E(o, u, f, e, n), !1 === c && (s.preventDefault(), s.stopPropagation());
            };
            n.guid = i.guid = i.guid || pn.guid++, P(o, u, f, e, n), h && P(o, d, f, e, n);
          }
        }));
      })), this) : this;
    }, cn.one = function(n, e, t, o) {
      return this.on(n, e, t, o, !0);
    }, cn.ready = function(n) {
      let e = function() {
        return setTimeout(n, 0, pn);
      };
      return "loading" === L.readyState ? L.addEventListener("DOMContentLoaded", e) : e(),
      this;
    }, cn.trigger = function(n, e) {
      if (d(n)) {
        let e = z(n), t = e[0], o = e[1], i = M(t);
        if (!i) return this;
        let r = /^(mouse|pointer|contextmenu|drag|drop|click|dblclick)/i.test(i) ? "MouseEvents" : "HTMLEvents";
        (n = L.createEvent(r)).initEvent(i, !0, !0), n.namespace = o.join(wn), n.___ot = t;
      }
      n.___td = e;
      let t = n.___ot in _n;
      return this.each((function(e, o) {
        t && p(o[n.___ot]) && (o["___i" + n.___ot] = !0, o[n.___ot]()), o.dispatchEvent(n);
      }));
    };
    let kn = /%20/g, Sn = /\r?\n/g, In = /radio|checkbox/i;
    cn.serialize = function() {
      let n = "";
      return this.each((function(e, t) {
        o(t.elements || [ t ], (function(e, t) {
          if (!(t.disabled || !t.name || "FIELDSET" === t.tagName || /file|reset|submit|button|image/i.test(t.type) || In.test(t.type) && !t.checked)) {
            let e = q(t);
            if (!f(e)) {
              o(K(e) ? e : [ e ], (function(e, o) {
                n += function(n, e) {
                  return "&" + encodeURIComponent(n) + "=" + encodeURIComponent(e.replace(Sn, "\r")).replace(kn, "+");
                }(t.name, o);
              }));
            }
          }
        }));
      })), n.slice(1);
    }, cn.val = function(n) {
      return arguments.length ? this.each((function(e, t) {
        let i = t.multiple && t.options;
        if (i || In.test(t.type)) {
          let e = K(n) ? nn.call(n, String) : u(n) ? [] : [ n + "" ];
          i ? o(t.options, (function(n, t) {
            t.selected = 0 <= e.indexOf(t.value);
          }), !0) : t.checked = 0 <= e.indexOf(t.value);
        } else t.value = f(n) || u(n) ? "" : n;
      })) : this[0] && q(this[0]);
    }, cn.clone = function() {
      return this.map((function(n, e) {
        return e.cloneNode(!0);
      }));
    }, cn.detach = function(n) {
      return g(this, n).each((function(n, e) {
        e.parentNode && e.parentNode.removeChild(e);
      })), this;
    };
    let $n = /^\s*<(\w+)[^>]*>/, Cn = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, Un = {
      "*": B,
      tr: W,
      td: X,
      th: X,
      thead: F,
      tbody: F,
      tfoot: F
    };
    pn.parseHTML = N, cn.empty = function() {
      return this.each((function(n, e) {
        for (;e.firstChild; ) e.removeChild(e.firstChild);
      }));
    }, cn.html = function(n) {
      return arguments.length ? f(n) ? this : this.each((function(e, t) {
        c(t) && (t.innerHTML = n);
      })) : this[0] && this[0].innerHTML;
    }, cn.remove = function(n) {
      return g(this, n).detach().off(), this;
    }, cn.text = function(n) {
      return f(n) ? this[0] ? this[0].textContent : "" : this.each((function(e, t) {
        c(t) && (t.textContent = n);
      }));
    }, cn.unwrap = function() {
      return this.parent().each((function(n, e) {
        if ("BODY" !== e.tagName) {
          let n = pn(e);
          n.replaceWith(n.children());
        }
      })), this;
    }, cn.offset = function() {
      let n = this[0];
      if (n) {
        let e = n.getBoundingClientRect();
        return {
          top: e.top + G.pageYOffset,
          left: e.left + G.pageXOffset
        };
      }
    }, cn.offsetParent = function() {
      return this.map((function(n, e) {
        let t = e.offsetParent;
        for (;t && "static" === x(t, "position"); ) t = t.offsetParent;
        return t || H;
      }));
    }, cn.position = function() {
      let n = this[0];
      if (n) {
        let e = "fixed" === x(n, "position"), t = e ? n.getBoundingClientRect() : this.offset();
        if (!e) {
          let e = n.ownerDocument, o = n.offsetParent || e.documentElement;
          for (;(o === e.body || o === e.documentElement) && "static" === x(o, "position"); ) o = o.parentNode;
          if (o !== n && c(o)) {
            let n = pn(o).offset();
            t.top -= n.top + w(o, "borderTopWidth"), t.left -= n.left + w(o, "borderLeftWidth");
          }
        }
        return {
          top: t.top - w(n, "marginTop"),
          left: t.left - w(n, "marginLeft")
        };
      }
    }, cn.children = function(n) {
      return g(pn(y(b(this, (function(n) {
        return n.children;
      })))), n);
    }, cn.contents = function() {
      return pn(y(b(this, (function(n) {
        return "IFRAME" === n.tagName ? [ n.contentDocument ] : "TEMPLATE" === n.tagName ? n.content.childNodes : n.childNodes;
      }))));
    }, cn.find = function(n) {
      return pn(y(b(this, (function(t) {
        return e(n, t);
      }))));
    };
    let An = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, Mn = /^$|^module$|\/(java|ecma)script/i, Tn = [ "type", "src", "nonce", "noModule" ];
    return cn.after = function() {
      return V(arguments, this, !1, !1, !1, !0, !0);
    }, cn.append = function() {
      return V(arguments, this, !1, !1, !0);
    }, cn.appendTo = function() {
      return V(arguments, this, !0, !1, !0);
    }, cn.before = function() {
      return V(arguments, this, !1, !0);
    }, cn.insertAfter = function() {
      return V(arguments, this, !0, !1, !1, !1, !1, !0);
    }, cn.insertBefore = function() {
      return V(arguments, this, !0, !0);
    }, cn.prepend = function() {
      return V(arguments, this, !1, !0, !0, !0, !0);
    }, cn.prependTo = function() {
      return V(arguments, this, !0, !0, !0, !1, !1, !0);
    }, cn.replaceWith = function(n) {
      return this.before(n).remove();
    }, cn.replaceAll = function(n) {
      return pn(n).replaceWith(this), this;
    }, cn.wrapAll = function(n) {
      let e = pn(n), t = e[0];
      for (;t.children.length; ) t = t.firstElementChild;
      return this.first().before(e), this.appendTo(t);
    }, cn.wrap = function(n) {
      return this.each((function(e, t) {
        let o = pn(n)[0];
        pn(t).wrapAll(e ? o.cloneNode(!0) : o);
      }));
    }, cn.wrapInner = function(n) {
      return this.each((function(e, t) {
        let o = pn(t), i = o.contents();
        i.length ? i.wrapAll(n) : o.append(n);
      }));
    }, cn.has = function(n) {
      let t = d(n) ? function(t, o) {
        return e(n, o).length;
      } : function(e, t) {
        return t.contains(n);
      };
      return this.filter(t);
    }, cn.is = function(n) {
      let e = h(n);
      return on.call(this, (function(n, t) {
        return e.call(n, t, n);
      }));
    }, cn.next = function(n, e, t) {
      return g(pn(y(b(this, "nextElementSibling", e, t))), n);
    }, cn.nextAll = function(n) {
      return this.next(n, !0);
    }, cn.nextUntil = function(n, e) {
      return this.next(e, !0, n);
    }, cn.not = function(n) {
      let e = h(n);
      return this.filter((function(t, o) {
        return (!d(n) || c(o)) && !e.call(o, t, o);
      }));
    }, cn.parent = function(n) {
      return g(pn(y(b(this, "parentNode"))), n);
    }, cn.index = function(n) {
      let e = n ? pn(n)[0] : this[0], t = n ? this : pn(e).parent().children();
      return Z.call(t, e);
    }, cn.closest = function(n) {
      let e = this.filter(n);
      if (e.length) return e;
      let t = this.parent();
      return t.length ? t.closest(n) : e;
    }, cn.parents = function(n, e) {
      return g(pn(y(b(this, "parentElement", !0, e))), n);
    }, cn.parentsUntil = function(n, e) {
      return this.parents(e, n);
    }, cn.prev = function(n, e, t) {
      return g(pn(y(b(this, "previousElementSibling", e, t))), n);
    }, cn.prevAll = function(n) {
      return this.prev(n, !0);
    }, cn.prevUntil = function(n, e) {
      return this.prev(e, !0, n);
    }, cn.siblings = function(n) {
      return g(pn(y(b(this, (function(n) {
        return pn(n).parent().children().not(n);
      })))), n);
    }, pn;
  }
  function $$(n, e, t = 0) {
    return 0 === $(n).length ? void (100 < t || setTimeout((function() {
      waitToRun(n, e, t + 1);
    }), 100)) : void $(e);
  }
  function emitter(n) {
    return n = n || Object.create(null), {
      on(e, t) {
        (n[e] || (n[e] = [])).push(t);
      },
      off(e, t) {
        n[e] && n[e].splice(n[e].indexOf(t) >>> 0, 1);
      },
      emit(e, t) {
        (n[e] || []).slice().map((function(n) {
          n(t);
        })), (n["*"] || []).slice().map((function(n) {
          n(e, t);
        }));
      }
    };
  }
  function uuid() {
    let n = 0 | 46656 * Math.random(), e = 0 | 46656 * Math.random();
    return n = ("000" + n.toString(36)).slice(-2), e = ("000" + e.toString(36)).slice(-3),
    "o" + n + e;
  }
  function getKeywordFromUrl(n, e) {
    const t = (e || location.href).match(n || CommonSearchKeywordRegex);
    return t ? decodeURIComponent((n ? t[1] || t[2] : t[2] || t[4]) || "") : "";
  }
  function purifyKeyword(n) {
    return (PurifyKeywordRegex ? n.replace(PurifyKeywordRegex, "") : n).replace(/\s*:\s*$/, "").trim();
  }
  function smartCollapse(n) {
    let e = 0, t = !1;
    $(n).each((function(n, o) {
      n < collapseNum ? n >= collapseNum - 1 && (e = $(o).position().top) : t || e !== $(o).position().top ? (t = !0,
      $(o).prev("").addClass("is-collapse")) : !t && $(o).hasClass("o--collapse") && $(o).addClass("is-collapse");
    })), $(n).parent().addClass("o--collapse-box"), $(".o--collapse").off("click").on("click", (function() {
      $(this).parent().toggleClass("is-open");
    }));
  }
  function fixM3u8Playing() {
    const n = Date.now();
    let e;
    const t = setInterval((function() {
      const o = Date.now() - n;
      (e = document.querySelector("video[src]")) && e.src.endsWith(".m3u8") ? (clearInterval(t),
      setTimeout((async function() {
        if (0 === e.readyState) {
          const n = getGlobal("Hls");
          if (n || await addJs("/hls.js/0.13.2/hls.min.js"), n.isSupported()) {
            e.pause();
            const t = new n;
            t.loadSource(e.src), t.attachMedia(e), t.on(n.Events.MANIFEST_PARSED, (function() {
              e.play();
            })), isNotTop && window.parent.postMessage({
              _id: MESSAGE_ID,
              action: "log",
              from: location.href,
              origin: location.href,
              url: e.src,
              parent: !0,
              text: "Fix m3u8 play"
            }, "*");
          }
        }
      }), 1e3)) : o >= 15e3 && clearInterval(t);
    }), 100);
  }
  function isValidVideoUrl(n) {
    return isValidUrlRegex.test(n) && isVideoUrlRegex.test(n) && !isInvalidSniffUrlRegex.test(n);
  }
  function toSearchUrl(n, e) {
    return n.includes("**") ? n.replace("**", e) : /movie\.douban\.com\/tag/.test(n) ? n : n + e;
  }
  function parseUrl(n, e) {
    let t, o, i = n.trim().split(/[\s@]+/);
    const r = i.filter((function(n) {
      return /https?:\/\//.test(n);
    }));
    i = i.filter((function(n) {
      return !/https?:\/\//.test(n);
    })), r.forEach((function(n) {
      /\/\/m\.|\/m\/|\/\/msou/.test(n) ? t = n : o = n;
    }));
    let a = (isMobile ? t : o) || r[0];
    e && (a = toSearchUrl(a, e));
    const s = 0 < i.length ? i.join(" ") : a.match(/\/\/(.+\.)?([^\/]+)\.\w+\//)[2].replace(/^(\w)/, (function(n) {
      return n.toUpperCase();
    }));
    return {
      url: a,
      name: s
    };
  }
  function getSearchSourcesHtml(n, e = !0) {
    const t = Href.match(/\/\/([^\/]+)/)[1];
    return SEARCH_URLS.map((function(e) {
      const o = isVipSiteRegex.test(e.url) ? "is-vip" : isAnimeSiteRegex.test(e.url) ? "is-anime" : "";
      return e.url.includes(t) ? "" : '<a target="_blank" class="' + o + '" href="' + toSearchUrl(e.url, n) + '">' + e.name + "</a>";
    })).join("") + (e && SEARCH_URLS.length > collapseNum ? '<a class="o--collapse">➢</a>' : "");
  }
  function toggleViewport() {
    let n = document.querySelector("meta[name=viewport]");
    n || (n = document.createElement("meta"), n.name = "viewport", document.getElementsByTagName("head")[0].appendChild(n));
    const e = allowScale ? "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" : "width=device-width, initial-scale=1.0, user-scalable=yes";
    n.setAttribute("content", e), allowScale = !allowScale;
  }
  function ensureArray(n) {
    return Array.isArray(n) ? n : n.trim().split(/[\n\s]*\n+[\n\s]*/);
  }
  function toUrlRegex(n) {
    return new RegExp(n.map((function(n) {
      return n.replace(/.+\/\/|\/.+/g, "").replace(/\./g, "\\.");
    })).join("|"));
  }
  function insertSearchAddon(n, e, t = "after", o = 0) {
    const i = Href.includes("m.douban.com/search");
    if (!n || !i && 0 < $(".o--jump").length || 20 < o) return;
    let r, a = !1;
    return playerTitle = n, "string" == typeof e && (a = e.startsWith("-"), a && (e = e.slice(1))),
    r = $(e), 0 === r.length ? void setTimeout((function() {
      insertSearchAddon(n, e, t, o + 1);
    }), 500) : (r[a ? "last" : "first"]()[t]('<div class="o--jump">' + getSearchSourcesHtml(purifyKeyword(n), !i) + "</div>"),
    void (!i && smartCollapse(".o--jump a")));
  }
  let Href = location.href;
  if (Is(/cookie.html/) || Is(/m\.le\.com/) && IsNot(/m.le.com\/search|so.le.com\/s|\.le\.com\/(ptv\/vplay\/|vplay_)/)) return;
  const isTop = window.top === window.self, isNotTop = !isTop;
  if (isTop && Is(/vwecam.tc.qq.com|\.titan.mgtv.com/) && !document.querySelector("video")) return void (IsNot(/miying/) && (location.href = Href + (Href.includes("?") ? "&" : "?") + "miying=" + (new Date).getFullYear()));
  const PLUGIN_ATTR = "miying", PLUGIN_NAME = "觅影", OO_SIGN = "(o˘◡˘o)", $html = document.getElementsByTagName("html")[0];
  if ($html.getAttribute("miying") === PLUGIN_NAME) return;
  $html.setAttribute("miying", PLUGIN_NAME);
  const _D = !1, VERSION = "20.4.13-1", isGM = "undefined" != typeof GM && "undefined" != typeof unsafeWindow;
  let logsDom;
  const screenWidth = window.screen.width, isMobile = 600 >= screenWidth || /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || !1, hasUnsafeWindow = "undefined" != typeof unsafeWindow, storePrefix = "觅影.", Store = {
    get: (n, e = null) => parseStoreData(window.localStorage.getItem(storePrefix + n), e),
    set(n, e = null) {
      window.localStorage.setItem(storePrefix + n, JSON.stringify(e));
    },
    remove(n) {
      window.localStorage.removeItem(storePrefix + n);
    }
  }, GlobalStore = {
    get: (n, e = null) => isGM ? parseStoreData(GM_getValue(storePrefix + n, e), e) : Store.get(n, e),
    set(n, e = null) {
      isGM ? GM_setValue(storePrefix + n, JSON.stringify(e)) : Store.set(n, e);
    },
    remove(n) {
      isGM ? GM_deleteValue(n) : Store.remove(n);
    }
  }, $ = get$(), MAX_Z_INDEX = 2147483647, MESSAGE_ID = PLUGIN_NAME, PurifyStyle = "display: none !important;visibility: hidden !important;width: 0 !important;height: 0 !important;max-width: 0 !important;max-height: 0 !important;overflow: hidden !important;position: absolute !important;left: -99999px !important;opacity: 0 !important;pointer-events: none !important;", PlayerCover = "https://p.pstatp.com/origin/ff460000f53068309d77", isOnlyDownloadVideoUrlRegex = /.titan.mgtv.com/, isVideoUrlRegex = /\.(mp4|m3u8|3gp|wmv|flv|avi|rmvb|m4v|ts)|m3u8play.php/, shortVideoUrlRegex = /\/\/([^\/]+)\/(.*\/)?([^\/]+)\.(mp4|m3u8|3gp|wmv|flv|avi|rmvb|m4v|ts)/, shortVideoUrlLoseRegex = /\/\/([^\/]+)\/(.*[^\/])\/?(mp4|m3u8|3gp|wmv|flv|avi|rmvb|m4v|ts)/, isInvalidSniffUrlRegex = /btrace.video.qq.com|qzonestyle.gtimg.cn|img.baidu.com|dplayer\/\w+.mp4|vip.fwwmy1.cn|vwecam.gtimg.com|com-t-iqiyi.com|hz189cloud.oos-hz.ctyunapi.cn|(titan.mgtv.com|cdn.oss-cn.aliyuncs.com.gms-lighting.com).+m3u8|\/\/\//, isValidUrlRegex = /^(http|\/\/)/, PurifyKeywordRegex = /.*《|》.*|\s*第.{1,3}[季集][\s\d]*$|\s+\d{2,3}\s*$/g, CommonSearchKeywordRegex = /(wd|key|keyword|searchword|kw|q)=([^&\?\/\.-]+)|(search\/|seacher-|q_)([^&\?\/\.-]+)/i, collapseNum = isMobile ? 8 : 12;
  let ooPlayUrl = "", SEARCH_URLS = "豆瓣  https://search.douban.com/movie/subject_search?search_text=**  https://m.douban.com/search/?type=movie&query=**\n\n腾讯  https://m.v.qq.com/search.html?act=0&keyWord=**   https://v.qq.com/x/search/?q=**\n\n爱奇艺  https://m.iqiyi.com/search.html?source=default&key=**  https://so.iqiyi.com/so/q_**\n\n优酷  https://search.youku.com/search_video?keyword=**  https://so.youku.com/search_video/q_**\n\n芒果  https://m.mgtv.com/so?k=**  https://so.mgtv.com/so?k=**\n\n哔哩哔哩  https://m.bilibili.com/search.html?keyword=**  https://search.bilibili.com/all?keyword=**\n\n1905  https://vip.1905.com/Search?q=**\n\nPPTV  https://sou.pptv.com/s_video?kw=**  https://msou.pptv.com/s_video/pg_result?keyword=**\n\n搜狐  https://m.tv.sohu.com/upload/h5/m/mso.html?key=**  https://so.tv.sohu.com/mts?wd=**\n\n乐视  https://m.le.com/search?wd=**  https://so.le.com/s?wd=**\n\n1080  https://www.k1080.net/vodsearch/-------------.html?wd=**\n\n1090  https://1090ys.com/?c=search&sort=addtime&order=desc&page=1&wd=**\n\n完美  https://www.wanmeikk.me/so/-------------.html?wd=**\n\n云播  https://m.yunbtv.com/vodsearch/-------------.html?wd=**  https://www.yunbtv.com/vodsearch/-------------.html?wd=**\n\n飞极速  http://m.feijisu8.com/search/**  http://feijisu8.com/search/**\n\n三天  http://www.3days.cc/index.php/vod/search.html?wd=**\n\n疯狗  https://m.fenggoudy.com/vod-search-wd-**.html  https://fenggoudy.com/vod-search-wd-**.html\n\n真不卡  https://www.zhenbuka.com/searcih/-------------/?wd=**\n\n碟影  https://dvdhd.me/search.php?searchword=**\n\n次元  https://cyloli.com/vodsearch/**----------1---/\n\n妮可  http://www.nicotv.me/video/search/**.html\n\n哆咪  http://www.duomimh.com/dongmansearch.html?wd=**\n\n柠萌  https://www.ningmoe.com/search?keyword=**";
  const isVipSiteRegex = /(v\.qq|tv\.sohu|iqiyi|youku|mgtv|bilibili|1905|pptv|le)\.(com|cn)/, isAnimeSiteRegex = /(cyloli|nicotv|duomimh|ningmoe)\.(com|me)/, ADDONS = [ {
    name: "哔哩哔哩",
    match: ".bilibili.com",
    search: {
      match: /\/search|search\./,
      jump: "#all-list | append, .index__board__src-search-board-"
    },
    play: {
      match: /\/bangumi\/play\//,
      jump() {
        let n = 0;
        const e = setInterval((function() {
          if (0 < $(".ep-info-image img, .media-cover img").length) {
            const n = $(".media-title, .ep-info-title").eq(0).text();
            n && (clearInterval(e), setTimeout((function() {
              insertSearchAddon(n, ".media-wrapper, .ep-list-pre-wrapper");
            }), 500));
          }
          100 < n++ && clearInterval(e);
        }), 100);
      }
    },
    hide: ".index__openAppBtn__src-commonComponent-topArea-, .index__container__src-commonComponent-bottomOpenApp-, .bili-app, .recom-wrapper, .b-footer, .open-app-bar, .open-app-float, .more-review-wrapper"
  }, {
    name: "腾讯视频",
    match: "v.qq.com",
    search: {
      match: /\/search/,
      jump: "#result, .wrapper_main > .mod_pages"
    },
    play: {
      match: /\/(cover|play|x\/cover|x\/page|x\/play|x\/m\/cover|x\/m\/page|x\/m\/play)/,
      vip: "#vip_title, .U_box_bg_a, .player_headline, .mod_video_info",
      title: ".mod_video_info .video_title, ._main_title, .player_title",
      fixUrl(n) {
        if (n.includes("cid=")) {
          const e = n.match(/cid=(\w+)/)[1];
          let t = n.match(/vid=(\w+)/);
          return t = t ? "/" + t[1] : "", "https://v.qq.com/x/cover/" + e + t + ".html";
        }
        return n.includes("/x/cover") ? n.replace(/\.html.*/, ".html") : n;
      }
    },
    hide: '.mod_source, .video_function, .mod_promotion, #vip_privilege, #vip_activity, .U_bg_b, .btn_open_v, .btn_openapp, #vip_header, .btn_user_hd, .mod_sideslip_privileges, .mod_game_rec, .mod_source, .mod_promotion, .mod_sideslip_h, .btn_open, .btn_pay, .mod_box_lastview, .mod_vip_popup, .mod_vip_popup + .mask_layer, txpdiv[data-role="hd-ad-adapter-interactivelayer"], .mod_ad, .tvp_app_bar',
    css: "body, #vip_title {padding-bottom: 0 !important;}.mod_episodes_numbers.is-vip .item {width: auto;padding: 0 1em;}.U_html_bg .container {padding-bottom: 30px;}.mod_play .mod_player_viptips .btn_try {left: 30%;}"
  }, {
    name: "爱奇艺",
    match: ".iqiyi.com",
    search: {
      match: /\/search|so\.iqiyi/,
      jump: "-.m-box, .search-con-page"
    },
    play: {
      match: /\/v_/,
      vip: 'div[name="m-videoInfo"], #block-C',
      title: "#widget-videotitle, .video-title, .c-title-link, .player-title a",
      fixUrl: !0
    },
    hide: '.m-iqyDown, .header-login + div, .m-video-action, div[name="m-vipRights"], div[name="m-extendBar"], .m-iqylink-diversion, .m-iqylink-guide, .c-openVip, .c-score-btn, .m-videoUser-spacing, .m-pp-entrance, .m-hotWords-bottom, div[template-type="ALBUM"] .m-player-tip, .iqp-box-integral, body > div[style], .btn-ticket, .btn-yuyue, .btn-download, .m-iqyDown',
    css: '.page_play {padding-bottom: 0;}div[name="m-videoInfo"] {padding-top: 1em;}.m-box-items .o--album-item {border-radius: 0.05em;background-color: #e9ecef;color: #495057;padding: 0.5em 1em;display: inline-flex;justify-content: center;align-items: center;margin: 0.25em;font-weight: bold;}.m-video-player #o--player-iframe {padding-top: 56.25%;top: 50%;transform: translateY(-50%);}.qy-header .header-wrap {z-index: ' + MAX_Z_INDEX + ";}",
    js() {
      let n = [], e = ($('[name="apple-itunes-app"]').attr("content") || "").match(/aid=\d{2,}/);
      if (e) {
        fetch("https://pcw-api.iqiyi.com/albums/album/avlistinfo?page=1&size=9999&" + e[0]).then((function(n) {
          return n.json();
        })).then((function(e) {
          n = e.data.epsodelist;
        }));
        let t = 0;
        setInterval((function() {
          let e = +($(".qy-episode-num .select-item.selected .select-link").text() || 0);
          if (e && e !== t) {
            t = e;
            let o = n[t - 1];
            if (o) {
              let n = o.playUrl.replace(/https?:/, location.protocol);
              if (n !== ooPlayUrl) {
                const e = ooPlayUrl || location.href;
                ooPlayUrl = n;
                const t = ($(".qy-episode-num .select-item.selected .icon-tr img").attr("src") || "").includes("-pre-");
                E.emit("url.change", {
                  oldUrl: e,
                  newUrl: n,
                  autoPlay: !t
                });
              }
            }
          }
        }), 200);
      }
    }
  }, {
    name: "优酷",
    match: ".youku.com",
    search: {
      match: /soku.com\/m.+q=|youku.com\/search_video/,
      jump: '#bpmodule-main, .yk_result, div[class^="pagination-box"], .yk-footer | before'
    },
    play: {
      match: /youku\.com\/[av]/,
      vip: ".h5-detail-info, .player-title",
      title: ".player-title .subtitle a, .module-name, .anthology-title-wrap .title, .title-link",
      fixUrl: !0
    },
    hide: ".h5-detail-guide, .h5-detail-ad, .brief-btm, .smartBannerBtn, .cmt-user-action, #right-title-ad-banner, .Corner-container",
    css: "#bpmodule-playpage-lefttitle {height: auto !important;}"
  }, {
    name: "土豆",
    match: ".tudou.com",
    play: {
      match: /\/v\//,
      vip: ".play-video-desc, .td-play__baseinfo",
      title: ".td-listbox__title, .video-desc-title",
      fixUrl: !0
    },
    hide: ".video-player-topbar, .td-h5__player__appguide, #tudou-footer, .dropdown__panel__con"
  }, {
    name: "芒果",
    match: ".mgtv.com",
    search: {
      match: /\/so/,
      jump: "#paginator, .hitv_page, -.result-box .media",
      keyword: /k[-=]([^&\?\/\.]+)/
    },
    play: {
      match: /\/[bl]\//,
      vip: [ ".xuanji | before", ".v-panel-box, .control-left" ],
      title: ".v-panel-title, .vt-txt",
      fixUrl: !0
    },
    hide: ".ad-banner, .video-area-bar, .video-error .btn, .m-vip-list, .m-vip-list + div:not([class]), .toapp, .video-comment .ft, .mg-app-swip",
    css: ".m-player-open .control-left {float: unset !important;}"
  }, {
    name: "搜狐",
    match: /(film|tv)\.sohu\.com/,
    search: {
      match: /(key|wd)=/,
      jump: ".ssMore | before, .select-container | before"
    },
    play: {
      match: /\/(v|album\/|phone_play_film|\d+\/n\d+.shtml)/,
      vip: ".title-wrap, .videoInfo, .tw-info, .player-detail, .movie-info-content",
      title: "#vinfobox h2, .t-info, .movie-t h3",
      fixUrl(n) {
        if (/phone_play_film.+channeled=/.test(n)) {
          const e = n.match(/channeled=(\w+)/)[1];
          return "https://film.sohu.com/album/" + n.match(/aid=(\w+)/)[1] + ".html?channeled=" + e;
        }
        return n;
      }
    },
    hide: ".actv-banner, .btn-xz-app, .twinfo_iconwrap, .btn-comment-app, #ad_banner, .advertise, .main-ad-view-box, .foot.sohu-swiper, .app-star-vbox, .app-guess-vbox, .main-rec-view-box, .app-qianfan-box, .comment-empty-bg, .copyinfo, .ph-vbox, .btn_m_action, .btn-xz-app, #film_top_banner, .btn-comment-app",
    css: ".comment-empty-txt {margin-bottom: 0;}.app-view-box + footer {padding: 0;opacity: 0.5;}#sohuplayer #menu {z-index: " + MAX_Z_INDEX + ";}"
  }, {
    name: "乐视",
    match: ".le.com",
    search: {
      match: /\/search|so.le.com\/s/,
      jump: ".column_tit | before, .Relate | before"
    },
    play: {
      match: /\/(ptv\/vplay\/|vplay_)/,
      vip: ".introduction_box, .briefIntro_left .info_list",
      title: ".briefIntro_info .info_tit, #j-introduction h2",
      fixUrl: !0
    },
    hide: ".gamePromotion, .gamePromotionTxt, #j-leappMore, .lbzDaoliu, .arkBox"
  }, {
    name: "咪咕",
    match: "miguvideo.com",
    search: {
      match: /search.html/,
      jump: ".search-pagination, .search-main",
      keyword: /keywords=([^&\?\/\.]+)|\?.*#([^&\?\/\.]+)/
    },
    play: {
      match: /detail.html/,
      vip: ".playerFooter, .programgroup",
      title: ".left-box .title, .episodeTitle, .video_title"
    },
    hide: '.group-item[name*="广告"], .openClient'
  }, {
    name: "PPTV",
    match: ".pptv.com",
    search: {
      match: /sou.+(kw|keyword)=/,
      jump: ".pagination, .zhengpian-box | append"
    },
    play: {
      match: /\/show\//,
      vip: ".m .cf, .vod-tit, .vod-intor",
      title: "#video-info h1, .vod-tit-in span, .tit",
      fixUrl: !0
    },
    hide: '.w-video-vastad, #video-download-game, div[class*="openapp"], div[class*="side-adv"], div[id*="afp_"], div[id*="-afp"], iframe[src*="/game/"], .afpPosition, .download-iconbar'
  }, {
    name: "华数",
    match: "wasu.cn",
    search: {
      match: /Search\/.+k=/,
      jump: "#topVod"
    },
    play: {
      match: /[pP]lay\/show\//,
      vip: ".movie_title",
      title: ".movie_title h2",
      fixUrl: !0
    },
    hide: 'div[id*="BAIDU"], .player_menu_con, body > div[style*="fixed"]'
  }, {
    name: "1905",
    match: "1905.com",
    search: {
      match: /\/search/i,
      jump: ".pagination, #new_page"
    },
    play: {
      match: /\/play/,
      vip: ".playerBox-info, #movie_info, .player-nav",
      title: "#movie_info .infoInner .title, .movie-title, .tv_title",
      fixUrl: !0
    },
    hide: "#app_store, .openMembershipBtn, body > div[id] > iframe, .pv2-advertisement, .open-app",
    css: "#movie_info {margin-top: 1em;}"
  }, {
    name: "1080影视",
    match: "k1080.net",
    search: {
      match: /wd=/,
      jump: ".myui-page"
    }
  }, {
    name: "1090影视",
    match: "1090ys.com",
    search: {
      match: /c=search/,
      jump: ".stui-page, .stui-pannel"
    },
    hide: ".container ~ *[id]",
    css: "body {padding-bottom: 0 !important;}"
  }, {
    name: "完美看看",
    match: "wanmeikk.me",
    search: {
      match: /\/so\//,
      jump: ".stui-page, .stui-pannel"
    },
    hide: ".container ~ *[id]"
  }, {
    name: "云播",
    match: "yunbtv.com",
    search: {
      match: /\/vodsearch/,
      jump: ".pager",
      keyword: ".breadcrumb font"
    }
  }, {
    name: "飞极速",
    match: "feijisu8.com",
    search: {
      match: /\/search/,
      jump: "#result"
    },
    hide: ".index-top ~ div, .v-top ~ div, .footer ~ div, .footer ~ brde, body > div:not([class])"
  }, {
    name: "三天",
    match: "3days.cc",
    search: {
      match: /wd=/,
      jump: ".page-num"
    }
  }, {
    name: "疯狗",
    match: "fenggoudy.com/",
    search: {
      match: /s=|search-wd/,
      jump: "#contentList, .pager",
      keyword() {
        const n = location.href.match(/wd-([^\.]+)/);
        return n ? n[1] : document.querySelector('meta[name="keywords"]').getAttribute("content");
      }
    },
    hide: "body > div[id], body > div[style]"
  }, {
    name: "真不卡",
    match: "zhenbuka.com",
    search: {
      match: /\/searcih/,
      jump: ".stui-page, .stui-pannel"
    },
    hide: "body > div[id], .stui-player__item ~ div[style]"
  }, {
    name: "碟影",
    match: "dvdhd.me",
    search: {
      match: /\/search/,
      jump: ".list-content"
    },
    hide: "body > brde, body > div[id], body > a"
  }, {
    name: "哆咪",
    match: "duomimh.com",
    search: {
      match: /wd=/,
      jump: ".myui-page"
    }
  }, {
    name: "次元",
    match: "cyloli.com",
    search: {
      match: /\/vodsearch/,
      jump: "#content | append, .pagebox",
      keyword() {
        const n = location.href.match(/vodsearch\/([^-]+)/);
        return n ? n[1] : document.querySelector(".main-head .title b, .re-info b").textContent;
      }
    }
  }, {
    name: "妮可",
    match: /nicotv\.(me|club)/,
    search: {
      match: /\/search/,
      jump: ".pager"
    },
    hide: "body > brde, body > div[id], .ff-ads"
  }, {
    name: "柠萌",
    match: "ningmoe.com",
    search: {
      match: /\/search/,
      jump: ".load_more | before, .home_content | append"
    },
    css: ".o--pc .home_content {max-width: 1024px !important;}"
  } ], E = emitter();
  let allowScale = !0;
  if (E.on("log", (function() {})), E.on("url.change", (function({oldUrl: n, newUrl: e, autoPlay: t}) {
    const o = ADDONS.find((function(e) {
      return e.play && e.play.vip && Is(e.play.match, n);
    })), i = ADDONS.find((function(n) {
      return n.play && n.play.vip && Is(n.play.match, e);
    }));
    try {
      addonGo();
    } catch (n) {}
    o && i && E.emit("playurl.change", {
      autoPlay: t
    });
  })), IsNot(/douban\.com/) && isMobile && SEARCH_URLS && (SEARCH_URLS = "选影视  https://movie.douban.com/tag/#/\n" + SEARCH_URLS),
  SEARCH_URLS = ensureArray(SEARCH_URLS).map((function(n) {
    const e = parseUrl(n);
    return {
      url: e.url,
      name: e.name
    };
  })), $("html").addClass(isMobile ? "o--m" : "o--pc"), Is(/=http/), window.addEventListener("message", (function(n) {
    const e = n.data;
    e && e._id === MESSAGE_ID && (isNotTop && e.parent ? (e.from = location.href, window.parent.postMessage(e, "*")) : isTop && e.action && E.emit(e.action, e));
  })), isNotTop) {
    if (Is(/m1907\.cn/)) {
      addCss("#s-player + .show > div[title],#s-controls + div > div:nth-child(n+5):not(:last-child){" + PurifyStyle + "}");
      let n = 0;
      const e = setInterval((function() {
        (document.querySelector("#s-player + .show") || 30 < n++) && (clearInterval(e),
        document.querySelector("#s-controls > div img + span").click());
      }), 100);
      return void (window.alert = function() {});
    }
    const n = document.body.clientWidth, e = 100 > n, t = document.body.clientHeight, o = {
      isSniffIframe: e,
      docW: n,
      docH: t
    };
    e ? function(n) {
      location.href === PlayerCover && window.top.postMessage({
        pageInfo: n,
        _id: MESSAGE_ID,
        action: "enable.sniff",
        from: location.href
      }, "*");
      const e = Date.now(), t = setInterval((function() {
        const o = Date.now() - e;
        if (0 < $("video source[src], video[src]").length) {
          clearInterval(t), $("video, audio").each((function(n, e) {
            e.muted = !0, e.pause();
            const t = Date.now(), o = setInterval((function() {
              const n = Date.now() - t;
              e.muted = !0, e.pause(), n > 4e3 && clearInterval(o);
            }), 60);
          }));
          const e = $("video source[src]").eq(0).attr("src") || $("video[src]").eq(0).attr("src") || "";
          return e && $("video source[src], video[src]").remove(), /^\/[^\/]/.test(e) && (e = location.origin + e),
          void (isValidVideoUrl(e) ? window.parent.postMessage({
            pageInfo: n,
            usedTime: o,
            _id: MESSAGE_ID,
            action: "play.video",
            from: location.href,
            origin: location.href,
            url: e,
            parent: !0
          }, "*") : window.parent.postMessage({
            pageInfo: n,
            usedTime: o,
            text: "NOT MATCH VIDEO URL",
            _id: MESSAGE_ID,
            action: "log",
            from: location.href,
            origin: location.href,
            url: e,
            parent: !0
          }, "*"));
        }
        const i = 0 < $("iframe[src]").length;
        if (4e3 <= o && i) return void clearInterval(t);
        const r = 0 < $("video").length;
        (o >= 3e4 || 2e3 <= o && r) && (clearInterval(t), window.parent.postMessage({
          pageInfo: n,
          usedTime: o,
          hasVideo: r,
          hasIframe: i,
          _id: MESSAGE_ID,
          action: "sniff.fail",
          from: location.href,
          origin: location.href,
          parent: !0
        }, "*"));
      }), 100);
    }(o) : fixM3u8Playing(o);
  } else if (Is(/beijixs\.cn.*url=http/)) if (addCss("body > form {position: absolute !important;left: 0 !important;right: 0 !important;top: 0 !important;bottom: 0 !important;background: #eee8d3 !important;z-index: " + MAX_Z_INDEX + ' !important;}div,input,form {max-width: 100% !important;}form #divcss5 {height: auto;padding: 0 1em;border: none;width: auto;}.o--pc form #divcss5 {max-width: 570px !important;}.o--m h5 input[type="text"] {width: 90% !important;margin: .5em 0 !important;padding: 0 .5em !important;}.o--fail {height: auto !important;}.o--fail > div {text-align: center;border-top: 1px solid #495057;border-bottom: 1px solid #495057;padding: 1em;color: #d9480f;font-weight: bold;font-size: 16px;background-color: #fff4e6;}.o--fail > div > div + div {margin-top: 1em;}.o--m .video-js {width: 100% !important;height: 100vh !important;}'),
  isMobile && toggleViewport(), document.querySelector("#TextBox1").value) {
    $("#form1").prepend($(".video-js").parent());
    let n = 0;
    const e = setInterval((function() {
      const t = document.querySelector("video");
      if (t && 390 > t.duration) {
        t.pause();
        const n = document.querySelector("#TextBox2").value || "", o = document.querySelector("video");
        o.classList.add("o--fail"), o.innerHTML = "<div><div>解析失败</div>" + (n ? "<div>" + n + "</div>" : "") + "</div>",
        clearInterval(e);
      }
      100 < n++ && clearInterval(e);
    }), 100);
  } else {
    let n = Href.split("url=")[1];
    if (n) {
      n = decodeURI(n), document.querySelector("#TextBox1").value = n;
      const e = document.querySelector("#Button1");
      if (e) {
        const n = document.querySelector(".video-js");
        n.style.display = "none !important", e.click();
      }
    }
    let e = 0;
    const t = setInterval((function() {
      const n = document.querySelector("video");
      n && 360 > n.duration ? n.pause() : n.play(), 100 < e++ && clearInterval(t);
    }), 100);
  } else {
    if (Is(/m\.tv\.sohu\.com\/phone_play_film.+vid=/)) return location.href = Href.replace("phone_play_film", "v" + Href.match(/vid=(\d+)/)[1] + ".shtml");
    if (Is(/search\.douban\.com\/movie\//)) addCss("#dale_movie_subject_search_bottom,#dale_movie_subject_search_top_right,#dale_movie_subject_top_right,#dale_movie_subject_bottom_super_banner,#dale_movie_subject_middle_right {" + PurifyStyle + "}.o--jump {padding-left: 1em;}.o--jump a {display: inline-flex !important;align-items: center;border-radius: 4px;font-size: 0.75em;height: 2em;justify-content: center;line-height: 1.5;padding-left: 0.75em;padding-right: 0.75em;white-space: nowrap;background-color: #effaf3;color: #257942;margin-top: 0.5em;margin-right: 0.5em;cursor: pointer;}"),
    $((function() {
      $("#icp").html(OO_SIGN), $(".gemzcp").each((function(n, e) {
        const t = $(".title", e).text();
        $(e).append('<p class="o--jump">' + getSearchSourcesHtml(t) + "</p>");
      }));
    })); else if (Is(/m\.douban\.com\/search\/\?.*type=movie/)) addCss("#TalionNav,.search-results-modules-name {" + PurifyStyle + "}.search-module {margin-top: 0;}.search-results img {width: 80px;}.search-results {padding-bottom: 10px;}.search-results li a {display: flex;align-items: center;}.search-results img {height: 100%;padding: 0;margin: 5px 0;border: 2px solid;border-image: linear-gradient(to bottom, #2b68c4 0%,#cf2d6e 100%)1;}"),
    $((function() {
      $("#more-search").append("    " + OO_SIGN), $(".subject-info").each((function(n, e) {
        insertSearchAddon($(".subject-title", e).text(), e, "append");
      })), $(".search-hd input").on("keyup", (function(n) {
        13 === n.keyCode && (n.preventDefault(), location.href = "/search/?query=" + n.target.value + "&type=movie");
      })), $(".search-hd .button-search").attr("id", OO_SIGN), $(".search-hd .button-search").on("click", (function(n) {
        n.preventDefault();
        const e = $(".search-hd input").val();
        location.href = "/search/?query=" + e + "&type=movie";
      }));
    })); else if (Is(/movie.douban.com\/subject\//)) addCss("#dale_movie_subject_search_bottom,#dale_movie_subject_search_top_right,#dale_movie_subject_top_right,#dale_movie_subject_bottom_super_banner,#dale_movie_subject_middle_right {" + PurifyStyle + "}"),
    $((function() {
      $("#icp").html(OO_SIGN);
      const n = purifyKeyword($("title").text().replace("(豆瓣)", "").trim());
      $("#info").append('<div><span class="pl">在线观看:</span><span><span> </span>' + SEARCH_URLS.filter((function(n) {
        return !/douban\.com/.test(n.url);
      })).map((function(e) {
        return "<span><a " + (isMobile ? "" : 'target="_blank" ') + 'href="' + toSearchUrl(e.url, n) + '">' + e.name + "</a>";
      })).join(" / </span>") + "</span></span></div>");
    })); else if (Is(/m\.douban\.com\/movie\/subject\//)) addCss(".score-write,a[href*='to_app']:not(.sub-honor):not(.sub-cover),a[href*='doubanapp'],div[id*='BAIDU'],div[id*='google'],section + .center,.bottom_ad_download,.sub-vendor,.to_pc,.TalionNav-static,.sub-detail .mark-movie,.sub-detail .mark-tv,.subject-banner,.bottom_ad_download,.cover-count,#google_esf,.adsbygoogle,.Advertisement,.TalionNav-primary .nav-btns.cancel {" + PurifyStyle + '}.sub-info .sub-cover {display: block !important;}.TalionNav-primary {position: relative !important;}.subject-comments,.subject-reviews {margin-bottom: 0 !important;}.TalionNav .TalionNav-primary .search-box {width: 220px;flex: 220px 0 0;animation: none;}.sub-original-title {padding: 0.25em 0;}._V_sign {font-size: 0.85em;opacity: 0.15;text-align: center;padding-bottom: 1em;}._V_source, .sub-score + .sub-score {margin-top: 1.5em !important;color: #fff;}._V_source .sub-score .sub-content {display: block;}._V_source .sub-score a {padding: 0.25em 0.5em;line-height: 1.5;margin: 0 0.15em;border: 1px solid rgba(255,255,255,0.2);font-size: 1.05em;font-weight: bold;letter-spacing: 1px;margin-top: 0.5em;display: inline-block;color: #ffe8cc;background: rgba(239, 238, 238, 0.05);border-radius: 4px;}#TalionNav {display: none;}#TalionNav .logo {background: none;font-size: 1em;display: inline-flex;justify-content: center;align-items: center;color: #dee2e6;}.search-box:not(.on-search) {opacity: 0.7;}#channel_tags {margin-bottom: 10px;}.subject-header-wrap .sub-detail {display: flex;flex-direction: column;justify-content: space-around;}#channel_tags {margin-top: 10px;}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-results-button,input[type="search"]::-webkit-search-results-decoration {-webkit-appearance:none;}'),
    $((function() {
      $(".movie-reviews .show-all").after('<div class="_V_sign"><a href="https://gitee.com/ecruos/oo">豆瓣·净化 ' + OO_SIGN + "</a></div>"),
      $("section + .center").each((function(n, e) {
        $(e).remove();
      })), $(".subject-header-wrap").after($("#TalionNav")), $("#TalionNav").css("display", "block"),
      $("#TalionNav .logo").html(OO_SIGN).attr("href", "https://movie.douban.com/tag/#/"),
      $(".search-box").remove(), $(".TalionNav-primary .logo").after('<div class="search-box"><input class="search-input" type="search" placeholder="搜索"></div>'),
      $(".search-input").on("focus", (function() {
        $(this).parent().addClass("on-search");
      })).on("blur", (function() {
        $(this).parent().removeClass("on-search");
      })), $(".search-input").on("keyup", (function(n) {
        13 === n.keyCode && (n.preventDefault(), location.href = "/search/?query=" + n.target.value + "&type=movie");
      }));
      const n = purifyKeyword($(".sub-title").text().trim());
      0 === $("._V_source").length && $(".subject-header-wrap").append('<div class="_V_source subject-mark"><div class="sub-score"><div class="sub-trademark">在线观看</div><div class="sub-content">' + getSearchSourcesHtml(n, !1) + "</div></div></div>"),
      setTimeout((function() {
        $(".subject-intro .bd p").get(0).click(), $(".sub-cover").attr("href", "#"), $("#subject-honor-root a").attr("href", "#");
      }), 1e3);
      let e = 0;
      const t = setInterval((function() {
        $("body > ins, body > iframe, .adsbygoogle").remove(), 5 < e++ && clearInterval(t);
      }), 500);
      !function n() {
        const e = $("#subject-header-container").attr("style");
        if (e) {
          const n = e.match(/:\s*([^;]+);?/)[1], t = n.replace(")", ", 0)");
          try {
            addCss(".sub-cover::before {background: -webkit-linear-gradient(bottom, " + n + " 0%, " + t + " 5%), -webkit-linear-gradient(right, " + n + " 0%, " + t + " 5%),-webkit-linear-gradient(top, " + n + " 0%, " + t + " 5%), -webkit-linear-gradient(left, " + n + " 0%, " + t + ' 5%);content: "";bottom: 0;position: absolute;left: 0;right: 0;top: 0;width: 102px;height: 142px;border-radius: 4px;}');
          } catch (n) {}
        } else setTimeout((function() {
          n();
        }), 100);
      }();
    })); else if (isMobile && Is(/movie\.douban\.com\/tag\/#/)) addCss(prefixCss(".category {width: 100%;white-space: nowrap;overflow-x: auto;}.tags {margin-bottom: 1em !important;}.checkbox__input {vertical-align: text-top;}.tag-nav {margin: 0 auto;font-size: 12px;width: 100%;}.tag-nav .tabs, .tag-nav .check {display: flex;justify-content: space-around;width: 100%;}.tag-nav .tabs a {padding: 7.5px 5px 5px;}.tabs a:not(.tab-checked) {border: 1px solid #dfdfdf;}.tabs .tab-checked {border: 1px solid #258dcd!important;}.tab-checked:after {display: none;}.checkbox, .range {margin-right: 5px;}.check {float: none;margin-top: 5px;}.list-wp, .item .cover-wp {overflow: unset;}a img {padding: 2px;border-radius: 5px;background: linear-gradient(to bottom, #2b68c4 0%,#cf2d6e 100%);}a.item {width: " + parseInt(100 / 3) + "%;text-align: center;}a.item p {padding-right: 0;}a.item .cover-wp {height: auto;padding: 0 0.5em;display: flex;justify-content: center;align-items: center;}a.item .cover-wp:after, .poster:after {display: none;}a.item .pic img {width: 100%;height: " + parseInt(4 * screenWidth / 3 / 3) + "px;max-width: 150px;object-fit: cover;}.tag-nav .range-dropdown {left: 0 !important;width: auto !important;right: 0 !important;top: -4em !important;}.more {margin: 0 1em 0.5em !important;}", ".oo") + "body > *:not(.oo) {" + PurifyStyle + "}#app .article, .article.oo {position: absolute;top: 0;left: 0;right: 0;padding: 10px 6px;transition: all 0.8s;}.category::-webkit-scrollbar {width: 1px;height: 1px;background-color: rgba(223, 223, 223, 0.25);}.category::-webkit-scrollbar-track {background: transparent;border: 0px none #ffffff;border-radius: 50px;}.category::-webkit-scrollbar-thumb {-webkit-box-shadow: inset 0 0 2.5px rgba(0, 0, 0, 0.1);box-shadow: inset 0 0 2.5px rgba(0, 0, 0, 0.1);border-radius: 2.5px;background-color: rgba(223, 223, 223, 0.25);opacity: 0.7;transition: opacity ease-in-out 200ms;}.category::-webkit-scrollbar-thumb:hover {opacity: 1;background-color: rgba(223, 223, 223, 0.25);}.o--douban-search {position: relative;display: flex;margin-bottom: 5px;}.o--douban-search .inp {height: 34px;text-align: center;cursor: text;width: 90%;border-top: 1px solid #dedede;border-left: 1px solid #dedede;border-top-left-radius: 3px;border-bottom-left-radius: 5px;}.o--douban-search .inp input {background: #fff;width: 96%;margin: 0;text-align: left;height: 30px;padding-left: 10px;outline: none;}.o--douban-search input {-webkit-appearance: none;border: none;background: transparent;}.o--douban-search .inp-btn {position: relative;width: 37px;height: 34px;}.o--douban-search .inp-btn input {width: 100%;height: 100%;font-size: 0;padding: 35px 0 0 0;overflow: hidden;color: transparent;cursor: pointer;}.o--douban-search .inp-btn input:focus {outline: none;}.o--douban-search .inp {background-image: url(//img3.doubanio.com/dae/accounts/resources/a4a38a5/movie/assets/nav_mv_bg.png?s=1);}.o--douban-search .inp-btn input {background: url(//img3.doubanio.com/dae/accounts/resources/a4a38a5/movie/assets/nav_mv_bg.png?s=1) no-repeat 0 -40px;}.o--item-balancer {margin-left: 11%;margin-right: 11%;}"),
    $((function() {
      $("title").html("选影视 - oo.movie"), $("#app .article .tags").before('<div class="o--douban-search"><div class="inp"><input name="' + OO_SIGN + '" size="22" maxlength="60" placeholder="搜索电影、电视剧、综艺、影人" value="" autocomplete="off"></div><div class="inp-btn"><input type="submit" value="搜索"></div></div>'),
      $("body").prepend($("#app .article").addClass("oo")), $(".o--douban-search input").on("keyup", (function(n) {
        13 === n.keyCode && (n.preventDefault(), location.href = "https://m.douban.com/search/?query=" + n.target.value + "&type=movie");
      })), $(".o--douban-search .inp-btn input").on("click", (function(n) {
        n.preventDefault();
        const e = $(".o--douban-search input").val();
        location.href = "https://m.douban.com/search/?query=" + e + "&type=movie";
      })), $("a.item").each((function(n, e) {
        $(e).attr("href", $(e).attr("href").replace("movie.douban.com", "m.douban.com/movie")).removeAttr("target");
      }));
      const n = document.querySelector(".list-wp");
      new MutationObserver((function(n) {
        for (const e of n) "childList" == e.type && (isChildChanged = !0, e.addedNodes.forEach((function(n) {
          n.classList.contains("item") && (n.setAttribute("href", n.getAttribute("href").replace("movie.douban.com", "m.douban.com/movie")),
          n.removeAttribute("target"));
        })));
        $(".list-wp .item").eq(-2).addClass("o--item-balancer");
      })).observe(n, {
        attributes: !0,
        childList: !0
      });
    })); else {
      function getBaseStyle() {
        return "@keyframes o--tvflicker {0%   {box-shadow: 0 0 100px 0 rgba(225,235,255,0.4);}100% {box-shadow: 0 0 60px 0 rgba(200,220,255,0.6);}}@keyframes o--blink {20%,24%,55% {color: #111;text-shadow: none;}0%,19%,21%,23%,25%,54%,56%,100% {color: #fff6a9;text-shadow: 0 0 5px #ffa500, 0 0 5px #ffa500, 0 0 15px #ffa500, 0 0 20px #ffa500, 0 0 6px #ff0000, 0 0 10px #ff8d00, 0 0 9px #ff0000;}}@keyframes o--bopA {0% {transform: scale(0.9);}50%,100% {transform: scale(1);}}@keyframes o--bopB {0% {transform: scale(0.9);}80%,100% {transform: scale(1) rotateZ(-3deg);}}@keyframes o--beat {to {transform: scale(1.4);}}@keyframes o--loader-spin {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);}}@keyframes o--color-change-opacity {0%   { opacity: 0.65; }50% { opacity: 0.95; }100% { opacity: 0.65; }}oo-logs {position: fixed;bottom: 0;right: 0;max-height: 300px;overflow-y: scroll;text-align: right;z-index: " + (MAX_Z_INDEX - 10) + ";display: none;}oo-logs.is-active {display: block !important;}.o--log-message {display: inline-block;background-color: #4CAF50;color: #fff;padding: .25em .5em;margin-bottom: .25em;border-top-left-radius: 3px;border-bottom-left-radius: 3px;max-width: 800px;word-break: break-all;}.o--m.o--debug {max-width: 400px !important;margin: 0 auto !important;}.o--m.o--debug .mod_player > .player_container {max-height: 203px;}oo-iframes {visibility: hidden;pointer-events: none;position: fixed;bottom: 0;left: -9999px;max-width: 320px;max-height: 100px;display: block;}oo-iframes > iframe {max-width: 25%;display: inline-block;}.o--hide {display: none !important;}.o--vip-play {position: absolute;top: 0;left: 0;z-index: 1;margin: 1em;font-size: 14px;}.o--vip .o--vip-play {position: relative;font-size: 12px;background-color: #2d2d2e;margin: .5em 0 0;padding: .8em .5em .5em;}.is-play-in-page .o--vip-play {display: none;}.plyr--hide-controls ~ .o--vip-play {display: none;}.plyr--paused + .o--vip-play,.o--player:hover .o--vip-play {display: block !important;}.o--vip-play.is-hide {display: none !important;}.o--vip-play a {position: relative;margin-right: 8px;}.o--vip-play .o--sources a {background-color: #0db2fb;padding: .3em .75em .25em .75em;border-radius: 3px;color: #ffffff;cursor: pointer;opacity: .85;display: inline-flex;margin: .25em;}.o--vip-play .o--sources a.is-active {background-color: #1c7ed6;}.o--vip-play .o--sources a.is-active,.o--vip-play .o--sources a:hover {opacity: 1;font-weight: bold;}.o--vip-play .o--sources a.is-mp4 {border-bottom: 1.5px solid #FFEB3B;}.o--sniff-done {color: #4CAF50;}.o--play-url {color: #ffffff;padding: 1em 1em .5em;text-shadow: 1px 1px 2px #000000;}.o--play-url a {color: #0db2fb !important;text-decoration: underline;cursor: pointer;font-weight: bold;}.o--play-url .o--span {font-size: .9em;color: #EEEEEE;display: block;opacity: .9;margin-top: .5em;}.o--play-url .o--span.is-warning span {font-weight: bold;color: white;background-color: #FF5722;padding: .25em .5em;border-radius: 2px;}.o--play-url a span {color: #FF9800;}.o--play-url a:hover {color: #e67700 !important;}.o--player-box::before,.o--player-box::after {display: none !important;}.o--player {position: relative;height: 100%;max-height: 100%;background-color: #2d2d2e;overflow: hidden;z-index: " + MAX_Z_INDEX + ';}.o--player:not(.is-loaded) #o--player-iframe {display: none;}.o--player.is-loaded .o--player-bg {visibility: hidden;}.o--player-bg {position: absolute;top: 0;bottom: 0;left: 0;right: 0;display: flex;justify-content: center;align-items: center;flex-direction: column;font-size: 16px;color: #f1f3f5;background-color: #292929;box-shadow: 0 0 5px 0 #232325;overflow: hidden;border: 10px solid #1b1b1b;border-bottom-width: 15px;border-radius: 10px;border-bottom-left-radius: 50% 1%;border-bottom-right-radius: 50% 1%;transition: margin-right 1s;margin: .5em;padding-bottom: 1em;animation: o--tvflicker .5s infinite alternate;}.o--m .o--player-bg {font-size: 12px;border-width: 1em;}.o--sign {opacity: .1;margin-top: 1em;}.o--version {margin-left: 1em;font-size: .8em;opacity: .9;}.o--slogan {letter-spacing: 2px;color: #f8964c;}.o--slogan strong {font-size: 2.5em;text-shadow: 0 0 5px #ffa500, 0 0 5px #ffa500, 0 0 15px #ffa500, 0 0 20px #ffa500, 0 0 6px #ff0000, 0 0 10px #ff8d00, 0 0 9px #ff0000;color: #fff6a9;opacity: .8;transform: scale(0.9);display: inline-block;margin: 0 5px;}.o--slogan strong:first-child {animation: o--bopA 1s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards infinite alternate, o--blink 12s infinite;}.o--slogan strong:last-child {animation: o--bopB 1s 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards infinite alternate, o--blink 12s 3s infinite;}.o--error-text {display: none;padding-top: 1em;letter-spacing: 1px;color: #F44336;}.o--player-bg.is-fail .o--slogan {color: #f76707;}.o--player-bg.is-fail .o--slogan strong {color: #d9480f;}.o--player-bg.is-fail .o--loader,.o--player-bg.is-fail + .o--vip-play {display: none;}.o--player-bg.is-fail .o--error-text {display: block;}.o--sniff-progress {position: absolute;left: 0;bottom: 0;height: 1px;width: 0;background-color: #fab132;border: 1px solid #bd7641;border-top-right-radius: 2px;transition: all 5s ease;}.o--player.is-loaded .o--sniff-progress,.o--player-bg.is-fail .o--sniff-progress {display: none;}.o--loader {border: 3.6px solid #ff974d;box-sizing: border-box;overflow: hidden;width: 2em;height: 2em;left: 50%;top: 50%;animation: o--loader-spin 2s linear infinite reverse;-webkit-filter: url(#o--l-f);filter: url(#o--l-f);box-shadow: 0 0 0 1px #ff974d inset;}.o--loader:before {content: "";position: absolute;animation: o--loader-spin 2s cubic-bezier(0.59, 0.25, 0.4, 0.69) infinite;background: #ff974d;-webkit-transform-origin: top center;transform-origin: top center;border-radius: 50%;width: 150%;height: 150%;top: 50%;left: -12.5%;}.o--player .plyr__progress input[type=range] {cursor: pointer;}.o--video {height: 100%;width: 100%;background-color: black;}.o--collapse-box.is-open .o--collapse {transform:scaleX(-1);}.o--collapse-box:not(.is-open) .is-collapse {display: none !important;}.o--vip {position: relative;padding-bottom: 0.5em;background-color: rgba(255, 255, 255, 0.05);width: 100%;margin-bottom: .5em;margin-top: .5em;border-radius: 5px;box-shadow: 0 1px 8px 0 rgba(0,0,0,0.2);}.o--vip + .o--vip {' + PurifyStyle + '}.o--vip-panel {display: flex;justify-content: space-between;align-items: center;padding: 10px 10px 0;font-size: 15px;width: 100%;}.o--vip-title {font-weight: bold;color: #257942;width: 100%;}.o--vip-small {font-size: 0.75em;margin: 0 10px;color: #ced4da;}.o--vip-panel, .o--vip-list {height: auto !important;}.o--menus {display: flex;justify-content: center;align-items: center;}.o--menus > div {display: inline-flex;margin-right: 1.5em;cursor: pointer;position: relative;}.o--qrcode-box {background-color: white;padding: 1px 2px 1px 1px;border-radius: 2px;opacity: .65;}.o--m .o--qrcode-box {display: none;}.o--qrcode-box:hover {opacity: 1;}.o--qrcode-box svg {width: 20px;height: 20px;}.o--qrcode-box .o--qrcode {overflow: hidden;display: none;background-color: #fff;position: absolute;top: -35px;left: -110px;z-index: 1;box-shadow: 0 4px 8px 0 rgba(0,0,0,0.35);border-radius: 3px;}.o--qrcode img {width: 100px;height: 100px;}.o--qrcode-text {position: absolute;background-color: #fff;text-align: center;z-index: 2;top: -49px;left: -110px;width: 100px;border-radius: 3px;color: #F57C00;letter-spacing: 1px;font-size: 12px;display: none;}.o--qrcode-box:hover .o--qrcode,.o--qrcode-box:hover .o--qrcode-text {display: block;}.o--setting-button {animation: o--color-change-opacity 5s normal infinite ease-in-out;}.o--setting-button svg {width: 24px;height: 24px;}.o--setting-button:hover {color: #66BB6A;cursor: pointer;}.o--vip-list {padding: 0.5em;letter-spacing: 1px;}.o--vip-list .o--vip-item {border-radius: 4px;display: inline-block;white-space: nowrap;background-color: #eef6fc;color: #1d72aa;margin: 4px;padding: 0.5em 0.5em 0.35em;cursor: pointer;font-size: 14px;line-height: 1.2;font-weight: 600;text-decoration: none;position: relative;overflow: hidden;transition: all 0.25s;text-align: center;}.o--vip-item.is-play-in-page::after {content: "";position: absolute;bottom: 0;left: 0;width: 100%;height: 2px;background-color: #2E7D32;}.o--vip-list .o--vip-sniff {width: 1.15em;}.o--vip:not(.is-allow-sniff) .o--vip-sniff {display: none;}.o--vip-sniff svg {display: block;}.o--vip-list .o--vip-item:hover, .o--vip-list .o--vip-item:active {background-color: #1d72aa;color: #eef6fc !important;}.o--vip-list .o--vip-item.is-active {background-color: #2b8a3e;color: #eef6fc;}.o--vip.is-sniff-success .o--vip-sniff.is-active {background-color: #2f9e44;color: #eef6fc;}.o--vip.is-sniffing .o--vip-sniff.is-active,.o--vip.is-sniff-success .o--vip-sniff.is-active,.o--vip.is-sniffing:not(.is-sniff-success) .o--vip-item,.o--vip-list .o--vip-item.is-active {cursor: not-allowed;pointer-events: none;opacity: 0.5 !important;}.o--vip.is-sniff-done .o--vip-sniff {opacity: .95 !important;}.o--vip.is-sniffing:not(.is-sniff-success) .o--vip-sniff {animation: o--beat 0.25s infinite alternate;}.o--vip .o--sniff-progress {display: none;bottom: auto;top: 0;}.o--vip.is-sniffing .o--sniff-progress {display: block !important;}.o--setting-panel {border-top: 1px solid #616161;padding: 1em .5em;display: none;margin: .5em 0;transition: all 0.5s;}.o--vip.is-setting-on .o--setting-panel {display: block;}.o--vip.is-setting-on .o--vip-list {display: none;}.o--edit-vip-source-panel {text-align: center;margin: 1em 1em .5em;}.o--edit-vip-source-panel textarea {padding: .75em;font-size: 14px;letter-spacing: 1px;border-radius: 5px;width: calc(100% - 1.5em);min-height: 18em;box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);border: 1px solid #eee;overflow-y: scroll;}.o--edit-hint {text-align: left;margin: .5em;color: #4CAF50;text-shadow: 0px 0px 1px #8BC34A;}.o--actions {text-align: right;}.o--action {color: wheat;letter-spacing: 1px;border: 1px solid;display: inline-flex;justify-content: center;align-items: center;padding: .15em .5em;border-radius: 3px;margin-right: 1em;cursor: pointer;background-color: #1b1b29;}.o--action a {color: #FF9800 !important;}.o--m .o--action {font-size: 12px;}.o--action:hover {color: #FFB74D;}.o--toggle .o--y, .o--toggle .o--n {font-weight: bold;font-size: 1.2em;margin-right: .15em;}.o--toggle.is-n .o--y {color: inherit;}.o--toggle:not(.is-n) .o--y {color: green;font-size: 1.5em;}.o--toggle.is-n .o--n {color: red;font-size: 1.5em;}.o--log-button {cursor: pointer;padding: 0 .35em;background-color: hsla(0,0%,100%,.9);box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);color: #9e774a;border-radius: 3px;display: inline-flex;}.o--log-button:hover {background-color: #9e774a;color: hsla(0,0%,100%,.9);}.o--jump {max-width: 1000px;margin: 0 auto;padding: 10px;}.o--vip .o--jump {max-width: unset;margin-top: 5px;}.o--jump + .o--jump {' + PurifyStyle + "}.o--jump a {display: inline-flex !important;align-items: center;justify-content: center;border-radius: 4px;font-size: 12px !important;line-height: 1.2;padding: 5px 10px 3px;margin-top: 8px;margin-right: 6px;white-space: nowrap;background-color: #effaf3 !important;color: #257942 !important;cursor: pointer;border: 1px solid #f1f3f5;text-decoration: none;transition: all 0.25s;}.o--jump a:hover,.o--jump a.is-active {border: 1px solid #099268;background-color: #257942 !important;color: #effaf3 !important;}.o--jump a.is-anime {background-color: #ffdeeb !important;color: #d6336c !important;}.o--jump a.is-anime:hover,.o--jump a.is-anime.is-active {border: 1px solid #f783ac;background-color: #d6336c !important;color: #ffdeeb !important;}.o--jump a.is-vip {background-color: #fff4e6 !important;color: #e8590c !important;}.o--jump a.is-vip:hover,.o--jump a.is-vip.is-active {border: 1px solid #f76707;background-color: #e8590c !important;color: #fff4e6 !important;}.o--vip-list + .o--jump {border-top: 1px solid rgba(224, 224, 224, 0.25);}.o--vip-list + .o--jump .o--collapse:not(.is-collapse) {display: inline-flex !important;}.o--collapse {min-width: 2em;}";
      }
      function goJump(n, e) {
        if (n instanceof Function) n(e); else {
          const t = "string" == typeof e ? $(e).eq(0).text() : "function" == typeof e ? e($) : getKeywordFromUrl(e);
          (Array.isArray(n) ? n : n.split(/\s*,\s*/)).forEach((function(n) {
            n = n.split(/\s*\|\s*/), insertSearchAddon(t, n[0], n[1] || "after");
          }));
        }
      }
      function addonGo() {
        const addon = ADDONS.find((function(n) {
          return Is(n.match);
        }));
        if (addon) {
          if (isFirstRunAddon) {
            let n = getBaseStyle();
            addon.hide && (n += "" + addon.hide + " {" + PurifyStyle + "}"), addon.css && (n += addon.css),
            addCss(n);
          }
          _D && $("oo-logs").length, _D && $("oo-logs").length, $((function() {
            let _Mathmin = Math.min;
            const playAddon = addon.play;
            if (playAddon && Is(playAddon.match)) {
              if (playAddon.vip && 0 === $(".o--vip").length) {
                function formatPassedTime(n) {
                  return ((Date.now() - n) / 1e3).toFixed(2) + "s";
                }
                async function updateQrcode(url = Href) {
                  isMobile || (!qrcodeCode && (qrcodeCode = await fetchCdnUrl("/qrcode-generator/1.4.4/qrcode.min.js")),
                  eval(qrcodeCode), QR = qrcode(0, "L"), QR.addData(url), QR.make(), $(".o--qrcode-box").removeClass("o--hide"),
                  $(".o--qrcode").html(QR.createImgTag()));
                }
                function fixUrl(n) {
                  return n.replace(/[\?#].+/g, "");
                }
                function fixVipUrl(n) {
                  const e = ADDONS.find((function(e) {
                    return Is(e.match, n) && e.play && e.play.fixUrl;
                  }));
                  return e ? !0 === e.play.fixUrl ? fixUrl(n) : e.play.fixUrl(n) : n;
                }
                function getVipTargetUrl() {
                  if (ooPlayUrl) return ooPlayUrl;
                  let n = location.href.replace(/&?\w+=http[^&]+/, "").replace(/.+http/, "http");
                  return n = decodeURI(fixVipUrl(n) || n), n;
                }
                function canPlayInPage(n) {
                  return !isOnlyDownloadVideoUrlRegex.test(n) && (!/\/\/vwecam.tc.qq.com/.test(n) || Is("v.qq.com"));
                }
                function toShortVideoUrl(n) {
                  const e = n.match(shortVideoUrlRegex) || n.match(shortVideoUrlLoseRegex);
                  return e ? e[1].split(".").slice(-2).join(".") + " ... " + e[e.length - 2].slice(-10) + "<span> . " + e[e.length - 1] + "</span>" : n;
                }
                function fixIframeUrl(n) {
                  return n.replace(/\/?\?.+/, "");
                }
                function getIframeId(n) {
                  return iframes[fixIframeUrl(n)];
                }
                function getIframe(n) {
                  return frames[getIframeId(n)];
                }
                function setIframe(n, e) {
                  iframes[fixIframeUrl(n)] = e;
                }
                function addIframe(n, e = "oo-iframes") {
                  const t = document.createElement("iframe");
                  return t.id = uuid(), t.frameborder = "0", t.scrolling = "no", t.seamless = !0,
                  t.sandbox = "allow-scripts allow-same-origin allow-forms", n && (t.src = n, setIframe(n, t.id)),
                  $(e).append(t), t;
                }
                function removeIframe(n = "oo-iframes > iframe") {
                  const e = $("string" == typeof n ? n.startsWith("oo-iframes") ? n : "#" + n : n.id ? "#" + n.id : n).get(0);
                  e && (e.src = "about:blank", $(e).remove());
                }
                function emptyIframes() {
                  $("oo-iframes > iframe").each((function(n, e) {
                    removeIframe(e);
                  })), $("oo-iframes").empty();
                }
                function getSniffTime(n) {
                  const e = sniffTimes[fixIframeUrl(n)];
                  return e ? formatPassedTime(e) : "0s";
                }
                function sniffStart() {
                  isSniffing = !0, sniffTimestamp = Date.now(), sniffUrls = [], sniffUrlsKey = [],
                  $(".o--player").empty(), $("html").addClass("o--sniffing"), $(".o--vip").removeClass("is-play-in-page");
                }
                function sniffDone() {
                  formatPassedTime(sniffStartTime), isSniffing = !1, emptyIframes(), $(".o--sniff-progress").css({
                    width: "100%"
                  }), $(".o--vip").removeClass("is-sniffing").addClass("is-sniff-done"), $("html").removeClass("o--sniffing"),
                  0 < sniffUrls.length && 0 === $(".o--sniff-done").length && $(".o--vip-play .o--sources").length && $(".o--vip-play .o--sources").append('<span class="o--sniff-done">✔</span>');
                }
                function sniffSuccess(n, e) {
                  const t = (n = decodeURIComponent(n).replace(/^(http:)?\/\//, "https://")).replace(/\?.+/, "");
                  if (sniffUrlsKey.includes(t)) return;
                  sniffUrlsKey.push(t), sniffUrls.push(n);
                  const o = sniffUrls.length, i = n.match(isVideoUrlRegex)[1];
                  $(".o--vip-play .o--sources").append('<a _href="' + n + '" class="is-' + i + '">线路' + o + "</a>"),
                  $(".o--vip-play .o--sources a").off("click").on("click", (function() {
                    const n = $(this).attr("_href");
                    updateQrcode(n);
                    let e = document.querySelector(".o--player video");
                    e || ($(".o--player").prepend('<video class="o--video" poster="' + PlayerCover + '" controls playsinline></video>'),
                    e = document.querySelector(".o--player video"));
                    const t = getGlobal("Plyr"), o = getGlobal("Hls");
                    if (!player && t && (player = new t(e, {
                      debug: _D,
                      invertTime: !1,
                      autoplay: !0,
                      volume: .75,
                      speed: {
                        selected: 1,
                        options: [ .5, .75, 1, 1.25, 1.5, 2 ]
                      },
                      storage: {
                        enabled: !0,
                        key: storePrefix + "plyr"
                      }
                    }), player.on("enterfullscreen", (function() {
                      $("html").addClass("o--fullscreen");
                    })), player.on("exitfullscree", (function() {
                      $("html").removeClass("o--fullscreen");
                    }))), $(".o--player-bg").remove(), /\.m3u8/.test(n) && o && o.isSupported()) {
                      const t = new o;
                      t.loadSource(n), t.attachMedia(e), t.on(o.Events.MANIFEST_PARSED, (function() {
                        e.play();
                      }));
                    } else e.src = n, e.addEventListener("loadedmetadata", (function() {
                      e.play();
                    }));
                    $(".o--play-url").html('来源:<a _href="' + n + '">' + toShortVideoUrl(n) + "</a>" + (canPlayInPage(n) ? '<span class="o--span">如果全部线路都无法播放,可以点击来源链接下载来播放,或使用单个解析播放。</span>' : '<span class="o--span is-warning"><span>该链接无法在当前站点播放,请点击来源下载播放</span></span>')),
                    $(".o--play-url a").off("click").on("click", (function() {
                      const n = $(this).attr("_href");
                      isHiker && window.fy_bridge_app.playVideo ? window.fy_bridge_app.playVideo(n) : isMixia && window.mx_browser_obj.playvideo ? window.mx_browser_obj.playvideo(n, n) : window.open(n, "_blank", "noopener");
                    })), $(".o--vip-play .o--sources a").removeClass("is-active"), $(this).addClass("is-active");
                  })), 1 === o ? ($(".o--vip-play .o--sources a").get(0).click(), $(".o--vip").addClass("is-sniff-success"),
                  $(".o--vip-play").removeClass("is-hide")) : setTimeout((function() {
                    player && player.ready && 0 === player.duration && $(".o--vip-play .o--sources a").get(o - 1).click();
                  }), isMobile ? 3200 : 2800);
                }
                function sniffFail() {
                  sniffDone(), $(".o--player-bg").addClass("is-fail"), $(".o--vip").addClass("is-sniff-fail");
                }
                function iSniff() {}
                function hikerSniff(sniffTickId) {
                  if (sniffTickId !== sniffTick) return;
                  let resource = eval(window.fy_bridge_app.getNetworkRecords());
                  resource = resource.filter((function(n) {
                    return n.timestamp > sniffTimestamp && /video/i.test(n.mediaType.name) && isValidVideoUrl(n.url);
                  })), isSniffing && (resource.forEach((function(n) {
                    sniffSuccess(n.url);
                  })), setTimeout((function() {
                    hikerSniff(sniffTickId);
                  }), 100));
                }
                function mixiaSniff(n) {
                  if (n !== sniffTick) return;
                  let e = [], t = window.mx_browser_obj.getweblogs("http");
                  "error" !== t && (e = t.trim().split(/\s*\n[\n\s]*/), e = e.filter((function(n) {
                    return isValidVideoUrl(n);
                  }))), isSniffing && (e.forEach((function(n) {
                    sniffSuccess(n);
                  })), setTimeout((function() {
                    mixiaSniff(n);
                  }), 100));
                }
                function insertPlayerHtml(n = "") {
                  const e = '<div class="o--player-bg"><div class="o--sniff-progress"></div><div class="o--loader">' + Icon.loader + '</div><div class="o--sign">(o˘◡˘o)<span class="o--version">v ' + VERSION + '</span></div><div class="o--slogan"><strong>觅</strong>即知君不可见,挥毫点染湖山<strong>影</strong></div><div class="o--error-text">解析失败,可以尝试使用单个解析播放,或者到其它正版网站上解析</div></div>', t = getVipPlayer();
                  t && ($(t).empty().append('<div class="o--player">' + e + n + "</div>"), $(".o--player").parent().addClass("o--player-box"));
                }
                function sniff(n) {
                  if (sniffStart(), isAllowIframeSniff) iSniff(); else if (isAllowHikerSniff) hikerSniff(n); else {
                    if (!isAllowMixiaSniff) return void sniffDone();
                    mixiaSniff(n);
                  }
                  insertPlayerHtml(isMobile ? "" : '<div class="o--vip-play is-hide"><div class="o--sources"></div><div class="o--play-url"></div></div>'),
                  isMobile && ($(".o--vip-play").remove(), $(".o--vip-panel").after('<div class="o--vip-play is-hide"><div class="o--sources"></div><div class="o--play-url"></div></div>')),
                  pausePlay(), sniffUrls = [], sniffTimes = {}, goSniff();
                }
                function goSniff(n = 0) {
                  if (!isSniffing) return;
                  const e = V_U[n], t = (n + 1) / (V_U.length + 1), o = (sniffUrls.length + 1) / MAX_SNIFF_PLAY_COUNT, i = _Mathmin(10 * (2.5 * t + 2.5 * o + 5 * _Mathmax(t, o) + .5), 99).toFixed(4) + "%";
                  if ($(".o--sniff-progress").css({
                    width: i
                  }), !e) {
                    const n = setInterval((function() {
                      0 === $("oo-iframes > iframe").length && (clearInterval(n), 0 === sniffUrls.length ? sniffFail() : sniffDone());
                    }), 1e3);
                    return;
                  }
                  if (sniffUrls.length >= MAX_SNIFF_PLAY_COUNT + (player && player.ready && 0 < player.duration ? -1 : 2)) return void sniffDone();
                  const r = getVipTargetUrl(), a = M_VipUrl(e) + r;
                  sniffTimes[fixIframeUrl(a)] = Date.now();
                  const s = addIframe(a), l = isMobile ? 7 : 5;
                  s.onload = function() {
                    setTimeout((function() {
                      removeIframe(s, "TIMEOUT");
                    }), 12e3);
                  }, setTimeout((function() {
                    removeIframe(s, "MAX TIMEOUT");
                  }), 15e3), function e() {
                    const t = $("oo-iframes > iframe").length;
                    if (t > l - 1) setTimeout((function() {
                      e();
                    }), 100); else {
                      const e = player && player.ready && 0 < player.duration ? 200 * t : 0, o = t < l - 2 ? isMobile ? _Mathmin(150 * sniffUrls.length + 150 * t + 800, 1200) : _Mathmin(150 * sniffUrls.length + 200 * t + 1e3, 1500) : 150;
                      setTimeout((function() {
                        goSniff(n + 1);
                      }), o + e);
                    }
                  }();
                }
                async function autoSniffPlay() {
                  await playBefore(), 0 < sniffTick && sniffDone(), sniffStartTime = Date.now(), sniff(++sniffTick),
                  $(".o--vip").removeClass("is-sniff-success is-sniff-done").addClass("is-sniffing");
                }
                function pausePlay() {
                  try {
                    $("video:not(.o--video), audio").each((function(n, e) {
                      e.pause(), e.muted = !0, $("video:not(.o--video), audio").each((function(n, e) {
                        $(e).remove();
                      }));
                    }));
                    const n = Date.now(), e = setInterval((function() {
                      const t = Date.now() - n, o = getGlobal("playerObject") || getGlobal("MGTVPlayer") && getGlobal("MGTVPlayer").player || getGlobal("videoPlayer") || getGlobal("PLAYER");
                      o && o.pause instanceof Function && o.pause(), (!o || t > 6e4) && clearInterval(e);
                    }), 60);
                  } catch (n) {}
                }
                async function playBefore() {
                  $(".o--vip-play").removeClass("is-hide"), isLoadPlayer || (addCss("/plyr/3.5.10/plyr.css"),
                  await addJs("/hls.js/0.13.2/hls.min.js"), await addJs("/plyr/3.5.10/plyr.min.js"),
                  isLoadPlayer = !0);
                }
                function getVipPlayer() {
                  return $(PlayerSelector).get(0) || $("#player, .player").get(0);
                }
                function playInPage(n) {
                  $(".o--player").removeClass("is-loaded"), getVipPlayer() ? (pausePlay(), insertPlayerHtml('<iframe id="o--player-iframe" style="width: 100%; height: 100%; border: none; outline: none;"  width="100%" height="100%" allowfullscreen="true" allowtransparency="true" frameborder="0" scrolling="no" sandbox="allow-scripts allow-same-origin allow-forms" src="' + n + '"></iframe>')) : location.href = n,
                  setTimeout((function() {
                    $(".o--player").addClass("is-loaded");
                  }), 1500);
                }
                function playVipUrl(n) {
                  if (!n) return;
                  const e = n + getVipTargetUrl();
                  $(".o--vip").removeClass("is-sniff-success is-sniff-done is-sniffing").addClass("is-play-in-page"),
                  updateQrcode(e), isPlayingInPage && !/http:/.test(n) ? playInPage(e) : (pausePlay(),
                  $("#o--player-iframe").remove(), $(".o--player").removeClass("is-loaded"), setTimeout((function() {
                    window.open(e, "_blank");
                  }), 100));
                }
                function playVipItem(n) {
                  const e = 0 < $(n).length;
                  let t = e ? $(n).hasClass("o--vip-sniff") ? "auto" : $(n).attr("_href") : Store.get("lastPlayChoice", "");
                  $(".o--vip-item").removeClass("is-active"), e ? $(n).addClass("is-active") : t.startsWith("http") ? ($(".o--vip-item:not(.o--vip-sniff)").each((function() {
                    $(this).attr("_href") === t && $(this).addClass("is-active");
                  })), playVipUrl(t)) : $(".o--vip-item.o--vip-sniff").addClass("is-active"), isSniffing && sniffDone(),
                  t.startsWith("http") ? playVipUrl(t) : autoSniffPlay(), Store.set("lastPlayChoice", t);
                }
                function M_Source(n) {
                  return n.replace(/(\w+)/g, (function(n, e) {
                    return M_String(e);
                  }));
                }
                function M_VipUrl(n) {
                  const e = M_Source(n);
                  return "https://" + e + (e.includes("?") ? "" : (e.endsWith(".") ? "php" : /\/$/.test(e) ? "" : "/") + "?url") + "=";
                }
                function insertVipSource(n, e = "after", t = 0) {
                  if (0 < $(".o--vip").length || 20 < t) return;
                  const o = $(n);
                  if (0 === o.length) return void setTimeout((function() {
                    insertVipSource(n, e, t + 1);
                  }), 250);
                  const i = vipUrls.length > collapseNum;
                  o.eq(0)[e]('<div class="o--vip' + (isAllowSniff ? " is-allow-sniff" : "") + '"><div class="o--sniff-progress"></div><div class="o--vip-panel"><div class="o--vip-title"><span class="o--vip-title-text">' + PLUGIN_NAME + '<span class="o--vip-small">v' + VERSION + "</span></span>" + (_D ? '<span class="o--log-button">LOG</span>' : "") + '</div><div class="o--menus"><div class="o--qrcode-box o--hide">' + Icon.qrcode + '<div class="o--qrcode-text">手机扫码看</div><div class="o--qrcode"></div></div><div class="o--setting-button">' + Icon.settings + '</div></div></div><div class="o--setting-panel"><div class="o--actions"><div class="o--action o--toggle o--action-pip' + (isPlayingInPage ? "" : " is-n") + '"><span class="o--y">是</span><span class="o--n">否</span>开启原网页解析播放</div><div class="o--action"><a href="https://greasyfork.org/scripts/393284" target="_blank">油猴地址</a></div></div><div class="o--edit-vip-source-panel"><div class="o--edit-hint">编辑后,刷新页面生效,清空会恢复为默认(原网页解析只支持 https 开头的解析)</div><textarea placeholder="清空会使用默认值">' + customVipUrls.trim() + '</textarea></div></div><div class="o--vip-list"><span class="o--vip-item o--vip-sniff">' + Icon.vip + "</span>" + vipUrls.map((function(n) {
                    return '<span class="o--vip-item' + (n.url.startsWith("https") ? " is-play-in-page" : "") + '" _href="' + n.url + '">' + n.name + "</span>";
                  })).join("") + (i ? '<span class="o--vip-item o--normal o--collapse">➢</span>' : "") + "</div></div>"),
                  i && smartCollapse(".o--vip-item");
                  let r = 0, a = setInterval((function() {
                    $(".o--setting-button").off("click").on("click", (function() {
                      $(".o--vip").toggleClass("is-setting-on");
                    })), $(".o--toggle").off("click").on("click", (function() {
                      $(this).toggleClass("is-n"), $(this).hasClass("o--action-pip") && (isPlayingInPage = !isPlayingInPage,
                      GlobalStore.set("isPlayingInPage", isPlayingInPage));
                    })), $(".o--edit-vip-source-panel textarea").off("input").on("input", (function() {
                      GlobalStore.set("VipUrls", $(this).val());
                    })), $(".o--vip-item:not(.o--normal)").off("click").on("click", (function() {
                      playVipItem(this);
                    })), $(".o--log-button").off("click").on("click", (function() {
                      $("oo-logs").toggleClass("is-active");
                    })), 100 < r++ && clearInterval(a);
                  }), _Mathmin(200 + 50 * r, 1e3));
                }
                const VipUrls = "景云 https://jx.1ff1.cn/?url=\n南乔 https://jx.idc126.net/jx/?url=\n安歌 https://z1.m1907.cn/?jx=\n清和 https://jiexi.071811.cc/jx.php?url=\n胜蓝 https://123dan.top/jie/xi?url=\n维夏 https://jx.htv009.com/?url=\n琼华 https://jiexi.ikan188.com/?url=\n博衍 https://jx.fwwmy1.cn/mingri/ming_v.php?url=\n乐康 https://jx.sinbinchina.com/?v=\n斯年 https://api.iztyy.com/jiexi/?url=\n望舒 https://v.dybhn.com/index.php?url=\n风藤 http://bofang.online/?url=\n秋桑 http://playx.top/?url=\n凌泉 http://beijixs.cn/?url=\n天冬 http://nitian9.com/?url=\n紫芙 http://mimijiexi.top/?url=\n川柏 http://www.zhezhi.ren/jk/HByun/?url=\n信石 http://at520.cn/jx/?url=\n文竹 http://api.oopw.top/jiexi/?url=", PlayerSelector = "#iframaWrapper, #mgtv-player-wrap, #sohuplayer .x-player, #wPlayer, #video-box, #playerbox, .td-h5__player, .td-playbox, .iqp-player, .g-play .video-area, #mod_player, #playBox, #j-player, #video, .m-video-player, .site_player", D_V_U = "job.138us.npd·wi,jwfji.hj7na.md,zbko.68pe.md,md.mbgtmbaia.md·wi.,xxx.odjzmbjr.npd·jwfji·wfcmj.,jwfji.l192.npd,wi.pbahmbjwhmjz.md·oju.,wi.usjzvpz.npd,wi.xzz88.npd,f177.npd,job.jyv7.npd,xxx.ukewm.npd,wi.fgdbk.fn·dd,u.czd6.npd·oju,wi.190111.ops·wi,wi.22ab.ops·oju,wi.wpa9us.npd·1819·jwfji,wilp.dd,9xlrwi.npd·oju,e83jz.md·oju·oju.,wi.h907.npd,xxx.oyfol.md·jwfji,wi.dsxkf.npd·oju,wi.fjcmblj.md·jwfji,job.wivhjt.npd,job.134247.ops·oju,job.7u.sbgd,wi.94nl.ops·wi,xxx.h1819.md·jwfji,job.wi2.ops·oju,u.fjipbanm.npd·jqhmjn·jqhmjn.,u.hmptjgymbd.md·u.,mcd.vihmbz.oju·l,job.wi638.npd·oju,xxx.upnld.oju·job.,wi.74hmjwve.npd·jwfji,xxx.wi9g.npd·jwfji.,xxx.xqpsbqstjmjncb.npd·pfcju.,xxx.9v2nzbko.md·jwfji.,oju.tpon.mfq·u,wi.190111.ops·wi,job.jwfji.bk,xxx.mvz6060.npd·wi·zs.,bbbri.npd·wi.,xxx.jwfjivhmbo.dd·jwfji.,wijnjs.tzpamvz.md·wi", MAX_SNIFF_PLAY_COUNT = 10;
                let isAllowIframeSniff = GlobalStore.get("isAllowIframeSniff") || !1;
                const isHiker = !!window.fy_bridge_app, isMixia = !!window.mx_browser_obj, isAllowHikerSniff = isHiker && !!window.fy_bridge_app.getNetworkRecords, isAllowMixiaSniff = isMixia && !!window.mx_browser_obj.getweblog;
                let player, isAllowSniff = isAllowHikerSniff || isAllowMixiaSniff || isAllowIframeSniff, sniffTimestamp = Date.now(), isSniffing = !1, sniffTick = 0, sniffUrls = [], sniffUrlsKey = [], isPlayingInPage = GlobalStore.get("isPlayingInPage") || !isMobile, isLoadPlayer = !1, sniffTimes = {}, sniffStartTime = Date.now(), QR = "", qrcodeCode = "";
                const iframes = {};
                E.on("playurl.change", (function({autoPlay: n}) {
                  n ? playVipItem($(".o--vip-item.is-active")) : (sniffDone(), $(".o--vip-item").removeClass("is-active"));
                })), E.on("enable.sniff", (function(n) {
                  n.from === PlayerCover && removeIframe(), isAllowIframeSniff || (isAllowIframeSniff = !0,
                  isAllowSniff = !0, GlobalStore.set("isAllowIframeSniff", !0), $(".o--vip").addClass("is-allow-sniff"));
                })), E.on("play.video", (function(n) {
                  removeIframe(getIframeId(n.from)), sniffSuccess(n.url, n.from);
                })), E.on("sniff.fail", (function(n) {
                  if (isAllowSniff) {
                    removeIframe(getIframeId(n.from));
                  }
                }));
                const charToNum = function(n) {
                  return n.charCodeAt(0) - 97;
                }, numToChar = function(n) {
                  return (0, String.fromCharCode)(97 + n);
                }, M_Number = function(n) {
                  return +n + (1 == n % 2 ? -1 : 1);
                }, M_Letter = function(n) {
                  return numToChar(M_Number(charToNum(n)));
                }, M_Char = function(n) {
                  return /[a-z]/i.test(n) ? M_Letter(n) : /\d/.test(n) ? M_Number(n) : "";
                }, M_String = function(n) {
                  return n.split("").reverse().map((function(n) {
                    return M_Char(n);
                  })).join("");
                }, V_U = "job.138us.npd·wi,jwfji.hj7na.md,zbko.68pe.md,md.mbgtmbaia.md·wi.,xxx.odjzmbjr.npd·jwfji·wfcmj.,jwfji.l192.npd,wi.pbahmbjwhmjz.md·oju.,wi.usjzvpz.npd,wi.xzz88.npd,f177.npd,job.jyv7.npd,xxx.ukewm.npd,wi.fgdbk.fn·dd,u.czd6.npd·oju,wi.190111.ops·wi,wi.22ab.ops·oju,wi.wpa9us.npd·1819·jwfji,wilp.dd,9xlrwi.npd·oju,e83jz.md·oju·oju.,wi.h907.npd,xxx.oyfol.md·jwfji,wi.dsxkf.npd·oju,wi.fjcmblj.md·jwfji,job.wivhjt.npd,job.134247.ops·oju,job.7u.sbgd,wi.94nl.ops·wi,xxx.h1819.md·jwfji,job.wi2.ops·oju,u.fjipbanm.npd·jqhmjn·jqhmjn.,u.hmptjgymbd.md·u.,mcd.vihmbz.oju·l,job.wi638.npd·oju,xxx.upnld.oju·job.,wi.74hmjwve.npd·jwfji,xxx.wi9g.npd·jwfji.,xxx.xqpsbqstjmjncb.npd·pfcju.,xxx.9v2nzbko.md·jwfji.,oju.tpon.mfq·u,wi.190111.ops·wi,job.jwfji.bk,xxx.mvz6060.npd·wi·zs.,bbbri.npd·wi.,xxx.jwfjivhmbo.dd·jwfji.,wijnjs.tzpamvz.md·wi".replace(/·/g, "/").split(","), NoMobileVipUrlRegex = /jx\.wslmf\.com/, customVipUrls = (GlobalStore.get("VipUrls") || "").trim() || "景云 https://jx.1ff1.cn/?url=\n南乔 https://jx.idc126.net/jx/?url=\n安歌 https://z1.m1907.cn/?jx=\n清和 https://jiexi.071811.cc/jx.php?url=\n胜蓝 https://123dan.top/jie/xi?url=\n维夏 https://jx.htv009.com/?url=\n琼华 https://jiexi.ikan188.com/?url=\n博衍 https://jx.fwwmy1.cn/mingri/ming_v.php?url=\n乐康 https://jx.sinbinchina.com/?v=\n斯年 https://api.iztyy.com/jiexi/?url=\n望舒 https://v.dybhn.com/index.php?url=\n风藤 http://bofang.online/?url=\n秋桑 http://playx.top/?url=\n凌泉 http://beijixs.cn/?url=\n天冬 http://nitian9.com/?url=\n紫芙 http://mimijiexi.top/?url=\n川柏 http://www.zhezhi.ren/jk/HByun/?url=\n信石 http://at520.cn/jx/?url=\n文竹 http://api.oopw.top/jiexi/?url=", vipUrls = ensureArray(customVipUrls).map((function(n) {
                  let e = n.split(/\s+/);
                  if (n = e.pop(), !/^http.+=/.test(n)) return {};
                  let t = 0 < e.length ? e.join(" ") : n.match(/\/\/(.+\.)?([^\/]+)\.\w+\//)[2].replace(/^(\w)/, (function(n) {
                    return n.toUpperCase();
                  }));
                  return {
                    url: n,
                    name: t
                  };
                })).filter((function(n) {
                  return n.url && (!isMobile || !NoMobileVipUrlRegex.test(n.url));
                }));
                isCheckIframeSniff || ($("html").append('<oo-iframes style="visibility: hidden; position: fixed; bottom: 0; pointer-events: none;"></oo-iframes>'),
                addIframe(PlayerCover), isCheckIframeSniff = !0);
                const vips = Array.isArray(playAddon.vip) ? playAddon.vip : [ playAddon.vip ];
                if (vips.forEach((function(n) {
                  insertVipSource((n = n.split(/\s*\|\s*/))[0], n[1]);
                })), playAddon.title) {
                  let n = 0, e = setInterval((function() {
                    let t = $(playAddon.title).eq(0).text();
                    t && (clearInterval(e), insertSearchAddon(t, ".o--vip-list", "after")), 100 < n++ && clearInterval(e);
                  }), 100);
                }
              }
              playAddon.jump && goJump(playAddon.jump, playAddon.title), playAddon.js instanceof Function && playAddon.js();
            }
            const searchAddon = addon.search;
            searchAddon && Is(searchAddon.match) && searchAddon.jump && (goJump(searchAddon.jump, searchAddon.keyword),
            searchAddon.js instanceof Function && searchAddon.js()), addon.js instanceof Function && addon.js();
          })), isFirstRunAddon = !1;
        } else isFirstRunAddon && ($("html").removeClass("o--m o--pc o--debug"), setTimeout((function() {
          $html.removeAttribute(PLUGIN_ATTR);
        }), 1e3));
      }
      function urlDetector() {
        setInterval((function() {
          !function() {
            if (Href !== window.location.href) {
              const n = Href;
              Href = window.location.href, E.emit("url.change", {
                newUrl: Href,
                oldUrl: n
              });
            }
          }();
        }), 250);
      }
      const Icon = {
        vip: '<svg fill="currentColor" viewBox="0 0 18 18" role="img" aria-hidden="true"><path d="M17.731,6.27l-2.771-4.464c-0.332-0.534-0.906-0.852-1.538-0.852h-2.364c-0.553,0-1,0.448-1,1s0.447,1,1,1h2.261l2.628,4.232l-6.955,7.58L2.053,7.187l2.628-4.233h2.33c0.552,0,1-0.448,1-1s-0.448-1-1-1H4.577c-0.623,0-1.212,0.327-1.537,0.853L0.267,6.272c-0.416,0.671-0.346,1.521,0.189,2.133l7.475,8.167c0.275,0.313,0.663,0.475,1.056,0.475c0.324,0,0.651-0.11,0.92-0.336l7.648-8.321C18.077,7.794,18.148,6.943,17.731,6.27z"></path><path d="M4.517,6.167C4.108,6.538,4.078,7.171,4.45,7.58l3.81,4.19c0.189,0.208,0.458,0.327,0.739,0.327c0,0,0,0,0,0c0.281,0,0.55-0.118,0.739-0.327l3.81-4.184c0.372-0.409,0.343-1.041-0.066-1.413c-0.407-0.372-1.039-0.342-1.412,0.066L9,9.612L5.929,6.234C5.558,5.826,4.926,5.796,4.517,6.167z"></path></svg>',
        loader: '<svg><defs><filter id="o--l-f"><feGaussianBlur in="SourceGraphic" stdDeviation="2" result="blur" /><feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 5 -2" result="gooey" /><feComposite in="SourceGraphic" in2="gooey" operator="atop"/></filter></defs></svg>',
        settings: '<svg viewBox="0 0 32 32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M13 2 L13 6 11 7 8 4 4 8 7 11 6 13 2 13 2 19 6 19 7 21 4 24 8 28 11 25 13 26 13 30 19 30 19 26 21 25 24 28 28 24 25 21 26 19 30 19 30 13 26 13 25 11 28 8 24 4 21 7 19 6 19 2 Z" /><circle cx="16" cy="16" r="4" /></svg>',
        qrcode: '<svg viewBox="0 0 512 512"><path d="M160 0H0v160h160V0zm-32 128H32V32h96v96z"/><path d="M64 64h32v32H64zM352 0v160h160V0H352zm128 128h-96V32h96v96z"/><path d="M416 64h32v32h-32zM0 512h160V352H0v160zm32-128h96v96H32v-96z"/><path d="M64 416h32v32H64zM256 0h64v32h-64zM256 128h32V96h32V64h-96V32h-32v64h64zM192 128h32v32h-32zM320 160h-32v32h-96v32h128zM32 288h32v-32H32v-64H0v128h32zM64 192h32v32H64z"/><path d="M192 320h64v-32h-32v-32h-64v-64h-32v64H96v64h32v-32h64zM288 256h32v64h-32zM288 352h-96v32h64v96h-64v32h96v-32h64v-32h-64z"/><path d="M192 416h32v32h-32zM320 352h32v64h-32zM480 416h-96v96h32v-64h64z"/><path d="M448 480h64v32h-64zM480 352h32v32h-32zM384 384h32v-96h-64v32h32zM448 224h-32v-32h-32v32h-32v32h128v-32h32v-32h-64zM448 288h64v32h-64z"/></svg>'
      };
      let isFirstRunAddon = !0, isCheckIframeSniff = !1;
      try {
        addonGo();
      } catch (n) {}
      urlDetector();
    }
  }
}();