Greasy Fork is available in English.

觅影

平平无奇的原网页解析VIP视频

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

// ==UserScript==
// @name         觅影
// @version      20.4.12
// @author       (o˘◡˘o)
// @description  平平无奇的原网页解析VIP视频
// @note         最近更新:集成 oo.movie 功能:豆瓣净化、换站搜索等;修复手机端`腾讯视频`不加载解析的情况;修复解析 凌泉;后台嗅探静音效果再提升一点点 #电脑端
// @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 "string" == typeof n ? e.includes(n) : n.test(n.source.includes("=http") ? e : e.replace(/=http[^&]+/, ""));
  }
  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, i;
    const o = /^\/\w/.test(n);
    if (n = o ? getCdnUrl(n) : n, !e && o) {
      const e = n.match(/cdn.bootcss.com\/([^\/]+)\/([^\/]+)\/.+(\.\w+)$/);
      t = e[1] + e[3], i = e[2];
    } else t = e.name || n, i = e.version || VERSION;
    const r = GlobalStore.get(t);
    let a;
    return a = r && r.version === i ? r.data : await window.fetch(n).then((function(n) {
      return n.text();
    })).then((function(n) {
      return GlobalStore.set(t, {
        data: n,
        version: i
      }), 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, i, o, 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], i = n[s + 1], "@" === t && (o = !0),
    o || "{" !== t || (r = !0), r && "}" === t && (r = !1), !r && "@" !== i && "}" !== i && ("}" === t || "," === t || ("{" === t || ";" === t) && o) && (n = n.slice(0, s + 1) + e + n.slice(s + 1),
    s += a, o = !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 i(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, i = n.length; t < i; t++) if (!1 === e.call(n[t], t, n[t])) return n;
      return n;
    }
    function o(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 o(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, i) {
      let o = [], r = p(e), a = i && h(i);
      for (let s = 0, l = n.length; s < l; s++) if (r) {
        let t = e(n[s]);
        t.length && en.apply(o, t);
      } else for (let r = n[s][e]; !(null == r || i && a(-1, r)); ) o.push(r), r = t ? r[e] : null;
      return o;
    }
    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 i = G.getComputedStyle(n, null);
        return t ? i.getPropertyValue(e) || void 0 : i[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), o = "" + e[0].toUpperCase() + e.slice(1);
        i((e + " " + gn.join(o + " ") + o).split(" "), (function(e, t) {
          if (t in hn) return mn[n] = t, !1;
        }));
      }
      return mn[n];
    }
    function S(n, e, t) {
      return void 0 === t && (t = _(n)), t || vn[n] || !m(e) ? e : e + "px";
    }
    function k(e, i) {
      let o = e.dataset[i] || e.dataset[t(i)];
      return bn.test(o) ? o : n(JSON.parse, o);
    }
    function I(e, i, o) {
      o = n(JSON.stringify, o), e.dataset[t(i)] = o;
    }
    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 T(n, e) {
      return !e || !on.call(e, (function(e) {
        return 0 > n.indexOf(e);
      }));
    }
    function E(n) {
      return jn[n] || _n[n] || n;
    }
    function M(n) {
      return n[xn] = n[xn] || {};
    }
    function A(n, e, t, i, o) {
      let r = M(n);
      r[e] = r[e] || [], r[e].push([ t, i, o ]), n.addEventListener(e, o);
    }
    function P(n) {
      let e = n.split(wn);
      return [ e[0], e.slice(1).sort() ];
    }
    function z(n, e, t, i, o) {
      let r = M(n);
      if (e) r[e] && (r[e] = r[e].filter((function(r) {
        let a = r[0], s = r[1], l = r[2];
        return !!(o && l.guid !== o.guid || !T(a, t) || i && i !== s) || void n.removeEventListener(e, l);
      }))); else for (e in r) z(n, e, t, i, o);
    }
    function N(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 q(n) {
      if (!d(n)) return [];
      if (Cn.test(n)) return [ B(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, o, r) {
      o ? 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 (En.test(t.type) && H.contains(t)) {
            let n = B("script");
            n.text = t.textContent.replace(Tn, ""), i(Mn, (function(e, i) {
              t[i] && (n[i] = t[i]);
            })), e.head.insertBefore(n, null), e.head.removeChild(n);
          }
        }));
      }(e, n.ownerDocument);
    }
    function V(n, e, t, o, r, a, s, l) {
      return i(n, (function(n, a) {
        i(pn(a), (function(n, a) {
          i(pn(e), (function(e, i) {
            let s = t ? i : a, l = t ? n : e;
            R(t ? a : i, l ? s.cloneNode(!0) : s, o, 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, B = L.createElement.bind(L), O = B("div"), F = B("table"), W = B("tbody"), X = B("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 i = n;
        if (d(n)) {
          let o = (a(t) ? t[0] : t) || L;
          if (i = /^#[\w-]*$/.test(n) ? o.getElementById(n.slice(1)) : /<.+>/.test(n) ? q(n) : e(n, o),
          !i) return;
        } else if (p(n)) return this.ready(n);
        (i.nodeType || i === G) && (i = [ i ]), this.length = i.length;
        for (let n = 0, e = this.length; n < e; n++) this[n] = i[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 = i, cn.each = function(n) {
      return i(this, n);
    }, cn.removeProp = function(n) {
      return this.each((function(e, t) {
        delete t[D[n] || n];
      }));
    }, pn.extend = o, cn.extend = function(n) {
      return o(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, i) {
          i[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) && i(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, i) {
            c(i) && i.setAttribute(n, e);
          }));
        }
        for (let e in n) this.attr(e, n[e]);
        return this;
      }
    }, cn.toggleClass = function(n, e) {
      let t = v(n), o = !f(e);
      return this.each((function(n, r) {
        c(r) && i(t, (function(n, t) {
          o ? 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 = O.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 = S(n, e, t),
        this.each((function(i, o) {
          c(o) && (t ? o.style.setProperty(n, e) : o.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] = k(this[0], e);
        return n;
      }
      if (d(n)) return 2 > arguments.length ? this[0] && k(this[0], n) : f(e) ? this : this.each((function(t, i) {
        I(i, n, e);
      }));
      for (let e in n) this.data(e, n[e]);
      return this;
    }, i([ !0, !1 ], (function(n, e) {
      i([ "Width", "Height" ], (function(n, t) {
        cn[(e ? "outer" : "inner") + t] = function(i) {
          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] + (i && e ? w(this[0], "margin" + (n ? "Top" : "Left")) + w(this[0], "margin" + (n ? "Bottom" : "Right")) : 0) : void 0;
        };
      }));
    })), i([ "Width", "Height" ], (function(n, e) {
      let t = e.toLowerCase();
      cn[t] = function(i) {
        if (!this[0]) return f(i) ? 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 o = parseInt(i, 10);
        return this.each((function(e, i) {
          if (c(i)) {
            let e = x(i, "boxSizing");
            i.style[t] = S(t, o + ("border-box" === e ? C(i, !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 = B(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 o = this;
      if (f(n)) this.each((function(n, e) {
        (c(e) || l(e) || s(e)) && z(e);
      })); else if (d(n)) p(e) && (t = e, e = ""), i(v(n), (function(n, i) {
        let r = P(i), a = r[0], p = r[1], d = E(a);
        o.each((function(n, i) {
          (c(i) || l(i) || s(i)) && (z(i, d, p, e, t), a !== d && z(i, a, p, e, t));
        }));
      })); else for (let e in n) this.off(e, n[e]);
      return this;
    }, cn.on = function(n, e, t, o, a) {
      let m = this;
      if (!d(n)) {
        for (let i in n) this.on(i, e, t, n[i], a);
        return this;
      }
      return d(e) || (f(e) || u(e) ? e = "" : f(t) ? (t = e, e = "") : (o = t, t = e,
      e = "")), p(o) || (o = t, t = void 0), o ? (i(v(n), (function(n, i) {
        let p = P(i), d = p[0], f = p[1], u = E(d), h = d !== u, g = d in _n;
        u && m.each((function(n, i) {
          if (c(i) || l(i) || s(i)) {
            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 && !T(f, s.namespace.split(wn))) return;
              let l = i;
              if (e) {
                let n = s.target;
                for (;!r(n, e); ) {
                  if (n === i) return;
                  if (n = n.parentNode, !n) return;
                }
                l = n, s.___cd = !0;
              } else if (g && s.___ot === d && i !== s.target && i.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 = o.call(l, s, s.___td);
              a && z(i, u, f, e, n), !1 === c && (s.preventDefault(), s.stopPropagation());
            };
            n.guid = o.guid = o.guid || pn.guid++, A(i, u, f, e, n), h && A(i, d, f, e, n);
          }
        }));
      })), this) : this;
    }, cn.one = function(n, e, t, i) {
      return this.on(n, e, t, i, !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 = P(n), t = e[0], i = e[1], o = E(t);
        if (!o) return this;
        let r = /^(mouse|pointer|contextmenu|drag|drop|click|dblclick)/i.test(o) ? "MouseEvents" : "HTMLEvents";
        (n = L.createEvent(r)).initEvent(o, !0, !0), n.namespace = i.join(wn), n.___ot = t;
      }
      n.___td = e;
      let t = n.___ot in _n;
      return this.each((function(e, i) {
        t && p(i[n.___ot]) && (i["___i" + n.___ot] = !0, i[n.___ot]()), i.dispatchEvent(n);
      }));
    };
    let Sn = /%20/g, kn = /\r?\n/g, In = /radio|checkbox/i;
    cn.serialize = function() {
      let n = "";
      return this.each((function(e, t) {
        i(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 = N(t);
            if (!f(e)) {
              i(K(e) ? e : [ e ], (function(e, i) {
                n += function(n, e) {
                  return "&" + encodeURIComponent(n) + "=" + encodeURIComponent(e.replace(kn, "\r")).replace(Sn, "+");
                }(t.name, i);
              }));
            }
          }
        }));
      })), n.slice(1);
    }, cn.val = function(n) {
      return arguments.length ? this.each((function(e, t) {
        let o = t.multiple && t.options;
        if (o || In.test(t.type)) {
          let e = K(n) ? nn.call(n, String) : u(n) ? [] : [ n + "" ];
          o ? i(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] && N(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 = {
      "*": O,
      tr: W,
      td: X,
      th: X,
      thead: F,
      tbody: F,
      tfoot: F
    };
    pn.parseHTML = q, 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, i = n.offsetParent || e.documentElement;
          for (;(i === e.body || i === e.documentElement) && "static" === x(i, "position"); ) i = i.parentNode;
          if (i !== n && c(i)) {
            let n = pn(i).offset();
            t.top -= n.top + w(i, "borderTopWidth"), t.left -= n.left + w(i, "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 Tn = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, En = /^$|^module$|\/(java|ecma)script/i, Mn = [ "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 i = pn(n)[0];
        pn(t).wrapAll(e ? i.cloneNode(!0) : i);
      }));
    }, cn.wrapInner = function(n) {
      return this.each((function(e, t) {
        let i = pn(t), o = i.contents();
        o.length ? o.wrapAll(n) : i.append(n);
      }));
    }, cn.has = function(n) {
      let t = d(n) ? function(t, i) {
        return e(n, i).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, i) {
        return (!d(n) || c(i)) && !e.call(i, t, i);
      }));
    }, 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, i) {
      n < collapseNum ? n >= collapseNum - 1 && (e = $(i).position().top) : t || e !== $(i).position().top ? (t = !0,
      $(i).prev("").addClass("is-collapse")) : !t && $(i).hasClass("o--collapse") && $(i).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 i = 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)) : i >= 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, i, o = n.trim().split(/[\s@]+/);
    const r = o.filter((function(n) {
      return /https?:\/\//.test(n);
    }));
    o = o.filter((function(n) {
      return !/https?:\/\//.test(n);
    })), r.forEach((function(n) {
      /\/\/m\.|\/m\/|\/\/msou/.test(n) ? t = n : i = n;
    }));
    let a = (isMobile ? t : i) || r[0];
    e && (a = toSearchUrl(a, e));
    const s = 0 < o.length ? o.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) {
      return e.url.includes(t) ? "" : '<a target="_blank" 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("|"));
  }
  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.12", 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|keyWord|kw|q)=([^&\?\/\.-]+)|(search\/|seacher-|q_)([^&\?\/\.-]+)/, collapseNum = isMobile ? 8 : 12;
  let 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://www.soku.com/m/y/video?q=**  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\n1090  https://1090ys.com/?c=search&sort=addtime&order=desc&page=1&wd=**\n\n哔滴  https://bde4.com/search/**\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\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\n1905  https://vip.1905.com/Search?q=**\n\n乐视  https://m.le.com/search?wd=**  https://so.le.com/s?wd=**\n\n完美  https://www.wanmeikk.me/so/-------------.html?wd=**";
  const BETTER_ADDONS = [ {
    name: "腾讯·播放页",
    match: /v\.qq\.com\/(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',
    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\/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]',
    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 = (document.querySelector('[name="apple-itunes-app"]').getAttribute("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 = +(document.querySelector(".qy-episode-num .select-item.selected .select-link").textContent || 0);
          if (e && e !== t) {
            t = e;
            let i = n[t - 1];
            if (i) {
              let n = i.playUrl.replace(/https?:/, location.protocol);
              if (n !== ooPlayUrl) {
                const e = ooPlayUrl || location.href;
                ooPlayUrl = n, E.emit("url.change", {
                  oldUrl: e,
                  newUrl: n,
                  autoPlay: !0
                });
              }
            }
          }
        }), 100);
      }
    }
  }, {
    name: "优酷·播放页",
    match: /m\.youku\.com\/a|m\.youku\.com\/v|v\.youku\.com\/v_/,
    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\/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\/(b|l)\//,
    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\.sohu\.com\/album\/|tv\.sohu\.com\/(v|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\/(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\/.+\/detail\.html/,
    vip: ".playerFooter, .programgroup",
    title: ".left-box .title, .episodeTitle, .video_title",
    hide: '.group-item[name*="广告"], .openClient'
  }, {
    name: "PPTV·播放页",
    match: /(v|m)\.pptv\.com\/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\/.*[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\/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;}"
  } ], E = emitter();
  let allowScale = !0;
  if (E.on("url.change", (function({oldUrl: n, newUrl: e, autoPlay: t}) {
    const i = BETTER_ADDONS.find((function(e) {
      return e.vip && Is(e.match, n);
    })), o = BETTER_ADDONS.find((function(n) {
      return n.vip && Is(n.match, e);
    }));
    addonGo(), i && o && 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, i = {
      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 i = 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(), i = setInterval((function() {
              const n = Date.now() - t;
              e.muted = !0, e.pause(), n > 4e3 && clearInterval(i);
            }), 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: i,
            _id: MESSAGE_ID,
            action: "play.video",
            from: location.href,
            origin: location.href,
            url: e,
            parent: !0
          }, "*") : window.parent.postMessage({
            pageInfo: n,
            usedTime: i,
            text: "NOT MATCH VIDEO URL",
            _id: MESSAGE_ID,
            action: "log",
            from: location.href,
            origin: location.href,
            url: e,
            parent: !0
          }, "*"));
        }
        const o = 0 < $("iframe[src]").length;
        if (4e3 <= i && o) return void clearInterval(t);
        const r = 0 < $("video").length;
        (i >= 3e4 || 2e3 <= i && r) && (clearInterval(t), window.parent.postMessage({
          pageInfo: n,
          usedTime: i,
          hasVideo: r,
          hasIframe: o,
          _id: MESSAGE_ID,
          action: "sniff.fail",
          from: location.href,
          origin: location.href,
          parent: !0
        }, "*"));
      }), 100);
    }(i) : fixM3u8Playing(i);
  } 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 || "", i = document.querySelector("video");
        i.classList.add("o--fail"), i.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(/\.bilibili\.com\/bangumi\/play\//)) $((function() {
      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), insertSearchAddon(n, ".media-wrapper, .ep-list-pre-wrapper"));
        }
        100 < n++ && clearInterval(e);
      }), 100);
    })); else 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;}"),
    $((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) {
        const t = $(".subject-title", e).text();
        insertSearchAddon(t, 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 + " 15%), -webkit-linear-gradient(right, " + n + " 0%, " + t + " 15%),-webkit-linear-gradient(top, " + n + " 0%, " + t + " 15%), -webkit-linear-gradient(left, " + n + " 0%, " + t + ' 15%);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--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;}.o--jump a:hover, .o--jump a.is-active {border: 1px solid #099268;background-color: #257942 !important;color: #effaf3 !important;}";
      }
      function addonGo() {
        const addon = BETTER_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), E.on("log", (function() {}));
          }
          _D && $("oo-logs").length, _D && $("oo-logs").length, $((function() {
            let _Mathmin = Math.min;
            if (addon.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 = BETTER_ADDONS.find((function(e) {
                  return e.fixUrl && e.match.test(n);
                }));
                return e ? !0 === e.fixUrl ? fixUrl(n) : e.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 i = sniffUrls.length, o = n.match(isVideoUrlRegex)[1];
                $(".o--vip-play .o--sources").append('<a _href="' + n + '" class="is-' + o + '">线路' + i + "</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"), i = 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) && i && i.isSupported()) {
                    const t = new i;
                    t.loadSource(n), t.attachMedia(e), t.on(i.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 === i ? ($(".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(i - 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), i = (sniffUrls.length + 1) / MAX_SNIFF_PLAY_COUNT, o = _Mathmin(10 * (2.5 * t + 2.5 * i + 5 * _Mathmax(t, i) + .5), 99).toFixed(4) + "%";
                if ($(".o--sniff-progress").css({
                  width: o
                }), !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, i = 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);
                    }), i + 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, i = getGlobal("playerObject") || getGlobal("MGTVPlayer") && getGlobal("MGTVPlayer").player || getGlobal("videoPlayer") || getGlobal("PLAYER");
                    i && i.pause instanceof Function && i.pause(), (!i || 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 i = $(n);
                if (0 === i.length) return void setTimeout((function() {
                  insertVipSource(n, e, t + 1);
                }), 250);
                const o = vipUrls.length > collapseNum;
                i.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("") + (o ? '<span class="o--vip-item o--normal o--collapse">➢</span>' : "") + "</div></div>"),
                o && 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));
              }
              function insertSearchAddon(n, e, t = "after", i = 0) {
                const o = Href.includes("m.douban.com/search");
                if (!n || !o && 0 < $(".o--jump").length || 20 < i) 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, i + 1);
                }), 500) : (r[a ? "last" : "first"]()[t]('<div class="o--jump">' + getSearchSourcesHtml(purifyKeyword(n), !o) + "</div>"),
                void (!o && smartCollapse(".o--jump a")));
              }
              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,jwfji.l192.npd,xxx.odjzmbjr.npd·jwfji·wfcmj.,md.mbgtmbaia.md·wi.,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,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,jwfji.l192.npd,xxx.odjzmbjr.npd·jwfji·wfcmj.,md.mbgtmbaia.md·wi.,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,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()).includes("http")) 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(addon.vip) ? addon.vip : [ addon.vip ];
              if (vips.forEach((function(n) {
                insertVipSource((n = n.split(/\s*\|\s*/))[0], n[1]);
              })), addon.title) {
                let n = 0, e = setInterval((function() {
                  let t = $(addon.title).eq(0).text();
                  t && (clearInterval(e), insertSearchAddon(t, ".o--vip-list", "after")), 100 < n++ && clearInterval(e);
                }), 100);
              }
            }
            addon.jump && $((function() {
              const n = "string" == typeof addon.keyword ? $(addon.keyword).eq(0).text() : "function" == typeof addon.keyword ? addon.keyword($) : getKeywordFromUrl(addon.keyword);
              (Array.isArray(addon.jump) ? addon.jump : addon.jump.split(/\s*,\s*/)).forEach((function(e) {
                e = e.split(/\s*\|\s*/), insertSearchAddon(n, e[0], e[1] || "after");
              }));
            })), 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);
      }
      let ooPlayUrl = "";
      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;
      addonGo(), urlDetector();
    }
  }
}();