Bilibili 旧播放页

恢复Bilibili旧版页面,为了那些念旧的人。

// ==UserScript==
// @name         Bilibili 旧播放页
// @namespace    MotooriKashin
// @version      10.8.1-1272ee50230293555dec1d2e23fc5c74215b4c86
// @description  恢复Bilibili旧版页面,为了那些念旧的人。
// @author       MotooriKashin, wly5556
// @homepage     https://github.com/MotooriKashin/Bilibili-Old
// @supportURL   https://github.com/MotooriKashin/Bilibili-Old/issues
// @icon         https://www.bilibili.com/favicon.ico
// @match        *://*.bilibili.com/*
// @connect      *
// @grant        GM.xmlHttpRequest
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM.deleteValue
// @grant        GM.cookie
// @grant        GM.registerMenuCommand
// @run-at       document-start
// @license      MIT
// ==/UserScript==

const MODULES = `
"use strict";
(() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __esm = (fn, res) => function __init() {
    return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
  };
  var __commonJS = (cb, mod2) => function __require() {
    return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports;
  };
  var __copyProps = (to, from, except, desc) => {
    if (from && typeof from === "object" || typeof from === "function") {
      for (let key of __getOwnPropNames(from))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
    }
    return to;
  };
  var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__getProtoOf(mod2)) : {}, __copyProps(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target,
    mod2
  ));

  // tampermonkey/gm.ts
  var init_gm = __esm({
    "tampermonkey/gm.ts"() {
      "use strict";
      init_tampermonkey();
      GM.fetch = function(input, init) {
        return new Promise((resolve, reject) => {
          if (input instanceof Request) {
            input = input.url;
          } else if (input instanceof URL) {
            input = input.toJSON();
          }
          if ((init == null ? void 0 : init.body) instanceof ArrayBuffer) {
            init.body = new Blob([init.body]);
          }
          input = new URL(input, location.href).toJSON();
          GM.xmlHttpRequest({
            url: input,
            method: init == null ? void 0 : init.method,
            data: init == null ? void 0 : init.body,
            anonymous: init ? init.credentials === "include" ? false : true : true,
            headers: init == null ? void 0 : init.headers,
            responseType: "arraybuffer",
            onload: ({ response, status, statusText, finalUrl, responseHeaders }) => {
              const headers = responseHeaders.replace(/\\r/g, "").split("\\n").reduce((s, d) => {
                const arr2 = d.split(":");
                arr2[0] && (s[arr2[0]] = arr2[1] || "");
                return s;
              }, {});
              if (!response)
                return reject(statusText);
              const res = new Response(response, { status, statusText, headers });
              Object.defineProperties(res, {
                url: { value: finalUrl }
              });
              resolve(res);
            },
            onerror: reject
          });
        });
      };
    }
  });

  // tampermonkey/polyfill/element-prototype-replaceChildren.ts
  var init_element_prototype_replaceChildren = __esm({
    "tampermonkey/polyfill/element-prototype-replaceChildren.ts"() {
      "use strict";
      init_tampermonkey();
      if (typeof Element.prototype.replaceChildren === "undefined") {
        Reflect.defineProperty(Element.prototype, "replaceChildren", {
          value: function() {
            while (this.lastChild)
              this.removeChild(this.lastChild);
            this.append.call(this, ...arguments);
          },
          writable: true,
          enumerable: false,
          configurable: true
        });
      }
    }
  });

  // tampermonkey/polyfill/proposal-relative-indexing-method.ts
  var at2;
  var init_proposal_relative_indexing_method = __esm({
    "tampermonkey/polyfill/proposal-relative-indexing-method.ts"() {
      "use strict";
      init_tampermonkey();
      if (typeof Array.prototype.at === "undefined") {
        let at = function(n) {
          n = Math.trunc(n) || 0;
          if (n < 0)
            n += this.length;
          if (n < 0 || n >= this.length)
            return void 0;
          return this[n];
        };
        at2 = at;
        const TypedArray = Reflect.getPrototypeOf(Int8Array);
        for (const C of [Array, String, TypedArray]) {
          Reflect.defineProperty(
            C.prototype,
            "at",
            {
              value: at,
              writable: true,
              enumerable: false,
              configurable: true
            }
          );
        }
      }
    }
  });

  // tampermonkey/polyfill/polyfill.ts
  var init_polyfill = __esm({
    "tampermonkey/polyfill/polyfill.ts"() {
      "use strict";
      init_tampermonkey();
      init_element_prototype_replaceChildren();
      init_proposal_relative_indexing_method();
    }
  });

  // tampermonkey/index.ts
  var init_tampermonkey = __esm({
    "tampermonkey/index.ts"() {
      "use strict";
      init_gm();
      init_polyfill();
    }
  });

  // node_modules/crypt/crypt.js
  var require_crypt = __commonJS({
    "node_modules/crypt/crypt.js"(exports2, module2) {
      init_tampermonkey();
      (function() {
        var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt = {
          // Bit-wise rotation left
          rotl: function(n, b) {
            return n << b | n >>> 32 - b;
          },
          // Bit-wise rotation right
          rotr: function(n, b) {
            return n << 32 - b | n >>> b;
          },
          // Swap big-endian to little-endian and vice versa
          endian: function(n) {
            if (n.constructor == Number) {
              return crypt.rotl(n, 8) & 16711935 | crypt.rotl(n, 24) & 4278255360;
            }
            for (var i = 0; i < n.length; i++)
              n[i] = crypt.endian(n[i]);
            return n;
          },
          // Generate an array of any length of random bytes
          randomBytes: function(n) {
            for (var bytes = []; n > 0; n--)
              bytes.push(Math.floor(Math.random() * 256));
            return bytes;
          },
          // Convert a byte array to big-endian 32-bit words
          bytesToWords: function(bytes) {
            for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
              words[b >>> 5] |= bytes[i] << 24 - b % 32;
            return words;
          },
          // Convert big-endian 32-bit words to a byte array
          wordsToBytes: function(words) {
            for (var bytes = [], b = 0; b < words.length * 32; b += 8)
              bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
            return bytes;
          },
          // Convert a byte array to a hex string
          bytesToHex: function(bytes) {
            for (var hex = [], i = 0; i < bytes.length; i++) {
              hex.push((bytes[i] >>> 4).toString(16));
              hex.push((bytes[i] & 15).toString(16));
            }
            return hex.join("");
          },
          // Convert a hex string to a byte array
          hexToBytes: function(hex) {
            for (var bytes = [], c = 0; c < hex.length; c += 2)
              bytes.push(parseInt(hex.substr(c, 2), 16));
            return bytes;
          },
          // Convert a byte array to a base-64 string
          bytesToBase64: function(bytes) {
            for (var base642 = [], i = 0; i < bytes.length; i += 3) {
              var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
              for (var j = 0; j < 4; j++)
                if (i * 8 + j * 6 <= bytes.length * 8)
                  base642.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63));
                else
                  base642.push("=");
            }
            return base642.join("");
          },
          // Convert a base-64 string to a byte array
          base64ToBytes: function(base642) {
            base642 = base642.replace(/[^A-Z0-9+\\/]/ig, "");
            for (var bytes = [], i = 0, imod4 = 0; i < base642.length; imod4 = ++i % 4) {
              if (imod4 == 0)
                continue;
              bytes.push((base64map.indexOf(base642.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base642.charAt(i)) >>> 6 - imod4 * 2);
            }
            return bytes;
          }
        };
        module2.exports = crypt;
      })();
    }
  });

  // node_modules/charenc/charenc.js
  var require_charenc = __commonJS({
    "node_modules/charenc/charenc.js"(exports2, module2) {
      init_tampermonkey();
      var charenc = {
        // UTF-8 encoding
        utf8: {
          // Convert a string to a byte array
          stringToBytes: function(str) {
            return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
          },
          // Convert a byte array to a string
          bytesToString: function(bytes) {
            return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
          }
        },
        // Binary encoding
        bin: {
          // Convert a string to a byte array
          stringToBytes: function(str) {
            for (var bytes = [], i = 0; i < str.length; i++)
              bytes.push(str.charCodeAt(i) & 255);
            return bytes;
          },
          // Convert a byte array to a string
          bytesToString: function(bytes) {
            for (var str = [], i = 0; i < bytes.length; i++)
              str.push(String.fromCharCode(bytes[i]));
            return str.join("");
          }
        }
      };
      module2.exports = charenc;
    }
  });

  // node_modules/is-buffer/index.js
  var require_is_buffer = __commonJS({
    "node_modules/is-buffer/index.js"(exports2, module2) {
      init_tampermonkey();
      module2.exports = function(obj) {
        return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
      };
      function isBuffer(obj) {
        return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
      }
      function isSlowBuffer(obj) {
        return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0));
      }
    }
  });

  // node_modules/md5/md5.js
  var require_md5 = __commonJS({
    "node_modules/md5/md5.js"(exports2, module2) {
      init_tampermonkey();
      (function() {
        var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer = require_is_buffer(), bin = require_charenc().bin, md54 = function(message, options) {
          if (message.constructor == String)
            if (options && options.encoding === "binary")
              message = bin.stringToBytes(message);
            else
              message = utf8.stringToBytes(message);
          else if (isBuffer(message))
            message = Array.prototype.slice.call(message, 0);
          else if (!Array.isArray(message) && message.constructor !== Uint8Array)
            message = message.toString();
          var m = crypt.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
          for (var i = 0; i < m.length; i++) {
            m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
          }
          m[l >>> 5] |= 128 << l % 32;
          m[(l + 64 >>> 9 << 4) + 14] = l;
          var FF = md54._ff, GG = md54._gg, HH = md54._hh, II = md54._ii;
          for (var i = 0; i < m.length; i += 16) {
            var aa = a, bb = b, cc = c, dd = d;
            a = FF(a, b, c, d, m[i + 0], 7, -680876936);
            d = FF(d, a, b, c, m[i + 1], 12, -389564586);
            c = FF(c, d, a, b, m[i + 2], 17, 606105819);
            b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
            a = FF(a, b, c, d, m[i + 4], 7, -176418897);
            d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
            c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
            b = FF(b, c, d, a, m[i + 7], 22, -45705983);
            a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
            d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
            c = FF(c, d, a, b, m[i + 10], 17, -42063);
            b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
            a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
            d = FF(d, a, b, c, m[i + 13], 12, -40341101);
            c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
            b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
            a = GG(a, b, c, d, m[i + 1], 5, -165796510);
            d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
            c = GG(c, d, a, b, m[i + 11], 14, 643717713);
            b = GG(b, c, d, a, m[i + 0], 20, -373897302);
            a = GG(a, b, c, d, m[i + 5], 5, -701558691);
            d = GG(d, a, b, c, m[i + 10], 9, 38016083);
            c = GG(c, d, a, b, m[i + 15], 14, -660478335);
            b = GG(b, c, d, a, m[i + 4], 20, -405537848);
            a = GG(a, b, c, d, m[i + 9], 5, 568446438);
            d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
            c = GG(c, d, a, b, m[i + 3], 14, -187363961);
            b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
            a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
            d = GG(d, a, b, c, m[i + 2], 9, -51403784);
            c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
            b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
            a = HH(a, b, c, d, m[i + 5], 4, -378558);
            d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
            c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
            b = HH(b, c, d, a, m[i + 14], 23, -35309556);
            a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
            d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
            c = HH(c, d, a, b, m[i + 7], 16, -155497632);
            b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
            a = HH(a, b, c, d, m[i + 13], 4, 681279174);
            d = HH(d, a, b, c, m[i + 0], 11, -358537222);
            c = HH(c, d, a, b, m[i + 3], 16, -722521979);
            b = HH(b, c, d, a, m[i + 6], 23, 76029189);
            a = HH(a, b, c, d, m[i + 9], 4, -640364487);
            d = HH(d, a, b, c, m[i + 12], 11, -421815835);
            c = HH(c, d, a, b, m[i + 15], 16, 530742520);
            b = HH(b, c, d, a, m[i + 2], 23, -995338651);
            a = II(a, b, c, d, m[i + 0], 6, -198630844);
            d = II(d, a, b, c, m[i + 7], 10, 1126891415);
            c = II(c, d, a, b, m[i + 14], 15, -1416354905);
            b = II(b, c, d, a, m[i + 5], 21, -57434055);
            a = II(a, b, c, d, m[i + 12], 6, 1700485571);
            d = II(d, a, b, c, m[i + 3], 10, -1894986606);
            c = II(c, d, a, b, m[i + 10], 15, -1051523);
            b = II(b, c, d, a, m[i + 1], 21, -2054922799);
            a = II(a, b, c, d, m[i + 8], 6, 1873313359);
            d = II(d, a, b, c, m[i + 15], 10, -30611744);
            c = II(c, d, a, b, m[i + 6], 15, -1560198380);
            b = II(b, c, d, a, m[i + 13], 21, 1309151649);
            a = II(a, b, c, d, m[i + 4], 6, -145523070);
            d = II(d, a, b, c, m[i + 11], 10, -1120210379);
            c = II(c, d, a, b, m[i + 2], 15, 718787259);
            b = II(b, c, d, a, m[i + 9], 21, -343485551);
            a = a + aa >>> 0;
            b = b + bb >>> 0;
            c = c + cc >>> 0;
            d = d + dd >>> 0;
          }
          return crypt.endian([a, b, c, d]);
        };
        md54._ff = function(a, b, c, d, x, s, t) {
          var n = a + (b & c | ~b & d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._gg = function(a, b, c, d, x, s, t) {
          var n = a + (b & d | c & ~d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._hh = function(a, b, c, d, x, s, t) {
          var n = a + (b ^ c ^ d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._ii = function(a, b, c, d, x, s, t) {
          var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._blocksize = 16;
        md54._digestsize = 16;
        module2.exports = function(message, options) {
          if (message === void 0 || message === null)
            throw new Error("Illegal argument " + message);
          var digestbytes = crypt.wordsToBytes(md54(message, options));
          return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
        };
      })();
    }
  });

  // node_modules/@protobufjs/aspromise/index.js
  var require_aspromise = __commonJS({
    "node_modules/@protobufjs/aspromise/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = asPromise;
      function asPromise(fn, ctx) {
        var params = new Array(arguments.length - 1), offset3 = 0, index = 2, pending = true;
        while (index < arguments.length)
          params[offset3++] = arguments[index++];
        return new Promise(function executor(resolve, reject) {
          params[offset3] = function callback(err2) {
            if (pending) {
              pending = false;
              if (err2)
                reject(err2);
              else {
                var params2 = new Array(arguments.length - 1), offset4 = 0;
                while (offset4 < params2.length)
                  params2[offset4++] = arguments[offset4];
                resolve.apply(null, params2);
              }
            }
          };
          try {
            fn.apply(ctx || null, params);
          } catch (err2) {
            if (pending) {
              pending = false;
              reject(err2);
            }
          }
        });
      }
    }
  });

  // node_modules/@protobufjs/base64/index.js
  var require_base64 = __commonJS({
    "node_modules/@protobufjs/base64/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var base642 = exports2;
      base642.length = function length2(string) {
        var p = string.length;
        if (!p)
          return 0;
        var n = 0;
        while (--p % 4 > 1 && string.charAt(p) === "=")
          ++n;
        return Math.ceil(string.length * 3) / 4 - n;
      };
      var b64 = new Array(64);
      var s64 = new Array(123);
      for (i = 0; i < 64; )
        s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
      var i;
      base642.encode = function encode(buffer, start, end) {
        var parts = null, chunk = [];
        var i2 = 0, j = 0, t;
        while (start < end) {
          var b = buffer[start++];
          switch (j) {
            case 0:
              chunk[i2++] = b64[b >> 2];
              t = (b & 3) << 4;
              j = 1;
              break;
            case 1:
              chunk[i2++] = b64[t | b >> 4];
              t = (b & 15) << 2;
              j = 2;
              break;
            case 2:
              chunk[i2++] = b64[t | b >> 6];
              chunk[i2++] = b64[b & 63];
              j = 0;
              break;
          }
          if (i2 > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i2 = 0;
          }
        }
        if (j) {
          chunk[i2++] = b64[t];
          chunk[i2++] = 61;
          if (j === 1)
            chunk[i2++] = 61;
        }
        if (parts) {
          if (i2)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i2)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i2));
      };
      var invalidEncoding = "invalid encoding";
      base642.decode = function decode(string, buffer, offset3) {
        var start = offset3;
        var j = 0, t;
        for (var i2 = 0; i2 < string.length; ) {
          var c = string.charCodeAt(i2++);
          if (c === 61 && j > 1)
            break;
          if ((c = s64[c]) === void 0)
            throw Error(invalidEncoding);
          switch (j) {
            case 0:
              t = c;
              j = 1;
              break;
            case 1:
              buffer[offset3++] = t << 2 | (c & 48) >> 4;
              t = c;
              j = 2;
              break;
            case 2:
              buffer[offset3++] = (t & 15) << 4 | (c & 60) >> 2;
              t = c;
              j = 3;
              break;
            case 3:
              buffer[offset3++] = (t & 3) << 6 | c;
              j = 0;
              break;
          }
        }
        if (j === 1)
          throw Error(invalidEncoding);
        return offset3 - start;
      };
      base642.test = function test(string) {
        return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?\$/.test(string);
      };
    }
  });

  // node_modules/@protobufjs/eventemitter/index.js
  var require_eventemitter = __commonJS({
    "node_modules/@protobufjs/eventemitter/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = EventEmitter;
      function EventEmitter() {
        this._listeners = {};
      }
      EventEmitter.prototype.on = function on(evt, fn, ctx) {
        (this._listeners[evt] || (this._listeners[evt] = [])).push({
          fn,
          ctx: ctx || this
        });
        return this;
      };
      EventEmitter.prototype.off = function off(evt, fn) {
        if (evt === void 0)
          this._listeners = {};
        else {
          if (fn === void 0)
            this._listeners[evt] = [];
          else {
            var listeners = this._listeners[evt];
            for (var i = 0; i < listeners.length; )
              if (listeners[i].fn === fn)
                listeners.splice(i, 1);
              else
                ++i;
          }
        }
        return this;
      };
      EventEmitter.prototype.emit = function emit(evt) {
        var listeners = this._listeners[evt];
        if (listeners) {
          var args = [], i = 1;
          for (; i < arguments.length; )
            args.push(arguments[i++]);
          for (i = 0; i < listeners.length; )
            listeners[i].fn.apply(listeners[i++].ctx, args);
        }
        return this;
      };
    }
  });

  // node_modules/@protobufjs/float/index.js
  var require_float = __commonJS({
    "node_modules/@protobufjs/float/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = factory(factory);
      function factory(exports3) {
        if (typeof Float32Array !== "undefined")
          (function() {
            var f32 = new Float32Array([-0]), f8b = new Uint8Array(f32.buffer), le = f8b[3] === 128;
            function writeFloat_f32_cpy(val, buf, pos) {
              f32[0] = val;
              buf[pos] = f8b[0];
              buf[pos + 1] = f8b[1];
              buf[pos + 2] = f8b[2];
              buf[pos + 3] = f8b[3];
            }
            function writeFloat_f32_rev(val, buf, pos) {
              f32[0] = val;
              buf[pos] = f8b[3];
              buf[pos + 1] = f8b[2];
              buf[pos + 2] = f8b[1];
              buf[pos + 3] = f8b[0];
            }
            exports3.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;
            exports3.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;
            function readFloat_f32_cpy(buf, pos) {
              f8b[0] = buf[pos];
              f8b[1] = buf[pos + 1];
              f8b[2] = buf[pos + 2];
              f8b[3] = buf[pos + 3];
              return f32[0];
            }
            function readFloat_f32_rev(buf, pos) {
              f8b[3] = buf[pos];
              f8b[2] = buf[pos + 1];
              f8b[1] = buf[pos + 2];
              f8b[0] = buf[pos + 3];
              return f32[0];
            }
            exports3.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;
            exports3.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;
          })();
        else
          (function() {
            function writeFloat_ieee754(writeUint, val, buf, pos) {
              var sign = val < 0 ? 1 : 0;
              if (sign)
                val = -val;
              if (val === 0)
                writeUint(1 / val > 0 ? (
                  /* positive */
                  0
                ) : (
                  /* negative 0 */
                  2147483648
                ), buf, pos);
              else if (isNaN(val))
                writeUint(2143289344, buf, pos);
              else if (val > 34028234663852886e22)
                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);
              else if (val < 11754943508222875e-54)
                writeUint((sign << 31 | Math.round(val / 1401298464324817e-60)) >>> 0, buf, pos);
              else {
                var exponent = Math.floor(Math.log(val) / Math.LN2), mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;
                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);
              }
            }
            exports3.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);
            exports3.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);
            function readFloat_ieee754(readUint, buf, pos) {
              var uint = readUint(buf, pos), sign = (uint >> 31) * 2 + 1, exponent = uint >>> 23 & 255, mantissa = uint & 8388607;
              return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 1401298464324817e-60 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);
            }
            exports3.readFloatLE = readFloat_ieee754.bind(null, readUintLE);
            exports3.readFloatBE = readFloat_ieee754.bind(null, readUintBE);
          })();
        if (typeof Float64Array !== "undefined")
          (function() {
            var f64 = new Float64Array([-0]), f8b = new Uint8Array(f64.buffer), le = f8b[7] === 128;
            function writeDouble_f64_cpy(val, buf, pos) {
              f64[0] = val;
              buf[pos] = f8b[0];
              buf[pos + 1] = f8b[1];
              buf[pos + 2] = f8b[2];
              buf[pos + 3] = f8b[3];
              buf[pos + 4] = f8b[4];
              buf[pos + 5] = f8b[5];
              buf[pos + 6] = f8b[6];
              buf[pos + 7] = f8b[7];
            }
            function writeDouble_f64_rev(val, buf, pos) {
              f64[0] = val;
              buf[pos] = f8b[7];
              buf[pos + 1] = f8b[6];
              buf[pos + 2] = f8b[5];
              buf[pos + 3] = f8b[4];
              buf[pos + 4] = f8b[3];
              buf[pos + 5] = f8b[2];
              buf[pos + 6] = f8b[1];
              buf[pos + 7] = f8b[0];
            }
            exports3.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;
            exports3.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;
            function readDouble_f64_cpy(buf, pos) {
              f8b[0] = buf[pos];
              f8b[1] = buf[pos + 1];
              f8b[2] = buf[pos + 2];
              f8b[3] = buf[pos + 3];
              f8b[4] = buf[pos + 4];
              f8b[5] = buf[pos + 5];
              f8b[6] = buf[pos + 6];
              f8b[7] = buf[pos + 7];
              return f64[0];
            }
            function readDouble_f64_rev(buf, pos) {
              f8b[7] = buf[pos];
              f8b[6] = buf[pos + 1];
              f8b[5] = buf[pos + 2];
              f8b[4] = buf[pos + 3];
              f8b[3] = buf[pos + 4];
              f8b[2] = buf[pos + 5];
              f8b[1] = buf[pos + 6];
              f8b[0] = buf[pos + 7];
              return f64[0];
            }
            exports3.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;
            exports3.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;
          })();
        else
          (function() {
            function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {
              var sign = val < 0 ? 1 : 0;
              if (sign)
                val = -val;
              if (val === 0) {
                writeUint(0, buf, pos + off0);
                writeUint(1 / val > 0 ? (
                  /* positive */
                  0
                ) : (
                  /* negative 0 */
                  2147483648
                ), buf, pos + off1);
              } else if (isNaN(val)) {
                writeUint(0, buf, pos + off0);
                writeUint(2146959360, buf, pos + off1);
              } else if (val > 17976931348623157e292) {
                writeUint(0, buf, pos + off0);
                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);
              } else {
                var mantissa;
                if (val < 22250738585072014e-324) {
                  mantissa = val / 5e-324;
                  writeUint(mantissa >>> 0, buf, pos + off0);
                  writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);
                } else {
                  var exponent = Math.floor(Math.log(val) / Math.LN2);
                  if (exponent === 1024)
                    exponent = 1023;
                  mantissa = val * Math.pow(2, -exponent);
                  writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);
                  writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);
                }
              }
            }
            exports3.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);
            exports3.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);
            function readDouble_ieee754(readUint, off0, off1, buf, pos) {
              var lo = readUint(buf, pos + off0), hi = readUint(buf, pos + off1);
              var sign = (hi >> 31) * 2 + 1, exponent = hi >>> 20 & 2047, mantissa = 4294967296 * (hi & 1048575) + lo;
              return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);
            }
            exports3.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);
            exports3.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);
          })();
        return exports3;
      }
      function writeUintLE(val, buf, pos) {
        buf[pos] = val & 255;
        buf[pos + 1] = val >>> 8 & 255;
        buf[pos + 2] = val >>> 16 & 255;
        buf[pos + 3] = val >>> 24;
      }
      function writeUintBE(val, buf, pos) {
        buf[pos] = val >>> 24;
        buf[pos + 1] = val >>> 16 & 255;
        buf[pos + 2] = val >>> 8 & 255;
        buf[pos + 3] = val & 255;
      }
      function readUintLE(buf, pos) {
        return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0;
      }
      function readUintBE(buf, pos) {
        return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0;
      }
    }
  });

  // node_modules/@protobufjs/inquire/index.js
  var require_inquire = __commonJS({
    "node_modules/@protobufjs/inquire/index.js"(exports, module) {
      "use strict";
      init_tampermonkey();
      module.exports = inquire;
      function inquire(moduleName) {
        try {
          var mod = eval("quire".replace(/^/, "re"))(moduleName);
          if (mod && (mod.length || Object.keys(mod).length))
            return mod;
        } catch (e) {
        }
        return null;
      }
    }
  });

  // node_modules/@protobufjs/utf8/index.js
  var require_utf8 = __commonJS({
    "node_modules/@protobufjs/utf8/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var utf8 = exports2;
      utf8.length = function utf8_length(string) {
        var len = 0, c = 0;
        for (var i = 0; i < string.length; ++i) {
          c = string.charCodeAt(i);
          if (c < 128)
            len += 1;
          else if (c < 2048)
            len += 2;
          else if ((c & 64512) === 55296 && (string.charCodeAt(i + 1) & 64512) === 56320) {
            ++i;
            len += 4;
          } else
            len += 3;
        }
        return len;
      };
      utf8.read = function utf8_read(buffer, start, end) {
        var len = end - start;
        if (len < 1)
          return "";
        var parts = null, chunk = [], i = 0, t;
        while (start < end) {
          t = buffer[start++];
          if (t < 128)
            chunk[i++] = t;
          else if (t > 191 && t < 224)
            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;
          else if (t > 239 && t < 365) {
            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 65536;
            chunk[i++] = 55296 + (t >> 10);
            chunk[i++] = 56320 + (t & 1023);
          } else
            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;
          if (i > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i = 0;
          }
        }
        if (parts) {
          if (i)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i));
      };
      utf8.write = function utf8_write(string, buffer, offset3) {
        var start = offset3, c1, c2;
        for (var i = 0; i < string.length; ++i) {
          c1 = string.charCodeAt(i);
          if (c1 < 128) {
            buffer[offset3++] = c1;
          } else if (c1 < 2048) {
            buffer[offset3++] = c1 >> 6 | 192;
            buffer[offset3++] = c1 & 63 | 128;
          } else if ((c1 & 64512) === 55296 && ((c2 = string.charCodeAt(i + 1)) & 64512) === 56320) {
            c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);
            ++i;
            buffer[offset3++] = c1 >> 18 | 240;
            buffer[offset3++] = c1 >> 12 & 63 | 128;
            buffer[offset3++] = c1 >> 6 & 63 | 128;
            buffer[offset3++] = c1 & 63 | 128;
          } else {
            buffer[offset3++] = c1 >> 12 | 224;
            buffer[offset3++] = c1 >> 6 & 63 | 128;
            buffer[offset3++] = c1 & 63 | 128;
          }
        }
        return offset3 - start;
      };
    }
  });

  // node_modules/@protobufjs/pool/index.js
  var require_pool = __commonJS({
    "node_modules/@protobufjs/pool/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = pool;
      function pool(alloc, slice, size) {
        var SIZE = size || 8192;
        var MAX = SIZE >>> 1;
        var slab = null;
        var offset3 = SIZE;
        return function pool_alloc(size2) {
          if (size2 < 1 || size2 > MAX)
            return alloc(size2);
          if (offset3 + size2 > SIZE) {
            slab = alloc(SIZE);
            offset3 = 0;
          }
          var buf = slice.call(slab, offset3, offset3 += size2);
          if (offset3 & 7)
            offset3 = (offset3 | 7) + 1;
          return buf;
        };
      }
    }
  });

  // node_modules/protobufjs/src/util/longbits.js
  var require_longbits = __commonJS({
    "node_modules/protobufjs/src/util/longbits.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = LongBits;
      var util = require_minimal();
      function LongBits(lo, hi) {
        this.lo = lo >>> 0;
        this.hi = hi >>> 0;
      }
      var zero = LongBits.zero = new LongBits(0, 0);
      zero.toNumber = function() {
        return 0;
      };
      zero.zzEncode = zero.zzDecode = function() {
        return this;
      };
      zero.length = function() {
        return 1;
      };
      var zeroHash = LongBits.zeroHash = "\\0\\0\\0\\0\\0\\0\\0\\0";
      LongBits.fromNumber = function fromNumber(value) {
        if (value === 0)
          return zero;
        var sign = value < 0;
        if (sign)
          value = -value;
        var lo = value >>> 0, hi = (value - lo) / 4294967296 >>> 0;
        if (sign) {
          hi = ~hi >>> 0;
          lo = ~lo >>> 0;
          if (++lo > 4294967295) {
            lo = 0;
            if (++hi > 4294967295)
              hi = 0;
          }
        }
        return new LongBits(lo, hi);
      };
      LongBits.from = function from(value) {
        if (typeof value === "number")
          return LongBits.fromNumber(value);
        if (util.isString(value)) {
          if (util.Long)
            value = util.Long.fromString(value);
          else
            return LongBits.fromNumber(parseInt(value, 10));
        }
        return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
      };
      LongBits.prototype.toNumber = function toNumber(unsigned) {
        if (!unsigned && this.hi >>> 31) {
          var lo = ~this.lo + 1 >>> 0, hi = ~this.hi >>> 0;
          if (!lo)
            hi = hi + 1 >>> 0;
          return -(lo + hi * 4294967296);
        }
        return this.lo + this.hi * 4294967296;
      };
      LongBits.prototype.toLong = function toLong(unsigned) {
        return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned)) : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };
      };
      var charCodeAt = String.prototype.charCodeAt;
      LongBits.fromHash = function fromHash(hash) {
        if (hash === zeroHash)
          return zero;
        return new LongBits(
          (charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0,
          (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0
        );
      };
      LongBits.prototype.toHash = function toHash() {
        return String.fromCharCode(
          this.lo & 255,
          this.lo >>> 8 & 255,
          this.lo >>> 16 & 255,
          this.lo >>> 24,
          this.hi & 255,
          this.hi >>> 8 & 255,
          this.hi >>> 16 & 255,
          this.hi >>> 24
        );
      };
      LongBits.prototype.zzEncode = function zzEncode() {
        var mask = this.hi >> 31;
        this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
        this.lo = (this.lo << 1 ^ mask) >>> 0;
        return this;
      };
      LongBits.prototype.zzDecode = function zzDecode() {
        var mask = -(this.lo & 1);
        this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
        this.hi = (this.hi >>> 1 ^ mask) >>> 0;
        return this;
      };
      LongBits.prototype.length = function length2() {
        var part0 = this.lo, part1 = (this.lo >>> 28 | this.hi << 4) >>> 0, part2 = this.hi >>> 24;
        return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10;
      };
    }
  });

  // node_modules/protobufjs/src/util/minimal.js
  var require_minimal = __commonJS({
    "node_modules/protobufjs/src/util/minimal.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var util = exports2;
      util.asPromise = require_aspromise();
      util.base64 = require_base64();
      util.EventEmitter = require_eventemitter();
      util.float = require_float();
      util.inquire = require_inquire();
      util.utf8 = require_utf8();
      util.pool = require_pool();
      util.LongBits = require_longbits();
      util.isNode = Boolean(typeof global !== "undefined" && global && global.process && global.process.versions && global.process.versions.node);
      util.global = util.isNode && global || typeof window !== "undefined" && window || typeof self !== "undefined" && self || exports2;
      util.emptyArray = Object.freeze ? Object.freeze([]) : (
        /* istanbul ignore next */
        []
      );
      util.emptyObject = Object.freeze ? Object.freeze({}) : (
        /* istanbul ignore next */
        {}
      );
      util.isInteger = Number.isInteger || /* istanbul ignore next */
      function isInteger(value) {
        return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
      };
      util.isString = function isString(value) {
        return typeof value === "string" || value instanceof String;
      };
      util.isObject = function isObject2(value) {
        return value && typeof value === "object";
      };
      util.isset = /**
       * Checks if a property on a message is considered to be present.
       * @param {Object} obj Plain object or message instance
       * @param {string} prop Property name
       * @returns {boolean} \`true\` if considered to be present, otherwise \`false\`
       */
      util.isSet = function isSet(obj, prop) {
        var value = obj[prop];
        if (value != null && obj.hasOwnProperty(prop))
          return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;
        return false;
      };
      util.Buffer = function() {
        try {
          var Buffer2 = util.inquire("buffer").Buffer;
          return Buffer2.prototype.utf8Write ? Buffer2 : (
            /* istanbul ignore next */
            null
          );
        } catch (e) {
          return null;
        }
      }();
      util._Buffer_from = null;
      util._Buffer_allocUnsafe = null;
      util.newBuffer = function newBuffer(sizeOrArray) {
        return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray);
      };
      util.Array = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
      util.Long = /* istanbul ignore next */
      util.global.dcodeIO && /* istanbul ignore next */
      util.global.dcodeIO.Long || /* istanbul ignore next */
      util.global.Long || util.inquire("long");
      util.key2Re = /^true|false|0|1\$/;
      util.key32Re = /^-?(?:0|[1-9][0-9]*)\$/;
      util.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))\$/;
      util.longToHash = function longToHash(value) {
        return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash;
      };
      util.longFromHash = function longFromHash(hash, unsigned) {
        var bits2 = util.LongBits.fromHash(hash);
        if (util.Long)
          return util.Long.fromBits(bits2.lo, bits2.hi, unsigned);
        return bits2.toNumber(Boolean(unsigned));
      };
      function merge(dst, src, ifNotSet) {
        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)
          if (dst[keys[i]] === void 0 || !ifNotSet)
            dst[keys[i]] = src[keys[i]];
        return dst;
      }
      util.merge = merge;
      util.lcFirst = function lcFirst(str) {
        return str.charAt(0).toLowerCase() + str.substring(1);
      };
      function newError(name) {
        function CustomError(message, properties) {
          if (!(this instanceof CustomError))
            return new CustomError(message, properties);
          Object.defineProperty(this, "message", { get: function() {
            return message;
          } });
          if (Error.captureStackTrace)
            Error.captureStackTrace(this, CustomError);
          else
            Object.defineProperty(this, "stack", { value: new Error().stack || "" });
          if (properties)
            merge(this, properties);
        }
        CustomError.prototype = Object.create(Error.prototype, {
          constructor: {
            value: CustomError,
            writable: true,
            enumerable: false,
            configurable: true
          },
          name: {
            get: function get() {
              return name;
            },
            set: void 0,
            enumerable: false,
            // configurable: false would accurately preserve the behavior of
            // the original, but I'm guessing that was not intentional.
            // For an actual error subclass, this property would
            // be configurable.
            configurable: true
          },
          toString: {
            value: function value() {
              return this.name + ": " + this.message;
            },
            writable: true,
            enumerable: false,
            configurable: true
          }
        });
        return CustomError;
      }
      util.newError = newError;
      util.ProtocolError = newError("ProtocolError");
      util.oneOfGetter = function getOneOf(fieldNames) {
        var fieldMap = {};
        for (var i = 0; i < fieldNames.length; ++i)
          fieldMap[fieldNames[i]] = 1;
        return function() {
          for (var keys = Object.keys(this), i2 = keys.length - 1; i2 > -1; --i2)
            if (fieldMap[keys[i2]] === 1 && this[keys[i2]] !== void 0 && this[keys[i2]] !== null)
              return keys[i2];
        };
      };
      util.oneOfSetter = function setOneOf(fieldNames) {
        return function(name) {
          for (var i = 0; i < fieldNames.length; ++i)
            if (fieldNames[i] !== name)
              delete this[fieldNames[i]];
        };
      };
      util.toJSONOptions = {
        longs: String,
        enums: String,
        bytes: String,
        json: true
      };
      util._configure = function() {
        var Buffer2 = util.Buffer;
        if (!Buffer2) {
          util._Buffer_from = util._Buffer_allocUnsafe = null;
          return;
        }
        util._Buffer_from = Buffer2.from !== Uint8Array.from && Buffer2.from || /* istanbul ignore next */
        function Buffer_from(value, encoding) {
          return new Buffer2(value, encoding);
        };
        util._Buffer_allocUnsafe = Buffer2.allocUnsafe || /* istanbul ignore next */
        function Buffer_allocUnsafe(size) {
          return new Buffer2(size);
        };
      };
    }
  });

  // node_modules/protobufjs/src/writer.js
  var require_writer = __commonJS({
    "node_modules/protobufjs/src/writer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Writer2;
      var util = require_minimal();
      var BufferWriter;
      var LongBits = util.LongBits;
      var base642 = util.base64;
      var utf8 = util.utf8;
      function Op(fn, len, val) {
        this.fn = fn;
        this.len = len;
        this.next = void 0;
        this.val = val;
      }
      function noop() {
      }
      function State(writer) {
        this.head = writer.head;
        this.tail = writer.tail;
        this.len = writer.len;
        this.next = writer.states;
      }
      function Writer2() {
        this.len = 0;
        this.head = new Op(noop, 0, 0);
        this.tail = this.head;
        this.states = null;
      }
      var create = function create2() {
        return util.Buffer ? function create_buffer_setup() {
          return (Writer2.create = function create_buffer() {
            return new BufferWriter();
          })();
        } : function create_array() {
          return new Writer2();
        };
      };
      Writer2.create = create();
      Writer2.alloc = function alloc(size) {
        return new util.Array(size);
      };
      if (util.Array !== Array)
        Writer2.alloc = util.pool(Writer2.alloc, util.Array.prototype.subarray);
      Writer2.prototype._push = function push(fn, len, val) {
        this.tail = this.tail.next = new Op(fn, len, val);
        this.len += len;
        return this;
      };
      function writeByte(val, buf, pos) {
        buf[pos] = val & 255;
      }
      function writeVarint32(val, buf, pos) {
        while (val > 127) {
          buf[pos++] = val & 127 | 128;
          val >>>= 7;
        }
        buf[pos] = val;
      }
      function VarintOp(len, val) {
        this.len = len;
        this.next = void 0;
        this.val = val;
      }
      VarintOp.prototype = Object.create(Op.prototype);
      VarintOp.prototype.fn = writeVarint32;
      Writer2.prototype.uint32 = function write_uint32(value) {
        this.len += (this.tail = this.tail.next = new VarintOp(
          (value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5,
          value
        )).len;
        return this;
      };
      Writer2.prototype.int32 = function write_int32(value) {
        return value < 0 ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) : this.uint32(value);
      };
      Writer2.prototype.sint32 = function write_sint32(value) {
        return this.uint32((value << 1 ^ value >> 31) >>> 0);
      };
      function writeVarint64(val, buf, pos) {
        while (val.hi) {
          buf[pos++] = val.lo & 127 | 128;
          val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
          val.hi >>>= 7;
        }
        while (val.lo > 127) {
          buf[pos++] = val.lo & 127 | 128;
          val.lo = val.lo >>> 7;
        }
        buf[pos++] = val.lo;
      }
      Writer2.prototype.uint64 = function write_uint64(value) {
        var bits2 = LongBits.from(value);
        return this._push(writeVarint64, bits2.length(), bits2);
      };
      Writer2.prototype.int64 = Writer2.prototype.uint64;
      Writer2.prototype.sint64 = function write_sint64(value) {
        var bits2 = LongBits.from(value).zzEncode();
        return this._push(writeVarint64, bits2.length(), bits2);
      };
      Writer2.prototype.bool = function write_bool(value) {
        return this._push(writeByte, 1, value ? 1 : 0);
      };
      function writeFixed32(val, buf, pos) {
        buf[pos] = val & 255;
        buf[pos + 1] = val >>> 8 & 255;
        buf[pos + 2] = val >>> 16 & 255;
        buf[pos + 3] = val >>> 24;
      }
      Writer2.prototype.fixed32 = function write_fixed32(value) {
        return this._push(writeFixed32, 4, value >>> 0);
      };
      Writer2.prototype.sfixed32 = Writer2.prototype.fixed32;
      Writer2.prototype.fixed64 = function write_fixed64(value) {
        var bits2 = LongBits.from(value);
        return this._push(writeFixed32, 4, bits2.lo)._push(writeFixed32, 4, bits2.hi);
      };
      Writer2.prototype.sfixed64 = Writer2.prototype.fixed64;
      Writer2.prototype.float = function write_float(value) {
        return this._push(util.float.writeFloatLE, 4, value);
      };
      Writer2.prototype.double = function write_double(value) {
        return this._push(util.float.writeDoubleLE, 8, value);
      };
      var writeBytes = util.Array.prototype.set ? function writeBytes_set(val, buf, pos) {
        buf.set(val, pos);
      } : function writeBytes_for(val, buf, pos) {
        for (var i = 0; i < val.length; ++i)
          buf[pos + i] = val[i];
      };
      Writer2.prototype.bytes = function write_bytes(value) {
        var len = value.length >>> 0;
        if (!len)
          return this._push(writeByte, 1, 0);
        if (util.isString(value)) {
          var buf = Writer2.alloc(len = base642.length(value));
          base642.decode(value, buf, 0);
          value = buf;
        }
        return this.uint32(len)._push(writeBytes, len, value);
      };
      Writer2.prototype.string = function write_string(value) {
        var len = utf8.length(value);
        return len ? this.uint32(len)._push(utf8.write, len, value) : this._push(writeByte, 1, 0);
      };
      Writer2.prototype.fork = function fork() {
        this.states = new State(this);
        this.head = this.tail = new Op(noop, 0, 0);
        this.len = 0;
        return this;
      };
      Writer2.prototype.reset = function reset() {
        if (this.states) {
          this.head = this.states.head;
          this.tail = this.states.tail;
          this.len = this.states.len;
          this.states = this.states.next;
        } else {
          this.head = this.tail = new Op(noop, 0, 0);
          this.len = 0;
        }
        return this;
      };
      Writer2.prototype.ldelim = function ldelim() {
        var head = this.head, tail = this.tail, len = this.len;
        this.reset().uint32(len);
        if (len) {
          this.tail.next = head.next;
          this.tail = tail;
          this.len += len;
        }
        return this;
      };
      Writer2.prototype.finish = function finish() {
        var head = this.head.next, buf = this.constructor.alloc(this.len), pos = 0;
        while (head) {
          head.fn(head.val, buf, pos);
          pos += head.len;
          head = head.next;
        }
        return buf;
      };
      Writer2._configure = function(BufferWriter_) {
        BufferWriter = BufferWriter_;
        Writer2.create = create();
        BufferWriter._configure();
      };
    }
  });

  // node_modules/protobufjs/src/writer_buffer.js
  var require_writer_buffer = __commonJS({
    "node_modules/protobufjs/src/writer_buffer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = BufferWriter;
      var Writer2 = require_writer();
      (BufferWriter.prototype = Object.create(Writer2.prototype)).constructor = BufferWriter;
      var util = require_minimal();
      function BufferWriter() {
        Writer2.call(this);
      }
      BufferWriter._configure = function() {
        BufferWriter.alloc = util._Buffer_allocUnsafe;
        BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) {
          buf.set(val, pos);
        } : function writeBytesBuffer_copy(val, buf, pos) {
          if (val.copy)
            val.copy(buf, pos, 0, val.length);
          else
            for (var i = 0; i < val.length; )
              buf[pos++] = val[i++];
        };
      };
      BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
        if (util.isString(value))
          value = util._Buffer_from(value, "base64");
        var len = value.length >>> 0;
        this.uint32(len);
        if (len)
          this._push(BufferWriter.writeBytesBuffer, len, value);
        return this;
      };
      function writeStringBuffer(val, buf, pos) {
        if (val.length < 40)
          util.utf8.write(val, buf, pos);
        else if (buf.utf8Write)
          buf.utf8Write(val, pos);
        else
          buf.write(val, pos);
      }
      BufferWriter.prototype.string = function write_string_buffer(value) {
        var len = util.Buffer.byteLength(value);
        this.uint32(len);
        if (len)
          this._push(writeStringBuffer, len, value);
        return this;
      };
      BufferWriter._configure();
    }
  });

  // node_modules/protobufjs/src/reader.js
  var require_reader = __commonJS({
    "node_modules/protobufjs/src/reader.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Reader2;
      var util = require_minimal();
      var BufferReader;
      var LongBits = util.LongBits;
      var utf8 = util.utf8;
      function indexOutOfRange(reader, writeLength) {
        return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
      }
      function Reader2(buffer) {
        this.buf = buffer;
        this.pos = 0;
        this.len = buffer.length;
      }
      var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) {
        if (buffer instanceof Uint8Array || Array.isArray(buffer))
          return new Reader2(buffer);
        throw Error("illegal buffer");
      } : function create_array2(buffer) {
        if (Array.isArray(buffer))
          return new Reader2(buffer);
        throw Error("illegal buffer");
      };
      var create = function create2() {
        return util.Buffer ? function create_buffer_setup(buffer) {
          return (Reader2.create = function create_buffer(buffer2) {
            return util.Buffer.isBuffer(buffer2) ? new BufferReader(buffer2) : create_array(buffer2);
          })(buffer);
        } : create_array;
      };
      Reader2.create = create();
      Reader2.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */
      util.Array.prototype.slice;
      Reader2.prototype.uint32 = /* @__PURE__ */ function read_uint32_setup() {
        var value = 4294967295;
        return function read_uint32() {
          value = (this.buf[this.pos] & 127) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 7) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 14) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 21) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 15) << 28) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          if ((this.pos += 5) > this.len) {
            this.pos = this.len;
            throw indexOutOfRange(this, 10);
          }
          return value;
        };
      }();
      Reader2.prototype.int32 = function read_int32() {
        return this.uint32() | 0;
      };
      Reader2.prototype.sint32 = function read_sint32() {
        var value = this.uint32();
        return value >>> 1 ^ -(value & 1) | 0;
      };
      function readLongVarint() {
        var bits2 = new LongBits(0, 0);
        var i = 0;
        if (this.len - this.pos > 4) {
          for (; i < 4; ++i) {
            bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
          bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
          bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits2;
          i = 0;
        } else {
          for (; i < 3; ++i) {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
            bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
          bits2.lo = (bits2.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
          return bits2;
        }
        if (this.len - this.pos > 4) {
          for (; i < 5; ++i) {
            bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
        } else {
          for (; i < 5; ++i) {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
            bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
        }
        throw Error("invalid varint encoding");
      }
      Reader2.prototype.bool = function read_bool() {
        return this.uint32() !== 0;
      };
      function readFixed32_end(buf, end) {
        return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0;
      }
      Reader2.prototype.fixed32 = function read_fixed32() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        return readFixed32_end(this.buf, this.pos += 4);
      };
      Reader2.prototype.sfixed32 = function read_sfixed32() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        return readFixed32_end(this.buf, this.pos += 4) | 0;
      };
      function readFixed64() {
        if (this.pos + 8 > this.len)
          throw indexOutOfRange(this, 8);
        return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
      }
      Reader2.prototype.float = function read_float() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        var value = util.float.readFloatLE(this.buf, this.pos);
        this.pos += 4;
        return value;
      };
      Reader2.prototype.double = function read_double() {
        if (this.pos + 8 > this.len)
          throw indexOutOfRange(this, 4);
        var value = util.float.readDoubleLE(this.buf, this.pos);
        this.pos += 8;
        return value;
      };
      Reader2.prototype.bytes = function read_bytes() {
        var length2 = this.uint32(), start = this.pos, end = this.pos + length2;
        if (end > this.len)
          throw indexOutOfRange(this, length2);
        this.pos += length2;
        if (Array.isArray(this.buf))
          return this.buf.slice(start, end);
        if (start === end) {
          var nativeBuffer = util.Buffer;
          return nativeBuffer ? nativeBuffer.alloc(0) : new this.buf.constructor(0);
        }
        return this._slice.call(this.buf, start, end);
      };
      Reader2.prototype.string = function read_string() {
        var bytes = this.bytes();
        return utf8.read(bytes, 0, bytes.length);
      };
      Reader2.prototype.skip = function skip(length2) {
        if (typeof length2 === "number") {
          if (this.pos + length2 > this.len)
            throw indexOutOfRange(this, length2);
          this.pos += length2;
        } else {
          do {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
          } while (this.buf[this.pos++] & 128);
        }
        return this;
      };
      Reader2.prototype.skipType = function(wireType) {
        switch (wireType) {
          case 0:
            this.skip();
            break;
          case 1:
            this.skip(8);
            break;
          case 2:
            this.skip(this.uint32());
            break;
          case 3:
            while ((wireType = this.uint32() & 7) !== 4) {
              this.skipType(wireType);
            }
            break;
          case 5:
            this.skip(4);
            break;
          default:
            throw Error("invalid wire type " + wireType + " at offset " + this.pos);
        }
        return this;
      };
      Reader2._configure = function(BufferReader_) {
        BufferReader = BufferReader_;
        Reader2.create = create();
        BufferReader._configure();
        var fn = util.Long ? "toLong" : (
          /* istanbul ignore next */
          "toNumber"
        );
        util.merge(Reader2.prototype, {
          int64: function read_int64() {
            return readLongVarint.call(this)[fn](false);
          },
          uint64: function read_uint64() {
            return readLongVarint.call(this)[fn](true);
          },
          sint64: function read_sint64() {
            return readLongVarint.call(this).zzDecode()[fn](false);
          },
          fixed64: function read_fixed64() {
            return readFixed64.call(this)[fn](true);
          },
          sfixed64: function read_sfixed64() {
            return readFixed64.call(this)[fn](false);
          }
        });
      };
    }
  });

  // node_modules/protobufjs/src/reader_buffer.js
  var require_reader_buffer = __commonJS({
    "node_modules/protobufjs/src/reader_buffer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = BufferReader;
      var Reader2 = require_reader();
      (BufferReader.prototype = Object.create(Reader2.prototype)).constructor = BufferReader;
      var util = require_minimal();
      function BufferReader(buffer) {
        Reader2.call(this, buffer);
      }
      BufferReader._configure = function() {
        if (util.Buffer)
          BufferReader.prototype._slice = util.Buffer.prototype.slice;
      };
      BufferReader.prototype.string = function read_string_buffer() {
        var len = this.uint32();
        return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len));
      };
      BufferReader._configure();
    }
  });

  // node_modules/protobufjs/src/rpc/service.js
  var require_service = __commonJS({
    "node_modules/protobufjs/src/rpc/service.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Service;
      var util = require_minimal();
      (Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;
      function Service(rpcImpl, requestDelimited, responseDelimited) {
        if (typeof rpcImpl !== "function")
          throw TypeError("rpcImpl must be a function");
        util.EventEmitter.call(this);
        this.rpcImpl = rpcImpl;
        this.requestDelimited = Boolean(requestDelimited);
        this.responseDelimited = Boolean(responseDelimited);
      }
      Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {
        if (!request)
          throw TypeError("request must be specified");
        var self2 = this;
        if (!callback)
          return util.asPromise(rpcCall, self2, method, requestCtor, responseCtor, request);
        if (!self2.rpcImpl) {
          setTimeout(function() {
            callback(Error("already ended"));
          }, 0);
          return void 0;
        }
        try {
          return self2.rpcImpl(
            method,
            requestCtor[self2.requestDelimited ? "encodeDelimited" : "encode"](request).finish(),
            function rpcCallback(err2, response) {
              if (err2) {
                self2.emit("error", err2, method);
                return callback(err2);
              }
              if (response === null) {
                self2.end(
                  /* endedByRPC */
                  true
                );
                return void 0;
              }
              if (!(response instanceof responseCtor)) {
                try {
                  response = responseCtor[self2.responseDelimited ? "decodeDelimited" : "decode"](response);
                } catch (err3) {
                  self2.emit("error", err3, method);
                  return callback(err3);
                }
              }
              self2.emit("data", response, method);
              return callback(null, response);
            }
          );
        } catch (err2) {
          self2.emit("error", err2, method);
          setTimeout(function() {
            callback(err2);
          }, 0);
          return void 0;
        }
      };
      Service.prototype.end = function end(endedByRPC) {
        if (this.rpcImpl) {
          if (!endedByRPC)
            this.rpcImpl(null, null, null);
          this.rpcImpl = null;
          this.emit("end").off();
        }
        return this;
      };
    }
  });

  // node_modules/protobufjs/src/rpc.js
  var require_rpc = __commonJS({
    "node_modules/protobufjs/src/rpc.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var rpc = exports2;
      rpc.Service = require_service();
    }
  });

  // node_modules/protobufjs/src/roots.js
  var require_roots = __commonJS({
    "node_modules/protobufjs/src/roots.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = {};
    }
  });

  // node_modules/protobufjs/src/index-minimal.js
  var require_index_minimal = __commonJS({
    "node_modules/protobufjs/src/index-minimal.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var protobuf = exports2;
      protobuf.build = "minimal";
      protobuf.Writer = require_writer();
      protobuf.BufferWriter = require_writer_buffer();
      protobuf.Reader = require_reader();
      protobuf.BufferReader = require_reader_buffer();
      protobuf.util = require_minimal();
      protobuf.rpc = require_rpc();
      protobuf.roots = require_roots();
      protobuf.configure = configure;
      function configure() {
        protobuf.util._configure();
        protobuf.Writer._configure(protobuf.BufferWriter);
        protobuf.Reader._configure(protobuf.BufferReader);
      }
      configure();
    }
  });

  // node_modules/@protobufjs/codegen/index.js
  var require_codegen = __commonJS({
    "node_modules/@protobufjs/codegen/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = codegen;
      function codegen(functionParams, functionName) {
        if (typeof functionParams === "string") {
          functionName = functionParams;
          functionParams = void 0;
        }
        var body = [];
        function Codegen(formatStringOrScope) {
          if (typeof formatStringOrScope !== "string") {
            var source = toString2();
            if (codegen.verbose)
              console.log("codegen: " + source);
            source = "return " + source;
            if (formatStringOrScope) {
              var scopeKeys = Object.keys(formatStringOrScope), scopeParams = new Array(scopeKeys.length + 1), scopeValues = new Array(scopeKeys.length), scopeOffset = 0;
              while (scopeOffset < scopeKeys.length) {
                scopeParams[scopeOffset] = scopeKeys[scopeOffset];
                scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];
              }
              scopeParams[scopeOffset] = source;
              return Function.apply(null, scopeParams).apply(null, scopeValues);
            }
            return Function(source)();
          }
          var formatParams = new Array(arguments.length - 1), formatOffset = 0;
          while (formatOffset < formatParams.length)
            formatParams[formatOffset] = arguments[++formatOffset];
          formatOffset = 0;
          formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace(\$0, \$1) {
            var value = formatParams[formatOffset++];
            switch (\$1) {
              case "d":
              case "f":
                return String(Number(value));
              case "i":
                return String(Math.floor(value));
              case "j":
                return JSON.stringify(value);
              case "s":
                return String(value);
            }
            return "%";
          });
          if (formatOffset !== formatParams.length)
            throw Error("parameter count mismatch");
          body.push(formatStringOrScope);
          return Codegen;
        }
        function toString2(functionNameOverride) {
          return "function " + (functionNameOverride || functionName || "") + "(" + (functionParams && functionParams.join(",") || "") + "){\\n  " + body.join("\\n  ") + "\\n}";
        }
        Codegen.toString = toString2;
        return Codegen;
      }
      codegen.verbose = false;
    }
  });

  // node_modules/@protobufjs/fetch/index.js
  var require_fetch = __commonJS({
    "node_modules/@protobufjs/fetch/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = fetch2;
      var asPromise = require_aspromise();
      var inquire2 = require_inquire();
      var fs = inquire2("fs");
      function fetch2(filename, options, callback) {
        if (typeof options === "function") {
          callback = options;
          options = {};
        } else if (!options)
          options = {};
        if (!callback)
          return asPromise(fetch2, this, filename, options);
        if (!options.xhr && fs && fs.readFile)
          return fs.readFile(filename, function fetchReadFileCallback(err2, contents) {
            return err2 && typeof XMLHttpRequest !== "undefined" ? fetch2.xhr(filename, options, callback) : err2 ? callback(err2) : callback(null, options.binary ? contents : contents.toString("utf8"));
          });
        return fetch2.xhr(filename, options, callback);
      }
      fetch2.xhr = function fetch_xhr(filename, options, callback) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function fetchOnReadyStateChange() {
          if (xhr.readyState !== 4)
            return void 0;
          if (xhr.status !== 0 && xhr.status !== 200)
            return callback(Error("status " + xhr.status));
          if (options.binary) {
            var buffer = xhr.response;
            if (!buffer) {
              buffer = [];
              for (var i = 0; i < xhr.responseText.length; ++i)
                buffer.push(xhr.responseText.charCodeAt(i) & 255);
            }
            return callback(null, typeof Uint8Array !== "undefined" ? new Uint8Array(buffer) : buffer);
          }
          return callback(null, xhr.responseText);
        };
        if (options.binary) {
          if ("overrideMimeType" in xhr)
            xhr.overrideMimeType("text/plain; charset=x-user-defined");
          xhr.responseType = "arraybuffer";
        }
        xhr.open("GET", filename);
        xhr.send();
      };
    }
  });

  // node_modules/@protobufjs/path/index.js
  var require_path = __commonJS({
    "node_modules/@protobufjs/path/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var path = exports2;
      var isAbsolute = (
        /**
         * Tests if the specified path is absolute.
         * @param {string} path Path to test
         * @returns {boolean} \`true\` if path is absolute
         */
        path.isAbsolute = function isAbsolute2(path2) {
          return /^(?:\\/|\\w+:)/.test(path2);
        }
      );
      var normalize = (
        /**
         * Normalizes the specified path.
         * @param {string} path Path to normalize
         * @returns {string} Normalized path
         */
        path.normalize = function normalize2(path2) {
          path2 = path2.replace(/\\\\/g, "/").replace(/\\/{2,}/g, "/");
          var parts = path2.split("/"), absolute = isAbsolute(path2), prefix = "";
          if (absolute)
            prefix = parts.shift() + "/";
          for (var i = 0; i < parts.length; ) {
            if (parts[i] === "..") {
              if (i > 0 && parts[i - 1] !== "..")
                parts.splice(--i, 2);
              else if (absolute)
                parts.splice(i, 1);
              else
                ++i;
            } else if (parts[i] === ".")
              parts.splice(i, 1);
            else
              ++i;
          }
          return prefix + parts.join("/");
        }
      );
      path.resolve = function resolve(originPath, includePath, alreadyNormalized) {
        if (!alreadyNormalized)
          includePath = normalize(includePath);
        if (isAbsolute(includePath))
          return includePath;
        if (!alreadyNormalized)
          originPath = normalize(originPath);
        return (originPath = originPath.replace(/(?:\\/|^)[^/]+\$/, "")).length ? normalize(originPath + "/" + includePath) : includePath;
      };
    }
  });

  // node_modules/protobufjs/src/types.js
  var require_types = __commonJS({
    "node_modules/protobufjs/src/types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var types = exports2;
      var util = require_util();
      var s = [
        "double",
        // 0
        "float",
        // 1
        "int32",
        // 2
        "uint32",
        // 3
        "sint32",
        // 4
        "fixed32",
        // 5
        "sfixed32",
        // 6
        "int64",
        // 7
        "uint64",
        // 8
        "sint64",
        // 9
        "fixed64",
        // 10
        "sfixed64",
        // 11
        "bool",
        // 12
        "string",
        // 13
        "bytes"
        // 14
      ];
      function bake(values, offset3) {
        var i = 0, o = {};
        offset3 |= 0;
        while (i < values.length)
          o[s[i + offset3]] = values[i++];
        return o;
      }
      types.basic = bake([
        /* double   */
        1,
        /* float    */
        5,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0,
        /* string   */
        2,
        /* bytes    */
        2
      ]);
      types.defaults = bake([
        /* double   */
        0,
        /* float    */
        0,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        0,
        /* sfixed32 */
        0,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        0,
        /* sfixed64 */
        0,
        /* bool     */
        false,
        /* string   */
        "",
        /* bytes    */
        util.emptyArray,
        /* message  */
        null
      ]);
      types.long = bake([
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1
      ], 7);
      types.mapKey = bake([
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0,
        /* string   */
        2
      ], 2);
      types.packed = bake([
        /* double   */
        1,
        /* float    */
        5,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0
      ]);
    }
  });

  // node_modules/protobufjs/src/field.js
  var require_field = __commonJS({
    "node_modules/protobufjs/src/field.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Field2;
      var ReflectionObject2 = require_object();
      ((Field2.prototype = Object.create(ReflectionObject2.prototype)).constructor = Field2).className = "Field";
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      var Type3;
      var ruleRe = /^required|optional|repeated\$/;
      Field2.fromJSON = function fromJSON(name, json) {
        return new Field2(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);
      };
      function Field2(name, id, type, rule, extend, options, comment) {
        if (util.isObject(rule)) {
          comment = extend;
          options = rule;
          rule = extend = void 0;
        } else if (util.isObject(extend)) {
          comment = options;
          options = extend;
          extend = void 0;
        }
        ReflectionObject2.call(this, name, options);
        if (!util.isInteger(id) || id < 0)
          throw TypeError("id must be a non-negative integer");
        if (!util.isString(type))
          throw TypeError("type must be a string");
        if (rule !== void 0 && !ruleRe.test(rule = rule.toString().toLowerCase()))
          throw TypeError("rule must be a string rule");
        if (extend !== void 0 && !util.isString(extend))
          throw TypeError("extend must be a string");
        if (rule === "proto3_optional") {
          rule = "optional";
        }
        this.rule = rule && rule !== "optional" ? rule : void 0;
        this.type = type;
        this.id = id;
        this.extend = extend || void 0;
        this.required = rule === "required";
        this.optional = !this.required;
        this.repeated = rule === "repeated";
        this.map = false;
        this.message = null;
        this.partOf = null;
        this.typeDefault = null;
        this.defaultValue = null;
        this.long = util.Long ? types.long[type] !== void 0 : (
          /* istanbul ignore next */
          false
        );
        this.bytes = type === "bytes";
        this.resolvedType = null;
        this.extensionField = null;
        this.declaringField = null;
        this._packed = null;
        this.comment = comment;
      }
      Object.defineProperty(Field2.prototype, "packed", {
        get: function() {
          if (this._packed === null)
            this._packed = this.getOption("packed") !== false;
          return this._packed;
        }
      });
      Field2.prototype.setOption = function setOption(name, value, ifNotSet) {
        if (name === "packed")
          this._packed = null;
        return ReflectionObject2.prototype.setOption.call(this, name, value, ifNotSet);
      };
      Field2.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "rule",
          this.rule !== "optional" && this.rule || void 0,
          "type",
          this.type,
          "id",
          this.id,
          "extend",
          this.extend,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Field2.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if ((this.typeDefault = types.defaults[this.type]) === void 0) {
          this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);
          if (this.resolvedType instanceof Type3)
            this.typeDefault = null;
          else
            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]];
        } else if (this.options && this.options.proto3_optional) {
          this.typeDefault = null;
        }
        if (this.options && this.options["default"] != null) {
          this.typeDefault = this.options["default"];
          if (this.resolvedType instanceof Enum && typeof this.typeDefault === "string")
            this.typeDefault = this.resolvedType.values[this.typeDefault];
        }
        if (this.options) {
          if (this.options.packed === true || this.options.packed !== void 0 && this.resolvedType && !(this.resolvedType instanceof Enum))
            delete this.options.packed;
          if (!Object.keys(this.options).length)
            this.options = void 0;
        }
        if (this.long) {
          this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === "u");
          if (Object.freeze)
            Object.freeze(this.typeDefault);
        } else if (this.bytes && typeof this.typeDefault === "string") {
          var buf;
          if (util.base64.test(this.typeDefault))
            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);
          else
            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);
          this.typeDefault = buf;
        }
        if (this.map)
          this.defaultValue = util.emptyObject;
        else if (this.repeated)
          this.defaultValue = util.emptyArray;
        else
          this.defaultValue = this.typeDefault;
        if (this.parent instanceof Type3)
          this.parent.ctor.prototype[this.name] = this.defaultValue;
        return ReflectionObject2.prototype.resolve.call(this);
      };
      Field2.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {
        if (typeof fieldType === "function")
          fieldType = util.decorateType(fieldType).name;
        else if (fieldType && typeof fieldType === "object")
          fieldType = util.decorateEnum(fieldType).name;
        return function fieldDecorator(prototype, fieldName) {
          util.decorateType(prototype.constructor).add(new Field2(fieldName, fieldId, fieldType, fieldRule, { "default": defaultValue }));
        };
      };
      Field2._configure = function configure(Type_) {
        Type3 = Type_;
      };
    }
  });

  // node_modules/protobufjs/src/oneof.js
  var require_oneof = __commonJS({
    "node_modules/protobufjs/src/oneof.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = OneOf2;
      var ReflectionObject2 = require_object();
      ((OneOf2.prototype = Object.create(ReflectionObject2.prototype)).constructor = OneOf2).className = "OneOf";
      var Field2 = require_field();
      var util = require_util();
      function OneOf2(name, fieldNames, options, comment) {
        if (!Array.isArray(fieldNames)) {
          options = fieldNames;
          fieldNames = void 0;
        }
        ReflectionObject2.call(this, name, options);
        if (!(fieldNames === void 0 || Array.isArray(fieldNames)))
          throw TypeError("fieldNames must be an Array");
        this.oneof = fieldNames || [];
        this.fieldsArray = [];
        this.comment = comment;
      }
      OneOf2.fromJSON = function fromJSON(name, json) {
        return new OneOf2(name, json.oneof, json.options, json.comment);
      };
      OneOf2.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          this.options,
          "oneof",
          this.oneof,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      function addFieldsToParent(oneof) {
        if (oneof.parent) {
          for (var i = 0; i < oneof.fieldsArray.length; ++i)
            if (!oneof.fieldsArray[i].parent)
              oneof.parent.add(oneof.fieldsArray[i]);
        }
      }
      OneOf2.prototype.add = function add(field) {
        if (!(field instanceof Field2))
          throw TypeError("field must be a Field");
        if (field.parent && field.parent !== this.parent)
          field.parent.remove(field);
        this.oneof.push(field.name);
        this.fieldsArray.push(field);
        field.partOf = this;
        addFieldsToParent(this);
        return this;
      };
      OneOf2.prototype.remove = function remove(field) {
        if (!(field instanceof Field2))
          throw TypeError("field must be a Field");
        var index = this.fieldsArray.indexOf(field);
        if (index < 0)
          throw Error(field + " is not a member of " + this);
        this.fieldsArray.splice(index, 1);
        index = this.oneof.indexOf(field.name);
        if (index > -1)
          this.oneof.splice(index, 1);
        field.partOf = null;
        return this;
      };
      OneOf2.prototype.onAdd = function onAdd(parent) {
        ReflectionObject2.prototype.onAdd.call(this, parent);
        var self2 = this;
        for (var i = 0; i < this.oneof.length; ++i) {
          var field = parent.get(this.oneof[i]);
          if (field && !field.partOf) {
            field.partOf = self2;
            self2.fieldsArray.push(field);
          }
        }
        addFieldsToParent(this);
      };
      OneOf2.prototype.onRemove = function onRemove(parent) {
        for (var i = 0, field; i < this.fieldsArray.length; ++i)
          if ((field = this.fieldsArray[i]).parent)
            field.parent.remove(field);
        ReflectionObject2.prototype.onRemove.call(this, parent);
      };
      OneOf2.d = function decorateOneOf() {
        var fieldNames = new Array(arguments.length), index = 0;
        while (index < arguments.length)
          fieldNames[index] = arguments[index++];
        return function oneOfDecorator(prototype, oneofName) {
          util.decorateType(prototype.constructor).add(new OneOf2(oneofName, fieldNames));
          Object.defineProperty(prototype, oneofName, {
            get: util.oneOfGetter(fieldNames),
            set: util.oneOfSetter(fieldNames)
          });
        };
      };
    }
  });

  // node_modules/protobufjs/src/namespace.js
  var require_namespace = __commonJS({
    "node_modules/protobufjs/src/namespace.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Namespace;
      var ReflectionObject2 = require_object();
      ((Namespace.prototype = Object.create(ReflectionObject2.prototype)).constructor = Namespace).className = "Namespace";
      var Field2 = require_field();
      var util = require_util();
      var OneOf2 = require_oneof();
      var Type3;
      var Service;
      var Enum;
      Namespace.fromJSON = function fromJSON(name, json) {
        return new Namespace(name, json.options).addJSON(json.nested);
      };
      function arrayToJSON(array, toJSONOptions) {
        if (!(array && array.length))
          return void 0;
        var obj = {};
        for (var i = 0; i < array.length; ++i)
          obj[array[i].name] = array[i].toJSON(toJSONOptions);
        return obj;
      }
      Namespace.arrayToJSON = arrayToJSON;
      Namespace.isReservedId = function isReservedId(reserved, id) {
        if (reserved) {
          for (var i = 0; i < reserved.length; ++i)
            if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1] > id)
              return true;
        }
        return false;
      };
      Namespace.isReservedName = function isReservedName(reserved, name) {
        if (reserved) {
          for (var i = 0; i < reserved.length; ++i)
            if (reserved[i] === name)
              return true;
        }
        return false;
      };
      function Namespace(name, options) {
        ReflectionObject2.call(this, name, options);
        this.nested = void 0;
        this._nestedArray = null;
      }
      function clearCache(namespace) {
        namespace._nestedArray = null;
        return namespace;
      }
      Object.defineProperty(Namespace.prototype, "nestedArray", {
        get: function() {
          return this._nestedArray || (this._nestedArray = util.toArray(this.nested));
        }
      });
      Namespace.prototype.toJSON = function toJSON(toJSONOptions) {
        return util.toObject([
          "options",
          this.options,
          "nested",
          arrayToJSON(this.nestedArray, toJSONOptions)
        ]);
      };
      Namespace.prototype.addJSON = function addJSON(nestedJson) {
        var ns = this;
        if (nestedJson) {
          for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {
            nested = nestedJson[names[i]];
            ns.add(
              // most to least likely
              (nested.fields !== void 0 ? Type3.fromJSON : nested.values !== void 0 ? Enum.fromJSON : nested.methods !== void 0 ? Service.fromJSON : nested.id !== void 0 ? Field2.fromJSON : Namespace.fromJSON)(names[i], nested)
            );
          }
        }
        return this;
      };
      Namespace.prototype.get = function get(name) {
        return this.nested && this.nested[name] || null;
      };
      Namespace.prototype.getEnum = function getEnum(name) {
        if (this.nested && this.nested[name] instanceof Enum)
          return this.nested[name].values;
        throw Error("no such enum: " + name);
      };
      Namespace.prototype.add = function add(object) {
        if (!(object instanceof Field2 && object.extend !== void 0 || object instanceof Type3 || object instanceof OneOf2 || object instanceof Enum || object instanceof Service || object instanceof Namespace))
          throw TypeError("object must be a valid nested object");
        if (!this.nested)
          this.nested = {};
        else {
          var prev = this.get(object.name);
          if (prev) {
            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type3 || prev instanceof Service)) {
              var nested = prev.nestedArray;
              for (var i = 0; i < nested.length; ++i)
                object.add(nested[i]);
              this.remove(prev);
              if (!this.nested)
                this.nested = {};
              object.setOptions(prev.options, true);
            } else
              throw Error("duplicate name '" + object.name + "' in " + this);
          }
        }
        this.nested[object.name] = object;
        object.onAdd(this);
        return clearCache(this);
      };
      Namespace.prototype.remove = function remove(object) {
        if (!(object instanceof ReflectionObject2))
          throw TypeError("object must be a ReflectionObject");
        if (object.parent !== this)
          throw Error(object + " is not a member of " + this);
        delete this.nested[object.name];
        if (!Object.keys(this.nested).length)
          this.nested = void 0;
        object.onRemove(this);
        return clearCache(this);
      };
      Namespace.prototype.define = function define(path, json) {
        if (util.isString(path))
          path = path.split(".");
        else if (!Array.isArray(path))
          throw TypeError("illegal path");
        if (path && path.length && path[0] === "")
          throw Error("path must be relative");
        var ptr = this;
        while (path.length > 0) {
          var part = path.shift();
          if (ptr.nested && ptr.nested[part]) {
            ptr = ptr.nested[part];
            if (!(ptr instanceof Namespace))
              throw Error("path conflicts with non-namespace objects");
          } else
            ptr.add(ptr = new Namespace(part));
        }
        if (json)
          ptr.addJSON(json);
        return ptr;
      };
      Namespace.prototype.resolveAll = function resolveAll() {
        var nested = this.nestedArray, i = 0;
        while (i < nested.length)
          if (nested[i] instanceof Namespace)
            nested[i++].resolveAll();
          else
            nested[i++].resolve();
        return this.resolve();
      };
      Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {
        if (typeof filterTypes === "boolean") {
          parentAlreadyChecked = filterTypes;
          filterTypes = void 0;
        } else if (filterTypes && !Array.isArray(filterTypes))
          filterTypes = [filterTypes];
        if (util.isString(path) && path.length) {
          if (path === ".")
            return this.root;
          path = path.split(".");
        } else if (!path.length)
          return this;
        if (path[0] === "")
          return this.root.lookup(path.slice(1), filterTypes);
        var found = this.get(path[0]);
        if (found) {
          if (path.length === 1) {
            if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)
              return found;
          } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))
            return found;
        } else
          for (var i = 0; i < this.nestedArray.length; ++i)
            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))
              return found;
        if (this.parent === null || parentAlreadyChecked)
          return null;
        return this.parent.lookup(path, filterTypes);
      };
      Namespace.prototype.lookupType = function lookupType(path) {
        var found = this.lookup(path, [Type3]);
        if (!found)
          throw Error("no such type: " + path);
        return found;
      };
      Namespace.prototype.lookupEnum = function lookupEnum(path) {
        var found = this.lookup(path, [Enum]);
        if (!found)
          throw Error("no such Enum '" + path + "' in " + this);
        return found;
      };
      Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {
        var found = this.lookup(path, [Type3, Enum]);
        if (!found)
          throw Error("no such Type or Enum '" + path + "' in " + this);
        return found;
      };
      Namespace.prototype.lookupService = function lookupService(path) {
        var found = this.lookup(path, [Service]);
        if (!found)
          throw Error("no such Service '" + path + "' in " + this);
        return found;
      };
      Namespace._configure = function(Type_, Service_, Enum_) {
        Type3 = Type_;
        Service = Service_;
        Enum = Enum_;
      };
    }
  });

  // node_modules/protobufjs/src/mapfield.js
  var require_mapfield = __commonJS({
    "node_modules/protobufjs/src/mapfield.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = MapField;
      var Field2 = require_field();
      ((MapField.prototype = Object.create(Field2.prototype)).constructor = MapField).className = "MapField";
      var types = require_types();
      var util = require_util();
      function MapField(name, id, keyType, type, options, comment) {
        Field2.call(this, name, id, type, void 0, void 0, options, comment);
        if (!util.isString(keyType))
          throw TypeError("keyType must be a string");
        this.keyType = keyType;
        this.resolvedKeyType = null;
        this.map = true;
      }
      MapField.fromJSON = function fromJSON(name, json) {
        return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
      };
      MapField.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "keyType",
          this.keyType,
          "type",
          this.type,
          "id",
          this.id,
          "extend",
          this.extend,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      MapField.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if (types.mapKey[this.keyType] === void 0)
          throw Error("invalid key type: " + this.keyType);
        return Field2.prototype.resolve.call(this);
      };
      MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
        if (typeof fieldValueType === "function")
          fieldValueType = util.decorateType(fieldValueType).name;
        else if (fieldValueType && typeof fieldValueType === "object")
          fieldValueType = util.decorateEnum(fieldValueType).name;
        return function mapFieldDecorator(prototype, fieldName) {
          util.decorateType(prototype.constructor).add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
        };
      };
    }
  });

  // node_modules/protobufjs/src/method.js
  var require_method = __commonJS({
    "node_modules/protobufjs/src/method.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Method;
      var ReflectionObject2 = require_object();
      ((Method.prototype = Object.create(ReflectionObject2.prototype)).constructor = Method).className = "Method";
      var util = require_util();
      function Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {
        if (util.isObject(requestStream)) {
          options = requestStream;
          requestStream = responseStream = void 0;
        } else if (util.isObject(responseStream)) {
          options = responseStream;
          responseStream = void 0;
        }
        if (!(type === void 0 || util.isString(type)))
          throw TypeError("type must be a string");
        if (!util.isString(requestType))
          throw TypeError("requestType must be a string");
        if (!util.isString(responseType))
          throw TypeError("responseType must be a string");
        ReflectionObject2.call(this, name, options);
        this.type = type || "rpc";
        this.requestType = requestType;
        this.requestStream = requestStream ? true : void 0;
        this.responseType = responseType;
        this.responseStream = responseStream ? true : void 0;
        this.resolvedRequestType = null;
        this.resolvedResponseType = null;
        this.comment = comment;
        this.parsedOptions = parsedOptions;
      }
      Method.fromJSON = function fromJSON(name, json) {
        return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);
      };
      Method.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "type",
          this.type !== "rpc" && /* istanbul ignore next */
          this.type || void 0,
          "requestType",
          this.requestType,
          "requestStream",
          this.requestStream,
          "responseType",
          this.responseType,
          "responseStream",
          this.responseStream,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0,
          "parsedOptions",
          this.parsedOptions
        ]);
      };
      Method.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        this.resolvedRequestType = this.parent.lookupType(this.requestType);
        this.resolvedResponseType = this.parent.lookupType(this.responseType);
        return ReflectionObject2.prototype.resolve.call(this);
      };
    }
  });

  // node_modules/protobufjs/src/service.js
  var require_service2 = __commonJS({
    "node_modules/protobufjs/src/service.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Service;
      var Namespace = require_namespace();
      ((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = "Service";
      var Method = require_method();
      var util = require_util();
      var rpc = require_rpc();
      function Service(name, options) {
        Namespace.call(this, name, options);
        this.methods = {};
        this._methodsArray = null;
      }
      Service.fromJSON = function fromJSON(name, json) {
        var service = new Service(name, json.options);
        if (json.methods)
          for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)
            service.add(Method.fromJSON(names[i], json.methods[names[i]]));
        if (json.nested)
          service.addJSON(json.nested);
        service.comment = json.comment;
        return service;
      };
      Service.prototype.toJSON = function toJSON(toJSONOptions) {
        var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          inherited && inherited.options || void 0,
          "methods",
          Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */
          {},
          "nested",
          inherited && inherited.nested || void 0,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Object.defineProperty(Service.prototype, "methodsArray", {
        get: function() {
          return this._methodsArray || (this._methodsArray = util.toArray(this.methods));
        }
      });
      function clearCache(service) {
        service._methodsArray = null;
        return service;
      }
      Service.prototype.get = function get(name) {
        return this.methods[name] || Namespace.prototype.get.call(this, name);
      };
      Service.prototype.resolveAll = function resolveAll() {
        var methods = this.methodsArray;
        for (var i = 0; i < methods.length; ++i)
          methods[i].resolve();
        return Namespace.prototype.resolve.call(this);
      };
      Service.prototype.add = function add(object) {
        if (this.get(object.name))
          throw Error("duplicate name '" + object.name + "' in " + this);
        if (object instanceof Method) {
          this.methods[object.name] = object;
          object.parent = this;
          return clearCache(this);
        }
        return Namespace.prototype.add.call(this, object);
      };
      Service.prototype.remove = function remove(object) {
        if (object instanceof Method) {
          if (this.methods[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.methods[object.name];
          object.parent = null;
          return clearCache(this);
        }
        return Namespace.prototype.remove.call(this, object);
      };
      Service.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {
        var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);
        for (var i = 0, method; i < /* initializes */
        this.methodsArray.length; ++i) {
          var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^\$\\w_]/g, "");
          rpcService[methodName] = util.codegen(["r", "c"], util.isReserved(methodName) ? methodName + "_" : methodName)("return this.rpcCall(m,q,s,r,c)")({
            m: method,
            q: method.resolvedRequestType.ctor,
            s: method.resolvedResponseType.ctor
          });
        }
        return rpcService;
      };
    }
  });

  // node_modules/protobufjs/src/message.js
  var require_message = __commonJS({
    "node_modules/protobufjs/src/message.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Message2;
      var util = require_minimal();
      function Message2(properties) {
        if (properties)
          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
            this[keys[i]] = properties[keys[i]];
      }
      Message2.create = function create(properties) {
        return this.\$type.create(properties);
      };
      Message2.encode = function encode(message, writer) {
        return this.\$type.encode(message, writer);
      };
      Message2.encodeDelimited = function encodeDelimited(message, writer) {
        return this.\$type.encodeDelimited(message, writer);
      };
      Message2.decode = function decode(reader) {
        return this.\$type.decode(reader);
      };
      Message2.decodeDelimited = function decodeDelimited(reader) {
        return this.\$type.decodeDelimited(reader);
      };
      Message2.verify = function verify(message) {
        return this.\$type.verify(message);
      };
      Message2.fromObject = function fromObject(object) {
        return this.\$type.fromObject(object);
      };
      Message2.toObject = function toObject2(message, options) {
        return this.\$type.toObject(message, options);
      };
      Message2.prototype.toJSON = function toJSON() {
        return this.\$type.toObject(this, util.toJSONOptions);
      };
    }
  });

  // node_modules/protobufjs/src/decoder.js
  var require_decoder = __commonJS({
    "node_modules/protobufjs/src/decoder.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = decoder;
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      function missing(field) {
        return "missing required '" + field.name + "'";
      }
      function decoder(mtype) {
        var gen = util.codegen(["r", "l"], mtype.name + "\$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field2) {
          return field2.map;
        }).length ? ",k,value" : ""))("while(r.pos<c){")("var t=r.uint32()");
        if (mtype.group)
          gen("if((t&7)===4)")("break");
        gen("switch(t>>>3){");
        var i = 0;
        for (; i < /* initializes */
        mtype.fieldsArray.length; ++i) {
          var field = mtype._fieldsArray[i].resolve(), type = field.resolvedType instanceof Enum ? "int32" : field.type, ref = "m" + util.safeProp(field.name);
          gen("case %i: {", field.id);
          if (field.map) {
            gen("if(%s===util.emptyObject)", ref)("%s={}", ref)("var c2 = r.uint32()+r.pos");
            if (types.defaults[field.keyType] !== void 0)
              gen("k=%j", types.defaults[field.keyType]);
            else
              gen("k=null");
            if (types.defaults[type] !== void 0)
              gen("value=%j", types.defaults[type]);
            else
              gen("value=null");
            gen("while(r.pos<c2){")("var tag2=r.uint32()")("switch(tag2>>>3){")("case 1: k=r.%s(); break", field.keyType)("case 2:");
            if (types.basic[type] === void 0)
              gen("value=types[%i].decode(r,r.uint32())", i);
            else
              gen("value=r.%s()", type);
            gen("break")("default:")("r.skipType(tag2&7)")("break")("}")("}");
            if (types.long[field.keyType] !== void 0)
              gen('%s[typeof k==="object"?util.longToHash(k):k]=value', ref);
            else
              gen("%s[k]=value", ref);
          } else if (field.repeated) {
            gen("if(!(%s&&%s.length))", ref, ref)("%s=[]", ref);
            if (types.packed[type] !== void 0)
              gen("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos<c2)")("%s.push(r.%s())", ref, type)("}else");
            if (types.basic[type] === void 0)
              gen(field.resolvedType.group ? "%s.push(types[%i].decode(r))" : "%s.push(types[%i].decode(r,r.uint32()))", ref, i);
            else
              gen("%s.push(r.%s())", ref, type);
          } else if (types.basic[type] === void 0)
            gen(field.resolvedType.group ? "%s=types[%i].decode(r)" : "%s=types[%i].decode(r,r.uint32())", ref, i);
          else
            gen("%s=r.%s()", ref, type);
          gen("break")("}");
        }
        gen("default:")("r.skipType(t&7)")("break")("}")("}");
        for (i = 0; i < mtype._fieldsArray.length; ++i) {
          var rfield = mtype._fieldsArray[i];
          if (rfield.required)
            gen("if(!m.hasOwnProperty(%j))", rfield.name)("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
        }
        return gen("return m");
      }
    }
  });

  // node_modules/protobufjs/src/verifier.js
  var require_verifier = __commonJS({
    "node_modules/protobufjs/src/verifier.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = verifier;
      var Enum = require_enum();
      var util = require_util();
      function invalid(field, expected) {
        return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:" + field.keyType + "}" : "") + " expected";
      }
      function genVerifyValue(gen, field, fieldIndex, ref) {
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum) {
            gen("switch(%s){", ref)("default:")("return%j", invalid(field, "enum value"));
            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j)
              gen("case %i:", field.resolvedType.values[keys[j]]);
            gen("break")("}");
          } else {
            gen("{")("var e=types[%i].verify(%s);", fieldIndex, ref)("if(e)")("return%j+e", field.name + ".")("}");
          }
        } else {
          switch (field.type) {
            case "int32":
            case "uint32":
            case "sint32":
            case "fixed32":
            case "sfixed32":
              gen("if(!util.isInteger(%s))", ref)("return%j", invalid(field, "integer"));
              break;
            case "int64":
            case "uint64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)("return%j", invalid(field, "integer|Long"));
              break;
            case "float":
            case "double":
              gen('if(typeof %s!=="number")', ref)("return%j", invalid(field, "number"));
              break;
            case "bool":
              gen('if(typeof %s!=="boolean")', ref)("return%j", invalid(field, "boolean"));
              break;
            case "string":
              gen("if(!util.isString(%s))", ref)("return%j", invalid(field, "string"));
              break;
            case "bytes":
              gen('if(!(%s&&typeof %s.length==="number"||util.isString(%s)))', ref, ref, ref)("return%j", invalid(field, "buffer"));
              break;
          }
        }
        return gen;
      }
      function genVerifyKey(gen, field, ref) {
        switch (field.keyType) {
          case "int32":
          case "uint32":
          case "sint32":
          case "fixed32":
          case "sfixed32":
            gen("if(!util.key32Re.test(%s))", ref)("return%j", invalid(field, "integer key"));
            break;
          case "int64":
          case "uint64":
          case "sint64":
          case "fixed64":
          case "sfixed64":
            gen("if(!util.key64Re.test(%s))", ref)("return%j", invalid(field, "integer|Long key"));
            break;
          case "bool":
            gen("if(!util.key2Re.test(%s))", ref)("return%j", invalid(field, "boolean key"));
            break;
        }
        return gen;
      }
      function verifier(mtype) {
        var gen = util.codegen(["m"], mtype.name + "\$verify")('if(typeof m!=="object"||m===null)')("return%j", "object expected");
        var oneofs = mtype.oneofsArray, seenFirstField = {};
        if (oneofs.length)
          gen("var p={}");
        for (var i = 0; i < /* initializes */
        mtype.fieldsArray.length; ++i) {
          var field = mtype._fieldsArray[i].resolve(), ref = "m" + util.safeProp(field.name);
          if (field.optional)
            gen("if(%s!=null&&m.hasOwnProperty(%j)){", ref, field.name);
          if (field.map) {
            gen("if(!util.isObject(%s))", ref)("return%j", invalid(field, "object"))("var k=Object.keys(%s)", ref)("for(var i=0;i<k.length;++i){");
            genVerifyKey(gen, field, "k[i]");
            genVerifyValue(gen, field, i, ref + "[k[i]]")("}");
          } else if (field.repeated) {
            gen("if(!Array.isArray(%s))", ref)("return%j", invalid(field, "array"))("for(var i=0;i<%s.length;++i){", ref);
            genVerifyValue(gen, field, i, ref + "[i]")("}");
          } else {
            if (field.partOf) {
              var oneofProp = util.safeProp(field.partOf.name);
              if (seenFirstField[field.partOf.name] === 1)
                gen("if(p%s===1)", oneofProp)("return%j", field.partOf.name + ": multiple values");
              seenFirstField[field.partOf.name] = 1;
              gen("p%s=1", oneofProp);
            }
            genVerifyValue(gen, field, i, ref);
          }
          if (field.optional)
            gen("}");
        }
        return gen("return null");
      }
    }
  });

  // node_modules/protobufjs/src/converter.js
  var require_converter = __commonJS({
    "node_modules/protobufjs/src/converter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var converter = exports2;
      var Enum = require_enum();
      var util = require_util();
      function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
        var defaultAlreadyEmitted = false;
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum) {
            gen("switch(d%s){", prop);
            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
              if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) {
                gen("default:")('if(typeof(d%s)==="number"){m%s=d%s;break}', prop, prop, prop);
                if (!field.repeated)
                  gen("break");
                defaultAlreadyEmitted = true;
              }
              gen("case%j:", keys[i])("case %i:", values[keys[i]])("m%s=%j", prop, values[keys[i]])("break");
            }
            gen("}");
          } else
            gen('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop);
        } else {
          var isUnsigned = false;
          switch (field.type) {
            case "double":
            case "float":
              gen("m%s=Number(d%s)", prop, prop);
              break;
            case "uint32":
            case "fixed32":
              gen("m%s=d%s>>>0", prop, prop);
              break;
            case "int32":
            case "sint32":
            case "sfixed32":
              gen("m%s=d%s|0", prop, prop);
              break;
            case "uint64":
              isUnsigned = true;
            case "int64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)('else if(typeof d%s==="string")', prop)("m%s=parseInt(d%s,10)", prop, prop)('else if(typeof d%s==="number")', prop)("m%s=d%s", prop, prop)('else if(typeof d%s==="object")', prop)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
              break;
            case "bytes":
              gen('if(typeof d%s==="string")', prop)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)("else if(d%s.length >= 0)", prop)("m%s=d%s", prop, prop);
              break;
            case "string":
              gen("m%s=String(d%s)", prop, prop);
              break;
            case "bool":
              gen("m%s=Boolean(d%s)", prop, prop);
              break;
          }
        }
        return gen;
      }
      converter.fromObject = function fromObject(mtype) {
        var fields = mtype.fieldsArray;
        var gen = util.codegen(["d"], mtype.name + "\$fromObject")("if(d instanceof this.ctor)")("return d");
        if (!fields.length)
          return gen("return new this.ctor");
        gen("var m=new this.ctor");
        for (var i = 0; i < fields.length; ++i) {
          var field = fields[i].resolve(), prop = util.safeProp(field.name);
          if (field.map) {
            gen("if(d%s){", prop)('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s={}", prop)("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop + "[ks[i]]"
            )("}")("}");
          } else if (field.repeated) {
            gen("if(d%s){", prop)("if(!Array.isArray(d%s))", prop)("throw TypeError(%j)", field.fullName + ": array expected")("m%s=[]", prop)("for(var i=0;i<d%s.length;++i){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop + "[i]"
            )("}")("}");
          } else {
            if (!(field.resolvedType instanceof Enum))
              gen("if(d%s!=null){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop
            );
            if (!(field.resolvedType instanceof Enum))
              gen("}");
          }
        }
        return gen("return m");
      };
      function genValuePartial_toObject(gen, field, fieldIndex, prop) {
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum)
            gen("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);
          else
            gen("d%s=types[%i].toObject(m%s,o)", prop, fieldIndex, prop);
        } else {
          var isUnsigned = false;
          switch (field.type) {
            case "double":
            case "float":
              gen("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", prop, prop, prop, prop);
              break;
            case "uint64":
              isUnsigned = true;
            case "int64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen('if(typeof m%s==="number")', prop)("d%s=o.longs===String?String(m%s):m%s", prop, prop, prop)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true" : "", prop);
              break;
            case "bytes":
              gen("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop);
              break;
            default:
              gen("d%s=m%s", prop, prop);
              break;
          }
        }
        return gen;
      }
      converter.toObject = function toObject2(mtype) {
        var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
        if (!fields.length)
          return util.codegen()("return {}");
        var gen = util.codegen(["m", "o"], mtype.name + "\$toObject")("if(!o)")("o={}")("var d={}");
        var repeatedFields = [], mapFields = [], normalFields = [], i = 0;
        for (; i < fields.length; ++i)
          if (!fields[i].partOf)
            (fields[i].resolve().repeated ? repeatedFields : fields[i].map ? mapFields : normalFields).push(fields[i]);
        if (repeatedFields.length) {
          gen("if(o.arrays||o.defaults){");
          for (i = 0; i < repeatedFields.length; ++i)
            gen("d%s=[]", util.safeProp(repeatedFields[i].name));
          gen("}");
        }
        if (mapFields.length) {
          gen("if(o.objects||o.defaults){");
          for (i = 0; i < mapFields.length; ++i)
            gen("d%s={}", util.safeProp(mapFields[i].name));
          gen("}");
        }
        if (normalFields.length) {
          gen("if(o.defaults){");
          for (i = 0; i < normalFields.length; ++i) {
            var field = normalFields[i], prop = util.safeProp(field.name);
            if (field.resolvedType instanceof Enum)
              gen("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
            else if (field.long)
              gen("if(util.Long){")("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)("}else")("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber());
            else if (field.bytes) {
              var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]";
              gen("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))("else{")("d%s=%s", prop, arrayDefault)("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)("}");
            } else
              gen("d%s=%j", prop, field.typeDefault);
          }
          gen("}");
        }
        var hasKs2 = false;
        for (i = 0; i < fields.length; ++i) {
          var field = fields[i], index = mtype._fieldsArray.indexOf(field), prop = util.safeProp(field.name);
          if (field.map) {
            if (!hasKs2) {
              hasKs2 = true;
              gen("var ks2");
            }
            gen("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)("d%s={}", prop)("for(var j=0;j<ks2.length;++j){");
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop + "[ks2[j]]"
            )("}");
          } else if (field.repeated) {
            gen("if(m%s&&m%s.length){", prop, prop)("d%s=[]", prop)("for(var j=0;j<m%s.length;++j){", prop);
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop + "[j]"
            )("}");
          } else {
            gen("if(m%s!=null&&m.hasOwnProperty(%j)){", prop, field.name);
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop
            );
            if (field.partOf)
              gen("if(o.oneofs)")("d%s=%j", util.safeProp(field.partOf.name), field.name);
          }
          gen("}");
        }
        return gen("return d");
      };
    }
  });

  // node_modules/protobufjs/src/wrappers.js
  var require_wrappers = __commonJS({
    "node_modules/protobufjs/src/wrappers.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var wrappers = exports2;
      var Message2 = require_message();
      wrappers[".google.protobuf.Any"] = {
        fromObject: function(object) {
          if (object && object["@type"]) {
            var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);
            var type = this.lookup(name);
            if (type) {
              var type_url = object["@type"].charAt(0) === "." ? object["@type"].slice(1) : object["@type"];
              if (type_url.indexOf("/") === -1) {
                type_url = "/" + type_url;
              }
              return this.create({
                type_url,
                value: type.encode(type.fromObject(object)).finish()
              });
            }
          }
          return this.fromObject(object);
        },
        toObject: function(message, options) {
          var googleApi = "type.googleapis.com/";
          var prefix = "";
          var name = "";
          if (options && options.json && message.type_url && message.value) {
            name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
            prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1);
            var type = this.lookup(name);
            if (type)
              message = type.decode(message.value);
          }
          if (!(message instanceof this.ctor) && message instanceof Message2) {
            var object = message.\$type.toObject(message, options);
            var messageName = message.\$type.fullName[0] === "." ? message.\$type.fullName.slice(1) : message.\$type.fullName;
            if (prefix === "") {
              prefix = googleApi;
            }
            name = prefix + messageName;
            object["@type"] = name;
            return object;
          }
          return this.toObject(message, options);
        }
      };
    }
  });

  // node_modules/protobufjs/src/type.js
  var require_type = __commonJS({
    "node_modules/protobufjs/src/type.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Type3;
      var Namespace = require_namespace();
      ((Type3.prototype = Object.create(Namespace.prototype)).constructor = Type3).className = "Type";
      var Enum = require_enum();
      var OneOf2 = require_oneof();
      var Field2 = require_field();
      var MapField = require_mapfield();
      var Service = require_service2();
      var Message2 = require_message();
      var Reader2 = require_reader();
      var Writer2 = require_writer();
      var util = require_util();
      var encoder = require_encoder();
      var decoder = require_decoder();
      var verifier = require_verifier();
      var converter = require_converter();
      var wrappers = require_wrappers();
      function Type3(name, options) {
        Namespace.call(this, name, options);
        this.fields = {};
        this.oneofs = void 0;
        this.extensions = void 0;
        this.reserved = void 0;
        this.group = void 0;
        this._fieldsById = null;
        this._fieldsArray = null;
        this._oneofsArray = null;
        this._ctor = null;
      }
      Object.defineProperties(Type3.prototype, {
        /**
         * Message fields by id.
         * @name Type#fieldsById
         * @type {Object.<number,Field>}
         * @readonly
         */
        fieldsById: {
          get: function() {
            if (this._fieldsById)
              return this._fieldsById;
            this._fieldsById = {};
            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {
              var field = this.fields[names[i]], id = field.id;
              if (this._fieldsById[id])
                throw Error("duplicate id " + id + " in " + this);
              this._fieldsById[id] = field;
            }
            return this._fieldsById;
          }
        },
        /**
         * Fields of this message as an array for iteration.
         * @name Type#fieldsArray
         * @type {Field[]}
         * @readonly
         */
        fieldsArray: {
          get: function() {
            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));
          }
        },
        /**
         * Oneofs of this message as an array for iteration.
         * @name Type#oneofsArray
         * @type {OneOf[]}
         * @readonly
         */
        oneofsArray: {
          get: function() {
            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));
          }
        },
        /**
         * The registered constructor, if any registered, otherwise a generic constructor.
         * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.
         * @name Type#ctor
         * @type {Constructor<{}>}
         */
        ctor: {
          get: function() {
            return this._ctor || (this.ctor = Type3.generateConstructor(this)());
          },
          set: function(ctor) {
            var prototype = ctor.prototype;
            if (!(prototype instanceof Message2)) {
              (ctor.prototype = new Message2()).constructor = ctor;
              util.merge(ctor.prototype, prototype);
            }
            ctor.\$type = ctor.prototype.\$type = this;
            util.merge(ctor, Message2, true);
            this._ctor = ctor;
            var i = 0;
            for (; i < /* initializes */
            this.fieldsArray.length; ++i)
              this._fieldsArray[i].resolve();
            var ctorProperties = {};
            for (i = 0; i < /* initializes */
            this.oneofsArray.length; ++i)
              ctorProperties[this._oneofsArray[i].resolve().name] = {
                get: util.oneOfGetter(this._oneofsArray[i].oneof),
                set: util.oneOfSetter(this._oneofsArray[i].oneof)
              };
            if (i)
              Object.defineProperties(ctor.prototype, ctorProperties);
          }
        }
      });
      Type3.generateConstructor = function generateConstructor(mtype) {
        var gen = util.codegen(["p"], mtype.name);
        for (var i = 0, field; i < mtype.fieldsArray.length; ++i)
          if ((field = mtype._fieldsArray[i]).map)
            gen("this%s={}", util.safeProp(field.name));
          else if (field.repeated)
            gen("this%s=[]", util.safeProp(field.name));
        return gen("if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null)")("this[ks[i]]=p[ks[i]]");
      };
      function clearCache(type) {
        type._fieldsById = type._fieldsArray = type._oneofsArray = null;
        delete type.encode;
        delete type.decode;
        delete type.verify;
        return type;
      }
      Type3.fromJSON = function fromJSON(name, json) {
        var type = new Type3(name, json.options);
        type.extensions = json.extensions;
        type.reserved = json.reserved;
        var names = Object.keys(json.fields), i = 0;
        for (; i < names.length; ++i)
          type.add(
            (typeof json.fields[names[i]].keyType !== "undefined" ? MapField.fromJSON : Field2.fromJSON)(names[i], json.fields[names[i]])
          );
        if (json.oneofs)
          for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)
            type.add(OneOf2.fromJSON(names[i], json.oneofs[names[i]]));
        if (json.nested)
          for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {
            var nested = json.nested[names[i]];
            type.add(
              // most to least likely
              (nested.id !== void 0 ? Field2.fromJSON : nested.fields !== void 0 ? Type3.fromJSON : nested.values !== void 0 ? Enum.fromJSON : nested.methods !== void 0 ? Service.fromJSON : Namespace.fromJSON)(names[i], nested)
            );
          }
        if (json.extensions && json.extensions.length)
          type.extensions = json.extensions;
        if (json.reserved && json.reserved.length)
          type.reserved = json.reserved;
        if (json.group)
          type.group = true;
        if (json.comment)
          type.comment = json.comment;
        return type;
      };
      Type3.prototype.toJSON = function toJSON(toJSONOptions) {
        var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          inherited && inherited.options || void 0,
          "oneofs",
          Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),
          "fields",
          Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) {
            return !obj.declaringField;
          }), toJSONOptions) || {},
          "extensions",
          this.extensions && this.extensions.length ? this.extensions : void 0,
          "reserved",
          this.reserved && this.reserved.length ? this.reserved : void 0,
          "group",
          this.group || void 0,
          "nested",
          inherited && inherited.nested || void 0,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Type3.prototype.resolveAll = function resolveAll() {
        var fields = this.fieldsArray, i = 0;
        while (i < fields.length)
          fields[i++].resolve();
        var oneofs = this.oneofsArray;
        i = 0;
        while (i < oneofs.length)
          oneofs[i++].resolve();
        return Namespace.prototype.resolveAll.call(this);
      };
      Type3.prototype.get = function get(name) {
        return this.fields[name] || this.oneofs && this.oneofs[name] || this.nested && this.nested[name] || null;
      };
      Type3.prototype.add = function add(object) {
        if (this.get(object.name))
          throw Error("duplicate name '" + object.name + "' in " + this);
        if (object instanceof Field2 && object.extend === void 0) {
          if (this._fieldsById ? (
            /* istanbul ignore next */
            this._fieldsById[object.id]
          ) : this.fieldsById[object.id])
            throw Error("duplicate id " + object.id + " in " + this);
          if (this.isReservedId(object.id))
            throw Error("id " + object.id + " is reserved in " + this);
          if (this.isReservedName(object.name))
            throw Error("name '" + object.name + "' is reserved in " + this);
          if (object.parent)
            object.parent.remove(object);
          this.fields[object.name] = object;
          object.message = this;
          object.onAdd(this);
          return clearCache(this);
        }
        if (object instanceof OneOf2) {
          if (!this.oneofs)
            this.oneofs = {};
          this.oneofs[object.name] = object;
          object.onAdd(this);
          return clearCache(this);
        }
        return Namespace.prototype.add.call(this, object);
      };
      Type3.prototype.remove = function remove(object) {
        if (object instanceof Field2 && object.extend === void 0) {
          if (!this.fields || this.fields[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.fields[object.name];
          object.parent = null;
          object.onRemove(this);
          return clearCache(this);
        }
        if (object instanceof OneOf2) {
          if (!this.oneofs || this.oneofs[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.oneofs[object.name];
          object.parent = null;
          object.onRemove(this);
          return clearCache(this);
        }
        return Namespace.prototype.remove.call(this, object);
      };
      Type3.prototype.isReservedId = function isReservedId(id) {
        return Namespace.isReservedId(this.reserved, id);
      };
      Type3.prototype.isReservedName = function isReservedName(name) {
        return Namespace.isReservedName(this.reserved, name);
      };
      Type3.prototype.create = function create(properties) {
        return new this.ctor(properties);
      };
      Type3.prototype.setup = function setup() {
        var fullName = this.fullName, types = [];
        for (var i = 0; i < /* initializes */
        this.fieldsArray.length; ++i)
          types.push(this._fieldsArray[i].resolve().resolvedType);
        this.encode = encoder(this)({
          Writer: Writer2,
          types,
          util
        });
        this.decode = decoder(this)({
          Reader: Reader2,
          types,
          util
        });
        this.verify = verifier(this)({
          types,
          util
        });
        this.fromObject = converter.fromObject(this)({
          types,
          util
        });
        this.toObject = converter.toObject(this)({
          types,
          util
        });
        var wrapper = wrappers[fullName];
        if (wrapper) {
          var originalThis = Object.create(this);
          originalThis.fromObject = this.fromObject;
          this.fromObject = wrapper.fromObject.bind(originalThis);
          originalThis.toObject = this.toObject;
          this.toObject = wrapper.toObject.bind(originalThis);
        }
        return this;
      };
      Type3.prototype.encode = function encode_setup(message, writer) {
        return this.setup().encode(message, writer);
      };
      Type3.prototype.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
      };
      Type3.prototype.decode = function decode_setup(reader, length2) {
        return this.setup().decode(reader, length2);
      };
      Type3.prototype.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof Reader2))
          reader = Reader2.create(reader);
        return this.decode(reader, reader.uint32());
      };
      Type3.prototype.verify = function verify_setup(message) {
        return this.setup().verify(message);
      };
      Type3.prototype.fromObject = function fromObject(object) {
        return this.setup().fromObject(object);
      };
      Type3.prototype.toObject = function toObject2(message, options) {
        return this.setup().toObject(message, options);
      };
      Type3.d = function decorateType(typeName) {
        return function typeDecorator(target) {
          util.decorateType(target, typeName);
        };
      };
    }
  });

  // node_modules/protobufjs/src/root.js
  var require_root = __commonJS({
    "node_modules/protobufjs/src/root.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Root4;
      var Namespace = require_namespace();
      ((Root4.prototype = Object.create(Namespace.prototype)).constructor = Root4).className = "Root";
      var Field2 = require_field();
      var Enum = require_enum();
      var OneOf2 = require_oneof();
      var util = require_util();
      var Type3;
      var parse;
      var common;
      function Root4(options) {
        Namespace.call(this, "", options);
        this.deferred = [];
        this.files = [];
      }
      Root4.fromJSON = function fromJSON(json, root) {
        if (!root)
          root = new Root4();
        if (json.options)
          root.setOptions(json.options);
        return root.addJSON(json.nested);
      };
      Root4.prototype.resolvePath = util.path.resolve;
      Root4.prototype.fetch = util.fetch;
      function SYNC() {
      }
      Root4.prototype.load = function load2(filename, options, callback) {
        if (typeof options === "function") {
          callback = options;
          options = void 0;
        }
        var self2 = this;
        if (!callback)
          return util.asPromise(load2, self2, filename, options);
        var sync = callback === SYNC;
        function finish(err2, root) {
          if (!callback)
            return;
          if (sync)
            throw err2;
          var cb = callback;
          callback = null;
          cb(err2, root);
        }
        function getBundledFileName(filename2) {
          var idx = filename2.lastIndexOf("google/protobuf/");
          if (idx > -1) {
            var altname = filename2.substring(idx);
            if (altname in common)
              return altname;
          }
          return null;
        }
        function process(filename2, source) {
          try {
            if (util.isString(source) && source.charAt(0) === "{")
              source = JSON.parse(source);
            if (!util.isString(source))
              self2.setOptions(source.options).addJSON(source.nested);
            else {
              parse.filename = filename2;
              var parsed = parse(source, self2, options), resolved2, i2 = 0;
              if (parsed.imports) {
                for (; i2 < parsed.imports.length; ++i2)
                  if (resolved2 = getBundledFileName(parsed.imports[i2]) || self2.resolvePath(filename2, parsed.imports[i2]))
                    fetch2(resolved2);
              }
              if (parsed.weakImports) {
                for (i2 = 0; i2 < parsed.weakImports.length; ++i2)
                  if (resolved2 = getBundledFileName(parsed.weakImports[i2]) || self2.resolvePath(filename2, parsed.weakImports[i2]))
                    fetch2(resolved2, true);
              }
            }
          } catch (err2) {
            finish(err2);
          }
          if (!sync && !queued)
            finish(null, self2);
        }
        function fetch2(filename2, weak) {
          filename2 = getBundledFileName(filename2) || filename2;
          if (self2.files.indexOf(filename2) > -1)
            return;
          self2.files.push(filename2);
          if (filename2 in common) {
            if (sync)
              process(filename2, common[filename2]);
            else {
              ++queued;
              setTimeout(function() {
                --queued;
                process(filename2, common[filename2]);
              });
            }
            return;
          }
          if (sync) {
            var source;
            try {
              source = util.fs.readFileSync(filename2).toString("utf8");
            } catch (err2) {
              if (!weak)
                finish(err2);
              return;
            }
            process(filename2, source);
          } else {
            ++queued;
            self2.fetch(filename2, function(err2, source2) {
              --queued;
              if (!callback)
                return;
              if (err2) {
                if (!weak)
                  finish(err2);
                else if (!queued)
                  finish(null, self2);
                return;
              }
              process(filename2, source2);
            });
          }
        }
        var queued = 0;
        if (util.isString(filename))
          filename = [filename];
        for (var i = 0, resolved; i < filename.length; ++i)
          if (resolved = self2.resolvePath("", filename[i]))
            fetch2(resolved);
        if (sync)
          return self2;
        if (!queued)
          finish(null, self2);
        return void 0;
      };
      Root4.prototype.loadSync = function loadSync(filename, options) {
        if (!util.isNode)
          throw Error("not supported");
        return this.load(filename, options, SYNC);
      };
      Root4.prototype.resolveAll = function resolveAll() {
        if (this.deferred.length)
          throw Error("unresolvable extensions: " + this.deferred.map(function(field) {
            return "'extend " + field.extend + "' in " + field.parent.fullName;
          }).join(", "));
        return Namespace.prototype.resolveAll.call(this);
      };
      var exposeRe = /^[A-Z]/;
      function tryHandleExtension(root, field) {
        var extendedType = field.parent.lookup(field.extend);
        if (extendedType) {
          var sisterField = new Field2(field.fullName, field.id, field.type, field.rule, void 0, field.options);
          if (extendedType.get(sisterField.name)) {
            return true;
          }
          sisterField.declaringField = field;
          field.extensionField = sisterField;
          extendedType.add(sisterField);
          return true;
        }
        return false;
      }
      Root4.prototype._handleAdd = function _handleAdd(object) {
        if (object instanceof Field2) {
          if (
            /* an extension field (implies not part of a oneof) */
            object.extend !== void 0 && /* not already handled */
            !object.extensionField
          ) {
            if (!tryHandleExtension(this, object))
              this.deferred.push(object);
          }
        } else if (object instanceof Enum) {
          if (exposeRe.test(object.name))
            object.parent[object.name] = object.values;
        } else if (!(object instanceof OneOf2)) {
          if (object instanceof Type3)
            for (var i = 0; i < this.deferred.length; )
              if (tryHandleExtension(this, this.deferred[i]))
                this.deferred.splice(i, 1);
              else
                ++i;
          for (var j = 0; j < /* initializes */
          object.nestedArray.length; ++j)
            this._handleAdd(object._nestedArray[j]);
          if (exposeRe.test(object.name))
            object.parent[object.name] = object;
        }
      };
      Root4.prototype._handleRemove = function _handleRemove(object) {
        if (object instanceof Field2) {
          if (
            /* an extension field */
            object.extend !== void 0
          ) {
            if (
              /* already handled */
              object.extensionField
            ) {
              object.extensionField.parent.remove(object.extensionField);
              object.extensionField = null;
            } else {
              var index = this.deferred.indexOf(object);
              if (index > -1)
                this.deferred.splice(index, 1);
            }
          }
        } else if (object instanceof Enum) {
          if (exposeRe.test(object.name))
            delete object.parent[object.name];
        } else if (object instanceof Namespace) {
          for (var i = 0; i < /* initializes */
          object.nestedArray.length; ++i)
            this._handleRemove(object._nestedArray[i]);
          if (exposeRe.test(object.name))
            delete object.parent[object.name];
        }
      };
      Root4._configure = function(Type_, parse_, common_) {
        Type3 = Type_;
        parse = parse_;
        common = common_;
      };
    }
  });

  // node_modules/protobufjs/src/util.js
  var require_util = __commonJS({
    "node_modules/protobufjs/src/util.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      var util = module2.exports = require_minimal();
      var roots = require_roots();
      var Type3;
      var Enum;
      util.codegen = require_codegen();
      util.fetch = require_fetch();
      util.path = require_path();
      util.fs = util.inquire("fs");
      util.toArray = function toArray(object) {
        if (object) {
          var keys = Object.keys(object), array = new Array(keys.length), index = 0;
          while (index < keys.length)
            array[index] = object[keys[index++]];
          return array;
        }
        return [];
      };
      util.toObject = function toObject2(array) {
        var object = {}, index = 0;
        while (index < array.length) {
          var key = array[index++], val = array[index++];
          if (val !== void 0)
            object[key] = val;
        }
        return object;
      };
      var safePropBackslashRe = /\\\\/g;
      var safePropQuoteRe = /"/g;
      util.isReserved = function isReserved(name) {
        return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)\$/.test(name);
      };
      util.safeProp = function safeProp(prop) {
        if (!/^[\$\\w_]+\$/.test(prop) || util.isReserved(prop))
          return '["' + prop.replace(safePropBackslashRe, "\\\\\\\\").replace(safePropQuoteRe, '\\\\"') + '"]';
        return "." + prop;
      };
      util.ucFirst = function ucFirst(str) {
        return str.charAt(0).toUpperCase() + str.substring(1);
      };
      var camelCaseRe = /_([a-z])/g;
      util.camelCase = function camelCase(str) {
        return str.substring(0, 1) + str.substring(1).replace(camelCaseRe, function(\$0, \$1) {
          return \$1.toUpperCase();
        });
      };
      util.compareFieldsById = function compareFieldsById(a, b) {
        return a.id - b.id;
      };
      util.decorateType = function decorateType(ctor, typeName) {
        if (ctor.\$type) {
          if (typeName && ctor.\$type.name !== typeName) {
            util.decorateRoot.remove(ctor.\$type);
            ctor.\$type.name = typeName;
            util.decorateRoot.add(ctor.\$type);
          }
          return ctor.\$type;
        }
        if (!Type3)
          Type3 = require_type();
        var type = new Type3(typeName || ctor.name);
        util.decorateRoot.add(type);
        type.ctor = ctor;
        Object.defineProperty(ctor, "\$type", { value: type, enumerable: false });
        Object.defineProperty(ctor.prototype, "\$type", { value: type, enumerable: false });
        return type;
      };
      var decorateEnumIndex = 0;
      util.decorateEnum = function decorateEnum(object) {
        if (object.\$type)
          return object.\$type;
        if (!Enum)
          Enum = require_enum();
        var enm = new Enum("Enum" + decorateEnumIndex++, object);
        util.decorateRoot.add(enm);
        Object.defineProperty(object, "\$type", { value: enm, enumerable: false });
        return enm;
      };
      util.setProperty = function setProperty(dst, path, value) {
        function setProp(dst2, path2, value2) {
          var part = path2.shift();
          if (part === "__proto__" || part === "prototype") {
            return dst2;
          }
          if (path2.length > 0) {
            dst2[part] = setProp(dst2[part] || {}, path2, value2);
          } else {
            var prevValue = dst2[part];
            if (prevValue)
              value2 = [].concat(prevValue).concat(value2);
            dst2[part] = value2;
          }
          return dst2;
        }
        if (typeof dst !== "object")
          throw TypeError("dst must be an object");
        if (!path)
          throw TypeError("path must be specified");
        path = path.split(".");
        return setProp(dst, path, value);
      };
      Object.defineProperty(util, "decorateRoot", {
        get: function() {
          return roots["decorated"] || (roots["decorated"] = new (require_root())());
        }
      });
    }
  });

  // node_modules/protobufjs/src/object.js
  var require_object = __commonJS({
    "node_modules/protobufjs/src/object.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = ReflectionObject2;
      ReflectionObject2.className = "ReflectionObject";
      var util = require_util();
      var Root4;
      function ReflectionObject2(name, options) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        if (options && !util.isObject(options))
          throw TypeError("options must be an object");
        this.options = options;
        this.parsedOptions = null;
        this.name = name;
        this.parent = null;
        this.resolved = false;
        this.comment = null;
        this.filename = null;
      }
      Object.defineProperties(ReflectionObject2.prototype, {
        /**
         * Reference to the root namespace.
         * @name ReflectionObject#root
         * @type {Root}
         * @readonly
         */
        root: {
          get: function() {
            var ptr = this;
            while (ptr.parent !== null)
              ptr = ptr.parent;
            return ptr;
          }
        },
        /**
         * Full name including leading dot.
         * @name ReflectionObject#fullName
         * @type {string}
         * @readonly
         */
        fullName: {
          get: function() {
            var path = [this.name], ptr = this.parent;
            while (ptr) {
              path.unshift(ptr.name);
              ptr = ptr.parent;
            }
            return path.join(".");
          }
        }
      });
      ReflectionObject2.prototype.toJSON = /* istanbul ignore next */
      function toJSON() {
        throw Error();
      };
      ReflectionObject2.prototype.onAdd = function onAdd(parent) {
        if (this.parent && this.parent !== parent)
          this.parent.remove(this);
        this.parent = parent;
        this.resolved = false;
        var root = parent.root;
        if (root instanceof Root4)
          root._handleAdd(this);
      };
      ReflectionObject2.prototype.onRemove = function onRemove(parent) {
        var root = parent.root;
        if (root instanceof Root4)
          root._handleRemove(this);
        this.parent = null;
        this.resolved = false;
      };
      ReflectionObject2.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if (this.root instanceof Root4)
          this.resolved = true;
        return this;
      };
      ReflectionObject2.prototype.getOption = function getOption(name) {
        if (this.options)
          return this.options[name];
        return void 0;
      };
      ReflectionObject2.prototype.setOption = function setOption(name, value, ifNotSet) {
        if (!ifNotSet || !this.options || this.options[name] === void 0)
          (this.options || (this.options = {}))[name] = value;
        return this;
      };
      ReflectionObject2.prototype.setParsedOption = function setParsedOption(name, value, propName) {
        if (!this.parsedOptions) {
          this.parsedOptions = [];
        }
        var parsedOptions = this.parsedOptions;
        if (propName) {
          var opt = parsedOptions.find(function(opt2) {
            return Object.prototype.hasOwnProperty.call(opt2, name);
          });
          if (opt) {
            var newValue = opt[name];
            util.setProperty(newValue, propName, value);
          } else {
            opt = {};
            opt[name] = util.setProperty({}, propName, value);
            parsedOptions.push(opt);
          }
        } else {
          var newOpt = {};
          newOpt[name] = value;
          parsedOptions.push(newOpt);
        }
        return this;
      };
      ReflectionObject2.prototype.setOptions = function setOptions(options, ifNotSet) {
        if (options)
          for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)
            this.setOption(keys[i], options[keys[i]], ifNotSet);
        return this;
      };
      ReflectionObject2.prototype.toString = function toString2() {
        var className = this.constructor.className, fullName = this.fullName;
        if (fullName.length)
          return className + " " + fullName;
        return className;
      };
      ReflectionObject2._configure = function(Root_) {
        Root4 = Root_;
      };
    }
  });

  // node_modules/protobufjs/src/enum.js
  var require_enum = __commonJS({
    "node_modules/protobufjs/src/enum.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Enum;
      var ReflectionObject2 = require_object();
      ((Enum.prototype = Object.create(ReflectionObject2.prototype)).constructor = Enum).className = "Enum";
      var Namespace = require_namespace();
      var util = require_util();
      function Enum(name, values, options, comment, comments, valuesOptions) {
        ReflectionObject2.call(this, name, options);
        if (values && typeof values !== "object")
          throw TypeError("values must be an object");
        this.valuesById = {};
        this.values = Object.create(this.valuesById);
        this.comment = comment;
        this.comments = comments || {};
        this.valuesOptions = valuesOptions;
        this.reserved = void 0;
        if (values) {
          for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)
            if (typeof values[keys[i]] === "number")
              this.valuesById[this.values[keys[i]] = values[keys[i]]] = keys[i];
        }
      }
      Enum.fromJSON = function fromJSON(name, json) {
        var enm = new Enum(name, json.values, json.options, json.comment, json.comments);
        enm.reserved = json.reserved;
        return enm;
      };
      Enum.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          this.options,
          "valuesOptions",
          this.valuesOptions,
          "values",
          this.values,
          "reserved",
          this.reserved && this.reserved.length ? this.reserved : void 0,
          "comment",
          keepComments ? this.comment : void 0,
          "comments",
          keepComments ? this.comments : void 0
        ]);
      };
      Enum.prototype.add = function add(name, id, comment, options) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        if (!util.isInteger(id))
          throw TypeError("id must be an integer");
        if (this.values[name] !== void 0)
          throw Error("duplicate name '" + name + "' in " + this);
        if (this.isReservedId(id))
          throw Error("id " + id + " is reserved in " + this);
        if (this.isReservedName(name))
          throw Error("name '" + name + "' is reserved in " + this);
        if (this.valuesById[id] !== void 0) {
          if (!(this.options && this.options.allow_alias))
            throw Error("duplicate id " + id + " in " + this);
          this.values[name] = id;
        } else
          this.valuesById[this.values[name] = id] = name;
        if (options) {
          if (this.valuesOptions === void 0)
            this.valuesOptions = {};
          this.valuesOptions[name] = options || null;
        }
        this.comments[name] = comment || null;
        return this;
      };
      Enum.prototype.remove = function remove(name) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        var val = this.values[name];
        if (val == null)
          throw Error("name '" + name + "' does not exist in " + this);
        delete this.valuesById[val];
        delete this.values[name];
        delete this.comments[name];
        if (this.valuesOptions)
          delete this.valuesOptions[name];
        return this;
      };
      Enum.prototype.isReservedId = function isReservedId(id) {
        return Namespace.isReservedId(this.reserved, id);
      };
      Enum.prototype.isReservedName = function isReservedName(name) {
        return Namespace.isReservedName(this.reserved, name);
      };
    }
  });

  // node_modules/protobufjs/src/encoder.js
  var require_encoder = __commonJS({
    "node_modules/protobufjs/src/encoder.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = encoder;
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      function genTypePartial(gen, field, fieldIndex, ref) {
        return field.resolvedType.group ? gen("types[%i].encode(%s,w.uint32(%i)).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0) : gen("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
      }
      function encoder(mtype) {
        var gen = util.codegen(["m", "w"], mtype.name + "\$encode")("if(!w)")("w=Writer.create()");
        var i, ref;
        var fields = (
          /* initializes */
          mtype.fieldsArray.slice().sort(util.compareFieldsById)
        );
        for (var i = 0; i < fields.length; ++i) {
          var field = fields[i].resolve(), index = mtype._fieldsArray.indexOf(field), type = field.resolvedType instanceof Enum ? "int32" : field.type, wireType = types.basic[type];
          ref = "m" + util.safeProp(field.name);
          if (field.map) {
            gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name)("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref)("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
            if (wireType === void 0)
              gen("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref);
            else
              gen(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
            gen("}")("}");
          } else if (field.repeated) {
            gen("if(%s!=null&&%s.length){", ref, ref);
            if (field.packed && types.packed[type] !== void 0) {
              gen("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)("for(var i=0;i<%s.length;++i)", ref)("w.%s(%s[i])", type, ref)("w.ldelim()");
            } else {
              gen("for(var i=0;i<%s.length;++i)", ref);
              if (wireType === void 0)
                genTypePartial(gen, field, index, ref + "[i]");
              else
                gen("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
            }
            gen("}");
          } else {
            if (field.optional)
              gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name);
            if (wireType === void 0)
              genTypePartial(gen, field, index, ref);
            else
              gen("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
          }
        }
        return gen("return w");
      }
    }
  });

  // node_modules/protobufjs/src/index-light.js
  var require_index_light = __commonJS({
    "node_modules/protobufjs/src/index-light.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      var protobuf = module2.exports = require_index_minimal();
      protobuf.build = "light";
      function load2(filename, root, callback) {
        if (typeof root === "function") {
          callback = root;
          root = new protobuf.Root();
        } else if (!root)
          root = new protobuf.Root();
        return root.load(filename, callback);
      }
      protobuf.load = load2;
      function loadSync(filename, root) {
        if (!root)
          root = new protobuf.Root();
        return root.loadSync(filename);
      }
      protobuf.loadSync = loadSync;
      protobuf.encoder = require_encoder();
      protobuf.decoder = require_decoder();
      protobuf.verifier = require_verifier();
      protobuf.converter = require_converter();
      protobuf.ReflectionObject = require_object();
      protobuf.Namespace = require_namespace();
      protobuf.Root = require_root();
      protobuf.Enum = require_enum();
      protobuf.Type = require_type();
      protobuf.Field = require_field();
      protobuf.OneOf = require_oneof();
      protobuf.MapField = require_mapfield();
      protobuf.Service = require_service2();
      protobuf.Method = require_method();
      protobuf.Message = require_message();
      protobuf.wrappers = require_wrappers();
      protobuf.types = require_types();
      protobuf.util = require_util();
      protobuf.ReflectionObject._configure(protobuf.Root);
      protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);
      protobuf.Root._configure(protobuf.Type);
      protobuf.Field._configure(protobuf.Type);
    }
  });

  // node_modules/protobufjs/light.js
  var require_light = __commonJS({
    "node_modules/protobufjs/light.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = require_index_light();
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js
  var require_value_types = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var NewLine = "\\n";
      exports2.NewLine = NewLine;
      var ListType;
      (function(ListType2) {
        ListType2["Ordered"] = "ordered";
        ListType2["Bullet"] = "bullet";
        ListType2["Checked"] = "checked";
        ListType2["Unchecked"] = "unchecked";
      })(ListType || (ListType = {}));
      exports2.ListType = ListType;
      var ScriptType;
      (function(ScriptType2) {
        ScriptType2["Sub"] = "sub";
        ScriptType2["Super"] = "super";
      })(ScriptType || (ScriptType = {}));
      exports2.ScriptType = ScriptType;
      var DirectionType;
      (function(DirectionType2) {
        DirectionType2["Rtl"] = "rtl";
      })(DirectionType || (DirectionType = {}));
      exports2.DirectionType = DirectionType;
      var AlignType;
      (function(AlignType2) {
        AlignType2["Left"] = "left";
        AlignType2["Center"] = "center";
        AlignType2["Right"] = "right";
        AlignType2["Justify"] = "justify";
      })(AlignType || (AlignType = {}));
      exports2.AlignType = AlignType;
      var DataType;
      (function(DataType2) {
        DataType2["Image"] = "image";
        DataType2["Video"] = "video";
        DataType2["Formula"] = "formula";
        DataType2["Text"] = "text";
      })(DataType || (DataType = {}));
      exports2.DataType = DataType;
      var GroupType;
      (function(GroupType2) {
        GroupType2["Block"] = "block";
        GroupType2["InlineGroup"] = "inline-group";
        GroupType2["List"] = "list";
        GroupType2["Video"] = "video";
        GroupType2["Table"] = "table";
      })(GroupType || (GroupType = {}));
      exports2.GroupType = GroupType;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js
  var require_InsertData = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InsertDataQuill = /* @__PURE__ */ function() {
        function InsertDataQuill2(type, value) {
          this.type = type;
          this.value = value;
        }
        return InsertDataQuill2;
      }();
      exports2.InsertDataQuill = InsertDataQuill;
      var InsertDataCustom = /* @__PURE__ */ function() {
        function InsertDataCustom2(type, value) {
          this.type = type;
          this.value = value;
        }
        return InsertDataCustom2;
      }();
      exports2.InsertDataCustom = InsertDataCustom;
    }
  });

  // node_modules/lodash.isequal/index.js
  var require_lodash = __commonJS({
    "node_modules/lodash.isequal/index.js"(exports2, module2) {
      init_tampermonkey();
      var LARGE_ARRAY_SIZE = 200;
      var HASH_UNDEFINED = "__lodash_hash_undefined__";
      var COMPARE_PARTIAL_FLAG = 1;
      var COMPARE_UNORDERED_FLAG = 2;
      var MAX_SAFE_INTEGER = 9007199254740991;
      var argsTag = "[object Arguments]";
      var arrayTag = "[object Array]";
      var asyncTag = "[object AsyncFunction]";
      var boolTag = "[object Boolean]";
      var dateTag = "[object Date]";
      var errorTag = "[object Error]";
      var funcTag = "[object Function]";
      var genTag = "[object GeneratorFunction]";
      var mapTag = "[object Map]";
      var numberTag = "[object Number]";
      var nullTag = "[object Null]";
      var objectTag = "[object Object]";
      var promiseTag = "[object Promise]";
      var proxyTag = "[object Proxy]";
      var regexpTag = "[object RegExp]";
      var setTag = "[object Set]";
      var stringTag = "[object String]";
      var symbolTag = "[object Symbol]";
      var undefinedTag = "[object Undefined]";
      var weakMapTag = "[object WeakMap]";
      var arrayBufferTag = "[object ArrayBuffer]";
      var dataViewTag = "[object DataView]";
      var float32Tag = "[object Float32Array]";
      var float64Tag = "[object Float64Array]";
      var int8Tag = "[object Int8Array]";
      var int16Tag = "[object Int16Array]";
      var int32Tag = "[object Int32Array]";
      var uint8Tag = "[object Uint8Array]";
      var uint8ClampedTag = "[object Uint8ClampedArray]";
      var uint16Tag = "[object Uint16Array]";
      var uint32Tag = "[object Uint32Array]";
      var reRegExpChar = /[\\\\^\$.*+?()[\\]{}|]/g;
      var reIsHostCtor = /^\\[object .+?Constructor\\]\$/;
      var reIsUint = /^(?:0|[1-9]\\d*)\$/;
      var typedArrayTags = {};
      typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
      typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
      var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
      var freeSelf = typeof self == "object" && self && self.Object === Object && self;
      var root = freeGlobal || freeSelf || Function("return this")();
      var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
      var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2;
      var moduleExports = freeModule && freeModule.exports === freeExports;
      var freeProcess = moduleExports && freeGlobal.process;
      var nodeUtil = function() {
        try {
          return freeProcess && freeProcess.binding && freeProcess.binding("util");
        } catch (e) {
        }
      }();
      var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
      function arrayFilter(array, predicate) {
        var index = -1, length2 = array == null ? 0 : array.length, resIndex = 0, result = [];
        while (++index < length2) {
          var value = array[index];
          if (predicate(value, index, array)) {
            result[resIndex++] = value;
          }
        }
        return result;
      }
      function arrayPush(array, values) {
        var index = -1, length2 = values.length, offset3 = array.length;
        while (++index < length2) {
          array[offset3 + index] = values[index];
        }
        return array;
      }
      function arraySome(array, predicate) {
        var index = -1, length2 = array == null ? 0 : array.length;
        while (++index < length2) {
          if (predicate(array[index], index, array)) {
            return true;
          }
        }
        return false;
      }
      function baseTimes(n, iteratee) {
        var index = -1, result = Array(n);
        while (++index < n) {
          result[index] = iteratee(index);
        }
        return result;
      }
      function baseUnary(func) {
        return function(value) {
          return func(value);
        };
      }
      function cacheHas(cache, key) {
        return cache.has(key);
      }
      function getValue(object, key) {
        return object == null ? void 0 : object[key];
      }
      function mapToArray(map) {
        var index = -1, result = Array(map.size);
        map.forEach(function(value, key) {
          result[++index] = [key, value];
        });
        return result;
      }
      function overArg(func, transform) {
        return function(arg) {
          return func(transform(arg));
        };
      }
      function setToArray(set) {
        var index = -1, result = Array(set.size);
        set.forEach(function(value) {
          result[++index] = value;
        });
        return result;
      }
      var arrayProto = Array.prototype;
      var funcProto = Function.prototype;
      var objectProto = Object.prototype;
      var coreJsData = root["__core-js_shared__"];
      var funcToString = funcProto.toString;
      var hasOwnProperty = objectProto.hasOwnProperty;
      var maskSrcKey = function() {
        var uid2 = /[^.]+\$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
        return uid2 ? "Symbol(src)_1." + uid2 : "";
      }();
      var nativeObjectToString = objectProto.toString;
      var reIsNative = RegExp(
        "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\\\\$&").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, "\$1.*?") + "\$"
      );
      var Buffer2 = moduleExports ? root.Buffer : void 0;
      var Symbol2 = root.Symbol;
      var Uint8Array2 = root.Uint8Array;
      var propertyIsEnumerable = objectProto.propertyIsEnumerable;
      var splice = arrayProto.splice;
      var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
      var nativeGetSymbols = Object.getOwnPropertySymbols;
      var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
      var nativeKeys = overArg(Object.keys, Object);
      var DataView2 = getNative(root, "DataView");
      var Map = getNative(root, "Map");
      var Promise2 = getNative(root, "Promise");
      var Set2 = getNative(root, "Set");
      var WeakMap = getNative(root, "WeakMap");
      var nativeCreate = getNative(Object, "create");
      var dataViewCtorString = toSource(DataView2);
      var mapCtorString = toSource(Map);
      var promiseCtorString = toSource(Promise2);
      var setCtorString = toSource(Set2);
      var weakMapCtorString = toSource(WeakMap);
      var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
      var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
      function Hash(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function hashClear() {
        this.__data__ = nativeCreate ? nativeCreate(null) : {};
        this.size = 0;
      }
      function hashDelete(key) {
        var result = this.has(key) && delete this.__data__[key];
        this.size -= result ? 1 : 0;
        return result;
      }
      function hashGet(key) {
        var data = this.__data__;
        if (nativeCreate) {
          var result = data[key];
          return result === HASH_UNDEFINED ? void 0 : result;
        }
        return hasOwnProperty.call(data, key) ? data[key] : void 0;
      }
      function hashHas(key) {
        var data = this.__data__;
        return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
      }
      function hashSet(key, value) {
        var data = this.__data__;
        this.size += this.has(key) ? 0 : 1;
        data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
        return this;
      }
      Hash.prototype.clear = hashClear;
      Hash.prototype["delete"] = hashDelete;
      Hash.prototype.get = hashGet;
      Hash.prototype.has = hashHas;
      Hash.prototype.set = hashSet;
      function ListCache(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function listCacheClear() {
        this.__data__ = [];
        this.size = 0;
      }
      function listCacheDelete(key) {
        var data = this.__data__, index = assocIndexOf(data, key);
        if (index < 0) {
          return false;
        }
        var lastIndex = data.length - 1;
        if (index == lastIndex) {
          data.pop();
        } else {
          splice.call(data, index, 1);
        }
        --this.size;
        return true;
      }
      function listCacheGet(key) {
        var data = this.__data__, index = assocIndexOf(data, key);
        return index < 0 ? void 0 : data[index][1];
      }
      function listCacheHas(key) {
        return assocIndexOf(this.__data__, key) > -1;
      }
      function listCacheSet(key, value) {
        var data = this.__data__, index = assocIndexOf(data, key);
        if (index < 0) {
          ++this.size;
          data.push([key, value]);
        } else {
          data[index][1] = value;
        }
        return this;
      }
      ListCache.prototype.clear = listCacheClear;
      ListCache.prototype["delete"] = listCacheDelete;
      ListCache.prototype.get = listCacheGet;
      ListCache.prototype.has = listCacheHas;
      ListCache.prototype.set = listCacheSet;
      function MapCache(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function mapCacheClear() {
        this.size = 0;
        this.__data__ = {
          "hash": new Hash(),
          "map": new (Map || ListCache)(),
          "string": new Hash()
        };
      }
      function mapCacheDelete(key) {
        var result = getMapData(this, key)["delete"](key);
        this.size -= result ? 1 : 0;
        return result;
      }
      function mapCacheGet(key) {
        return getMapData(this, key).get(key);
      }
      function mapCacheHas(key) {
        return getMapData(this, key).has(key);
      }
      function mapCacheSet(key, value) {
        var data = getMapData(this, key), size = data.size;
        data.set(key, value);
        this.size += data.size == size ? 0 : 1;
        return this;
      }
      MapCache.prototype.clear = mapCacheClear;
      MapCache.prototype["delete"] = mapCacheDelete;
      MapCache.prototype.get = mapCacheGet;
      MapCache.prototype.has = mapCacheHas;
      MapCache.prototype.set = mapCacheSet;
      function SetCache(values) {
        var index = -1, length2 = values == null ? 0 : values.length;
        this.__data__ = new MapCache();
        while (++index < length2) {
          this.add(values[index]);
        }
      }
      function setCacheAdd(value) {
        this.__data__.set(value, HASH_UNDEFINED);
        return this;
      }
      function setCacheHas(value) {
        return this.__data__.has(value);
      }
      SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
      SetCache.prototype.has = setCacheHas;
      function Stack(entries) {
        var data = this.__data__ = new ListCache(entries);
        this.size = data.size;
      }
      function stackClear() {
        this.__data__ = new ListCache();
        this.size = 0;
      }
      function stackDelete(key) {
        var data = this.__data__, result = data["delete"](key);
        this.size = data.size;
        return result;
      }
      function stackGet(key) {
        return this.__data__.get(key);
      }
      function stackHas(key) {
        return this.__data__.has(key);
      }
      function stackSet(key, value) {
        var data = this.__data__;
        if (data instanceof ListCache) {
          var pairs = data.__data__;
          if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
            pairs.push([key, value]);
            this.size = ++data.size;
            return this;
          }
          data = this.__data__ = new MapCache(pairs);
        }
        data.set(key, value);
        this.size = data.size;
        return this;
      }
      Stack.prototype.clear = stackClear;
      Stack.prototype["delete"] = stackDelete;
      Stack.prototype.get = stackGet;
      Stack.prototype.has = stackHas;
      Stack.prototype.set = stackSet;
      function arrayLikeKeys(value, inherited) {
        var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length2 = result.length;
        for (var key in value) {
          if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable \`arguments.length\` in strict mode.
          (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
          isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
          isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
          isIndex(key, length2)))) {
            result.push(key);
          }
        }
        return result;
      }
      function assocIndexOf(array, key) {
        var length2 = array.length;
        while (length2--) {
          if (eq(array[length2][0], key)) {
            return length2;
          }
        }
        return -1;
      }
      function baseGetAllKeys(object, keysFunc, symbolsFunc) {
        var result = keysFunc(object);
        return isArray2(object) ? result : arrayPush(result, symbolsFunc(object));
      }
      function baseGetTag(value) {
        if (value == null) {
          return value === void 0 ? undefinedTag : nullTag;
        }
        return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
      }
      function baseIsArguments(value) {
        return isObjectLike(value) && baseGetTag(value) == argsTag;
      }
      function baseIsEqual(value, other, bitmask, customizer, stack) {
        if (value === other) {
          return true;
        }
        if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
          return value !== value && other !== other;
        }
        return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
      }
      function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
        var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
        objTag = objTag == argsTag ? objectTag : objTag;
        othTag = othTag == argsTag ? objectTag : othTag;
        var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
        if (isSameTag && isBuffer(object)) {
          if (!isBuffer(other)) {
            return false;
          }
          objIsArr = true;
          objIsObj = false;
        }
        if (isSameTag && !objIsObj) {
          stack || (stack = new Stack());
          return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
        }
        if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
          var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
          if (objIsWrapped || othIsWrapped) {
            var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
            stack || (stack = new Stack());
            return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
          }
        }
        if (!isSameTag) {
          return false;
        }
        stack || (stack = new Stack());
        return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
      }
      function baseIsNative(value) {
        if (!isObject2(value) || isMasked(value)) {
          return false;
        }
        var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
        return pattern.test(toSource(value));
      }
      function baseIsTypedArray(value) {
        return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
      }
      function baseKeys(object) {
        if (!isPrototype(object)) {
          return nativeKeys(object);
        }
        var result = [];
        for (var key in Object(object)) {
          if (hasOwnProperty.call(object, key) && key != "constructor") {
            result.push(key);
          }
        }
        return result;
      }
      function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
        if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
          return false;
        }
        var stacked = stack.get(array);
        if (stacked && stack.get(other)) {
          return stacked == other;
        }
        var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : void 0;
        stack.set(array, other);
        stack.set(other, array);
        while (++index < arrLength) {
          var arrValue = array[index], othValue = other[index];
          if (customizer) {
            var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
          }
          if (compared !== void 0) {
            if (compared) {
              continue;
            }
            result = false;
            break;
          }
          if (seen) {
            if (!arraySome(other, function(othValue2, othIndex) {
              if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
                return seen.push(othIndex);
              }
            })) {
              result = false;
              break;
            }
          } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
            result = false;
            break;
          }
        }
        stack["delete"](array);
        stack["delete"](other);
        return result;
      }
      function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
        switch (tag) {
          case dataViewTag:
            if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
              return false;
            }
            object = object.buffer;
            other = other.buffer;
          case arrayBufferTag:
            if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
              return false;
            }
            return true;
          case boolTag:
          case dateTag:
          case numberTag:
            return eq(+object, +other);
          case errorTag:
            return object.name == other.name && object.message == other.message;
          case regexpTag:
          case stringTag:
            return object == other + "";
          case mapTag:
            var convert = mapToArray;
          case setTag:
            var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
            convert || (convert = setToArray);
            if (object.size != other.size && !isPartial) {
              return false;
            }
            var stacked = stack.get(object);
            if (stacked) {
              return stacked == other;
            }
            bitmask |= COMPARE_UNORDERED_FLAG;
            stack.set(object, other);
            var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
            stack["delete"](object);
            return result;
          case symbolTag:
            if (symbolValueOf) {
              return symbolValueOf.call(object) == symbolValueOf.call(other);
            }
        }
        return false;
      }
      function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
        if (objLength != othLength && !isPartial) {
          return false;
        }
        var index = objLength;
        while (index--) {
          var key = objProps[index];
          if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
            return false;
          }
        }
        var stacked = stack.get(object);
        if (stacked && stack.get(other)) {
          return stacked == other;
        }
        var result = true;
        stack.set(object, other);
        stack.set(other, object);
        var skipCtor = isPartial;
        while (++index < objLength) {
          key = objProps[index];
          var objValue = object[key], othValue = other[key];
          if (customizer) {
            var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
          }
          if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
            result = false;
            break;
          }
          skipCtor || (skipCtor = key == "constructor");
        }
        if (result && !skipCtor) {
          var objCtor = object.constructor, othCtor = other.constructor;
          if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
            result = false;
          }
        }
        stack["delete"](object);
        stack["delete"](other);
        return result;
      }
      function getAllKeys(object) {
        return baseGetAllKeys(object, keys, getSymbols);
      }
      function getMapData(map, key) {
        var data = map.__data__;
        return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
      }
      function getNative(object, key) {
        var value = getValue(object, key);
        return baseIsNative(value) ? value : void 0;
      }
      function getRawTag(value) {
        var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
        try {
          value[symToStringTag] = void 0;
          var unmasked = true;
        } catch (e) {
        }
        var result = nativeObjectToString.call(value);
        if (unmasked) {
          if (isOwn) {
            value[symToStringTag] = tag;
          } else {
            delete value[symToStringTag];
          }
        }
        return result;
      }
      var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
        if (object == null) {
          return [];
        }
        object = Object(object);
        return arrayFilter(nativeGetSymbols(object), function(symbol) {
          return propertyIsEnumerable.call(object, symbol);
        });
      };
      var getTag = baseGetTag;
      if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
        getTag = function(value) {
          var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
          if (ctorString) {
            switch (ctorString) {
              case dataViewCtorString:
                return dataViewTag;
              case mapCtorString:
                return mapTag;
              case promiseCtorString:
                return promiseTag;
              case setCtorString:
                return setTag;
              case weakMapCtorString:
                return weakMapTag;
            }
          }
          return result;
        };
      }
      function isIndex(value, length2) {
        length2 = length2 == null ? MAX_SAFE_INTEGER : length2;
        return !!length2 && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2);
      }
      function isKeyable(value) {
        var type = typeof value;
        return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
      }
      function isMasked(func) {
        return !!maskSrcKey && maskSrcKey in func;
      }
      function isPrototype(value) {
        var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
        return value === proto;
      }
      function objectToString(value) {
        return nativeObjectToString.call(value);
      }
      function toSource(func) {
        if (func != null) {
          try {
            return funcToString.call(func);
          } catch (e) {
          }
          try {
            return func + "";
          } catch (e) {
          }
        }
        return "";
      }
      function eq(value, other) {
        return value === other || value !== value && other !== other;
      }
      var isArguments = baseIsArguments(/* @__PURE__ */ function() {
        return arguments;
      }()) ? baseIsArguments : function(value) {
        return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
      };
      var isArray2 = Array.isArray;
      function isArrayLike(value) {
        return value != null && isLength(value.length) && !isFunction(value);
      }
      var isBuffer = nativeIsBuffer || stubFalse;
      function isEqual(value, other) {
        return baseIsEqual(value, other);
      }
      function isFunction(value) {
        if (!isObject2(value)) {
          return false;
        }
        var tag = baseGetTag(value);
        return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
      }
      function isLength(value) {
        return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
      }
      function isObject2(value) {
        var type = typeof value;
        return value != null && (type == "object" || type == "function");
      }
      function isObjectLike(value) {
        return value != null && typeof value == "object";
      }
      var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
      function keys(object) {
        return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
      }
      function stubArray() {
        return [];
      }
      function stubFalse() {
        return false;
      }
      module2.exports = isEqual;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js
  var require_DeltaInsertOp = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importDefault = exports2 && exports2.__importDefault || function(mod2) {
        return mod2 && mod2.__esModule ? mod2 : { "default": mod2 };
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var InsertData_1 = require_InsertData();
      var lodash_isequal_1 = __importDefault(require_lodash());
      var DeltaInsertOp = function() {
        function DeltaInsertOp2(insertVal, attrs) {
          if (typeof insertVal === "string") {
            insertVal = new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertVal + "");
          }
          this.insert = insertVal;
          this.attributes = attrs || {};
        }
        DeltaInsertOp2.createNewLineOp = function() {
          return new DeltaInsertOp2(value_types_1.NewLine);
        };
        DeltaInsertOp2.prototype.isContainerBlock = function() {
          return this.isBlockquote() || this.isList() || this.isTable() || this.isCodeBlock() || this.isHeader() || this.isBlockAttribute() || this.isCustomTextBlock();
        };
        DeltaInsertOp2.prototype.isBlockAttribute = function() {
          var attrs = this.attributes;
          return !!(attrs.align || attrs.direction || attrs.indent);
        };
        DeltaInsertOp2.prototype.isBlockquote = function() {
          return !!this.attributes.blockquote;
        };
        DeltaInsertOp2.prototype.isHeader = function() {
          return !!this.attributes.header;
        };
        DeltaInsertOp2.prototype.isTable = function() {
          return !!this.attributes.table;
        };
        DeltaInsertOp2.prototype.isSameHeaderAs = function(op) {
          return op.attributes.header === this.attributes.header && this.isHeader();
        };
        DeltaInsertOp2.prototype.hasSameAdiAs = function(op) {
          return this.attributes.align === op.attributes.align && this.attributes.direction === op.attributes.direction && this.attributes.indent === op.attributes.indent;
        };
        DeltaInsertOp2.prototype.hasSameIndentationAs = function(op) {
          return this.attributes.indent === op.attributes.indent;
        };
        DeltaInsertOp2.prototype.hasSameAttr = function(op) {
          return lodash_isequal_1.default(this.attributes, op.attributes);
        };
        DeltaInsertOp2.prototype.hasHigherIndentThan = function(op) {
          return (Number(this.attributes.indent) || 0) > (Number(op.attributes.indent) || 0);
        };
        DeltaInsertOp2.prototype.isInline = function() {
          return !(this.isContainerBlock() || this.isVideo() || this.isCustomEmbedBlock());
        };
        DeltaInsertOp2.prototype.isCodeBlock = function() {
          return !!this.attributes["code-block"];
        };
        DeltaInsertOp2.prototype.hasSameLangAs = function(op) {
          return this.attributes["code-block"] === op.attributes["code-block"];
        };
        DeltaInsertOp2.prototype.isJustNewline = function() {
          return this.insert.value === value_types_1.NewLine;
        };
        DeltaInsertOp2.prototype.isList = function() {
          return this.isOrderedList() || this.isBulletList() || this.isCheckedList() || this.isUncheckedList();
        };
        DeltaInsertOp2.prototype.isOrderedList = function() {
          return this.attributes.list === value_types_1.ListType.Ordered;
        };
        DeltaInsertOp2.prototype.isBulletList = function() {
          return this.attributes.list === value_types_1.ListType.Bullet;
        };
        DeltaInsertOp2.prototype.isCheckedList = function() {
          return this.attributes.list === value_types_1.ListType.Checked;
        };
        DeltaInsertOp2.prototype.isUncheckedList = function() {
          return this.attributes.list === value_types_1.ListType.Unchecked;
        };
        DeltaInsertOp2.prototype.isACheckList = function() {
          return this.attributes.list == value_types_1.ListType.Unchecked || this.attributes.list === value_types_1.ListType.Checked;
        };
        DeltaInsertOp2.prototype.isSameListAs = function(op) {
          return !!op.attributes.list && (this.attributes.list === op.attributes.list || op.isACheckList() && this.isACheckList());
        };
        DeltaInsertOp2.prototype.isSameTableRowAs = function(op) {
          return !!op.isTable() && this.isTable() && this.attributes.table === op.attributes.table;
        };
        DeltaInsertOp2.prototype.isText = function() {
          return this.insert.type === value_types_1.DataType.Text;
        };
        DeltaInsertOp2.prototype.isImage = function() {
          return this.insert.type === value_types_1.DataType.Image;
        };
        DeltaInsertOp2.prototype.isFormula = function() {
          return this.insert.type === value_types_1.DataType.Formula;
        };
        DeltaInsertOp2.prototype.isVideo = function() {
          return this.insert.type === value_types_1.DataType.Video;
        };
        DeltaInsertOp2.prototype.isLink = function() {
          return this.isText() && !!this.attributes.link;
        };
        DeltaInsertOp2.prototype.isCustomEmbed = function() {
          return this.insert instanceof InsertData_1.InsertDataCustom;
        };
        DeltaInsertOp2.prototype.isCustomEmbedBlock = function() {
          return this.isCustomEmbed() && !!this.attributes.renderAsBlock;
        };
        DeltaInsertOp2.prototype.isCustomTextBlock = function() {
          return this.isText() && !!this.attributes.renderAsBlock;
        };
        DeltaInsertOp2.prototype.isMentions = function() {
          return this.isText() && !!this.attributes.mentions;
        };
        return DeltaInsertOp2;
      }();
      exports2.DeltaInsertOp = DeltaInsertOp;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js
  var require_MentionSanitizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var MentionSanitizer = function() {
        function MentionSanitizer2() {
        }
        MentionSanitizer2.sanitize = function(dirtyObj, sanitizeOptions) {
          var cleanObj = {};
          if (!dirtyObj || typeof dirtyObj !== "object") {
            return cleanObj;
          }
          if (dirtyObj.class && MentionSanitizer2.IsValidClass(dirtyObj.class)) {
            cleanObj.class = dirtyObj.class;
          }
          if (dirtyObj.id && MentionSanitizer2.IsValidId(dirtyObj.id)) {
            cleanObj.id = dirtyObj.id;
          }
          if (MentionSanitizer2.IsValidTarget(dirtyObj.target + "")) {
            cleanObj.target = dirtyObj.target;
          }
          if (dirtyObj.avatar) {
            cleanObj.avatar = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj.avatar + "", sanitizeOptions);
          }
          if (dirtyObj["end-point"]) {
            cleanObj["end-point"] = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj["end-point"] + "", sanitizeOptions);
          }
          if (dirtyObj.slug) {
            cleanObj.slug = dirtyObj.slug + "";
          }
          return cleanObj;
        };
        MentionSanitizer2.IsValidClass = function(classAttr) {
          return !!classAttr.match(/^[a-zA-Z0-9_\\-]{1,500}\$/i);
        };
        MentionSanitizer2.IsValidId = function(idAttr) {
          return !!idAttr.match(/^[a-zA-Z0-9_\\-\\:\\.]{1,500}\$/i);
        };
        MentionSanitizer2.IsValidTarget = function(target) {
          return ["_self", "_blank", "_parent", "_top"].indexOf(target) > -1;
        };
        return MentionSanitizer2;
      }();
      exports2.MentionSanitizer = MentionSanitizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js
  var require_url = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function sanitize(str) {
        var val = str;
        val = val.replace(/^\\s*/gm, "");
        var whiteList = /^((https?|s?ftp|file|blob|mailto|tel):|#|\\/|data:image\\/)/;
        if (whiteList.test(val)) {
          return val;
        }
        return "unsafe:" + val;
      }
      exports2.sanitize = sanitize;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js
  var require_funcs_html = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var EncodeTarget;
      (function(EncodeTarget2) {
        EncodeTarget2[EncodeTarget2["Html"] = 0] = "Html";
        EncodeTarget2[EncodeTarget2["Url"] = 1] = "Url";
      })(EncodeTarget || (EncodeTarget = {}));
      function makeStartTag(tag, attrs) {
        if (attrs === void 0) {
          attrs = void 0;
        }
        if (!tag) {
          return "";
        }
        var attrsStr = "";
        if (attrs) {
          var arrAttrs = [].concat(attrs);
          attrsStr = arrAttrs.map(function(attr) {
            return attr.key + (attr.value ? '="' + attr.value + '"' : "");
          }).join(" ");
        }
        var closing = ">";
        if (tag === "img" || tag === "br") {
          closing = "/>";
        }
        return attrsStr ? "<" + tag + " " + attrsStr + closing : "<" + tag + closing;
      }
      exports2.makeStartTag = makeStartTag;
      function makeEndTag(tag) {
        if (tag === void 0) {
          tag = "";
        }
        return tag && "</" + tag + ">" || "";
      }
      exports2.makeEndTag = makeEndTag;
      function decodeHtml(str) {
        return encodeMappings(EncodeTarget.Html).reduce(decodeMapping, str);
      }
      exports2.decodeHtml = decodeHtml;
      function encodeHtml(str, preventDoubleEncoding) {
        if (preventDoubleEncoding === void 0) {
          preventDoubleEncoding = true;
        }
        if (preventDoubleEncoding) {
          str = decodeHtml(str);
        }
        return encodeMappings(EncodeTarget.Html).reduce(encodeMapping, str);
      }
      exports2.encodeHtml = encodeHtml;
      function encodeLink(str) {
        var linkMaps = encodeMappings(EncodeTarget.Url);
        var decoded = linkMaps.reduce(decodeMapping, str);
        return linkMaps.reduce(encodeMapping, decoded);
      }
      exports2.encodeLink = encodeLink;
      function encodeMappings(mtype) {
        var maps = [
          ["&", "&amp;"],
          ["<", "&lt;"],
          [">", "&gt;"],
          ['"', "&quot;"],
          ["'", "&#x27;"],
          ["\\\\/", "&#x2F;"],
          ["\\\\(", "&#40;"],
          ["\\\\)", "&#41;"]
        ];
        if (mtype === EncodeTarget.Html) {
          return maps.filter(function(_a3) {
            var v = _a3[0], _ = _a3[1];
            return v.indexOf("(") === -1 && v.indexOf(")") === -1;
          });
        } else {
          return maps.filter(function(_a3) {
            var v = _a3[0], _ = _a3[1];
            return v.indexOf("/") === -1;
          });
        }
      }
      function encodeMapping(str, mapping) {
        return str.replace(new RegExp(mapping[0], "g"), mapping[1]);
      }
      function decodeMapping(str, mapping) {
        return str.replace(new RegExp(mapping[1], "g"), mapping[0].replace("\\\\", ""));
      }
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js
  var require_array = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function preferSecond(arr2) {
        if (arr2.length === 0) {
          return null;
        }
        return arr2.length >= 2 ? arr2[1] : arr2[0];
      }
      exports2.preferSecond = preferSecond;
      function flatten(arr2) {
        return arr2.reduce(function(pv, v) {
          return pv.concat(Array.isArray(v) ? flatten(v) : v);
        }, []);
      }
      exports2.flatten = flatten;
      function find(arr2, predicate) {
        if (Array.prototype.find) {
          return Array.prototype.find.call(arr2, predicate);
        }
        for (var i = 0; i < arr2.length; i++) {
          if (predicate(arr2[i]))
            return arr2[i];
        }
        return void 0;
      }
      exports2.find = find;
      function groupConsecutiveElementsWhile(arr2, predicate) {
        var groups = [];
        var currElm, currGroup;
        for (var i = 0; i < arr2.length; i++) {
          currElm = arr2[i];
          if (i > 0 && predicate(currElm, arr2[i - 1])) {
            currGroup = groups[groups.length - 1];
            currGroup.push(currElm);
          } else {
            groups.push([currElm]);
          }
        }
        return groups.map(function(g) {
          return g.length === 1 ? g[0] : g;
        });
      }
      exports2.groupConsecutiveElementsWhile = groupConsecutiveElementsWhile;
      function sliceFromReverseWhile(arr2, startIndex, predicate) {
        var result = {
          elements: [],
          sliceStartsAt: -1
        };
        for (var i = startIndex; i >= 0; i--) {
          if (!predicate(arr2[i])) {
            break;
          }
          result.sliceStartsAt = i;
          result.elements.unshift(arr2[i]);
        }
        return result;
      }
      exports2.sliceFromReverseWhile = sliceFromReverseWhile;
      function intersperse(arr2, item) {
        return arr2.reduce(function(pv, v, index) {
          pv.push(v);
          if (index < arr2.length - 1) {
            pv.push(item);
          }
          return pv;
        }, []);
      }
      exports2.intersperse = intersperse;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js
  var require_OpAttributeSanitizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var MentionSanitizer_1 = require_MentionSanitizer();
      var url = __importStar(require_url());
      var funcs_html_1 = require_funcs_html();
      var array_1 = require_array();
      var OpAttributeSanitizer = function() {
        function OpAttributeSanitizer2() {
        }
        OpAttributeSanitizer2.sanitize = function(dirtyAttrs, sanitizeOptions) {
          var cleanAttrs = {};
          if (!dirtyAttrs || typeof dirtyAttrs !== "object") {
            return cleanAttrs;
          }
          var booleanAttrs = [
            "bold",
            "italic",
            "underline",
            "strike",
            "code",
            "blockquote",
            "code-block",
            "renderAsBlock"
          ];
          var colorAttrs = ["background", "color"];
          var font = dirtyAttrs.font, size = dirtyAttrs.size, link = dirtyAttrs.link, script = dirtyAttrs.script, list = dirtyAttrs.list, header = dirtyAttrs.header, align = dirtyAttrs.align, direction = dirtyAttrs.direction, indent = dirtyAttrs.indent, mentions = dirtyAttrs.mentions, mention = dirtyAttrs.mention, width = dirtyAttrs.width, target = dirtyAttrs.target, rel = dirtyAttrs.rel;
          var codeBlock = dirtyAttrs["code-block"];
          var sanitizedAttrs = booleanAttrs.concat(colorAttrs, [
            "font",
            "size",
            "link",
            "script",
            "list",
            "header",
            "align",
            "direction",
            "indent",
            "mentions",
            "mention",
            "width",
            "target",
            "rel",
            "code-block"
          ]);
          booleanAttrs.forEach(function(prop) {
            var v = dirtyAttrs[prop];
            if (v) {
              cleanAttrs[prop] = !!v;
            }
          });
          colorAttrs.forEach(function(prop) {
            var val = dirtyAttrs[prop];
            if (val && (OpAttributeSanitizer2.IsValidHexColor(val + "") || OpAttributeSanitizer2.IsValidColorLiteral(val + "") || OpAttributeSanitizer2.IsValidRGBColor(val + ""))) {
              cleanAttrs[prop] = val;
            }
          });
          if (font && OpAttributeSanitizer2.IsValidFontName(font + "")) {
            cleanAttrs.font = font;
          }
          if (size && OpAttributeSanitizer2.IsValidSize(size + "")) {
            cleanAttrs.size = size;
          }
          if (width && OpAttributeSanitizer2.IsValidWidth(width + "")) {
            cleanAttrs.width = width;
          }
          if (link) {
            cleanAttrs.link = OpAttributeSanitizer2.sanitizeLinkUsingOptions(link + "", sanitizeOptions);
          }
          if (target && OpAttributeSanitizer2.isValidTarget(target)) {
            cleanAttrs.target = target;
          }
          if (rel && OpAttributeSanitizer2.IsValidRel(rel)) {
            cleanAttrs.rel = rel;
          }
          if (codeBlock) {
            if (OpAttributeSanitizer2.IsValidLang(codeBlock)) {
              cleanAttrs["code-block"] = codeBlock;
            } else {
              cleanAttrs["code-block"] = !!codeBlock;
            }
          }
          if (script === value_types_1.ScriptType.Sub || value_types_1.ScriptType.Super === script) {
            cleanAttrs.script = script;
          }
          if (list === value_types_1.ListType.Bullet || list === value_types_1.ListType.Ordered || list === value_types_1.ListType.Checked || list === value_types_1.ListType.Unchecked) {
            cleanAttrs.list = list;
          }
          if (Number(header)) {
            cleanAttrs.header = Math.min(Number(header), 6);
          }
          if (array_1.find([value_types_1.AlignType.Center, value_types_1.AlignType.Right, value_types_1.AlignType.Justify, value_types_1.AlignType.Left], function(a) {
            return a === align;
          })) {
            cleanAttrs.align = align;
          }
          if (direction === value_types_1.DirectionType.Rtl) {
            cleanAttrs.direction = direction;
          }
          if (indent && Number(indent)) {
            cleanAttrs.indent = Math.min(Number(indent), 30);
          }
          if (mentions && mention) {
            var sanitizedMention = MentionSanitizer_1.MentionSanitizer.sanitize(mention, sanitizeOptions);
            if (Object.keys(sanitizedMention).length > 0) {
              cleanAttrs.mentions = !!mentions;
              cleanAttrs.mention = mention;
            }
          }
          return Object.keys(dirtyAttrs).reduce(function(cleaned, k) {
            if (sanitizedAttrs.indexOf(k) === -1) {
              cleaned[k] = dirtyAttrs[k];
            }
            return cleaned;
          }, cleanAttrs);
        };
        OpAttributeSanitizer2.sanitizeLinkUsingOptions = function(link, options) {
          var sanitizerFn = function() {
            return void 0;
          };
          if (options && typeof options.urlSanitizer === "function") {
            sanitizerFn = options.urlSanitizer;
          }
          var result = sanitizerFn(link);
          return typeof result === "string" ? result : funcs_html_1.encodeLink(url.sanitize(link));
        };
        OpAttributeSanitizer2.IsValidHexColor = function(colorStr) {
          return !!colorStr.match(/^#([0-9A-F]{6}|[0-9A-F]{3})\$/i);
        };
        OpAttributeSanitizer2.IsValidColorLiteral = function(colorStr) {
          return !!colorStr.match(/^[a-z]{1,50}\$/i);
        };
        OpAttributeSanitizer2.IsValidRGBColor = function(colorStr) {
          var re = /^rgb\\(((0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d),\\s*){2}(0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d)\\)\$/i;
          return !!colorStr.match(re);
        };
        OpAttributeSanitizer2.IsValidFontName = function(fontName) {
          return !!fontName.match(/^[a-z\\s0-9\\- ]{1,30}\$/i);
        };
        OpAttributeSanitizer2.IsValidSize = function(size) {
          return !!size.match(/^[a-z0-9\\-]{1,20}\$/i);
        };
        OpAttributeSanitizer2.IsValidWidth = function(width) {
          return !!width.match(/^[0-9]*(px|em|%)?\$/);
        };
        OpAttributeSanitizer2.isValidTarget = function(target) {
          return !!target.match(/^[_a-zA-Z0-9\\-]{1,50}\$/);
        };
        OpAttributeSanitizer2.IsValidRel = function(relStr) {
          return !!relStr.match(/^[a-zA-Z\\s\\-]{1,250}\$/i);
        };
        OpAttributeSanitizer2.IsValidLang = function(lang) {
          if (typeof lang === "boolean") {
            return true;
          }
          return !!lang.match(/^[a-zA-Z\\s\\-\\\\\\/\\+]{1,50}\$/i);
        };
        return OpAttributeSanitizer2;
      }();
      exports2.OpAttributeSanitizer = OpAttributeSanitizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js
  var require_string = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function tokenizeWithNewLines(str) {
        var NewLine = "\\n";
        if (str === NewLine) {
          return [str];
        }
        var lines = str.split(NewLine);
        if (lines.length === 1) {
          return lines;
        }
        var lastIndex = lines.length - 1;
        return lines.reduce(function(pv, line, ind) {
          if (ind !== lastIndex) {
            if (line !== "") {
              pv = pv.concat(line, NewLine);
            } else {
              pv.push(NewLine);
            }
          } else if (line !== "") {
            pv.push(line);
          }
          return pv;
        }, []);
      }
      exports2.tokenizeWithNewLines = tokenizeWithNewLines;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js
  var require_object2 = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function assign(target) {
        var sources = [];
        for (var _i = 1; _i < arguments.length; _i++) {
          sources[_i - 1] = arguments[_i];
        }
        if (target == null) {
          throw new TypeError("Cannot convert undefined or null to object");
        }
        var to = Object(target);
        for (var index = 0; index < sources.length; index++) {
          var nextSource = sources[index];
          if (nextSource != null) {
            for (var nextKey in nextSource) {
              if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
                to[nextKey] = nextSource[nextKey];
              }
            }
          }
        }
        return to;
      }
      exports2.assign = assign;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js
  var require_InsertOpDenormalizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var str = __importStar(require_string());
      var obj = __importStar(require_object2());
      var InsertOpDenormalizer = function() {
        function InsertOpDenormalizer2() {
        }
        InsertOpDenormalizer2.denormalize = function(op) {
          if (!op || typeof op !== "object") {
            return [];
          }
          if (typeof op.insert === "object" || op.insert === value_types_1.NewLine) {
            return [op];
          }
          var newlinedArray = str.tokenizeWithNewLines(op.insert + "");
          if (newlinedArray.length === 1) {
            return [op];
          }
          var nlObj = obj.assign({}, op, { insert: value_types_1.NewLine });
          return newlinedArray.map(function(line) {
            if (line === value_types_1.NewLine) {
              return nlObj;
            }
            return obj.assign({}, op, {
              insert: line
            });
          });
        };
        return InsertOpDenormalizer2;
      }();
      exports2.InsertOpDenormalizer = InsertOpDenormalizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js
  var require_InsertOpsConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      var value_types_1 = require_value_types();
      var InsertData_1 = require_InsertData();
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var InsertOpDenormalizer_1 = require_InsertOpDenormalizer();
      var InsertOpsConverter = function() {
        function InsertOpsConverter2() {
        }
        InsertOpsConverter2.convert = function(deltaOps, options) {
          if (!Array.isArray(deltaOps)) {
            return [];
          }
          var denormalizedOps = [].concat.apply([], deltaOps.map(InsertOpDenormalizer_1.InsertOpDenormalizer.denormalize));
          var results = [];
          var insertVal, attributes;
          for (var _i = 0, denormalizedOps_1 = denormalizedOps; _i < denormalizedOps_1.length; _i++) {
            var op = denormalizedOps_1[_i];
            if (!op.insert) {
              continue;
            }
            insertVal = InsertOpsConverter2.convertInsertVal(op.insert, options);
            if (!insertVal) {
              continue;
            }
            attributes = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitize(op.attributes, options);
            results.push(new DeltaInsertOp_1.DeltaInsertOp(insertVal, attributes));
          }
          return results;
        };
        InsertOpsConverter2.convertInsertVal = function(insertPropVal, sanitizeOptions) {
          if (typeof insertPropVal === "string") {
            return new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertPropVal);
          }
          if (!insertPropVal || typeof insertPropVal !== "object") {
            return null;
          }
          var keys = Object.keys(insertPropVal);
          if (!keys.length) {
            return null;
          }
          return value_types_1.DataType.Image in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Image, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Image] + "", sanitizeOptions)) : value_types_1.DataType.Video in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Video, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Video] + "", sanitizeOptions)) : value_types_1.DataType.Formula in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Formula, insertPropVal[value_types_1.DataType.Formula]) : new InsertData_1.InsertDataCustom(keys[0], insertPropVal[keys[0]]);
        };
        return InsertOpsConverter2;
      }();
      exports2.InsertOpsConverter = InsertOpsConverter;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js
  var require_OpToHtmlConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var funcs_html_1 = require_funcs_html();
      var value_types_1 = require_value_types();
      var obj = __importStar(require_object2());
      var arr2 = __importStar(require_array());
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var DEFAULT_INLINE_FONTS = {
        serif: "font-family: Georgia, Times New Roman, serif",
        monospace: "font-family: Monaco, Courier New, monospace"
      };
      exports2.DEFAULT_INLINE_STYLES = {
        font: function(value) {
          return DEFAULT_INLINE_FONTS[value] || "font-family:" + value;
        },
        size: {
          small: "font-size: 0.75em",
          large: "font-size: 1.5em",
          huge: "font-size: 2.5em"
        },
        indent: function(value, op) {
          var indentSize = parseInt(value, 10) * 3;
          var side = op.attributes["direction"] === "rtl" ? "right" : "left";
          return "padding-" + side + ":" + indentSize + "em";
        },
        direction: function(value, op) {
          if (value === "rtl") {
            return "direction:rtl" + (op.attributes["align"] ? "" : "; text-align:inherit");
          } else {
            return void 0;
          }
        }
      };
      var OpToHtmlConverter = function() {
        function OpToHtmlConverter2(op, options) {
          this.op = op;
          this.options = obj.assign({}, {
            classPrefix: "ql",
            inlineStyles: void 0,
            encodeHtml: true,
            listItemTag: "li",
            paragraphTag: "p"
          }, options);
        }
        OpToHtmlConverter2.prototype.prefixClass = function(className) {
          if (!this.options.classPrefix) {
            return className + "";
          }
          return this.options.classPrefix + "-" + className;
        };
        OpToHtmlConverter2.prototype.getHtml = function() {
          var parts = this.getHtmlParts();
          return parts.openingTag + parts.content + parts.closingTag;
        };
        OpToHtmlConverter2.prototype.getHtmlParts = function() {
          var _this = this;
          if (this.op.isJustNewline() && !this.op.isContainerBlock()) {
            return { openingTag: "", closingTag: "", content: value_types_1.NewLine };
          }
          var tags = this.getTags(), attrs = this.getTagAttributes();
          if (!tags.length && attrs.length) {
            tags.push(this.options.textTag || "span");
          }
          var beginTags = [], endTags = [];
          var imgTag = "img";
          var isImageLink = function(tag2) {
            return tag2 === imgTag && !!_this.op.attributes.link;
          };
          for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
            var tag = tags_1[_i];
            if (isImageLink(tag)) {
              beginTags.push(funcs_html_1.makeStartTag("a", this.getLinkAttrs()));
            }
            beginTags.push(funcs_html_1.makeStartTag(tag, attrs));
            endTags.push(tag === "img" ? "" : funcs_html_1.makeEndTag(tag));
            if (isImageLink(tag)) {
              endTags.push(funcs_html_1.makeEndTag("a"));
            }
            attrs = [];
          }
          endTags.reverse();
          return {
            openingTag: beginTags.join(""),
            content: this.getContent(),
            closingTag: endTags.join("")
          };
        };
        OpToHtmlConverter2.prototype.getContent = function() {
          if (this.op.isContainerBlock()) {
            return "";
          }
          if (this.op.isMentions()) {
            return this.op.insert.value;
          }
          var content = this.op.isFormula() || this.op.isText() ? this.op.insert.value : "";
          return this.options.encodeHtml && funcs_html_1.encodeHtml(content) || content;
        };
        OpToHtmlConverter2.prototype.getCssClasses = function() {
          var attrs = this.op.attributes;
          if (this.options.inlineStyles) {
            return [];
          }
          var propsArr = ["indent", "align", "direction", "font", "size"];
          if (this.options.allowBackgroundClasses) {
            propsArr.push("background");
          }
          return (this.getCustomCssClasses() || []).concat(propsArr.filter(function(prop) {
            return !!attrs[prop];
          }).filter(function(prop) {
            return prop === "background" ? OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidColorLiteral(attrs[prop]) : true;
          }).map(function(prop) {
            return prop + "-" + attrs[prop];
          }).concat(this.op.isFormula() ? "formula" : []).concat(this.op.isVideo() ? "video" : []).concat(this.op.isImage() ? "image" : []).map(this.prefixClass.bind(this)));
        };
        OpToHtmlConverter2.prototype.getCssStyles = function() {
          var _this = this;
          var attrs = this.op.attributes;
          var propsArr = [["color"]];
          if (!!this.options.inlineStyles || !this.options.allowBackgroundClasses) {
            propsArr.push(["background", "background-color"]);
          }
          if (this.options.inlineStyles) {
            propsArr = propsArr.concat([
              ["indent"],
              ["align", "text-align"],
              ["direction"],
              ["font", "font-family"],
              ["size"]
            ]);
          }
          return (this.getCustomCssStyles() || []).concat(propsArr.filter(function(item) {
            return !!attrs[item[0]];
          }).map(function(item) {
            var attribute = item[0];
            var attrValue = attrs[attribute];
            var attributeConverter = _this.options.inlineStyles && _this.options.inlineStyles[attribute] || exports2.DEFAULT_INLINE_STYLES[attribute];
            if (typeof attributeConverter === "object") {
              return attributeConverter[attrValue];
            } else if (typeof attributeConverter === "function") {
              var converterFn = attributeConverter;
              return converterFn(attrValue, _this.op);
            } else {
              return arr2.preferSecond(item) + ":" + attrValue;
            }
          })).filter(function(item) {
            return item !== void 0;
          });
        };
        OpToHtmlConverter2.prototype.getTagAttributes = function() {
          if (this.op.attributes.code && !this.op.isLink()) {
            return [];
          }
          var makeAttr = this.makeAttr.bind(this);
          var customTagAttributes = this.getCustomTagAttributes();
          var customAttr = customTagAttributes ? Object.keys(this.getCustomTagAttributes()).map(function(k) {
            return makeAttr(k, customTagAttributes[k]);
          }) : [];
          var classes = this.getCssClasses();
          var tagAttrs = classes.length ? customAttr.concat([makeAttr("class", classes.join(" "))]) : customAttr;
          if (this.op.isImage()) {
            this.op.attributes.width && (tagAttrs = tagAttrs.concat(makeAttr("width", this.op.attributes.width)));
            return tagAttrs.concat(makeAttr("src", this.op.insert.value));
          }
          if (this.op.isACheckList()) {
            return tagAttrs.concat(makeAttr("data-checked", this.op.isCheckedList() ? "true" : "false"));
          }
          if (this.op.isFormula()) {
            return tagAttrs;
          }
          if (this.op.isVideo()) {
            return tagAttrs.concat(makeAttr("frameborder", "0"), makeAttr("allowfullscreen", "true"), makeAttr("src", this.op.insert.value));
          }
          if (this.op.isMentions()) {
            var mention = this.op.attributes.mention;
            if (mention.class) {
              tagAttrs = tagAttrs.concat(makeAttr("class", mention.class));
            }
            if (mention["end-point"] && mention.slug) {
              tagAttrs = tagAttrs.concat(makeAttr("href", mention["end-point"] + "/" + mention.slug));
            } else {
              tagAttrs = tagAttrs.concat(makeAttr("href", "about:blank"));
            }
            if (mention.target) {
              tagAttrs = tagAttrs.concat(makeAttr("target", mention.target));
            }
            return tagAttrs;
          }
          var styles = this.getCssStyles();
          if (styles.length) {
            tagAttrs.push(makeAttr("style", styles.join(";")));
          }
          if (this.op.isCodeBlock() && typeof this.op.attributes["code-block"] === "string") {
            return tagAttrs.concat(makeAttr("data-language", this.op.attributes["code-block"]));
          }
          if (this.op.isContainerBlock()) {
            return tagAttrs;
          }
          if (this.op.isLink()) {
            tagAttrs = tagAttrs.concat(this.getLinkAttrs());
          }
          return tagAttrs;
        };
        OpToHtmlConverter2.prototype.makeAttr = function(k, v) {
          return { key: k, value: v };
        };
        OpToHtmlConverter2.prototype.getLinkAttrs = function() {
          var tagAttrs = [];
          var targetForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.isValidTarget(this.options.linkTarget || "") ? this.options.linkTarget : void 0;
          var relForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidRel(this.options.linkRel || "") ? this.options.linkRel : void 0;
          var target = this.op.attributes.target || targetForAll;
          var rel = this.op.attributes.rel || relForAll;
          return tagAttrs.concat(this.makeAttr("href", this.op.attributes.link)).concat(target ? this.makeAttr("target", target) : []).concat(rel ? this.makeAttr("rel", rel) : []);
        };
        OpToHtmlConverter2.prototype.getCustomTag = function(format) {
          if (this.options.customTag && typeof this.options.customTag === "function") {
            return this.options.customTag.apply(null, [format, this.op]);
          }
        };
        OpToHtmlConverter2.prototype.getCustomTagAttributes = function() {
          if (this.options.customTagAttributes && typeof this.options.customTagAttributes === "function") {
            return this.options.customTagAttributes.apply(null, [this.op]);
          }
        };
        OpToHtmlConverter2.prototype.getCustomCssClasses = function() {
          if (this.options.customCssClasses && typeof this.options.customCssClasses === "function") {
            var res = this.options.customCssClasses.apply(null, [this.op]);
            if (res) {
              return Array.isArray(res) ? res : [res];
            }
          }
        };
        OpToHtmlConverter2.prototype.getCustomCssStyles = function() {
          if (this.options.customCssStyles && typeof this.options.customCssStyles === "function") {
            var res = this.options.customCssStyles.apply(null, [this.op]);
            if (res) {
              return Array.isArray(res) ? res : [res];
            }
          }
        };
        OpToHtmlConverter2.prototype.getTags = function() {
          var _this = this;
          var attrs = this.op.attributes;
          if (!this.op.isText()) {
            return [
              this.op.isVideo() ? "iframe" : this.op.isImage() ? "img" : "span"
            ];
          }
          var positionTag = this.options.paragraphTag || "p";
          var blocks = [
            ["blockquote"],
            ["code-block", "pre"],
            ["list", this.options.listItemTag],
            ["header"],
            ["align", positionTag],
            ["direction", positionTag],
            ["indent", positionTag]
          ];
          for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) {
            var item = blocks_1[_i];
            var firstItem = item[0];
            if (attrs[firstItem]) {
              var customTag = this.getCustomTag(firstItem);
              return customTag ? [customTag] : firstItem === "header" ? ["h" + attrs[firstItem]] : [arr2.preferSecond(item)];
            }
          }
          if (this.op.isCustomTextBlock()) {
            var customTag = this.getCustomTag("renderAsBlock");
            return customTag ? [customTag] : [positionTag];
          }
          var customTagsMap = Object.keys(attrs).reduce(function(res, it) {
            var customTag2 = _this.getCustomTag(it);
            if (customTag2) {
              res[it] = customTag2;
            }
            return res;
          }, {});
          var inlineTags = [
            ["link", "a"],
            ["mentions", "a"],
            ["script"],
            ["bold", "strong"],
            ["italic", "em"],
            ["strike", "s"],
            ["underline", "u"],
            ["code"]
          ];
          return inlineTags.filter(function(item2) {
            return !!attrs[item2[0]];
          }).concat(Object.keys(customTagsMap).filter(function(t) {
            return !inlineTags.some(function(it) {
              return it[0] == t;
            });
          }).map(function(t) {
            return [t, customTagsMap[t]];
          })).map(function(item2) {
            return customTagsMap[item2[0]] ? customTagsMap[item2[0]] : item2[0] === "script" ? attrs[item2[0]] === value_types_1.ScriptType.Sub ? "sub" : "sup" : arr2.preferSecond(item2);
          });
        };
        return OpToHtmlConverter2;
      }();
      exports2.OpToHtmlConverter = OpToHtmlConverter;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js
  var require_group_types = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __extends = exports2 && exports2.__extends || function() {
        var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
          d.__proto__ = b;
        } || function(d, b) {
          for (var p in b)
            if (b.hasOwnProperty(p))
              d[p] = b[p];
        };
        return function(d, b) {
          extendStatics(d, b);
          function __() {
            this.constructor = d;
          }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InlineGroup = /* @__PURE__ */ function() {
        function InlineGroup2(ops) {
          this.ops = ops;
        }
        return InlineGroup2;
      }();
      exports2.InlineGroup = InlineGroup;
      var SingleItem = /* @__PURE__ */ function() {
        function SingleItem2(op) {
          this.op = op;
        }
        return SingleItem2;
      }();
      var VideoItem = function(_super) {
        __extends(VideoItem2, _super);
        function VideoItem2() {
          return _super !== null && _super.apply(this, arguments) || this;
        }
        return VideoItem2;
      }(SingleItem);
      exports2.VideoItem = VideoItem;
      var BlotBlock = function(_super) {
        __extends(BlotBlock2, _super);
        function BlotBlock2() {
          return _super !== null && _super.apply(this, arguments) || this;
        }
        return BlotBlock2;
      }(SingleItem);
      exports2.BlotBlock = BlotBlock;
      var BlockGroup = /* @__PURE__ */ function() {
        function BlockGroup2(op, ops) {
          this.op = op;
          this.ops = ops;
        }
        return BlockGroup2;
      }();
      exports2.BlockGroup = BlockGroup;
      var ListGroup = /* @__PURE__ */ function() {
        function ListGroup2(items) {
          this.items = items;
        }
        return ListGroup2;
      }();
      exports2.ListGroup = ListGroup;
      var ListItem = /* @__PURE__ */ function() {
        function ListItem2(item, innerList) {
          if (innerList === void 0) {
            innerList = null;
          }
          this.item = item;
          this.innerList = innerList;
        }
        return ListItem2;
      }();
      exports2.ListItem = ListItem;
      var TableGroup = /* @__PURE__ */ function() {
        function TableGroup2(rows) {
          this.rows = rows;
        }
        return TableGroup2;
      }();
      exports2.TableGroup = TableGroup;
      var TableRow = /* @__PURE__ */ function() {
        function TableRow2(cells) {
          this.cells = cells;
        }
        return TableRow2;
      }();
      exports2.TableRow = TableRow;
      var TableCell = /* @__PURE__ */ function() {
        function TableCell2(item) {
          this.item = item;
        }
        return TableCell2;
      }();
      exports2.TableCell = TableCell;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js
  var require_Grouper = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      var array_1 = require_array();
      var group_types_1 = require_group_types();
      var Grouper = function() {
        function Grouper2() {
        }
        Grouper2.pairOpsWithTheirBlock = function(ops) {
          var result = [];
          var canBeInBlock = function(op2) {
            return !(op2.isJustNewline() || op2.isCustomEmbedBlock() || op2.isVideo() || op2.isContainerBlock());
          };
          var isInlineData = function(op2) {
            return op2.isInline();
          };
          var lastInd = ops.length - 1;
          var opsSlice;
          for (var i = lastInd; i >= 0; i--) {
            var op = ops[i];
            if (op.isVideo()) {
              result.push(new group_types_1.VideoItem(op));
            } else if (op.isCustomEmbedBlock()) {
              result.push(new group_types_1.BlotBlock(op));
            } else if (op.isContainerBlock()) {
              opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, canBeInBlock);
              result.push(new group_types_1.BlockGroup(op, opsSlice.elements));
              i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
            } else {
              opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, isInlineData);
              result.push(new group_types_1.InlineGroup(opsSlice.elements.concat(op)));
              i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
            }
          }
          result.reverse();
          return result;
        };
        Grouper2.groupConsecutiveSameStyleBlocks = function(groups, blocksOf) {
          if (blocksOf === void 0) {
            blocksOf = {
              header: true,
              codeBlocks: true,
              blockquotes: true,
              customBlocks: true
            };
          }
          return array_1.groupConsecutiveElementsWhile(groups, function(g, gPrev) {
            if (!(g instanceof group_types_1.BlockGroup) || !(gPrev instanceof group_types_1.BlockGroup)) {
              return false;
            }
            return blocksOf.codeBlocks && Grouper2.areBothCodeblocksWithSameLang(g, gPrev) || blocksOf.blockquotes && Grouper2.areBothBlockquotesWithSameAdi(g, gPrev) || blocksOf.header && Grouper2.areBothSameHeadersWithSameAdi(g, gPrev) || blocksOf.customBlocks && Grouper2.areBothCustomBlockWithSameAttr(g, gPrev);
          });
        };
        Grouper2.reduceConsecutiveSameStyleBlocksToOne = function(groups) {
          var newLineOp = DeltaInsertOp_1.DeltaInsertOp.createNewLineOp();
          return groups.map(function(elm) {
            if (!Array.isArray(elm)) {
              if (elm instanceof group_types_1.BlockGroup && !elm.ops.length) {
                elm.ops.push(newLineOp);
              }
              return elm;
            }
            var groupsLastInd = elm.length - 1;
            elm[0].ops = array_1.flatten(elm.map(function(g, i) {
              if (!g.ops.length) {
                return [newLineOp];
              }
              return g.ops.concat(i < groupsLastInd ? [newLineOp] : []);
            }));
            return elm[0];
          });
        };
        Grouper2.areBothCodeblocksWithSameLang = function(g1, gOther) {
          return g1.op.isCodeBlock() && gOther.op.isCodeBlock() && g1.op.hasSameLangAs(gOther.op);
        };
        Grouper2.areBothSameHeadersWithSameAdi = function(g1, gOther) {
          return g1.op.isSameHeaderAs(gOther.op) && g1.op.hasSameAdiAs(gOther.op);
        };
        Grouper2.areBothBlockquotesWithSameAdi = function(g, gOther) {
          return g.op.isBlockquote() && gOther.op.isBlockquote() && g.op.hasSameAdiAs(gOther.op);
        };
        Grouper2.areBothCustomBlockWithSameAttr = function(g, gOther) {
          return g.op.isCustomTextBlock() && gOther.op.isCustomTextBlock() && g.op.hasSameAttr(gOther.op);
        };
        return Grouper2;
      }();
      exports2.Grouper = Grouper;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js
  var require_ListNester = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var group_types_1 = require_group_types();
      var array_1 = require_array();
      var ListNester = function() {
        function ListNester2() {
        }
        ListNester2.prototype.nest = function(groups) {
          var _this = this;
          var listBlocked = this.convertListBlocksToListGroups(groups);
          var groupedByListGroups = this.groupConsecutiveListGroups(listBlocked);
          var nested = array_1.flatten(groupedByListGroups.map(function(group2) {
            if (!Array.isArray(group2)) {
              return group2;
            }
            return _this.nestListSection(group2);
          }));
          var groupRootLists = array_1.groupConsecutiveElementsWhile(nested, function(curr, prev) {
            if (!(curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup)) {
              return false;
            }
            return curr.items[0].item.op.isSameListAs(prev.items[0].item.op);
          });
          return groupRootLists.map(function(v) {
            if (!Array.isArray(v)) {
              return v;
            }
            var litems = v.map(function(g) {
              return g.items;
            });
            return new group_types_1.ListGroup(array_1.flatten(litems));
          });
        };
        ListNester2.prototype.convertListBlocksToListGroups = function(items) {
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isList() && gPrev.op.isList() && g.op.isSameListAs(gPrev.op) && g.op.hasSameIndentationAs(gPrev.op);
          });
          return grouped.map(function(item) {
            if (!Array.isArray(item)) {
              if (item instanceof group_types_1.BlockGroup && item.op.isList()) {
                return new group_types_1.ListGroup([new group_types_1.ListItem(item)]);
              }
              return item;
            }
            return new group_types_1.ListGroup(item.map(function(g) {
              return new group_types_1.ListItem(g);
            }));
          });
        };
        ListNester2.prototype.groupConsecutiveListGroups = function(items) {
          return array_1.groupConsecutiveElementsWhile(items, function(curr, prev) {
            return curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup;
          });
        };
        ListNester2.prototype.nestListSection = function(sectionItems) {
          var _this = this;
          var indentGroups = this.groupByIndent(sectionItems);
          Object.keys(indentGroups).map(Number).sort().reverse().forEach(function(indent) {
            indentGroups[indent].forEach(function(lg) {
              var idx = sectionItems.indexOf(lg);
              if (_this.placeUnderParent(lg, sectionItems.slice(0, idx))) {
                sectionItems.splice(idx, 1);
              }
            });
          });
          return sectionItems;
        };
        ListNester2.prototype.groupByIndent = function(items) {
          return items.reduce(function(pv, cv) {
            var indent = cv.items[0].item.op.attributes.indent;
            if (indent) {
              pv[indent] = pv[indent] || [];
              pv[indent].push(cv);
            }
            return pv;
          }, {});
        };
        ListNester2.prototype.placeUnderParent = function(target, items) {
          for (var i = items.length - 1; i >= 0; i--) {
            var elm = items[i];
            if (target.items[0].item.op.hasHigherIndentThan(elm.items[0].item.op)) {
              var parent = elm.items[elm.items.length - 1];
              if (parent.innerList) {
                parent.innerList.items = parent.innerList.items.concat(target.items);
              } else {
                parent.innerList = target;
              }
              return true;
            }
          }
          return false;
        };
        return ListNester2;
      }();
      exports2.ListNester = ListNester;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js
  var require_TableGrouper = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var group_types_1 = require_group_types();
      var array_1 = require_array();
      var TableGrouper = function() {
        function TableGrouper2() {
        }
        TableGrouper2.prototype.group = function(groups) {
          var tableBlocked = this.convertTableBlocksToTableGroups(groups);
          return tableBlocked;
        };
        TableGrouper2.prototype.convertTableBlocksToTableGroups = function(items) {
          var _this = this;
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable();
          });
          return grouped.map(function(item) {
            if (!Array.isArray(item)) {
              if (item instanceof group_types_1.BlockGroup && item.op.isTable()) {
                return new group_types_1.TableGroup([new group_types_1.TableRow([new group_types_1.TableCell(item)])]);
              }
              return item;
            }
            return new group_types_1.TableGroup(_this.convertTableBlocksToTableRows(item));
          });
        };
        TableGrouper2.prototype.convertTableBlocksToTableRows = function(items) {
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable() && g.op.isSameTableRowAs(gPrev.op);
          });
          return grouped.map(function(item) {
            return new group_types_1.TableRow(Array.isArray(item) ? item.map(function(it) {
              return new group_types_1.TableCell(it);
            }) : [new group_types_1.TableCell(item)]);
          });
        };
        return TableGrouper2;
      }();
      exports2.TableGrouper = TableGrouper;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js
  var require_QuillDeltaToHtmlConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InsertOpsConverter_1 = require_InsertOpsConverter();
      var OpToHtmlConverter_1 = require_OpToHtmlConverter();
      var Grouper_1 = require_Grouper();
      var group_types_1 = require_group_types();
      var ListNester_1 = require_ListNester();
      var funcs_html_1 = require_funcs_html();
      var obj = __importStar(require_object2());
      var value_types_1 = require_value_types();
      var TableGrouper_1 = require_TableGrouper();
      var BrTag = "<br/>";
      var QuillDeltaToHtmlConverter2 = function() {
        function QuillDeltaToHtmlConverter3(deltaOps, options) {
          this.rawDeltaOps = [];
          this.callbacks = {};
          this.options = obj.assign({
            paragraphTag: "p",
            textTag: "span",
            encodeHtml: true,
            classPrefix: "ql",
            inlineStyles: false,
            multiLineBlockquote: true,
            multiLineHeader: true,
            multiLineCodeblock: true,
            multiLineParagraph: true,
            multiLineCustomBlock: true,
            allowBackgroundClasses: false,
            linkTarget: "_blank"
          }, options, {
            orderedListTag: "ol",
            bulletListTag: "ul",
            listItemTag: "li"
          });
          var inlineStyles;
          if (!this.options.inlineStyles) {
            inlineStyles = void 0;
          } else if (typeof this.options.inlineStyles === "object") {
            inlineStyles = this.options.inlineStyles;
          } else {
            inlineStyles = {};
          }
          this.converterOptions = {
            encodeHtml: this.options.encodeHtml,
            classPrefix: this.options.classPrefix,
            inlineStyles,
            listItemTag: this.options.listItemTag,
            paragraphTag: this.options.paragraphTag,
            textTag: this.options.textTag,
            linkRel: this.options.linkRel,
            linkTarget: this.options.linkTarget,
            allowBackgroundClasses: this.options.allowBackgroundClasses,
            customTag: this.options.customTag,
            customTagAttributes: this.options.customTagAttributes,
            customCssClasses: this.options.customCssClasses,
            customCssStyles: this.options.customCssStyles
          };
          this.rawDeltaOps = deltaOps;
        }
        QuillDeltaToHtmlConverter3.prototype._getListTag = function(op) {
          return op.isOrderedList() ? this.options.orderedListTag + "" : op.isBulletList() ? this.options.bulletListTag + "" : op.isCheckedList() ? this.options.bulletListTag + "" : op.isUncheckedList() ? this.options.bulletListTag + "" : "";
        };
        QuillDeltaToHtmlConverter3.prototype.getGroupedOps = function() {
          var deltaOps = InsertOpsConverter_1.InsertOpsConverter.convert(this.rawDeltaOps, this.options);
          var pairedOps = Grouper_1.Grouper.pairOpsWithTheirBlock(deltaOps);
          var groupedSameStyleBlocks = Grouper_1.Grouper.groupConsecutiveSameStyleBlocks(pairedOps, {
            blockquotes: !!this.options.multiLineBlockquote,
            header: !!this.options.multiLineHeader,
            codeBlocks: !!this.options.multiLineCodeblock,
            customBlocks: !!this.options.multiLineCustomBlock
          });
          var groupedOps = Grouper_1.Grouper.reduceConsecutiveSameStyleBlocksToOne(groupedSameStyleBlocks);
          var tableGrouper = new TableGrouper_1.TableGrouper();
          groupedOps = tableGrouper.group(groupedOps);
          var listNester = new ListNester_1.ListNester();
          return listNester.nest(groupedOps);
        };
        QuillDeltaToHtmlConverter3.prototype.convert = function() {
          var _this = this;
          var groups = this.getGroupedOps();
          return groups.map(function(group2) {
            if (group2 instanceof group_types_1.ListGroup) {
              return _this._renderWithCallbacks(value_types_1.GroupType.List, group2, function() {
                return _this._renderList(group2);
              });
            } else if (group2 instanceof group_types_1.TableGroup) {
              return _this._renderWithCallbacks(value_types_1.GroupType.Table, group2, function() {
                return _this._renderTable(group2);
              });
            } else if (group2 instanceof group_types_1.BlockGroup) {
              var g = group2;
              return _this._renderWithCallbacks(value_types_1.GroupType.Block, group2, function() {
                return _this._renderBlock(g.op, g.ops);
              });
            } else if (group2 instanceof group_types_1.BlotBlock) {
              return _this._renderCustom(group2.op, null);
            } else if (group2 instanceof group_types_1.VideoItem) {
              return _this._renderWithCallbacks(value_types_1.GroupType.Video, group2, function() {
                var g2 = group2;
                var converter = new OpToHtmlConverter_1.OpToHtmlConverter(g2.op, _this.converterOptions);
                return converter.getHtml();
              });
            } else {
              return _this._renderWithCallbacks(value_types_1.GroupType.InlineGroup, group2, function() {
                return _this._renderInlines(group2.ops, true);
              });
            }
          }).join("");
        };
        QuillDeltaToHtmlConverter3.prototype._renderWithCallbacks = function(groupType, group2, myRenderFn) {
          var html = "";
          var beforeCb = this.callbacks["beforeRender_cb"];
          html = typeof beforeCb === "function" ? beforeCb.apply(null, [groupType, group2]) : "";
          if (!html) {
            html = myRenderFn();
          }
          var afterCb = this.callbacks["afterRender_cb"];
          html = typeof afterCb === "function" ? afterCb.apply(null, [groupType, html]) : html;
          return html;
        };
        QuillDeltaToHtmlConverter3.prototype._renderList = function(list) {
          var _this = this;
          var firstItem = list.items[0];
          return funcs_html_1.makeStartTag(this._getListTag(firstItem.item.op)) + list.items.map(function(li) {
            return _this._renderListItem(li);
          }).join("") + funcs_html_1.makeEndTag(this._getListTag(firstItem.item.op));
        };
        QuillDeltaToHtmlConverter3.prototype._renderListItem = function(li) {
          li.item.op.attributes.indent = 0;
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(li.item.op, this.converterOptions);
          var parts = converter.getHtmlParts();
          var liElementsHtml = this._renderInlines(li.item.ops, false);
          return parts.openingTag + liElementsHtml + (li.innerList ? this._renderList(li.innerList) : "") + parts.closingTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderTable = function(table) {
          var _this = this;
          return funcs_html_1.makeStartTag("table") + funcs_html_1.makeStartTag("tbody") + table.rows.map(function(row) {
            return _this._renderTableRow(row);
          }).join("") + funcs_html_1.makeEndTag("tbody") + funcs_html_1.makeEndTag("table");
        };
        QuillDeltaToHtmlConverter3.prototype._renderTableRow = function(row) {
          var _this = this;
          return funcs_html_1.makeStartTag("tr") + row.cells.map(function(cell) {
            return _this._renderTableCell(cell);
          }).join("") + funcs_html_1.makeEndTag("tr");
        };
        QuillDeltaToHtmlConverter3.prototype._renderTableCell = function(cell) {
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(cell.item.op, this.converterOptions);
          var parts = converter.getHtmlParts();
          var cellElementsHtml = this._renderInlines(cell.item.ops, false);
          return funcs_html_1.makeStartTag("td", {
            key: "data-row",
            value: cell.item.op.attributes.table
          }) + parts.openingTag + cellElementsHtml + parts.closingTag + funcs_html_1.makeEndTag("td");
        };
        QuillDeltaToHtmlConverter3.prototype._renderBlock = function(bop, ops) {
          var _this = this;
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(bop, this.converterOptions);
          var htmlParts = converter.getHtmlParts();
          if (bop.isCodeBlock()) {
            return htmlParts.openingTag + funcs_html_1.encodeHtml(ops.map(function(iop) {
              return iop.isCustomEmbed() ? _this._renderCustom(iop, bop) : iop.insert.value;
            }).join("")) + htmlParts.closingTag;
          }
          var inlines = ops.map(function(op) {
            return _this._renderInline(op, bop);
          }).join("");
          return htmlParts.openingTag + (inlines || BrTag) + htmlParts.closingTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderInlines = function(ops, isInlineGroup) {
          var _this = this;
          if (isInlineGroup === void 0) {
            isInlineGroup = true;
          }
          var opsLen = ops.length - 1;
          var html = ops.map(function(op, i) {
            if (i > 0 && i === opsLen && op.isJustNewline()) {
              return "";
            }
            return _this._renderInline(op, null);
          }).join("");
          if (!isInlineGroup) {
            return html;
          }
          var startParaTag = funcs_html_1.makeStartTag(this.options.paragraphTag);
          var endParaTag = funcs_html_1.makeEndTag(this.options.paragraphTag);
          if (html === BrTag || this.options.multiLineParagraph) {
            return startParaTag + html + endParaTag;
          }
          return startParaTag + html.split(BrTag).map(function(v) {
            return v === "" ? BrTag : v;
          }).join(endParaTag + startParaTag) + endParaTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderInline = function(op, contextOp) {
          if (op.isCustomEmbed()) {
            return this._renderCustom(op, contextOp);
          }
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(op, this.converterOptions);
          return converter.getHtml().replace(/\\n/g, BrTag);
        };
        QuillDeltaToHtmlConverter3.prototype._renderCustom = function(op, contextOp) {
          var renderCb = this.callbacks["renderCustomOp_cb"];
          if (typeof renderCb === "function") {
            return renderCb.apply(null, [op, contextOp]);
          }
          return "";
        };
        QuillDeltaToHtmlConverter3.prototype.beforeRender = function(cb) {
          if (typeof cb === "function") {
            this.callbacks["beforeRender_cb"] = cb;
          }
        };
        QuillDeltaToHtmlConverter3.prototype.afterRender = function(cb) {
          if (typeof cb === "function") {
            this.callbacks["afterRender_cb"] = cb;
          }
        };
        QuillDeltaToHtmlConverter3.prototype.renderCustomWith = function(cb) {
          this.callbacks["renderCustomOp_cb"] = cb;
        };
        return QuillDeltaToHtmlConverter3;
      }();
      exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter2;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/main.js
  var require_main = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/main.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var QuillDeltaToHtmlConverter_1 = require_QuillDeltaToHtmlConverter();
      exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter_1.QuillDeltaToHtmlConverter;
      var OpToHtmlConverter_1 = require_OpToHtmlConverter();
      exports2.OpToHtmlConverter = OpToHtmlConverter_1.OpToHtmlConverter;
      var group_types_1 = require_group_types();
      exports2.InlineGroup = group_types_1.InlineGroup;
      exports2.VideoItem = group_types_1.VideoItem;
      exports2.BlockGroup = group_types_1.BlockGroup;
      exports2.ListGroup = group_types_1.ListGroup;
      exports2.ListItem = group_types_1.ListItem;
      exports2.BlotBlock = group_types_1.BlotBlock;
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      exports2.DeltaInsertOp = DeltaInsertOp_1.DeltaInsertOp;
      var InsertData_1 = require_InsertData();
      exports2.InsertDataQuill = InsertData_1.InsertDataQuill;
      exports2.InsertDataCustom = InsertData_1.InsertDataCustom;
      var value_types_1 = require_value_types();
      exports2.NewLine = value_types_1.NewLine;
      exports2.ListType = value_types_1.ListType;
      exports2.ScriptType = value_types_1.ScriptType;
      exports2.DirectionType = value_types_1.DirectionType;
      exports2.AlignType = value_types_1.AlignType;
      exports2.DataType = value_types_1.DataType;
      exports2.GroupType = value_types_1.GroupType;
    }
  });

  // src/index.ts
  init_tampermonkey();

  // src/core/bilibili-old.ts
  init_tampermonkey();
  var import_md52 = __toESM(require_md5());

  // src/utils/base64.ts
  init_tampermonkey();
  var base64 = new class {
    /**
     * Base64编码
     * @param str 原始字符串
     * @returns 编码结果
     */
    encode(str) {
      return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode("0x" + p1);
      }));
    }
    /**
     * Base64解码
     * @param str 原始字符串
     * @returns 解码结果
     */
    decode(str) {
      return decodeURIComponent(atob(str).split("").map(function(c) {
        return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
      }).join(""));
    }
    /**
     * Base64编码
     * @param buffer Uint8Array
     * @returns 编码结果
     */
    encodeFromUint8Array(buffer) {
      return btoa(String.fromCharCode(...buffer));
    }
    /**
     * Base64编码
     * @param str 
     * @returns 
     */
    decodeToUint8Array(str) {
      return new Uint8Array(atob(str).split("").map((d) => d.charCodeAt(0)));
    }
  }();

  // src/utils/debug.ts
  init_tampermonkey();

  // src/utils/format/time.ts
  init_tampermonkey();

  // src/utils/format/integer.ts
  init_tampermonkey();
  function integerFormat(num, byte = 2) {
    return num < 10 ** byte ? (Array(byte).join("0") + num).slice(-1 * byte) : num;
  }

  // src/utils/format/time.ts
  function timeFormat(time = (/* @__PURE__ */ new Date()).getTime(), type) {
    const date = new Date(time);
    const arr2 = date.toLocaleString().split(" ");
    const day = arr2[0].split("/");
    day[1] = integerFormat(day[1], 2);
    day[2] = integerFormat(day[2], 2);
    return type ? day.join("-") + " " + arr2[1] : arr2[1];
  }

  // src/utils/debug.ts
  var group = {
    /** 分组层次 */
    i: 0,
    /** 分组栈 */
    call: []
  };
  function debug(...data) {
    group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  }
  debug.assert = function(condition, ...data) {
    group.call.push(console.assert.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.clear = function() {
    group.i = 0;
    group.call = [];
    setTimeout(console.clear.bind(console));
    return debug;
  };
  debug.debug = function(...data) {
    group.call.push(console.debug.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.error = function(...data) {
    group.call.push(console.error.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.group = function(...data) {
    group.i++;
    group.call.push(console.group.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    return debug;
  };
  debug.groupCollapsed = function(...data) {
    group.i++;
    group.call.push(console.groupCollapsed.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    return debug;
  };
  debug.groupEnd = function() {
    if (group.i) {
      group.i--;
      group.call.push(console.groupEnd.bind(console));
      !group.i && (group.call.push(() => group.call = []), group.call.forEach((d) => setTimeout(d)));
    }
    return debug;
  };
  debug.info = function(...data) {
    group.call.push(console.info.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.log = function(...data) {
    group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.table = function(tabularData, properties) {
    group.call.push(console.table.bind(console, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.time = function(label) {
    console.time(label);
    return debug;
  };
  debug.timeEnd = function(label) {
    console.timeEnd(label);
    return debug;
  };
  debug.timeLog = function(label, ...data) {
    console.timeLog(label, \`[\${timeFormat()}]\`, ...data);
    return debug;
  };
  debug.trace = function(...data) {
    group.call.push(console.trace.bind(console, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.warn = function(...data) {
    group.call.push(console.warn.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };

  // src/utils/format/url.ts
  init_tampermonkey();

  // src/utils/typeof.ts
  init_tampermonkey();
  var isArray = Array.isArray;
  var isObject = (val) => val !== null && typeof val === "object";
  var isNumber = (val) => !isNaN(parseFloat(val)) && isFinite(val);

  // src/utils/format/url.ts
  var URL2 = class {
    /** 锚 */
    hash;
    /** 基链 */
    base;
    /** 参数对象。结果会格式化\`undefined\`\`null\`\`NaN\`等特殊值,但不会处理数字,以免丢失精度。 */
    params = {};
    /** 参数链(不含\`?\`) */
    get param() {
      return Object.entries(this.params).reduce((s, d) => {
        return s += \`\${s ? "&" : ""}\${d[0]}=\${d[1]}\`;
      }, "");
    }
    /** 提取URL参数 */
    constructor(url) {
      const arr1 = url.split("#");
      let str = arr1.shift();
      this.hash = arr1.join("#");
      (this.hash || url.includes("#")) && (this.hash = \`#\${this.hash}\`);
      const arr2 = str.split("?");
      this.base = arr2.shift();
      str = arr2.join("?");
      if (str) {
        str.split("&").forEach((d) => {
          const arr3 = d.split("=");
          const key = arr3.shift();
          if (key) {
            let value = arr3.join("=") || "";
            try {
              if (!isNumber(value)) {
                value = JSON.parse(value);
              }
            } catch {
              value === "undefined" && (value = void 0);
              value === "NaN" && (value = NaN);
            }
            this.params[key] = value;
          }
        });
      }
    }
    sort() {
      this.params = Object.keys(this.params).sort().reduce((s, d) => {
        s[d] = this.params[d];
        return s;
      }, {});
    }
    /** 还原url链接 */
    toJSON() {
      return \`\${this.base ? this.param ? this.base + "?" : this.base : ""}\${this.param}\${this.hash || ""}\`;
    }
  };
  function objUrl(url, obj) {
    const res = new URL2(url);
    Object.entries(obj).forEach((d) => {
      if (d[1] === void 0 || d[1] === null)
        return;
      res.params[d[0]] = d[1];
    });
    return res.toJSON();
  }
  function urlObj(url) {
    const res = new URL2(url);
    return res.params;
  }

  // src/utils/htmlvnode.ts
  init_tampermonkey();
  var Vnode = class {
    tagName;
    props = {};
    children = [];
    text;
    constructor(tagName) {
      this.tagName = tagName;
    }
  };
  var Scanner = class {
    /** HTML */
    html;
    /** 当前光标 */
    pos = 0;
    /** Vnode */
    vnode = [];
    /** 节点名栈 */
    tagNames = [];
    /** Vnode栈 */
    targets = [];
    /** innerText栈 */
    text = "";
    /** 引号栈 */
    quote = "";
    /**
     * 扫描html文本转化为Vnode
     * @param html html文本
     */
    constructor(html) {
      this.html = html;
      this.targets.push({ children: this.vnode });
      while (this.html) {
        this.organizeTag();
      }
      this.textContent();
    }
    /** 提取节点名 */
    organizeTag() {
      if (!this.quote && this.html[0] === "<") {
        if (this.html.startsWith(\`</\${this.tagNames.at(-1)}\`)) {
          this.textContent();
          this.html = this.html.replace(new RegExp(\`^</\${this.tagNames.at(-1)}>\`), "");
          this.popNode();
        } else if (this.tagNames.at(-1) === "script") {
          this.addText();
        } else {
          this.removeScanned();
          if (this.html.startsWith("!--")) {
            this.html = this.html.replace(/^!--[\\S\\s]+?-->/, "");
          }
          if (this.html.startsWith("!DOCTYPE")) {
            this.html = this.html.replace(/^!DOCTYPE[\\S\\s]+?>/, "");
          }
          if (/^[a-zA-Z]/.test(this.html)) {
            this.textContent();
            const func = [];
            let stop = false;
            for (this.pos = 0; this.pos < this.html.length; this.pos++) {
              if (stop) {
                this.pos--;
                break;
              }
              switch (this.html[this.pos]) {
                case " ":
                case "\\r":
                case "\\n":
                  func.push(() => this.organizeProp());
                  stop = true;
                  break;
                case ">":
                  this.html[this.pos - 1] === "/" ? func.push(() => this.popNode()) : func.push(() => this.tagSingle());
                  stop = true;
                  break;
              }
            }
            const tagName = this.html.substring(0, this.pos);
            const tag = new Vnode(tagName);
            this.tagNames.push(tagName);
            this.targets.at(-1).children.push(tag);
            this.targets.push(tag);
            this.removeScanned(this.pos + 1);
            func.forEach((d) => d());
          }
        }
      } else {
        this.addText();
      }
    }
    /** 记录疑似文本节点 */
    addText() {
      switch (this.html[0]) {
        case "'":
          !this.quote ? this.quote = "'" : this.quote === "'" && (this.quote = "");
          break;
        case '"':
          !this.quote ? this.quote = '"' : this.quote === '"' && (this.quote = "");
          break;
        case "\`":
          !this.quote ? this.quote = "\`" : this.quote === "\`" && (this.quote = "");
          break;
      }
      this.text += this.html[0];
      this.removeScanned();
    }
    /** 提取属性 */
    organizeProp() {
      let value = false;
      let stop = false;
      let start = 0;
      let popd = false;
      for (this.pos = 0; this.pos < this.html.length; this.pos++) {
        if (stop)
          break;
        switch (this.html[this.pos]) {
          case '"':
            value = !value;
            break;
          case " ":
            if (!value) {
              const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, "");
              const prop = str.split("=");
              const key = prop.shift();
              key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key);
              start = this.pos;
            }
            break;
          case ">":
            if (!value) {
              stop = true;
              const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, "");
              const prop = str.split("=");
              const key = prop.shift();
              key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key);
              if (this.html[this.pos - 1] === "/") {
                this.popNode();
                popd = true;
              }
            }
            break;
        }
      }
      if (!popd)
        this.tagSingle();
      this.removeScanned(this.pos--);
    }
    /** 出栈检查 空元素直接出栈*/
    tagSingle() {
      switch (this.tagNames.at(-1)) {
        case "area":
        case "base":
        case "br":
        case "col":
        case "colgroup":
        case "command":
        case "embed":
        case "hr":
        case "img":
        case "input":
        case "keygen":
        case "link":
        case "meta":
        case "param":
        case "path":
        case "source":
        case "track":
        case "wbr":
          this.popNode();
          break;
      }
    }
    /** 节点出栈 */
    popNode() {
      this.tagNames.splice(this.tagNames.length - 1, 1);
      this.targets.splice(this.targets.length - 1, 1);
      this.text = "";
    }
    /** 移除已扫描字符长度 默认1位 */
    removeScanned(length2 = 1) {
      this.html = this.html.slice(length2);
    }
    /** 处理TextContent */
    textContent() {
      const text = this.text.replace(/\\r|\\n| /g, "");
      if (text) {
        const tag = new Vnode("text");
        tag.text = this.text;
        this.targets.at(-1).children.push(tag);
      }
      this.text = "";
    }
  };
  function htmlVnode(html) {
    return new Scanner(html).vnode;
  }

  // src/core/danmaku.ts
  init_tampermonkey();

  // src/io/grpc/api-dm-web.ts
  init_tampermonkey();
  var import_light = __toESM(require_light());

  // src/json/dm-web.json
  var dm_web_default = {
    nested: {
      bilibili: {
        nested: {
          community: {
            nested: {
              service: {
                nested: {
                  dm: {
                    nested: {
                      v1: {
                        nested: {
                          DmWebViewReply: {
                            fields: {
                              state: {
                                type: "int32",
                                id: 1
                              },
                              text: {
                                type: "string",
                                id: 2
                              },
                              textSide: {
                                type: "string",
                                id: 3
                              },
                              dmSge: {
                                type: "DmSegConfig",
                                id: 4
                              },
                              flag: {
                                type: "DanmakuFlagConfig",
                                id: 5
                              },
                              specialDms: {
                                rule: "repeated",
                                type: "string",
                                id: 6
                              },
                              checkBox: {
                                type: "bool",
                                id: 7
                              },
                              count: {
                                type: "int64",
                                id: 8
                              },
                              commandDms: {
                                rule: "repeated",
                                type: "CommandDm",
                                id: 9
                              },
                              dmSetting: {
                                type: "DanmuWebPlayerConfig",
                                id: 10
                              },
                              reportFilter: {
                                rule: "repeated",
                                type: "string",
                                id: 11
                              }
                            }
                          },
                          CommandDm: {
                            fields: {
                              id: {
                                type: "int64",
                                id: 1
                              },
                              oid: {
                                type: "int64",
                                id: 2
                              },
                              mid: {
                                type: "int64",
                                id: 3
                              },
                              command: {
                                type: "string",
                                id: 4
                              },
                              content: {
                                type: "string",
                                id: 5
                              },
                              progress: {
                                type: "int32",
                                id: 6
                              },
                              ctime: {
                                type: "string",
                                id: 7
                              },
                              mtime: {
                                type: "string",
                                id: 8
                              },
                              extra: {
                                type: "string",
                                id: 9
                              },
                              idStr: {
                                type: "string",
                                id: 10
                              }
                            }
                          },
                          DmSegConfig: {
                            fields: {
                              pageSize: {
                                type: "int64",
                                id: 1
                              },
                              total: {
                                type: "int64",
                                id: 2
                              }
                            }
                          },
                          DanmakuFlagConfig: {
                            fields: {
                              recFlag: {
                                type: "int32",
                                id: 1
                              },
                              recText: {
                                type: "string",
                                id: 2
                              },
                              recSwitch: {
                                type: "int32",
                                id: 3
                              }
                            }
                          },
                          DmSegMobileReply: {
                            fields: {
                              elems: {
                                rule: "repeated",
                                type: "DanmakuElem",
                                id: 1
                              }
                            }
                          },
                          DanmakuElem: {
                            fields: {
                              id: {
                                type: "int64",
                                id: 1
                              },
                              progress: {
                                type: "int32",
                                id: 2
                              },
                              mode: {
                                type: "int32",
                                id: 3
                              },
                              fontsize: {
                                type: "int32",
                                id: 4
                              },
                              color: {
                                type: "uint32",
                                id: 5
                              },
                              midHash: {
                                type: "string",
                                id: 6
                              },
                              content: {
                                type: "string",
                                id: 7
                              },
                              ctime: {
                                type: "int64",
                                id: 8
                              },
                              weight: {
                                type: "int32",
                                id: 9
                              },
                              action: {
                                type: "string",
                                id: 10
                              },
                              pool: {
                                type: "int32",
                                id: 11
                              },
                              idStr: {
                                type: "string",
                                id: 12
                              },
                              attr: {
                                type: "int32",
                                id: 13
                              }
                            }
                          },
                          DanmuWebPlayerConfig: {
                            fields: {
                              dmSwitch: {
                                type: "bool",
                                id: 1
                              },
                              aiSwitch: {
                                type: "bool",
                                id: 2
                              },
                              aiLevel: {
                                type: "int32",
                                id: 3
                              },
                              blocktop: {
                                type: "bool",
                                id: 4
                              },
                              blockscroll: {
                                type: "bool",
                                id: 5
                              },
                              blockbottom: {
                                type: "bool",
                                id: 6
                              },
                              blockcolor: {
                                type: "bool",
                                id: 7
                              },
                              blockspecial: {
                                type: "bool",
                                id: 8
                              },
                              preventshade: {
                                type: "bool",
                                id: 9
                              },
                              dmask: {
                                type: "bool",
                                id: 10
                              },
                              opacity: {
                                type: "float",
                                id: 11
                              },
                              dmarea: {
                                type: "int32",
                                id: 12
                              },
                              speedplus: {
                                type: "float",
                                id: 13
                              },
                              fontsize: {
                                type: "float",
                                id: 14
                              },
                              screensync: {
                                type: "bool",
                                id: 15
                              },
                              speedsync: {
                                type: "bool",
                                id: 16
                              },
                              fontfamily: {
                                type: "string",
                                id: 17
                              },
                              bold: {
                                type: "bool",
                                id: 18
                              },
                              fontborder: {
                                type: "int32",
                                id: 19
                              },
                              drawType: {
                                type: "string",
                                id: 20
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // src/utils/danmaku.ts
  init_tampermonkey();
  var DanmakuBase = class {
    /** 从小到大排序弹幕 */
    static sortDmById(dms) {
      dms.sort((a, b) => this.bigInt(a.idStr, b.idStr) ? 1 : -1);
    }
    /** 比较两个弹幕ID先后 */
    static bigInt(num1, num2) {
      String(num1).replace(/\\d+/, (d) => num1 = d.replace(/^0+/, ""));
      String(num2).replace(/\\d+/, (d) => num2 = d.replace(/^0+/, ""));
      if (num1.length > num2.length)
        return true;
      else if (num1.length < num2.length)
        return false;
      else {
        for (let i = 0; i < num1.length; i++) {
          if (num1[i] > num2[i])
            return true;
          if (num1[i] < num2[i])
            return false;
        }
        return false;
      }
    }
    /** 重构为旧版弹幕类型 */
    static parseCmd(dms) {
      return dms.map((d) => {
        var _a3;
        const dm = {
          class: d.pool || 0,
          color: d.color || 0,
          date: d.ctime || 0,
          dmid: d.idStr || "",
          mode: +d.mode || 1,
          pool: d.pool || 0,
          size: d.fontsize || 25,
          stime: d.progress / 1e3 || 0,
          text: d.content && d.mode != 8 && d.mode != 9 ? d.content.replace(/(\\/n|\\\\n|\\n|\\r\\n)/g, "\\n") : d.content,
          uhash: d.midHash || "",
          uid: d.midHash || "",
          weight: d.weight,
          attr: d.attr
        };
        ((_a3 = d.action) == null ? void 0 : _a3.startsWith("picture:")) && (dm.html = \`<img src="\${d.action.replace("picture:", "//")}" style="width:auto;height:28.13px;">\`);
        return dm;
      });
    }
    /** 解析解码xml弹幕 */
    static decodeXml(xml) {
      if (typeof xml === "string") {
        xml = xml.replace(/((?:[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFD\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))/g, "");
        xml = new DOMParser().parseFromString(xml, "application/xml");
      }
      const items = xml.querySelectorAll("d");
      const dms = [];
      items.forEach((d) => {
        const json = d.getAttribute("p").split(",");
        const text = d.textContent || d.text;
        if (text) {
          const dm = {
            pool: Number(json[5]),
            color: Number(json[3]),
            ctime: Number(json[4]),
            id: Number(json[7]),
            idStr: String(json[7]),
            mode: Number(json[1]),
            fontsize: Number(json[2]),
            progress: Number(json[0]) * 1e3,
            content: String(text),
            midHash: json[6]
          };
          dms.push(dm);
        }
      });
      return dms;
    }
    /** 编码xml弹幕 */
    static encodeXml(dms, cid) {
      return dms.reduce((s, d) => {
        var _a3;
        const text = d.mode === 8 || d.mode === 9 ? d.text : ((_a3 = d.text) != null ? _a3 : "").replace(/(\\n|\\r\\n)/g, "/n");
        s += \`<d p="\${d.stime},\${d.mode},\${d.size},\${d.color},\${d.date},\${d.class},\${d.uid},\${d.dmid}">\${text.replace(/[<&]/g, (a) => {
          return { "<": "&lt;", "&": "&amp;" }[a];
        })}</d>
\`;
        return s;
      }, \`<?xml version="1.0" encoding="UTF-8"?><i><chatserver>chat.api.bilibili.com</chatserver><chatid>\${cid}</chatid><mission>0</mission><maxlimit>\${dms.length}</maxlimit><state>0</state><real_name>0</real_name><source>k-v</source>
\`) + "</i>";
    }
  };

  // src/io/urls.ts
  init_tampermonkey();
  var URLS = class _URLS {
    // protocol + //
    static P_AUTO = "//";
    static P_HTTP = "http://";
    static P_HTTPS = "https://";
    static P_WS = "ws://";
    static P_WSS = "wss://";
    // domain
    static D_WWW = "www.bilibili.com";
    static D_API = "api.bilibili.com";
    static D_APP = "app.bilibili.com";
    static D_MANAGER = "manager.bilibili.co";
    static D_INTERFACE = "interface.bilibili.com";
    static D_PASSPORT = "passport.bilibili.com";
    static D_BANGUMI = "bangumi.bilibili.com";
    static D_SPACE = "space.bilibili.com";
    static D_STATIC_S = "static.hdslb.com";
    static D_CHAT = "chat.bilibili.com";
    static D_DATA = "data.bilibili.com";
    static D_COMMENT = "comment.bilibili.com";
    static D_BROADCAST = "broadcast.bilibili.com";
    static D_MISAKA_SW = "misaka-sw.bilibili.com";
    static D_MEMBER = "member.bilibili.com";
    static D_BVC = "bvc.bilivideo.com";
    static D_S1 = "s1.hdslb.com";
    static D_API_GLOBAL = "api.global.bilibili.com";
    static D_ACCOUNT = "account.bilibili.com";
    static D_INTL = "apiintl.biliapi.net";
    static D_API_VC = "api.vc.bilibili.com";
    static WEBSHOW_LOCS = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/res/locs";
    static INDEX_TOP_RCMD = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/index/top/rcmd";
    static PAGE_HEADER = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/page/header";
    static SEASON_RANK_LIST = _URLS.P_AUTO + _URLS.D_API + "/pgc/season/rank/web/list";
    static VIDEO = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/video.min.js";
    static JQUERY = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/jquery.min.js";
    static ARTICLE_CARDS = _URLS.P_AUTO + _URLS.D_API + "/x/article/cards";
    static VIEW_DETAIL = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view/detail";
    static VIEW = _URLS.P_AUTO + _URLS.D_API + "/view";
    static X_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view";
    static PAGE_LIST = _URLS.P_AUTO + _URLS.D_API + "/x/player/pagelist";
    static TAG_INFO = _URLS.P_AUTO + _URLS.D_API + "/x/tag/info";
    static TAG_TOP = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/tag/top";
    static BANGUMI_SEASON = _URLS.P_AUTO + _URLS.D_BANGUMI + "/view/web_api/season";
    static SEASON_STATUS = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season/user/status";
    static PGC_SEASON = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season";
    static SEASON_SECTION = _URLS.P_AUTO + _URLS.D_API + "/pgc/web/season/section";
    static GLOBAL_OGV_VIEW = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/view/app/season";
    static GLOBAL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/playurl";
    static APP_PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurl";
    static ACCOUNT_GETCARDBYMID = _URLS.P_AUTO + _URLS.D_ACCOUNT + "/api/member/getCardByMid";
    static LOGIN_APP_THIRD = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/app/third";
    static PLAYER = _URLS.P_AUTO + _URLS.D_API + "/x/player/v2";
    static PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_APP + "/v2/playurlproj";
    static PGC_PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurlproj";
    static PGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurltv";
    static UGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/x/tv/ugc/playurl";
    static PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/web/playurl";
    static PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/x/player/playurl";
    static INTL_PLAYURL = _URLS.P_AUTO + _URLS.D_APP + "/x/intl/playurl";
    static INTL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_INTL + "/intl/gateway/ogv/player/api/playurl";
    static PLAYURL_INTERFACE = _URLS.P_AUTO + _URLS.D_INTERFACE + "/v2/playurl";
    static PLAYURL_BANGUMI = _URLS.P_AUTO + _URLS.D_BANGUMI + "/player/web_api/v2/playurl";
    static LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/like";
    static HAS_LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/has/like";
    static DM_WEB_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/view";
    static DM_WEB_SEG_SO = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/seg.so";
    static STAT = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/stat";
    static SLIDE_SHOW = _URLS.P_AUTO + _URLS.D_API + "/pgc/operation/api/slideshow";
    static SEARCH_SQUARE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/search/square";
    static SPACE_ARC = _URLS.P_AUTO + _URLS.D_API + "/x/space/wbi/arc/search";
    static NEWLIST = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/newlist";
    static SEARCH = _URLS.P_AUTO + _URLS.D_API + "/search";
    static REPLY = _URLS.P_AUTO + _URLS.D_API + "/x/v2/reply";
    static ARTICLE_UPCOVER = _URLS.P_AUTO + _URLS.D_API + "/x/article/creative/article/upcover";
    static DRAW_IMAGE_UPLOAD = _URLS.P_AUTO + _URLS.D_API_VC + "/api/v1/drawImage/upload";
    static DYNAMIC_UPLOAD_BFS = _URLS.P_AUTO + _URLS.D_API + "/x/dynamic/feed/draw/upload_bfs";
    /** 退出登录 */
    static PASSPORT_LOGIN_EXIT = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/exit/v2";
    static PASSPORT_AUTH_CODE = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/auth_code";
    static PASSPORT_QRCODE_CONFIRM = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/h5/qrcode/confirm";
    static PASSPORT_QRCODE_POLL = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/poll";
  };

  // src/io/grpc/api-dm-web.ts
  var ApiDmWeb = class _ApiDmWeb {
    constructor(aid, cid) {
      this.aid = aid;
      this.cid = cid;
      _ApiDmWeb.Root || _ApiDmWeb.RootInit();
    }
    static Root;
    static DmWebViewReply;
    static DmSegMobileReply;
    static RootInit() {
      this.Root = import_light.Root.fromJSON(dm_web_default);
      this.DmWebViewReply = this.Root.lookupType("DmWebViewReply");
      this.DmSegMobileReply = this.Root.lookupType("DmSegMobileReply");
    }
    danmaku = [];
    /** 获取新版弹幕 */
    async getData() {
      var _a3, _b2;
      if (!this.danmaku.length) {
        const dmWebView = await this.DmWebViewReply();
        const pageSize = dmWebView.dmSge.pageSize ? dmWebView.dmSge.pageSize / 1e3 : 360;
        const total = this.aid == window.aid && ((_b2 = (_a3 = window.player) == null ? void 0 : _a3.getDuration) == null ? void 0 : _b2.call(_a3)) / pageSize + 1 || dmWebView.dmSge.total;
        const promises = [];
        for (let i = 1; i <= total; i++) {
          promises.push(
            this.DmSegMobileReply(i).then((d) => {
              d.elems && (this.danmaku = this.danmaku.concat(d.elems));
            }).catch((e) => {
              console.warn("弹幕丢包:", \`segment_index=\${i}\`, e);
            })
          );
        }
        dmWebView.specialDms && dmWebView.specialDms.forEach((d) => {
          promises.push(
            this.specialDm(d.replace("http:", "")).then((d2) => {
              d2.elems && (this.danmaku = this.danmaku.concat(d2.elems));
            }).catch((e) => {
              console.warn("高级弹幕丢包:", d, e);
            })
          );
        });
        await Promise.all(promises);
        DanmakuBase.sortDmById(this.danmaku);
      }
      return this.danmaku;
    }
    /** 获取旧版弹幕 */
    async toCmd() {
      const danmaku2 = await this.getData();
      return DanmakuBase.parseCmd(danmaku2);
    }
    /** 获取弹幕分包 */
    async DmWebViewReply() {
      const response = await fetch(objUrl(URLS.DM_WEB_VIEW, {
        type: 1,
        oid: this.cid,
        pid: this.aid
      }), { credentials: "include", cache: "force-cache" });
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmWebViewReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmWebViewReply.toObject(msg);
    }
    /** 获取弹幕分包 */
    async DmSegMobileReply(segment_index = 1) {
      const response = await fetch(objUrl(URLS.DM_WEB_SEG_SO, {
        type: 1,
        oid: this.cid,
        pid: this.aid,
        segment_index
      }), { credentials: "include" });
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmSegMobileReply.toObject(msg);
    }
    /** 获取高级弹幕 */
    async specialDm(url) {
      const response = await fetch(url);
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmSegMobileReply.toObject(msg);
    }
  };

  // src/utils/file.ts
  init_tampermonkey();
  function readAs(file, type = "string", encoding = "utf-8") {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      switch (type) {
        case "ArrayBuffer":
          reader.readAsArrayBuffer(file);
          break;
        case "DataURL":
          reader.readAsDataURL(file);
          break;
        case "string":
          reader.readAsText(file, encoding);
          break;
      }
      reader.onload = () => resolve(reader.result);
      reader.onerror = (e) => reject(e);
    });
  }
  async function saveAs(content, fileName, contentType = "text/plain") {
    const a = document.createElement("a");
    const file = new Blob([content], { type: contentType });
    a.href = URL.createObjectURL(file);
    a.download = fileName;
    a.addEventListener("load", () => URL.revokeObjectURL(a.href));
    a.click();
    setTimeout(() => {
      a.remove();
      window.URL.revokeObjectURL(a.href);
    }, 3e3);
  }
  function fileRead(accept, multiple) {
    return new Promise((resolve, reject) => {
      const input = document.createElement("input");
      input.type = "file";
      accept && (input.accept = accept);
      multiple && (input.multiple = multiple);
      input.style.opacity = "0";
      input.addEventListener("cancel", () => {
        reject(new DOMException("The user aborted a request.", "AbortError"));
      });
      input.addEventListener("change", () => {
        resolve(input.multiple ? input.files : input.files[0]);
      });
      input.click();
    });
  }

  // src/utils/format/size.ts
  init_tampermonkey();
  function sizeFormat(size = 0) {
    let unit = ["B", "K", "M", "G"], i = unit.length - 1, dex = 1024 ** i, vor = 1e3 ** i;
    while (dex > 1) {
      if (size >= vor) {
        size = Number((size / dex).toFixed(2));
        break;
      }
      dex = dex / 1024;
      vor = vor / 1e3;
      i--;
    }
    return size ? size + unit[i] : "N/A";
  }

  // src/utils/hook/method.ts
  init_tampermonkey();
  function methodHook(target, propertyKey, callback, modifyArguments) {
    try {
      let modify2 = function() {
        loaded = true;
        if (values[0]) {
          Reflect.defineProperty(target, propertyKey, { configurable: true, value: values[0] });
          iArguments.forEach((d) => values[0](...d));
        } else {
          debug.error("拦截方法出错!", "目标方法", propertyKey, "所属对象", target);
        }
      };
      var modify = modify2;
      const values = [];
      const iArguments = [];
      let loading2 = false;
      let loaded = false;
      Reflect.defineProperty(target, propertyKey, {
        configurable: true,
        set: (v) => {
          if (loading2 && !loaded) {
            values.unshift(v);
          }
          return true;
        },
        get: () => {
          if (!loading2) {
            loading2 = true;
            setTimeout(() => {
              const res = callback();
              if (res && res.finally) {
                res.finally(() => modify2());
              } else {
                modify2();
              }
            });
          }
          return function() {
            modifyArguments == null ? void 0 : modifyArguments(arguments);
            iArguments.push(arguments);
          };
        }
      });
    } catch (e) {
      debug.error(e);
    }
  }
  function propertyHook(target, propertyKey, propertyValue, configurable = true) {
    try {
      Reflect.defineProperty(target, propertyKey, {
        configurable,
        set: (v) => true,
        get: () => {
          Reflect.defineProperty(target, propertyKey, { configurable: true, value: propertyValue });
          return propertyValue;
        }
      });
    } catch (e) {
      debug.error(e);
    }
  }
  propertyHook.modify = (target, propertyKey, callback, once = false) => {
    try {
      let value = target[propertyKey];
      value && (value = callback(value));
      Reflect.defineProperty(target, propertyKey, {
        configurable: true,
        set: (v) => {
          value = callback(v);
          return true;
        },
        get: () => {
          if (once) {
            Reflect.deleteProperty(target, propertyKey);
            Reflect.set(target, propertyKey, value);
          }
          return value;
        }
      });
    } catch (e) {
      debug.error(e);
    }
  };
  function ProxyHandler(target, parrent, key) {
    return new Proxy(target, {
      deleteProperty(target2, p) {
        const res = Reflect.deleteProperty(target2, p);
        parrent[key] = target2;
        return res;
      },
      set(target2, p, newValue, receiver) {
        const res = Reflect.set(target2, p, newValue, receiver);
        parrent[key] = target2;
        return res;
      },
      get(target2, p, receiver) {
        const res = Reflect.get(target2, p, receiver);
        if (isArray(res) || isObject(res)) {
          return ProxyHandler(res, receiver, p);
        }
        return res;
      }
    });
  }
  function propertryChangeHook(target, callback) {
    return new Proxy(target, {
      deleteProperty(target2, p) {
        const res = Reflect.deleteProperty(target2, p);
        callback(p, void 0);
        return res;
      },
      set(target2, p, newValue, receiver) {
        const res = Reflect.set(target2, p, newValue, receiver);
        callback(p, newValue);
        return res;
      },
      get(target2, p, receiver) {
        const res = Reflect.get(target2, p, receiver);
        if (isArray(res) || isObject(res)) {
          return ProxyHandler(res, receiver, p);
        }
        return res;
      }
    });
  }

  // src/utils/hook/worker.ts
  init_tampermonkey();
  var WorkerHook = class _WorkerHook {
    /** Worker.prototype.postMessage backup. */
    static postMessage;
    static postMessageCallback = [];
    /** Worker.prototype.postMessage hook init. */
    static postMessageHook() {
      this.postMessage = Worker.prototype.postMessage;
      Worker.prototype.postMessage = function(message, transfer) {
        let ishook = false;
        _WorkerHook.postMessageCallback.forEach((d) => {
          d.call(this, message, transfer) && (ishook = true);
        });
        ishook || _WorkerHook.postMessage.call(this, message, transfer);
      };
    }
    constructor() {
      _WorkerHook.postMessage || _WorkerHook.postMessageHook();
    }
    /**
     * Worker.prototype.postMessage hook.
     * @param callback 检查并处理\`Worker.prototype.postMessage\`的回调函数,继承原传参,返回 **true** 时拦截该实例。
     * @returns 取消该hook的方法,执行后不再hook。
     */
    postMessage(callback) {
      const id = _WorkerHook.postMessageCallback.push(callback);
      return () => {
        id >= 0 && delete _WorkerHook.postMessageCallback[id - 1];
      };
    }
  };

  // src/utils/utils.ts
  init_tampermonkey();

  // src/io/api-bangumi-season.ts
  init_tampermonkey();

  // src/io/api.ts
  init_tampermonkey();
  function jsonCheck(str) {
    const result = typeof str === "string" ? JSON.parse(str) : str;
    if (result.code === 0)
      return result;
    throw new Error(\`\${result.code} \${result.message}\`, { cause: result.code });
  }

  // src/io/api-bangumi-season.ts
  async function apiBangumiSeason(data) {
    const response = await fetch(objUrl(URLS.BANGUMI_SEASON, data), { credentials: "include" });
    const json = await response.json();
    return jsonCheck(json).result;
  }

  // src/io/api-biliplus-view.ts
  init_tampermonkey();

  // src/utils/hook/xhr.ts
  init_tampermonkey();
  var rules = [];
  var open = XMLHttpRequest.prototype.open;
  XMLHttpRequest.prototype.open = function(...rest) {
    const args = [...rest];
    args[1] && rules.forEach((d) => {
      d && d[0].every((d2) => args[1].includes(d2)) && d[1].call(this, args);
    });
    return open.call(this, ...args);
  };
  function xhrHook(url, modifyOpen, modifyResponse, once = true) {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      once && id && delete rules[id - 1];
      if (modifyOpen)
        try {
          modifyOpen(args);
        } catch (e) {
          debug.error("modifyOpen of xhrhook", one, e);
        }
      if (modifyResponse)
        try {
          this.addEventListener("readystatechange", () => {
            try {
              if (this.readyState === 4) {
                const { responseType } = this;
                const response = { response: this.response, responseType: this.responseType, status: this.status, statusText: this.statusText };
                (this.responseType === "" || this.responseType === "text") && (response.responseText = this.responseText);
                (this.responseType === "" || this.responseType === "document") && (response.responseXML = this.responseXML);
                modifyResponse(response);
                Reflect.defineProperty(this, "response", { configurable: true, value: response.response });
                try {
                  response.responseType && responseType !== response.responseType && setResponseType(response.responseType, this);
                  if (response.responseXML) {
                    response.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: response.responseXML });
                  } else if (response.response) {
                    response.responseText = typeof response.response === "object" ? JSON.stringify(response.response) : response.response;
                    Reflect.defineProperty(this, "responseText", { configurable: true, value: response.responseText });
                  }
                } catch {
                }
              }
            } catch (e) {
              debug.error("modifyResponse of xhrhook", one, e);
            }
          });
        } catch (e) {
          debug.error("modifyResponse of xhrhook", one, e);
        }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  }
  xhrHook.async = (url, condition, modifyResponse, once = true) => {
    let id, temp;
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      try {
        if (!condition || condition(args)) {
          this.xhrhookTimes = this.xhrhookTimes ? this.xhrhookTimes++ : 1;
          id && (temp = rules[id - 1]);
          delete rules[id - 1];
          this.send = () => true;
          (!args[2] || args[2] === true) && (this.timeout = 0);
          const et2 = setInterval(() => {
            this.dispatchEvent(new ProgressEvent("progress"));
          }, 50);
          Reflect.defineProperty(this, "status", { configurable: true, value: 200 });
          Reflect.defineProperty(this, "readyState", { configurable: true, value: 2 });
          this.dispatchEvent(new ProgressEvent("readystatechange"));
          modifyResponse ? modifyResponse(args).then((d) => {
            clearInterval(et2);
            if (d) {
              Reflect.defineProperty(this, "response", { configurable: true, value: d.response });
              d.responseType && setResponseType(d.responseType, this);
              d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText });
              d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML });
              !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] });
              Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 });
              this.dispatchEvent(new ProgressEvent("readystatechange"));
              this.dispatchEvent(new ProgressEvent("load"));
              this.dispatchEvent(new ProgressEvent("loadend"));
            }
          }).catch((d) => {
            if (this.xhrhookTimes === 1) {
              if (d && d.response) {
                Reflect.defineProperty(this, "response", { configurable: true, value: d.response });
                d.responseType && setResponseType(d.responseType, this);
                d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText });
                d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML });
                !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] });
                Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 });
                this.dispatchEvent(new ProgressEvent("readystatechange"));
                this.dispatchEvent(new ProgressEvent("load"));
                this.dispatchEvent(new ProgressEvent("loadend"));
              } else {
                this.dispatchEvent(new ProgressEvent("error"));
              }
            } else {
              this.xhrhookTimes--;
            }
            debug.error("modifyResponse of xhrhookasync", one, d);
          }).finally(() => {
            clearInterval(et2);
            !once && (id = rules.push(temp));
          }) : (this.abort(), !once && (id = rules.push(temp)));
          clearInterval(et2);
        }
      } catch (e) {
        debug.error("condition of xhrhook", one, e);
      }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  };
  function removeXhrhook(id) {
    id >= 0 && delete rules[id - 1];
  }
  xhrHook.ultra = (url, modify) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      try {
        modify.call(this, this, args);
      } catch (e) {
        debug.error("xhrhook modify", one, modify, e);
      }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  };
  function setResponseType(responseType, xhr) {
    Reflect.defineProperty(xhr, "responseType", { configurable: true, value: responseType });
    xhr.getResponseHeader = (name) => {
      if (name === "content-type") {
        switch (xhr.responseType) {
          case "arraybuffer":
          case "blob":
            return "application/octet-stream";
          case "document":
            return "text/xml; charset=utf-8";
          case "json":
            return "application/json; charset=utf-8";
          default:
            return "text/plain; charset=utf-8";
        }
      }
      return "text/plain; charset=utf-8";
    };
    xhr.getAllResponseHeaders = () => {
      switch (xhr.responseType) {
        case "arraybuffer":
        case "blob":
          return "content-type: application/octet-stream\\r\\n";
        case "document":
          return "content-type: text/xml; charset=utf-8\\r\\n";
        case "json":
          return "content-type: application/json; charset=utf-8\\r\\n";
        default:
          return "content-type: text/plain; charset=utf-8\\r\\n";
      }
    };
  }

  // src/io/api-view-detail.ts
  init_tampermonkey();
  var ApiViewDetail = class {
    code = 0;
    data = {
      Card: { archive_count: -1, article_count: -1, card: {}, follower: -1, following: false, like_num: -1, space: {} },
      Related: [],
      Reply: { page: {}, replies: [] },
      Spec: null,
      Tags: [],
      View: {},
      elec: null,
      hot_share: {},
      recommend: null,
      view_addit: {}
    };
    message = "0";
    ttl = 1;
  };
  async function apiViewDetail(aid) {
    const response = await fetch(objUrl(URLS.VIEW_DETAIL, {
      aid
    }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-biliplus-view.ts
  var apiBiliplusView = class {
    constructor(aid) {
      this.aid = aid;
      this.fetch = fetch(objUrl("//www.biliplus.com/api/view", {
        id: aid
      }));
    }
    fetch;
    async getDate() {
      const respense = await this.fetch;
      return await respense.json();
    }
    /** 转化为\`apiViewDetail\`格式 */
    async toDetail() {
      const json = await this.getDate();
      return this.view2Detail(json);
    }
    view2Detail(data) {
      var _a3;
      const result = new ApiViewDetail();
      if (data.v2_app_api) {
        delete data.v2_app_api.redirect_url;
        result.data.Card.follower = (_a3 = data.v2_app_api.owner_ext) == null ? void 0 : _a3.fans;
        result.data.Card.card = { ...data.v2_app_api.owner, ...data.v2_app_api.owner_ext };
        result.data.Tags = data.v2_app_api.tag;
        result.data.View = data.v2_app_api;
        xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => {
          const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`;
          res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
        }, false);
        xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => {
          const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`;
          res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
        }, false);
        return JSON.parse(JSON.stringify(result));
      } else
        return this.view2Detail_v1(data);
    }
    view2Detail_v1(data) {
      var _a3, _b2, _c, _d, _e, _f, _g;
      if ("code" in data) {
        jsonCheck(data);
      }
      const result = new ApiViewDetail();
      const p = Number(getUrlValue("p"));
      result.data.Card.card = {
        face: "//static.hdslb.com/images/akari.jpg",
        mid: data.mid,
        name: data.author,
        vip: {}
      };
      data.list || (data.list = [{
        cid: -1,
        dimension: { width: 1920, height: 1080, rotate: 0 }
      }]);
      result.data.View = {
        aid: data.aid || data.id || this.aid,
        cid: data.list[p ? p - 1 : 0].cid,
        copyright: 1,
        ctime: (_a3 = data.created) != null ? _a3 : 0,
        dimension: { width: 1920, height: 1080, rotate: 0 },
        duration: -1,
        owner: result.data.Card.card,
        pages: data.list.map((d) => {
          d.dimension = { width: 1920, height: 1080, rotate: 0 };
          return d;
        }),
        pic: (_b2 = data.pic) != null ? _b2 : "",
        pubdate: (_c = data.lastupdatets) != null ? _c : 0,
        rights: {},
        stat: {
          aid: data.aid || data.id || this.aid,
          coin: data.coins,
          danmaku: data.video_review,
          dislike: 0,
          evaluation: "",
          favorite: data.favorites,
          his_rank: 0,
          like: -1,
          now_rank: 0,
          reply: -1,
          share: -1,
          view: data.play
        },
        state: 0,
        subtitle: { allow_submit: false, list: [] },
        tid: (_d = data.tid) != null ? _d : 0,
        title: (_e = data.title) != null ? _e : "",
        tname: (_f = data.typename) != null ? _f : "",
        videos: (_g = data.list.length) != null ? _g : 0
      };
      data.bangumi && (result.data.View.season = data.bangumi);
      xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => {
        const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`;
        res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
      }, false);
      xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => {
        const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`;
        res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
      }, false);
      return JSON.parse(JSON.stringify(result));
    }
  };

  // src/io/api-player-pagelist.ts
  init_tampermonkey();
  async function apiPlayerPagelist(aid) {
    const response = await fetch(objUrl(URLS.PAGE_LIST, { aid }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-view.ts
  init_tampermonkey();
  async function apiView(aid) {
    const response = await fetch(objUrl(URLS.VIEW, {
      appkey: "8e9fc618fbd41e28",
      id: aid,
      type: "json"
    }));
    return await response.json();
  }

  // src/io/api-x-view.ts
  init_tampermonkey();
  async function apiXView(aid) {
    const response = await fetch(objUrl(URLS.X_VIEW, { aid }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/utils/av.ts
  init_tampermonkey();
  var AV;
  ((AV2) => {
    const XOR_CODE = 23442827791579n;
    const MASK_CODE = 2251799813685247n;
    const MAX_AID = 1n << 51n;
    const MIN_AID = 1n;
    const BASE = 58n;
    const BYTES = ["B", "V", 1, "", "", "", "", "", "", "", "", ""];
    const BV_LEN = BYTES.length;
    const ALPHABET = [
      "F",
      "c",
      "w",
      "A",
      "P",
      "N",
      "K",
      "T",
      "M",
      "u",
      "g",
      "3",
      "G",
      "V",
      "5",
      "L",
      "j",
      "7",
      "E",
      "J",
      "n",
      "H",
      "p",
      "W",
      "s",
      "x",
      "4",
      "t",
      "b",
      "8",
      "h",
      "a",
      "Y",
      "e",
      "v",
      "i",
      "q",
      "B",
      "z",
      "6",
      "r",
      "k",
      "C",
      "y",
      "1",
      "2",
      "m",
      "U",
      "S",
      "D",
      "Q",
      "X",
      "9",
      "R",
      "d",
      "o",
      "Z",
      "f"
    ];
    const DIGIT_MAP = [0, 1, 2, 9, 7, 5, 6, 4, 8, 3, 10, 11];
    const REG_EXP = new RegExp(\`^[bB][vV]1[\${ALPHABET.join("")}]{9}\$\`, "g");
    const REG_EXP_SHORT = new RegExp(\`^1[\${ALPHABET.join("")}]{9}\$\`, "g");
    const REG_EXP_STR = new RegExp(\`[bB][vV]1[\${ALPHABET.join("")}]{9}\`, "g");
    function toBV(avid) {
      typeof avid === "bigint" || (avid = BigInt(avid));
      if (avid < MIN_AID) {
        throw new RangeError(\`Av \${avid} is smaller than \${MIN_AID}\`);
      }
      if (avid >= MAX_AID) {
        throw new RangeError(\`Av \${avid} is bigger than \${MAX_AID}\`);
      }
      const bytes = Array.from(BYTES);
      let bv_idx = BV_LEN - 1;
      let tmp = (MAX_AID | avid) ^ XOR_CODE;
      while (tmp !== 0n) {
        let table_idx = tmp % BASE;
        bytes[DIGIT_MAP[Number(bv_idx)]] = ALPHABET[Number(table_idx)];
        tmp /= BASE;
        bv_idx -= 1;
      }
      return bytes.join("");
    }
    AV2.toBV = toBV;
    function fromBV(bvid) {
      if (REG_EXP_SHORT.test(bvid)) {
        bvid = "BV" + bvid;
      }
      let r = 0n;
      for (let i = 3; i < BV_LEN; i++) {
        r = r * BASE + BigInt(ALPHABET.indexOf(bvid[DIGIT_MAP[i]]));
      }
      return \`\${r & MASK_CODE ^ XOR_CODE}\`;
    }
    AV2.fromBV = fromBV;
    function fromStr(str) {
      return str.replace(REG_EXP_STR, (s) => "av" + fromBV(s));
    }
    AV2.fromStr = fromStr;
  })(AV || (AV = {}));

  // src/utils/utils.ts
  function getUrlValue(name) {
    const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|\$)", "i");
    const r = window.location.search.substr(1).match(reg);
    if (r != null)
      return decodeURIComponent(r[2]);
    return null;
  }
  var catchs = { aid: {}, ssid: {}, epid: {} };
  async function urlParam(url, redirect = true) {
    url && !url.includes("?") && (url = "?" + url);
    const obj = urlObj(url);
    let { aid, cid, ssid, epid, p } = obj;
    let pgc = false;
    !aid && (aid = obj.avid);
    !aid && url.replace(/[aA][vV]\\d+/, (d) => aid = d.substring(2));
    !aid && url.replace(/[bB][vV]1[fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF]{9}/, (d) => aid = AV.fromBV(d));
    !aid && obj.bvid && (aid = AV.fromBV(obj.bvid));
    aid && !Number(aid) && (aid = AV.fromBV(aid));
    p = p || 1;
    !ssid && (ssid = obj.seasonId);
    !ssid && (ssid = obj.season_id);
    !ssid && url.replace(/[sS][sS]\\d+/, (d) => ssid = d.substring(2));
    !epid && (epid = obj.episodeId);
    !epid && (epid = obj.ep_id);
    !epid && url.replace(/[eE][pP]\\d+/, (d) => epid = d.substring(2));
    if (!ssid && !epid && aid) {
      if (catchs.aid[aid])
        return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
      if (!cid) {
        try {
          let data = await apiXView(aid);
          if (data.redirect_url)
            return urlParam(objUrl(data.redirect_url, { aid, cid, ssid, epid, p }));
          catchs.aid[aid] = data.pages;
          catchs.aid[aid].forEach((d) => d.aid = aid);
          return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
        } catch (e) {
          debug.error("view", e);
          try {
            catchs.aid[aid] = await apiPlayerPagelist(aid);
            catchs.aid[aid].forEach((d) => d.aid = aid);
            return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
          } catch (e2) {
            debug.error("pagelist", e2);
            try {
              catchs.aid[aid] = (await apiView(aid)).list;
              catchs.aid[aid].forEach((d) => d.aid = aid);
              return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
            } catch (e3) {
              debug.error("appkey", e3);
              try {
                let data = await new apiBiliplusView(aid).getDate();
                catchs.aid[aid] = data.list || data.v2_app_api && data.v2_app_api.pages;
                catchs.aid[aid].forEach((d) => d.aid = aid);
                if (redirect && data.v2_app_api && data.v2_app_api.redirect_url)
                  return urlParam(objUrl(data.v2_app_api.redirect_url, { aid, cid, ssid, epid, p }));
                return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
              } catch (e4) {
                debug.error("biliplus", e4);
              }
            }
          }
        }
      }
    }
    if (ssid || epid) {
      if (ssid && catchs.ssid[ssid])
        return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0];
      if (epid && catchs.epid[epid])
        return catchs.epid[epid];
      pgc = true;
      let data = await apiBangumiSeason({ ep_id: epid, season_id: ssid });
      ssid = data.season_id;
      catchs.ssid[ssid] = [];
      data.episodes.forEach((d) => {
        Object.assign(d, { ssid, pgc, epid: d.ep_id });
        catchs.aid[d.aid] = catchs.aid[d.aid] || [];
        catchs.aid[d.aid].push(d);
        catchs.ssid[ssid].push(catchs.epid[d.ep_id] = d);
      });
      if (epid)
        return catchs.epid[epid];
      return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0];
    }
    return { aid, cid, ssid, epid, p, pgc };
  }

  // src/core/toast.ts
  init_tampermonkey();

  // src/html/toast.html
  var toast_default = '<div id="toast-container"></div>\\r\\n<style type="text/css">\\r\\n    .toast-close-button>svg {\\r\\n        width: 12px;\\r\\n        height: 12px;\\r\\n    }\\r\\n\\r\\n    .toast {\\r\\n        transition: height 1s ease 0s, padding 1s ease 0s;\\r\\n    }\\r\\n\\r\\n    #toast-container {\\r\\n        font: 12px Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB, Heiti SC, WenQuanYi Micro Hei, sans-serif;\\r\\n    }\\r\\n</style>\\r\\n<style type="text/css">\\r\\n    /*\\r\\n     * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance,\\r\\n     * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use,\\r\\n     * make sure you copy the url from the website since the url may change between versions.\\r\\n     */\\r\\n    .toast-title {\\r\\n        font-weight: bold;\\r\\n    }\\r\\n\\r\\n    .toast-message {\\r\\n        -ms-word-wrap: break-word;\\r\\n        word-wrap: break-word;\\r\\n    }\\r\\n\\r\\n    .toast-message a,\\r\\n    .toast-message label {\\r\\n        color: #FFFFFF;\\r\\n    }\\r\\n\\r\\n    .toast-message a:hover {\\r\\n        color: #CCCCCC;\\r\\n        text-decoration: none;\\r\\n    }\\r\\n\\r\\n    .toast-close-button {\\r\\n        position: relative;\\r\\n        right: -0.3em;\\r\\n        top: -0.3em;\\r\\n        float: right;\\r\\n        font-size: 20px;\\r\\n        font-weight: bold;\\r\\n        color: #FFFFFF;\\r\\n        -webkit-text-shadow: 0 1px 0 #ffffff;\\r\\n        text-shadow: 0 1px 0 #ffffff;\\r\\n        opacity: 0.8;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\\r\\n        filter: alpha(opacity=80);\\r\\n        line-height: 1;\\r\\n    }\\r\\n\\r\\n    .toast-close-button:hover,\\r\\n    .toast-close-button:focus {\\r\\n        color: #000000;\\r\\n        text-decoration: none;\\r\\n        cursor: pointer;\\r\\n        opacity: 0.4;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\\r\\n        filter: alpha(opacity=40);\\r\\n    }\\r\\n\\r\\n    .rtl .toast-close-button {\\r\\n        left: -0.3em;\\r\\n        float: left;\\r\\n        right: 0.3em;\\r\\n    }\\r\\n\\r\\n    /*Additional properties for button version\\r\\n     iOS requires the button element instead of an anchor tag.\\r\\n     If you want the anchor version, it requires \`href="#"\`.*/\\r\\n    button.toast-close-button {\\r\\n        padding: 0;\\r\\n        cursor: pointer;\\r\\n        background: transparent;\\r\\n        border: 0;\\r\\n        -webkit-appearance: none;\\r\\n    }\\r\\n\\r\\n    .toast-top-center {\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-center {\\r\\n        bottom: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-top-full-width {\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-full-width {\\r\\n        bottom: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-top-left {\\r\\n        top: 12px;\\r\\n        left: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-top-right {\\r\\n        top: 12px;\\r\\n        right: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-right {\\r\\n        right: 12px;\\r\\n        bottom: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-left {\\r\\n        bottom: 12px;\\r\\n        left: 12px;\\r\\n    }\\r\\n\\r\\n    #toast-container {\\r\\n        position: fixed;\\r\\n        z-index: 999999;\\r\\n        pointer-events: none;\\r\\n        /*overrides*/\\r\\n    }\\r\\n\\r\\n    #toast-container * {\\r\\n        -moz-box-sizing: border-box;\\r\\n        -webkit-box-sizing: border-box;\\r\\n        box-sizing: border-box;\\r\\n    }\\r\\n\\r\\n    #toast-container>div {\\r\\n        position: relative;\\r\\n        pointer-events: auto;\\r\\n        overflow: hidden;\\r\\n        margin: 0 0 6px;\\r\\n        padding: 15px 15px 15px 50px;\\r\\n        width: 300px;\\r\\n        -moz-border-radius: 3px 3px 3px 3px;\\r\\n        -webkit-border-radius: 3px 3px 3px 3px;\\r\\n        border-radius: 3px 3px 3px 3px;\\r\\n        background-position: 15px center;\\r\\n        background-repeat: no-repeat;\\r\\n        -moz-box-shadow: 0 0 12px #999999;\\r\\n        -webkit-box-shadow: 0 0 12px #999999;\\r\\n        box-shadow: 0 0 12px #999999;\\r\\n        color: #FFFFFF;\\r\\n        opacity: 0.8;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\\r\\n        filter: alpha(opacity=80);\\r\\n    }\\r\\n\\r\\n    #toast-container>div.rtl {\\r\\n        direction: rtl;\\r\\n        padding: 15px 50px 15px 15px;\\r\\n        background-position: right 15px center;\\r\\n    }\\r\\n\\r\\n    #toast-container>div:hover {\\r\\n        -moz-box-shadow: 0 0 12px #000000;\\r\\n        -webkit-box-shadow: 0 0 12px #000000;\\r\\n        box-shadow: 0 0 12px #000000;\\r\\n        opacity: 1;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\\r\\n        filter: alpha(opacity=100);\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-info {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-error {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-success {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-warning {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container.toast-top-center>div,\\r\\n    #toast-container.toast-bottom-center>div {\\r\\n        width: 300px;\\r\\n        margin-left: auto;\\r\\n        margin-right: auto;\\r\\n    }\\r\\n\\r\\n    #toast-container.toast-top-full-width>div,\\r\\n    #toast-container.toast-bottom-full-width>div {\\r\\n        width: 96%;\\r\\n        margin-left: auto;\\r\\n        margin-right: auto;\\r\\n    }\\r\\n\\r\\n    .toast {\\r\\n        background-color: #030303;\\r\\n    }\\r\\n\\r\\n    .toast-success {\\r\\n        background-color: #51A351;\\r\\n    }\\r\\n\\r\\n    .toast-error {\\r\\n        background-color: #BD362F;\\r\\n    }\\r\\n\\r\\n    .toast-info {\\r\\n        background-color: #2F96B4;\\r\\n    }\\r\\n\\r\\n    .toast-warning {\\r\\n        background-color: #F89406;\\r\\n    }\\r\\n\\r\\n    .toast-progress {\\r\\n        position: absolute;\\r\\n        left: 0;\\r\\n        bottom: 0;\\r\\n        height: 4px;\\r\\n        background-color: #000000;\\r\\n        opacity: 0.4;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\\r\\n        filter: alpha(opacity=40);\\r\\n    }\\r\\n\\r\\n    /*Responsive Design*/\\r\\n    @media all and (max-width: 240px) {\\r\\n        #toast-container>div {\\r\\n            padding: 8px 8px 8px 50px;\\r\\n            width: 11em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 8px 50px 8px 8px;\\r\\n        }\\r\\n\\r\\n        #toast-container .toast-close-button {\\r\\n            right: -0.2em;\\r\\n            top: -0.2em;\\r\\n        }\\r\\n\\r\\n        #toast-container .rtl .toast-close-button {\\r\\n            left: -0.2em;\\r\\n            right: 0.2em;\\r\\n        }\\r\\n    }\\r\\n\\r\\n    @media all and (min-width: 241px) and (max-width: 480px) {\\r\\n        #toast-container>div {\\r\\n            padding: 8px 8px 8px 50px;\\r\\n            width: 18em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 8px 50px 8px 8px;\\r\\n        }\\r\\n\\r\\n        #toast-container .toast-close-button {\\r\\n            right: -0.2em;\\r\\n            top: -0.2em;\\r\\n        }\\r\\n\\r\\n        #toast-container .rtl .toast-close-button {\\r\\n            left: -0.2em;\\r\\n            right: 0.2em;\\r\\n        }\\r\\n    }\\r\\n\\r\\n    @media all and (min-width: 481px) and (max-width: 768px) {\\r\\n        #toast-container>div {\\r\\n            padding: 15px 15px 15px 50px;\\r\\n            width: 25em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 15px 50px 15px 15px;\\r\\n        }\\r\\n    }\\r\\n</style>';

  // src/svg/fork.svg
  var fork_default = '<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.284996 0.286944C0.480258 0.091682 0.796841 0.0916819 0.992103 0.286944L4.99893 4.29377L9.00684 0.285851C9.20211 0.0905889 9.51869 0.0905886 9.71395 0.285851C9.90921 0.481113 9.90921 0.797696 9.71395 0.992958L5.70603 5.00088L9.71309 9.00793C9.90835 9.20319 9.90835 9.51978 9.71309 9.71504C9.51783 9.9103 9.20124 9.9103 9.00598 9.71504L4.99893 5.70798L0.992966 9.71394C0.797704 9.90921 0.481122 9.90921 0.28586 9.71394C0.0905973 9.51868 0.0905975 9.2021 0.28586 9.00684L4.29182 5.00088L0.284996 0.994051C0.0897343 0.798789 0.0897342 0.482206 0.284996 0.286944Z" fill="#E19C2C"></path></svg>';

  // src/utils/type.ts
  init_tampermonkey();
  function toObject(input) {
    switch (input) {
      case "undefined":
        input = void 0;
        break;
      case "null":
        input = null;
        break;
      case "NaN":
        input = NaN;
        break;
      default:
        if (!input)
          break;
        try {
          const temp = JSON.parse(input);
          if (typeof temp !== "number" || input === String(temp)) {
            input = temp;
          }
        } catch {
          try {
            const temp = Number(input);
            if (String(temp) !== "NaN" && !input.startsWith("0")) {
              input = temp;
            }
          } catch {
          }
          try {
            if (/^\\d+n\$/.test(input))
              input = BigInt(input.slice(0, -1));
          } catch {
          }
        }
        break;
    }
    return input;
  }
  function toString(input, space = "\\n") {
    let result;
    try {
      result = input.toString();
    } catch {
      result = String(input);
    }
    if (result.startsWith("[object") && result.endsWith("]")) {
      try {
        const str = JSON.stringify(input, void 0, space);
        str === "{}" || (result = str);
      } catch {
      }
    }
    return result;
  }

  // src/core/toast.ts
  var Toastconfig = {
    position: "top-right",
    rtl: false,
    delay: 4,
    disabled: false
  };
  var Toast = class extends HTMLDivElement {
    /** 关闭按钮 */
    closeButton = document.createElement("div");
    /** 消息节点 */
    message = document.createElement("div");
    /** 延时 */
    timer;
    /** 鼠标移入 */
    hovering = false;
    /** 延时结束 */
    timeout = false;
    /** 是否输出到控制台 */
    debug = false;
    constructor() {
      super();
      this.classList.add("toast");
      this.setAttribute("aria-live", "assertive");
      this.fadeOut();
      this.appendChild(this.message);
      this.message.className = "toast-message";
      this.closeButton.className = "toast-close-button";
      this.closeButton.innerHTML = fork_default;
      this.closeButton.addEventListener("click", (e) => {
        this.timeout = true;
        this.delay = 1;
        e.stopPropagation();
      });
      this.addEventListener("mouseover", () => this.hovering = true);
      this.addEventListener("mouseout", () => {
        this.hovering = false;
        this.timeout && (this.delay = 1);
      });
    }
    /** 更新内容 */
    value(v) {
      isArray(v) || (v = [v]);
      let html = "";
      v.forEach((d, i) => {
        d = toString(d);
        html += i ? \`<br>\${d}\` : \`<label>\${d}</label>\`;
      });
      v.length || this.fadeOut();
      const close = this.message.contains(this.closeButton);
      this.message.innerHTML = html;
      close && (this.delay = 0);
      v.length && this.fadeIn();
    }
    /** 代理对象暂存 */
    _data = [];
    \$data = [];
    get data() {
      return this._data;
    }
    /** 内容 */
    set data(v) {
      this.\$data = v;
      this.value(v);
      this._data = propertryChangeHook(v, () => this.value(v));
    }
    /** 类型 */
    set type(v) {
      this.classList.remove("toast-success", "toast-error", "toast-info", "toast-warning");
      v && this.classList.add(\`toast-\${v}\`);
    }
    /** 镜像 */
    set rtl(v) {
      v ? this.classList.add("rtl") : this.classList.remove("rtl");
    }
    /** 时长 */
    set delay(v) {
      clearTimeout(this.timer);
      v = Math.max(Math.trunc(v), 0);
      v ? this.message.contains(this.closeButton) && this.closeButton.remove() : this.message.contains(this.closeButton) || this.message.insertBefore(this.closeButton, this.message.firstChild);
      if (v === 1) {
        if (!this.hovering) {
          this.fadeOut(true);
        }
      } else if (v !== 0) {
        this.timer = setTimeout(() => {
          this.timeout = true;
          this.delay = 1;
        }, v * 1e3);
      }
    }
    /** 添加消息 */
    push(...items) {
      return this.data.push(...items);
    }
    /** 弹出第一条消息 */
    shift() {
      return this.data.shift();
    }
    /** 添加置顶消息 */
    unshift(...items) {
      return this.data.unshift(...items);
    }
    /** 弹出末尾的消息 */
    pop() {
      return this.data.pop();
    }
    /** 淡入 */
    fadeIn() {
      this.setAttribute("style", \`height: \${this.message.scrollHeight + 30}px;\`);
    }
    /** 淡出 */
    fadeOut(remove = false) {
      this.setAttribute("style", "padding-top: 0px;padding-bottom: 0px;height: 0px;");
      if (remove) {
        setTimeout(() => this.remove(), 1e3);
        if (this.debug && this.\$data.length) {
          debug.group(this.\$data.shift());
          this.\$data.forEach((d) => {
            d instanceof Error ? debug.error(d) : debug(d);
          });
          debug.groupEnd();
        }
      }
    }
  };
  customElements.get(\`toast-\${"1272ee5"}\`) || customElements.define(\`toast-\${"1272ee5"}\`, Toast, { extends: "div" });
  var ToastContainer = class extends HTMLElement {
    /** 实际根节点 */
    container;
    static get observedAttributes() {
      return [
        "position",
        "rtl",
        "delay",
        "disabled"
      ];
    }
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = toast_default;
      this.container = root.children[0];
    }
    /** 刷新配置 */
    update(value) {
      Object.entries(value).forEach((d) => {
        this[d[0]] = d[1];
      });
    }
    toast(delay, type = "info", ...data) {
      document.body.contains(this) || document.body.appendChild(this);
      const toast2 = new Toast();
      toast2.type = type;
      toast2.rtl = this.rtl;
      this.container.insertBefore(toast2, this.container.firstChild);
      delay === 0 && (toast2.debug = true);
      toast2.data = data;
      toast2.delay = delay;
      return toast2;
    }
    /**
     * 可拓展toast,用于需要动态增减消息。  
     * 无数据时隐藏,有数据时显现。默认为info类型。
     * @param data 初始信息,可为空。
     * @example
     * const T = toast.list(); // 生成toast(隐藏)。
     * T.data.push(123); // 添加一条消息123,toast显现。data属性本质是数组,可以使用任何数组方法更改消息。
     * T.type = 'warning'; // 更改toast样式为warning。
     * T.rtl = true; // 镜像toast。
     * T.data.pop(); // 删除最后一条消息,消息变为空,toast自动隐藏。
     * T.delay = 4; // 启用倒计时,单位/秒,倒计时结束后toast将被移除。也就是对象\`T\`不再响应任何操作,所以除非不需要再拓展,否则请不要修改\`delay\`属性。
     * T.fadeOut(); // 隐藏toast但不移除。
     * T.fadeOut(true); // 移除toast,效果同T.delay = 1。
     */
    list(...data) {
      return this.toast(0, "info", ...data);
    }
    success(...data) {
      this.toast(this.delay, "success", ...data);
      return () => {
        debug(...data);
      };
    }
    error(...data) {
      this.toast(this.delay, "error", ...data);
      return () => {
        debug.error(...data);
      };
    }
    info(...data) {
      this.toast(this.delay, "info", ...data);
      return () => {
        debug.debug(...data);
      };
    }
    warning(...data) {
      this.toast(this.delay, "warning", ...data);
      return () => {
        debug.warn(...data);
      };
    }
    set position(v) {
      this.setAttribute("position", v);
    }
    /** 位置 */
    get position() {
      return this.getAttribute("position");
    }
    set rtl(v) {
      this.setAttribute("rtl", v);
    }
    /** 镜像 */
    get rtl() {
      return toObject(this.getAttribute("rtl"));
    }
    set delay(v) {
      this.setAttribute("delay", v);
    }
    /** 延时 */
    get delay() {
      return toObject(this.getAttribute("delay"));
    }
    set disabled(v) {
      this.setAttribute("disabled", v);
    }
    /** 禁用 */
    get disabled() {
      return toObject(this.getAttribute("disabled"));
    }
    attributeChangedCallback(name, oldValue, newValue) {
      if (oldValue === newValue)
        return;
      switch (name) {
        case "position":
          newValue && (this.container.className = \`toast-\${newValue}\`);
          break;
        case "rtl":
          this.container.querySelectorAll(".toast").forEach((d) => {
            d.rtl = toObject(newValue);
          });
          break;
        case "delay":
          this.container.querySelectorAll(".toast").forEach((d) => {
            d.delay = toObject(newValue);
          });
          break;
        case "disabled":
          this.container.style.display = toObject(newValue) ? "none" : "";
        default:
          break;
      }
    }
  };
  customElements.get(\`toast-container-\${"1272ee5"}\`) || customElements.define(\`toast-container-\${"1272ee5"}\`, ToastContainer);
  var toast = new ToastContainer();

  // src/core/user.ts
  init_tampermonkey();

  // src/core/userstatus.ts
  init_tampermonkey();

  // src/core/ui/entry.ts
  init_tampermonkey();

  // src/html/ui-entry.html
  var ui_entry_default = '<div class="setting">\\r\\n    <i></i><span>设置</span>\\r\\n</div>\\r\\n<div class="gear"></div>\\r\\n<style type="text/css">\\r\\n    .gear {\\r\\n        position: fixed;\\r\\n        right: 40px;\\r\\n        bottom: 60px;\\r\\n        height: 20px;\\r\\n        width: 20px;\\r\\n        border: 1px solid #e9eaec;\\r\\n        border-radius: 50%;\\r\\n        box-shadow: 0 0 12px 4px rgb(106, 115, 133, 22%);\\r\\n        padding: 10px;\\r\\n        cursor: pointer;\\r\\n        animation: roll 1s ease-out;\\r\\n        transition: opacity 0.3s ease-out;\\r\\n        background: none;\\r\\n        z-index: 11110;\\r\\n    }\\r\\n\\r\\n    .setting {\\r\\n        box-sizing: content-box;\\r\\n        color: #fff;\\r\\n        background-color: #fff;\\r\\n        border-radius: 5px;\\r\\n        position: fixed;\\r\\n        bottom: 65px;\\r\\n        width: 56px;\\r\\n        height: 40px;\\r\\n        transition: right 0.7s;\\r\\n        -moz-transition: right 0.7s;\\r\\n        -webkit-transition: right 0.7s;\\r\\n        -o-transition: right 0.7s;\\r\\n        z-index: 11110;\\r\\n        padding: 4px;\\r\\n        right: -54px;\\r\\n    }\\r\\n\\r\\n    .setting:hover {\\r\\n        right: 0px;\\r\\n        box-shadow: rgba(0, 85, 255, 0.098) 0px 0px 20px 0px;\\r\\n        border: 1px solid rgb(233, 234, 236);\\r\\n    }\\r\\n\\r\\n    .setting i {\\r\\n        background-position: -471px -982px;\\r\\n        display: block;\\r\\n        width: 20px;\\r\\n        height: 20px;\\r\\n        transition: 0.2s;\\r\\n        background-image: url(//static.hdslb.com/images/base/icons.png);\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    .setting span {\\r\\n        font-size: 14px;\\r\\n        display: block;\\r\\n        width: 50%;\\r\\n        transition: 0.2s;\\r\\n        color: #000;\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    @keyframes roll {\\r\\n\\r\\n        30%,\\r\\n        60%,\\r\\n        90% {\\r\\n            transform: scale(1) rotate(0deg);\\r\\n        }\\r\\n\\r\\n        10%,\\r\\n        40%,\\r\\n        70% {\\r\\n            transform: scale(1.11) rotate(-180deg);\\r\\n        }\\r\\n\\r\\n        20%,\\r\\n        50%,\\r\\n        80% {\\r\\n            transform: scale(0.9) rotate(-360deg);\\r\\n        }\\r\\n    }\\r\\n</style>';

  // src/svg/gear.svg
  var gear_default = '<svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></svg>';

  // src/core/ui/entry.ts
  var UiEntryType = "new";
  var BilioldEntry = class extends HTMLElement {
    /** 旧版按钮 */
    stage;
    /** 新版按钮 */
    gear;
    /** 实际节点 */
    root;
    /** 实际根节点 */
    static get observedAttributes() {
      return [
        "type"
      ];
    }
    constructor() {
      super();
      this.root = this.attachShadow({ mode: "closed" });
      this.root.innerHTML = ui_entry_default;
      this.stage = this.root.children[0];
      this.gear = this.root.children[1];
      this.gear.innerHTML = gear_default;
      this.stage.remove();
      this.gear.remove();
      this.gear.addEventListener("mouseover", () => this.gear.style.opacity = "0.8");
      this.gear.addEventListener("mouseout", () => this.gear.style.opacity = "0");
    }
    get type() {
      return this.getAttribute("type");
    }
    set type(v) {
      this.setAttribute("type", v);
    }
    attributeChangedCallback(name, oldValue, newValue) {
      if (oldValue === newValue)
        return;
      switch (name) {
        case "type":
          if (newValue === "old") {
            this.root.contains(this.gear) && this.gear.remove();
            this.root.contains(this.stage) || this.root.appendChild(this.stage);
          } else {
            this.root.contains(this.stage) && this.stage.remove();
            if (!this.root.contains(this.gear)) {
              this.root.appendChild(this.gear);
              setTimeout(() => {
                this.gear.style.opacity = "0";
              }, 2e3);
            }
          }
          break;
        default:
          break;
      }
    }
  };
  customElements.get("biliold-entry-1272ee5") || customElements.define("bilibili-entry-1272ee5", BilioldEntry);

  // src/core/userstatus.ts
  var userStatus = {
    /** 开发者模式 */
    development: true,
    /** 主页 */
    index: true,
    /** toastr */
    toast: Toastconfig,
    /** 替换全局顶栏 */
    header: true,
    /** 翻页评论区 */
    comment: true,
    /** av */
    av: true,
    /** 嵌入式播放器 */
    player: true,
    /** WebRTC */
    webRTC: false,
    /** 充电鸣谢 */
    elecShow: true,
    /** 合作UP */
    staff: false,
    /** bangumi */
    bangumi: true,
    /** 解除限制 */
    videoLimit: {
      /** 开关 */
      status: false,
      /** 服务器类型 */
      server: "内置",
      /** 东南亚(泰区)代理服务器 */
      th: "api.global.bilibili.com",
      /** 台湾代理服务器 */
      tw: "",
      /** 香港代理服务器 */
      hk: "",
      /** 大陆代理服务器 */
      cn: ""
    },
    /** UPOS替换 */
    uposReplace: {
      /** 东南亚(泰区) */
      th: "ks3(金山)",
      /** 港澳台 */
      gat: "不替换",
      /** 一般视频 */
      nor: "不替换",
      /** 下载 */
      download: "不替换"
    },
    /** 强制显示bangumi分p */
    bangumiEplist: false,
    /** 账户授权 */
    accessKey: {
      /** access_key */
      token: void 0,
      /** 授权日期 */
      date: 0,
      /** 授权日期字符串 */
      dateStr: ""
    },
    /** 稍后再看 */
    watchlater: true,
    /** 播单 */
    playlist: true,
    /** 全站排行榜 */
    ranking: true,
    /** 专栏 */
    read: true,
    /** 搜索 */
    search: true,
    /** 相簿 */
    album: true,
    /** 注册时间 */
    jointime: false,
    /** 失效视频 */
    lostVideo: true,
    /** 纯视频历史 */
    history: true,
    /** 动态里的直播录屏 */
    liveRecord: false,
    /** 设置入口样式 */
    uiEntryType: UiEntryType,
    /** 自动化操作 */
    automate: {
      /** 展开弹幕列表 */
      danmakuFirst: false,
      /** 滚动到播放器 */
      showBofqi: false,
      /** 自动宽屏 */
      screenWide: false,
      /** 自动关弹幕 */
      noDanmaku: false,
      /** 自动播放 */
      autoPlay: false,
      /** 自动网页全屏 */
      webFullScreen: false,
      /** 记忆播放速率 */
      videospeed: false
    },
    /** 关闭抗锯齿 */
    videoDisableAA: false,
    /** 禁用直播间挂机检测 */
    disableSleepChcek: true,
    /** 禁止上报 */
    disableReport: true,
    /** 禁用评论跳转标题 */
    commentJumpUrlTitle: false,
    /** 合集 */
    ugcSection: false,
    /** 请求的文件类型 */
    downloadType: ["mp4"],
    /** 请求无水印源 */
    TVresource: false,
    /** 画质 */
    downloadQn: 127,
    /** 下载方式 */
    downloadMethod: "浏览器",
    /** User-Agent */
    userAgent: "Bilibili Freedoooooom/MarkII",
    /** referer */
    referer: "https://www.bilibili.com",
    /** 下载目录 */
    filepath: "",
    /** aria2 */
    aria2: {
      /** 服务器 */
      server: "http://localhost",
      /** 端口 */
      port: 6800,
      /** 令牌 */
      token: "",
      /** 分片数目 */
      split: 4,
      /** 分片大小 */
      size: 20
    },
    ef2: {
      /** 稍后下载 */
      delay: false,
      /** 静默下载 */
      silence: false
    },
    /** 点赞功能 */
    like: false,
    /** 重构播放器脚本 */
    bilibiliplayer: true,
    /** 检查播放器脚本更新 */
    checkUpdate: true,
    /** 不登录1080P支持 */
    show1080p: false,
    /** 调整顶栏banner样式 */
    fullBannerCover: false,
    /** 原生播放器新版弹幕 */
    dmproto: true,
    /** 普权弹幕换行 */
    dmwrap: true,
    /** 弹幕格式 */
    dmExtension: "xml",
    /** 合并已有弹幕 */
    dmContact: false,
    /** 分集数据 */
    episodeData: false,
    /** 港澳台新番时间表 */
    timeLine: false,
    /** 字幕:繁 -> 简 */
    simpleChinese: true,
    /** 资源cdn */
    cdn: "jsdelivr",
    /** 弹幕保护计划 */
    danmakuProtect: false,
    /** 下载按钮 */
    downloadButton: false,
    /** 全区域搜索 */
    searchAllArea: false,
    /** 评论图片 */
    commentPicture: true,
    /** 分区主页 */
    channel: true,
    /** 拦截视频心跳 */
    heartbeatBlock: false,
    /** 稍后再看重定向 */
    watchlater2Av: false
  };

  // src/core/ui/alert.ts
  init_tampermonkey();

  // src/utils/element.ts
  init_tampermonkey();

  // src/utils/poll.ts
  init_tampermonkey();
  function poll(check, callback, delay = 100, stop = 180) {
    let timer = setInterval(() => {
      const d = check();
      if (d) {
        clearInterval(timer);
        callback(d);
      }
    }, delay);
    stop && setTimeout(() => clearInterval(timer), stop * 1e3);
  }

  // src/utils/element.ts
  function addElement(tag, attribute, parrent, innerHTML, top, replaced) {
    const element = document.createElement(tag);
    attribute && Object.entries(attribute).forEach((d) => element.setAttribute(d[0], d[1]));
    innerHTML && element.insertAdjacentHTML("beforeend", innerHTML);
    replaced ? replaced.replaceWith(element) : parrent && (top ? parrent.insertAdjacentElement("afterbegin", element) : parrent.insertAdjacentElement("beforeend", element));
    return element;
  }
  async function addCss(txt, id, parrent) {
    if (!parrent && !document.head) {
      await new Promise((r) => poll(() => document.body, r));
    }
    parrent = parrent || document.head;
    const style = document.createElement("style");
    style.setAttribute("type", "text/css");
    id && !parrent.querySelector(\`#\${id}\`) && style.setAttribute("id", id);
    style.appendChild(document.createTextNode(txt));
    parrent.appendChild(style);
    return style;
  }
  function loadScript(src, onload) {
    return new Promise((r, j) => {
      const script = document.createElement("script");
      script.type = "text/javascript";
      script.src = src;
      script.addEventListener("load", () => {
        script.remove();
        onload && onload();
        r(true);
      });
      script.addEventListener("error", () => {
        script.remove();
        j();
      });
      (document.body || document.head || document.documentElement || document).appendChild(script);
    });
  }
  function offset(ele) {
    const box = ele.getBoundingClientRect();
    const body = document.body;
    const docElem = document.documentElement;
    const scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
    const scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
    const clientTop = docElem.clientTop || body.clientTop;
    const clientLeft = docElem.clientLeft || body.clientLeft;
    const top = box.top + scrollTop - clientTop;
    const left = box.left + scrollLeft - clientLeft;
    return {
      //Math.round 兼容火狐浏览器bug
      top: Math.round(top),
      left: Math.round(left)
    };
  }

  // src/core/ui/utils/button.ts
  init_tampermonkey();

  // src/html/button.html
  var button_default = '<div class="button" role="button">按钮</div>\\r\\n<style>\\r\\n    .button {\\r\\n        width: fit-content;\\r\\n        cursor: pointer;\\r\\n        line-height: 28px;\\r\\n        padding-left: 10px;\\r\\n        padding-right: 10px;\\r\\n        text-align: right;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        border-radius: 4px;\\r\\n        color: #222;\\r\\n        transition: border-color .2s ease, background-color .2s ease;\\r\\n        box-sizing: border-box;\\r\\n        user-select: none;\\r\\n    }\\r\\n\\r\\n    .button:hover {\\r\\n        color: #00a1d6;\\r\\n        border-color: #00a1d6;\\r\\n    }\\r\\n\\r\\n    .button:active {\\r\\n        background-color: #eee;\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/button.ts
  var PushButton = class extends HTMLElement {
    _button;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = button_default;
      this._button = root.querySelector(".button");
      this._button.addEventListener("click", (e) => {
        e.stopPropagation();
        this.dispatchEvent(new Event("change"));
      });
    }
    set text(v) {
      this._button.textContent = v;
    }
  };
  customElements.get(\`button-\${"1272ee5"}\`) || customElements.define(\`button-\${"1272ee5"}\`, PushButton);

  // src/core/ui/utils/popupbox.ts
  init_tampermonkey();

  // src/html/popupbox.html
  var popupbox_default = '<div class="box">\\r\\n    <div class="contain"></div>\\r\\n    <div class="fork"></div>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .box {\\r\\n        top: 50%;\\r\\n        left: 50%;\\r\\n        transform: translateX(-50%) translateY(-50%);\\r\\n        transition: 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);\\r\\n        padding: 12px;\\r\\n        background-color: #fff;\\r\\n        color: black;\\r\\n        border-radius: 8px;\\r\\n        box-shadow: 0 4px 12px 0 rgb(0 0 0 / 5%);\\r\\n        border: 1px solid rgba(136, 136, 136, 0.13333);\\r\\n        box-sizing: border-box;\\r\\n        position: fixed;\\r\\n        font-size: 13px;\\r\\n        z-index: 11115;\\r\\n        line-height: 14px;\\r\\n    }\\r\\n\\r\\n    .contain {\\r\\n        display: flex;\\r\\n        flex-direction: column;\\r\\n        height: 100%;\\r\\n    }\\r\\n\\r\\n    .fork {\\r\\n        position: absolute;\\r\\n        transform: scale(0.8);\\r\\n        right: 10px;\\r\\n        top: 10px;\\r\\n        height: 20px;\\r\\n        width: 20px;\\r\\n        pointer-events: visible;\\r\\n    }\\r\\n\\r\\n    .fork:hover {\\r\\n        border-radius: 50%;\\r\\n        background-color: rgba(0, 0, 0, 10%);\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/popupbox.ts
  var ClickOutRemove = class {
    constructor(target) {
      this.target = target;
      target.addEventListener("click", (e) => e.stopPropagation());
    }
    /** 已启用监听 */
    enabled = false;
    /** 移除节点 */
    remove = () => {
      this.target.remove();
    };
    /** 停止监听 */
    disable = () => {
      if (this.enabled) {
        document.removeEventListener("click", this.remove);
        this.enabled = false;
      }
      return this;
    };
    /** 开始监听 */
    enable = () => {
      this.enabled || setTimeout(() => {
        document.addEventListener("click", this.remove, { once: true });
        this.enabled = true;
      }, 100);
      return this;
    };
  };
  var PopupBox = class extends HTMLElement {
    _contain;
    _fork;
    clickOutRemove;
    \$fork = true;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = popupbox_default;
      this._contain = root.children[0].children[0];
      this._fork = root.children[0].children[1];
      this._fork.innerHTML = fork_default;
      this._fork.addEventListener("click", () => this.remove());
      this.clickOutRemove = new ClickOutRemove(this);
      document.body.appendChild(this);
    }
    insertAdjacentElement(where, element) {
      this._contain.insertAdjacentElement(where, element);
      return element;
    }
    insertAdjacentHTML(position, text) {
      return this._contain.insertAdjacentHTML(position, text);
    }
    insertAdjacentText(where, data) {
      return this._contain.insertAdjacentText(where, data);
    }
    append(...nodes) {
      this._contain.append(...nodes);
    }
    appendChild(node) {
      this._contain.appendChild(node);
      return node;
    }
    replaceChildren(...nodes) {
      this._contain.replaceChildren(...nodes);
    }
    setAttribute(qualifiedName, value) {
      this._contain.setAttribute(qualifiedName, value);
    }
    getAttribute(qualifiedName) {
      return this._contain.getAttribute(qualifiedName);
    }
    get style() {
      return this._contain.style;
    }
    get innerHTML() {
      return this._contain.innerHTML;
    }
    set innerHTML(v) {
      this._contain.innerHTML = v;
    }
    /** 设置是否显示关闭按钮,不显示则点击节点外部自动关闭 */
    get fork() {
      return this.\$fork;
    }
    set fork(v) {
      this.\$fork = v;
      this._fork.style.display = v ? "" : "none";
      if (v) {
        this.clickOutRemove.disable();
      } else {
        this.clickOutRemove.enable();
      }
    }
  };
  customElements.get(\`popupbox-\${"1272ee5"}\`) || customElements.define(\`popupbox-\${"1272ee5"}\`, PopupBox);

  // src/core/ui/alert.ts
  function alert(msg, title, buttons, fork = false) {
    isArray(msg) || (msg = [msg]);
    msg = msg.join("</br>");
    const popup = new PopupBox();
    popup.fork = fork;
    popup.setAttribute("style", "max-width: 400px; max-height: 300px;line-height: 16px;");
    popup.innerHTML = \`<div style="text-align: center;font-size: 16px;font-weight: bold;margin-bottom: 10px;">
    <span>\${title || "Bilibili Old"}</span>
</div>
<div><div style="padding-block: 10px;padding-inline: 15px;">\${msg}</div></div>\`;
    if (buttons) {
      addElement("hr", { style: "width: 100%;opacity: .3;" }, popup);
      const div = addElement("div", { style: "display: flex;align-items: center;justify-content: space-around;" }, popup);
      buttons.forEach((d) => {
        const button = new PushButton();
        button.text = d.text;
        button.addEventListener("change", () => {
          var _a3;
          (_a3 = d.callback) == null ? void 0 : _a3.call(d);
          popup.remove();
        });
        div.appendChild(button);
      });
    }
  }

  // src/core/user.ts
  var User = class {
    /** 用户数据,除非确定已初始化,否则请使用\`addCallback\`用户数据回调代替 */
    userStatus;
    /** 初始化标记 */
    initialized = false;
    /** 更新CD */
    updating;
    /** 回调栈 */
    changes = {};
    /** 更新存储延时 */
    timer;
    /** 用户数据加载回调序列 */
    userLoadedCallbacks = [];
    constructor() {
      GM.getValue("userStatus", userStatus).then((status) => {
        var _a3;
        status = Object.assign(userStatus, status);
        const proxy = propertryChangeHook(status, (key, value) => {
          clearTimeout(this.timer);
          this.timer = setTimeout(() => GM.setValue("userStatus", status));
          this.emitChange(key, value);
        });
        this.userStatus = proxy;
        this.initialized = true;
        while (this.userLoadedCallbacks.length) {
          (_a3 = this.userLoadedCallbacks.shift()) == null ? void 0 : _a3(proxy);
        }
      });
    }
    /**
     * 监听设置改动
     * @param key 设置键
     * @param callback 设置项变动时执行的回调,新值将作为第一个参数传入
     * @returns 用于取消监听的回调
     */
    bindChange(key, callback) {
      this.changes[key] || (this.changes[key] = []);
      const id = this.changes[key].push(callback);
      return () => {
        delete this.changes[key][id - 1];
      };
    }
    /**
     * 推送设置改动
     * @param key 设置键
     * @param newValue 新值
     */
    emitChange(key, newValue) {
      this.changes[key].forEach(async (d) => {
        d(newValue);
      });
    }
    /** 用户数据回调 */
    addCallback(callback) {
      if (typeof callback === "function") {
        if (this.initialized) {
          callback(this.userStatus);
        } else {
          this.userLoadedCallbacks.push(callback);
        }
      }
    }
    /** 恢复默认数据 */
    restoreUserStatus() {
      GM.deleteValue("userStatus");
      toast.warning("已恢复默认设置数据,请<strong>刷新</strong>页面以避免数据紊乱!");
    }
    /** 备份设置数据 */
    outputUserStatus() {
      GM.getValue("userStatus", userStatus).then((d) => {
        saveAs(JSON.stringify(d, void 0, "	"), \`Bilibili-Old-\${timeFormat(void 0, true).replace(/ |:/g, (d2) => "-")}\`, "application/json");
      });
    }
    /** 恢复备份数据 */
    inputUserStatus() {
      const msg = toast.list("恢复备份数据 >>>", "> 请选择一个备份的数据文件(.json)", "> 注意:无效的数据文件可能导致异常!");
      fileRead("application/json").then((d) => {
        msg.push(\`> 读取文件:\${d.name}\`);
        msg.type = "info";
        return readAs(d).then((d2) => {
          const data = JSON.parse(d2);
          if (typeof data === "object") {
            GM.setValue("userStatus", data);
            const text = "已恢复设置数据,请<strong>刷新</strong>页面以避免数据紊乱!";
            msg.push("> " + text);
            msg.type = "success";
            return alert(text, "刷新页面", [{
              text: "刷新",
              callback: () => location.reload()
            }]);
          }
        }).catch((e) => {
          msg.push("> 读取文件出错!", e);
          msg.type = "error";
        });
      }).catch((e) => {
        msg.push(e);
      }).finally(() => {
        msg.delay = 4;
      });
    }
  };
  var user = new User();

  // src/core/video-info.ts
  init_tampermonkey();
  var VideoInfo = class {
    cids = {};
    stats = {};
    get metadata() {
      const cid = BLOD.cid;
      return cid ? this.cids[cid] : void 0;
    }
    get album() {
      var _a3;
      return ((_a3 = this.metadata) == null ? void 0 : _a3.album) || this.title;
    }
    get artist() {
      var _a3;
      return (_a3 = this.metadata) == null ? void 0 : _a3.artist;
    }
    get title() {
      var _a3;
      return ((_a3 = this.metadata) == null ? void 0 : _a3.title) || document.title.slice(0, -26);
    }
    get artwork() {
      var _a3;
      return (_a3 = this.metadata) == null ? void 0 : _a3.artwork;
    }
    get stat() {
      const aid = BLOD.aid;
      return aid ? this.stats[aid] : void 0;
    }
    /** 数据变动回调栈 */
    callbacks = [];
    /**
     * 数据变动回调
     * @param callback 数据变动时执行的回调函数
     * @returns 撤销监听的函数
     */
    bindChange(callback) {
      const id = this.callbacks.push(callback);
      return () => {
        delete this.callbacks[id - 1];
      };
    }
    timer;
    /** 推送数据变动 */
    emitChange() {
      clearTimeout(this.timer);
      this.timer = setTimeout(() => this.callbacks.forEach((d) => d(this)), 100);
    }
    /** 从\`IAidDatail\`中提取 */
    aidDatail(data) {
      const album = data.title;
      const artist = data.owner.name;
      const pic = data.pic.replace("http:", "");
      data.pages ? data.pages.forEach((d, i) => {
        this.cids[d.cid] = {
          album,
          artist,
          title: d.part || \`#\${i + 1}\`,
          artwork: [{ src: pic }]
        };
      }) : this.cids[data.cid] = {
        album,
        artist,
        title: \`#1\`,
        artwork: [{ src: pic }]
      };
      this.stats[data.aid] = data.stat;
      this.emitChange();
    }
    /** 从\`IAidInfo\`中提取 */
    aidInfo(data) {
      const album = data.title;
      const artist = data.upper.name;
      const pic = data.cover.replace("http:", "");
      data.pages ? data.pages.forEach((d, i) => {
        this.cids[d.id] = {
          album,
          artist,
          title: d.title || \`#\${i + 1}\`,
          artwork: [{ src: pic }]
        };
      }) : this.cids[data.id] = {
        album,
        artist,
        title: \`#1\`,
        artwork: [{ src: pic }]
      };
    }
    /** 从\`IBangumiSeasonResponse\`中提取 */
    bangumiSeason(data) {
      var _a3, _b2;
      const album = data.title || data.jp_title;
      const artist = data.actors || data.staff || ((_a3 = data.up_info) == null ? void 0 : _a3.name);
      const pic = data.cover.replace("http:", "");
      const bkg_cover = (_b2 = data.bkg_cover) == null ? void 0 : _b2.replace("http:", "");
      this.bangumiEpisode(data.episodes, album, artist, pic, bkg_cover);
      this.emitChange();
    }
    /** 从\`IBangumiEpisode\`中提取 */
    bangumiEpisode(data, album, artist, pic, bkg_cover) {
      data.forEach((d) => {
        const artwork = [{ src: d.cover.replace("http:", "") }, { src: pic }];
        bkg_cover && artwork.push({ src: bkg_cover });
        this.cids[d.cid] = {
          album,
          artist,
          title: d.index_title,
          artwork
        };
      });
    }
    toview(data) {
      const album = data.name;
      const pic = data.cover.replace("http:", "");
      data.list.forEach((d) => {
        const title = d.title;
        const cover = d.pic.replace("http:", "");
        const artist = d.owner.name;
        d.pages.forEach((d2, i) => {
          this.cids[d2.cid] = {
            album,
            artist,
            title: title + \`(\${d2.part})\`,
            artwork: [{ src: pic }, { src: cover }]
          };
        });
      });
      this.emitChange();
    }
    /** 设置浏览器媒体信息 */
    mediaSession() {
      if (this.metadata) {
        navigator.mediaSession.metadata = new MediaMetadata({ ...this.metadata });
      }
    }
  };
  var videoInfo = new VideoInfo();

  // src/core/danmaku.ts
  var Danmaku = class {
    listSoFixed = false;
    constructor() {
      user.addCallback((status) => {
        if (!status.bilibiliplayer) {
          this.listSoFix();
        }
      });
    }
    /** 原生旧版播放器使用protobuf弹幕 */
    listSoFix() {
      if (this.listSoFixed)
        return;
      this.listSoFixed = true;
      const that = this;
      new WorkerHook().postMessage(function(message) {
        if (message.url && message.url.includes("list.so")) {
          user.userStatus.dmwrap && that.trim();
          if (!user.userStatus.dmproto)
            return false;
          const params = urlObj(message.url);
          const startTime = (/* @__PURE__ */ new Date()).getTime();
          that.getSegDanmaku(void 0, params.oid).then((d) => {
            this.dispatchEvent(new MessageEvent("message", {
              data: {
                code: 0,
                danmakuArray: d,
                loadTime: (/* @__PURE__ */ new Date()).getTime() - startTime,
                parseTime: Math.random(),
                sendTip: "",
                state: 0,
                textSide: "",
                total: d.length.toString()
              }
            }));
          }).catch((e) => {
            console.error("protobuf 弹幕获取失败", e);
          });
          return true;
        }
        return false;
      });
    }
    /** 允许普权弹幕排版 */
    trim() {
      propertyHook(String.prototype, "trim", function() {
        return String(this);
      });
    }
    async getSegDanmaku(aid = BLOD.aid, cid = BLOD.cid) {
      if (!cid)
        throw new Error(\`无法获取弹幕 aid:\${aid} cid:\${cid}\`);
      return new ApiDmWeb(aid, cid).toCmd();
    }
    /** 加载本地xml弹幕 */
    localDmXml() {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.xml,编码:utf-8");
      fileRead(".xml").then((d) => {
        msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`);
        msg.type = "warning";
        return readAs(d);
      }).then((d) => {
        const dm = DanmakuBase.decodeXml(d);
        window.player.appendDm(dm, !user.userStatus.dmContact);
        msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
        msg.type = "success";
      }).catch((e) => {
        msg.push(e);
        msg.type = "error";
      }).finally(() => {
        msg.delay = user.userStatus.toast.delay;
      });
    }
    /** 加载本地json弹幕 */
    localDmJson() {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.json,编码:utf-8");
      fileRead(".json").then((d) => {
        msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`);
        msg.type = "warning";
        return readAs(d);
      }).then((d) => {
        const dm = JSON.parse(d);
        window.player.appendDm(dm, !user.userStatus.dmContact);
        msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
        msg.type = "success";
      }).catch((e) => {
        msg.push(e);
        msg.type = "error";
      }).finally(() => {
        msg.delay = user.userStatus.toast.delay;
      });
    }
    /** 下载弹幕 */
    async download(aid = BLOD.aid, cid = BLOD.cid) {
      var _a3;
      if (!cid)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      const dms = ((_a3 = window.player) == null ? void 0 : _a3.getDanmaku) ? window.player.getDanmaku() : await new ApiDmWeb(aid, cid).getData();
      const metadata = videoInfo.metadata;
      const title = metadata ? \`\${metadata.album}(\${metadata.title})\` : \`\${aid}.\${cid}\`;
      if (user.userStatus.dmExtension === "json") {
        return saveAs(JSON.stringify(dms, void 0, "	"), \`\${title}.json\`, "application/json");
      }
      return saveAs(DanmakuBase.encodeXml(DanmakuBase.parseCmd(dms), cid), \`\${title}.xml\`, "application/xml");
    }
    /** 加载在线弹幕 */
    async onlineDm(str) {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载在线弹幕 >>>", "> -------在线弹幕-------", \`> 目标:\${str}\`);
      const { aid, cid } = await urlParam(str);
      msg.push(\`> aid:\${aid}\`, \`> cid:\${cid}\`);
      if (!aid || !cid) {
        msg.push("> 查询cid信息失败,已退出!");
        msg.type = "error";
        msg.delay = toast.delay;
      } else {
        new ApiDmWeb(aid, cid).getData().then((d) => {
          window.player.appendDm(d, !user.userStatus.dmContact);
          msg.push(\`> 有效弹幕数:\${d.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
          msg.type = "success";
        }).catch((e) => {
          msg.push(e);
          msg.type = "error";
        }).finally(() => {
          msg.delay = user.userStatus.toast.delay;
        });
      }
    }
  };
  var danmaku = new Danmaku();

  // src/core/download.ts
  init_tampermonkey();

  // src/io/api-playurl.ts
  init_tampermonkey();

  // src/io/api-sign.ts
  init_tampermonkey();
  var import_md5 = __toESM(require_md5());
  var APP_KEY = /* @__PURE__ */ ((APP_KEY2) => {
    APP_KEY2["1d8b6e7d45233436"] = "560c52ccd288fed045859ed18bffd973";
    APP_KEY2["c1b107428d337928"] = "ea85624dfcf12d7cc7b2b3a94fac1f2c";
    APP_KEY2["07da50c9a0bf829f"] = "25bdede4e1581c836cab73a48790ca6e";
    APP_KEY2["7d089525d3611b1c"] = "acd495b248ec528c2eed1e862d393126";
    APP_KEY2["9e5ded06c39bf5c4"] = "583e398ed0f980290b5903aba30b4cc4";
    APP_KEY2["27eb53fc9058f8c3"] = "c2ed53a74eeefe3cf99fbd01d8c9c375";
    APP_KEY2["85eb6835b0a1034e"] = "2ad42749773c441109bdc0191257a664";
    APP_KEY2["4409e2ce8ffd12b8"] = "59b43e04ad6965f34319062b478f83dd";
    APP_KEY2["37207f2beaebf8d7"] = "e988e794d4d4b6dd43bc0e89d6e90c43";
    APP_KEY2["84956560bc028eb7"] = "94aba54af9065f71de72f5508f1cd42e";
    APP_KEY2["bb3101000e232e27"] = "36efcfed79309338ced0380abd824ac1";
    APP_KEY2["fb06a25c6338edbc"] = "fd10bd177559780c2e4a44f1fa47fa83";
    APP_KEY2["iVGUTjsxvpLeuDCf"] = "aHRmhWMLkdeMuILqORnYZocwMBpMEOdt";
    APP_KEY2["178cf125136ca8ea"] = "34381a26236dd1171185c0beb042e1c6";
    APP_KEY2["57263273bc6b67f6"] = "a0488e488d1567960d3a765e8d129f90";
    APP_KEY2["8d23902c1688a798"] = "710f0212e62bd499b8d3ac6e1db9302a";
    APP_KEY2["7d336ec01856996b"] = "a1ce6983bc89e20a36c37f40c4f1a0dd";
    APP_KEY2["8e16697a1b4f8121"] = "f5dd03b752426f2e623d7badb28d190a";
    APP_KEY2["aae92bc66f3edfab"] = "af125a0d5279fd576c1b4418a3e8276d";
    APP_KEY2["ae57252b0c09105d"] = "c75875c596a69eb55bd119e74b07cfe3";
    APP_KEY2["bca7e84c2d947ac6"] = "60698ba2f68e01ce44738920a0ffe768";
    APP_KEY2["cc578d267072c94d"] = "ffb6bb4c4edae2566584dbcacfc6a6ad";
    APP_KEY2["cc8617fd6961e070"] = "3131924b941aac971e45189f265262be";
    APP_KEY2["YvirImLGlLANCLvM"] = "JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM";
    APP_KEY2["f3bb208b3d081dc8"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["4fa4601d1caa8b48"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["452d3958f048c02a"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["86385cdc024c0f6c"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["5256c25b71989747"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["e97210393ad42219"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["5dce947fe22167f9"] = "";
    APP_KEY2["8e9fc618fbd41e28"] = "";
    APP_KEY2["21087a09e533a072"] = "e5b8ba95cab6104100be35739304c23a";
    APP_KEY2["783bbb7264451d82"] = "2653583c8873dea268ab9386918b1d65";
    APP_KEY2["4ebafd7c4951b366"] = "8cb98205e9b2ad3669aad0fce12a4c13";
    return APP_KEY2;
  })(APP_KEY || {});
  var ApiSign = class {
    constructor(url, appkey) {
      this.url = url;
      this.appkey = appkey;
    }
    get ts() {
      return (/* @__PURE__ */ new Date()).getTime();
    }
    /** 查询参数,须要在子类中初始化好才能无参数调用\`sign\`方法 */
    data = {};
    /**
     * URL签名
     * @param searchParams 查询参数,会覆盖url原有参数
     * @param api 授权api,**授权第三方登录专用**
     * @returns 签名后的api
     */
    sign(searchParams = this.data, api = "") {
      const url = new URL2(this.url);
      Object.assign(url.params, searchParams, { ts: this.ts });
      delete url.params.sign;
      const appSecret = this.appSecret;
      url.params.appkey = this.appkey;
      url.sort();
      url.params.sign = (0, import_md5.default)((api ? \`api=\${decodeURIComponent(api)}\` : url.param) + appSecret);
      return url;
    }
    get appSecret() {
      switch (this.appkey) {
        case "f3bb208b3d081dc8":
        case "4fa4601d1caa8b48":
        case "452d3958f048c02a":
        case "86385cdc024c0f6c":
        case "5256c25b71989747":
        case "e97210393ad42219":
          switch (Math.trunc((/* @__PURE__ */ new Date()).getHours() / 4)) {
            case 0:
              this.appkey = "f3bb208b3d081dc8";
              break;
            case 1:
              this.appkey = "4fa4601d1caa8b48";
              break;
            case 2:
              this.appkey = "452d3958f048c02a";
              break;
            case 3:
              this.appkey = "86385cdc024c0f6c";
              break;
            case 4:
              this.appkey = "5256c25b71989747";
              break;
            case 5:
              this.appkey = "e97210393ad42219";
              break;
            default:
              break;
          }
          break;
        default:
          break;
      }
      return APP_KEY[this.appkey];
    }
  };
  async function urlSign(url, searchParams = {}, appkey = "c1b107428d337928") {
    const api = new ApiSign(url, appkey);
    const response = await fetch(api.sign(searchParams).toJSON());
    return await response.json();
  }

  // src/io/fnval.ts
  init_tampermonkey();
  var qn = 127;
  var fnver = 0;
  var fnval = 0 /* FLV */ + 16 /* DASH_H265 */ + 64 /* HDR */ + 128 /* DASH_4K */ + 256 /* DOLBYAUDIO */ + 512 /* DOLBYVIDEO */ + 1024 /* DASH_8K */ + 2048 /* DASH_AV1 */;

  // src/io/api-playurl.ts
  var PlayurlDescriptionMap = {
    127: "超高清 8K",
    126: "杜比视界",
    125: "HDR",
    121: "超清 4K",
    120: "超清 4K",
    116: "高清 1080P60",
    112: "高清 1080P+",
    80: "高清 1080P",
    74: "高清 720P60",
    64: "高清 720P",
    48: "高清 720P",
    32: "清晰 480P",
    16: "流畅 360P",
    15: "流畅 360P",
    6: "流畅 240P",
    5: "流畅 144P"
  };
  var PlayurlFormatMap = {
    127: "hdflv2",
    126: "hdflv2",
    125: "hdflv2",
    121: "hdflv2",
    120: "hdflv2",
    116: "flv_p60",
    112: "hdflv2",
    80: "flv",
    74: "flv720_p60",
    64: "flv720",
    48: "flv720",
    32: "flv480",
    16: "mp4",
    15: "mp4",
    6: "mp4",
    5: "mp4"
  };
  var PlayurlQualityMap = {
    127: "8K",
    126: "Dolby",
    125: "HDR",
    121: "4K",
    120: "4K",
    116: "1080P60",
    112: "1080P+",
    80: "1080P",
    74: "720P60",
    64: "720P",
    48: "720P",
    32: "480P",
    16: "360P",
    15: "360P",
    6: "240P",
    5: "144P"
  };
  var PlayurlCodecs = {
    30126: "hvc1.2.4.L153.90",
    126: "hvc1.2.4.L153.90",
    30121: "hev1.1.6.L156.90",
    121: "hev1.1.6.L156.90",
    30120: "avc1.64003C",
    120: "avc1.64003C",
    30112: "avc1.640028",
    // 1080P+
    112: "avc1.640028",
    // 1080P+
    30102: "hev1.1.6.L120.90",
    // HEVC 1080P+
    102: "hev1.1.6.L120.90",
    // HEVC 1080P+
    30080: "avc1.640028",
    // 1080P
    80: "avc1.640028",
    // 1080P
    30077: "hev1.1.6.L120.90",
    // HEVC 1080P
    77: "hev1.1.6.L120.90",
    // HEVC 1080P
    30064: "avc1.64001F",
    // 720P
    64: "avc1.64001F",
    // 720P
    30066: "hev1.1.6.L120.90",
    // HEVC 720P
    66: "hev1.1.6.L120.90",
    // HEVC 720P
    30032: "avc1.64001E",
    // 480P
    32: "avc1.64001E",
    // 480P
    30033: "hev1.1.6.L120.90",
    // HEVC 480P
    33: "hev1.1.6.L120.90",
    // HEVC 480P
    30011: "hev1.1.6.L120.90",
    // HEVC 360P
    11: "hev1.1.6.L120.90",
    // HEVC 360P
    30016: "avc1.64001E",
    // 360P
    16: "avc1.64001E",
    // 360P
    30006: "avc1.64001E",
    //240P
    6: "avc1.64001E",
    // 240P
    30005: "avc1.64001E",
    // 144P
    5: "avc1.64001E",
    // 144P
    30251: "fLaC",
    // Hires
    30250: "ec-3",
    // Dolby
    30280: "mp4a.40.2",
    // 高码音频
    30232: "mp4a.40.2",
    // 中码音频
    30216: "mp4a.40.2"
    // 低码音频
  };
  var PlayurlCodecsAPP = {
    30016: "avc1.64001E",
    // APP源 360P
    16: "avc1.64001E",
    // APP源 360P
    30032: "avc1.64001F",
    // APP源 480P
    32: "avc1.64001F",
    // APP源 480P
    30064: "avc1.640028",
    // APP源 720P
    64: "avc1.640028",
    // APP源 720P
    30080: "avc1.640032",
    // APP源 1080P
    80: "avc1.640032",
    // APP源 1080P
    30216: "mp4a.40.2",
    // APP源 低码音频
    30232: "mp4a.40.2",
    // APP源 中码音频
    30280: "mp4a.40.2"
    // APP源 高码音频 
  };
  var PlayurlFrameRate = {
    30121: "16000/672",
    121: "16000/672",
    30120: "16000/672",
    120: "16000/672",
    30112: "16000/672",
    112: "16000/672",
    30102: "16000/672",
    102: "16000/672",
    30080: "16000/672",
    80: "16000/672",
    30077: "16000/656",
    77: "16000/656",
    30064: "16000/672",
    64: "16000/672",
    30066: "16000/656",
    66: "16000/656",
    30032: "16000/672",
    32: "16000/672",
    30033: "16000/656",
    33: "16000/656",
    30011: "16000/656",
    11: "16000/656",
    30016: "16000/672",
    16: "16000/672",
    30006: "16000/672",
    6: "16000/672",
    30005: "16000/672",
    5: "16000/672"
  };
  var PlayurlResolution = {
    30121: [3840, 2160],
    121: [3840, 2160],
    30120: [3840, 2160],
    120: [3840, 2160],
    30112: [1920, 1080],
    // 1080P+
    112: [1920, 1080],
    // 1080P+
    30102: [1920, 1080],
    // HEVC 1080P+
    102: [1920, 1080],
    // HEVC 1080P+
    30080: [1920, 1080],
    // 1080P
    80: [1920, 1080],
    // 1080P
    30077: [1920, 1080],
    // HEVC 1080P
    77: [1920, 1080],
    // HEVC 1080P
    30064: [1280, 720],
    // 720P
    64: [1280, 720],
    // 720P
    30066: [1280, 720],
    // HEVC 720P
    66: [1280, 720],
    // HEVC 720P
    30032: [852, 480],
    // 480P
    32: [852, 480],
    // 480P
    30033: [852, 480],
    // HEVC 480P
    33: [852, 480],
    // HEVC 480P
    30011: [640, 360],
    // HEVC 360P
    11: [640, 360],
    // HEVC 360P
    30016: [640, 360],
    // 360P
    16: [640, 360],
    // 360P
    30006: [426, 240],
    // 240P
    6: [426, 240],
    // 240P
    30005: [256, 144],
    // 144P
    5: [256, 144]
    // 144P
  };
  var PlayurlDash = class {
    accept_description = [];
    accept_format = "";
    accept_quality = [];
    bp = 0;
    code = 0;
    dash = {
      audio: [],
      dolby: { audio: [], type: 0 },
      duration: 0,
      min_buffer_time: 1.5,
      minBufferTime: 1.5,
      video: []
    };
    fnval = 4048;
    fnver = 0;
    format = "flv";
    from = "local";
    has_paid = true;
    is_preview = 0;
    message = "";
    no_rexcode = 1;
    quality = 80;
    result = "suee";
    seek_param = "start";
    seek_type = "offset";
    status = 2;
    support_formats = [];
    timelength = 0;
    type = "DASH";
    video_codecid = 7;
    video_project = true;
  };
  async function apiPlayurl(data, dash = true, pgc = false, server = "api.bilibili.com") {
    data = Object.assign({
      qn,
      otype: "json",
      fourk: 1
    }, data, dash ? { fnver, fnval } : {});
    const response = await fetch(objUrl(pgc ? URLS.PGC_PLAYURL.replace("api.bilibili.com", server) : URLS.PLAYURL, data), { credentials: "include" });
    const json = await response.json();
    if (pgc) {
      return jsonCheck(json).result;
    }
    return jsonCheck(json).data;
  }

  // src/io/api-playurl-interface.ts
  init_tampermonkey();
  var ApiPlayurlInterface = class extends ApiSign {
    constructor(data, pgc = false) {
      super(pgc ? URLS.PLAYURL_BANGUMI : URLS.PLAYURL_INTERFACE, "YvirImLGlLANCLvM");
      this.data = data;
      this.data = Object.assign({
        otype: "json",
        qn: data.quality,
        type: "",
        fnver,
        fnval
      }, data, pgc ? { module: "bangumi", season_type: 1 } : {});
    }
    async getData() {
      const response = await fetch(this.sign().toJSON(), { credentials: "include" });
      return await response.json();
    }
  };

  // src/io/api-playurl-intl.ts
  init_tampermonkey();
  var ApiPlayurlIntl = class extends ApiSign {
    constructor(data, dash = true, pgc = false) {
      super(pgc ? URLS.INTL_OGV_PLAYURL : URLS.INTL_PLAYURL, "bb3101000e232e27");
      this.data = data;
      this.pgc = pgc;
      this.data = Object.assign({
        device: "android",
        force_host: 1,
        mobi_app: "android_i",
        qn,
        platform: "android_i",
        fourk: 1,
        build: 2100110,
        otype: "json"
      }, data, dash ? { fnval, fnver } : {});
    }
    async getData() {
      const response = await GM.fetch(this.sign().toJSON());
      const json = await response.json();
      if (this.pgc) {
        return jsonCheck(json);
      }
      return jsonCheck(json).data;
    }
  };

  // src/io/api-playurl-tv.ts
  init_tampermonkey();
  var ApiPlayurlTv = class extends ApiSign {
    constructor(data, dash = true, pgc = false) {
      super(pgc ? URLS.PGC_PLAYURL_TV : URLS.UGC_PLAYURL_TV, "27eb53fc9058f8c3");
      this.data = data;
      this.data = Object.assign({
        qn,
        fourk: 1,
        otype: "json",
        platform: "android",
        mobi_app: "android_tv_yst",
        build: 102801
      }, data, dash ? { fnval, fnver } : {});
    }
    async getData() {
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return jsonCheck(json);
    }
  };

  // src/io/api-playurlproj.ts
  init_tampermonkey();
  var ApiPlayurlProj = class extends ApiSign {
    constructor(data, pgc = false) {
      super(pgc ? URLS.PGC_PLAYURL_PROJ : URLS.PLAYURL_PROJ, "bb3101000e232e27");
      this.data = data;
      this.data = Object.assign({
        build: "2040100",
        device: "android",
        mobi_app: "android_i",
        otype: "json",
        platform: "android_i",
        qn
      }, data);
      pgc && (this.data.module = "bangumi");
    }
    async getData() {
      const response = await fetch(this.sign().toJSON());
      return await response.json();
    }
  };

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts
  init_tampermonkey();
  var import_light3 = __toESM(require_light());

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.json
  var playurl_default = {
    nested: {
      bilibili: {
        nested: {
          pgc: {
            nested: {
              gateway: {
                nested: {
                  player: {
                    nested: {
                      v1: {
                        nested: {
                          PlayViewReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              cid: {
                                type: "int64",
                                id: 2
                              },
                              qn: {
                                type: "int64",
                                id: 3
                              },
                              fnver: {
                                type: "int32",
                                id: 4
                              },
                              fnval: {
                                type: "int32",
                                id: 5
                              },
                              download: {
                                type: "uint32",
                                id: 6
                              },
                              forceHost: {
                                type: "int32",
                                id: 7
                              },
                              fourk: {
                                type: "bool",
                                id: 8
                              },
                              spmid: {
                                type: "string",
                                id: 9
                              },
                              fromSpmid: {
                                type: "string",
                                id: 10
                              },
                              teenagersMode: {
                                type: "int32",
                                id: 11
                              },
                              preferCodecType: {
                                type: "bilibili.app.playurl.v1.CodeType",
                                id: 12
                              },
                              isPreview: {
                                type: "bool",
                                id: 13
                              },
                              roomId: {
                                type: "int64",
                                id: 14
                              }
                            }
                          },
                          ProjectReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              cid: {
                                type: "int64",
                                id: 2
                              },
                              qn: {
                                type: "int64",
                                id: 3
                              },
                              fnver: {
                                type: "int32",
                                id: 4
                              },
                              fnval: {
                                type: "int32",
                                id: 5
                              },
                              download: {
                                type: "uint32",
                                id: 6
                              },
                              forceHost: {
                                type: "int32",
                                id: 7
                              },
                              fourk: {
                                type: "bool",
                                id: 8
                              },
                              spmid: {
                                type: "string",
                                id: 9
                              },
                              fromSpmid: {
                                type: "string",
                                id: 10
                              },
                              protocol: {
                                type: "int32",
                                id: 11
                              },
                              deviceType: {
                                type: "int32",
                                id: 12
                              }
                            }
                          },
                          PlayViewReply: {
                            fields: {
                              videoInfo: {
                                type: "bilibili.app.playurl.v1.VideoInfo",
                                id: 1
                              },
                              playConf: {
                                type: "PlayAbilityConf",
                                id: 2
                              },
                              business: {
                                type: "BusinessInfo",
                                id: 3
                              },
                              event: {
                                type: "Event",
                                id: 4
                              }
                            }
                          },
                          Event: {
                            fields: {
                              shake: {
                                type: "Shake",
                                id: 1
                              }
                            }
                          },
                          Shake: {
                            fields: {
                              file: {
                                type: "string",
                                id: 1
                              }
                            }
                          },
                          BusinessInfo: {
                            fields: {
                              isPreview: {
                                type: "bool",
                                id: 1
                              },
                              bp: {
                                type: "bool",
                                id: 2
                              },
                              marlinToken: {
                                type: "string",
                                id: 3
                              }
                            }
                          },
                          PlayAbilityConf: {
                            fields: {
                              backgroundPlayDisable: {
                                type: "bool",
                                id: 1
                              },
                              flipDisable: {
                                type: "bool",
                                id: 2
                              },
                              castDisable: {
                                type: "bool",
                                id: 3
                              },
                              feedbackDisable: {
                                type: "bool",
                                id: 4
                              },
                              subtitleDisable: {
                                type: "bool",
                                id: 5
                              },
                              playbackRateDisable: {
                                type: "bool",
                                id: 6
                              },
                              timeUpDisable: {
                                type: "bool",
                                id: 7
                              },
                              playbackModeDisable: {
                                type: "bool",
                                id: 8
                              },
                              scaleModeDisable: {
                                type: "bool",
                                id: 9
                              },
                              likeDisable: {
                                type: "bool",
                                id: 10
                              },
                              dislikeDisable: {
                                type: "bool",
                                id: 11
                              },
                              coinDisable: {
                                type: "bool",
                                id: 12
                              },
                              elecDisable: {
                                type: "bool",
                                id: 13
                              },
                              shareDisable: {
                                type: "bool",
                                id: 14
                              },
                              screenShotDisable: {
                                type: "bool",
                                id: 15
                              },
                              lockScreenDisable: {
                                type: "bool",
                                id: 16
                              },
                              recommendDisable: {
                                type: "bool",
                                id: 17
                              },
                              playbackSpeedDisable: {
                                type: "bool",
                                id: 18
                              },
                              definitionDisable: {
                                type: "bool",
                                id: 19
                              },
                              selectionsDisable: {
                                type: "bool",
                                id: 20
                              },
                              nextDisable: {
                                type: "bool",
                                id: 21
                              },
                              editDmDisable: {
                                type: "bool",
                                id: 22
                              },
                              smallWindowDisable: {
                                type: "bool",
                                id: 23
                              },
                              shakeDisable: {
                                type: "bool",
                                id: 24
                              },
                              outerDmDisable: {
                                type: "bool",
                                id: 25
                              },
                              innerDmDisable: {
                                type: "bool",
                                id: 26
                              },
                              freyaEnterDisable: {
                                type: "bool",
                                id: 27
                              },
                              dolbyDisable: {
                                type: "bool",
                                id: 28
                              },
                              freyaFullDisable: {
                                type: "bool",
                                id: 29
                              }
                            }
                          },
                          ProjectReply: {
                            fields: {
                              project: {
                                type: "bilibili.app.playurl.v1.PlayURLReply",
                                id: 1
                              }
                            }
                          },
                          LivePlayViewReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              quality: {
                                type: "uint32",
                                id: 2
                              },
                              ptype: {
                                type: "uint32",
                                id: 3
                              },
                              https: {
                                type: "bool",
                                id: 4
                              },
                              playType: {
                                type: "uint32",
                                id: 5
                              },
                              deviceType: {
                                type: "int32",
                                id: 6
                              }
                            }
                          },
                          LivePlayViewReply: {
                            fields: {
                              roomInfo: {
                                type: "RoomInfo",
                                id: 1
                              },
                              playInfo: {
                                type: "LivePlayInfo",
                                id: 2
                              }
                            }
                          },
                          RoomInfo: {
                            fields: {
                              roomId: {
                                type: "int64",
                                id: 1
                              },
                              uid: {
                                type: "int64",
                                id: 2
                              },
                              status: {
                                type: "RoomStatusInfo",
                                id: 3
                              },
                              show: {
                                type: "RoomShowInfo",
                                id: 4
                              }
                            }
                          },
                          RoomStatusInfo: {
                            fields: {
                              liveStatus: {
                                type: "int64",
                                id: 1
                              },
                              liveScreenType: {
                                type: "int64",
                                id: 2
                              },
                              liveMark: {
                                type: "int64",
                                id: 3
                              },
                              lockStatus: {
                                type: "int64",
                                id: 4
                              },
                              lockTime: {
                                type: "int64",
                                id: 5
                              },
                              hiddenStatus: {
                                type: "int64",
                                id: 6
                              },
                              hiddenTime: {
                                type: "int64",
                                id: 7
                              },
                              liveType: {
                                type: "int64",
                                id: 8
                              },
                              roomShield: {
                                type: "int64",
                                id: 9
                              }
                            }
                          },
                          RoomShowInfo: {
                            fields: {
                              shortId: {
                                type: "int64",
                                id: 1
                              },
                              popularityCount: {
                                type: "int64",
                                id: 8
                              },
                              liveStartTime: {
                                type: "int64",
                                id: 10
                              }
                            }
                          },
                          LivePlayInfo: {
                            fields: {
                              currentQn: {
                                type: "int32",
                                id: 1
                              },
                              qualityDescription: {
                                rule: "repeated",
                                type: "QualityDescription",
                                id: 2
                              },
                              durl: {
                                rule: "repeated",
                                type: "ResponseDataUrl",
                                id: 3
                              }
                            }
                          },
                          QualityDescription: {
                            fields: {
                              qn: {
                                type: "int32",
                                id: 1
                              },
                              desc: {
                                type: "string",
                                id: 2
                              }
                            }
                          },
                          ResponseDataUrl: {
                            fields: {
                              url: {
                                type: "string",
                                id: 1
                              },
                              streamType: {
                                type: "uint32",
                                id: 2
                              },
                              ptag: {
                                type: "uint32",
                                id: 3
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          app: {
            nested: {
              playurl: {
                nested: {
                  v1: {
                    nested: {
                      PlayURLReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          }
                        }
                      },
                      PlayURLReply: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          timelength: {
                            type: "uint64",
                            id: 3
                          },
                          videoCodecid: {
                            type: "uint32",
                            id: 4
                          },
                          fnver: {
                            type: "uint32",
                            id: 5
                          },
                          fnval: {
                            type: "uint32",
                            id: 6
                          },
                          videoProject: {
                            type: "bool",
                            id: 7
                          },
                          durl: {
                            rule: "repeated",
                            type: "ResponseUrl",
                            id: 8
                          },
                          dash: {
                            type: "ResponseDash",
                            id: 9
                          },
                          noRexcode: {
                            type: "int32",
                            id: 10
                          },
                          upgradeLimit: {
                            type: "UpgradeLimit",
                            id: 11
                          },
                          supportFormats: {
                            rule: "repeated",
                            type: "FormatDescription",
                            id: 12
                          },
                          type: {
                            type: "VideoType",
                            id: 13
                          }
                        }
                      },
                      ResponseUrl: {
                        fields: {
                          order: {
                            type: "uint32",
                            id: 1
                          },
                          length: {
                            type: "uint64",
                            id: 2
                          },
                          size: {
                            type: "uint64",
                            id: 3
                          },
                          url: {
                            type: "string",
                            id: 4
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 5
                          },
                          md5: {
                            type: "string",
                            id: 6
                          }
                        }
                      },
                      ResponseDash: {
                        fields: {
                          video: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 1
                          },
                          audio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 2
                          }
                        }
                      },
                      DashItem: {
                        fields: {
                          id: {
                            type: "uint32",
                            id: 1
                          },
                          baseUrl: {
                            type: "string",
                            id: 2
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 3
                          },
                          bandwidth: {
                            type: "uint32",
                            id: 4
                          },
                          codecid: {
                            type: "uint32",
                            id: 5
                          },
                          md5: {
                            type: "string",
                            id: 6
                          },
                          size: {
                            type: "uint64",
                            id: 7
                          },
                          frameRate: {
                            type: "string",
                            id: 8
                          }
                        }
                      },
                      UpgradeLimit: {
                        fields: {
                          code: {
                            type: "int32",
                            id: 1
                          },
                          message: {
                            type: "string",
                            id: 2
                          },
                          image: {
                            type: "string",
                            id: 3
                          },
                          button: {
                            type: "UpgradeButton",
                            id: 4
                          }
                        }
                      },
                      UpgradeButton: {
                        fields: {
                          title: {
                            type: "string",
                            id: 1
                          },
                          link: {
                            type: "string",
                            id: 2
                          }
                        }
                      },
                      FormatDescription: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          description: {
                            type: "string",
                            id: 3
                          },
                          newDescription: {
                            type: "string",
                            id: 4
                          },
                          displayDesc: {
                            type: "string",
                            id: 5
                          },
                          superscript: {
                            type: "string",
                            id: 6
                          }
                        }
                      },
                      ProjectReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          },
                          protocol: {
                            type: "int32",
                            id: 11
                          },
                          deviceType: {
                            type: "int32",
                            id: 12
                          }
                        }
                      },
                      ProjectReply: {
                        fields: {
                          project: {
                            type: "PlayURLReply",
                            id: 1
                          }
                        }
                      },
                      PlayViewReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          },
                          teenagersMode: {
                            type: "int32",
                            id: 11
                          },
                          preferCodecType: {
                            type: "CodeType",
                            id: 12
                          },
                          business: {
                            type: "Business",
                            id: 13
                          }
                        }
                      },
                      Business: {
                        values: {
                          UNKNOWN: 0,
                          STORY: 1
                        }
                      },
                      CodeType: {
                        values: {
                          NOCODE: 0,
                          CODE264: 1,
                          CODE265: 2
                        }
                      },
                      PlayViewReply: {
                        fields: {
                          videoInfo: {
                            type: "VideoInfo",
                            id: 1
                          },
                          playConf: {
                            type: "PlayAbilityConf",
                            id: 2
                          },
                          upgradeLimit: {
                            type: "UpgradeLimit",
                            id: 3
                          },
                          chronos: {
                            type: "Chronos",
                            id: 4
                          },
                          playArc: {
                            type: "PlayArcConf",
                            id: 5
                          },
                          event: {
                            type: "Event",
                            id: 6
                          }
                        }
                      },
                      Event: {
                        fields: {
                          shake: {
                            type: "Shake",
                            id: 1
                          }
                        }
                      },
                      Shake: {
                        fields: {
                          file: {
                            type: "string",
                            id: 1
                          }
                        }
                      },
                      Chronos: {
                        fields: {
                          md5: {
                            type: "string",
                            id: 1
                          },
                          file: {
                            type: "string",
                            id: 2
                          }
                        }
                      },
                      PlayConfReq: {
                        fields: {}
                      },
                      PlayConfReply: {
                        fields: {
                          playConf: {
                            type: "PlayAbilityConf",
                            id: 1
                          }
                        }
                      },
                      PlayAbilityConf: {
                        fields: {
                          backgroundPlayConf: {
                            type: "CloudConf",
                            id: 1
                          },
                          flipConf: {
                            type: "CloudConf",
                            id: 2
                          },
                          castConf: {
                            type: "CloudConf",
                            id: 3
                          },
                          feedbackConf: {
                            type: "CloudConf",
                            id: 4
                          },
                          subtitleConf: {
                            type: "CloudConf",
                            id: 5
                          },
                          playbackRateConf: {
                            type: "CloudConf",
                            id: 6
                          },
                          timeUpConf: {
                            type: "CloudConf",
                            id: 7
                          },
                          playbackModeConf: {
                            type: "CloudConf",
                            id: 8
                          },
                          scaleModeConf: {
                            type: "CloudConf",
                            id: 9
                          },
                          likeConf: {
                            type: "CloudConf",
                            id: 10
                          },
                          dislikeConf: {
                            type: "CloudConf",
                            id: 11
                          },
                          coinConf: {
                            type: "CloudConf",
                            id: 12
                          },
                          elecConf: {
                            type: "CloudConf",
                            id: 13
                          },
                          shareConf: {
                            type: "CloudConf",
                            id: 14
                          },
                          screenShotConf: {
                            type: "CloudConf",
                            id: 15
                          },
                          lockScreenConf: {
                            type: "CloudConf",
                            id: 16
                          },
                          recommendConf: {
                            type: "CloudConf",
                            id: 17
                          },
                          playbackSpeedConf: {
                            type: "CloudConf",
                            id: 18
                          },
                          definitionConf: {
                            type: "CloudConf",
                            id: 19
                          },
                          selectionsConf: {
                            type: "CloudConf",
                            id: 20
                          },
                          nextConf: {
                            type: "CloudConf",
                            id: 21
                          },
                          editDmConf: {
                            type: "CloudConf",
                            id: 22
                          },
                          smallWindowConf: {
                            type: "CloudConf",
                            id: 23
                          },
                          shakeConf: {
                            type: "CloudConf",
                            id: 24
                          },
                          outerDmConf: {
                            type: "CloudConf",
                            id: 25
                          },
                          innerDmConf: {
                            type: "CloudConf",
                            id: 26
                          },
                          panoramaConf: {
                            type: "CloudConf",
                            id: 27
                          },
                          dolbyConf: {
                            type: "CloudConf",
                            id: 28
                          }
                        }
                      },
                      PlayArcConf: {
                        fields: {
                          backgroundPlayConf: {
                            type: "ArcConf",
                            id: 1
                          },
                          flipConf: {
                            type: "ArcConf",
                            id: 2
                          },
                          castConf: {
                            type: "ArcConf",
                            id: 3
                          },
                          feedbackConf: {
                            type: "ArcConf",
                            id: 4
                          },
                          subtitleConf: {
                            type: "ArcConf",
                            id: 5
                          },
                          playbackRateConf: {
                            type: "ArcConf",
                            id: 6
                          },
                          timeUpConf: {
                            type: "ArcConf",
                            id: 7
                          },
                          playbackModeConf: {
                            type: "ArcConf",
                            id: 8
                          },
                          scaleModeConf: {
                            type: "ArcConf",
                            id: 9
                          },
                          likeConf: {
                            type: "ArcConf",
                            id: 10
                          },
                          dislikeConf: {
                            type: "ArcConf",
                            id: 11
                          },
                          coinConf: {
                            type: "ArcConf",
                            id: 12
                          },
                          elecConf: {
                            type: "ArcConf",
                            id: 13
                          },
                          shareConf: {
                            type: "ArcConf",
                            id: 14
                          },
                          screenShotConf: {
                            type: "ArcConf",
                            id: 15
                          },
                          lockScreenConf: {
                            type: "ArcConf",
                            id: 16
                          },
                          recommendConf: {
                            type: "ArcConf",
                            id: 17
                          },
                          playbackSpeedConf: {
                            type: "ArcConf",
                            id: 18
                          },
                          definitionConf: {
                            type: "ArcConf",
                            id: 19
                          },
                          selectionsConf: {
                            type: "ArcConf",
                            id: 20
                          },
                          nextConf: {
                            type: "ArcConf",
                            id: 21
                          },
                          editDmConf: {
                            type: "ArcConf",
                            id: 22
                          },
                          smallWindowConf: {
                            type: "ArcConf",
                            id: 23
                          },
                          shakeConf: {
                            type: "ArcConf",
                            id: 24
                          },
                          outerDmConf: {
                            type: "ArcConf",
                            id: 25
                          },
                          innerDmConf: {
                            type: "ArcConf",
                            id: 26
                          },
                          panoramaConf: {
                            type: "ArcConf",
                            id: 27
                          },
                          dolbyConf: {
                            type: "ArcConf",
                            id: 28
                          }
                        }
                      },
                      ConfType: {
                        values: {
                          NoType: 0,
                          FLIPCONF: 1,
                          CASTCONF: 2,
                          FEEDBACK: 3,
                          SUBTITLE: 4,
                          PLAYBACKRATE: 5,
                          TIMEUP: 6,
                          PLAYBACKMODE: 7,
                          SCALEMODE: 8,
                          BACKGROUNDPLAY: 9,
                          LIKE: 10,
                          DISLIKE: 11,
                          COIN: 12,
                          ELEC: 13,
                          SHARE: 14,
                          SCREENSHOT: 15,
                          LOCKSCREEN: 16,
                          RECOMMEND: 17,
                          PLAYBACKSPEED: 18,
                          DEFINITION: 19,
                          SELECTIONS: 20,
                          NEXT: 21,
                          EDITDM: 22,
                          SMALLWINDOW: 23,
                          SHAKE: 24,
                          OUTERDM: 25,
                          INNERDM: 26,
                          PANORAMA: 27,
                          DOLBY: 28
                        }
                      },
                      CloudConf: {
                        fields: {
                          show: {
                            type: "bool",
                            id: 1
                          },
                          confType: {
                            type: "ConfType",
                            id: 2
                          },
                          fieldValue: {
                            type: "FieldValue",
                            id: 3
                          }
                        }
                      },
                      FieldValue: {
                        oneofs: {
                          value: {
                            oneof: [
                              "switch"
                            ]
                          }
                        },
                        fields: {
                          switch: {
                            type: "bool",
                            id: 1
                          }
                        }
                      },
                      ArcConf: {
                        fields: {
                          isSupport: {
                            type: "bool",
                            id: 1
                          }
                        }
                      },
                      VideoInfo: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          timelength: {
                            type: "uint64",
                            id: 3
                          },
                          videoCodecid: {
                            type: "uint32",
                            id: 4
                          },
                          streamList: {
                            rule: "repeated",
                            type: "Stream",
                            id: 5
                          },
                          dashAudio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 6
                          },
                          dolby: {
                            type: "DolbyItem",
                            id: 7
                          }
                        }
                      },
                      DolbyItem: {
                        fields: {
                          type: {
                            type: "Type",
                            id: 1
                          },
                          audio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 2
                          }
                        },
                        nested: {
                          Type: {
                            values: {
                              NONE: 0,
                              COMMON: 1,
                              ATMOS: 2
                            }
                          }
                        }
                      },
                      Stream: {
                        oneofs: {
                          content: {
                            oneof: [
                              "dashVideo",
                              "segmentVideo"
                            ]
                          }
                        },
                        fields: {
                          streamInfo: {
                            type: "StreamInfo",
                            id: 1
                          },
                          dashVideo: {
                            type: "DashVideo",
                            id: 2
                          },
                          segmentVideo: {
                            type: "SegmentVideo",
                            id: 3
                          }
                        }
                      },
                      SegmentVideo: {
                        fields: {
                          segment: {
                            rule: "repeated",
                            type: "ResponseUrl",
                            id: 1
                          }
                        }
                      },
                      PlayErr: {
                        values: {
                          NoErr: 0,
                          WithMultiDeviceLoginErr: 1
                        }
                      },
                      StreamInfo: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          description: {
                            type: "string",
                            id: 3
                          },
                          errCode: {
                            type: "PlayErr",
                            id: 4
                          },
                          limit: {
                            type: "StreamLimit",
                            id: 5
                          },
                          needVip: {
                            type: "bool",
                            id: 6
                          },
                          needLogin: {
                            type: "bool",
                            id: 7
                          },
                          intact: {
                            type: "bool",
                            id: 8
                          },
                          noRexcode: {
                            type: "bool",
                            id: 9
                          },
                          attribute: {
                            type: "int64",
                            id: 10
                          },
                          newDescription: {
                            type: "string",
                            id: 11
                          },
                          displayDesc: {
                            type: "string",
                            id: 12
                          },
                          superscript: {
                            type: "string",
                            id: 13
                          }
                        }
                      },
                      StreamLimit: {
                        fields: {
                          title: {
                            type: "string",
                            id: 1
                          },
                          uri: {
                            type: "string",
                            id: 2
                          },
                          msg: {
                            type: "string",
                            id: 3
                          }
                        }
                      },
                      PlayConfEditReply: {
                        fields: {}
                      },
                      PlayConfEditReq: {
                        fields: {
                          playConf: {
                            rule: "repeated",
                            type: "PlayConfState",
                            id: 1
                          }
                        }
                      },
                      PlayConfState: {
                        fields: {
                          confType: {
                            type: "ConfType",
                            id: 1
                          },
                          show: {
                            type: "bool",
                            id: 2
                          },
                          fieldValue: {
                            type: "FieldValue",
                            id: 3
                          }
                        }
                      },
                      DashVideo: {
                        fields: {
                          baseUrl: {
                            type: "string",
                            id: 1
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 2
                          },
                          bandwidth: {
                            type: "uint32",
                            id: 3
                          },
                          codecid: {
                            type: "uint32",
                            id: 4
                          },
                          md5: {
                            type: "string",
                            id: 5
                          },
                          size: {
                            type: "uint64",
                            id: 6
                          },
                          audioId: {
                            type: "uint32",
                            id: 7
                          },
                          noRexcode: {
                            type: "bool",
                            id: 8
                          }
                        }
                      },
                      VideoType: {
                        values: {
                          Unknown: 0,
                          FLV: 1,
                          DASH: 2,
                          MP4: 3
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // src/io/grpc/BAPIMetadata/metadata.ts
  init_tampermonkey();
  var import_light2 = __toESM(require_light());

  // src/io/grpc/BAPIMetadata/metadata.json
  var metadata_default = {
    nested: {
      bilibili: {
        nested: {
          metadata: {
            nested: {
              Metadata: {
                fields: {
                  accessKey: {
                    type: "string",
                    id: 1
                  },
                  mobiApp: {
                    type: "string",
                    id: 2
                  },
                  device: {
                    type: "string",
                    id: 3
                  },
                  build: {
                    type: "int32",
                    id: 4
                  },
                  channel: {
                    type: "string",
                    id: 5
                  },
                  buvid: {
                    type: "string",
                    id: 6
                  },
                  platform: {
                    type: "string",
                    id: 7
                  }
                }
              }
            }
          },
          rpc: {
            nested: {
              Status: {
                fields: {
                  code: {
                    type: "int32",
                    id: 1
                  },
                  message: {
                    type: "string",
                    id: 2
                  },
                  details: {
                    rule: "repeated",
                    type: "google.protobuf.Any",
                    id: 3
                  }
                }
              }
            }
          }
        }
      },
      google: {
        nested: {
          protobuf: {
            nested: {
              Any: {
                fields: {
                  type_url: {
                    type: "string",
                    id: 1
                  },
                  value: {
                    type: "google.protobuf.RequestInfo",
                    id: 2
                  }
                }
              },
              RequestInfo: {
                fields: {
                  request_id: {
                    type: "int64",
                    id: 1
                  },
                  serving_data: {
                    type: "string",
                    id: 2
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // node_modules/fflate/esm/browser.js
  init_tampermonkey();
  var u8 = Uint8Array;
  var u16 = Uint16Array;
  var i32 = Int32Array;
  var fleb = new u8([
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    1,
    1,
    1,
    1,
    2,
    2,
    2,
    2,
    3,
    3,
    3,
    3,
    4,
    4,
    4,
    4,
    5,
    5,
    5,
    5,
    0,
    /* unused */
    0,
    0,
    /* impossible */
    0
  ]);
  var fdeb = new u8([
    0,
    0,
    0,
    0,
    1,
    1,
    2,
    2,
    3,
    3,
    4,
    4,
    5,
    5,
    6,
    6,
    7,
    7,
    8,
    8,
    9,
    9,
    10,
    10,
    11,
    11,
    12,
    12,
    13,
    13,
    /* unused */
    0,
    0
  ]);
  var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
  var freb = function(eb, start) {
    var b = new u16(31);
    for (var i = 0; i < 31; ++i) {
      b[i] = start += 1 << eb[i - 1];
    }
    var r = new i32(b[30]);
    for (var i = 1; i < 30; ++i) {
      for (var j = b[i]; j < b[i + 1]; ++j) {
        r[j] = j - b[i] << 5 | i;
      }
    }
    return { b, r };
  };
  var _a = freb(fleb, 2);
  var fl = _a.b;
  var revfl = _a.r;
  fl[28] = 258, revfl[258] = 28;
  var _b = freb(fdeb, 0);
  var fd = _b.b;
  var revfd = _b.r;
  var rev = new u16(32768);
  for (i = 0; i < 32768; ++i) {
    x = (i & 43690) >> 1 | (i & 21845) << 1;
    x = (x & 52428) >> 2 | (x & 13107) << 2;
    x = (x & 61680) >> 4 | (x & 3855) << 4;
    rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
  }
  var x;
  var i;
  var hMap = function(cd, mb, r) {
    var s = cd.length;
    var i = 0;
    var l = new u16(mb);
    for (; i < s; ++i) {
      if (cd[i])
        ++l[cd[i] - 1];
    }
    var le = new u16(mb);
    for (i = 1; i < mb; ++i) {
      le[i] = le[i - 1] + l[i - 1] << 1;
    }
    var co;
    if (r) {
      co = new u16(1 << mb);
      var rvb = 15 - mb;
      for (i = 0; i < s; ++i) {
        if (cd[i]) {
          var sv = i << 4 | cd[i];
          var r_1 = mb - cd[i];
          var v = le[cd[i] - 1]++ << r_1;
          for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
            co[rev[v] >> rvb] = sv;
          }
        }
      }
    } else {
      co = new u16(s);
      for (i = 0; i < s; ++i) {
        if (cd[i]) {
          co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i];
        }
      }
    }
    return co;
  };
  var flt = new u8(288);
  for (i = 0; i < 144; ++i)
    flt[i] = 8;
  var i;
  for (i = 144; i < 256; ++i)
    flt[i] = 9;
  var i;
  for (i = 256; i < 280; ++i)
    flt[i] = 7;
  var i;
  for (i = 280; i < 288; ++i)
    flt[i] = 8;
  var i;
  var fdt = new u8(32);
  for (i = 0; i < 32; ++i)
    fdt[i] = 5;
  var i;
  var flm = /* @__PURE__ */ hMap(flt, 9, 0);
  var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
  var fdm = /* @__PURE__ */ hMap(fdt, 5, 0);
  var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
  var max = function(a) {
    var m = a[0];
    for (var i = 1; i < a.length; ++i) {
      if (a[i] > m)
        m = a[i];
    }
    return m;
  };
  var bits = function(d, p, m) {
    var o = p / 8 | 0;
    return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
  };
  var bits16 = function(d, p) {
    var o = p / 8 | 0;
    return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
  };
  var shft = function(p) {
    return (p + 7) / 8 | 0;
  };
  var slc = function(v, s, e) {
    if (s == null || s < 0)
      s = 0;
    if (e == null || e > v.length)
      e = v.length;
    return new u8(v.subarray(s, e));
  };
  var ec = [
    "unexpected EOF",
    "invalid block type",
    "invalid length/literal",
    "invalid distance",
    "stream finished",
    "no stream handler",
    ,
    "no callback",
    "invalid UTF-8 data",
    "extra field too long",
    "date not in range 1980-2099",
    "filename too long",
    "stream finishing",
    "invalid zip data"
    // determined by unknown compression method
  ];
  var err = function(ind, msg, nt) {
    var e = new Error(msg || ec[ind]);
    e.code = ind;
    if (Error.captureStackTrace)
      Error.captureStackTrace(e, err);
    if (!nt)
      throw e;
    return e;
  };
  var inflt = function(dat, st, buf, dict) {
    var sl = dat.length, dl = dict ? dict.length : 0;
    if (!sl || st.f && !st.l)
      return buf || new u8(0);
    var noBuf = !buf;
    var resize = noBuf || st.i != 2;
    var noSt = st.i;
    if (noBuf)
      buf = new u8(sl * 3);
    var cbuf = function(l2) {
      var bl = buf.length;
      if (l2 > bl) {
        var nbuf = new u8(Math.max(bl * 2, l2));
        nbuf.set(buf);
        buf = nbuf;
      }
    };
    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
    var tbts = sl * 8;
    do {
      if (!lm) {
        final = bits(dat, pos, 1);
        var type = bits(dat, pos + 1, 3);
        pos += 3;
        if (!type) {
          var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
          if (t > sl) {
            if (noSt)
              err(0);
            break;
          }
          if (resize)
            cbuf(bt + l);
          buf.set(dat.subarray(s, t), bt);
          st.b = bt += l, st.p = pos = t * 8, st.f = final;
          continue;
        } else if (type == 1)
          lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
        else if (type == 2) {
          var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
          var tl = hLit + bits(dat, pos + 5, 31) + 1;
          pos += 14;
          var ldt = new u8(tl);
          var clt = new u8(19);
          for (var i = 0; i < hcLen; ++i) {
            clt[clim[i]] = bits(dat, pos + i * 3, 7);
          }
          pos += hcLen * 3;
          var clb = max(clt), clbmsk = (1 << clb) - 1;
          var clm = hMap(clt, clb, 1);
          for (var i = 0; i < tl; ) {
            var r = clm[bits(dat, pos, clbmsk)];
            pos += r & 15;
            var s = r >> 4;
            if (s < 16) {
              ldt[i++] = s;
            } else {
              var c = 0, n = 0;
              if (s == 16)
                n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
              else if (s == 17)
                n = 3 + bits(dat, pos, 7), pos += 3;
              else if (s == 18)
                n = 11 + bits(dat, pos, 127), pos += 7;
              while (n--)
                ldt[i++] = c;
            }
          }
          var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
          lbt = max(lt);
          dbt = max(dt);
          lm = hMap(lt, lbt, 1);
          dm = hMap(dt, dbt, 1);
        } else
          err(1);
        if (pos > tbts) {
          if (noSt)
            err(0);
          break;
        }
      }
      if (resize)
        cbuf(bt + 131072);
      var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
      var lpos = pos;
      for (; ; lpos = pos) {
        var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
        pos += c & 15;
        if (pos > tbts) {
          if (noSt)
            err(0);
          break;
        }
        if (!c)
          err(2);
        if (sym < 256)
          buf[bt++] = sym;
        else if (sym == 256) {
          lpos = pos, lm = null;
          break;
        } else {
          var add = sym - 254;
          if (sym > 264) {
            var i = sym - 257, b = fleb[i];
            add = bits(dat, pos, (1 << b) - 1) + fl[i];
            pos += b;
          }
          var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
          if (!d)
            err(3);
          pos += d & 15;
          var dt = fd[dsym];
          if (dsym > 3) {
            var b = fdeb[dsym];
            dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
          }
          if (pos > tbts) {
            if (noSt)
              err(0);
            break;
          }
          if (resize)
            cbuf(bt + 131072);
          var end = bt + add;
          if (bt < dt) {
            var shift = dl - dt, dend = Math.min(dt, end);
            if (shift + bt < 0)
              err(3);
            for (; bt < dend; ++bt)
              buf[bt] = dict[shift + bt];
          }
          for (; bt < end; ++bt)
            buf[bt] = buf[bt - dt];
        }
      }
      st.l = lm, st.p = lpos, st.b = bt, st.f = final;
      if (lm)
        final = 1, st.m = lbt, st.d = dm, st.n = dbt;
    } while (!final);
    return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
  };
  var wbits = function(d, p, v) {
    v <<= p & 7;
    var o = p / 8 | 0;
    d[o] |= v;
    d[o + 1] |= v >> 8;
  };
  var wbits16 = function(d, p, v) {
    v <<= p & 7;
    var o = p / 8 | 0;
    d[o] |= v;
    d[o + 1] |= v >> 8;
    d[o + 2] |= v >> 16;
  };
  var hTree = function(d, mb) {
    var t = [];
    for (var i = 0; i < d.length; ++i) {
      if (d[i])
        t.push({ s: i, f: d[i] });
    }
    var s = t.length;
    var t2 = t.slice();
    if (!s)
      return { t: et, l: 0 };
    if (s == 1) {
      var v = new u8(t[0].s + 1);
      v[t[0].s] = 1;
      return { t: v, l: 1 };
    }
    t.sort(function(a, b) {
      return a.f - b.f;
    });
    t.push({ s: -1, f: 25001 });
    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
    t[0] = { s: -1, f: l.f + r.f, l, r };
    while (i1 != s - 1) {
      l = t[t[i0].f < t[i2].f ? i0++ : i2++];
      r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
      t[i1++] = { s: -1, f: l.f + r.f, l, r };
    }
    var maxSym = t2[0].s;
    for (var i = 1; i < s; ++i) {
      if (t2[i].s > maxSym)
        maxSym = t2[i].s;
    }
    var tr = new u16(maxSym + 1);
    var mbt = ln(t[i1 - 1], tr, 0);
    if (mbt > mb) {
      var i = 0, dt = 0;
      var lft = mbt - mb, cst = 1 << lft;
      t2.sort(function(a, b) {
        return tr[b.s] - tr[a.s] || a.f - b.f;
      });
      for (; i < s; ++i) {
        var i2_1 = t2[i].s;
        if (tr[i2_1] > mb) {
          dt += cst - (1 << mbt - tr[i2_1]);
          tr[i2_1] = mb;
        } else
          break;
      }
      dt >>= lft;
      while (dt > 0) {
        var i2_2 = t2[i].s;
        if (tr[i2_2] < mb)
          dt -= 1 << mb - tr[i2_2]++ - 1;
        else
          ++i;
      }
      for (; i >= 0 && dt; --i) {
        var i2_3 = t2[i].s;
        if (tr[i2_3] == mb) {
          --tr[i2_3];
          ++dt;
        }
      }
      mbt = mb;
    }
    return { t: new u8(tr), l: mbt };
  };
  var ln = function(n, l, d) {
    return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;
  };
  var lc = function(c) {
    var s = c.length;
    while (s && !c[--s])
      ;
    var cl = new u16(++s);
    var cli = 0, cln = c[0], cls = 1;
    var w = function(v) {
      cl[cli++] = v;
    };
    for (var i = 1; i <= s; ++i) {
      if (c[i] == cln && i != s)
        ++cls;
      else {
        if (!cln && cls > 2) {
          for (; cls > 138; cls -= 138)
            w(32754);
          if (cls > 2) {
            w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
            cls = 0;
          }
        } else if (cls > 3) {
          w(cln), --cls;
          for (; cls > 6; cls -= 6)
            w(8304);
          if (cls > 2)
            w(cls - 3 << 5 | 8208), cls = 0;
        }
        while (cls--)
          w(cln);
        cls = 1;
        cln = c[i];
      }
    }
    return { c: cl.subarray(0, cli), n: s };
  };
  var clen = function(cf, cl) {
    var l = 0;
    for (var i = 0; i < cl.length; ++i)
      l += cf[i] * cl[i];
    return l;
  };
  var wfblk = function(out, pos, dat) {
    var s = dat.length;
    var o = shft(pos + 2);
    out[o] = s & 255;
    out[o + 1] = s >> 8;
    out[o + 2] = out[o] ^ 255;
    out[o + 3] = out[o + 1] ^ 255;
    for (var i = 0; i < s; ++i)
      out[o + i + 4] = dat[i];
    return (o + 4 + s) * 8;
  };
  var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
    wbits(out, p++, final);
    ++lf[256];
    var _a3 = hTree(lf, 15), dlt = _a3.t, mlb = _a3.l;
    var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l;
    var _c = lc(dlt), lclt = _c.c, nlc = _c.n;
    var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;
    var lcfreq = new u16(19);
    for (var i = 0; i < lclt.length; ++i)
      ++lcfreq[lclt[i] & 31];
    for (var i = 0; i < lcdt.length; ++i)
      ++lcfreq[lcdt[i] & 31];
    var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;
    var nlcc = 19;
    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
      ;
    var flen = bl + 5 << 3;
    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
    if (bs >= 0 && flen <= ftlen && flen <= dtlen)
      return wfblk(out, p, dat.subarray(bs, bs + bl));
    var lm, ll, dm, dl;
    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
    if (dtlen < ftlen) {
      lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
      var llm = hMap(lct, mlcb, 0);
      wbits(out, p, nlc - 257);
      wbits(out, p + 5, ndc - 1);
      wbits(out, p + 10, nlcc - 4);
      p += 14;
      for (var i = 0; i < nlcc; ++i)
        wbits(out, p + 3 * i, lct[clim[i]]);
      p += 3 * nlcc;
      var lcts = [lclt, lcdt];
      for (var it = 0; it < 2; ++it) {
        var clct = lcts[it];
        for (var i = 0; i < clct.length; ++i) {
          var len = clct[i] & 31;
          wbits(out, p, llm[len]), p += lct[len];
          if (len > 15)
            wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12;
        }
      }
    } else {
      lm = flm, ll = flt, dm = fdm, dl = fdt;
    }
    for (var i = 0; i < li; ++i) {
      var sym = syms[i];
      if (sym > 255) {
        var len = sym >> 18 & 31;
        wbits16(out, p, lm[len + 257]), p += ll[len + 257];
        if (len > 7)
          wbits(out, p, sym >> 23 & 31), p += fleb[len];
        var dst = sym & 31;
        wbits16(out, p, dm[dst]), p += dl[dst];
        if (dst > 3)
          wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst];
      } else {
        wbits16(out, p, lm[sym]), p += ll[sym];
      }
    }
    wbits16(out, p, lm[256]);
    return p + ll[256];
  };
  var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
  var et = /* @__PURE__ */ new u8(0);
  var dflt = function(dat, lvl, plvl, pre, post, st) {
    var s = st.z || dat.length;
    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);
    var w = o.subarray(pre, o.length - post);
    var lst = st.l;
    var pos = (st.r || 0) & 7;
    if (lvl) {
      if (pos)
        w[0] = st.r >> 3;
      var opt = deo[lvl - 1];
      var n = opt >> 13, c = opt & 8191;
      var msk_1 = (1 << plvl) - 1;
      var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);
      var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
      var hsh = function(i2) {
        return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;
      };
      var syms = new i32(25e3);
      var lf = new u16(288), df = new u16(32);
      var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;
      for (; i + 2 < s; ++i) {
        var hv = hsh(i);
        var imod = i & 32767, pimod = head[hv];
        prev[imod] = pimod;
        head[hv] = imod;
        if (wi <= i) {
          var rem = s - i;
          if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) {
            pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
            li = lc_1 = eb = 0, bs = i;
            for (var j = 0; j < 286; ++j)
              lf[j] = 0;
            for (var j = 0; j < 30; ++j)
              df[j] = 0;
          }
          var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;
          if (rem > 2 && hv == hsh(i - dif)) {
            var maxn = Math.min(n, rem) - 1;
            var maxd = Math.min(32767, i);
            var ml = Math.min(258, rem);
            while (dif <= maxd && --ch_1 && imod != pimod) {
              if (dat[i + l] == dat[i + l - dif]) {
                var nl = 0;
                for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
                  ;
                if (nl > l) {
                  l = nl, d = dif;
                  if (nl > maxn)
                    break;
                  var mmd = Math.min(dif, nl - 2);
                  var md = 0;
                  for (var j = 0; j < mmd; ++j) {
                    var ti = i - dif + j & 32767;
                    var pti = prev[ti];
                    var cd = ti - pti & 32767;
                    if (cd > md)
                      md = cd, pimod = ti;
                  }
                }
              }
              imod = pimod, pimod = prev[imod];
              dif += imod - pimod & 32767;
            }
          }
          if (d) {
            syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];
            var lin = revfl[l] & 31, din = revfd[d] & 31;
            eb += fleb[lin] + fdeb[din];
            ++lf[257 + lin];
            ++df[din];
            wi = i + l;
            ++lc_1;
          } else {
            syms[li++] = dat[i];
            ++lf[dat[i]];
          }
        }
      }
      for (i = Math.max(i, wi); i < s; ++i) {
        syms[li++] = dat[i];
        ++lf[dat[i]];
      }
      pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
      if (!lst) {
        st.r = pos & 7 | w[pos / 8 | 0] << 3;
        pos -= 7;
        st.h = head, st.p = prev, st.i = i, st.w = wi;
      }
    } else {
      for (var i = st.w || 0; i < s + lst; i += 65535) {
        var e = i + 65535;
        if (e >= s) {
          w[pos / 8 | 0] = lst;
          e = s;
        }
        pos = wfblk(w, pos + 1, dat.subarray(i, e));
      }
      st.i = s;
    }
    return slc(o, 0, pre + shft(pos) + post);
  };
  var crct = /* @__PURE__ */ function() {
    var t = new Int32Array(256);
    for (var i = 0; i < 256; ++i) {
      var c = i, k = 9;
      while (--k)
        c = (c & 1 && -306674912) ^ c >>> 1;
      t[i] = c;
    }
    return t;
  }();
  var crc = function() {
    var c = -1;
    return {
      p: function(d) {
        var cr = c;
        for (var i = 0; i < d.length; ++i)
          cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8;
        c = cr;
      },
      d: function() {
        return ~c;
      }
    };
  };
  var dopt = function(dat, opt, pre, post, st) {
    if (!st) {
      st = { l: 1 };
      if (opt.dictionary) {
        var dict = opt.dictionary.subarray(-32768);
        var newDat = new u8(dict.length + dat.length);
        newDat.set(dict);
        newDat.set(dat, dict.length);
        dat = newDat;
        st.w = dict.length;
      }
    }
    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, st);
  };
  var wbytes = function(d, b, v) {
    for (; v; ++b)
      d[b] = v, v >>>= 8;
  };
  var gzh = function(c, o) {
    var fn = o.filename;
    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3;
    if (o.mtime != 0)
      wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3));
    if (fn) {
      c[3] = 8;
      for (var i = 0; i <= fn.length; ++i)
        c[i + 10] = fn.charCodeAt(i);
    }
  };
  var gzs = function(d) {
    if (d[0] != 31 || d[1] != 139 || d[2] != 8)
      err(6, "invalid gzip data");
    var flg = d[3];
    var st = 10;
    if (flg & 4)
      st += (d[10] | d[11] << 8) + 2;
    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])
      ;
    return st + (flg & 2);
  };
  var gzl = function(d) {
    var l = d.length;
    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;
  };
  var gzhl = function(o) {
    return 10 + (o.filename ? o.filename.length + 1 : 0);
  };
  function gzipSync(data, opts) {
    if (!opts)
      opts = {};
    var c = crc(), l = data.length;
    c.p(data);
    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;
    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;
  }
  function gunzipSync(data, opts) {
    var st = gzs(data);
    if (st + 8 > data.length)
      err(6, "invalid gzip data");
    return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);
  }
  var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
  var tds = 0;
  try {
    td.decode(et, { stream: true });
    tds = 1;
  } catch (e) {
  }

  // src/io/grpc/BAPIMetadata/metadata.ts
  var BAPIMetadata = class _BAPIMetadata {
    constructor(accessKey) {
      this.accessKey = accessKey;
      _BAPIMetadata.Root || _BAPIMetadata.RootInit();
      accessKey && (this.metadata.accessKey = accessKey);
    }
    /** 命名空间 */
    static Root;
    /** Type<Metadata> */
    static metadata;
    /** Type<Status> */
    static status;
    /** 初始化命名空间及Type */
    static RootInit() {
      this.Root = import_light2.Root.fromJSON(metadata_default);
      this.metadata = this.Root.lookupType("Metadata");
      this.status = this.Root.lookupType("bilibili.rpc.Status");
    }
    /** grpc app host */
    hostAPP = "//app.bilibili.com";
    /** grpc host */
    hostGrpc = "//grpc.biliapi.net";
    /** 默认metadata */
    metadata = {
      buvid: "5848738A7B27474C9C407F25701EFAC28527C",
      build: 7220300,
      // channel: 'bilibili',
      mobiApp: "iphone",
      platform: "ios"
      // device: 'phone'
    };
    /** Base64化metadata */
    get metadataBase64() {
      return base64.encodeFromUint8Array(_BAPIMetadata.metadata.encode(_BAPIMetadata.metadata.fromObject(this.metadata)).finish());
    }
    /**
     * 发起grpc请求  
     * - T 用于序列化请求参数的Type类型  
     * - K 用于反序列化返回值的Type类型
     * @param method 请求方法名
     * @param repType 用于序列化请求参数的Type名
     * @param replyType 用于反序列化返回值的Type名
     * @param req 序列化前的请求参数
     * @returns 请求返回值
     */
    async request(method, repType, replyType, req) {
      const typeReq = this.lookupType(repType);
      const typeReply = this.lookupType(replyType);
      const body = gzipSync(typeReq.encode(typeReq.fromObject(req)).finish());
      const buffer = new ArrayBuffer(body.length + 5);
      const dataview = new DataView(buffer);
      dataview.setUint32(1, body.length);
      const uInt8 = new Uint8Array(buffer);
      uInt8[0] = 1;
      uInt8.set(body, 5);
      const headers = {
        "Content-Type": "application/grpc",
        "x-bili-metadata-bin": this.metadataBase64,
        "user-agent": "Bilibili Freedoooooom/MarkII",
        "referer": "",
        "grpc-encoding": "gzip",
        "grpc-accept-encoding": "identify,gzip",
        "grpc-timeout": "17989265u"
        // 1680058967939
      };
      this.accessKey && (headers.authorization = \`identify_v1 \${this.accessKey}\`);
      const response = await GM.fetch(\`\${this.hostAPP}/\${this.package}.\${this.service}/\${method}\`, {
        method: "POST",
        headers,
        body: buffer
      }, void 0, {
        "Access-Control-Expose-Headers": "grpc-status,grpc-message,grpc-status-details-bin,grpc-encoding"
      });
      if (response.headers.has("grpc-status-details-bin")) {
        const bin = response.headers.get("grpc-status-details-bin");
        const uInt82 = base64.decodeToUint8Array(bin);
        const details = _BAPIMetadata.status.toObject(_BAPIMetadata.status.decode(uInt82));
        if (details.details && details.details.length) {
          throw details.details[0].value;
        }
        throw details;
      } else if (response.headers.has("grpc-message")) {
        throw response.headers.get("grpc-message");
      }
      const arraybuffer = await response.arrayBuffer();
      const uint8Array = new Uint8Array(arraybuffer.slice(5));
      if (response.headers.get("grpc-encoding") === "gzip") {
        return typeReply.toObject(typeReply.decode(gunzipSync(uint8Array)));
      }
      return typeReply.toObject(typeReply.decode(uint8Array));
    }
  };

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts
  var BAPIAppPlayurlV1 = class _BAPIAppPlayurlV1 extends BAPIMetadata {
    constructor(accessKey) {
      super(accessKey);
      this.accessKey = accessKey;
      _BAPIAppPlayurlV1.Root || (_BAPIAppPlayurlV1.Root = import_light3.Root.fromJSON(playurl_default));
    }
    /** 命名空间 */
    static Root;
    package = "bilibili.app.playurl.v1";
    service = "PlayURL";
    lookupType(type) {
      return _BAPIAppPlayurlV1.Root.lookupType(\`\${this.package}.\${type}\`);
    }
    /** 获取播放地址 */
    PlayURL(req) {
      return this.request(
        "PlayURL",
        "PlayURLReq",
        "PlayURLReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2
        }, req)
      );
    }
    /** 获取投屏地址 */
    Project(req) {
      return this.request(
        "Project",
        "ProjectReq",
        "ProjectReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2,
          protocol: 0,
          deviceType: 0
        }, req)
      );
    }
    /** 获取播放地址和云控配置信息 */
    PlayView(req) {
      return this.request(
        "PlayView",
        "PlayViewReq",
        "PlayViewReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2
        }, req)
      );
    }
  };

  // src/core/download/aria2.ts
  init_tampermonkey();

  // src/utils/mutex.ts
  init_tampermonkey();
  function getMetux() {
    return Math.random().toString(36).substring(2);
  }

  // src/core/download/aria2.ts
  var Aria2 = class {
    constructor(userAgent, referer, dir, server = "http://localhost", port = 6800, token, split, size) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
      this.server = server;
      this.port = port;
      this.token = token;
      this.split = split;
      this.size = size;
    }
    get url() {
      return \`\${this.server}:\${this.port}/jsonrpc\`;
    }
    /** 命令行 */
    cmdlet(data) {
      const arr2 = ["aria2c"];
      data.urls.forEach((d) => arr2.push(\`"\${d}"\`));
      data.out && arr2.push(\`--out="\${data.out}"\`);
      (data.userAgent || this.userAgent) && arr2.push(\`--user-agent="\${data.userAgent || this.userAgent}"\`);
      (data.referer || this.referer) && arr2.push(\`--referer="\${data.referer || this.referer}"\`);
      (data.dir || this.dir) && arr2.push(\`--dir="\${data.dir || this.dir}"\`);
      (data.split || this.split) && arr2.push(\`--split="\${data.split || this.split}"\`, \`--max-connection-per-server="\${data.split || this.split}"\`);
      (data.size || this.size) && arr2.push(\`--min-split-size="\${data.size || this.size}M"\`);
      data.header && Object.entries(data.header).forEach((d) => arr2.push(\`--header="\${d[0]}: \${d[1]}"\`));
      return navigator.clipboard.writeText(arr2.join(" "));
    }
    /** RPC */
    rpc(data) {
      const options = {};
      data.out && (options.out = data.out);
      (data.userAgent || this.userAgent) && (options["user-agent"] = data.userAgent || this.userAgent);
      (data.referer || this.referer) && (options.referer = data.referer || this.referer);
      (data.dir || this.dir) && (options.dir = data.dir || this.dir);
      (data.split || this.split) && (options.split = options["max-connection-per-server"] = data.split || this.split);
      (data.size || this.size) && (options["min-split-size"] = \`\${data.size || this.size}M\`);
      data.header && (options.header = data.header);
      return this.postMessage("aria2.addUri", data.id, [data.urls, options]);
    }
    /** 获取aria2配置信息 */
    getVersion() {
      return this.postMessage("aria2.getVersion");
    }
    postMessage(method, id = getMetux(), params = []) {
      this.token && params.unshift(\`token:\${this.token}\`);
      return new Promise((r, j) => {
        fetch(this.url, {
          method: "POST",
          body: JSON.stringify({ method, id, params }),
          headers: {
            "Content-Type": "application/json"
          }
        }).then((d) => d.json()).then((d) => {
          d.error && j(d.error);
          d.result && r(d.result);
        }).catch((e) => {
          fetch(objUrl(this.url, { method, id, params: base64.encode(JSON.stringify(params)) })).then((d) => d.json()).then((d) => {
            d.error && j(d.error);
            d.result && r(d.result);
          }).catch(() => {
            j(e);
          });
        });
      });
    }
  };

  // src/core/download/curl.ts
  init_tampermonkey();
  var Curl = class {
    constructor(userAgent, referer, dir) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
    }
    /** 命令行 */
    cmdlet(data) {
      const arr2 = ["curl", "-C", "-", \`"\${data.url}"\`];
      data.out && arr2.push("-o", \`"\${data.out}"\`);
      (data.userAgent || this.userAgent) && arr2.push("--user-agent", \`"\${data.userAgent || this.userAgent}"\`);
      (data.referer || this.referer) && arr2.push("--referer", \`"\${data.referer || this.referer}"\`);
      (data.dir || this.dir) && arr2.push("--output-dir", \`"\${data.dir || this.dir}"\`);
      data.header && Object.entries(data.header).forEach((d) => arr2.push("-H", \`"\${d[0]}: \${d[1]}"\`));
      return navigator.clipboard.writeText(arr2.join(" "));
    }
  };

  // src/core/download/ef2.ts
  init_tampermonkey();
  var Ef2 = class _Ef2 {
    constructor(userAgent, referer, dir, delay = false, silence = false) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
      this.delay = delay;
      this.silence = silence;
    }
    /** 拉起IDM */
    sendLinkToIDM(data) {
      this.rebuildData(data);
      const ef2str = _Ef2.encode(data);
      const a = document.createElement("a");
      a.href = ef2str;
      a.click();
      return ef2str;
    }
    /** 生成ef2文件 */
    file(data, fileName) {
      this.rebuildData(data);
      return _Ef2.file([data], fileName);
    }
    /** 补全数据 */
    rebuildData(data) {
      this.userAgent && !data.userAgent && (data.userAgent = this.userAgent);
      this.referer && !data.referer && (data.referer = this.referer);
      this.dir && !data.dir && (data.dir = this.dir);
      this.delay && !data.delay && (data.delay = this.delay);
      this.silence && !data.silence && (data.silence = this.silence);
    }
    /** 生成ef2文件 */
    static file(data, fileName) {
      const result = [];
      data.forEach((d) => {
        const arr2 = ["<", "", "", "", ""];
        Object.entries(d).forEach((d2) => {
          switch (d2[0]) {
            case "cookie":
              arr2[4] = \`cookie: \${d2[1]}\`;
              break;
            case "delay":
              break;
            case "dir":
              d2[1] = d2[1].replace(/\\//, "\\\\");
              d2[1].endsWith("\\\\") && (d2[1] = d2[1].slice(0, -1));
              arr2.push(\`filepath: \${d2[1]}\`);
              break;
            case "out":
              arr2.push(\`filename: \${d2[1]}\`);
              break;
            case "password":
              arr2.push(\`password: \${d2[1]}\`);
              break;
            case "body":
              arr2.push(\`postdata: \${d2[1]}\`);
              break;
            case "referer":
              arr2[2] = \`referer: \${d2[1]}\`;
              break;
            case "silence":
              break;
            case "url":
              d2[1].startsWith("//") && (d2[1] = "https:" + d2[1]);
              arr2[1] = d2[1];
              break;
            case "userAgent":
              arr2[3] = \`User-Agent: \${d2[1]}\`;
              break;
            case "userName":
              arr2.push(\`username: \${d2[1]}\`);
              break;
            default:
              break;
          }
        });
        arr2.push(">");
        arr2.forEach((d2) => {
          d2 && result.push(d2);
        });
      });
      result.push("");
      saveAs(result.join("\\r\\n"), fileName || \`\${data[0].out || getMetux()}.ef2\`);
    }
    /** 生成ef2协议 */
    static encode(data) {
      const arr2 = [];
      Object.entries(data).forEach((d) => {
        typeof d[1] === "string" && d[1].startsWith('"') || (d[1] = \`"\${d[1]}"\`);
        switch (d[0]) {
          case "cookie":
            arr2.push("-c", d[1]);
            break;
          case "delay":
            arr2.push("-q");
            break;
          case "dir":
            d[1] = d[1].replace(/\\//, "\\\\");
            d[1].endsWith("\\\\") && (d[1] = d[1].slice(0, -1));
            arr2.push("-o", d[1]);
            break;
          case "out":
            arr2.push("-s", d[1]);
            break;
          case "password":
            arr2.push("-P", d[1]);
            break;
          case "body":
            arr2.push("-d", d[1]);
            break;
          case "referer":
            arr2.push("-r", d[1]);
            break;
          case "silence":
            arr2.push("-f");
            break;
          case "url":
            d[1].startsWith("//") && (d[1] = "https:" + d[1]);
            arr2.push("-u", d[1]);
            break;
          case "userAgent":
            arr2.push("-a", d[1]);
            break;
          case "userName":
            arr2.push("-U", d[1]);
            break;
          default:
            break;
        }
      });
      return \`ef2://\${base64.encode(arr2.join(" "))}\`;
    }
    /** 解码ef2协议 */
    static decode(ef2str) {
      ef2str = ef2str.replace("ef2://", "");
      ef2str = base64.decode(ef2str);
      const arr2 = ef2str.split(" ");
      const data = {};
      for (let i = 0; i < arr2.length; i++) {
        if (/-\\w/.test(arr2[i])) {
          switch (arr2[i]) {
            case "-c":
              data.cookie = arr2[i + 1];
              i++;
              break;
            case "-q":
              data.delay = true;
              break;
            case "-o":
              data.dir = arr2[i + 1];
              i++;
              break;
            case "-s":
              data.out = arr2[i + 1];
              i++;
              break;
            case "-P":
              data.password = arr2[i + 1];
              i++;
              break;
            case "-d":
              data.body = arr2[i + 1];
              i++;
              break;
            case "-r":
              data.referer = arr2[i + 1];
              i++;
              break;
            case "-f":
              data.silence = true;
              break;
            case "-u":
              data.url = arr2[i + 1];
              i++;
              break;
            case "-a":
              data.userAgent = arr2[i + 1];
              i++;
              break;
            case "-U":
              data.userName = arr2[i + 1];
              i++;
              break;
            default:
              break;
          }
        }
      }
      return data;
    }
  };

  // src/core/download/playinfo.ts
  init_tampermonkey();
  var PlayinfoFilter = class {
    constructor(fileName) {
      this.fileName = fileName;
    }
    /** 数据 */
    record = [];
    /** id => 质量 */
    quality = {
      100032: "8K",
      100029: "4K",
      100028: "1080P60",
      100027: "1080P+",
      100026: "1080P",
      100024: "720P",
      100023: "480P",
      100022: "360P",
      30280: "320Kbps",
      30260: "320Kbps",
      30259: "128Kbps",
      30257: "64Kbps",
      30255: "AUDIO",
      30251: "FLAC",
      30250: "ATMOS",
      30232: "128Kbps",
      30216: "64Kbps",
      30127: "8K",
      30126: "Dolby",
      30125: "HDR",
      30121: "4K",
      30120: "4K",
      30116: "1080P60",
      30112: "1080P+",
      30106: "1080P60",
      30102: "1080P+",
      30080: "1080P",
      30077: "1080P",
      30076: "720P",
      30074: "720P",
      30066: "720P",
      30064: "720P",
      30048: "720P",
      30033: "480P",
      30032: "480P",
      30016: "360P",
      30015: "360P",
      30011: "360P",
      464: "预览",
      336: "1080P",
      320: "720P",
      288: "480P",
      272: "360P",
      208: "1080P",
      192: "720P",
      160: "480P",
      127: "8K",
      126: "Dolby",
      125: "HDR",
      120: "4K",
      116: "1080P60",
      112: "1080P+",
      80: "1080P",
      74: "720P60",
      64: "720P",
      48: "720P",
      32: "480P",
      16: "360P",
      15: "360P",
      6: "240P",
      5: "144P"
    };
    /** id => 类型(备用方案) */
    codec = {
      hev: [30127, 30126, 30125, 30121, 30106, 30102, 30077, 30066, 30033, 30011],
      avc: [30120, 30112, 30080, 30064, 30032, 30016],
      av1: [100029, 100028, 100027, 100026, 100024, 100023, 100022]
    };
    /** 颜色表 */
    color = {
      "8K": "yellow",
      "Dolby": "pink",
      "FLAC": "pink",
      "ATMOS": "pink",
      "AUDIO": "pink",
      "HDR": "purple",
      "4K": "purple",
      "1080P60": "red",
      "1080P+": "red",
      "1080P": "red",
      "720P60": "orange",
      "720P": "orange",
      "480P": "blue",
      "360P": "green",
      "320Kbps": "red",
      "128Kbps": "blue",
      "64Kbps": "green"
    };
    /**
     * 解码playurl的下载数据
     * @param playinfo playurl返回值(json)
     */
    filter(playinfo) {
      typeof playinfo === "string" && (playinfo = toObject(playinfo));
      if (playinfo) {
        playinfo.data && this.filter(playinfo.data);
        playinfo.result && this.filter(playinfo.result);
        playinfo.durl && this.durl(playinfo.durl);
        playinfo.dash && this.dash(playinfo.dash);
      }
      return this.record;
    }
    /**
     * 整理durl部分
     * @param durl durl信息
     */
    durl(durl) {
      durl.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        url.unshift(d.url);
        const qua = this.getQuality(url[0], d.id);
        const link = {
          type: "",
          url,
          quality: qua,
          size: sizeFormat(d.size),
          color: this.color[qua] || ""
        };
        switch (d.url.includes("mp4?")) {
          case true:
            link.type = "mp4";
            break;
          case false:
            link.type = "flv";
            link.order = d.order;
            break;
        }
        this.fileName && (link.fileName = \`\${this.fileName}\${qua}.\${link.type}\`);
        this.record.push(link);
      });
    }
    /**
     * 整理dash部分
     * @param dash dash信息
     */
    dash(dash) {
      dash.video && this.dashVideo(dash.video, dash.duration);
      dash.audio && this.dashAudio(dash.audio, dash.duration);
      dash.dolby && dash.dolby.audio && Array.isArray(dash.dolby.audio) && this.dashAudio(dash.dolby.audio, dash.duration);
      dash.flac && dash.flac.audio && this.dashAudio([dash.flac.audio], dash.duration, ".flac");
    }
    /**
     * 整理dash视频部分
     * @param video dash视频信息
     * @param duration duration信息,配合bandwidth能计算出文件大小
     */
    dashVideo(video, duration) {
      video.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url);
        if (!url.length)
          return;
        let type = "";
        if (d.codecs) {
          type = d.codecs.includes("avc") ? "avc" : d.codecs.includes("av01") ? "av1" : "hev";
        } else {
          const id = this.getID(url[0]);
          type = this.codec.hev.find((d2) => d2 === id) ? "hev" : "avc";
        }
        const qua = this.getQuality(url[0], d.id);
        this.record.push({
          type,
          url,
          quality: qua,
          size: sizeFormat(d.bandwidth * duration / 8),
          color: this.color[qua] || "",
          fileName: \`\${this.fileName}\${qua}.m4v\`
        });
      });
    }
    /**
     * 整理dash音频部分
     * @param audio dash音频信息
     * @param duration duration信息,配合bandwidth能计算出文件大小
     * @param fmt 音频拓展名,默认\`.m4a\`
     */
    dashAudio(audio, duration, fmt = ".m4a") {
      audio.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url);
        const qua = this.getQuality(url[0], d.id);
        url.length && this.record.push({
          type: "aac",
          url,
          quality: qua,
          size: sizeFormat(d.bandwidth * duration / 8),
          color: this.color[qua] || "",
          fileName: \`\${this.fileName}\${qua}.\${fmt}\`
        });
      });
    }
    /**
     * 根据url确定画质/音质信息  
     * 需要维护quality表
     * @param url 多媒体url
     * @param id 媒体流id
     * @returns 画质/音质信息
     */
    getQuality(url, id) {
      return this.quality[this.getID(url)] || id && this.quality[id] || "N/A";
    }
    /**
     * 从url中提取可能的id
     * @param url 多媒体url
     */
    getID(url) {
      let id = 0;
      url.replace(/\\d+\\.((flv)|(mp4)|(m4s))/, (d) => id = Number(d.split(".")[0]));
      return id;
    }
  };

  // src/core/observer.ts
  init_tampermonkey();
  var nodelist = [];
  var observe = new MutationObserver(async (d) => d.forEach((d2) => {
    d2.addedNodes[0] && nodelist.forEach((f) => {
      try {
        f(d2.addedNodes[0]);
      } catch (e) {
        debug.error("MutationObserver", e);
      }
    });
  }));
  observe.observe(document, { childList: true, subtree: true });
  function observerAddedNodes(callback) {
    try {
      if (typeof callback === "function")
        nodelist.push(callback);
      return nodelist.length - 1;
    } catch (e) {
      debug.error(e);
    }
  }
  var switchlist = [];
  function switchVideo(callback) {
    try {
      if (typeof callback === "function")
        switchlist.push(callback);
    } catch (e) {
      debug.error("switchVideo", e);
    }
  }
  observerAddedNodes((node) => {
    if (/video-state-pause/.test(node.className)) {
      switchlist.forEach(async (d) => {
        try {
          d();
        } catch (e) {
          debug.error(d);
        }
      });
    }
  });

  // src/core/ui/download.ts
  init_tampermonkey();

  // src/html/download.html
  var download_default = '<div class="table"></div>\\r\\n<style type="text/css">\\r\\n    .table {\\r\\n        position: fixed;\\r\\n        z-index: 11113;\\r\\n        bottom: 0;\\r\\n        width: 100%;\\r\\n        min-height: 50px;\\r\\n        display: flex;\\r\\n        box-sizing: border-box;\\r\\n        background: #fff;\\r\\n        border-radius: 8px;\\r\\n        box-shadow: 0 6px 12px 0 rgba(106, 115, 133, 22%);\\r\\n        transition: transform 0.3s ease-in;\\r\\n        flex-wrap: wrap;\\r\\n        align-content: center;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n    }\\r\\n\\r\\n    .cell {\\r\\n        background-color: #fff;\\r\\n        color: #000 !important;\\r\\n        border: #ccc 1px solid;\\r\\n        border-radius: 3px;\\r\\n        display: flex;\\r\\n        margin: 3px;\\r\\n        flex-wrap: wrap;\\r\\n        align-content: center;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n        flex-direction: row;\\r\\n    }\\r\\n\\r\\n    .type {\\r\\n        color: #000 !important;\\r\\n        display: table-cell;\\r\\n        min-width: 1.5em;\\r\\n        text-align: center;\\r\\n        vertical-align: middle;\\r\\n        padding: 10px 3px;\\r\\n    }\\r\\n\\r\\n    .type.mp4 {\\r\\n        background-color: #e0e;\\r\\n    }\\r\\n\\r\\n    .type.av1 {\\r\\n        background-color: #feb;\\r\\n    }\\r\\n\\r\\n    .type.avc {\\r\\n        background-color: #07e;\\r\\n    }\\r\\n\\r\\n    .type.hev {\\r\\n        background-color: #7ba;\\r\\n    }\\r\\n\\r\\n    .type.aac {\\r\\n        background-color: #0d0;\\r\\n    }\\r\\n\\r\\n    .type.flv {\\r\\n        background-color: #0dd;\\r\\n    }\\r\\n\\r\\n    .item {\\r\\n        display: table-cell;\\r\\n        text-decoration: none;\\r\\n        padding: 3px;\\r\\n        cursor: pointer;\\r\\n        color: #1184B4;\\r\\n    }\\r\\n\\r\\n    .item:hover {\\r\\n        color: #FE3676;\\r\\n    }\\r\\n\\r\\n    .up {\\r\\n        color: #fff !important;\\r\\n        text-align: center;\\r\\n        padding: 1px 3px;\\r\\n        background-color: #777;\\r\\n    }\\r\\n\\r\\n    .up.yellow {\\r\\n        background-color: #ffe42b;\\r\\n        background-image: linear-gradient(to right, #ffe42b, #dfb200);\\r\\n    }\\r\\n\\r\\n    .up.pink {\\r\\n        background-color: #ffafc9;\\r\\n        background-image: linear-gradient(to right, #ffafc9, #dfada7);\\r\\n    }\\r\\n\\r\\n    .up.purple {\\r\\n        background-color: #c0f;\\r\\n        background-image: linear-gradient(to right, #c0f, #90f);\\r\\n    }\\r\\n\\r\\n    .up.red {\\r\\n        background-color: #f00;\\r\\n        background-image: linear-gradient(to right, #f00, #c00);\\r\\n    }\\r\\n\\r\\n    .up.orange {\\r\\n        background-color: #f90;\\r\\n        background-image: linear-gradient(to right, #f90, #d70);\\r\\n    }\\r\\n\\r\\n    .up.blue {\\r\\n        background-color: #00d;\\r\\n        background-image: linear-gradient(to right, #00d, #00b);\\r\\n    }\\r\\n\\r\\n    .up.green {\\r\\n        background-color: #0d0;\\r\\n        background-image: linear-gradient(to right, #0d0, #0b0);\\r\\n    }\\r\\n\\r\\n    .up.lv9 {\\r\\n        background-color: #151515;\\r\\n        background-image: linear-gradient(to right, #151515, #030303);\\r\\n    }\\r\\n\\r\\n    .up.lv8 {\\r\\n        background-color: #841cf9;\\r\\n        background-image: linear-gradient(to right, #841cf9, #620ad7);\\r\\n    }\\r\\n\\r\\n    .up.lv7 {\\r\\n        background-color: #e52fec;\\r\\n        background-image: linear-gradient(to right, #e52fec, #c30dca);\\r\\n    }\\r\\n\\r\\n    .up.lv6 {\\r\\n        background-color: #ff0000;\\r\\n        background-image: linear-gradient(to right, #ff0000, #dd0000);\\r\\n    }\\r\\n\\r\\n    .up.lv5 {\\r\\n        background-color: #ff6c00;\\r\\n        background-image: linear-gradient(to right, #ff6c00, #dd4a00);\\r\\n    }\\r\\n\\r\\n    .up.lv4 {\\r\\n        background-color: #ffb37c;\\r\\n        background-image: linear-gradient(to right, #ffb37c, #dd915a);\\r\\n    }\\r\\n\\r\\n    .up.lv3 {\\r\\n        background-color: #92d1e5;\\r\\n        background-image: linear-gradient(to right, #92d1e5, #70b0c3);\\r\\n    }\\r\\n\\r\\n    .up.lv2 {\\r\\n        background-color: #95ddb2;\\r\\n        background-image: linear-gradient(to right, #95ddb2, #73bb90);\\r\\n    }\\r\\n\\r\\n    .up.lv1 {\\r\\n        background-color: #bfbfbf;\\r\\n        background-image: linear-gradient(to right, #bfbfbf, #9d9d9d);\\r\\n    }\\r\\n\\r\\n    .down {\\r\\n        font-size: 90%;\\r\\n        margin-top: 2px;\\r\\n        text-align: center;\\r\\n        padding: 1px 3px;\\r\\n    }\\r\\n</style>';

  // src/core/ui/download.ts
  var BilioldDownload = class extends HTMLElement {
    _container;
    _cells = {};
    _noData;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = download_default;
      this._container = root.children[0];
      this.addEventListener("click", (e) => e.stopPropagation());
      this._noData = addElement("div", void 0, this._container, "正在获取下载数据~");
    }
    updateItem = (key, value) => {
      var _a3;
      this._container.contains(this._noData) && this._noData.remove();
      this._cells[key] || (this._cells[key] = addElement("div", { class: "cell" }, this._container));
      this._cells[key].innerHTML = \`<div class="type \${key}">\${key}</div>\`;
      value ? value.forEach((d) => {
        const a = addElement("a", { class: "item", target: "_blank" }, this._cells[key], \`<div class="up\${d.color ? \` \${d.color}\` : ""}">\${d.quality}</div><div class="down">\${d.size}</div>\`);
        d.url && (a.href = d.url[0]);
        d.fileName && (a.download = d.fileName);
        d.onClick && a.addEventListener("click", (e) => d.onClick(e));
      }) : (_a3 = this._cells[key]) == null ? void 0 : _a3.remove();
      this._container.firstChild || this._container.replaceChildren(this._noData);
    };
    show() {
      document.contains(this) || document.body.appendChild(this);
      this.style.display = "";
      window.addEventListener("click", () => {
        this.style.display = "none";
      }, { once: true });
    }
    init() {
      return propertryChangeHook({}, this.updateItem);
    }
    disconnectedCallback() {
      this.destory();
    }
    destory() {
      this._cells = {};
      this._container.replaceChildren(this._noData);
    }
  };
  customElements.get(\`download-\${"1272ee5"}\`) || customElements.define(\`download-\${"1272ee5"}\`, BilioldDownload);

  // src/core/ui/preview-image.ts
  init_tampermonkey();

  // src/html/preview-image.html
  var preview_image_default = '<div class="reply-view-image">\\r\\n    <!-- 操作区 -->\\r\\n    <div class="operation-btn">\\r\\n        <div class="operation-btn-icon close-container">\\r\\n            <i class="svg-icon close use-color" style="width: 14px; height: 14px;"></i>\\r\\n        </div>\\r\\n        <div class="operation-btn-icon last-image">\\r\\n            <i class="svg-icon left-arrow use-color" style="width: 22px; height: 22px;"></i>\\r\\n        </div>\\r\\n        <div class="operation-btn-icon next-image">\\r\\n            <i class="svg-icon right-arrow use-color" style="width: 22px; height: 22px;"></i>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- 图片内容 -->\\r\\n    <div class="show-image-wrap"></div>\\r\\n    <!-- 小图预览栏 -->\\r\\n    <div class="preview-list"></div>\\r\\n</div>\\r\\n<style>\\r\\n    .reply-view-image {\\r\\n        position: fixed;\\r\\n        z-index: 999999;\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        bottom: 0;\\r\\n        left: 0;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        background: rgba(24, 25, 28, 0.85);\\r\\n        transform: scale(1);\\r\\n        user-select: none;\\r\\n    }\\r\\n\\r\\n    .reply-view-image,\\r\\n    .reply-view-image * {\\r\\n        box-sizing: border-box;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        justify-content: center;\\r\\n        position: absolute;\\r\\n        z-index: 2;\\r\\n        width: 42px;\\r\\n        height: 42px;\\r\\n        border-radius: 50%;\\r\\n        color: white;\\r\\n        background: rgba(0, 0, 0, 0.58);\\r\\n        transition: 0.2s;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon:hover {\\r\\n        color: #FF6699;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.close-container {\\r\\n        top: 16px;\\r\\n        right: 16px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.last-image {\\r\\n        top: 50%;\\r\\n        left: 16px;\\r\\n        transform: translateY(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.next-image {\\r\\n        top: 50%;\\r\\n        right: 16px;\\r\\n        transform: translateY(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        justify-content: center;\\r\\n        position: absolute;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        max-height: 100%;\\r\\n        padding: 0 100px;\\r\\n        overflow: auto;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap .loading-svga {\\r\\n        position: absolute;\\r\\n        top: 50%;\\r\\n        left: 50%;\\r\\n        transform: translate(-50%, -50%);\\r\\n        width: 42px;\\r\\n        height: 42px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap.vertical {\\r\\n        flex-direction: column;\\r\\n        justify-content: start;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap .image-content {\\r\\n        max-width: 100%;\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        position: absolute;\\r\\n        left: 50%;\\r\\n        bottom: 30px;\\r\\n        z-index: 2;\\r\\n        padding: 6px 10px;\\r\\n        border-radius: 8px;\\r\\n        background: rgba(24, 25, 28, 0.8);\\r\\n        backdrop-filter: blur(20px);\\r\\n        transform: translateX(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box {\\r\\n        padding: 1px;\\r\\n        border: 2px solid transparent;\\r\\n        border-radius: 8px;\\r\\n        transition: 0.3s;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box.active {\\r\\n        border-color: #FF6699;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap {\\r\\n        display: flex;\\r\\n        justify-content: center;\\r\\n        overflow: hidden;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        border-radius: 6px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap.vertical {\\r\\n        flex-direction: column;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap.extra-long {\\r\\n        justify-content: start;\\r\\n    }\\r\\n\\r\\n    .svg-icon {\\r\\n        display: inline-flex;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n    }\\r\\n\\r\\n    .svg-icon svg {\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n    }\\r\\n\\r\\n    .svg-icon.use-color svg path {\\r\\n        fill: currentColor;\\r\\n        color: inherit;\\r\\n    }\\r\\n</style>';

  // src/svg/left.svg
  var left_default = '<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.67413 1.57564C7.90844 1.80995 7.90844 2.18985 7.67413 2.42417L4.09839 5.9999L7.67413 9.57564C7.90844 9.80995 7.90844 10.1899 7.67413 10.4242C7.43981 10.6585 7.05992 10.6585 6.8256 10.4242L3.00238 6.60094C2.67043 6.269 2.67043 5.73081 3.00238 5.39886L6.8256 1.57564C7.05992 1.34132 7.43981 1.34132 7.67413 1.57564Z" fill="#A2A7AE"></path></svg>';

  // src/svg/right.svg
  var right_default = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.82576 2.07564C5.59145 2.30995 5.59145 2.68985 5.82576 2.92417L10.9015 7.9999L5.82576 13.0756C5.59145 13.31 5.59145 13.6899 5.82576 13.9242C6.06008 14.1585 6.43997 14.1585 6.67429 13.9242L11.9386 8.65987C12.3031 8.29538 12.3031 7.70443 11.9386 7.33994L6.67429 2.07564C6.43997 1.84132 6.06008 1.84132 5.82576 2.07564Z" fill="#E19C2C"></path></svg>';

  // src/utils/scrollbar.ts
  init_tampermonkey();
  var Scrollbar = class _Scrollbar {
    /**
     * 设置滚动条
     * @param ele 目标节点
     * @param x 是否显示横滚动条
     * @param y 是否显示纵滚动条
     * @param side 复制样式到目标节点旁边,用于默认样式不生效的情况,比如ShadowRoot环境
     */
    constructor(ele, x = true, y = true, side = false) {
      this.ele = ele;
      this.x = x;
      this.y = y;
      this.side = side;
      _Scrollbar.style || _Scrollbar.init();
      this.overflow = this.ele.style.overflow;
      side && ele.insertAdjacentElement("afterend", _Scrollbar.style.cloneNode(true));
      this.flesh();
    }
    static mutex = getMetux();
    static prefix = "scrollbar-" + _Scrollbar.mutex;
    static style;
    static thumb = "#999";
    static track = "#EEE";
    static init() {
      this.style || (this.style = addElement("style", void 0), document.head);
      this.style.textContent = \`.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]{
    scrollbar-width: none;
    scrollbar-color: \${this.thumb} \${this.track};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover {
    scrollbar-width: thin;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar {
    width: 0;
    height: 0;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-track {
    border-radius: 4px;
    background-color: \${this.track};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: \${this.thumb};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover::-webkit-scrollbar {
    width: 7px;
    height: 7px;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar:hover {
    width: 7px;
    height: 7px;
}\`;
    }
    /** 备份原始overflow */
    overflow;
    /** 滑块颜色 */
    get thumb() {
      return _Scrollbar.thumb;
    }
    set thumb(v) {
      _Scrollbar.thumb = v;
      _Scrollbar.init();
    }
    /** 轨道颜色 */
    get track() {
      return _Scrollbar.track;
    }
    set track(v) {
      _Scrollbar.track = v;
      _Scrollbar.init();
    }
    flesh() {
      document.contains(_Scrollbar.style) || document.head.append(_Scrollbar.style);
      this.ele.classList.add(_Scrollbar.prefix);
      this.ele.setAttribute(\`data-\${_Scrollbar.mutex}\`, _Scrollbar.mutex);
      switch (this.suffix()) {
        case "-all": {
          this.ele.style.overflow = "auto auto";
          break;
        }
        case "-x": {
          this.ele.style.overflow = "auto hidden";
          break;
        }
        case "-y": {
          this.ele.style.overflow = "hidden auto";
          break;
        }
        case "-none":
        default: {
          this.ele.style.overflow = this.overflow;
          this.remove();
          break;
        }
      }
    }
    suffix() {
      if (this.x) {
        return this.y ? "-all" : "-x";
      } else {
        return this.y ? "-y" : "-none";
      }
    }
    remove() {
      this.ele.classList.remove(_Scrollbar.prefix);
      this.ele.removeAttribute(\`data-\${_Scrollbar.mutex}\`);
    }
    /**
     * 更新滚动条
     * @param x 是否显示横滚动条
     * @param y 是否显示纵滚动条
     * @param thumb 滑块颜色
     * @param track 轨道颜色
     */
    update(x = true, y = true) {
      this.x = x;
      this.y = y;
      this.flesh();
    }
  };

  // src/core/ui/preview-image.ts
  var PreviewImage = class extends HTMLElement {
    _image;
    _list;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = preview_image_default;
      const close = root.querySelector(".svg-icon.close.use-color");
      const left = root.querySelector(".svg-icon.left-arrow.use-color");
      const right = root.querySelector(".svg-icon.right-arrow.use-color");
      close.innerHTML = fork_default;
      left.innerHTML = left_default;
      right.innerHTML = right_default;
      this._image = root.querySelector(".show-image-wrap");
      this._list = root.querySelector(".preview-list");
      new Scrollbar(this._image, true, true, true);
      close.parentElement.addEventListener("click", (e) => {
        this.remove();
        document.body.style.overflow = "";
        e.stopPropagation();
      });
      left.parentElement.addEventListener("click", (e) => {
        this.togger(e, false);
        e.stopPropagation();
      });
      right.parentElement.addEventListener("click", (e) => {
        this.togger(e);
        e.stopPropagation();
      });
      this._image.addEventListener("click", (e) => {
        if (e.target === this._image) {
          this.remove();
          document.body.style.overflow = "";
          e.stopPropagation();
        }
      });
    }
    togger(e, right = true) {
      const list = this._list.querySelectorAll(".preview-item-box");
      if (list.length) {
        let i = 0;
        list.forEach((d, j) => {
          if (d.classList.contains("active")) {
            d.classList.remove("active");
            if (right) {
              i = j + 1;
              i < list.length || (i = 0);
            } else {
              i = j - 1;
              i < 0 && (i = list.length - 1);
            }
          }
        });
        list[i].classList.add("active");
        const img = list[i].querySelector("img");
        if (img) {
          this._image.innerHTML = \`<img class="image-content" src="\${img.src}">\`;
        }
      }
      e.stopPropagation();
    }
    /**
     * 初始化
     * @param imgs 图片链接(组)
     * @param vertical 是否垂直
     * @param active 显示第几张图片
     */
    value(imgs, vertical = false, active = 0) {
      imgs = isArray(imgs) ? imgs : [imgs];
      active < imgs.length || (active = 0);
      this._image.innerHTML = \`<img class="image-content" src="\${imgs[active]}">\`;
      vertical ? this.classList.add("vertical") : this.classList.remove("vertical");
      this._list.innerHTML = "";
      imgs.forEach((d, i) => {
        const item = addElement("div", {
          class: \`preview-item-box\${i === active ? " active" : ""}\`,
          style: "min-width: 54px; max-width: 54px; height: 54px;"
        }, this._list, \`<div class="preview-item-wrap\${vertical ? " vertical" : ""}"><img src="\${d}"></div>\`);
        item.addEventListener("click", (e) => {
          var _a3;
          (_a3 = this._list.querySelector(".preview-item-box.active")) == null ? void 0 : _a3.classList.remove("active");
          item.classList.add("active");
          this._image.innerHTML = \`<img class="image-content" src="\${d}">\`;
          e.stopPropagation();
        });
      });
      document.body.contains(this) || document.body.appendChild(this);
      document.body.style.overflow = "hidden";
    }
  };
  customElements.get(\`preview-image-\${"1272ee5"}\`) || customElements.define(\`preview-image-\${"1272ee5"}\`, PreviewImage);

  // src/core/videolimit.ts
  init_tampermonkey();

  // src/io/api-biliplus-playurl.ts
  init_tampermonkey();
  async function apiBiliplusPlayurl(data) {
    const response = await fetch(objUrl("//www.biliplus.com/BPplayurl.php", data));
    return await response.json();
  }

  // src/io/api-global-ogv-playurl.ts
  init_tampermonkey();

  // src/io/sidx.ts
  init_tampermonkey();
  var Sidx = class {
    /**
     * @param url 目标url
     * @param size 最大索引范围(不宜过大),默认6万字节
     */
    constructor(url, size = 6e4) {
      this.url = url;
      this.size = size;
    }
    /** range索引结束点 */
    end = 5999;
    /** range索引开始点 */
    start = 0;
    /** 结果hex字符串 */
    hex_data = "";
    getData() {
      return new Promise((resolve, reject) => {
        this.fetch(resolve, reject);
      });
    }
    /** 请求片段 */
    fetch(resolve, reject) {
      fetch(this.url.replace("http:", "https:"), {
        headers: {
          range: \`bytes=\${this.start}-\${this.end}\`
        }
      }).then((d) => {
        if ((d.status >= 300 || d.status < 200) && d.status !== 304)
          throw new Error(\`\${d.status} \${d.statusText}\`, { cause: d.status });
        return d.arrayBuffer();
      }).then((d) => {
        const data = new Uint8Array(d);
        this.hex_data += Array.prototype.map.call(data, (x) => ("00" + x.toString(16)).slice(-2)).join("");
        if (this.hex_data.indexOf("73696478") > -1 && this.hex_data.indexOf("6d6f6f66") > -1) {
          const indexRangeStart = this.hex_data.indexOf("73696478") / 2 - 4;
          const indexRagneEnd = this.hex_data.indexOf("6d6f6f66") / 2 - 5;
          resolve(["0-" + String(indexRangeStart - 1), String(indexRangeStart) + "-" + String(indexRagneEnd)]);
        } else {
          this.start = this.end + 1;
          if (this.size && this.start > this.size) {
            reject("未能获取到sidx");
          } else {
            this.end += 6e3;
            this.size && (this.end = Math.min(this.end, this.size));
            this.fetch(resolve, reject);
          }
        }
      }).catch((e) => reject(e));
    }
  };

  // src/io/api-global-ogv-playurl.ts
  var ApiGlobalOgvPlayurl = class extends ApiSign {
    /**
     * @param data 查询参数
     * @param server 东南亚(泰区)代理服务器
     */
    constructor(data, server = "api.global.bilibili.com") {
      super(URLS.GLOBAL_OGV_PLAYURL.replace("api.global.bilibili.com", server), "7d089525d3611b1c");
      this.data = data;
      this.data = Object.assign({
        area: "th",
        build: 1001310,
        device: "android",
        force_host: 2,
        download: 1,
        mobi_app: "bstar_a",
        platform: "android"
      }, data);
    }
    response;
    async getDate() {
      if (this.response)
        return this.response;
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return this.response = jsonCheck(json).data;
    }
    toPlayurl() {
      return new Promise((resolve, reject) => {
        this.getDate().then((d) => {
          const playurl = new PlayurlDash();
          const set = [];
          playurl.quality = d.video_info.stream_list[0].stream_info.quality || d.video_info.quality;
          playurl.format = PlayurlFormatMap[playurl.quality];
          playurl.timelength = d.video_info.timelength;
          playurl.dash.duration = Math.ceil(playurl.timelength / 1e3);
          playurl.dash.minBufferTime = playurl.dash.min_buffer_time = 1.5;
          Promise.all([
            ...d.video_info.stream_list.map((d2) => (async () => {
              var _a3, _b2;
              if (d2.dash_video && d2.dash_video.base_url) {
                const id = d2.stream_info.quality;
                playurl.accept_description.push(PlayurlDescriptionMap[id]);
                set.push(PlayurlFormatMap[id]);
                playurl.accept_quality.push(id);
                playurl.support_formats.push({
                  description: PlayurlDescriptionMap[id],
                  display_desc: PlayurlQualityMap[id],
                  format: PlayurlFormatMap[id],
                  new_description: PlayurlDescriptionMap[id],
                  quality: id,
                  superscript: "",
                  codecs: [PlayurlCodecs[id]]
                });
                const sidx = await new Sidx(d2.dash_video.base_url, d2.dash_video.size).getData();
                playurl.dash.video.push({
                  SegmentBase: {
                    Initialization: sidx[0],
                    indexRange: sidx[1]
                  },
                  segment_base: {
                    initialization: sidx[0],
                    index_range: sidx[1]
                  },
                  backupUrl: [],
                  backup_url: [],
                  bandwidth: d2.dash_video.bandwidth,
                  baseUrl: d2.dash_video.base_url,
                  base_url: d2.dash_video.base_url,
                  codecid: d2.dash_video.codecid,
                  codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id],
                  frameRate: PlayurlFrameRate[id],
                  frame_rate: PlayurlFrameRate[id],
                  height: (_a3 = PlayurlResolution[id]) == null ? void 0 : _a3[1],
                  id: d2.stream_info.quality,
                  mimeType: "video/mp4",
                  mime_type: "video/mp4",
                  sar: "1:1",
                  startWithSap: 1,
                  start_with_sap: 1,
                  width: (_b2 = PlayurlResolution[id]) == null ? void 0 : _b2[0]
                });
              }
            })()),
            ...d.video_info.dash_audio.map((d2) => (async () => {
              const id = d2.id;
              const sidx = await new Sidx(d2.base_url, d2.size).getData();
              playurl.dash.audio.push({
                SegmentBase: {
                  Initialization: sidx[0],
                  indexRange: sidx[1]
                },
                segment_base: {
                  initialization: sidx[0],
                  index_range: sidx[1]
                },
                backupUrl: [],
                backup_url: [],
                bandwidth: d2.bandwidth,
                baseUrl: d2.base_url,
                base_url: d2.base_url,
                codecid: d2.codecid,
                codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id],
                frameRate: "",
                frame_rate: "",
                height: 0,
                id,
                mimeType: "audio/mp4",
                mime_type: "audio/mp4",
                sar: "",
                startWithSap: 0,
                start_with_sap: 0,
                width: 0
              });
            })())
          ]).then(() => {
            const avc = [], hev = [], video = [];
            playurl.dash.video.forEach((d2) => {
              if (d2.codecid == 7)
                avc.push(d2);
              else
                hev.push(d2);
            });
            let length2 = avc.length > hev.length ? avc.length : hev.length;
            for (let i = length2 - 1; i >= 0; i--) {
              if (avc[i])
                video.push(avc[i]);
              if (hev[i])
                video.push(hev[i]);
            }
            playurl.dash.video = video;
            playurl.accept_format = set.join(",");
            playurl.quality > 80 && (playurl.quality = 80);
            resolve(playurl);
          }).catch((e) => reject(e));
        }).catch((e) => reject(e));
      });
    }
  };

  // src/utils/conf/uid.ts
  init_tampermonkey();

  // src/utils/cookie.ts
  init_tampermonkey();
  function getCookies() {
    return document.cookie.split("; ").reduce((s, d) => {
      let key = d.split("=")[0];
      let val = d.split("=")[1];
      s[key] = unescape(val);
      return s;
    }, {});
  }
  function setCookie(name, value, days = 365) {
    const exp = /* @__PURE__ */ new Date();
    exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1e3);
    document.cookie = name + "=" + escape(value) + ";expires=" + exp.toUTCString() + "; path=/; domain=.bilibili.com";
  }

  // src/utils/conf/uid.ts
  var uid = Number(getCookies().DedeUserID);

  // src/core/network-mock.ts
  init_tampermonkey();
  var networkMocked = false;
  function defineRes(target, res, v) {
    Object.defineProperties(target, {
      status: {
        configurable: true,
        writable: true,
        value: res.status
      },
      statusText: {
        configurable: true,
        writable: true,
        value: res.statusText
      },
      response: {
        configurable: true,
        writable: true,
        value: res.response
      },
      responseText: {
        configurable: true,
        writable: true,
        value: res.responseText
      },
      responseXML: {
        configurable: true,
        writable: true,
        value: res.responseXML
      },
      responseURL: {
        configurable: true,
        writable: true,
        value: res.finalUrl
      }
    });
    v();
  }
  function networkMock() {
    if (!networkMocked) {
      networkMocked = true;
      if (true) {
        xhrHook.ultra(".m4s", function(target, args) {
          const obj = {
            method: args[0],
            url: args[1],
            headers: {
              "user-agent": user.userStatus.userAgent
            },
            onloadstart: (res) => {
              defineRes(this, res, () => {
              });
            }
          };
          args[2] || (obj.anonymous = true);
          Object.defineProperties(this, {
            responseType: {
              configurable: true,
              set: (v) => {
                obj.responseType = v;
              },
              get: () => obj.responseType
            },
            onload: {
              configurable: true,
              set: (v) => {
                obj.onload = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onload
            },
            onerror: {
              configurable: true,
              set: (v) => {
                obj.onerror = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onerror
            },
            timeout: {
              configurable: true,
              set: (v) => {
                obj.timeout = v;
              },
              get: () => obj.timeout
            },
            ontimeout: {
              configurable: true,
              set: (v) => {
                obj.ontimeout = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.ontimeout
            },
            onprogress: {
              configurable: true,
              set: (v) => {
                obj.onprogress = (res) => {
                  defineRes(this, res, v.bind(this, new ProgressEvent("progress", {
                    lengthComputable: res.lengthComputable,
                    loaded: res.loaded,
                    total: res.total
                  })));
                };
              },
              get: () => obj.onprogress
            },
            onabort: {
              configurable: true,
              set: (v) => {
                obj.onabort = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onabort
            },
            onreadystatechange: {
              configurable: true,
              set: (v) => {
                obj.onreadystatechange = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onreadystatechange
            },
            setRequestHeader: {
              configurable: true,
              value: (name, value) => {
                obj.headers && (obj.headers[name] = value);
              }
            },
            send: {
              configurable: true,
              value: (body) => {
                obj.method === "POST" && body && (obj.data = body);
                const tar = GM.xmlHttpRequest(obj);
                this.abort = tar.abort.bind(tar);
                return true;
              }
            }
          });
        });
      } else {
        GM.modifyRequestheader(".m4s?", {
          "user-agent": "Bilibili Freedoooooom/MarkII",
          referer: void 0
        });
        GM.modifyRequestheader(".flv?", {
          "user-agent": "Bilibili Freedoooooom/MarkII",
          referer: void 0
        });
      }
    }
  }

  // src/core/videolimit.ts
  var UPOS = {
    "ks3(金山)": "upos-sz-mirrorks3.bilivideo.com",
    "ks3b(金山)": "upos-sz-mirrorks3b.bilivideo.com",
    "ks3c(金山)": "upos-sz-mirrorks3c.bilivideo.com",
    "ks32(金山)": "upos-sz-mirrorks32.bilivideo.com",
    "kodo(七牛)": "upos-sz-mirrorkodo.bilivideo.com",
    "kodob(七牛)": "upos-sz-mirrorkodob.bilivideo.com",
    "cos(腾讯)": "upos-sz-mirrorcos.bilivideo.com",
    "cosb(腾讯)": "upos-sz-mirrorcosb.bilivideo.com",
    "coso1(腾讯)": "upos-sz-mirrorcoso1.bilivideo.com",
    "coso2(腾讯)": "upos-sz-mirrorcoso2.bilivideo.com",
    "bos(腾讯)": "upos-sz-mirrorbos.bilivideo.com",
    "hw(华为)": "upos-sz-mirrorhw.bilivideo.com",
    "hwb(华为)": "upos-sz-mirrorhwb.bilivideo.com",
    "uphw(华为)": "upos-sz-upcdnhw.bilivideo.com",
    "js(华为)": "upos-tf-all-js.bilivideo.com",
    "hk(香港)": "cn-hk-eq-bcache-01.bilivideo.com",
    "akamai(海外)": "upos-hz-mirrorakam.akamaized.net"
  };
  var AREA = /* @__PURE__ */ ((AREA2) => {
    AREA2[AREA2["tw"] = 0] = "tw";
    AREA2[AREA2["hk"] = 1] = "hk";
    AREA2[AREA2["cn"] = 2] = "cn";
    return AREA2;
  })(AREA || {});
  var VideoLimit = class {
    /** 数据备份 */
    Backup = {};
    /** 通知组件 */
    toast;
    /** 监听中 */
    listening = false;
    /** 播放数据备份 */
    __playinfo__;
    constructor() {
      xhrHook("/playurl?", (args) => {
        const param2 = urlObj(args[1]);
        if (!uid && user.userStatus.show1080p && user.userStatus.accessKey.token) {
          param2.appkey = "27eb53fc9058f8c3";
          param2.access_key = user.userStatus.accessKey.token;
        }
        param2.fnval && (param2.fnval = fnval);
        args[1] = objUrl(args[1], param2);
        return !(BLOD.limit || BLOD.th);
      }, (res) => {
        try {
          const result = res.responseType === "json" ? JSON.stringify(res.response) : res.responseText;
          if (user.userStatus.uposReplace.nor !== "不替换") {
            const nstr = this.uposReplace(result, user.userStatus.uposReplace.nor);
            toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.nor}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.nor]}\`);
            if (res.responseType === "json") {
              res.response = JSON.parse(nstr);
            } else {
              res.response = res.responseText = nstr;
            }
          }
        } catch (e) {
        }
      }, false);
    }
    /** 开始监听 */
    enable() {
      if (this.listening)
        return;
      const disable = xhrHook.async("/playurl?", (args) => {
        const obj = urlObj(args[1]);
        this.updateVaribale(obj);
        return Boolean(BLOD.limit || BLOD.th);
      }, async (args) => {
        const response = BLOD.th ? await this._th(args) : await this._gat(args);
        return { response, responseType: "json", responseText: JSON.stringify(response) };
      }, false);
      this.disable = () => {
        disable();
        this.listening = false;
      };
      this.listening = true;
    }
    /** 处理泰区 */
    async _th(args) {
      this.toast || (this.toast = toast.list());
      this.toast.data = ["泰区限制视频 >>>"];
      const obj = urlObj(args[1]);
      this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`);
      obj.access_key = user.userStatus.accessKey.token;
      if (!this.Backup[args[1]]) {
        try {
          networkMock();
          this.toast.push(\`> 代理服务器:\${user.userStatus.videoLimit.th}\`);
          this.Backup[args[1]] = { code: 0, message: "success", result: await this.th(obj) };
          this.toast.push("> 获取代理数据成功!");
          this.toast.type = "success";
        } catch (e) {
          this.toast.push("> 代理出错!", e);
          !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!");
          this.toast.type = "error";
          this.toast.delay = 4;
          return { code: -404, message: e, data: null };
        }
      }
      this.toast.delay = 4;
      delete this.toast;
      return this.__playinfo__ = this.Backup[args[1]];
    }
    /** 处理港澳台 */
    async _gat(args) {
      var _a3;
      this.toast || (this.toast = toast.list());
      this.toast.data = ["港澳台限制视频 >>>"];
      const obj = urlObj(args[1]);
      this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`);
      obj.access_key = user.userStatus.accessKey.token;
      if (!this.Backup[args[1]]) {
        try {
          if (user.userStatus.videoLimit.server === "内置") {
            obj.module = "bangumi";
            const upInfo = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.upInfo;
            if (upInfo) {
              (upInfo.mid == 1988098633 || upInfo.mid == 2042149112) && (obj.module = "movie");
            }
            this.toast.push(\`> 代理服务器:内置\`, \`> 类型:\${obj.module}\`);
            const res = await apiBiliplusPlayurl(obj);
            this.Backup[args[1]] = { code: 0, message: "success", result: res };
          } else {
            const res = await this.gat(obj);
            this.Backup[args[1]] = { code: 0, message: "success", result: res };
          }
          if (user.userStatus.uposReplace.gat !== "不替换") {
            this.Backup[args[1]] = JSON.parse(this.uposReplace(JSON.stringify(this.Backup[args[1]]), user.userStatus.uposReplace.gat));
            toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.gat}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.gat]}\`);
          }
          ;
          this.toast.push("> 获取代理数据成功!");
          this.toast.type = "success";
        } catch (e) {
          this.toast.push("> 代理出错!", e);
          !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!");
          this.toast.type = "error";
          this.toast.delay = 4;
          return { code: -404, message: e, data: null };
        }
      }
      this.toast.delay = 4;
      delete this.toast;
      return this.__playinfo__ = this.Backup[args[1]];
    }
    /** 停止监听 */
    disable() {
      this.listening = false;
    }
    /** 更新全局变量 */
    updateVaribale(obj) {
      obj.seasonId && (BLOD.ssid = obj.seasonId);
      obj.episodeId && (BLOD.epid = obj.episodeId);
      obj.ep_id && (BLOD.epid = obj.ep_id);
      obj.aid && (BLOD.aid = Number(obj.aid)) && (BLOD.aid = obj.aid);
      obj.avid && (BLOD.aid = Number(obj.avid)) && (BLOD.aid = obj.avid);
      obj.cid && (BLOD.cid = Number(obj.cid)) && (BLOD.cid = obj.cid);
    }
    /** 访问泰区代理 */
    async th(obj) {
      const d = await new ApiGlobalOgvPlayurl(obj, user.userStatus.videoLimit.th).toPlayurl();
      toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.th}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.th]}\`);
      return JSON.parse(this.uposReplace(JSON.stringify(d), user.userStatus.uposReplace.th));
    }
    /** 代理服务器序号 */
    area = 0;
    /** 访问港澳台代理 */
    async gat(obj) {
      this.toast || (this.toast = toast.list());
      if (!user.userStatus.videoLimit[AREA[this.area]])
        throw new Error(\`无有效代理服务器:\${AREA[this.area]}\`);
      const server = user.userStatus.videoLimit[AREA[this.area]];
      obj.area = AREA[this.area];
      this.toast.push(\`> 代理服务器:\${server}\`);
      try {
        return await apiPlayurl(obj, true, true, server);
      } catch (e) {
        this.toast.push("> 代理服务器返回异常!", e);
        if (this.toast) {
          this.toast.type = "warning";
        }
        this.area++;
        if (this.area > 2)
          throw new Error("代理服务器不可用!");
        return await this.gat(obj);
      }
    }
    /** 用于过滤upos提示 */
    upos = false;
    /** 用于取消过滤upos提示 */
    timer;
    /**
     * 替换upos服务器
     * @param str playurl或包含视频URL的字符串
     * @param uposName 替换的代理服务器名 keyof typeof {@link UPOS}
     */
    uposReplace(str, uposName) {
      if (uposName === "不替换")
        return str;
      this.upos = true;
      clearTimeout(this.timer);
      this.timer = setTimeout(() => this.upos = false, 1e3);
      return str.replace(/:\\\\?\\/\\\\?\\/[^\\/]+\\\\?\\//g, () => \`://\${UPOS[uposName]}/\`);
    }
  };
  var videoLimit = new VideoLimit();

  // src/core/download.ts
  var Download = class {
    /** 下载界面 */
    ui = new BilioldDownload();
    /** 数据缓存 */
    data = this.ui.init();
    previewImage;
    /** 下载按钮 */
    bgrayButtonBtn;
    get fileName() {
      if (videoInfo.metadata) {
        return \`\${videoInfo.metadata.album}(\${videoInfo.metadata.title})\`;
      }
      return "";
    }
    constructor() {
      switchVideo(() => {
        this.destory();
        user.userStatus.downloadButton && this.bgrayButton();
      });
    }
    /** 解码playinfo */
    decodePlayinfo(playinfo, fileName = this.fileName) {
      const data = new PlayinfoFilter(fileName).filter(playinfo);
      data.forEach((d) => {
        this.data[d.type] || (this.data[d.type] = []);
        this.data[d.type].push({
          url: d.url,
          fileName,
          quality: Reflect.has(d, "order") ? \`\${d.quality}*\${d.order}\` : d.quality,
          size: d.size,
          color: d.color,
          onClick: (ev) => {
            ev.preventDefault();
            this.pushDownload(d, ev);
          }
        });
      });
    }
    /** 分发数据 */
    async pushDownload(data, ev) {
      if (data.onClick) {
        data.onClick(ev);
      } else if (data.url) {
        switch (user.userStatus.downloadMethod) {
          case "IDM": {
            new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).file({
              url: data.url[0],
              out: data.fileName
            });
            toast.success('保存IDM导出文件后,打开IDM -> 任务 -> 导入 -> 从"IDM导出文件"导入即可下载');
            break;
          }
          case "ef2": {
            new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).sendLinkToIDM({
              url: data.url[0],
              out: data.fileName
            });
            toast.warning("允许浏览器打开【IDM EF2辅助工具】即可开始下载", "如果浏览器和IDM都没有任何反应,那些请先安装ef2辅助工具。");
            break;
          }
          case "aria2": {
            const cmdLine = new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).cmdlet({
              urls: data.url,
              out: data.fileName
            });
            toast.success(
              "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。当然前提是您的设备已配置好了aria2。",
              "--------------",
              cmdLine
            );
            break;
          }
          case "aria2rpc": {
            new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).rpc({
              urls: data.url,
              out: data.fileName
            }).then((d) => {
              toast.success("aria2已经开始下载", \`GUID: \${d}\`);
            }).catch((e) => {
              toast.error("aria2[RPC]错误!", e);
            });
            break;
          }
          case "curl": {
            const cmdLine = new Curl(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath).cmdlet({
              url: data.url[0],
              out: data.fileName
            });
            toast.success(
              "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。",
              "--------------",
              cmdLine
            );
            break;
          }
          default: {
            if (false) {
              if (!("\$id" in data)) {
                data.\$id = await GM.modifyRequestheader(data.url[0], {
                  "user-agent": user.userStatus.userAgent,
                  "referer": user.userStatus.referer
                }, {
                  "Content-Disposition": \`attachment\${data.fileName ? \`; filename="\${data.fileName}"\` : ""}\`
                }, false);
              }
              setTimeout(() => {
                data.\$id();
                delete data.\$id;
              }, 1e5);
            }
            this.anchor(data);
            break;
          }
        }
      }
    }
    /**
     * 直接访问要下载的链接
     * @param d 下载数据
     */
    anchor(d) {
      const a = document.createElement("a");
      d.url && (a.href = d.url[0]);
      d.fileName && (a.download = d.fileName);
      a.target = "_blank";
      a.click();
    }
    /** 请求中 */
    downloading = 0;
    /** 已请求 */
    gets = [];
    /** 下载当前视频 */
    default() {
      if (this.downloading)
        return;
      if (!BLOD.cid)
        return toast.warning("未找到视频文件");
      this.ui.show();
      user.userStatus.TVresource || this.getPlayInfo();
      user.userStatus.downloadType.includes("mp4") && this.getMp4();
      user.userStatus.downloadType.includes("flv") && this.getFlv();
      user.userStatus.downloadType.includes("dash") && this.getDash();
    }
    getPlayInfo() {
      if (this.gets.includes("_"))
        return;
      this.decodePlayinfo(videoLimit.__playinfo__);
      this.gets.push("_");
    }
    getMp4() {
      if (this.data.mp4 || this.gets.includes("mp4"))
        return;
      this.downloading++;
      (BLOD.pgc ? this.mp4(BLOD.cid) : this.flv(BLOD.aid, BLOD.cid)).then((d) => {
        this.gets.push("mp4");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    getFlv() {
      if (this.data.flv || this.gets.includes("flv"))
        return;
      this.downloading++;
      (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid, false, user.userStatus.downloadQn) : this.interface(BLOD.cid, user.userStatus.downloadQn)).then((d) => {
        this.gets.push("flv");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    getDash() {
      if (this.data.aac || this.gets.includes("dash") || this.data.hev || this.data.av1)
        return;
      this.downloading++;
      (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid) : this.dash(BLOD.aid, BLOD.cid)).then((d) => {
        this.gets.push("dash");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    /** 清空数据 */
    destory() {
      this.ui.remove();
      this.data = this.ui.init();
      this.downloading = 0;
      this.gets = [];
      videoLimit.__playinfo__ = void 0;
    }
    mp4(cid) {
      return new ApiPlayurlProj({ cid, access_key: user.userStatus.accessKey.token }, BLOD.pgc).getData();
    }
    flv(avid, cid) {
      return apiPlayurl({ avid, cid }, false, BLOD.pgc);
    }
    dash(avid, cid) {
      return apiPlayurl({ avid, cid }, true, BLOD.pgc);
    }
    tv(avid, cid, dash = true, quality = qn) {
      return new ApiPlayurlTv({ avid, cid, access_key: user.userStatus.accessKey.token, qn: quality }, dash, BLOD.pgc).getData();
    }
    intl(aid, cid, dash = true) {
      return new ApiPlayurlIntl({ aid, cid, access_key: user.userStatus.accessKey.token }, dash, BLOD.pgc).getData();
    }
    interface(cid, quality = qn) {
      return new ApiPlayurlInterface({ cid, quality }, BLOD.pgc).getData();
    }
    _BAPIAppPlayurlV1;
    get BAPIAppPlayurlV1() {
      this._BAPIAppPlayurlV1 || (this._BAPIAppPlayurlV1 = new BAPIAppPlayurlV1(user.userStatus.accessKey.token));
      return this._BAPIAppPlayurlV1;
    }
    image() {
      var _a3, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
      const src = [];
      (_b2 = (_a3 = videoInfo.metadata) == null ? void 0 : _a3.artwork) == null ? void 0 : _b2.forEach((d) => src.push(d.src));
      if (location.host === "live.bilibili.com" && ((_f = (_e = (_d = (_c = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _c.roomInfoRes) == null ? void 0 : _d.data) == null ? void 0 : _e.room_info) == null ? void 0 : _f.cover)) {
        src.push((_j = (_i = (_h = (_g = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _g.roomInfoRes) == null ? void 0 : _h.data) == null ? void 0 : _i.room_info) == null ? void 0 : _j.cover);
      }
      if (/\\/read\\/[Cc][Vv]/.test(location.href)) {
        document.querySelectorAll(".article-holder img").forEach((d) => {
          d.src && src.push(d.src);
        });
      }
      if (src.length) {
        this.previewImage || (this.previewImage = new PreviewImage());
        this.previewImage.value(src);
      } else {
        toast.warning("未找到封面信息!");
      }
    }
    /** 添加播放器下载按钮 */
    bgrayButton() {
      var _a3;
      if (!this.bgrayButtonBtn) {
        this.bgrayButtonBtn = document.createElement("div");
        this.bgrayButtonBtn.classList.add("bgray-btn", "show");
        this.bgrayButtonBtn.title = "下载当前视频";
        this.bgrayButtonBtn.innerHTML = "下载<br>视频";
        this.bgrayButtonBtn.addEventListener("click", (e) => {
          var _a4;
          (_a4 = BLOD.ui) == null ? void 0 : _a4.show("download");
          e.stopPropagation();
        });
      }
      (_a3 = document.querySelector(".bgray-btn-wrap")) == null ? void 0 : _a3.appendChild(this.bgrayButtonBtn);
    }
  };
  var download = new Download();

  // src/core/bilibili-old.ts
  var BLOD = new class {
    /** 路径拆分 */
    path = location.href.split("/");
    /** bangumi标记 */
    pgc = false;
    ui;
    get aid() {
      return window.aid;
    }
    set aid(v) {
      window.aid = v;
    }
    get cid() {
      return window.cid;
    }
    set cid(v) {
      window.cid = v;
    }
    /** bangumi ssid */
    ssid;
    /** bangumi epid */
    epid;
    /** 限制视频 */
    limit;
    /** 东南亚视频标记 */
    th;
    /** 播放器已加载 */
    playLoaded = false;
    /** 已模拟APP端取流 */
    networkMocked = false;
    /** 是否大会员 */
    isVip = false;
    /** 播放器哈希值 */
    version;
    // 调试接口
    GM = GM;
    urlSign = urlSign;
    objUrl = objUrl;
    urlObj = urlObj;
    download = download;
    danmaku = danmaku;
    toast = toast;
    debug = debug;
    videoInfo = videoInfo;
    base64 = base64;
    md5 = import_md52.default;
    htmlVnode = htmlVnode;
    saveAs = saveAs;
    fileRead = fileRead;
    /** 刷新toast,多用于重构页面后刷新显示 */
    flushToast() {
      document.body.contains(toast) || document.body.appendChild(toast);
    }
  }();

  // src/core/storage.ts
  init_tampermonkey();
  var LocalStorage = class {
    /** 清空! */
    static clear() {
      localStorage.clear();
    }
    /**
     * 读取
     * @param key 目标键名
     * @returns 格式化后的数据
     */
    static getItem(key) {
      return toObject(localStorage.getItem(key));
    }
    /**
     * 列出键名数组  
     * 原生Storage.key只返回但索引,感觉意义不大。
     * @returns 键名数组
     */
    static keys() {
      return Object.keys(localStorage);
    }
    /**
     * 移除
     * @param key 目标键名
     */
    static removeItem(key) {
      localStorage.removeItem(key);
    }
    /**
     * 添加/修改
     * @param key 
     * @param value 
     */
    static setItem(key, value) {
      localStorage.setItem(key, toString(value));
    }
  };
  var SessionStorage = class {
    /** 清空! */
    static clear() {
      sessionStorage.clear();
    }
    /**
     * 读取
     * @param key 目标键名
     * @returns 格式化后的数据
     */
    static getItem(key) {
      return toObject(sessionStorage.getItem(key));
    }
    /**
     * 列出键名数组  
     * 原生Storage.key只返回但索引,感觉意义不大。
     * @returns 键名数组
     */
    static keys() {
      return Object.keys(sessionStorage);
    }
    /**
     * 移除
     * @param key 目标键名
     */
    static removeItem(key) {
      sessionStorage.removeItem(key);
    }
    /**
     * 添加/修改
     * @param key 
     * @param value 
     */
    static setItem(key, value) {
      sessionStorage.setItem(key, toString(value));
    }
  };

  // src/page/header.ts
  init_tampermonkey();

  // src/io/api-page-header.ts
  init_tampermonkey();
  async function apiPageHeader(data) {
    const response = await fetch(objUrl(URLS.PAGE_HEADER, data));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/utils/format/subarray.ts
  init_tampermonkey();
  function subArray(res, num = 1) {
    const arr2 = [...res];
    const out = [];
    num = num || 1;
    num = num < arr2.length ? num : arr2.length;
    while (out.length < num) {
      var temp = Math.random() * arr2.length >> 0;
      out.push(arr2.splice(temp, 1)[0]);
    }
    return num === 1 ? out[0] : out;
  }

  // src/utils/hook/node.ts
  init_tampermonkey();
  var appendChild = Element.prototype.appendChild;
  var insertBefore = Element.prototype.insertBefore;
  var jsonp = [];
  Element.prototype.appendChild = function(newChild) {
    this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => {
      d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild);
    });
    return appendChild.call(this, newChild);
  };
  Element.prototype.insertBefore = function(newChild, refChild) {
    this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => {
      d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild);
    });
    return insertBefore.call(this, newChild, refChild);
  };
  function jsonpHook(url, redirect, modifyResponse, once = true) {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      once && id && delete jsonp[id - 1];
      if (redirect)
        try {
          this.src = redirect(this.src) || this.src;
        } catch (e) {
          debug.error("redirect of jsonphook", one, e);
        }
      if (modifyResponse) {
        const obj = urlObj(this.src);
        if (obj) {
          const callback = obj.callback;
          const call = window[callback];
          const url2 = this.src;
          if (call) {
            window[callback] = function(v) {
              try {
                v = modifyResponse(v, url2, call) || v;
              } catch (e) {
                debug.error("modifyResponse of jsonphook", one, e);
              }
              return v !== true && call(v);
            };
          }
        }
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  }
  jsonpHook.async = (url, condition, modifyResponse, once = true) => {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        once && id && delete jsonp[id - 1];
        if (!condition || condition(this.src)) {
          const obj = urlObj(this.src);
          if (obj) {
            const callback = obj.callback;
            const call = window[callback];
            if (call) {
              modifyResponse && modifyResponse(this.src).then((d) => {
                window[callback](d);
                this.dispatchEvent(new ProgressEvent("load"));
              }).catch((e) => {
                this.dispatchEvent(new ProgressEvent("error"));
                debug.error("modifyResponse of xhrhookasync", one, e);
              });
            }
            this.removeAttribute("src");
          }
        }
      } catch (e) {
        debug.error("jsonphook", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };
  jsonpHook.scriptBlock = (url) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        this.removeAttribute("src");
        setTimeout(() => {
          this.dispatchEvent(new ProgressEvent("load"));
          try {
            this.remove();
          } catch (e) {
          }
        }, 100);
      } catch (e) {
        debug.error("脚本拦截失败!", one, e);
      }
    };
    jsonp.push([one, two]);
  };
  jsonpHook.scriptIntercept = (url, redirect, text) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        if (text) {
          this.text = text(this.src);
          this.removeAttribute("src");
          setTimeout(() => {
            this.dispatchEvent(new ProgressEvent("load"));
            this == null ? void 0 : this.remove();
          }, 100);
        } else if (redirect) {
          this.src = redirect(this.src);
        }
      } catch (e) {
        debug.error("scriptIntercept", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };
  function removeJsonphook(id) {
    id >= 0 && delete jsonp[id - 1];
  }
  jsonpHook.xhr = (url) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        const obj = urlObj(this.src);
        if (obj) {
          const callback = obj.callback || obj.jsoncallback;
          const call = window[callback];
          const url2 = this.src;
          this.removeAttribute("src");
          delete obj.callback;
          delete obj.jsoncallback;
          fetch(objUrl(url2.split("?")[0], obj)).then((d) => d.json()).then((d) => {
            call(d);
            this.dispatchEvent(new ProgressEvent("load"));
          }).catch(() => {
            this.dispatchEvent(new ProgressEvent("error"));
          });
        }
      } catch (e) {
        debug.error("jsonphook", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };

  // src/json/index-icon.json
  var index_icon_default = {
    fix: [
      {
        id: "609",
        type: "fix",
        title: "如果国宝会说话",
        deltime: "0",
        posttime: "1514973117",
        edittime: "1514973117",
        sttime: "1514886600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20180103/59pz8mv77p.gif",
        weight: "10",
        links: [
          "https:https://search.bilibili.com/all?keyword=%E5%A6%82%E6%9E%9C%E5%9B%BD%E5%AE%9D%E4%BC%9A%E8%AF%B4%E8%AF%9D"
        ]
      },
      {
        id: "608",
        type: "fix",
        title: "极地",
        deltime: "0",
        posttime: "1514431011",
        edittime: "1514972989",
        sttime: "1514171700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171228/p6xkl7v8rq.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=极地"
        ]
      },
      {
        id: "607",
        type: "fix",
        title: "大卫·爱登堡与巨象",
        deltime: "0",
        posttime: "1513741733",
        edittime: "1514972989",
        sttime: "1513650780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171220/x6899kp5rq.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=大卫·爱登堡与巨象"
        ]
      },
      {
        id: "605",
        type: "fix",
        title: "国家宝藏",
        deltime: "0",
        posttime: "1512962047",
        edittime: "1514972989",
        sttime: "1512875400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jnnx0qv.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=国家宝藏"
        ]
      },
      {
        id: "604",
        type: "fix",
        title: "BBC60周年",
        deltime: "0",
        posttime: "1512961936",
        edittime: "1514972989",
        sttime: "1512875400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jn6l0w0.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=BBC60周年"
        ]
      },
      {
        id: "603",
        type: "fix",
        title: "",
        deltime: "0",
        posttime: "1511250034",
        edittime: "1514972989",
        sttime: "1511247600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171121/y4o19nyvmj.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=INFINI-T%20FORCE"
        ]
      },
      {
        id: "602",
        type: "fix",
        title: "声之形",
        deltime: "0",
        posttime: "1507781072",
        edittime: "1514972989",
        sttime: "1507823700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171012/z4ypmx829l.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A3%B0%E4%B9%8B%E5%BD%A2"
        ]
      },
      {
        id: "601",
        type: "fix",
        title: "你的名字",
        deltime: "0",
        posttime: "1503565677",
        edittime: "1514972989",
        sttime: "1503503700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170828/02wz2nv570.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/topic/activity-yourname1708.html"
        ]
      },
      {
        id: "600",
        type: "fix",
        title: "放肆开学",
        deltime: "0",
        posttime: "1503555174",
        edittime: "1514972989",
        sttime: "1503676500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170824/v5o245k70y.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=%E6%94%BE%E8%82%86%E5%BC%80%E5%AD%A6"
        ]
      },
      {
        id: "599",
        type: "fix",
        title: "Nike React",
        deltime: "0",
        posttime: "1501561207",
        edittime: "1514972989",
        sttime: "1502034900",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170801/y4r02q54zj.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=Nike%20React"
        ]
      },
      {
        id: "596",
        type: "fix",
        title: "七月新番",
        deltime: "0",
        posttime: "1498792166",
        edittime: "1514972989",
        sttime: "1498701120",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170630/12jlkyp1vj.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/topic/activity-HkBRflO7Z.html"
        ]
      },
      {
        id: "595",
        type: "fix",
        title: "脸接鱼雷",
        deltime: "0",
        posttime: "1495532952",
        edittime: "1514972989",
        sttime: "1495648800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170523/q0rzwvnxqw.gif",
        weight: "0",
        links: [
          "https://acg.tv/u1Sq"
        ]
      },
      {
        id: "594",
        type: "fix",
        title: "恋爱暴君",
        deltime: "0",
        posttime: "1494917068",
        edittime: "1514972989",
        sttime: "1494830580",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170516/l66z6q9vx7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%8B%E7%88%B1%E6%9A%B4%E5%90%9B"
        ]
      },
      {
        id: "593",
        type: "fix",
        title: "P5",
        deltime: "0",
        posttime: "1494240485",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/m66pvpvo5p.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%B3%E7%A5%9E%E5%BC%82%E9%97%BB%E5%BD%955"
        ]
      },
      {
        id: "592",
        type: "fix",
        title: "点兔",
        deltime: "0",
        posttime: "1494240166",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/299nq72pon.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%B9%E5%85%94"
        ]
      },
      {
        id: "591",
        type: "fix",
        title: "全职高手",
        deltime: "0",
        posttime: "1494240079",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/699r071y3w.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%A8%E8%81%8C%E9%AB%98%E6%89%8B"
        ]
      },
      {
        id: "590",
        type: "fix",
        title: "人工智障",
        deltime: "0",
        posttime: "1493709665",
        edittime: "1514972989",
        sttime: "1493623080",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/v55r8ql070.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%BA%E5%B7%A5%E6%99%BA%E9%9A%9C"
        ]
      },
      {
        id: "589",
        type: "fix",
        title: "液压机",
        deltime: "0",
        posttime: "1493021860",
        edittime: "1514972989",
        sttime: "1492935360",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/r99qk2p22q.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B6%B2%E5%8E%8B%E6%9C%BA"
        ]
      },
      {
        id: "588",
        type: "fix",
        title: "原谅她",
        deltime: "0",
        posttime: "1492144236",
        edittime: "1514972989",
        sttime: "1492057680",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/v556yx5nl5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8E%9F%E8%B0%85%E5%A5%B9"
        ]
      },
      {
        id: "584",
        type: "fix",
        title: "孤独的美食家",
        deltime: "0",
        posttime: "1484811832",
        edittime: "1514972989",
        sttime: "1485705600",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-4147/QQ%E5%9B%BE%E7%89%8720170110124819.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A4%E7%8B%AC%E7%BE%8E%E9%A3%9F%E5%AE%B6"
        ]
      },
      {
        id: "583",
        type: "fix",
        title: "血源诅咒",
        deltime: "0",
        posttime: "1481617840",
        edittime: "1514972989",
        sttime: "1481530800",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=+%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92"
        ]
      },
      {
        id: "582",
        type: "fix",
        title: "腹语术",
        deltime: "0",
        posttime: "1481177705",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%85%B9%E8%AF%AD%E6%9C%AF.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%85%B9%E8%AF%AD"
        ]
      },
      {
        id: "581",
        type: "fix",
        title: "上升气流",
        deltime: "0",
        posttime: "1481177656",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81"
        ]
      },
      {
        id: "580",
        type: "fix",
        title: "牛顿",
        deltime: "0",
        posttime: "1481177628",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E7%89%9B%E9%A1%BF.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%89%9B%E9%A1%BF"
        ]
      },
      {
        id: "579",
        type: "fix",
        title: "喷了",
        deltime: "0",
        posttime: "1481177596",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%96%B7%E4%BA%86.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E4%BA%86"
        ]
      },
      {
        id: "578",
        type: "fix",
        title: "维克托",
        deltime: "0",
        posttime: "1481177224",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C"
        ]
      },
      {
        id: "577",
        type: "fix",
        title: "羽生结弦",
        deltime: "0",
        posttime: "1477649861",
        edittime: "1514972989",
        sttime: "1477563240",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/aa21b37ada0eaed484567b1c07870f6c82eb0a88.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%BD%E7%94%9F%E7%BB%93%E5%BC%A6&page=1&order=click"
        ]
      },
      {
        id: "576",
        type: "fix",
        title: "僵尸",
        deltime: "0",
        posttime: "1477034605",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9d04921fa7646907fa087b129f64e68d0c756e4d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%83%B5%E5%B0%B8"
        ]
      },
      {
        id: "575",
        type: "fix",
        title: "困",
        deltime: "0",
        posttime: "1477034579",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/835f1f30d19d95e0f6b9a0e33c59eb5db3d00a7e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%B0"
        ]
      },
      {
        id: "574",
        type: "fix",
        title: "南瓜灯",
        deltime: "0",
        posttime: "1477034405",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6b12ae120a622df4ab5bda54747203e58afeb0c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%97%E7%93%9C%E7%81%AF"
        ]
      },
      {
        id: "573",
        type: "fix",
        title: "吃药",
        deltime: "0",
        posttime: "1477034101",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ffd36c9244bb23f4f88648203386fc9067a4c40e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%8D%AF"
        ]
      },
      {
        id: "572",
        type: "fix",
        title: "搞事",
        deltime: "0",
        posttime: "1477034071",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7767ebd63553ecc22b246e095fa55b16fc5420f3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%90%9E%E4%BA%8B"
        ]
      },
      {
        id: "571",
        type: "fix",
        title: "PPAP",
        deltime: "0",
        posttime: "1477033993",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9a89870eff12495e137713612e695a24ae369e2d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=PPAP"
        ]
      },
      {
        id: "570",
        type: "fix",
        title: "放假",
        deltime: "0",
        posttime: "1477033922",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a90403b979e707278b4e47bac3c78e549c732134.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BE%E5%81%87"
        ]
      },
      {
        id: "569",
        type: "fix",
        title: "战术目镜启动",
        deltime: "0",
        posttime: "1477033807",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d3a375898eba9b787d8240dd8708314119131f44.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%98%E6%9C%AF%E7%9B%AE%E9%95%9C"
        ]
      },
      {
        id: "568",
        type: "fix",
        title: "丛林",
        deltime: "0",
        posttime: "1475232463",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8c84c29a42dcdf789745c6d552766133b94a0534.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%9B%E6%9E%97"
        ]
      },
      {
        id: "567",
        type: "fix",
        title: "非洲欢迎你",
        deltime: "0",
        posttime: "1475232419",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/431f5cbfc1f69e19a474b2def0b0571792fdbe1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2%E6%AC%A2%E8%BF%8E%E4%BD%A0"
        ]
      },
      {
        id: "566",
        type: "fix",
        title: "聪哥",
        deltime: "0",
        posttime: "1475232380",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ac2b22633ea1c72b6406c1877a61cb659db8cfea.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%81%AA%E5%93%A5"
        ]
      },
      {
        id: "565",
        type: "fix",
        title: "非洲人 (..•˘_˘•..)",
        deltime: "0",
        posttime: "1475232306",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/140ce02b9c96d6cd6bc82f508247ed785109d0b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2"
        ]
      },
      {
        id: "564",
        type: "fix",
        title: "SSR",
        deltime: "0",
        posttime: "1475232266",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/aad1773e1df51757f15f79de91b783ce22151e1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=SSR"
        ]
      },
      {
        id: "563",
        type: "fix",
        title: "静电",
        deltime: "0",
        posttime: "1475232209",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43d84069e3db486f24739e2c406ebbc13a33ba8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%99%E7%94%B5"
        ]
      },
      {
        id: "562",
        type: "fix",
        title: "舔冰棒",
        deltime: "0",
        posttime: "1474973710",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e530a4b3b893fd54e95930e3898adf092f764b22.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%88%94%E5%86%B0"
        ]
      },
      {
        id: "561",
        type: "fix",
        title: "翻墙",
        deltime: "0",
        posttime: "1474973671",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/64749730eb6a0238f61ee4d603197dc3dd1193a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%A2%99"
        ]
      },
      {
        id: "560",
        type: "fix",
        title: "动如脱兔",
        deltime: "0",
        posttime: "1474973639",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/69ea913485d7719489a3f5fe0c0c7c85130584ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A8%E5%A6%82%E8%84%B1%E5%85%94"
        ]
      },
      {
        id: "559",
        type: "fix",
        title: "娃娃机",
        deltime: "0",
        posttime: "1474973603",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a18bb9aa9fd32cf3fed25566cfd2b126e5ecc378.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A8%83%E5%A8%83%E6%9C%BA"
        ]
      },
      {
        id: "558",
        type: "fix",
        title: "告白实行委员会",
        deltime: "0",
        posttime: "1474973573",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a7198ebd51ddeb644f44630fbbf5224d2474120c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%8A%E7%99%BD%E5%AE%9E%E8%A1%8C%E5%A7%94%E5%91%98%E4%BC%9A"
        ]
      },
      {
        id: "557",
        type: "fix",
        title: "G胖",
        deltime: "0",
        posttime: "1474973533",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ddc290d2e010e3dbe3356bbded54e5cb26fdea48.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=G%E8%83%96"
        ]
      },
      {
        id: "556",
        type: "fix",
        title: "死鱼眼",
        deltime: "0",
        posttime: "1474973463",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9668a491b4e159c79aa0b1d8f9527eaba0244463.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC"
        ]
      },
      {
        id: "555",
        type: "fix",
        title: "休闲",
        deltime: "0",
        posttime: "1474781201",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/13bafd46d175e4f753153e8d5fb4d618ba479e57.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BC%91%E9%97%B2"
        ]
      },
      {
        id: "554",
        type: "fix",
        title: "飞吻",
        deltime: "0",
        posttime: "1474781174",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b22d4b55626a9924a85f931529a95b029366660d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E5%90%BB"
        ]
      },
      {
        id: "553",
        type: "fix",
        title: "嘴馋",
        deltime: "0",
        posttime: "1474781145",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8632ddf29548597302d2c667d3506303adbe02a4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%98%B4%E9%A6%8B"
        ]
      },
      {
        id: "552",
        type: "fix",
        title: "嘻嘻嘻",
        deltime: "0",
        posttime: "1474781095",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c50d5d8c7a93c31a074a54c83057b06ae0c20857.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%98%BB%E5%98%BB%E5%98%BB"
        ]
      },
      {
        id: "551",
        type: "fix",
        title: "调教",
        deltime: "0",
        posttime: "1474781045",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/dcb9411062229fbaaa09c36cc42438f98974ca1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B0%83%E6%95%99"
        ]
      },
      {
        id: "550",
        type: "fix",
        title: "科学",
        deltime: "0",
        posttime: "1474779827",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/04419daf939342513ff3220551b6c199a43f4558.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A7%91%E5%AD%A6"
        ]
      },
      {
        id: "549",
        type: "fix",
        title: "猪猪",
        deltime: "0",
        posttime: "1474440111",
        edittime: "1514972989",
        sttime: "1474353540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bfd556a757c6e8b489fa183e61246e526183e9ae.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AA"
        ]
      },
      {
        id: "548",
        type: "fix",
        title: "一起摇摆",
        deltime: "0",
        posttime: "1474440063",
        edittime: "1514972989",
        sttime: "1474353540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5ddef1dfb0f8a4a8ed160195e942fd41c7922b01.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%91%87%E6%91%86"
        ]
      },
      {
        id: "547",
        type: "fix",
        title: "坏笑",
        deltime: "0",
        posttime: "1474439982",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2060313be66420dd721fa8f73666c191d9df586c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9D%8F%E7%AC%912"
        ]
      },
      {
        id: "546",
        type: "fix",
        title: "买买买",
        deltime: "0",
        posttime: "1474439944",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f42cdace4d5436e960ecb3e19705662e38863b55.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%B0%E4%B9%B0%E4%B9%B0"
        ]
      },
      {
        id: "545",
        type: "fix",
        title: "作业向BGM",
        deltime: "0",
        posttime: "1474439907",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b9c0a8b257c1b5f98433ce68f8e51613ba6a8cca.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BD%9C%E4%B8%9A%E5%90%91"
        ]
      },
      {
        id: "544",
        type: "fix",
        title: "拉伸运动",
        deltime: "0",
        posttime: "1474439869",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3716fb767dffd5f9cbc380a492c4dbfd93bb486b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8B%89%E4%BC%B8"
        ]
      },
      {
        id: "543",
        type: "fix",
        title: "滚来滚去",
        deltime: "0",
        posttime: "1474439764",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/dc47a10c5bf327309fa459436f79f2f49f31ae88.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%BB%9A%E6%9D%A5%E6%BB%9A%E5%8E%BB"
        ]
      },
      {
        id: "542",
        type: "fix",
        title: "Yoga",
        deltime: "0",
        posttime: "1474270692",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/83f04dc39521dcf567121037f982ea91e7306b76.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%91%9C%E4%BC%BD"
        ]
      },
      {
        id: "541",
        type: "fix",
        title: "魂斗罗",
        deltime: "0",
        posttime: "1474270622",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/04d8d945bcaa05646514d00ba6f664507cd6fd1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%82%E6%96%97%E7%BD%97"
        ]
      },
      {
        id: "540",
        type: "fix",
        title: "百战天虫",
        deltime: "0",
        posttime: "1474270567",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2cdc0609096c9beb3a6c237b0bd7613c3600b098.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BE%E6%88%98%E5%A4%A9%E8%99%AB"
        ]
      },
      {
        id: "539",
        type: "fix",
        title: "蝴蝶",
        deltime: "0",
        posttime: "1474270514",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/92638e9e9cbb3429d4e48486b7992ac4c79e9ccd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9D%B4%E8%9D%B6"
        ]
      },
      {
        id: "538",
        type: "fix",
        title: "跳绳",
        deltime: "0",
        posttime: "1474270432",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7c8759c0d6ccb15383b8cd8655bec5bb3255b3e9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3"
        ]
      },
      {
        id: "537",
        type: "fix",
        title: "脑洞",
        deltime: "0",
        posttime: "1473734801",
        edittime: "1514972989",
        sttime: "1473648300",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7e729b0d2e96431d00b98253a82f840ba0c9b992.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%84%91%E6%B4%9E"
        ]
      },
      {
        id: "536",
        type: "fix",
        title: "卧槽",
        deltime: "0",
        posttime: "1473734691",
        edittime: "1514972989",
        sttime: "1473648120",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c8705a26f2cfa12bcd25a53892268f2b7b7347a5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%A7%E6%A7%BD"
        ]
      },
      {
        id: "535",
        type: "fix",
        title: "瑟瑟发抖",
        deltime: "0",
        posttime: "1473734614",
        edittime: "1514972989",
        sttime: "1473648120",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/715f8793f5c1af969deff434029de68749c3bf76.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%91%9F%E7%91%9F%E5%8F%91%E6%8A%96"
        ]
      },
      {
        id: "534",
        type: "fix",
        title: "露脸",
        deltime: "0",
        posttime: "1473669258",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/82264be44c5cbbfdad61b1bd5b7594b5c28409ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9C%B2%E8%84%B8"
        ]
      },
      {
        id: "533",
        type: "fix",
        title: "泡沫",
        deltime: "0",
        posttime: "1473669224",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7362d4c40cccad4cc63611aa8ff19953cd084c24.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B2%AB"
        ]
      },
      {
        id: "532",
        type: "fix",
        title: "呆毛",
        deltime: "0",
        posttime: "1473669183",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6e88bc9235e3648a96cd74c28d99491ca0c4b338.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%86%E6%AF%9B"
        ]
      },
      {
        id: "531",
        type: "fix",
        title: "卖萌",
        deltime: "0",
        posttime: "1473669146",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8a6375683ae2084631e39916be15325846d2fe1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%96%E8%90%8C"
        ]
      },
      {
        id: "530",
        type: "fix",
        title: "哆啦A梦",
        deltime: "0",
        posttime: "1473387971",
        edittime: "1514972989",
        sttime: "1473301380",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/37dea027fefc96a9e63b91400b870b82aa93745c.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/movie/11870/"
        ]
      },
      {
        id: "529",
        type: "fix",
        title: "蛋包饭",
        deltime: "0",
        posttime: "1473133768",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b04bdcd80140b6b8539288bc3da72b6763af0660.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9B%8B%E5%8C%85%E9%A5%AD"
        ]
      },
      {
        id: "528",
        type: "fix",
        title: "鹅",
        deltime: "0",
        posttime: "1473133734",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a995985cca22ef2675348eedc9fa5ae7c4a85370.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B9%85"
        ]
      },
      {
        id: "527",
        type: "fix",
        title: "散步",
        deltime: "0",
        posttime: "1473133708",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8f3ddb128b38687be7fb7918c21abbbc9b1b5b5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%A3%E6%AD%A5"
        ]
      },
      {
        id: "526",
        type: "fix",
        title: "速写",
        deltime: "0",
        posttime: "1473072559",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8359bad2495b6a348b04a2ebde16ea9547c2c3b4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%9F%E5%86%99"
        ]
      },
      {
        id: "525",
        type: "fix",
        title: "破蛋",
        deltime: "0",
        posttime: "1473072536",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f612b62a9609000da7a5d5e22ab2ba52a9bd006a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A0%B4%E8%9B%8B"
        ]
      },
      {
        id: "524",
        type: "fix",
        title: "泡泡",
        deltime: "0",
        posttime: "1473072509",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/feca114aaaba8a35f7febc0b9f8920959e31d918.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B3%A1"
        ]
      },
      {
        id: "523",
        type: "fix",
        title: "大力",
        deltime: "0",
        posttime: "1473072493",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ca3f6944301a54b5dedd214fd7c74dfb0178ff44.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E5%8A%9B"
        ]
      },
      {
        id: "522",
        type: "fix",
        title: "婴儿",
        deltime: "0",
        posttime: "1473072467",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/728b706186874e0da8f49b4bff057688b85ce90a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A9%B4%E5%84%BF"
        ]
      },
      {
        id: "521",
        type: "fix",
        title: "腿控福利",
        deltime: "0",
        posttime: "1473072422",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2eb48866889e8667abe5be2e3b3ed37799ff2765.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%95%BF%E8%85%BF"
        ]
      },
      {
        id: "520",
        type: "fix",
        title: "禁烟",
        deltime: "0",
        posttime: "1473072400",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/19ec7aa9f6543882e6a5f5b08f55de83f34dce42.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A6%81%E7%83%9F"
        ]
      },
      {
        id: "519",
        type: "fix",
        title: "生无可恋",
        deltime: "0",
        posttime: "1473072369",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2596e298010cea772966b7b0c869dc697c501e2f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%9F%E6%97%A0%E5%8F%AF%E6%81%8B"
        ]
      },
      {
        id: "518",
        type: "fix",
        title: "快递",
        deltime: "0",
        posttime: "1473072307",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e1762b1396c9961dac2a77c93d0b7bc2f7998dd0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%AB%E9%80%92"
        ]
      },
      {
        id: "517",
        type: "fix",
        title: "odds&ends",
        deltime: "0",
        posttime: "1473072269",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6ecb8eaba4e38ab2d3eec0e98fa6875c89f126d3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=ODDS+AND+ENDS"
        ]
      },
      {
        id: "516",
        type: "fix",
        title: "鸡腿",
        deltime: "0",
        posttime: "1472723482",
        edittime: "1514972989",
        sttime: "1472637000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a1957fb3b3acaad31c054757f9b0b168d09b0b60.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B8%A1%E8%85%BF"
        ]
      },
      {
        id: "515",
        type: "fix",
        title: "热",
        deltime: "0",
        posttime: "1472723446",
        edittime: "1514972989",
        sttime: "1472637000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c4fb3cde4e02df97f28c5b1dde11aa8035c82042.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%83%AD"
        ]
      },
      {
        id: "514",
        type: "fix",
        title: "无聊",
        deltime: "0",
        posttime: "1472723409",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4cabeffe32798efdb782331312a2cb9d83af8f18.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A"
        ]
      },
      {
        id: "512",
        type: "fix",
        title: "一个亿",
        deltime: "0",
        posttime: "1472723301",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/93028ba79a997b444f0d70fbedddeaf14af876a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%80%E4%B8%AA%E4%BA%BF"
        ]
      },
      {
        id: "511",
        type: "fix",
        title: "打豆豆",
        deltime: "0",
        posttime: "1472723249",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12b927e0ae4cb690bd53a75308152beea0bc80c1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E8%B1%86%E8%B1%86"
        ]
      },
      {
        id: "510",
        type: "fix",
        title: "沼跃鱼",
        deltime: "0",
        posttime: "1472468014",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5a07738599177591152dfa586846644dfc1369b0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%BC%E8%B7%83%E9%B1%BC"
        ]
      },
      {
        id: "509",
        type: "fix",
        title: "可达鸭",
        deltime: "0",
        posttime: "1472467994",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e7b7a306ae643fec59558a9162d32ec38c882de1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%AF%E8%BE%BE%E9%B8%AD"
        ]
      },
      {
        id: "508",
        type: "fix",
        title: "毁童年",
        deltime: "0",
        posttime: "1472467967",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/227bb230e487f687d8440228b83ac605129457ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AF%81%E7%AB%A5%E5%B9%B4"
        ]
      },
      {
        id: "507",
        type: "fix",
        title: "りりり",
        deltime: "0",
        posttime: "1472467904",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d616a2126d13955974909ce316c3740cb38747f5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E3%82%8A%E3%82%8A%E3%82%8A"
        ]
      },
      {
        id: "506",
        type: "fix",
        title: "屎壳郎",
        deltime: "0",
        posttime: "1472467884",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/684ba732f6d07f054f537932e120001a725f55da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%8E%E5%A3%B3%E9%83%8E"
        ]
      },
      {
        id: "505",
        type: "fix",
        title: "回复",
        deltime: "0",
        posttime: "1472467844",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f2c01cab66b908f4f486b8b4a295c43d5bbb57db.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%9E%E5%A4%8D"
        ]
      },
      {
        id: "504",
        type: "fix",
        title: "求生之路",
        deltime: "0",
        posttime: "1472467821",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/05c169b61982ad641b529576be63424729bb6108.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B1%82%E7%94%9F%E4%B9%8B%E8%B7%AF"
        ]
      },
      {
        id: "503",
        type: "fix",
        title: "幽灵",
        deltime: "0",
        posttime: "1472467789",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/02b8b884e435959ec1714ca68168235bc9fe98f4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B9%BD%E7%81%B5"
        ]
      },
      {
        id: "502",
        type: "fix",
        title: "没钱",
        deltime: "0",
        posttime: "1472467751",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bb823d5639d3142d7ec69d1ef61f884fe1842de0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%A1%E9%92%B1"
        ]
      },
      {
        id: "501",
        type: "fix",
        title: "半条命",
        deltime: "0",
        posttime: "1472467715",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f28cd7af5832d997bd9c4706dfb4404ec96ce69a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%8A%E6%9D%A1%E5%91%BD"
        ]
      },
      {
        id: "500",
        type: "fix",
        title: "抖腿",
        deltime: "0",
        posttime: "1472467419",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/64882d1f0bee58775384dddd972505fe2b831940.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF"
        ]
      },
      {
        id: "499",
        type: "fix",
        title: "干枯",
        deltime: "0",
        posttime: "1472467371",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9685fe4a9ddc4ec087e62109928e750c1c19b742.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B9%B2%E6%9E%AF"
        ]
      },
      {
        id: "498",
        type: "fix",
        title: "气球",
        deltime: "0",
        posttime: "1471949013",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6ccca20dd7211d21fa32080576f51d2be44919de.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%94%E7%90%83"
        ]
      },
      {
        id: "497",
        type: "fix",
        title: "炼金术",
        deltime: "0",
        posttime: "1471948996",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ae07e00404a1ddb6083153ef440c7ec31b8c0b5b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%BC%E9%87%91%E6%9C%AF"
        ]
      },
      {
        id: "496",
        type: "fix",
        title: "有毒",
        deltime: "0",
        posttime: "1471948978",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8ae4200fbcb60b3f29e4ce75e27ba144145b366a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9C%89%E6%AF%92"
        ]
      },
      {
        id: "495",
        type: "fix",
        title: "四叶草",
        deltime: "0",
        posttime: "1471948964",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/28c17ed8cfc3394149a6814a4a53086dee79c053.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%9B%E5%8F%B6%E8%8D%89"
        ]
      },
      {
        id: "494",
        type: "fix",
        title: "冷",
        deltime: "0",
        posttime: "1471948902",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/73100795fd5fd7ab885319d777ffd38f134ace28.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7"
        ]
      },
      {
        id: "493",
        type: "fix",
        title: "C菌",
        deltime: "0",
        posttime: "1471948880",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d0d0cf65e2644c86a4c71ba96abcd9d0e7251e2d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=C%E8%8F%8C"
        ]
      },
      {
        id: "492",
        type: "fix",
        title: "冰天雪地",
        deltime: "0",
        posttime: "1471948846",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/89ee85942e3f1a76de9e73b91041246938f7bf7c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E5%A4%A9%E9%9B%AA%E5%9C%B0"
        ]
      },
      {
        id: "491",
        type: "fix",
        title: "水母",
        deltime: "0",
        posttime: "1471598410",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d9ae025039cebbf6c3c8785b4292cf9283a28235.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%AF%8D"
        ]
      },
      {
        id: "490",
        type: "fix",
        title: "自来水",
        deltime: "0",
        posttime: "1471598393",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ba02e18a191fe1b98b9cf9314f065f0ee185534f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%87%AA%E6%9D%A5%E6%B0%B4"
        ]
      },
      {
        id: "489",
        type: "fix",
        title: "rap",
        deltime: "0",
        posttime: "1471598372",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e6b0b05ca85b3dd083e122b22007cef7ff3760e4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=rap"
        ]
      },
      {
        id: "488",
        type: "fix",
        title: "B-BOX",
        deltime: "0",
        posttime: "1471598349",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/96c439a8ffff903d48c3b14d64fca92bf8af8f04.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=bbox"
        ]
      },
      {
        id: "487",
        type: "fix",
        title: "柠檬",
        deltime: "0",
        posttime: "1471598322",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d21e14162ed6ed5585321b0e684b7d1ea17780dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9F%A0%E6%AA%AC"
        ]
      },
      {
        id: "486",
        type: "fix",
        title: "GTA",
        deltime: "0",
        posttime: "1471595877",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba6aa88c3e43e6c0d0bb3a7a189d8ba910874702.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=GTA"
        ]
      },
      {
        id: "485",
        type: "fix",
        title: "垃圾食品",
        deltime: "0",
        posttime: "1471406539",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/26c2f30f1bcf4ae3334e6a39468b3dc681b78b14.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9E%83%E5%9C%BE%E9%A3%9F%E5%93%81"
        ]
      },
      {
        id: "484",
        type: "fix",
        title: "温泉",
        deltime: "0",
        posttime: "1471406507",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a82739d278730041812d99f0beb97a4b93c28434.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B8%A9%E6%B3%89"
        ]
      },
      {
        id: "483",
        type: "fix",
        title: "跳水",
        deltime: "0",
        posttime: "1471406479",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b785d81d4a6aa170167ba5a0d3f74922d796fc9b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E6%B0%B4"
        ]
      },
      {
        id: "482",
        type: "fix",
        title: "奥运会",
        deltime: "0",
        posttime: "1471406336",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/002ffe9ca353bbe264938d31d39cde8524931029.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E8%BF%90%E4%BC%9A"
        ]
      },
      {
        id: "481",
        type: "fix",
        title: "西瓜",
        deltime: "0",
        posttime: "1471254974",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bc7d16c2d1bbed0ce1610496fee8657e041612bc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A5%BF%E7%93%9C"
        ]
      },
      {
        id: "480",
        type: "fix",
        title: "豌豆",
        deltime: "0",
        posttime: "1471254937",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/727a4abaf6d8bea7d8b7a9f312ee6063463d0628.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B1%8C%E8%B1%86"
        ]
      },
      {
        id: "479",
        type: "fix",
        title: "数位板",
        deltime: "0",
        posttime: "1471254919",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6a1a80783db77bca5effb3715c253f41fffc1eb3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%B0%E4%BD%8D%E6%9D%BF"
        ]
      },
      {
        id: "478",
        type: "fix",
        title: "乒乓",
        deltime: "0",
        posttime: "1471254896",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/10d779949755fdadad4e8b58776bc62815d759bb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%92%E4%B9%93"
        ]
      },
      {
        id: "477",
        type: "fix",
        title: "冒泡",
        deltime: "0",
        posttime: "1471254872",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4bda5b53b06c650cf031b57af51e6713599b22c5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%92%E6%B3%A1"
        ]
      },
      {
        id: "476",
        type: "fix",
        title: "胡萝卜",
        deltime: "0",
        posttime: "1471254847",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1077b524d400cda27b32837e4c589bce685a7d4e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%83%A1%E8%90%9D%E5%8D%9C"
        ]
      },
      {
        id: "475",
        type: "fix",
        title: "眼神犀利",
        deltime: "0",
        posttime: "1470975304",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/57ca64365d096baa64ed417d7917c2ad2b27c8dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9C%BC%E7%A5%9E%E7%8A%80%E5%88%A9"
        ]
      },
      {
        id: "474",
        type: "fix",
        title: "智障",
        deltime: "0",
        posttime: "1470975275",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4c0902c7f1fb90c0155d82a81610cb7ea5fe6b73.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%99%BA%E9%9A%9C"
        ]
      },
      {
        id: "473",
        type: "fix",
        title: "扑街",
        deltime: "0",
        posttime: "1470975197",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/07ad60518b465174566fd74d9d08cc826a6c1675.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%91%E8%A1%97"
        ]
      },
      {
        id: "472",
        type: "fix",
        title: "近视",
        deltime: "0",
        posttime: "1470975129",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/63e78addf099ed2df8ceb6dcae9cac701d1223e8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BF%91%E8%A7%86"
        ]
      },
      {
        id: "471",
        type: "fix",
        title: "放空",
        deltime: "0",
        posttime: "1470975101",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/42e9bce4727a3b3eb827d6f08d0f6a0f0cc50741.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BE%E7%A9%BA"
        ]
      },
      {
        id: "470",
        type: "fix",
        title: "V+",
        deltime: "0",
        posttime: "1470975058",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/22e658a6055b8074232d521ede3f5543b3e22ca2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=vocaloid"
        ]
      },
      {
        id: "469",
        type: "fix",
        title: "洪荒之力",
        deltime: "0",
        posttime: "1470974992",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4f3f6d65ad40bede3861911277ee53e0712132d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B4%AA%E8%8D%92%E4%B9%8B%E5%8A%9B"
        ]
      },
      {
        id: "468",
        type: "fix",
        title: "狗粮科科",
        deltime: "0",
        posttime: "1470811983",
        edittime: "1514972989",
        sttime: "1470725100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d1c7747da3e2bc73ee14a92f2ecbb651d9f428c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%97%E7%B2%AE"
        ]
      },
      {
        id: "467",
        type: "fix",
        title: "啊啾~",
        deltime: "0",
        posttime: "1470811051",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/601564e67d2bd5f542b4558a92fae98074b70d8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%9A%8F"
        ]
      },
      {
        id: "466",
        type: "fix",
        title: "猫shi",
        deltime: "0",
        posttime: "1470811015",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6c60b1dcedddcc59ee4960accebdde03db52e1a2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E5%B1%8E"
        ]
      },
      {
        id: "465",
        type: "fix",
        title: "灵能百分百",
        deltime: "0",
        posttime: "1470810981",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/03195adabf64db2fe8ce65012aa16abd337503ba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E8%83%BD%E7%99%BE%E5%88%86%E7%99%BE"
        ]
      },
      {
        id: "464",
        type: "fix",
        title: "脱团狗",
        deltime: "0",
        posttime: "1470810913",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/852fb270e78b41a2e3543313e8a6ef01884efc9a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%84%B1%E5%9B%A2%E7%8B%97"
        ]
      },
      {
        id: "463",
        type: "fix",
        title: "约会(x",
        deltime: "0",
        posttime: "1470810634",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6ee6c236a00d3ae6fc71105a89dff9bba7ad29c5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%A6%E4%BC%9A"
        ]
      },
      {
        id: "462",
        type: "fix",
        title: "黄少天",
        deltime: "0",
        posttime: "1470810600",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/298526f9e3d876528ccd4dbe007ea90e15c00560.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%84%E5%B0%91%E5%A4%A9"
        ]
      },
      {
        id: "461",
        type: "fix",
        title: "二次螈",
        deltime: "0",
        posttime: "1470810570",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/06a43f02b5f0b213cf657483a89860ced6b77ffe.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E6%AC%A1%E5%85%83"
        ]
      },
      {
        id: "460",
        type: "fix",
        title: "单身汪",
        deltime: "0",
        posttime: "1470810517",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c7039f23fe40c40fdf3d35856cbb77a320797465.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%95%E8%BA%AB%E7%8B%97"
        ]
      },
      {
        id: "459",
        type: "fix",
        title: "undertale",
        deltime: "0",
        posttime: "1470810488",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e2ed7dcd20514146a21d69bcb6ba8cfbe7c72c18.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=undertale"
        ]
      },
      {
        id: "458",
        type: "fix",
        title: "MMD",
        deltime: "0",
        posttime: "1470280075",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/fcfbcb2ece446f12f41d3bd02bfae7dd81716cb6.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/video/douga-mmd-1.html"
        ]
      },
      {
        id: "457",
        type: "fix",
        title: "我想静静",
        deltime: "0",
        posttime: "1470280036",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/fb3648a6cd2432188864d8b83882c22fc1928468.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E6%83%B3%E9%9D%99%E9%9D%99"
        ]
      },
      {
        id: "456",
        type: "fix",
        title: "闹钟(不",
        deltime: "0",
        posttime: "1470280010",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/095dcee824669638cc345397e5082c06b3700a1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%97%B9%E9%92%9F"
        ]
      },
      {
        id: "455",
        type: "fix",
        title: "辣眼睛",
        deltime: "0",
        posttime: "1470279975",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a45a62addb907b637653c33abccc8749db83d818.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BE%A3%E7%9C%BC%E7%9D%9B"
        ]
      },
      {
        id: "454",
        type: "fix",
        title: "极乐净土",
        deltime: "0",
        posttime: "1470279934",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/02ec6d14dd67ef2b9d1e9b471c93842c91d63f69.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%81%E4%B9%90%E5%87%80%E5%9C%9F"
        ]
      },
      {
        id: "453",
        type: "fix",
        title: "罪袋",
        deltime: "0",
        posttime: "1470279888",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/497ecdf8d6004bee3e5e3cacb20e573a24d54003.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BD%AA%E8%A2%8B"
        ]
      },
      {
        id: "452",
        type: "fix",
        title: "沙画",
        deltime: "0",
        posttime: "1470279780",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2a7e707e79e12b10ab747f4afdf0331db14c73a6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%99%E7%94%BB"
        ]
      },
      {
        id: "451",
        type: "fix",
        title: "扭扭扭腰",
        deltime: "0",
        posttime: "1470279754",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8808c59621c12a1da8e2c8533ed96fa95fe833dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0"
        ]
      },
      {
        id: "450",
        type: "fix",
        title: "刺客信条",
        deltime: "0",
        posttime: "1470036936",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b3d9d5cacf411f4beca284b48d8cd7fecfacdbfd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%BA%E5%AE%A2%E4%BF%A1%E6%9D%A1"
        ]
      },
      {
        id: "449",
        type: "fix",
        title: "园艺大师",
        deltime: "0",
        posttime: "1470036831",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ba8a467c6b035458021b34b23876d710154a0ab1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%AD%E8%89%BA"
        ]
      },
      {
        id: "448",
        type: "fix",
        title: "鸟之诗",
        deltime: "0",
        posttime: "1470036711",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/55876ccf8459158adf8fdf82aceadaba4061cc40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B8%9F%E4%B9%8B%E8%AF%97"
        ]
      },
      {
        id: "447",
        type: "fix",
        title: "羞羞",
        deltime: "0",
        posttime: "1470036609",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6f08c653f9d3070d3551d6b8694202dbf7ed02e3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%B3%E7%BE%9E"
        ]
      },
      {
        id: "446",
        type: "fix",
        title: "东方俯卧撑",
        deltime: "0",
        posttime: "1470036527",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1b494e573c0b5b25b4e966a61fee5c15512c17bb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BF%AF%E5%8D%A7%E6%92%91"
        ]
      },
      {
        id: "445",
        type: "fix",
        title: "小提琴",
        deltime: "0",
        posttime: "1469611494",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ea9b245ba67d27593bc73bdbd4230f60521e2222.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%8F%E6%8F%90%E7%90%B4"
        ]
      },
      {
        id: "444",
        type: "fix",
        title: "萨克斯",
        deltime: "0",
        posttime: "1469611468",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8dd6ea6c08d6f3b18b7cc394866685355beac090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%90%A8%E5%85%8B%E6%96%AF"
        ]
      },
      {
        id: "443",
        type: "fix",
        title: "酷暑",
        deltime: "0",
        posttime: "1469611439",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d9e12dc752a42da832bba2b730b004c2380e37a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%85%B7%E6%9A%91"
        ]
      },
      {
        id: "442",
        type: "fix",
        title: "羁绊",
        deltime: "0",
        posttime: "1469611415",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5a57c6c0831f7c7e26e5fd500911f6b71480bfba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%81%E7%BB%8A"
        ]
      },
      {
        id: "441",
        type: "fix",
        title: "挥手",
        deltime: "0",
        posttime: "1469611375",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/08238267a9b88adf85fa860fc78981c9a94b0e58.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8C%A5%E6%89%8B"
        ]
      },
      {
        id: "440",
        type: "fix",
        title: "读书",
        deltime: "0",
        posttime: "1469607053",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1f257a22ecff21b9a215d80ad3360a1c328c3e90.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%AF%BB%E4%B9%A6"
        ]
      },
      {
        id: "439",
        type: "fix",
        title: "打针",
        deltime: "0",
        posttime: "1469607009",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e5d4ec30d15b0950658833f5ea14c3b93edb38b3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E9%92%88"
        ]
      },
      {
        id: "438",
        type: "fix",
        title: "插画师",
        deltime: "0",
        posttime: "1469606880",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8ec4105a29565696823a556ea42cc94ce90f9a07.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8F%92%E7%94%BB%E5%B8%88"
        ]
      },
      {
        id: "437",
        type: "fix",
        title: "舞蹈",
        deltime: "0",
        posttime: "1469606649",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2821554ce9fde44f787bbae127e5079742933935.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%88%9E%E8%B9%88"
        ]
      },
      {
        id: "436",
        type: "fix",
        title: "拼图",
        deltime: "0",
        posttime: "1469606410",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/baa81fa699af6340201be843f81d93239363bcc8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8B%BC%E5%9B%BE"
        ]
      },
      {
        id: "435",
        type: "fix",
        title: "凝视",
        deltime: "0",
        posttime: "1469606376",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4e0807349c9f67e8e6de755c48189ff3dba6b715.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%87%9D%E8%A7%86"
        ]
      },
      {
        id: "434",
        type: "fix",
        title: "魔法少女小圆",
        deltime: "0",
        posttime: "1469606333",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8cf9c4967327a32f1c90f93b7f85f478a9e97b3a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86"
        ]
      },
      {
        id: "433",
        type: "fix",
        title: "灵魂画手",
        deltime: "0",
        posttime: "1469606284",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/51d68c4b744744fee9f567876f1518b0c538f472.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E9%AD%82%E7%94%BB%E6%89%8B"
        ]
      },
      {
        id: "432",
        type: "fix",
        title: "扭腰",
        deltime: "0",
        posttime: "1469606240",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/de10e8a4fc08b0183182396b9afc830a149e2389.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0"
        ]
      },
      {
        id: "431",
        type: "fix",
        title: "冷汗",
        deltime: "0",
        posttime: "1469180684",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1acfb9cb4190eba7e4fd48c7426f698a87428a05.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%B1%97"
        ]
      },
      {
        id: "430",
        type: "fix",
        title: "画画",
        deltime: "0",
        posttime: "1469180637",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/59b1223db28da7b0c040895cf6960c62f8143dcb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%BB%E7%94%BB"
        ]
      },
      {
        id: "429",
        type: "fix",
        title: "抖腿",
        deltime: "0",
        posttime: "1469180435",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2c2328bce8071688dd3fba5b0e44a83f5f8917dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF"
        ]
      },
      {
        id: "428",
        type: "fix",
        title: "电波",
        deltime: "0",
        posttime: "1469180150",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b8abee0e27e8c63cfe836738017a6a0ba47318e0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%B5%E6%B3%A2"
        ]
      },
      {
        id: "427",
        type: "fix",
        title: "催泪向",
        deltime: "0",
        posttime: "1469179784",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/74952c377ad1a128b8f1c6da171366e826207848.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%82%AC%E6%B3%AA%E5%90%91"
        ]
      },
      {
        id: "426",
        type: "fix",
        title: "葛优躺",
        deltime: "0",
        posttime: "1469083937",
        edittime: "1514972989",
        sttime: "1468997280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fb0561550e2ea970612dd2c6c83371a8f63c4fb9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%91%9B%E4%BC%98%E8%BA%BA"
        ]
      },
      {
        id: "425",
        type: "fix",
        title: "good job",
        deltime: "0",
        posttime: "1469083898",
        edittime: "1514972989",
        sttime: "1468997280",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/42e983a34462a7695b14c7dc55ba9692fdd44090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=good%20job"
        ]
      },
      {
        id: "424",
        type: "fix",
        title: "视力检查",
        deltime: "0",
        posttime: "1468914069",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cee0a7f7303bfdec6f21c437a86aa5feca4dda3e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A7%86%E5%8A%9B%E6%A3%80%E6%9F%A5"
        ]
      },
      {
        id: "423",
        type: "fix",
        title: "命运石之门",
        deltime: "0",
        posttime: "1468914018",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/505e97fbeb4eb313b230c83bcfd1e0af4741bb02.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%BD%E8%BF%90%E7%9F%B3%E4%B9%8B%E9%97%A8"
        ]
      },
      {
        id: "422",
        type: "fix",
        title: "技术宅",
        deltime: "0",
        posttime: "1468913943",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cb2fdb92341f682e5ec3f84526ae8bbd051742dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%80%E6%9C%AF%E5%AE%85"
        ]
      },
      {
        id: "421",
        type: "fix",
        title: "孤岛",
        deltime: "0",
        posttime: "1468913778",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b4e078f2639bc031f91835401087fa7a84d0e56a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A4%E5%B2%9B"
        ]
      },
      {
        id: "420",
        type: "fix",
        title: "冻鳗",
        deltime: "0",
        posttime: "1468913739",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/59a5162b9a48728174b3b66d940237f172ad6f98.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A8%E6%BC%AB"
        ]
      },
      {
        id: "419",
        type: "fix",
        title: "测评",
        deltime: "0",
        posttime: "1468913621",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d6cf0bb539727a8d525385f48441a564451f7539.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%8B%E8%AF%84"
        ]
      },
      {
        id: "418",
        type: "fix",
        title: "新房昭之",
        deltime: "0",
        posttime: "1468810405",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4209e73c2a5b55c4391f8ac687ccf0e50ba8e4b6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%96%B0%E6%88%BF%E6%98%AD%E4%B9%8B"
        ]
      },
      {
        id: "417",
        type: "fix",
        title: "圣地巡礼",
        deltime: "0",
        posttime: "1468810376",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/23f9f44dc7296519da3f26b49f1f733f9cb5d838.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9C%A3%E5%9C%B0%E5%B7%A1%E7%A4%BC"
        ]
      },
      {
        id: "416",
        type: "fix",
        title: "听歌向",
        deltime: "0",
        posttime: "1468810333",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/55ec3bdb3f88e619f1428fe940b554beb59bb7c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%AC%E6%AD%8C%E5%90%91"
        ]
      },
      {
        id: "415",
        type: "fix",
        title: "入坑",
        deltime: "0",
        posttime: "1468810281",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/22309f6212cfce7d52d61c8b67126964c2a5f1b2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%A5%E5%9D%91"
        ]
      },
      {
        id: "414",
        type: "fix",
        title: "毕业设计",
        deltime: "0",
        posttime: "1468809952",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/16719dac59b715654e25bbc87b54c94dff4989c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1"
        ]
      },
      {
        id: "413",
        type: "fix",
        title: "摆渡人",
        deltime: "0",
        posttime: "1468809648",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/edfade7f15316b05faeeb00707ebf4b1f2eb3f95.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%91%86%E6%B8%A1%E4%BA%BA"
        ]
      },
      {
        id: "412",
        type: "fix",
        title: "pokemon go",
        deltime: "0",
        posttime: "1468809527",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0a4ce86d279e6904e9743440c50427f228bf9933.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=pokemon%20go"
        ]
      },
      {
        id: "411",
        type: "fix",
        title: "足球",
        deltime: "0",
        posttime: "1468809467",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/52ba7205d4c6657a2aabb9f90759393ebda1f88c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B6%B3%E7%90%83"
        ]
      },
      {
        id: "410",
        type: "fix",
        title: "无聊",
        deltime: "0",
        posttime: "1468809425",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/00c007b756623b0392a2218a9e9ff7be6ece1ec8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A"
        ]
      },
      {
        id: "409",
        type: "fix",
        title: "架子鼓",
        deltime: "0",
        posttime: "1468809323",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a2f013fe24dfd22d58f995f7e2b3970f345b6054.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%B6%E5%AD%90%E9%BC%93"
        ]
      },
      {
        id: "408",
        type: "fix",
        title: "和尚",
        deltime: "0",
        posttime: "1468809220",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bcf23bb6e1fed57e69dce4cca5212cf1a32cbf0c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%92%8C%E5%B0%9A"
        ]
      },
      {
        id: "407",
        type: "fix",
        title: "东离剑游记",
        deltime: "0",
        posttime: "1468809179",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/269a6e55a0b64ba326e0b10b9f0a7ed3b080a947.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/5064/"
        ]
      },
      {
        id: "406",
        type: "fix",
        title: "ok",
        deltime: "0",
        posttime: "1468809127",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/87e677d7b81d6b4e342c64eb80bb644f477ba947.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=ok"
        ]
      },
      {
        id: "405",
        type: "fix",
        title: "齐木楠雄的灾难",
        deltime: "0",
        posttime: "1468808924",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e3ea2ef84b9bf180186ea9dc5e09c7cbe0a5b0d4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BD%90%E6%9C%A8%E6%A5%A0%E9%9B%84%E7%9A%84%E7%81%BE%E9%9A%BE"
        ]
      },
      {
        id: "404",
        type: "fix",
        title: "屁股",
        deltime: "0",
        posttime: "1468572916",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7389ccc05054f79c16b7bcf893a93ad305e4aee2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%81%E8%82%A1"
        ]
      },
      {
        id: "403",
        type: "fix",
        title: "津岛善子",
        deltime: "0",
        posttime: "1468572861",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/811eba9d63b8e7f238e64092fc8e861ce5a49d4c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B4%A5%E5%B2%9B%E5%96%84%E5%AD%90"
        ]
      },
      {
        id: "402",
        type: "fix",
        title: "積乱雲グラフィティ",
        deltime: "0",
        posttime: "1468572822",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/80d6b8bfb1d2ca4fca2afb48526e82c7ed7bc5d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A9%8D%E4%B9%B1%E9%9B%B2%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%86%E3%82%A3"
        ]
      },
      {
        id: "401",
        type: "fix",
        title: "黑暗料理",
        deltime: "0",
        posttime: "1468572753",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/56febae51aada7a868bd6a86c773bd743a314a3c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E6%9A%97%E6%96%99%E7%90%86"
        ]
      },
      {
        id: "400",
        type: "fix",
        title: "天真与闪电",
        deltime: "0",
        posttime: "1468572693",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/5fed4e089bdcbf8146def83f3c97ea407d60b1fb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%9C%9F%E4%B8%8E%E9%97%AA%E7%94%B5"
        ]
      },
      {
        id: "399",
        type: "fix",
        title: "赏花",
        deltime: "0",
        posttime: "1468572646",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b37a5f11a9333097d98381d14e3015d14d17a865.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B5%8F%E8%8A%B1"
        ]
      },
      {
        id: "398",
        type: "fix",
        title: "包子",
        deltime: "0",
        posttime: "1468572563",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9233ce9100871a83d96ea1dd99439af7eb7eae1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%85%E5%AD%90"
        ]
      },
      {
        id: "397",
        type: "fix",
        title: "手风琴",
        deltime: "0",
        posttime: "1468572526",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/099249da8e4d6ad82ca933f540e7964b55dd0774.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%8B%E9%A3%8E%E7%90%B4"
        ]
      },
      {
        id: "396",
        type: "fix",
        title: "上车",
        deltime: "0",
        posttime: "1468572405",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/53ddb2069d24bbe6d8440a2344b27eb0be7a311e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8A%E8%BD%A6"
        ]
      },
      {
        id: "395",
        type: "fix",
        title: "口琴",
        deltime: "0",
        posttime: "1468572278",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/baf2b4e794f28d43b59a3cf98dafe05e3762bc3d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%A3%E7%90%B4"
        ]
      },
      {
        id: "394",
        type: "fix",
        title: "我们仍未知道那天所看见的花的名字",
        deltime: "0",
        posttime: "1468572075",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/107e1c9077ded7be66aa8dc5710b38e30504c030.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E4%BB%8D%E6%9C%AA%E7%9F%A5%E9%81%93%E9%82%A3%E5%A4%A9%E6%89%80%E7%9C%8B%E8%A7%81%E7%9A%84%E8%8A%B1%E7%9A%84%E5%90%8D%E5%AD%97"
        ]
      },
      {
        id: "393",
        type: "fix",
        title: "饱腹",
        deltime: "0",
        posttime: "1468572040",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/5ba039c41f5a6a4eb3e6c3c4745e751689c07899.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%B1%E4%BA%86"
        ]
      },
      {
        id: "392",
        type: "fix",
        title: "攻壳机动队",
        deltime: "0",
        posttime: "1468571949",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/72770979cfade1e7cbfb70c5acec544dd9d45d90.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BB%E5%A3%B3%E6%9C%BA%E5%8A%A8%E9%98%9F"
        ]
      },
      {
        id: "391",
        type: "fix",
        title: "粘着系男子15年",
        deltime: "0",
        posttime: "1467692787",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/88d8af2151a1ffb8a83030bf643c242b1c821d5c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B2%98%E7%9D%80%E7%B3%BB%E7%94%B7%E5%AD%90%2015%E5%B9%B4"
        ]
      },
      {
        id: "390",
        type: "fix",
        title: "银河英雄传说",
        deltime: "0",
        posttime: "1467692079",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c3d65e136821157c3a603aa7a9f448f55c3e60d8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4"
        ]
      },
      {
        id: "389",
        type: "fix",
        title: "下雨",
        deltime: "0",
        posttime: "1467691240",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a9abed328d9f3c6f6767de1b795a2c3c4610d404.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8B%E9%9B%A8"
        ]
      },
      {
        id: "388",
        type: "fix",
        title: "石化",
        deltime: "0",
        posttime: "1467690309",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fc4c234cb28618b777281ed28520efaa3c3f7b40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9F%B3%E5%8C%96"
        ]
      },
      {
        id: "387",
        type: "fix",
        title: "懵逼",
        deltime: "0",
        posttime: "1467625869",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/484c6be77679b81f42f56c649dc9b811105d9976.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%87%B5%E9%80%BC"
        ]
      },
      {
        id: "386",
        type: "fix",
        title: "量产机",
        deltime: "0",
        posttime: "1467625462",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3485a50682eb3d730380522254cf5ddb1c83be06.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%87%8F%E4%BA%A7%E6%9C%BA"
        ]
      },
      {
        id: "385",
        type: "fix",
        title: "钢琴",
        deltime: "0",
        posttime: "1467625430",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1b9fc9843a6afe7efeceec778be07fd76bb7b51b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E7%90%B4"
        ]
      },
      {
        id: "384",
        type: "fix",
        title: "串烧",
        deltime: "0",
        posttime: "1467625396",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/14f958c0ee61df20824f84c072aa1eaef28319d5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%B2%E7%83%A7"
        ]
      },
      {
        id: "383",
        type: "fix",
        title: "博丽神社",
        deltime: "0",
        posttime: "1467624989",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1f7b6ffa03346eb1f340a28b2c00f259fe75d835.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%B8%BD%E7%A5%9E%E7%A4%BE"
        ]
      },
      {
        id: "382",
        type: "fix",
        title: "章鱼",
        deltime: "0",
        posttime: "1467623385",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/22e33788746f48ce298eaf7443aba64361ce3992.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC"
        ]
      },
      {
        id: "381",
        type: "fix",
        title: "秀恩爱",
        deltime: "0",
        posttime: "1467623353",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1f8aa6cd328fee1eaf61d1f59e40e97addc1aae8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A7%80%E6%81%A9%E7%88%B1"
        ]
      },
      {
        id: "380",
        type: "fix",
        title: "喵星人",
        deltime: "0",
        posttime: "1467623279",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/466bcac249baae2df36fba18d7ddd91f26417c0e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA"
        ]
      },
      {
        id: "379",
        type: "fix",
        title: "翻滚",
        deltime: "0",
        posttime: "1467623195",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f0d94316c65a3edf0834182f0d8d9b8d39b56d28.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E6%BB%9A"
        ]
      },
      {
        id: "378",
        type: "fix",
        title: "侏罗纪公园",
        deltime: "0",
        posttime: "1467623143",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/915c3a91fc4a48a5b8f299e8498ddc4a16c8e6de.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BE%8F%E7%BD%97%E7%BA%AA%E5%85%AC%E5%9B%AD"
        ]
      },
      {
        id: "377",
        type: "fix",
        title: "宅舞",
        deltime: "0",
        posttime: "1467623080",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/80bd4fceff66fa41f27547869c5826cf34a5fb8d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%85%E8%88%9E"
        ]
      },
      {
        id: "376",
        type: "fix",
        title: "独立日",
        deltime: "0",
        posttime: "1467623042",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa6beb54d0923320077aa1272cf7e6b06577d510.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%AC%E7%AB%8B%E6%97%A5"
        ]
      },
      {
        id: "375",
        type: "fix",
        title: "米菲",
        deltime: "0",
        posttime: "1467622996",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43b112f6e863e32589aeecb26a8ec86de55ea811.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B1%B3%E8%8F%B2"
        ]
      },
      {
        id: "374",
        type: "fix",
        title: "狐狸",
        deltime: "0",
        posttime: "1467622921",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/58e5abb63c05c615d1da48a2cc80e45593a04728.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%90%E7%8B%B8"
        ]
      },
      {
        id: "373",
        type: "fix",
        title: "nqrse",
        deltime: "0",
        posttime: "1467622889",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b9c75114669bbc1aa63d5f4176f8f7aeda97b081.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=nqrse"
        ]
      },
      {
        id: "372",
        type: "fix",
        title: "高产似母猪",
        deltime: "0",
        posttime: "1467622799",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/302b8cfa7bcba4f9d4da9b85336b4667a2767bb0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AB%98%E4%BA%A7%E4%BC%BC%E6%AF%8D%E7%8C%AA"
        ]
      },
      {
        id: "371",
        type: "fix",
        title: "装死",
        deltime: "0",
        posttime: "1467622755",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fb6400db3879f4a40d494c1e71819c563c564159.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A3%85%E6%AD%BB"
        ]
      },
      {
        id: "370",
        type: "fix",
        title: "台风",
        deltime: "0",
        posttime: "1467622719",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/225450593d96c544f154a86bac5126e42c182e96.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%B0%E9%A3%8E"
        ]
      },
      {
        id: "369",
        type: "fix",
        title: "跷跷板",
        deltime: "0",
        posttime: "1467622652",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d518dd28c7e63a9e79c58cb7a8b12eb649e387bc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B7%E8%B7%B7%E6%9D%BF"
        ]
      },
      {
        id: "368",
        type: "fix",
        title: "鬼畜眼镜",
        deltime: "0",
        posttime: "1467622613",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3e80bd4287998c4b814b5c1304d2d0f6decb6dd4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AC%BC%E7%95%9C%20%E7%9C%BC"
        ]
      },
      {
        id: "367",
        type: "fix",
        title: "地球online",
        deltime: "0",
        posttime: "1467622536",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/88aa141f13b97d30d005f3c578d58025f70a5011.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9C%B0%E7%90%83online"
        ]
      },
      {
        id: "366",
        type: "fix",
        title: "报警",
        deltime: "0",
        posttime: "1467622492",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02690716795fb1ff65f913ee8158c8b3a4bcdac5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%A5%E8%AD%A6"
        ]
      },
      {
        id: "365",
        type: "fix",
        title: "围观",
        deltime: "0",
        posttime: "1467622334",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b5ef65cff936e57738108a0b4c73222527d9b8ea.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%B4%E8%A7%82"
        ]
      },
      {
        id: "364",
        type: "fix",
        title: "日语",
        deltime: "0",
        posttime: "1467621902",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f3e6a7934adeb9dc382b5ab48ef23cb871747e35.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%AF%AD"
        ]
      },
      {
        id: "363",
        type: "fix",
        title: "任豚",
        deltime: "0",
        posttime: "1467621861",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/92b4dca6298d196f6da76dfe9f36a977f02160df.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%BB%E8%B1%9A"
        ]
      },
      {
        id: "362",
        type: "fix",
        title: "饭团",
        deltime: "0",
        posttime: "1467621805",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0e5f19d622a48b3510e8dd8532e5f9a35aacaa79.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A5%AD%E5%9B%A2"
        ]
      },
      {
        id: "361",
        type: "fix",
        title: "心跳",
        deltime: "0",
        posttime: "1467621704",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/bf935d4f64f149ea3cf3d082f7b05526b5cd81a0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E8%B7%B3"
        ]
      },
      {
        id: "360",
        type: "fix",
        title: "受不了",
        deltime: "0",
        posttime: "1467360158",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/19defc47f7ac93fb885a4038d208bed1ea23cc4b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%97%E4%B8%8D%E4%BA%86"
        ]
      },
      {
        id: "359",
        type: "fix",
        title: "手办",
        deltime: "0",
        posttime: "1467360088",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d520a5ffa3ad994bca4bd1a523583fefbe6d61f0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%8B%E5%8A%9E"
        ]
      },
      {
        id: "358",
        type: "fix",
        title: "日蚀",
        deltime: "0",
        posttime: "1467360050",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5f7d0081b3a2a01d52f2b3a96c824d11f8051352.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%9A%80"
        ]
      },
      {
        id: "357",
        type: "fix",
        title: "挠痒痒",
        deltime: "0",
        posttime: "1467359963",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c337d9780767b894af922ebf4e1b43a838b43388.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8C%A0%E7%97%92%E7%97%92"
        ]
      },
      {
        id: "356",
        type: "fix",
        title: "狂魔随便玩玩具",
        deltime: "0",
        posttime: "1467353752",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/56eef81107c4461e614f9a9971d8b7d97674304c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%82%E9%AD%94%E9%9A%8F%E4%BE%BF%E7%8E%A9%E7%8E%A9%E5%85%B7"
        ]
      },
      {
        id: "355",
        type: "fix",
        title: "震惊",
        deltime: "0",
        posttime: "1467353710",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8a93e0148bee4d4439a60e5e94c96cc3de0134e3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9C%87%E6%83%8A"
        ]
      },
      {
        id: "354",
        type: "fix",
        title: "沉默",
        deltime: "0",
        posttime: "1467353667",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79eb33869af08d24748a764b01cd3fb792dd445a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%89%E9%BB%98"
        ]
      },
      {
        id: "353",
        type: "fix",
        title: "刘海",
        deltime: "0",
        posttime: "1467353606",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79994f3fde343799dc92e649b8e34d0e72ddba47.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%98%E6%B5%B7"
        ]
      },
      {
        id: "352",
        type: "fix",
        title: "蕾姆",
        deltime: "0",
        posttime: "1467353552",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cf8690a44b1c1ea7123280226a86eac3b025a63b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%95%BE%E5%A7%86"
        ]
      },
      {
        id: "351",
        type: "fix",
        title: "护肤",
        deltime: "0",
        posttime: "1467352157",
        edittime: "1514972989",
        sttime: "1467265200",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6abca815cef52069ea99d7506a9cf3e61f4b9337.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%A4%E8%82%A4"
        ]
      },
      {
        id: "350",
        type: "fix",
        title: "蹦迪",
        deltime: "0",
        posttime: "1467352091",
        edittime: "1514972989",
        sttime: "1467265200",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/84f323e3a77a6eafee656f832847603751f3857d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B9%A6%E8%BF%AA"
        ]
      },
      {
        id: "349",
        type: "fix",
        title: "猫耳",
        deltime: "0",
        posttime: "1467025940",
        edittime: "1514972989",
        sttime: "1466937960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b4a3326de814168501bb4b2afefdac1aa9c45bba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E8%80%B3"
        ]
      },
      {
        id: "348",
        type: "fix",
        title: "魔性",
        deltime: "0",
        posttime: "1467025903",
        edittime: "1514972989",
        sttime: "1466937960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2f23c0bc2f7cbdd9ec60dfcde5279625af815057.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%80%A7"
        ]
      },
      {
        id: "347",
        type: "fix",
        title: "导弹",
        deltime: "0",
        posttime: "1467024450",
        edittime: "1514972989",
        sttime: "1466937420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b27081d495783b3f3012bae045eed5b9ff1f0e3f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AF%BC%E5%BC%B9"
        ]
      },
      {
        id: "346",
        type: "fix",
        title: "吃饭团",
        deltime: "0",
        posttime: "1467024074",
        edittime: "1514972989",
        sttime: "1466937420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d9cc1a4e653d2870cc024d9174b2cea730164eb4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%AD%E5%9B%A2"
        ]
      },
      {
        id: "345",
        type: "fix",
        title: "深井冰",
        deltime: "0",
        posttime: "1466576350",
        edittime: "1514972989",
        sttime: "1466489700",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/274dc4ba9cd77e5ed40f84238d172dd0615b4fa5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B7%B1%E4%BA%95"
        ]
      },
      {
        id: "344",
        type: "fix",
        title: "哥斯拉",
        deltime: "0",
        posttime: "1466576183",
        edittime: "1514972989",
        sttime: "1466489700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8c1efb3ea375ace31fea587fe3923a3a5bda519.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%93%A5%E6%96%AF%E6%8B%89"
        ]
      },
      {
        id: "343",
        type: "fix",
        title: "钢尺",
        deltime: "0",
        posttime: "1466576118",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/da230a0c77bb733c0eca05128fbcc9fbbd31da5e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E5%B0%BA"
        ]
      },
      {
        id: "342",
        type: "fix",
        title: "安卓",
        deltime: "0",
        posttime: "1466576071",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d4b85822c353180cacc48fa74c66f0e45a6de64b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%89%E5%8D%93"
        ]
      },
      {
        id: "341",
        type: "fix",
        title: "寂静岭",
        deltime: "0",
        posttime: "1466575784",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e3cc37fb4c3af904707c475f85ccbb71dadcd63d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AF%82%E9%9D%99%E5%B2%AD"
        ]
      },
      {
        id: "340",
        type: "fix",
        title: "为美好的世界献上祝福",
        deltime: "0",
        posttime: "1466575756",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c9100d99d79513b5e53cb4f662d9faba35cfa35e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%BA%E7%BE%8E%E5%A5%BD%E7%9A%84%E4%B8%96%E7%95%8C%E7%8C%AE%E4%B8%8A%E7%A5%9D%E7%A6%8F"
        ]
      },
      {
        id: "339",
        type: "fix",
        title: "感冒",
        deltime: "0",
        posttime: "1466575725",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d982254ba12cced5ccc2748be4f88b180de57ed4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%84%9F%E5%86%92"
        ]
      },
      {
        id: "338",
        type: "fix",
        title: "+TIC模型姐妹",
        deltime: "0",
        posttime: "1466575676",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/834af809ee5320f163b8749d0b1aa8a20d9f8c77.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%2BTIC%E6%A8%A1%E5%9E%8B%E5%A7%90%E5%A6%B9"
        ]
      },
      {
        id: "337",
        type: "fix",
        title: "水手服",
        deltime: "0",
        posttime: "1466061735",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9ce05f48371b6dc96407e28be37e32708f60d459.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%89%8B%E6%9C%8D"
        ]
      },
      {
        id: "336",
        type: "fix",
        title: "冷漠",
        deltime: "0",
        posttime: "1466061700",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/71de35c6564f25d58938168f3bb4ab7826ba0132.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%BC%A0"
        ]
      },
      {
        id: "335",
        type: "fix",
        title: "白鲸",
        deltime: "0",
        posttime: "1466061671",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/af13be6ad0de33d529bf103a33cd8877c73355ab.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BD%E9%B2%B8"
        ]
      },
      {
        id: "334",
        type: "fix",
        title: "山羊",
        deltime: "0",
        posttime: "1466061610",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bf2c253c8bd197bd89d5db437a45d0a5c3af68fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%B1%E7%BE%8A"
        ]
      },
      {
        id: "333",
        type: "fix",
        title: "颜文字",
        deltime: "0",
        posttime: "1466061587",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/991d3db75385f8776dc99f1d8895f2f27c8be73d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A2%9C%E6%96%87%E5%AD%97"
        ]
      },
      {
        id: "332",
        type: "fix",
        title: "熊孩子",
        deltime: "0",
        posttime: "1466061214",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9291a76a24ad1d3d08f13bdd5907f32849998086.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E5%AD%A9%E5%AD%90"
        ]
      },
      {
        id: "331",
        type: "fix",
        title: "喷子",
        deltime: "0",
        posttime: "1466061177",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7a2fbe229152dc83c16462315859a01bfd4aaa6f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%AD%90"
        ]
      },
      {
        id: "330",
        type: "fix",
        title: "偶像大师",
        deltime: "0",
        posttime: "1466061132",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bf773b95a978ff73b5db868289b7616315164610.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E5%A4%A7%E5%B8%88"
        ]
      },
      {
        id: "329",
        type: "fix",
        title: "逗猫",
        deltime: "0",
        posttime: "1466061053",
        edittime: "1514972989",
        sttime: "1465974000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/aaa355983dfbfb1d364f714a4b69fc183e63a4b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%97%E7%8C%AB"
        ]
      },
      {
        id: "328",
        type: "fix",
        title: "大触",
        deltime: "0",
        posttime: "1466060998",
        edittime: "1514972989",
        sttime: "1465974000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9a10590b6150035a483ff19eafe05c6c52527090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%A7%A6"
        ]
      },
      {
        id: "327",
        type: "fix",
        title: "转笔",
        deltime: "0",
        posttime: "1465872936",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1db11d383faffdb0cf7433b191d7f839501f52fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BD%AC%E7%AC%94"
        ]
      },
      {
        id: "326",
        type: "fix",
        title: "魔都",
        deltime: "0",
        posttime: "1465872784",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a250fb1f97c3eea90d320dd5c317981af32234e5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%83%BD"
        ]
      },
      {
        id: "325",
        type: "fix",
        title: "健身",
        deltime: "0",
        posttime: "1465872708",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f193e2f150d934bb04eee24c82fc15c4edadf962.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%A5%E8%BA%AB"
        ]
      },
      {
        id: "324",
        type: "fix",
        title: "加特林机枪",
        deltime: "0",
        posttime: "1465872621",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2206307dfec95850ed1028b9f745d930fc405d2e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A0%E7%89%B9%E6%9E%97%E6%9C%BA%E6%9E%AA"
        ]
      },
      {
        id: "323",
        type: "fix",
        title: "钓鱼",
        deltime: "0",
        posttime: "1465872536",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f5e72650c6fdb3cea149182f0cd684c695142f40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%93%E9%B1%BC"
        ]
      },
      {
        id: "322",
        type: "fix",
        title: "百合星人奈绪子",
        deltime: "0",
        posttime: "1465872472",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/654fd04a465517b7b7e807e826d3a703dc406e67.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BE%E5%90%88%E6%98%9F%E4%BA%BA%E5%A5%88%E7%BB%AA%E5%AD%90"
        ]
      },
      {
        id: "321",
        type: "fix",
        title: "魔兽",
        deltime: "0",
        posttime: "1465871571",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171225/12lrwvyml3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%85%BD"
        ]
      },
      {
        id: "320",
        type: "fix",
        title: "大胃王",
        deltime: "0",
        posttime: "1465871530",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e996fa618d5866c3113b2cff7ee2dbb5c36ef676.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%83%83%E7%8E%8B"
        ]
      },
      {
        id: "319",
        type: "fix",
        title: "闪灵",
        deltime: "0",
        posttime: "1465871476",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c3d5bbfa106d3638fe665ef0e6de7f8b7e7ed639.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%97%AA%E7%81%B5"
        ]
      },
      {
        id: "318",
        type: "fix",
        title: "音乐",
        deltime: "0",
        posttime: "1465354482",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/af086c9c319e0a3854a58481955a85b5ee2349e0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%8C%E5%8D%95"
        ]
      },
      {
        id: "317",
        type: "fix",
        title: "魔道祖师",
        deltime: "0",
        posttime: "1465353809",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d7ba9c4bd660ec09ac68e78d5ac47c1d10257d7b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%81%93%E7%A5%96%E5%B8%88"
        ]
      },
      {
        id: "316",
        type: "fix",
        title: "屏裂",
        deltime: "0",
        posttime: "1465353579",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c94d160e8b148beb23390c84315a43dae76aaca7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A2%8E%E5%B1%8F"
        ]
      },
      {
        id: "315",
        type: "fix",
        title: "篮球",
        deltime: "0",
        posttime: "1465353466",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c286192f9442d3d839e10a8f5b3553665a3a92ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AF%AE%E7%90%83"
        ]
      },
      {
        id: "314",
        type: "fix",
        title: "恐怖小游戏",
        deltime: "0",
        posttime: "1465352576",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7f93d986bd48546a0e8ff003e0ab38da5cb4c076.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E5%B0%8F%E6%B8%B8%E6%88%8F"
        ]
      },
      {
        id: "313",
        type: "fix",
        title: "周婕纶",
        deltime: "0",
        posttime: "1465297354",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2d1dff9727be8024cf3dc54cf80a5df361898eef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%A8%E5%A9%95%E7%BA%B6"
        ]
      },
      {
        id: "312",
        type: "fix",
        title: "咸鱼",
        deltime: "0",
        posttime: "1465297316",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cdad9db97f2a11254e863e414b0688d2e43e3a81.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%92%B8%E9%B1%BC"
        ]
      },
      {
        id: "311",
        type: "fix",
        title: "心碎",
        deltime: "0",
        posttime: "1465297031",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/767e6adc432a73304aa99e3b88f62eaed2a057c7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%A2%8E%E5%90%91"
        ]
      },
      {
        id: "310",
        type: "fix",
        title: "超超超级向东方",
        deltime: "0",
        posttime: "1465295570",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0b512fe16c950ead33ece5c08d1d80b9dc829b51.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B6%85%E7%BA%A7%E5%90%91%20%E4%B8%9C%E6%96%B9"
        ]
      },
      {
        id: "309",
        type: "fix",
        title: "猜拳",
        deltime: "0",
        posttime: "1465295413",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/24d7cedb35c52774c526599c9029ce8fbea131b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%9C%E6%8B%B3"
        ]
      },
      {
        id: "308",
        type: "fix",
        title: "kiss",
        deltime: "0",
        posttime: "1465295267",
        edittime: "1514972989",
        sttime: "1465208760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/63897ed3bd90478a8d6941ac1590c1a1422c620d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A5%E5%90%BB"
        ]
      },
      {
        id: "307",
        type: "fix",
        title: "萌宠",
        deltime: "0",
        posttime: "1464946701",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1f7bc4b638ac9332c9b01ae465b35a6f51621975.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%90%8C%E5%AE%A0"
        ]
      },
      {
        id: "306",
        type: "fix",
        title: "偶像梦幻祭",
        deltime: "0",
        posttime: "1464946644",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8983956a37861ec102e6a0ccd4b0219a9bfa4b29.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E6%A2%A6%E5%B9%BB%E7%A5%AD"
        ]
      },
      {
        id: "305",
        type: "fix",
        title: "竜が我が敌を喰ら",
        deltime: "0",
        posttime: "1464946448",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/768916ac9138876d2a34ea33d191aa5321761f3d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%88%E6%9C%9B%E5%B1%81%E8%82%A1"
        ]
      },
      {
        id: "304",
        type: "fix",
        title: "吃豆人",
        deltime: "0",
        posttime: "1464946323",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/28f64df4485c43de82fc28cd6d93b986a25fe2c7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B1%86%E4%BA%BA"
        ]
      },
      {
        id: "303",
        type: "fix",
        title: "flag",
        deltime: "0",
        posttime: "1464946175",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9438bee77d1c2fa47867e628c897186b12ae5203.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=flag"
        ]
      },
      {
        id: "302",
        type: "fix",
        title: "章鱼",
        deltime: "0",
        posttime: "1464946111",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d35ea551f2c118408eca334470db2736f0c1b652.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC"
        ]
      },
      {
        id: "301",
        type: "fix",
        title: "死鱼眼",
        deltime: "0",
        posttime: "1464945996",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f0ce0992147ccc56eb7989912c231f1bd2c011dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC"
        ]
      },
      {
        id: "300",
        type: "fix",
        title: "催眠",
        deltime: "0",
        posttime: "1464945913",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3a6a868585732892d351dfd693bd87ded43ca926.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%82%AC%E7%9C%A0"
        ]
      },
      {
        id: "299",
        type: "fix",
        title: "超级玛丽",
        deltime: "0",
        posttime: "1464945790",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1ef12713e53b5f596bb77bbb15067053929d8f91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E7%89%88%E8%B6%85%E7%BA%A7%E7%8E%9B%E4%B8%BD"
        ]
      },
      {
        id: "298",
        type: "fix",
        title: "心疼",
        deltime: "0",
        posttime: "1464945714",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7697009ae0bf89a87524d421cea14f136b55c2cb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%96%BC%E5%90%8E%E9%9D%A2%E7%9A%84"
        ]
      },
      {
        id: "297",
        type: "fix",
        title: "团子大家族",
        deltime: "0",
        posttime: "1464945562",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/200f385add8a0e2bb156a5f5b3fbf6ce80fe2318.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%A2%E5%AD%90%E5%A4%A7%E5%AE%B6%E6%97%8F"
        ]
      },
      {
        id: "296",
        type: "fix",
        title: "泡面",
        deltime: "0",
        posttime: "1464945505",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e2fdf69637b36c08ed8a32c708e9e90ebe66b07f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2"
        ]
      },
      {
        id: "295",
        type: "fix",
        title: "捏脸",
        deltime: "0",
        posttime: "1464945320",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c9d7a539066b4e381a109fa27ae10df834b81b98.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8D%8F%E8%84%B8"
        ]
      },
      {
        id: "294",
        type: "fix",
        title: "跳绳",
        deltime: "0",
        posttime: "1464945070",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d4af4847fae945a85078da4e7649d6a29f541341.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3"
        ]
      },
      {
        id: "293",
        type: "fix",
        title: "美甲",
        deltime: "0",
        posttime: "1464944847",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/919ea3440629a4f30b753599ad3ee5a1da90311f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%94%B2"
        ]
      },
      {
        id: "292",
        type: "fix",
        title: "翻唱",
        deltime: "0",
        posttime: "1464944803",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6216b20956cd6708cbbeae567cd65c6becdb3639.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%94%B1"
        ]
      },
      {
        id: "291",
        type: "fix",
        title: "俄罗斯方块",
        deltime: "0",
        posttime: "1464944749",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/350de52c8fd2a8662843c5074a3da3b4c83a1d5d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97"
        ]
      },
      {
        id: "290",
        type: "fix",
        title: "Re:从零开始的异世界生活",
        deltime: "0",
        posttime: "1464944624",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/0ef68bb0159d8b2fc9be0008b0dbb92bd13fb6e8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=Re%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84%E5%BC%82%E4%B8%96%E7%95%8C%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "289",
        type: "fix",
        title: "流星",
        deltime: "0",
        posttime: "1464944481",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cd544efe76e05a915bfe559c6ab45921988539fa.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%B5%81%E6%98%9F"
        ]
      },
      {
        id: "288",
        type: "fix",
        title: "火锅",
        deltime: "0",
        posttime: "1464944293",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/34c1c43476ed00ada44a2bc9797d5bb64e49ebaf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%81%AB%E9%94%85"
        ]
      },
      {
        id: "287",
        type: "fix",
        title: "charlotte",
        deltime: "0",
        posttime: "1464944170",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4c9db699a9b6316a1293cfa93469a7c5c83ceb73.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=charlotte"
        ]
      },
      {
        id: "286",
        type: "fix",
        title: "学习",
        deltime: "0",
        posttime: "1464944075",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/28285c794aad429fad8f316a96317f38e0f9e2b8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A6%E4%B9%A0"
        ]
      },
      {
        id: "285",
        type: "fix",
        title: "蛋疼",
        deltime: "0",
        posttime: "1464606062",
        edittime: "1514972989",
        sttime: "1464519000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02f727c78831f4b86449726e4c42f272ee54d1ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9B%8B%E7%96%BC"
        ]
      },
      {
        id: "284",
        type: "fix",
        title: "冰淇淋",
        deltime: "0",
        posttime: "1464606018",
        edittime: "1514972989",
        sttime: "1464519000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/83fceea64c232b5db3ec4d5a115b9b4568a9ed35.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%B7%87%E6%B7%8B"
        ]
      },
      {
        id: "283",
        type: "fix",
        title: "射命丸文",
        deltime: "0",
        posttime: "1464577522",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c84cee2d2aa0e12aa2f47cd75a1fe64b3b29beee.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%84%E5%91%BD%E4%B8%B8%E6%96%87"
        ]
      },
      {
        id: "282",
        type: "fix",
        title: "强化失败",
        deltime: "0",
        posttime: "1464577486",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/34124005a69d8340d1cc28e91c98899b4de8d696.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%BA%E5%8C%96%E5%A4%B1%E8%B4%A5"
        ]
      },
      {
        id: "281",
        type: "fix",
        title: "跑酷",
        deltime: "0",
        posttime: "1464577457",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0105560c89d1453d3f9653e92450e0d7a9738415.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%91%E9%85%B7"
        ]
      },
      {
        id: "280",
        type: "fix",
        title: "化学实验",
        deltime: "0",
        posttime: "1464577427",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e2746af03baed90daf0c1dbdb096ea76643a76ef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%AD%A6%E5%AE%9E%E9%AA%8C"
        ]
      },
      {
        id: "279",
        type: "fix",
        title: "爆笑星际2",
        deltime: "0",
        posttime: "1464577373",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d2f969750728b47ee83bd8a37687a582652b060d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%852"
        ]
      },
      {
        id: "278",
        type: "fix",
        title: "giligili eye",
        deltime: "0",
        posttime: "1464577325",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/709b9c0e30c09cb9d7db5e4f5f6272fd7cc754dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=GILIGILI"
        ]
      },
      {
        id: "277",
        type: "fix",
        title: "尼克杨",
        deltime: "0",
        posttime: "1464258086",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ee4414ee0dd32419bd6231c758de385d9b9035da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%BC%E5%85%8B%E6%9D%A8"
        ]
      },
      {
        id: "276",
        type: "fix",
        title: "喵星人",
        deltime: "0",
        posttime: "1464257778",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e2982eb27e2485745b01e8e6f956ef84b905682a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA"
        ]
      },
      {
        id: "275",
        type: "fix",
        title: "星际牛仔",
        deltime: "0",
        posttime: "1464257743",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d74f8216006f61d194bb7a7ebff9ff8531253f21.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E7%89%9B%E4%BB%94"
        ]
      },
      {
        id: "274",
        type: "fix",
        title: "求领养",
        deltime: "0",
        posttime: "1464257664",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/841a509087d7450bc8a2b4034bff75251ee51d6b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B1%82%E9%A2%86%E5%85%BB"
        ]
      },
      {
        id: "273",
        type: "fix",
        title: "飞镖",
        deltime: "0",
        posttime: "1464257485",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/094429f049a7c0a51ca2479ef5a6d9bf4f1c12d8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E9%95%96"
        ]
      },
      {
        id: "272",
        type: "fix",
        title: "吹泡泡",
        deltime: "0",
        posttime: "1464257245",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c24155b73ddad15f5243e7c58868762e0b8d437f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%B9%E6%B3%A1%E6%B3%A1"
        ]
      },
      {
        id: "271",
        type: "fix",
        title: "煎蛋",
        deltime: "0",
        posttime: "1464257186",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dc18e9cf8670d7f1dea88266ea3365f663c61747.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%85%8E%E8%9B%8B"
        ]
      },
      {
        id: "270",
        type: "fix",
        title: "啊啊啊",
        deltime: "0",
        posttime: "1464256962",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ad94fa918f4b2dd593876aebc0029b83997b5240.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%95%8A%E5%95%8A%E5%95%8A"
        ]
      },
      {
        id: "269",
        type: "fix",
        title: "心情不好就来看",
        deltime: "0",
        posttime: "1464256907",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/26371aa33464a0c78cfb39d23f13082ace656e08.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E6%83%85%E4%B8%8D%E5%A5%BD%E5%B0%B1%E6%9D%A5%E7%9C%8B"
        ]
      },
      {
        id: "268",
        type: "fix",
        title: "天线宝宝",
        deltime: "0",
        posttime: "1464256746",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/579dd8982a44aa44f4f12d40f46b1fcdf792f08b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "267",
        type: "fix",
        title: "睡前",
        deltime: "0",
        posttime: "1464256703",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/27065f35333b72d10746be9fbd453f8ade4322f5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9D%A1%E5%89%8D%E9%9F%B3%E9%A2%91"
        ]
      },
      {
        id: "266",
        type: "fix",
        title: "恐怖片",
        deltime: "0",
        posttime: "1464256618",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa3d11e277d2c0801544350f028014ef854ab0fb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E7%89%87"
        ]
      },
      {
        id: "265",
        type: "fix",
        title: "飞檐走壁",
        deltime: "0",
        posttime: "1464256570",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9d5e2a336889ae47d4b53a8d4e74a1b6893912d0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E6%AA%90%E8%B5%B0%E5%A3%81"
        ]
      },
      {
        id: "264",
        type: "fix",
        title: "戳戳乐",
        deltime: "0",
        posttime: "1464256500",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b9a75fc9ae4da2cb214b807886294f72974a8d7c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%B3%E6%88%B3%E4%B9%90"
        ]
      },
      {
        id: "263",
        type: "fix",
        title: "腿初音",
        deltime: "0",
        posttime: "1464256113",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3c1f7c747d4742a736a72e2067197a4898235298.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%9D%E9%9F%B3"
        ]
      },
      {
        id: "262",
        type: "fix",
        title: "太鼓达人",
        deltime: "0",
        posttime: "1464256014",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bface0707e4e4e162a0a6457e6279ed36a5d7408.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "261",
        type: "fix",
        title: "如龙",
        deltime: "0",
        posttime: "1464255937",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ed8c5d2fc88a271e65accee74bf3b158f7784a8d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A6%82%E9%BE%99"
        ]
      },
      {
        id: "260",
        type: "fix",
        title: "VR",
        deltime: "0",
        posttime: "1464255874",
        edittime: "1514972989",
        sttime: "1464169380",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fbaa9b7272273daf28c0f69a267a03836a9b5518.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=vr"
        ]
      },
      {
        id: "259",
        type: "fix",
        title: "熊猫",
        deltime: "0",
        posttime: "1464255754",
        edittime: "1514972989",
        sttime: "1464169320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0073b2221e5e9e6275d6ef1757c1b68360747d4b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E7%8C%AB"
        ]
      },
      {
        id: "258",
        type: "fix",
        title: "上天",
        deltime: "0",
        posttime: "1464255686",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f29f2c68bdad91830eb1553b282dbd07e6a9968a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BD%A0%E5%92%8B%E4%B8%8D%E4%B8%8A%E5%A4%A9"
        ]
      },
      {
        id: "257",
        type: "fix",
        title: "节奏天国",
        deltime: "0",
        posttime: "1464255602",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/599e33b04a0c34af8693d55487f041c7f1d0a5d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8A%82%E5%A5%8F%E5%A4%A9%E5%9B%BD"
        ]
      },
      {
        id: "256",
        type: "fix",
        title: "海盗",
        deltime: "0",
        posttime: "1464255567",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a55172db4b0bbae56cad0a173f0c98ec105b50c4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%9B%97"
        ]
      },
      {
        id: "255",
        type: "fix",
        title: "打瞌睡",
        deltime: "0",
        posttime: "1464255511",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/54076d6e1fab7ff53217ba70bc0698bc4ab20645.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E7%9E%8C%E7%9D%A1"
        ]
      },
      {
        id: "254",
        type: "fix",
        title: "splatoon",
        deltime: "0",
        posttime: "1463739463",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/3b26654188286a014174aa21a8a596230c4f8f48.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=splatoon"
        ]
      },
      {
        id: "253",
        type: "fix",
        title: "逆转裁判",
        deltime: "0",
        posttime: "1463739253",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1a49fccbf8a91984bcfab853a0989e23198c1050.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4"
        ]
      },
      {
        id: "252",
        type: "fix",
        title: "美树沙耶香",
        deltime: "0",
        posttime: "1463739216",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/73193956be362bc6774ead4b632a66aaf4df8706.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E6%A0%91%E6%B2%99%E8%80%B6%E9%A6%99"
        ]
      },
      {
        id: "251",
        type: "fix",
        title: "不明生物",
        deltime: "0",
        posttime: "1463739175",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0ee68c48ee79baba7c4dba931f2f8e3befb8beb8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%94%9F%E7%89%A9"
        ]
      },
      {
        id: "250",
        type: "fix",
        title: "友谊的小船",
        deltime: "0",
        posttime: "1462765088",
        edittime: "1514972989",
        sttime: "1462678320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c804c57efc396fccb2c0efb724c33fcfa2d9a1ff.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/1187.html"
        ]
      },
      {
        id: "249",
        type: "fix",
        title: "弹丸论破",
        deltime: "0",
        posttime: "1462763334",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c15930b15f1b2ce887ec9eb2f40200ade5aeb097.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%B9%E4%B8%B8%E8%AE%BA%E7%A0%B4"
        ]
      },
      {
        id: "248",
        type: "fix",
        title: "红壳的潘多拉",
        deltime: "0",
        posttime: "1462763060",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4b333905442e73b70f12d052aab200156b70545c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%A2%E5%A3%B3%E7%9A%84%E6%BD%98%E5%A4%9A%E6%8B%89"
        ]
      },
      {
        id: "247",
        type: "fix",
        title: "圣杯",
        deltime: "0",
        posttime: "1462762932",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9b18bed7ff8538b638871f1c8d00615cb6591647.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/special?keyword=%E5%9C%A3%E6%9D%AF"
        ]
      },
      {
        id: "246",
        type: "fix",
        title: "渚薰",
        deltime: "0",
        posttime: "1462762675",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6cd504c2a785bf4dbe74dc273572b7f306345af3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B8%9A%E8%96%B0"
        ]
      },
      {
        id: "245",
        type: "fix",
        title: "魔术",
        deltime: "0",
        posttime: "1461921980",
        edittime: "1514972989",
        sttime: "1461835140",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b3442eb7da2178659c10f9480e15302ccea3fbc7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%9C%AF"
        ]
      },
      {
        id: "244",
        type: "fix",
        title: "osu",
        deltime: "0",
        posttime: "1461921807",
        edittime: "1514972989",
        sttime: "1461835140",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cf49ee78de8a2ab45e6321d33e39befc6ef05671.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=osu"
        ]
      },
      {
        id: "243",
        type: "fix",
        title: "we bare bears",
        deltime: "0",
        posttime: "1461744470",
        edittime: "1514972989",
        sttime: "1461657780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d9556a43143958c283a875521e6c6dacf2de1572.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=we+bare+bears"
        ]
      },
      {
        id: "242",
        type: "fix",
        title: "魔卡少女樱",
        deltime: "0",
        posttime: "1461744398",
        edittime: "1514972989",
        sttime: "1461657780",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/420dcfa24100127d70988d624f5558b9afdcb5ef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%8D%A1%E5%B0%91%E5%A5%B3%E6%A8%B1"
        ]
      },
      {
        id: "241",
        type: "fix",
        title: "神秘博士",
        deltime: "0",
        posttime: "1460716877",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6514ee9176f6c82be020ee3fc89e899696471496.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A5%9E%E7%A7%98%E5%8D%9A%E5%A3%AB"
        ]
      },
      {
        id: "240",
        type: "fix",
        title: "AB向",
        deltime: "0",
        posttime: "1460716835",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/332d998873898fd5fd3ffbb43a06ed0c0bf516af.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=AB%E5%90%91"
        ]
      },
      {
        id: "239",
        type: "fix",
        title: "宇宙巡警露露子",
        deltime: "0",
        posttime: "1460716786",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f7a1964da37c6fba9e5170dd0521207832c20147.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/3459"
        ]
      },
      {
        id: "238",
        type: "fix",
        title: "纸飞机",
        deltime: "0",
        posttime: "1460716688",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/829412d4a6d76b8facf0011ba16c6b0a9bfb9f66.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%B8%E9%A3%9E%E6%9C%BA"
        ]
      },
      {
        id: "237",
        type: "fix",
        title: "二五仔",
        deltime: "0",
        posttime: "1460716558",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cd0f0c7b69724515b30c87cd6d56129193a5395b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E4%BA%94%E4%BB%94"
        ]
      },
      {
        id: "236",
        type: "fix",
        title: "树懒体",
        deltime: "0",
        posttime: "1460716447",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ab2e8dd8d85681abed37021dfc980b3a7139e020.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%A0%91%E6%87%92"
        ]
      },
      {
        id: "235",
        type: "fix",
        title: "在下坂本,有何贵干?",
        deltime: "0",
        posttime: "1460716288",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9b625a77be6058aac7f952298da0078a0780cd09.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/3450"
        ]
      },
      {
        id: "234",
        type: "fix",
        title: "模拟山羊",
        deltime: "0",
        posttime: "1459910512",
        edittime: "1514972989",
        sttime: "1459824060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1786ce76f5de2f72c588cd2870fdb322b571d642.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%A8%A1%E6%8B%9F%E5%B1%B1%E7%BE%8A"
        ]
      },
      {
        id: "233",
        type: "fix",
        title: "海尔兄弟",
        deltime: "0",
        posttime: "1459827791",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/de4e29696526036d976d7a744cce1581abe6fe20.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E5%B0%94%E5%85%84%E5%BC%9F"
        ]
      },
      {
        id: "232",
        type: "fix",
        title: "怪诞小镇",
        deltime: "0",
        posttime: "1459827754",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43618895efc752ea83fec4a37340fff2f0b50c1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%80%AA%E8%AF%9E%E5%B0%8F%E9%95%87"
        ]
      },
      {
        id: "231",
        type: "fix",
        title: "黑岩",
        deltime: "0",
        posttime: "1459827691",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9"
        ]
      },
      {
        id: "229",
        type: "fix",
        title: "BML",
        deltime: "0",
        posttime: "1458702744",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/493547116600c4f477c304dca1d96b7c22027baf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=BML"
        ]
      },
      {
        id: "228",
        type: "fix",
        title: "兔子",
        deltime: "0",
        posttime: "1458702712",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c6011421730d0b27dad0c1b2d68b6cf00712541d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%94%E5%AD%90"
        ]
      },
      {
        id: "227",
        type: "fix",
        title: "传送门",
        deltime: "0",
        posttime: "1458702645",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7432141f6e7b6f7e03a45aef17942b6cb2b0bca0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BC%A0%E9%80%81%E9%97%A8"
        ]
      },
      {
        id: "226",
        type: "fix",
        title: "窥视",
        deltime: "0",
        posttime: "1458702479",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8e2962c5761b433ce51ffcef0e5539f0a31349b1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AA%A5%E8%A7%86"
        ]
      },
      {
        id: "225",
        type: "fix",
        title: "苦力怕",
        deltime: "0",
        posttime: "1458702321",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa0b6ebef226b701e7dd466bdc428f78ab0d2197.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/v2/1114.html"
        ]
      },
      {
        id: "224",
        type: "fix",
        title: "黑岩",
        deltime: "0",
        posttime: "1458701952",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9"
        ]
      },
      {
        id: "223",
        type: "fix",
        title: "奥巴马",
        deltime: "0",
        posttime: "1457943992",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e26aaa49d380ce97be796c8af4c8e471a32590c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E5%B7%B4%E9%A9%AC&order=totalrank"
        ]
      },
      {
        id: "222",
        type: "fix",
        title: "周星驰",
        deltime: "0",
        posttime: "1457943874",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f7d5195f03242d20999db95974ca7059f731a460.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%A8%E6%98%9F%E9%A9%B0"
        ]
      },
      {
        id: "221",
        type: "fix",
        title: "健身",
        deltime: "0",
        posttime: "1457943619",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/30c8f6802cd1f797f44ab70338abd87efbe2a0bb.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/v2/1051.html"
        ]
      },
      {
        id: "220",
        type: "fix",
        title: "CS",
        deltime: "0",
        posttime: "1457943569",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f588372f96774ca80fd2f431f2d6577dd603cb1a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=CS&order=totalrank"
        ]
      },
      {
        id: "219",
        type: "fix",
        title: "害怕",
        deltime: "0",
        posttime: "1457943496",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/303261c1ebdf9bdea245d58e903f91294cfdd29d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%B3%E6%80%95&page=1&order=totalrank"
        ]
      },
      {
        id: "218",
        type: "fix",
        title: "I wanna be the guy",
        deltime: "0",
        posttime: "1457943443",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=I%20wanna%20be%20the%20guy"
        ]
      },
      {
        id: "217",
        type: "fix",
        title: "探险活宝",
        deltime: "0",
        posttime: "1457943406",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D"
        ]
      },
      {
        id: "216",
        type: "fix",
        title: "are you ok",
        deltime: "0",
        posttime: "1457341630",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/18abe91eb6fbd5b3a0839e8f1e08846927b9b5c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=are%20you%20ok"
        ]
      },
      {
        id: "215",
        type: "fix",
        title: "大小姐的抱头蹲防",
        deltime: "0",
        posttime: "1457341591",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/093228a2c9ae9fef31aed700e10c3b0bcdd009ce.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%B1%E5%A4%B4%E8%B9%B2%E9%98%B2&page=1&order=totalrank"
        ]
      },
      {
        id: "214",
        type: "fix",
        title: "博丽灵梦",
        deltime: "0",
        posttime: "1457341521",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/853f89cf41370a84760ad66dd6cde792714bf8c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E6%A2%A6"
        ]
      },
      {
        id: "213",
        type: "fix",
        title: "岚少",
        deltime: "0",
        posttime: "1457341465",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d85eba9bf089148a383d064029d27e03ff1da904.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B2%9A%E5%B0%91"
        ]
      },
      {
        id: "212",
        type: "fix",
        title: "以撒的结合",
        deltime: "0",
        posttime: "1457341432",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f5f1a66d3d9ae02888ed0d93c784dab6c2163a6e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%A5%E6%92%92%E7%9A%84%E7%BB%93%E5%90%88"
        ]
      },
      {
        id: "211",
        type: "fix",
        title: "博人传",
        deltime: "0",
        posttime: "1457341396",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/10b94847bd22b85bd4a0b1754943df929013e152.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%BA%BA%E4%BC%A0"
        ]
      },
      {
        id: "210",
        type: "fix",
        title: "探险活宝",
        deltime: "0",
        posttime: "1457341255",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D"
        ]
      },
      {
        id: "209",
        type: "fix",
        title: "I wanna be the guy",
        deltime: "0",
        posttime: "1457341229",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=I+wanna+be+the+guy"
        ]
      },
      {
        id: "208",
        type: "fix",
        title: "境界线上的地平线",
        deltime: "0",
        posttime: "1456801855",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/36adbba91f02013751cf2de5c25cb5b5398f9caf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A2%83%E7%95%8C%E7%BA%BF%E4%B8%8A%E7%9A%84%E5%9C%B0%E5%B9%B3%E7%BA%BF&order=totalrank&tids_1=1"
        ]
      },
      {
        id: "207",
        type: "fix",
        title: "好男人",
        deltime: "0",
        posttime: "1456801799",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/16d00edf97d1e7abbabf03ca5b274b208467925c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%BD%E7%94%B7%E4%BA%BA&page=1&order=totalrank&tids_1=1"
        ]
      },
      {
        id: "206",
        type: "fix",
        title: "奥斯卡",
        deltime: "0",
        posttime: "1456801679",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5743a5b3c968e007670c5c510832260966a0df1d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E6%96%AF%E5%8D%A1%E9%A2%81%E5%A5%96%E5%85%B8%E7%A4%BC"
        ]
      },
      {
        id: "205",
        type: "fix",
        title: "⑨的算术教室",
        deltime: "0",
        posttime: "1456733008",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/0fe340454d22120c7c1bf172ae159649f55f34f2.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/105.html"
        ]
      },
      {
        id: "204",
        type: "fix",
        title: "美食侦探",
        deltime: "0",
        posttime: "1456732963",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f6f4ab7d071771ce7aad2b7f19c02505ad658cae.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E9%A3%9F%E4%BE%A6%E6%8E%A2%E7%8E%8B&order=dm"
        ]
      },
      {
        id: "203",
        type: "fix",
        title: "猫和老鼠",
        deltime: "0",
        posttime: "1456732889",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b9e247e9da1a6506fd2a0367826b8059487516c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0"
        ]
      },
      {
        id: "202",
        type: "fix",
        title: "合唱",
        deltime: "0",
        posttime: "1454493583",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e689fad96b281cfd9e528e056ff88b359d7d612e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E5%90%88%E5%94%B1%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"
        ]
      },
      {
        id: "201",
        type: "fix",
        title: "喵帕斯",
        deltime: "0",
        posttime: "1454493533",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e9914ddf0778db2b8fb7559fb0b3bffefdc29458.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E5%B8%95%E6%96%AF"
        ]
      },
      {
        id: "200",
        type: "fix",
        title: "黄金",
        deltime: "0",
        posttime: "1454493431",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f81233c5ffec793da045018275960ce06cf73bcd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%84%E9%87%91"
        ]
      },
      {
        id: "198",
        type: "fix",
        title: "麻婆",
        deltime: "0",
        posttime: "1454383916",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cc8314adf3fbe35da156fbdb37635ae7b71aab7e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BA%BB%E5%A9%86"
        ]
      },
      {
        id: "197",
        type: "fix",
        title: "炸弹人",
        deltime: "0",
        posttime: "1454383883",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c37c51ee73d79f11d7eaa866f77a5283cdacf46c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%B8%E5%BC%B9%E4%BA%BA"
        ]
      },
      {
        id: "196",
        type: "fix",
        title: "数码宝贝",
        deltime: "0",
        posttime: "1454383854",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/23e02817ea3490d6c07290ced306604930802b89.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%B0%E7%A0%81%E5%AE%9D%E8%B4%9D"
        ]
      },
      {
        id: "195",
        type: "fix",
        title: "妈妈再爱我一次",
        deltime: "0",
        posttime: "1454383723",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/29213eb9c09f4aa0f199201b03dfd7d6cd5feed9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A6%88%E5%A6%88%E5%86%8D%E7%88%B1%E6%88%91%E4%B8%80%E6%AC%A1"
        ]
      },
      {
        id: "194",
        type: "fix",
        title: "物语系列",
        deltime: "0",
        posttime: "1454383687",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cbced60a25b84c6479fb50495d31fd95548f3fda.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%89%A9%E8%AF%AD%E7%B3%BB%E5%88%97"
        ]
      },
      {
        id: "193",
        type: "fix",
        title: "刀剑乱舞",
        deltime: "0",
        posttime: "1454383236",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d0bf43b038a37aa9816c37564b0d5b6ea60c2f01.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%80%E5%89%91%E4%B9%B1%E8%88%9E"
        ]
      },
      {
        id: "192",
        type: "fix",
        title: "房东妹子青春期",
        deltime: "0",
        posttime: "1454382543",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/72339f279293726390a3d9899940f7943b79b0cb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%BF%E4%B8%9C%E5%A6%B9%E5%AD%90%E9%9D%92%E6%98%A5%E6%9C%9F"
        ]
      },
      {
        id: "191",
        type: "fix",
        title: "美妆达人",
        deltime: "0",
        posttime: "1454382506",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0127380410d03506ccaa21d619dc4d0ad8bceb1f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%A6%86%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "190",
        type: "fix",
        title: "星之卡比",
        deltime: "0",
        posttime: "1454382461",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2f70e9f34de3ba482d662a519860b84b4fb70159.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E4%B9%8B%E5%8D%A1%E6%AF%94"
        ]
      },
      {
        id: "189",
        type: "fix",
        title: "美少女战士",
        deltime: "0",
        posttime: "1454382419",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ead25b16118b097a4bd7831cb9b89f7ce4da019e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%B0%91%E5%A5%B3%E6%88%98%E5%A3%AB"
        ]
      },
      {
        id: "188",
        type: "fix",
        title: "天线宝宝",
        deltime: "0",
        posttime: "1454382338",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12ab85217a881fb270017557451ba5cad98a813c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "187",
        type: "fix",
        title: "逆转裁判",
        deltime: "0",
        posttime: "1454382260",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/57e26d38490a0c88694768bfd28b860c40509603.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4"
        ]
      },
      {
        id: "186",
        type: "fix",
        title: "春节饺子",
        deltime: "0",
        posttime: "1454382229",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e8cd8b17530264fb50848035aceec3d71a2d280b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%A5%E8%8A%82%E9%A5%BA%E5%AD%90&page=1&order=click"
        ]
      },
      {
        id: "185",
        type: "fix",
        title: "二胡",
        deltime: "0",
        posttime: "1454382141",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2e465503cf4f912b30f21e7f9a6e5174a3f22712.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E8%83%A1"
        ]
      },
      {
        id: "184",
        type: "fix",
        title: "仓鼠",
        deltime: "0",
        posttime: "1453865830",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cb55d2c83705b18be579a127aea7f7855367e09d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%93%E9%BC%A0"
        ]
      },
      {
        id: "183",
        type: "fix",
        title: "甜点",
        deltime: "0",
        posttime: "1453865707",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d141440c766c3e76b409ad82d97a9ab80fb1347.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%9C%E7%82%B9"
        ]
      },
      {
        id: "182",
        type: "fix",
        title: "张士超你到底把我家钥匙放哪里了",
        deltime: "0",
        posttime: "1453865672",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a635614bce78543705ca90943ba476b0304b7c51.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%A3%AB%E8%B6%85%E4%BD%A0%E5%88%B0%E5%BA%95%E6%8A%8A%E6%88%91%E5%AE%B6%E9%92%A5%E5%8C%99%E6%94%BE%E5%93%AA%E9%87%8C%E4%BA%86"
        ]
      },
      {
        id: "181",
        type: "fix",
        title: "南家三姐妹",
        deltime: "0",
        posttime: "1453865642",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/447910b0f954589fa9105b263a46c91a88be29ac.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%97%E5%AE%B6%E4%B8%89%E5%A7%90%E5%A6%B9"
        ]
      },
      {
        id: "180",
        type: "fix",
        title: "化妆",
        deltime: "0",
        posttime: "1453865599",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e06dbcda039eb5e6fe39f765fcb4965e8b31116f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%A6%86&page=1&tids_1=155"
        ]
      },
      {
        id: "179",
        type: "fix",
        title: "哆啦A梦",
        deltime: "0",
        posttime: "1453865535",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6a702ed80245ac06450c712cb072e459b562995f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%93%86%E5%95%A6A%E6%A2%A6"
        ]
      },
      {
        id: "178",
        type: "fix",
        title: "监狱兔",
        deltime: "0",
        posttime: "1453865498",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba090ff3b9bccb7d0b2f383012a74217c0ff8c33.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9B%91%E7%8B%B1%E5%85%94"
        ]
      },
      {
        id: "177",
        type: "fix",
        title: "乌瑟的穷困生活",
        deltime: "0",
        posttime: "1453865463",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/09b6c280d320362733d5232612481abcc4f92179.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%8C%E7%91%9F%E7%9A%84%E7%A9%B7%E5%9B%B0%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "176",
        type: "fix",
        title: "爆笑星际",
        deltime: "0",
        posttime: "1453435368",
        edittime: "1514972989",
        sttime: "1453348800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c5e045204b5ae6fa1251bb6423b71a7844461595.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%85"
        ]
      },
      {
        id: "175",
        type: "fix",
        title: "粗点心战争",
        deltime: "0",
        posttime: "1453348316",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8ad3cd43eef240f264da496b24b946278b1a0629.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B2%97%E7%82%B9%E5%BF%83%E6%88%98%E4%BA%89"
        ]
      },
      {
        id: "173",
        type: "fix",
        title: "阳炎PROJECT",
        deltime: "0",
        posttime: "1453348270",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/aaba793864f7169bd4b71fc4c7f4179c85d0265b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%B3%E7%82%8EPROJECT"
        ]
      },
      {
        id: "172",
        type: "fix",
        title: "熊本熊",
        deltime: "0",
        posttime: "1453347842",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/99fe6dee6d7c90e2b6ad37420a58fb724332f323.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E6%9C%AC%E7%86%8A"
        ]
      },
      {
        id: "171",
        type: "fix",
        title: "绘画",
        deltime: "0",
        posttime: "1453347797",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3184ca3c797848282f60085fe67c55a55bf19193.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BB%98%E7%94%BB"
        ]
      },
      {
        id: "170",
        type: "fix",
        title: "星际迷航",
        deltime: "0",
        posttime: "1453347725",
        edittime: "1514972989",
        sttime: "1453260480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02c04e9c7836e5692a8daa9b24cdcfcb91101f8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E8%BF%B7%E8%88%AA"
        ]
      },
      {
        id: "169",
        type: "fix",
        title: "阿姆斯特朗回旋加速喷气式阿姆斯特朗炮",
        deltime: "0",
        posttime: "1453347688",
        edittime: "1514972989",
        sttime: "1453260480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8eb760963036a72c2727dcc1de63ba54dec67606.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E5%9B%9E%E6%97%8B%E5%96%B7%E6%B0%94%E5%8A%A0%E9%80%9F%E5%BC%8F%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E7%82%AE"
        ]
      },
      {
        id: "168",
        type: "fix",
        title: "山海战记",
        deltime: "0",
        posttime: "1453172813",
        edittime: "1514972989",
        sttime: "1453082880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5f6c7ea19db25f98ef86feb624d26474d4bd682f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%B1%E6%B5%B7%E6%88%98%E8%AE%B0"
        ]
      },
      {
        id: "167",
        type: "fix",
        title: "卡巴迪",
        deltime: "0",
        posttime: "1453172778",
        edittime: "1514972989",
        sttime: "1453082880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/05472367425f3c4a67c35ca5d76fd32fb233a73b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%A1%E5%B7%B4%E8%BF%AA"
        ]
      },
      {
        id: "166",
        type: "fix",
        title: "美琴",
        deltime: "0",
        posttime: "1453088289",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8514c2a7f3dc94a71f7feacc746f78ccae970c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%90%B4"
        ]
      },
      {
        id: "165",
        type: "fix",
        title: "奥特曼",
        deltime: "0",
        posttime: "1453088118",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/878af50f4c03d20cdd6eeda252d673554e2c5071.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E7%89%B9%E6%9B%BC"
        ]
      },
      {
        id: "164",
        type: "fix",
        title: "尔康",
        deltime: "0",
        posttime: "1453088090",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9f27f43827a53e224c39e86d0d0c4b2dcea7be45.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%94%E5%BA%B7"
        ]
      },
      {
        id: "163",
        type: "fix",
        title: "松冈修造",
        deltime: "0",
        posttime: "1453088058",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d928db274d9eb51822af238f1432ac63cc0589fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9D%BE%E5%86%88%E4%BF%AE%E9%80%A0"
        ]
      },
      {
        id: "162",
        type: "fix",
        title: "火影忍者",
        deltime: "0",
        posttime: "1453088030",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3ab85ab70ff1b94170eb814554fdf6e1624d2103.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%AB%E5%BD%B1%E5%BF%8D%E8%80%85"
        ]
      },
      {
        id: "161",
        type: "fix",
        title: "张全蛋",
        deltime: "0",
        posttime: "1453088006",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b00f00b857305759580c11128319a08fa1a71cf5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%85%A8%E8%9B%8B"
        ]
      },
      {
        id: "160",
        type: "fix",
        title: "荒木飞吕彦",
        deltime: "0",
        posttime: "1453087980",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6f5b1a41a93f69767dea0f6befff07440e5ce301.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8D%92%E6%9C%A8%E9%A3%9E%E5%90%95%E5%BD%A6"
        ]
      },
      {
        id: "159",
        type: "fix",
        title: "去污粉",
        deltime: "0",
        posttime: "1453087954",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6cce2575e173b00021c56766aff2d9258198ee32.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8E%BB%E6%B1%A1%E7%B2%89"
        ]
      },
      {
        id: "158",
        type: "fix",
        title: "普通disco",
        deltime: "0",
        posttime: "1452739637",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dd062ef83f889fb2fe22e5069ce9ae4ee2d0adcb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%99%AE%E9%80%9A%E7%9A%84disco"
        ]
      },
      {
        id: "157",
        type: "fix",
        title: "小岛秀夫",
        deltime: "0",
        posttime: "1452739503",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2ae008e7887591a59d10dc3480298f03d1938827.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%B0%8F%E5%B2%9B%E7%A7%80%E5%A4%AB&order=totalrank&page=1"
        ]
      },
      {
        id: "156",
        type: "fix",
        title: "饥荒",
        deltime: "0",
        posttime: "1452739456",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1f9cb183f1b58cd343d813aa2c34e90fef7611ab.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A5%A5%E8%8D%92"
        ]
      },
      {
        id: "155",
        type: "fix",
        title: "大海原与大海原",
        deltime: "0",
        posttime: "1452739402",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b1a3d828c424b1f16290a72d985c8bc1ce658eef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E6%B5%B7%E5%8E%9F%E4%B8%8E%E5%A4%A7%E6%B5%B7%E5%8E%9F"
        ]
      },
      {
        id: "154",
        type: "fix",
        title: "极速老师",
        deltime: "0",
        posttime: "1452739351",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7783bd2a2ea3dfe85f0c1ad3f666bcbdd55f90ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%81%E9%80%9F%E8%80%81%E5%B8%88"
        ]
      },
      {
        id: "153",
        type: "fix",
        title: "冰果",
        deltime: "0",
        posttime: "1452739321",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/005d3f1c98311baaa51c630a4f85501ea939334f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%9E%9C"
        ]
      },
      {
        id: "152",
        type: "fix",
        title: "皮卡丘",
        deltime: "0",
        posttime: "1452578463",
        edittime: "1514972989",
        sttime: "1452484560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/97e0cafbe36e091e24cb19654552f36a23124282.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%9A%AE%E5%8D%A1%E4%B8%98&order=totalrank&page=1"
        ]
      },
      {
        id: "151",
        type: "fix",
        title: "非洲boy",
        deltime: "0",
        posttime: "1452571145",
        edittime: "1514972989",
        sttime: "1452484560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7ed4a3de40a8a0a81336a1039f319e8d6a3e3a91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%9D%9E%E6%B4%B2boy&tids_1=119"
        ]
      },
      {
        id: "150",
        type: "fix",
        title: "我们这一家",
        deltime: "0",
        posttime: "1452232736",
        edittime: "1514972989",
        sttime: "1452146220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bec5ac87f70593bb355b17c037af5840031bfb61.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E8%BF%99%E4%B8%80%E5%AE%B6"
        ]
      },
      {
        id: "149",
        type: "fix",
        title: "阿松",
        deltime: "0",
        posttime: "1452232695",
        edittime: "1514972989",
        sttime: "1452146220",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3b332cd02821265db07a271eb8e2029ef0e1af89.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%BF%E6%9D%BE"
        ]
      },
      {
        id: "148",
        type: "fix",
        title: "吃货木下",
        deltime: "0",
        posttime: "1452232653",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e823417ca4174941ddac43613ca80f857efd051e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B4%A7%E6%9C%A8%E4%B8%8B"
        ]
      },
      {
        id: "147",
        type: "fix",
        title: "僵尸猫",
        deltime: "0",
        posttime: "1452232600",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9484ba894ef39a80d8c96d1e92feeabf6370c717.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%B8%E8%A1%80%E7%8C%AB"
        ]
      },
      {
        id: "146",
        type: "fix",
        title: "张学友",
        deltime: "0",
        posttime: "1452232559",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/912c6b1944c0778bbc4ecc8f25a9c5aab347c60d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BC%A0%E5%AD%A6%E5%8F%8B&tids_1=119"
        ]
      },
      {
        id: "145",
        type: "fix",
        title: "丞相",
        deltime: "0",
        posttime: "1452232500",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/26c2b408e8e1ae38f7be4cae75ee8da43e853975.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%9E%E7%9B%B8"
        ]
      },
      {
        id: "144",
        type: "fix",
        title: "retoruto",
        deltime: "0",
        posttime: "1452232443",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/00cf377f28ec54111c9d6f12041dac0ac314f255.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=retoruto"
        ]
      },
      {
        id: "143",
        type: "fix",
        title: "夏目",
        deltime: "0",
        posttime: "1452232390",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9861b6b81d1af46b792237e9a3a3beeaeaa6026b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%8F%E7%9B%AE"
        ]
      },
      {
        id: "142",
        type: "fix",
        title: "轻音少女",
        deltime: "0",
        posttime: "1451444236",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3da2ee0bd92b2b79169c6a4f4f642c6abf80849a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BD%BB%E9%9F%B3%E5%B0%91%E5%A5%B3"
        ]
      },
      {
        id: "141",
        type: "fix",
        title: "彩虹猫",
        deltime: "0",
        posttime: "1451444207",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5973e6caa5dde47d99238c39fa5c450b87d5aeac.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BD%A9%E8%99%B9%E7%8C%AB"
        ]
      },
      {
        id: "140",
        type: "fix",
        title: "太鼓达人",
        deltime: "0",
        posttime: "1451444177",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8788d0f4ec9787bb3cedef4def36c7d32b579be3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "139",
        type: "fix",
        title: "星球大战",
        deltime: "0",
        posttime: "1451444147",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "1480550400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/aafcee2b9f889f35e9e1fa69eca0bbaccdf61cf0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E7%90%83%E5%A4%A7%E6%88%98"
        ]
      },
      {
        id: "138",
        type: "fix",
        title: "热带雨林的爆笑生活",
        deltime: "0",
        posttime: "1451444057",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d70f479a5ae70c71ad92128f1f23e1065349ee52.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%83%AD%E5%B8%A6%E9%9B%A8%E6%9E%97%E7%9A%84%E7%88%86%E7%AC%91%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "137",
        type: "fix",
        title: "EVA",
        deltime: "0",
        posttime: "1451444022",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d6d9c2b7beb0c7b66d9340780772e7e7507b2fe.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/39.html"
        ]
      },
      {
        id: "136",
        type: "fix",
        title: "裸狼",
        deltime: "0",
        posttime: "1451300143",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3024bbb0bc7951e14cd5c4d9353e9069bf544422.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A3%B8%E7%8B%BC"
        ]
      },
      {
        id: "135",
        type: "fix",
        title: "蜡笔小新",
        deltime: "0",
        posttime: "1451300112",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6cc6995cb51bd25af37842621150acb0f55cad91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0"
        ]
      },
      {
        id: "134",
        type: "fix",
        title: "钢之炼金术师",
        deltime: "0",
        posttime: "1451300075",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/16cea7ba117652835f950d0da4a468107a07710c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E4%B9%8B%E7%82%BC%E9%87%91%E6%9C%AF%E5%B8%88"
        ]
      },
      {
        id: "133",
        type: "fix",
        title: "三国志",
        deltime: "0",
        posttime: "1451300016",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba4c1c276f8c03c00f902385d1a4a1aa408a65e1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%89%E5%9B%BD%E5%BF%97"
        ]
      },
      {
        id: "132",
        type: "fix",
        title: "朝九晚五",
        deltime: "0",
        posttime: "1450957116",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e6e9fda14b3dc57c7dbf3096f06d9077543e4ca8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9C%9D%E4%B9%9D%E6%99%9A%E4%BA%94"
        ]
      },
      {
        id: "131",
        type: "fix",
        title: "推倒",
        deltime: "0",
        posttime: "1450957077",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3a53073e71e0a681f0c4276663e0547374a66afa.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A8%E5%88%B0"
        ]
      },
      {
        id: "130",
        type: "fix",
        title: "waimo kun",
        deltime: "0",
        posttime: "1450957025",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c362edc0ad113ead8691c30b1f74232bc369bb4a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=waimo+kun"
        ]
      },
      {
        id: "129",
        type: "fix",
        title: "泡面番",
        deltime: "0",
        posttime: "1450868346",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12513e7be0990620ec8381d9be2c0c82c327f16f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2%E7%95%AA"
        ]
      },
      {
        id: "128",
        type: "fix",
        title: "挖坟",
        deltime: "0",
        posttime: "1450868319",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a5205539a5103b8c7ca3d99961742927cd6f1af5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%8C%96%E5%9D%9F&order=click"
        ]
      },
      {
        id: "127",
        type: "fix",
        title: "家有穆珂",
        deltime: "0",
        posttime: "1450868283",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8ac60cbef777d759655018d05b99d2f3ed6ca933.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/bangumi/i/2794/"
        ]
      },
      {
        id: "126",
        type: "fix",
        title: "花泽香菜",
        deltime: "0",
        posttime: "1450868245",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/36dcef446ad558680f5a3f2432766d99deac496a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E8%8A%B1%E6%B3%BD%E9%A6%99%E8%8F%9C"
        ]
      },
      {
        id: "125",
        type: "fix",
        title: "暴走漫画",
        deltime: "0",
        posttime: "1450782039",
        edittime: "1514972989",
        sttime: "1450695540",
        endtime: "1482404340",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a144630111550f2a5194d39f7e57a006797e4a9c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9A%B4%E8%B5%B0%E6%BC%AB%E7%94%BB"
        ]
      },
      {
        id: "124",
        type: "fix",
        title: "不约",
        deltime: "0",
        posttime: "1450696045",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f4b56b2f8d796b4c98d629a6869bfdee0e621cc3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E7%BA%A6"
        ]
      },
      {
        id: "123",
        type: "fix",
        title: "miku",
        deltime: "0",
        posttime: "1450696008",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170831/o683zkj78z.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/activity-Miku10th.html"
        ]
      },
      {
        id: "122",
        type: "fix",
        title: "任天堂",
        deltime: "0",
        posttime: "1450695960",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c71aa74a8ddc7bf7e08d4f7d5a72f247aa015bb5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%BB%E5%A4%A9%E5%A0%82"
        ]
      },
      {
        id: "121",
        type: "fix",
        title: "目瞪口呆",
        deltime: "0",
        posttime: "1450695932",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7da608c8d87d679b3da50946190999a30d18529c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9B%AE%E7%9E%AA%E5%8F%A3%E5%91%86"
        ]
      },
      {
        id: "120",
        type: "fix",
        title: "苍天饶过谁",
        deltime: "0",
        posttime: "1450350704",
        edittime: "1514972989",
        sttime: "1450255560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/abcae160b98c6283d1daadfed8307c15d4ea5030.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8B%8D%E5%A4%A9%E9%A5%B6%E8%BF%87%E8%B0%81"
        ]
      },
      {
        id: "119",
        type: "fix",
        title: "买买买",
        deltime: "0",
        posttime: "1450350632",
        edittime: "1514972989",
        sttime: "1450255560",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d8f89a73fb3711893c76459ef0bca53ad12e7a3e.gif",
        weight: "0",
        links: [
          "https://bmall.bilibili.com/"
        ]
      },
      {
        id: "118",
        type: "fix",
        title: "胖次",
        deltime: "0",
        posttime: "1450334567",
        edittime: "1514972989",
        sttime: "1450245540",
        endtime: "1481954340",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/87a3332f5f4ed41c33af182a81ae0e1278876029.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%83%96%E6%AC%A1&order=stow&page=1"
        ]
      },
      {
        id: "117",
        type: "fix",
        title: "爱杀宝贝",
        deltime: "0",
        posttime: "1450319358",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/93f817140c0daba690166492926e672720cf2c6e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%B1%E6%9D%80%E5%AE%9D%E8%B4%9D"
        ]
      },
      {
        id: "116",
        type: "fix",
        title: "说好的炸鸡块呢",
        deltime: "0",
        posttime: "1450319292",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a141a5222fdb51ff8507b34c24f8fecb7ba292da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%AF%B4%E5%A5%BD%E7%9A%84%E7%82%B8%E9%B8%A1%E5%9D%97%E5%91%A2"
        ]
      },
      {
        id: "115",
        type: "fix",
        title: "一拳超人",
        deltime: "0",
        posttime: "1450319257",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e1da0f5ff76f5640c0814c708299ae4a96589b61.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%80%E6%8B%B3%E8%B6%85%E4%BA%BA"
        ]
      },
      {
        id: "113",
        type: "fix",
        title: "彩虹小马",
        deltime: "0",
        posttime: "1450177764",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/36b484b752de1071f50c40bdc7f554a9d9fc3125.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BD%A9%E8%99%B9%E5%B0%8F%E9%A9%AC&tids_1=119"
        ]
      },
      {
        id: "112",
        type: "fix",
        title: "掀桌",
        deltime: "0",
        posttime: "1450177692",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0a404aea7fe4d80a0289a8b9692fd9c3daa0eaff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%80%E6%A1%8C"
        ]
      },
      {
        id: "111",
        type: "fix",
        title: "懒蛋蛋",
        deltime: "0",
        posttime: "1450177612",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4d10b8b58b4ae3cffda057bd2b22210fca3f5bc7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%87%92%E8%9B%8B%E8%9B%8B"
        ]
      },
      {
        id: "110",
        type: "fix",
        title: "巴拉拉小魔仙",
        deltime: "0",
        posttime: "1450091554",
        edittime: "1514972989",
        sttime: "1450091460",
        endtime: "1481713860",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7942ad0abd2efa9fbb0117857f48ffda3bb4f08d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B7%B4%E6%8B%89%E6%8B%89%E5%B0%8F%E9%AD%94%E4%BB%99"
        ]
      },
      {
        id: "109",
        type: "fix",
        title: "海绵宝宝",
        deltime: "0",
        posttime: "1450091465",
        edittime: "1514972989",
        sttime: "1450080000",
        endtime: "1481702400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/07a5ffcadd977d01f63326a8a22f5563ddd5f2c9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "108",
        type: "fix",
        title: "错误的打开方式",
        deltime: "0",
        posttime: "1449800071",
        edittime: "1514972989",
        sttime: "1449799860",
        endtime: "1481421960",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ee3fb8667b58d5f0672281e37e7d2774226f007b.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/49.html"
        ]
      },
      {
        id: "107",
        type: "fix",
        title: "不明真相的吃瓜围观群众",
        deltime: "0",
        posttime: "1449799961",
        edittime: "1514972989",
        sttime: "1449799860",
        endtime: "1481421960",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/217fd837b0301bccf85aec2d5453d9f72ccc10a4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%9C%9F%E7%9B%B8%E7%9A%84%20%E7%BE%A4%E4%BC%97"
        ]
      },
      {
        id: "106",
        type: "fix",
        title: "天才麻将少女",
        deltime: "0",
        posttime: "1449660680",
        edittime: "1514972989",
        sttime: "1449574080",
        endtime: "1449660480",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/46122d556af3b82bedb383edf4871ae69dc533ec.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/91.html"
        ]
      },
      {
        id: "105",
        type: "fix",
        title: "新日暮里",
        deltime: "0",
        posttime: "1449660596",
        edittime: "1514972989",
        sttime: "1449574080",
        endtime: "1449660480",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cc008f466fb633ef4d70bb810b9d7cb9509f0512.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%96%B0%E6%97%A5%E6%9A%AE%E9%87%8C&order=click"
        ]
      },
      {
        id: "104",
        type: "fix",
        title: "洛天依",
        deltime: "0",
        posttime: "1449660566",
        edittime: "1514972989",
        sttime: "1501689300",
        endtime: "1449660480",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b3e8a4538679f2f2821fcc8390ad1de6ad9c7bca.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/video/av12802603/"
        ]
      },
      {
        id: "103",
        type: "fix",
        title: "as we can",
        deltime: "0",
        posttime: "1449660533",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dd7a46b549397fbe78dbac7ff3faa43c67ee393a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%AF%94%E5%88%A9&order=click"
        ]
      },
      {
        id: "102",
        type: "fix",
        title: "我已经没什么好怕的了",
        deltime: "0",
        posttime: "1449660222",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a0e6bb9d5c2079ebb46d57e83e7568815a38439a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&order=click"
        ]
      },
      {
        id: "100",
        type: "fix",
        title: "齐天大圣",
        deltime: "0",
        posttime: "1449660124",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2c834cdbd53153adfd467dd310c3ef059e7a96d5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A4%A7%E5%9C%A3&order=click"
        ]
      },
      {
        id: "99",
        type: "fix",
        title: "复仇者联盟",
        deltime: "0",
        posttime: "1449660092",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f22ae79cab8b0a4c2b9e7c43eb7595e9413f15fc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A4%8D%E4%BB%87%E8%80%85%E8%81%94%E7%9B%9F&order=click"
        ]
      },
      {
        id: "98",
        type: "fix",
        title: "虎纹鲨鱼",
        deltime: "0",
        posttime: "1449660032",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ff4807a83fe328c93dcbd8e4aad6902f9d72e207.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%99%8E%E7%BA%B9%E9%B2%A8%E9%B1%BC&order=click"
        ]
      },
      {
        id: "97",
        type: "fix",
        title: "灌篮高手",
        deltime: "0",
        posttime: "1449659855",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7cbdca340d0194ef9a7c885ff1d226018d4d2f0b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B&order=click"
        ]
      },
      {
        id: "96",
        type: "fix",
        title: "duang",
        deltime: "0",
        posttime: "1449659802",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4b88188a05a189c4bd7bd8a44c58b9a52386cc93.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=duang&order=click"
        ]
      },
      {
        id: "95",
        type: "fix",
        title: "新华里业务员",
        deltime: "0",
        posttime: "1449629659",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/79935d7683bd30722af393a5f91c9be6b13bc02e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%96%B0%E5%8D%8E%E9%87%8C%E4%B8%9A%E5%8A%A1%E5%91%98&tids_1=119&page=1"
        ]
      },
      {
        id: "94",
        type: "fix",
        title: "挖掘机技术哪家强",
        deltime: "0",
        posttime: "1449629566",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/66420b2addff0aadd92942f7b0ccc86c1f3c541d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%8C%96%E6%8E%98%E6%9C%BA%E6%8A%80%E6%9C%AF%E5%93%AA%E5%AE%B6%E5%BC%BA&tids_1=119"
        ]
      },
      {
        id: "93",
        type: "fix",
        title: "德国boy",
        deltime: "0",
        posttime: "1449629115",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ec41c58bbc9477cdba09eb39feecc180b14f44d2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BE%B7%E5%9B%BDboy&tids_1=119"
        ]
      },
      {
        id: "92",
        type: "fix",
        title: "梁逸峰",
        deltime: "0",
        posttime: "1449629017",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/db237b35ab764c3feb4e2455e2baed1f63cbc0a2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%80%B8%E5%B3%B0&page=1"
        ]
      },
      {
        id: "91",
        type: "fix",
        title: "元首",
        deltime: "0",
        posttime: "1449628671",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/623ea657e69af03fe78667bb15c59048e6c957dc.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/65.html"
        ]
      },
      {
        id: "90",
        type: "fix",
        title: "立flag",
        deltime: "0",
        posttime: "1449628642",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ea8e430bb0478b642ba2e34bd590b03467cbc934.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%AB%8Bflag"
        ]
      },
      {
        id: "89",
        type: "fix",
        title: "核爆神曲",
        deltime: "0",
        posttime: "1449628445",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e6196afc5e86c1346a5009b16f14dcbe3d6ae73d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A0%B8%E7%88%86%E7%A5%9E%E6%9B%B2"
        ]
      },
      {
        id: "88",
        type: "fix",
        title: "妈妈今天不在家",
        deltime: "0",
        posttime: "1449628262",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/49d2a06f3f054e8dcbc80ab354662d62fc885c49.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A6%88%E5%A6%88%E4%BB%8A%E5%A4%A9%E4%B8%8D%E5%9C%A8%E5%AE%B6"
        ]
      },
      {
        id: "87",
        type: "fix",
        title: "金馆长",
        deltime: "0",
        posttime: "1449627879",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ee76be61c03788b767616079684af071807c396d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%87%91%E9%A6%86%E9%95%BF"
        ]
      },
      {
        id: "86",
        type: "fix",
        title: "jojo",
        deltime: "0",
        posttime: "1449627835",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6c153ef7a2f96aec5ea318fa73d5b9cb93f95f34.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=jojo"
        ]
      },
      {
        id: "85",
        type: "fix",
        title: "怪物猎人",
        deltime: "0",
        posttime: "1449627557",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/63fe1f03c513c771add893b9b9f254610b0646b0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%80%AA%E7%89%A9%E7%8C%8E%E4%BA%BA"
        ]
      },
      {
        id: "84",
        type: "fix",
        title: "嘿嘿嘿",
        deltime: "0",
        posttime: "1449627454",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f12a086b603fccad6e7342d5d4e53198743daba7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%98%BF%E5%98%BF%E5%98%BF"
        ]
      },
      {
        id: "83",
        type: "fix",
        title: "昆特牌",
        deltime: "0",
        posttime: "1449490981",
        edittime: "1514972989",
        sttime: "1449404460",
        endtime: "1449490860",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b4f53871964fe4a48eb4c68f0a4ca096adb30a55.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%98%86%E7%89%B9%E7%89%8C"
        ]
      },
      {
        id: "82",
        type: "fix",
        title: "梁非凡",
        deltime: "0",
        posttime: "1449490637",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2a4386ea51dc1853344f3bb6d3fe677f6a0d8cec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%9D%9E%E5%87%A1&page=1&tids_1=119"
        ]
      },
      {
        id: "81",
        type: "fix",
        title: "葛平",
        deltime: "0",
        posttime: "1449490495",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/dfc68ef4c18aebff26829374c50479f59f1e9b71.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%91%9B%E5%B9%B3&page=1"
        ]
      },
      {
        id: "80",
        type: "fix",
        title: "紫妈永远17岁",
        deltime: "0",
        posttime: "1449490417",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/456983ac8563c71788f3e16c22be89baa0a16a9e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%B4%AB%E5%A6%88%E6%B0%B8%E8%BF%9C17%E5%B2%81"
        ]
      },
      {
        id: "79",
        type: "fix",
        title: "潜行吧!奈亚子W",
        deltime: "0",
        posttime: "1449489735",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cb75081f16caf785f49a5cad13001e0c3da4e66e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/bangumi/i/408/"
        ]
      },
      {
        id: "78",
        type: "fix",
        title: "魔法少女小圆",
        deltime: "0",
        posttime: "1449489553",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c0e0e97e31ac090dce6cbcd5c9fe225525764baa.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "77",
        type: "fix",
        title: "we will rock you",
        deltime: "0",
        posttime: "1449226983",
        edittime: "1514972989",
        sttime: "1449226260",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b35357cc5e2916c55f34a7733469fb7ca2729af4.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=WE+WILL+ROCK+YOU&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "76",
        type: "fix",
        title: "金坷垃",
        deltime: "0",
        posttime: "1449226898",
        edittime: "1514972989",
        sttime: "1449226260",
        endtime: "1480848660",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8ca7510f973e706b592f40b09b93f332bfdec273.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%87%91%E5%9D%B7%E6%8B%89&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "75",
        type: "fix",
        title: "口袋妖怪",
        deltime: "0",
        posttime: "1449226636",
        edittime: "1514972989",
        sttime: "1449198660",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8d7724f290cc66fd3a613c3fc57f55eaa24a0a33.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%8F%A3%E8%A2%8B%E5%A6%96%E6%80%AA&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "74",
        type: "fix",
        title: "蓝蓝路",
        deltime: "0",
        posttime: "1449226386",
        edittime: "1514972989",
        sttime: "1449198660",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8291a67c542f215b75c27332ea7910ffb1622335.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%93%9D%E8%93%9D%E8%B7%AF&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "73",
        type: "fix",
        title: "甩葱歌",
        deltime: "0",
        posttime: "1449142744",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0fbb5f302cdb98dd0faad421692438ab6a25db0a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%94%A9%E8%91%B1%E6%AD%8C&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "72",
        type: "fix",
        title: "辐射4",
        deltime: "0",
        posttime: "1449142425",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e626c7e0fc602e320918b3e69a555e77e9be0426.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%BE%90%E5%B0%844&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "71",
        type: "fix",
        title: "贝爷",
        deltime: "0",
        posttime: "1449142186",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8db7647e99d3f4c9fca541811bf4433be0756fd4.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E8%B4%9D%E5%B0%94%C2%B7%E6%A0%BC%E9%87%8C%E5%B0%94%E6%96%AF"
        ]
      },
      {
        id: "70",
        type: "fix",
        title: "膝盖请收下",
        deltime: "0",
        posttime: "1449141465",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1359a42b50c41d22d4ba5804b9b74be0a19aaed0.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%86%9D%E7%9B%96+%E8%AF%B7%E6%94%B6%E4%B8%8B&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "69",
        type: "fix",
        title: "半泽直树",
        deltime: "0",
        posttime: "1449141296",
        edittime: "1514972989",
        sttime: "1449054780",
        endtime: "1480763580",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3fb9ae473fe50cd13af3bc6e2994b358e3004249.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%8D%8A%E6%B3%BD%E7%9B%B4%E6%A0%91&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "68",
        type: "fix",
        title: "是在下输了",
        deltime: "0",
        posttime: "1449055280",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9201b6e0682a33dc5d33017767642735f8819c5a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%98%AF%E5%9C%A8%E4%B8%8B%E8%BE%93%E4%BA%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "67",
        type: "fix",
        title: "雪姨",
        deltime: "0",
        posttime: "1449054038",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/30c510982561b15f427c9689607527d168f174f7.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%9B%AA%E5%A7%A8&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "66",
        type: "fix",
        title: "狗带",
        deltime: "0",
        posttime: "1449053990",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d4c72dd1a4d1948d03ed3041fc2417ba70ab2fd.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%8B%97%E5%B8%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "65",
        type: "fix",
        title: "lovelive",
        deltime: "0",
        posttime: "1449053948",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/21453207026e5597ebc67dad369eeeca41342c66.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=lovelive&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "64",
        type: "fix",
        title: "红警",
        deltime: "0",
        posttime: "1449039971",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/97b1233a87d2aaaafac7ef4d405ce762f2355128.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%BA%A2%E8%AD%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "63",
        type: "fix",
        title: "摸鱼",
        deltime: "0",
        posttime: "1449039899",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d359d29d5876325f1c7e097dcdaf4586be228eb8.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%91%B8%E9%B1%BC&orderby=scores&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "62",
        type: "fix",
        title: "just you know why",
        deltime: "0",
        posttime: "1449039812",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/226d73e078c81e22748c67ba9bc5f8e5fc01c885.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=just+you+know+why&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "61",
        type: "fix",
        title: "你为什么这么屌",
        deltime: "0",
        posttime: "1449039696",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79254877a35287d3fde697e8cb37e77d5fe0e156.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E4%BD%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B9%88%E5%8F%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "60",
        type: "fix",
        title: "坦克",
        deltime: "0",
        posttime: "1449039535",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/11637f112277371c854a7fc9e6457c5a809f4c01.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%9D%A6%E5%85%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "59",
        type: "fix",
        title: "bilibili",
        deltime: "0",
        posttime: "1449039500",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/151fa668c8f083a8ed3f7a2be2ffcc652c8f0b1f.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=bilibili&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "58",
        type: "fix",
        title: "应援",
        deltime: "0",
        posttime: "1449037131",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/efc7fac0df51a458d60433014ba438037080218e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%BA%94%E6%8F%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "57",
        type: "fix",
        title: "上古卷轴",
        deltime: "0",
        posttime: "1448968231",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b6d8ef3404bbf6582e3498c981dabee994a6d029.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E4%B8%8A%E5%8F%A4%E5%8D%B7%E8%BD%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "56",
        type: "fix",
        title: "八尾妖姬抱回家",
        deltime: "0",
        posttime: "1448968097",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b727e4367bf7532d76da3b1439c5301794b0b5ec.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%85%AB%E5%B0%BE%E5%A6%96%E5%A7%AC%E6%8A%B1%E5%9B%9E%E5%AE%B6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "55",
        type: "fix",
        title: "要优雅不要污",
        deltime: "0",
        posttime: "1448967687",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e5eb20641bf6a07fbb5fb1516f9cf088fd636545.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%A6%81%E4%BC%98%E9%9B%85%E4%B8%8D%E8%A6%81%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "54",
        type: "fix",
        title: "悲伤",
        deltime: "0",
        posttime: "1448967507",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/60ea1dfbeb389de26d0d0ae13c6fa5f696a38d04.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%82%B2%E4%BC%A4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "53",
        type: "fix",
        title: "比利",
        deltime: "0",
        posttime: "1448967484",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2b1a9d34de4031aa40c69324d999912669527383.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%AF%94%E5%88%A9&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "52",
        type: "fix",
        title: "费玉污",
        deltime: "0",
        posttime: "1448967407",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5f9b620676eefa92fef945f29b419bcbae32cabc.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%B4%B9%E7%8E%89%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "51",
        type: "fix",
        title: "prprpr",
        deltime: "0",
        posttime: "1448967122",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/68fecc5fe1dd097ce8ae4de96e4966f2e4dafc59.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=prprpr&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "50",
        type: "fix",
        title: "熊猫",
        deltime: "0",
        posttime: "1448966693",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/56707d7fd0e76e5d42cf14811af3b6fe0b7cc905.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%86%8A%E7%8C%AB&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "49",
        type: "fix",
        title: "普通disco",
        deltime: "0",
        posttime: "1448966337",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4e75ec60d9265407c8fccaecbc748b9a15122f69.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%99%AE%E9%80%9Adisco&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "48",
        type: "fix",
        title: "恋爱研究所",
        deltime: "0",
        posttime: "1448966021",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/575041c9e3aa6c52c29ddb80bc99c6fef533ed6b.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%81%8B%E7%88%B1%E7%A0%94%E7%A9%B6%E6%89%80&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "47",
        type: "fix",
        title: "yoooooooooooooooo",
        deltime: "0",
        posttime: "1448965872",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f230203607de02eb3f487e4053a85df7ac940730.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=yoooooooooooo&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "46",
        type: "fix",
        title: "doge",
        deltime: "0",
        posttime: "1448965833",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ae9c1d743b552aa38dfcc6e27fc8bbf5a333dc6f.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=doge&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "45",
        type: "fix",
        title: "装逼",
        deltime: "0",
        posttime: "1448965714",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/51ae965b6a138305e7be866d161426cda2e98479.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%A3%85%E9%80%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "44",
        type: "fix",
        title: "2233",
        deltime: "0",
        posttime: "1448965467",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4b7bc004f638767826158b83f39758ccd2371062.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=2233&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "43",
        type: "fix",
        title: "局座",
        deltime: "0",
        posttime: "1448965352",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0a71119c1954bef52828c6780765de6a94f6769c.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%B1%80%E5%BA%A7&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "34",
        type: "fix",
        title: "李狗嗨",
        deltime: "0",
        posttime: "1448952587",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1b9a8ea64110b8ea14342be63e8f22c703d0023d.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=legal+high&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "33",
        type: "fix",
        title: "扭腰舞2",
        deltime: "0",
        posttime: "1448952498",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c1eaa50e18c9e3ee06b9dd024262ff008eda6700.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "32",
        type: "fix",
        title: "扭腰舞",
        deltime: "0",
        posttime: "1448952395",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6a642bd3ba9ca866bdf0b1455e29fa27ffb580fe.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "31",
        type: "fix",
        title: "小埋",
        deltime: "0",
        posttime: "1448952295",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bdd59786ad48ac3c43cae29377b203a81d434035.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%B0%8F%E5%9F%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      }
    ],
    random: [],
    random_link: null,
    ea_public: null
  };

  // src/css/avatar-animation.css
  var avatar_animation_default = "/* 鼠标放在顶栏上的动效 */\\r\\n.bili-header-m .profile-info .i-face .face {\\r\\n    border: 0\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info .i-face .pendant {\\r\\n    transform: scale(0.5);\\r\\n    width: 112px;\\r\\n    height: 112px;\\r\\n    left: -41px;\\r\\n    bottom: -46px;\\r\\n    opacity: 0;\\r\\n    transition: opacity .1s ease-in\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face {\\r\\n    left: 8px !important;\\r\\n    top: 0 !important;\\r\\n    height: 32px !important;\\r\\n    width: 32px !important;\\r\\n    transform: translateY(10px) translateX(-16px) scale(2);\\r\\n    transform-origin: top left\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .legalize {\\r\\n    transform: scale(0.5) translate(10px, 15px)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .pendant {\\r\\n    opacity: 1\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .face {\\r\\n    border: 0;\\r\\n    box-shadow: 0 0 0 2px #fff\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in {\\r\\n    transform: translateY(5px) translateX(-10px) scale(1.75)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .scale-in .face {\\r\\n    height: 32px;\\r\\n    width: 32px\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in .legalize {\\r\\n    transform: scale(0.5) translate(38px, 48px)\\r\\n}";

  // src/css/message.css
  var message_default = "/* 修复消息页样式 */\\r\\n.container[data-v-6969394c] {\\r\\n    height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.container[data-v-1c9150a9] {\\r\\n    height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.im-root,\\r\\n.im-root .im-list-box * {\\r\\n    font-size: 12px;\\r\\n    line-height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box {\\r\\n    width: 100%;\\r\\n    overflow: visible;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-list {\\r\\n    line-height: 42px;\\r\\n    height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number {\\r\\n    height: 14px;\\r\\n    line-height: 13px;\\r\\n    border-radius: 10px;\\r\\n    padding: 1px 3px;\\r\\n    font-size: 12px;\\r\\n    min-width: 20px;\\r\\n    text-align: center;\\r\\n    color: #fff;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number.im-center {\\r\\n    top: 14px;\\r\\n    left: 80px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot {\\r\\n    top: 11px;\\r\\n    right: -10px;\\r\\n    width: 8px;\\r\\n    height: 8px;\\r\\n    border-radius: 100%;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot.im-center {\\r\\n    top: 16px;\\r\\n    right: 20px;\\r\\n}";

  // src/page/header.ts
  var Header = class _Header {
    /** locs列表 */
    static locs = [1576, 1612, 1580, 1920, 1584, 1588, 1592, 3129, 1600, 1608, 1604, 1596, 2210, 1634, 142];
    /** 缓存已请求内容 */
    static record = {};
    /** 资源id */
    static get rid() {
      return this.resourceId();
    }
    /** 页面固定的资源id */
    static prid = 0;
    /** tid对照表 */
    static tid = {
      1: 1576,
      13: 1612,
      167: 1920,
      3: 1580,
      129: 1584,
      4: 1588,
      36: 1592,
      160: 1600,
      119: 1608,
      155: 1604,
      165: 1620,
      166: 1620,
      5: 1596,
      23: 1634,
      11: 1616,
      181: 2210,
      177: 2260,
      188: 3129
    };
    /**
     * 根据页面返回resourceId
     * @returns resourceId
     */
    static resourceId() {
      var _a3;
      const tid = window.bid || window.tid || window.topid;
      if (tid) {
        return (_a3 = this.tid[tid]) != null ? _a3 : 142;
      }
      if (location.href.includes("v/douga"))
        return 1576;
      if (location.href.includes("/anime"))
        return 1612;
      if (location.href.includes("v/music"))
        return 1580;
      if (location.href.includes("/guochuang"))
        return 1920;
      if (location.href.includes("v/dance"))
        return 1584;
      if (location.href.includes("v/game"))
        return 1588;
      if (location.href.includes("v/knowledge"))
        return 1592;
      if (location.href.includes("v/tech"))
        return 3129;
      if (location.href.includes("v/life"))
        return 1600;
      if (location.href.includes("v/kichiku"))
        return 1608;
      if (location.href.includes("v/fashion"))
        return 1604;
      if (location.href.includes("v/ent"))
        return 1596;
      if (location.href.includes("v/cinephile"))
        return 2210;
      if (location.href.includes("/cinema"))
        return 1634;
      return 142;
    }
    /** 顶栏分区 */
    static primaryMenu() {
      poll(() => document.querySelector("#primary_menu"), (d) => {
        const vue = d.__vue__;
        vue.menuList.forEach((d2, i, s) => {
          switch (d2.name) {
            case "动画":
              s[i].sub = [{ "name": "MAD·AMV", "route": "mad", "tid": 24, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 151 }, "desc": "具有一定制作程度的动画或静画的二次创作视频", "url": "//www.bilibili.com/video/douga-mad-1.html" }, { "name": "MMD·3D", "route": "mmd", "tid": 25, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 152 }, "desc": "使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频", "url": "//www.bilibili.com/video/douga-mmd-1.html" }, { "name": "短片·手书·配音", "route": "voice", "tid": 47, "ps": 15, "rps": 10, "desc": "追求创新并具有强烈特色的短片、手书(绘)及ACG相关配音", "url": "//www.bilibili.com/video/douga-voice-1.html" }, { "name": "手办·模玩", "route": "garage_kit", "tid": 210, "ps": 15, "rps": 10, "desc": "手办模玩的测评、改造或其他衍生内容", "url": "" }, { "name": "特摄", "route": "tokusatsu", "tid": 86, "ps": 15, "rps": 10, "desc": "特摄相关衍生视频", "url": "//www.bilibili.com/video/cinephile-tokusatsu.html" }, { "name": "综合", "route": "other", "tid": 27, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 153 }, "desc": "以动画及动画相关内容为素材,包括但不仅限于音频替换、杂谈、排行榜等内容", "url": "//www.bilibili.com/video/douga-else-1.html" }];
              break;
            case "音乐":
              s[i].sub = [{ "name": "原创音乐", "route": "original", "tid": 28, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 243 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "原创歌曲及纯音乐,包括改编、重编曲及remix", "url": "//www.bilibili.com/video/music-original-1.html" }, { "name": "翻唱", "route": "cover", "tid": 31, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 245 }, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "对曲目的人声再演绎视频", "url": "//www.bilibili.com/video/music-Cover-1.html" }, { "name": "演奏", "route": "perform", "tid": 59, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "乐器和非传统乐器器材的演奏作品", "url": "//www.bilibili.com/video/music-perform-1.html" }, { "name": "VOCALOID·UTAU", "route": "vocaloid", "tid": 30, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 247 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以VOCALOID等歌声合成引擎为基础,运用各类音源进行的创作", "url": "//www.bilibili.com/video/music-vocaloid-1.html" }, { "name": "音乐现场", "route": "live", "tid": 29, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐表演的实况视频,包括官方/个人拍摄的综艺节目、音乐剧、音乐节、演唱会等", "url": "//www.bilibili.com/video/music-oped-1.html" }, { "name": "MV", "route": "mv", "tid": 193, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "为音乐作品配合拍摄或制作的音乐录影带(Music Video),以及自制拍摄、剪辑、翻拍MV", "url": "//www.bilibili.com/video/music-coordinate-1.html" }, { "name": "乐评盘点", "route": "commentary", "tid": 243, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐教学", "route": "tutorial", "tid": 244, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以音乐教学为目的的内容", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐综合", "route": "other", "tid": 130, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "所有无法被收纳到其他音乐二级分区的音乐类视频", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音频", "customZone": "Audio", "route": "audio", "url": "//www.bilibili.com/audio/home?musicType=music" }, { "name": "说唱", "url": "//www.bilibili.com/v/rap" }];
              break;
            case "科技":
              s[i].name = "知识";
              s[i].route = "knowledge";
              s[i].sub = [{ "name": "科学科普", "route": "science", "tid": 201, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 261 }, "desc": "回答你的十万个为什么" }, { "name": "社科·法律·心理", "route": "social_science", "tid": 124, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 263 }, "desc": "基于社会科学、法学、心理学展开或个人观点输出的知识视频" }, { "name": "人文历史", "route": "humanity_history", "tid": 228, "ps": 15, "rps": 10, "desc": "看看古今人物,聊聊历史过往,品品文学典籍" }, { "name": "财经商业", "route": "business", "tid": 207, "ps": 15, "rps": 10, "desc": "说金融市场,谈宏观经济,一起畅聊商业故事" }, { "name": "校园学习", "route": "campus", "tid": 208, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 265 }, "desc": "老师很有趣,学生也有才,我们一起搞学习" }, { "name": "职业职场", "route": "career", "tid": 209, "ps": 15, "rps": 10, "desc": "职业分享、升级指南,一起成为最有料的职场人" }, { "name": "设计·创意", "route": "design", "tid": 229, "ps": 15, "rps": 10, "desc": "天马行空,创意设计,都在这里" }, { "name": "野生技能协会", "route": "skill", "tid": 122, "ps": 15, "rps": 10, "desc": "技能党集合,是时候展示真正的技术了" }];
              break;
            case "数码":
              s[i].name = "科技";
              s[i].route = "tech";
              s[i].sub = [{ "name": "数码", "route": "digital", "tid": 95, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "科技数码产品大全,一起来做发烧友", "url": "#" }, { "name": "软件应用", "route": "application", "tid": 230, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "超全软件应用指南", "url": "#" }, { "name": "计算机技术", "route": "computer_tech", "tid": 231, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "研究分析、教学演示、经验分享......有关计算机技术的都在这里", "url": "#" }, { "name": "科工机械", "route": "industry", "tid": 232, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "从小芯片到大工程,一起见证科工力量", "url": "#" }, { "name": "极客DIY", "route": "diy", "tid": 233, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "炫酷技能,极客文化,硬核技巧,准备好你的惊讶", "url": "#" }];
              break;
            case "生活":
              s[i].sub = [{ "name": "搞笑", "route": "funny", "tid": 138, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 273 }, "desc": "各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频", "url": "//www.bilibili.com/video/ent_funny_1.html", "locid": 4204, "recommendId": 4210, "slider": { "width": 620, "height": 220 }, "customComponent": { "name": "Energy", "leftId": 4212, "rightId": 4218, "rightType": "slide" } }, { "name": "家居房产", "route": "home", "tid": 239, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 275 }, "desc": "与买房、装修、居家生活相关的分享", "url": "#" }, { "name": "手工", "route": "handmake", "tid": 161, "ps": 15, "rps": 10, "desc": "手工制品的制作过程或成品展示、教程、测评类视频", "url": "//www.bilibili.com/video/ent-handmake-1.html" }, { "name": "绘画", "route": "painting", "tid": 162, "ps": 15, "rps": 10, "desc": "绘画过程或绘画教程,以及绘画相关的所有视频", "url": "//www.bilibili.com/video/ent-painting-1.html" }, { "name": "日常", "route": "daily", "tid": 21, "ps": 15, "rps": 10, "desc": "记录日常生活,分享生活故事", "url": "//www.bilibili.com/video/ent-life-1.html" }];
              break;
            case "鬼畜":
              s[i].sub = [{ "name": "鬼畜调教", "route": "guide", "tid": 22, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 285 }, "desc": "使用素材在音频、画面上做一定处理,达到与BGM一定的同步感", "url": "//www.bilibili.com/video/ent-Kichiku-1.html" }, { "name": "音MAD", "route": "mad", "tid": 26, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 287 }, "desc": "使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件", "url": "//www.bilibili.com/video/douga-kichiku-1.html" }, { "name": "人力VOCALOID", "route": "manual_vocaloid", "tid": 126, "ps": 15, "rps": 10, "desc": "将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术", "url": "//www.bilibili.com/video/kichiku-manual_vocaloid-1.html" }, { "name": "鬼畜剧场", "route": "theatre", "tid": 216, "ps": 15, "rps": 10, "desc": "使用素材进行人工剪辑编排的有剧情的作品" }, { "name": "教程演示", "route": "course", "tid": 127, "ps": 10, "rps": 6, "rightComponent": { "name": "CmImgList", "id": 148 }, "ad": { "active": true, "dataLocId": 289 }, "hideDropdown": false, "desc": "鬼畜相关的教程演示", "url": "//www.bilibili.com/video/kichiku-course-1.html" }];
              break;
            case "时尚":
              s[i].sub = [{ "name": "美妆护肤", "route": "makeup", "tid": 157, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 279 }, "desc": "彩妆护肤、美甲美发、仿妆、医美相关内容分享或产品测评", "url": "//www.bilibili.com/video/fashion-makeup-fitness-1.html" }, { "name": "穿搭", "route": "clothing", "tid": 158, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 281 }, "desc": "穿搭风格、穿搭技巧的展示分享,涵盖衣服、鞋靴、箱包配件、配饰(帽子、钟表、珠宝首饰)等", "url": "//www.bilibili.com/video/fashion-clothing-1.html" }, { "name": "时尚潮流", "route": "trend", "tid": 159, "ps": 15, "rps": 10, "desc": "时尚街拍、时装周、时尚大片,时尚品牌、潮流等行业相关记录及知识科普", "url": "#" }];
              break;
            case "广告":
              s[i].name = "资讯";
              s[i].route = "information";
              s[i].tid = 202;
              s[i].sub = [{ "name": "热点", "route": "hotspot", "tid": 203, "ps": 18, "rps": 10, "desc": "全民关注的时政热门资讯" }, { "name": "环球", "route": "global", "tid": 204, "ps": 18, "rps": 10, "desc": "全球范围内发生的具有重大影响力的事件动态" }, { "name": "社会", "route": "social", "tid": 205, "ps": 18, "rps": 10, "desc": "日常生活的社会事件、社会问题、社会风貌的报道" }, { "name": "综合", "route": "multiple", "tid": 206, "ps": 18, "rps": 10, "desc": "除上述领域外其它垂直领域的综合资讯" }];
              break;
            case "娱乐":
              s[i].sub = [{ "name": "综艺", "route": "variety", "tid": 71, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 267 }, "desc": "所有综艺相关,全部一手掌握!", "url": "//www.bilibili.com/video/ent-variety-1.html" }, { "name": "娱乐杂谈", "route": "talker", "tid": 241, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 269 }, "desc": "娱乐人物解读、娱乐热点点评、娱乐行业分析" }, { "name": "粉丝创作", "route": "fans", "tid": 242, "ps": 15, "rps": 10, "desc": "粉丝向创作视频" }, { "name": "明星综合", "route": "celebrity", "tid": 137, "ps": 15, "rps": 10, "desc": "娱乐圈动态、明星资讯相关" }];
              break;
          }
        });
      });
      this.plaza();
      this.indexIcon();
      this.styleFix();
    }
    static banner() {
      jsonpHook.async("api.bilibili.com/x/web-show/res/loc", (url) => {
        const rid = this.rid;
        this.record[rid] || (this.record[rid] = apiPageHeader({ resource_id: rid }));
        return true;
      }, async (url) => {
        const obj = new URL(url);
        const rid = this.rid;
        obj.searchParams.delete("callback");
        url = obj.toJSON();
        _Header.prid && (url.includes(String(_Header.prid)) || (url = url.replace("ids=", \`ids=\${_Header.prid}%2C\`)));
        const loc = await fetch(url).then((d) => d.json());
        const header = await this.record[rid];
        if (loc.data) {
          this.locs.forEach((d) => {
            loc.data[d] && (loc.data[d][0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png", loc.data[d][0].litpic = header && header.litpic, loc.data[d][0].url = header && header.url || "", loc.data[d][0].title = header && header.name || "");
            if (url.includes("loc?") && obj.searchParams.get("id") == String(d)) {
              loc.data[0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png";
              loc.data[0].litpic = header && header.litpic || "";
              loc.data[0].url = header && header.url || "";
              loc.data[0].title = header && header.name || "";
            }
          });
        }
        return loc;
      }, false);
    }
    /** 顶栏广场 */
    static plaza() {
      jsonpHook.async("api.bilibili.com/plaza/banner", () => true, async () => {
        return { "code": 0, "result": [{ "link": "https://www.bilibili.com/blackboard/x/act_list", "end": 1640966407, "begin": 1456709887, "title": "bilibili 活动", "cover": "http://i0.hdslb.com/bfs/square/6830d0e479eee8cc9a42c3e375ca99a5147390cd.jpg", "id": 9, "created_ts": 1491386053 }, { "link": "http://www.bilibili.com/blackboard/topic_list.html", "end": 1640966418, "begin": 1544258598, "title": "话题列表", "cover": "http://i0.hdslb.com/bfs/square/b1b00a0c3ce8570b48277ae07a2e55603a4a4ddf.jpg", "id": 17, "created_ts": 1491386030 }] };
      }, false);
    }
    // 已失效 2023-09-18
    /** 顶栏动图 */
    static indexIcon() {
      jsonpHook.async("api.bilibili.com/x/web-interface/index/icon", void 0, async () => {
        return {
          code: 0,
          data: subArray(index_icon_default.fix),
          message: "0",
          ttl: 1
        };
      }, false);
    }
    /** 消息页面样式 */
    static message() {
      addCss(message_default, "message");
    }
    /** 顶栏动态记录参数失效,另行找补 */
    static videoOffset() {
      if (uid) {
        const offset3 = getCookies()[\`bp_video_offset_\${uid}\`];
        if (offset3) {
          setCookie(\`bp_t_offset_\${uid}\`, offset3);
        }
      }
    }
    /** 迷你顶栏 */
    miniHeader() {
      this.oldHeader.classList.remove("has-menu");
    }
    /** 是否mini顶栏 */
    static isMiniHead(d) {
      if (/\\/v\\/(douga|music|dance|game|knowledge|tech|life|kichiku|fashion|information|ent|cinephile|car|sports|animal)\\//.test(location.href))
        return true;
      if (/\\/mooc\\//.test(location.href))
        return true;
      return location.href.includes("blackboard/topic_list") || location.href.includes("blackboard/x/act_list") || document.querySelector(".large-header") || document.querySelector(".bili-banner") || (d == null ? void 0 : d.getAttribute("type")) == "all" ? false : true;
    }
    constructor() {
      this.oldHeader.className = "z-top-container has-menu";
      this.hookHeadV2();
      this.feedCount();
      poll(() => document.readyState === "complete", () => this.styleClear());
    }
    /** 监听新版顶栏 */
    hookHeadV2() {
      poll(() => {
        return document.querySelector("#internationalHeader") || document.querySelector("#biliMainHeader") || document.querySelector("#bili-header-container") || document.querySelector("#home_nav") || document.querySelector(".bili-header__bar");
      }, (d) => {
        _Header.isMiniHead(d) && this.miniHeader();
        this.loadOldHeader(d);
      });
      poll(() => document.querySelector(".z_top_container"), (d) => {
        this.loadOldHeader(d);
        document.querySelector(".header").style.display = "none";
      });
    }
    /** 已加载旧版顶栏 */
    oldHeadLoaded = false;
    /** 旧版顶栏节点 */
    oldHeader = document.createElement("div");
    /** 加载旧版顶栏 */
    loadOldHeader(target) {
      if (target) {
        if (target.className === "bili-header__bar") {
          addCss('.bili-header.large-header,.header-channel,.z-top-container.has-menu[type="all"] {display: none;}');
        }
        document.body.classList.remove("header-v3");
        target.style.display = "none";
        target.hidden = true;
      }
      if (this.oldHeadLoaded)
        return;
      this.oldHeadLoaded = true;
      addCss("#internationalHeader,#biliMainHeader,#bili-header-container{display: none;}");
      document.body.insertBefore(this.oldHeader, document.body.firstChild);
      (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//s1.hdslb.com/bfs/seed/jinkela/header/header.js")).then(() => {
        _Header.styleFix();
      });
      _Header.primaryMenu();
      _Header.banner();
    }
    loadOldFooter(target) {
      addElement("div", { class: "footer bili-footer report-wrap-module" }, document.body, void 0, void 0, target);
      (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//static.hdslb.com/common/js/footer.js")).then(() => {
        var _a3;
        target && (target.style.display = "none");
        this.styleClear();
        addCss(".bili-footer {position: relative;}");
        (_a3 = document.getElementsByClassName("bili-header-m")[1]) == null ? void 0 : _a3.remove();
      });
    }
    static fullBannerCover = false;
    /** 顶栏样式修复 */
    static styleFix() {
      addCss(".nav-item.live {width: auto;}.lt-row {display: none !important;} .bili-header-m #banner_link{background-size: cover;background-position: center !important;}", "lt-row-fix");
      addCss(avatar_animation_default, "avatarAnimation");
      this.fullBannerCover && addCss(".bili-header-m #banner_link{height: 9.375vw !important;min-width: 1000px;min-height: 155px;max-height: 240px;}");
    }
    /** 禁用新版顶栏相关样式 */
    async styleClear() {
      var _a3;
      const d = document.styleSheets;
      for (let i = 0; i < d.length; i++) {
        ((_a3 = d[i].href) == null ? void 0 : _a3.includes("laputa-header")) && (d[i].disabled = true);
      }
      _Header.styleFix();
    }
    /** 顶栏动态直播回复数目接口失效,强制标记为0 */
    feedCount() {
      xhrHook.async("api.live.bilibili.com/ajax/feed/count", void 0, async () => {
        const response = '{ "code": 0, "data": { "count": 0 }, "message": "0" }';
        return { response, responseText: response };
      }, false);
    }
  };

  // src/page/space.ts
  init_tampermonkey();

  // src/io/account-getcardbymid.ts
  init_tampermonkey();
  async function accountGetCardByMid(mid) {
    const response = await GM.fetch(objUrl(URLS.ACCOUNT_GETCARDBYMID, { mid }));
    const json = await response.json();
    return jsonCheck(json).card;
  }

  // src/json/mid.json
  var mid_default = {
    code: 0,
    data: {
      birthday: "1980-01-01",
      coins: 0,
      face: "http://i2.hdslb.com/bfs/face/9f10323503739e676857f06f5e4f5eb323e9f3f2.jpg",
      fans_badge: false,
      is_followed: true,
      jointime: 1436351229,
      level: 6,
      mid: 11783021,
      moral: 0,
      name: "哔哩哔哩番剧出差",
      official: {
        type: 1,
        desc: "哔哩哔哩番剧出差 官方账号"
      },
      pendant: {
        pid: 0,
        name: "",
        image: "",
        expire: 0
      },
      rank: "10000",
      sex: "保密",
      sign: "",
      silence: 0,
      sys_notice: {},
      theme: {},
      user_honour_info: {
        colour: null,
        mid: 0,
        tags: null
      },
      vip: {
        avatar_subscript: 1,
        avatar_subscript_url: "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
        due_date: 16557408e5,
        label: {
          bg_color: "#FB7299",
          bg_style: 1,
          border_color: "",
          label_theme: "annual_vip",
          path: "",
          text: "年度大会员",
          text_color: "#FFFFFF"
        },
        nickname_color: "#FB7299",
        role: 3,
        status: 1,
        theme_type: 0,
        type: 2,
        vip_pay_type: 1
      }
    },
    message: "0",
    ttl: 1
  };

  // src/utils/hook/fetch.ts
  init_tampermonkey();
  var FetchHook = class _FetchHook {
    static inited = false;
    static rules = /* @__PURE__ */ new Set();
    static init() {
      const fetch2 = self.fetch;
      self.fetch = (input, init) => {
        var _a3;
        const url = input instanceof Request ? input.url : typeof input === "string" ? input : input.toJSON();
        const obj = { input: url, init };
        let fetchHook;
        for (const rule of this.rules) {
          if (rule && rule.urls.every((d) => url.includes(d))) {
            (_a3 = rule.\$request) == null ? void 0 : _a3.call(rule, obj);
            rule.\$response && (fetchHook = rule);
          }
        }
        if (fetchHook) {
          return new Promise((resolve, reject) => {
            if (fetchHook.noRequest) {
              fetchHook.\$response().then((d) => {
                d ? resolve(new Response(d, { status: 200, statusText: "" })) : reject();
              }).catch(reject);
            } else {
              fetch2(obj.input, obj.init).then(async (d) => {
                const res = await fetchHook.\$response(d.clone());
                resolve(res ? new Response(res, { status: d.status, statusText: d.statusText, headers: d.headers }) : d);
              }).catch(reject);
            }
          });
        }
        return fetch2(obj.input, obj.init);
      };
      this.inited = true;
    }
    urls;
    /** 不发送原始请求 */
    noRequest = false;
    /** 取消本次拦截 */
    noModify = false;
    constructor(...urls) {
      _FetchHook.inited || _FetchHook.init();
      this.urls = urls;
      _FetchHook.rules.add(this);
    }
    \$request;
    /**
     * 拦截修改fetch请求
     * 
     * @param callback 修改请求的回调函数,将fetch参数包裹为对象传入,修改对应属性即可。
     */
    request(callback) {
      this.\$request = callback;
    }
    \$response;
    /**
     * 拦截修改fetch返回值
     * 
     * @param callback 修改返回值的回调函数,将原Response传入,异步返回新返回值即可,也可以不反悔任何值,表示使用不修改原始值
     * @param noRequest 不发送原始请求,callback中将不会原Response。通常用于不依赖原始返回值便能构造新返回值的情形。此时callback必须返回值!
     */
    response(callback, noRequest = false) {
      this.\$response = callback;
      this.noRequest = noRequest;
    }
  };

  // src/utils/vdomtool.ts
  init_tampermonkey();
  var VdomTool = class {
    vdom;
    constructor(html) {
      if (typeof html === "string") {
        this.vdom = htmlVnode(html);
      } else {
        this.vdom = html;
      }
    }
    /** 生成 DocumentFragment(会过滤script标签,请稍后使用\`loadScript\`方法依次运行所有script) */
    toFragment() {
      const fragment = document.createDocumentFragment();
      this.vdom.forEach((d) => {
        fragment.appendChild(this.createElement(d));
      });
      return fragment;
    }
    /** 根据vdom生成真DOM(过滤script标签) */
    createElement(element) {
      if (element.tagName === "text") {
        return document.createTextNode(element.text);
      }
      if (element.tagName === "svg") {
        return this.createSVG(element);
      }
      const node = document.createElement(element.tagName);
      element.props && Object.entries(element.props).forEach((d) => {
        node.setAttribute(d[0], d[1]);
      });
      element.text && node.appendChild(document.createTextNode(element.text));
      element.event && Object.entries(element.event).forEach((d) => {
        node.addEventListener(...d);
      });
      if (element.tagName === "script") {
        node.async = false;
      }
      element.children && element.children.forEach((d) => {
        node.appendChild(this.createElement(d));
      });
      return node;
    }
    /** svg限定生成方法 */
    createSVG(element) {
      const node = document.createElementNS("http://www.w3.org/2000/svg", element.tagName);
      element.props && Object.entries(element.props).forEach((d) => {
        node.setAttribute(d[0], d[1]);
      });
      element.children && element.children.forEach((d) => {
        node.appendChild(this.createSVG(d));
      });
      return node;
    }
    /** 添加为目标节点的子节点 */
    appendTo(node) {
      try {
        node.append(this.toFragment());
      } catch (e) {
        debug.error(e);
      }
    }
    /** 替换目标节点 */
    replace(node) {
      try {
        node.replaceWith(this.toFragment());
      } catch (e) {
        debug.error(e);
      }
    }
    addEventListener(target, type, listener) {
      try {
        const arr2 = target.split("");
        let dom = this.vdom;
        let ele;
        while (dom && arr2.length) {
          const i = Number(arr2.shift());
          if (i) {
            ele = dom[i];
            dom = ele.children;
          }
        }
        ele.event || (ele.event = {});
        ele.event[type] = listener;
      } catch (e) {
        debug.error(e);
      }
    }
    removeEventListener(target, type) {
      var _a3;
      try {
        const arr2 = target.split("");
        let dom = this.vdom;
        let ele;
        while (dom && arr2.length) {
          const i = Number(arr2.shift());
          if (i) {
            ele = dom[i];
            dom = ele.children;
          }
        }
        (_a3 = ele.event) == null ? true : delete _a3[type];
      } catch (e) {
        debug.error(e);
      }
    }
  };

  // src/page/space.ts
  var Mid = {
    11783021: "哔哩哔哩番剧出差",
    1988098633: "b站_戲劇咖",
    2042149112: "b站_綜藝咖"
  };
  var PageSpace = class {
    mid;
    /** 失效视频aid */
    aids = [];
    aidInfo = [];
    constructor() {
      this.mid = Number(BLOD.path[3] && BLOD.path[3].split("?")[0]);
      this.midInfo();
      user.addCallback((status) => {
        status.album && this.album();
        status.jointime && this.jointime();
        status.lostVideo && this.lostVideo();
      });
    }
    /** 修复限制访问up空间 */
    midInfo() {
      switch (this.mid) {
        case 11783021:
        case 1988098633:
        case 2042149112:
          mid_default.data.mid = this.mid;
          mid_default.data.name = mid_default.data.official.desc = (Mid[this.mid] || Mid[11783021]) + " 官方帐号";
          xhrHook("acc/info?", void 0, (obj) => {
            if (obj.responseText && obj.responseText.includes("-404")) {
              obj.response = obj.responseText = JSON.stringify(mid_default);
              toast.warning("该用户被404,已使用缓存数据恢复访问!");
            } else if (obj.responseType === "blob" && obj.response.size === 46) {
              obj.response = new Blob([JSON.stringify(mid_default)], { type: "application/json" });
              toast.warning("该用户被404,已使用缓存数据恢复访问!");
            }
          }, false);
          new FetchHook("acc/info?").response(async (res) => {
            const text = await res.text();
            if (text.includes("-404")) {
              return JSON.stringify(mid_default);
            }
          });
          break;
        default:
          break;
      }
    }
    /** 还原相簿 */
    album() {
      xhrHook("api.bilibili.com/x/dynamic/feed/draw/doc_list", void 0, (obj) => {
        const response = JSON.parse(obj.responseText);
        let data = response.data.items.reduce((s, d) => {
          s.push(d.doc_id);
          return s;
        }, []);
        setTimeout(() => {
          document.querySelectorAll(".album-card").forEach((d, i) => {
            d.firstChild.href = \`//h.bilibili.com/\${data[i]}\`;
            d.children[1].href = \`//h.bilibili.com/\${data[i]}\`;
          });
        }, 1e3);
      }, false);
    }
    /** 动态重定向回相簿 */
    static album() {
      xhrHook(["x/polymer/web-dynamic", "detail?"], void 0, (res) => {
        var _a3;
        const result = res.responseType === "json" ? res.response : JSON.parse(res.response);
        if (result.code === 0) {
          if (((_a3 = result.data) == null ? void 0 : _a3.item.type) === "DYNAMIC_TYPE_DRAW")
            location.replace(\`https://h.bilibili.com/\${result.data.item.basic.rid_str}\`);
        }
      }, false);
    }
    /** 注册时间 */
    jointime() {
      poll(() => document.querySelector(".section.user-info"), (t) => {
        accountGetCardByMid(this.mid).then((d) => {
          const jointime = timeFormat(d.regtime * 1e3, true);
          const node = t.lastChild;
          new VdomTool(\`<div class="info-regtime" style="display: inline-block;word-break: break-all;">
                    <span class="info-command" style="display: inline-block;font-size: 12px;font-family: Microsoft YaHei;line-height: 16px;color: #9499a0;margin-right: 16px;">注册</span>
                    <span class="info-value" style="color: #6d757a;font-family: Microsoft YaHei;font-size: 12px;line-height: 16px;padding-right: 15px;">\${jointime}</span>
                </div>\`).appendTo(node);
        });
      });
    }
    /** 失效视频 */
    lostVideo() {
      xhrHook("x/v3/fav/resource/list", void 0, async (res) => {
        var _a3;
        try {
          const data = jsonCheck(res.response);
          (_a3 = data.data) == null ? true : delete _a3.ttl;
          if (data.data.medias) {
            data.data.medias.forEach((d) => {
              d.attr % 2 && this.aids.push(d.id);
            });
          }
          if (this.aids.length) {
            const msg = toast.list("失效视频 >>>", "> " + this.aids.join(" "));
            this.lostVideoView().then(() => {
              setTimeout(() => {
                msg.push("> 数据返回,正在修复~");
                let resolve = 0, reject = 0;
                msg.type = "success";
                const ele = document.querySelector("#page-fav");
                if (ele) {
                  const medias = ele.__vue__.favListDetails.medias;
                  medias == null ? void 0 : medias.forEach((d) => {
                    var _a4, _b2;
                    if (d.attr % 2) {
                      msg.push(\`> av\${d.id}\`);
                      if (this.aidInfo[d.id].title) {
                        resolve++;
                        d.title = this.aidInfo[d.id].title;
                        msg.push(">" + this.aidInfo[d.id].title);
                      } else {
                        reject++;
                        d.title = \`av\${d.id}\`;
                        msg.push("> 未能获取到有效信息!");
                      }
                      this.aidInfo[d.id].cover && (d.cover = this.aidInfo[d.id].cover);
                      d.attr = 0;
                      (_b2 = (_a4 = ele.querySelector(\`[data-aid=\${d.bvid}]\`)) == null ? void 0 : _a4.children[1]) == null ? void 0 : _b2.setAttribute("style", "text-decoration : line-through;color : #ff0000;");
                    }
                  });
                }
                msg.push("> ", \`> 修复结束:成功 \${resolve} 失败 \${reject}\`);
                msg.delay = 4;
              }, 100);
            });
          }
        } catch {
        }
      }, false);
    }
    lostVideoView() {
      const arr2 = [];
      while (this.aids.length) {
        arr2.push((async () => {
          const d = this.aids.shift();
          if (this.aidInfo[d])
            return;
          let title, cover;
          await GM.fetch(\`//www.biliplus.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
            if (d2.match(/\\<title\\>.+?\\ \\-\\ AV/)) {
              title = d2.match(/\\<title\\>.+?\\ \\-\\ AV/)[0].replace(/<title>/, "").replace(/ - AV/, "");
              cover = d2.match(/\\<img style=\\"display:none\\"\\ src=\\".+?\\"\\ alt/)[0].replace(/<img style="display:none" src="/, "").replace(/" alt/, "");
            }
          }).catch((e) => {
            debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUS", e);
          });
          if (!title || !cover) {
            await GM.fetch(\`//www.biliplus.com/all/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
              if (d2.match("/api/view_all?")) {
                const url = d2.match(/\\/api\\/view_all\\?.+?\\',cloudmoe/)[0].replace(/\\',cloudmoe/, "");
                return GM.fetch(\`//www.biliplus.com\${url}\`);
              }
              throw new Error("无cid缓存");
            }).then((d2) => d2.json()).then((d2) => {
              d2 = jsonCheck(d2);
              title = title || d2.data.info.title;
              cover = cover || d2.data.info.pic;
            }).catch((e) => {
              debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUSALL", e);
            });
          }
          if (!title || !cover) {
            await GM.fetch(\`//www.jijidown.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
              if (d2.match("window._INIT")) {
                title = title || d2.match(/\\<title\\>.+?\\-哔哩哔哩唧唧/)[0].replace(/<title>/, "").replace(/-哔哩哔哩唧唧/, "");
                cover = cover || d2.match(/\\"img\\":\\ \\".+?\\",/)[0].match(/http.+?\\",/)[0].replace(/",/, "");
              }
            }).catch((e) => {
              debug.error(\`获取失效视频av\${d}信息错误\`, "JIJIDOWN", e);
            });
          }
          cover = cover && cover.replace("http:", "");
          this.aidInfo[d] = { title, cover };
        })());
      }
      return Promise.all(arr2);
    }
  };

  // src/page/media.ts
  init_tampermonkey();
  var PageMedia = class {
    constructor() {
      this.limit();
    }
    /** 解除限制 */
    limit() {
      xhrHook("user/status", void 0, (res) => {
        try {
          const result = jsonCheck(res.response);
          result.result.area_limit = 0;
          result.result.ban_area_show = 0;
          res.responseType === "json" ? res.response = result : res.response = res.responseText = JSON.stringify(result);
        } catch (e) {
        }
      }, false);
    }
  };

  // src/page/history.ts
  init_tampermonkey();
  var PageHistory = class {
    constructor() {
      user.addCallback((status) => {
        status.history && this.archive();
      });
    }
    /** 纯视频历史记录 */
    archive() {
      xhrHook(["api.bilibili.com/x/web-interface/history/cursor", "business"], function(args) {
        let obj = new URL(args[1]), max2 = obj.searchParams.get("max") || "", view_at = obj.searchParams.get("view_at") || "";
        args[1] = objUrl("//api.bilibili.com/x/web-interface/history/cursor", { max: max2, view_at, type: "archive", ps: "20" });
      }, void 0, false);
    }
  };

  // src/page/live.ts
  init_tampermonkey();

  // src/core/report.ts
  init_tampermonkey();
  var Cache = class {
    fpriskMsg = {};
  };
  var EventTracker = class {
    extMsgs = {};
    legalContainer = "report-wrap-module";
    bindEvent() {
    }
    bindHeatMapEvent() {
    }
    checkContainer() {
    }
    eventCB() {
    }
    handleSelfDefReport() {
    }
    todo() {
    }
  };
  var LoadTracker = class {
    msg = {};
    showRawPerformance() {
    }
    todo() {
    }
  };
  var PvTracker = class {
    extMsgs = {};
    _uuid = "";
    sendPV() {
    }
    todo() {
    }
  };
  var ScrollTracker = class {
    extMsgs = {};
    ignoreHidden = true;
    reportedIds = [];
    scrollDivClass = "";
    scrollLintenerFns = [];
    scrollMsg = {};
    scrollReportOffset = 200;
    scrollSubDivClass = "";
    addScrollListenNode() {
    }
    checkScroll() {
    }
    customReport() {
    }
    getOffset() {
    }
    inView() {
    }
    judgeAppear() {
    }
    judgeCustom() {
    }
    judgeHidden() {
    }
    judgeSubAppear() {
    }
    removeScrollListenNode() {
    }
    subInView() {
    }
    todo() {
    }
    todoCustom() {
    }
  };
  var reportConfig = { msgObjects: "spmReportData", sample: -1, scrollTracker: false };
  var reportMsgObj = {};
  var ReportObserver = class {
    constructor() {
      propertyHook(window, "reportObserver", this);
      propertyHook(window, "reportConfig", reportConfig);
    }
    cache = new Cache();
    eventTracker = new EventTracker();
    loadTracker = new LoadTracker();
    pvTracker = new PvTracker();
    scrollTracker = new ScrollTracker();
    forceCommit() {
    }
    importTracker() {
    }
    init() {
    }
    initBsource() {
    }
    initTracker() {
    }
    reportCustomData() {
    }
    reportWithAdditionalParam() {
    }
    reportWithSpmPrefix() {
    }
    sendPV() {
    }
    sendPerformance() {
    }
    setSPM_id() {
    }
    setSpeicalMsg() {
    }
    updateConfig() {
    }
  };
  var statisObserverConfig = {
    blackEvents: [],
    clickConfig: { logId: "", isDoubleWrite: false },
    loadPerform: false,
    loadSpecial: false,
    performConfig: { isWrite: false },
    pvConfig: { isDoubleWrite: false, logId: "", selfDefMsg: {} },
    selfConfig: { logId: "", isDoubleWrite: false, isSelfDefWrite: false, isDefaultWrite: false },
    spmId: ""
  };
  var StatisObserver = class {
    __bufferFuns = [];
    __initConfig = {};
    __loadedFlag = { baidu: false, error: false, event: false, perform: false, pv: false, special: false };
    __visitId = "";
    constructor() {
      propertyHook(window, "__statisObserver", this);
      propertyHook(window, "reportMsgObj", reportMsgObj);
      propertyHook(window, "__statisObserverConfig", statisObserverConfig);
    }
    addClickTracker() {
    }
    addLegalContainer() {
    }
    addSelfDefineMsg() {
    }
    forceCommit() {
    }
    getPvid() {
    }
    removeLegalContainer() {
    }
    removeSelfDefineMsg() {
    }
    sendBaidu() {
    }
    sendClickEvent() {
    }
    sendCustomMetrics() {
    }
    sendError() {
    }
    sendPV() {
    }
    sendPerform() {
    }
    sendSpecial() {
    }
    setAttrName() {
    }
    setBaseUrl() {
    }
    setErrorInterval() {
    }
    setErrorLogId() {
    }
    setEventLogId() {
    }
    setEventSendStatus() {
    }
    setPVLogId() {
    }
    setPVSendStatus() {
    }
    setPerformLogId() {
    }
    setPvid() {
    }
    setSpecialFirstLoop() {
    }
    setSpecialInterval() {
    }
    setSpecialLogId() {
    }
    setSpmId() {
    }
    startPoolListen() {
    }
    startSpecialLoop() {
    }
    stopPoolListen() {
    }
    stopSpecialLoop() {
    }
  };

  // src/core/url.ts
  init_tampermonkey();
  var paramsSet = /* @__PURE__ */ new Set([
    "spm_id_from",
    "from_source",
    "msource",
    "bsource",
    "seid",
    "source",
    "session_id",
    "visit_id",
    "sourceFrom",
    "from_spmid",
    "share_source",
    "share_medium",
    "share_plat",
    "share_session_id",
    "share_tag",
    "unique_k",
    "vd_source",
    "csource"
  ]);
  var paramArr = Object.entries({
    from: ["search"]
  });
  var UrlCleaner = class {
    /** 垃圾参数序列 */
    paramsSet = paramsSet;
    /** 精准爆破序列 */
    paramArr = paramArr;
    constructor() {
      var _a3;
      this.location();
      (_a3 = window.navigation) == null ? void 0 : _a3.addEventListener("navigate", (e) => {
        const newURL = this.clear(e.destination.url);
        if (e.destination.url != newURL) {
          e.preventDefault();
          if (newURL == window.location.href)
            return;
          if (e.navigationType !== "traverse") {
            this.updateLocation(newURL, e.navigationType);
          }
        }
      });
      window.addEventListener("click", (e) => this.anchorClick(e));
      window.addEventListener("contextmenu", (e) => this.anchorClick(e));
      document.addEventListener("DOMContentLoaded", () => {
        this.location();
        this.anchor(document.querySelectorAll("a"));
      }, { once: true });
    }
    /** 净化url */
    clear(str) {
      const url = new URL2(str);
      if (url && !str.includes("passport.bilibili.com")) {
        const params = url.params;
        if (params.bvid) {
          params.aid = AV.fromBV(params.bvid);
        }
        if (params.aid && !Number(params.aid)) {
          params.aid = AV.fromBV(params.aid);
        }
        paramsSet.forEach((d) => {
          delete params[d];
        });
        paramArr.forEach((d) => {
          if (params[d[0]]) {
            if (d[1].includes(params[d[0]])) {
              delete params[d[0]];
            }
          }
        });
        url.base = AV.fromStr(url.base);
        url.hash && (url.hash = AV.fromStr(url.hash));
        return url.toJSON();
      } else
        return str;
    }
    /** 净化URL */
    location() {
      this.updateLocation(this.clear(location.href));
    }
    /** 更新URL而不触发重定向 */
    updateLocation(url, fun) {
      const Url = new self.URL(url);
      if (Url.host === location.host) {
        if (fun === "push") {
          window.history.pushState(window.history.state, "", url);
        } else {
          window.history.replaceState(window.history.state, "", url);
        }
      }
    }
    /** 点击回调 */
    anchorClick(e) {
      var f = e.target;
      for (; f && "A" !== f.tagName; ) {
        f = f.parentNode;
      }
      if ("A" !== (f == null ? void 0 : f.tagName)) {
        return;
      }
      this.anchor([f]);
    }
    /** 净化a标签 */
    anchor(list) {
      list.forEach((d) => {
        if (!d.href)
          return;
        d.href = this.clear(d.href);
      });
    }
  };
  var urlCleaner = new UrlCleaner();

  // src/page/live.ts
  var PageLive = class {
    sleep = false;
    constructor() {
      user.addCallback((status) => {
        status.disableSleepChcek && this.disAbleSleepCheck();
        status.disableReport && new StatisObserver();
      });
      this.urlClean();
    }
    /** 添加url清理参数 */
    urlClean() {
      urlCleaner.paramsSet.add("broadcast_type");
      urlCleaner.paramsSet.add("is_room_feed");
    }
    /** 禁止挂机检测 */
    disAbleSleepCheck() {
      const setInterval2 = self.setInterval;
      const setTimeout2 = self.setTimeout;
      self.setInterval = (...args) => {
        if (args[1] === 3e5) {
          if (!this.sleep) {
            this.sleep = true;
            toast.warning("成功阻止直播间挂机检测!");
          }
          return Number.MIN_VALUE;
        }
        return setInterval2.call(self, ...args);
      };
      self.setTimeout = (...args) => {
        if (args[1] === 3e5) {
          if (!this.sleep) {
            this.sleep = true;
            toast.warning("成功阻止直播间挂机检测!");
          }
          return Number.MIN_VALUE;
        }
        return setTimeout2.call(self, ...args);
      };
    }
  };

  // src/page/dynamic.ts
  init_tampermonkey();
  var PageDynamic = class {
    constructor() {
      user.addCallback((status) => {
        status.liveRecord || this.liveRecord();
      });
    }
    liveRecord() {
      xhrHook("api.bilibili.com/x/polymer/web-dynamic/v1/feed/all", void 0, (r) => {
        try {
          const response = jsonCheck(r.response);
          response.data.items = response.data.items.filter((d) => {
            var _a3, _b2, _c, _d, _e;
            return ((_e = (_d = (_c = (_b2 = (_a3 = d.modules) == null ? void 0 : _a3.module_dynamic) == null ? void 0 : _b2.major) == null ? void 0 : _c.archive) == null ? void 0 : _d.badge) == null ? void 0 : _e.text) != "直播回放";
          });
          r.responseType === "json" ? r.response = response : r.response = r.responseText = JSON.stringify(response);
        } catch (e) {
        }
      }, false);
    }
  };

  // src/page/index.ts
  init_tampermonkey();

  // src/html/index.html
  var html_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8" />\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords"\\r\\n        content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩" />\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/home/css/home.0.4eadf4209b1762230047120e0a9945a9f3b56fd1.css" />\\r\\n    <style type="text/css">\\r\\n        /* 隐藏失效节点 */\\r\\n        #fixed_app_download,\\r\\n        #app>div.report-wrap-module.elevator-module>div.ver {\\r\\n            display: none;\\r\\n        }\\r\\n\\r\\n        /* 禁用失效节点 */\\r\\n        .bili-tab.rank-tab,\\r\\n        .bili-dropdown.rank-dropdown {\\r\\n            pointer-events: none;\\r\\n        }\\r\\n\\r\\n        /* 资讯区图标 */\\r\\n        .icon.icon_t.icon-news {\\r\\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA39pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzNhZmQ3OS04ZTViLWQ2NDItOTYxZi0yNDM2MGQyN2JhM2YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFEMzQ4MEJBNUM1MTFFQ0FGQTk5NEVFMjgwODg3M0UiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFEMzQ4MEFBNUM1MTFFQ0FGQTk5NEVFMjgwODg3M0UiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjBiNzNlZjA5LTA1ZmEtNTM0MC1iMWY3LWE4MTljMjFhYmEzMiIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjI2MDJjOTk2LTBiNzQtZDQ0MC1hMzcxLTIxN2NkM2ZlOTgzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsCIXZoAAAi+SURBVHja7Fh7TJvXFT+fwTa2MX5gXjZgg3kEJvICh6YELUujNKNb10ZpWFc17aapSxcpy1YlUjctUbt0L22VMm2NlkXLsqZJWdT0sWwlaZOmCwW1gfIMCSYYDOZhDH6ADdjGvvvOhc8YY8Bru61/9EhX97vnnnvv755z7znnfgwhBD7PxIPPOcWHNxiGWdSp0Wi2eX0+uSxJVuxyOaXIk8nkk1hj2+FwlHGyCoWiMbwfaXLCNRIEsAsFAufU9LSdLxL2jw4O21cCFGlRJpzBAUzTqnX2Qdtlti8/XFir04AqK58RieVgtxinPB6XyFBRRQf19nfDtH10Cr+Rj/XIuNvnnXQJuPFCqcznc0+YgyRoCQaD/ckq1d/HbLaLMQP0zPjmtCFN7Nq45csFzxz4IeTk6ilPJBGDLjMNJAmCmM0zMu4Ci2UEek09YBs0w+jENHR13aV9nS0fTHXe6hRpdbojPT13jy0HkDK44p72QmpKyncl8uQZEiOxY2j5JLT/0E9IfFx8EC0WDQ+WJRqUihNOVz++78nzZ14KafS/QWgJnF+eKCFypWI3Z+pIDS65xTweL7vSULLsxHE8Hj2rkRdq0Rzz/VzhLSOLIEsrtzIsCGXMbobH8DJzS8qjCuMygWAwpP7lKBhhpmAUWc46ZYZy7M+PGaAgMUkb3u7r7YWrV94Bv98PZL7d3NT0mZm6pGQdhLurFQF2dfaowt0C3anbDUODg9DR1hZq28ftnxlAbbaeWi0mgLV1danRHLZAKGQBtgPr+BbxUZM1587DG6+9Bk6nk7aNXV2078b196m2kdACttFRWr98+i+s3MeRniTf+uP90phMjOBUcskinkqlArVGAw0f1Id4uCCC1uXowOv1Qf2NOhAIBHDX2E03guAGzP1UDi3g9/lpvbGsFHL0uaF5sjQptD6Vti5rVYDD/b1aTnuRx3rt+nV0gZHhEdoetVpp7Z50g1AogPGxMdBkZdG612SiG0KQKKfLyQF1pgYK1hRCR3sHCPj80LzJiiQaYXDtVQFmZOeYlzsLKampdCEEGW56BF5RWQk7H6gCuVw+dxxYEPr8PJAmSeHjxibI0mZT+fLNm0EqlcL1a+99umxmzOmJKlxqWLhsOblzZmpraYU7nbfxJtI2mtzn9YImMxMy1GrKS2U3N2QZpGdwcnISfD7vkrndnqn1q2Yzx399lNrP7bCGeLl5emo6JLFEAl9/+KGF7288SM0pSUwEuUIx5zbWroXCoiLgs2bE71y9nsoioVbTM9JDm0NiN0PQcyRKxC2rAmx/Ypdff6IGPaiQu8cikZgWjtCMHOHCXypZHHWQJw7/ngeHNR6RSJqc8jJRjnx0E0t++iLN5UYtff+zhHTaQzM0MFRs88d0Bll1m+saO0KxcqWElgt/keyFWLy0L5IwFUOyDPQOxQQwL0/f8uGNSySWbJdzR5HshVi8tC+SME+E1VLs8HxQlZKyC3O0my13FuVuASyBIC3++TKL7SCbH9PyiVJC8s29TxPMP7lIEpkPxi9RqSD+OtavvPQ8FB0/DX0WKzVjUe1lGLm/FOKS9ayb8BE2ajAkTI+xPg7T/noOhqrKwK/eACn8IH0qZKepmtN+/ofJVW8xkulun51NWs/86W+XH12z5U0hBvPUty4A+f0JMmLez1j2PAYJXh89WbJpE1imJaAWutlavOwxQOKrsyGruR54hw5Pqxu3i7oOfh9uTCXTd4xtfPxfy20o6puELp4ovpoglVfI9v5CaPBPwQWlHWzt3dOHlEoRXoDkNDkok5SQmiRaERhH+B550GaFEkkCtHtm4HmvGhqMTeB4/1VjYpK02mG3t0SbZ5EGERSmPrOB2Xo2swZJaZXQVvxVeKf1FrQ+ooNS93HR2NlzYFLIiNXu8eFkMxNOAcbSCE8g4F5x4d/fySsW8N/4DbPjnBkc7nWgvP4q4FocuJhMLMsvLSDf/lGB3J9FknfeA/iasXS+jUGMTd5K4NK+FOAfe44Z7LopnHv7OsEx7hAqkuciCfsdmovlURlpkhy89WcFWa1+hkgVILS0Anm4wKerqBHAweonXd1N9yLQ3Fw9+pxjywJMksmewTRPf98jkC2eZHrYvIDPruv0Z8OfGzuhbE8pkOpfAsyOgKbQQGuINwC5+RGQzjvAFK8BYh0G3mM7WH76fH86ndv/8iWGbNDDW7e9MDNkhfUBEPBU2ZB7tgGCY/0FfQerC/q7m4yRABf5QVS1w3jzWt/hvdA/JaXgkGZScqCm9haAZhN0GPLh/vRiYDUYWpwxbAJIl8Hsm/+gIClx4Nj6e9u2B4/WnATeE3vhSkc3O5+Bzu1nlc0qYi6iDHd78Syu6Adp5qHJUPLj+V2p9z1O9C80BAsvuMiGdwkRP11L37F6vTaIfhJL+dbt5OBT3yL1b9cQ4h+ec2xsffujK5R39IXfEk4WC8qqD5wkca+4yKYmQgu2sQ/9bzQ/uARgWBb9KxyIE+y+PUF4R7qoQ0XHah60UnAcSORvrdpNN4BtVdE9RLn7Z7Qgf3jMSUFzfARWdtlMx+PYlR7uUQHiTyPUIg7efMJEJ0QNNgy4QxGgd8JPeRzhwqh13BD+aUDZHadM7sjIgWOY94gX50QLIWhUxnIajI92tfGPFv7g8bknoO1Zg1aUkS9k2DNy3LNHOPDQ16CYTbFOmueGbjn2Lq2dxXtg16MZ8M/f1bNuyQi1bR6oa3ZKjmaOwE4yAC5RHpjaP4REYwNk1Mv4cco0UJSpGUfzAzDx+nOHAsHAGXaaiys66mjZCqo/MOXfyG6nnHu/snnKVwRPXWKqDtwLF88PUzkEp01LBLPVTUHixcoR2on5SCVwfhJ9IveHayGxCFqSlcrzozbbqZh/v60YS1nAbpf3zj6TTZgvWBjb7Vs6FvuvnfwjvH74B0aZQv5sIBAwrfaP8FMDjIuLu6ooMGz7TxNT1hkb/bP+wtXkVgT4xT/qLwD+H+jfAgwAa4KbOGyf2aUAAAAASUVORK5CYII=);\\r\\n            background-position: unset;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div id="home-app"></div>\\r\\n    <div id="app" data-server-rendered="true"></div>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/home/1.home.4eadf4209b1762230047120e0a9945a9f3b56fd1.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/home/home.4eadf4209b1762230047120e0a9945a9f3b56fd1.js"><\\/script>\\r\\n    <script src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/html/news.html
  var news_default = '<div class="r-con">\\r\\n    <div class="r-con">\\r\\n        <header style="margin-bottom: 14px">\\r\\n            <h3 style="font-size: 18px;font-weight: 400;">资讯分区正式上线啦!</h3>\\r\\n        </header>\\r\\n        <div class="carousel-module">\\r\\n            <div class="panel"><a href="https://www.bilibili.com/v/information" target="_blank"><img\\r\\n                        src="//i0.hdslb.com/bfs/archive/0747d26dbbc3bbf087d47cff49e598a326b0030c.jpg@320w_330h_1c.webp"\\r\\n                        width="260" height="280" /></a></div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>';

  // src/io/api-article-cards.ts
  init_tampermonkey();
  async function apiArticleCards(data) {
    const arr2 = [];
    if (isArray(data)) {
      arr2.push(...data);
    } else {
      Object.entries(data).forEach((d) => {
        if (d[1]) {
          (isArray(d[1]) ? d[1] : [d[1]]).forEach((t) => arr2.push(d[0] + t));
        }
      });
    }
    if (!arr2.length)
      throw new Error("输入参数不能为空!");
    const response = await fetch(objUrl(URLS.ARTICLE_CARDS, { ids: arr2.join(",") }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-index-top-rcmd.ts
  init_tampermonkey();
  async function apiIndexTopRcmd(data) {
    const response = await fetch(objUrl(URLS.INDEX_TOP_RCMD, {
      fresh_type: (data == null ? void 0 : data.fresh_type) || 3
    }), {
      credentials: (data == null ? void 0 : data.credentials) || "include"
    });
    const json = await response.json();
    return jsonCheck(json).data.item.map((d) => {
      d.author = d.owner.name;
      d.play = d.stat.view;
      d.aid = d.id;
      return d;
    });
  }

  // src/io/api-newlist.ts
  init_tampermonkey();
  async function apiNewlist(rid, ps = 30, pn = 1, type = 0) {
    const response = await fetch(objUrl(URLS.NEWLIST, { rid, type, pn, ps }));
    const json = await response.json();
    return jsonCheck(json).data.archives;
  }

  // src/io/api-season-rank-list.ts
  init_tampermonkey();
  async function apiSeasonRankList(data) {
    const response = await fetch(objUrl(URLS.SEASON_RANK_LIST, {
      season_type: data.season_type,
      day: 3
    }));
    const json = await response.json();
    return jsonCheck(json).data.list;
  }

  // src/io/api-webshow-locs.ts
  init_tampermonkey();
  async function apiWebshowLoc(id) {
    const response = await fetch(objUrl(URLS.WEBSHOW_LOCS.slice(0, -1), {
      pf: 0,
      id
    }));
    const text = await response.text();
    return jsonCheck(AV.fromStr(text)).data;
  }
  async function apiWebshowLocs(data) {
    const response = await fetch(objUrl(URLS.WEBSHOW_LOCS, {
      pf: 0,
      ids: data.ids.join(",")
    }));
    const text = await response.text();
    return jsonCheck(AV.fromStr(text)).data;
  }

  // src/utils/format/unit.ts
  init_tampermonkey();
  function unitFormat(num = 0) {
    num = 1 * num || 0;
    let unit = ["", "万", "亿"], i = unit.length - 1, dex = 1e4 ** i;
    while (dex > 1) {
      if (num >= dex) {
        num = Number((num / dex).toFixed(1));
        break;
      }
      dex = dex / 1e4;
      i--;
    }
    return num + unit[i];
  }

  // src/page/page.ts
  init_tampermonkey();
  var Page = class {
    /** 页面框架vdom */
    vdom;
    /** 初始化完成 */
    initilized = false;
    /** 禁止清除webpackJsonp */
    webpackJsonp = false;
    /**
     * @param html 页面框架
     */
    constructor(html) {
      this.updateHtml(html);
      Reflect.defineProperty(window, "_babelPolyfill", {
        configurable: true,
        set: () => true,
        get: () => void 0
      });
    }
    updateHtml(html) {
      this.vdom = new VdomTool(html);
    }
    /** 重写页面 */
    updateDom() {
      const title = document.title;
      this.webpackJsonp || Reflect.deleteProperty(window, "webpackJsonp");
      this.vdom.replace(document.documentElement);
      title && !title.includes("404") && (document.title = title);
      setTimeout(() => this.loadedCallback());
    }
    /** 重写完成回调 */
    loadedCallback() {
      this.initilized = true;
      poll(() => document.readyState === "complete", () => {
        document.querySelector("#jvs-cert") || window.dispatchEvent(new ProgressEvent("load"));
      });
    }
  };

  // src/json/recommend.txt
  var recommend_default = '{"list":[{"aid":384216562,"last_recommend":[{"mid":294646,"time":1653053871,"msg":"","uname":"毛酱·把名字还给我","face":"https://i1.hdslb.com/bfs/face/b2345c23456f93d865cdaac3905a6157f1f4ea06.jpg"}],"bvid":"BV1dZ4y187t3","typeid":20,"typename":"宅舞","title":"【祀舞】フォニイ/ phony","subtitle":"","play":8190,"review":167,"video_review":74,"favorites":244,"mid":317922,"author":"祀舞。","description":"没想到吧我又来了,依然是和小五联动。\\\\n本该418,但是520。音源传送门→BV1MY411F736\\\\n本家:sm38833751\\\\n编舞:sm39010899\\\\n摄影后期:@Toxic_Photon 超级感谢!!","create":"2022-05-20 18:45","pic":"https://i0.hdslb.com/bfs/archive/5ea4f9e3f4da0b213074a43ba14faad34e4bf62c.jpg","credit":0,"coins":557,"like":801,"duration":"3:10","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":551599512,"last_recommend":[{"mid":5242573,"time":1645000954,"msg":"","uname":"今日屁事","face":"https://i1.hdslb.com/bfs/face/ac9c605acf4a3fa523247bd8ec538d071d2b96cd.jpg"}],"bvid":"BV1mi4y117k7","typeid":138,"typename":"搞笑","title":"法国公婆怎么过情人节?公公的告白把我看呆了!!","subtitle":"","play":10165,"review":8,"video_review":17,"favorites":10,"mid":314843091,"author":"Lulu_Young","description":"偷偷学了法国婆婆的菜谱,从早上准备到晚上的晚餐!\\\\n公公超级会撒狗粮,让我教他们用中文给婆婆告白,饭后还主动洗盘子!","create":"2022-02-16 12:00","pic":"https://i2.hdslb.com/bfs/archive/f2c5bc0498a2a0dd62bc69b52aa06ed33e00ee66.jpg","credit":0,"coins":28,"like":57,"duration":"5:28","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":1,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":936614557,"last_recommend":[{"mid":294646,"time":1644835898,"msg":"","uname":"毛酱·把名字还给我","face":"https://i1.hdslb.com/bfs/face/b2345c23456f93d865cdaac3905a6157f1f4ea06.jpg"}],"bvid":"BV1TT4y197QK","typeid":31,"typename":"翻唱","title":"【翻唱】门的另一端【A. Ikari】","subtitle":"","play":8368,"review":77,"video_review":10,"favorites":95,"mid":436256,"author":"A_Ikari","description":"他对我笑了,他心里有我!(\\\\n\\\\n下载:https://pan.baidu.com/s/16L7_5GTKWWBpIj45hLgtiw?pwd=k8wf\\\\n前作:Kiss me sweet → BV1YD4y1c7qN","create":"2022-02-13 23:50","pic":"https://i1.hdslb.com/bfs/archive/e640f463171f82cc6398217e2b39b09434347184.jpg","credit":0,"coins":188,"like":371,"duration":"3:57","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":508421134,"last_recommend":[{"mid":3400252,"time":1643288342,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV1bu41117Qe","typeid":236,"typename":null,"title":"夏天也能练滑雪?美国滑雪天才少年教你足不出户上雪场","subtitle":"","play":27827,"review":24,"video_review":14,"favorites":89,"mid":1104695563,"author":"洛根滑雪Logan","description":"我是喜欢滑雪的Logan Ski,快三连关注一个~","create":"2022-01-27 16:02","pic":"https://i0.hdslb.com/bfs/archive/5feac2808035225818d8d822e24c0580ae681ef2.jpg","credit":0,"coins":54,"like":351,"duration":"4:34","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":635545046,"last_recommend":[{"mid":3400252,"time":1641821047,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV13b4y1H7uL","typeid":208,"typename":null,"title":"作弊!没有毕业证也能办回国学历认证?超干货手把手教学|海外学历学位认证攻略|留学生回国","subtitle":"","play":3284,"review":29,"video_review":22,"favorites":103,"mid":6514473,"author":"合鸟是我","description":"","create":"2022-01-10 19:02","pic":"https://i1.hdslb.com/bfs/archive/40dc8385a4cb84ff5366f1e9417b9659d6375608.jpg","credit":0,"coins":31,"like":53,"duration":"5:54","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":680501556,"last_recommend":[{"mid":3400252,"time":1641821092,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV1RS4y1T7iH","typeid":238,"typename":null,"title":"禧玛诺乱了,扛不住了","subtitle":"","play":21869,"review":195,"video_review":125,"favorites":23,"mid":273304400,"author":"住吉悍刀行","description":"关于禧玛诺涨价,和斯泰拉新款","create":"2022-01-09 20:38","pic":"https://i1.hdslb.com/bfs/archive/56b9584d1cd03a098c5b3b21679d2fd05e7af0be.jpg","credit":0,"coins":42,"like":277,"duration":"2:27","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":1,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}}]}';

  // src/page/index.ts
  var __INITIAL_STATE__ = {
    locsData: {
      23: null,
      29: null,
      31: null,
      34: null,
      40: null,
      42: null,
      44: null,
      142: null
    },
    recommendData: null
  };
  var PageIndex = class extends Page {
    constructor() {
      super(html_default);
      this.avcheck();
      window.__INITIAL_STATE__ = __INITIAL_STATE__;
      this.locsData();
      this.recommendData();
      this.roomRecommend();
      this.ranking();
      this.newlist();
      this.region();
      this.recommendSpecial();
      Header.primaryMenu();
      Header.banner();
      user.userStatus.timeLine && this.timeLine();
      this.updateDom();
    }
    locsData() {
      apiWebshowLocs({ ids: [4694, 29, 31, 34, 40, 42, 44] }).then((d) => {
        __INITIAL_STATE__.locsData[23] = this.adblock(d[4694]);
        __INITIAL_STATE__.locsData[29] = this.adblock(d[29]);
        __INITIAL_STATE__.locsData[31] = this.adblock(d[31]);
        __INITIAL_STATE__.locsData[34] = this.adblock(d[34]);
        __INITIAL_STATE__.locsData[40] = this.adblock(d[40]);
        __INITIAL_STATE__.locsData[42] = this.adblock(d[42]);
        __INITIAL_STATE__.locsData[44] = this.adblock(d[44]);
      }).catch((e) => {
        toast.error("locsData Error!", e)();
      });
    }
    recommendData() {
      apiIndexTopRcmd().then((d) => {
        if (uid) {
          __INITIAL_STATE__.recommendData = d;
          poll(() => document.querySelector(".rec-btn.prev"), () => {
            addElement(
              "span",
              { class: "rec-btn prev" },
              void 0,
              "刷新",
              void 0,
              document.querySelector(".rec-btn.prev")
            ).addEventListener("click", () => {
              apiIndexTopRcmd().then((d2) => __INITIAL_STATE__.recommendData = d2);
            });
            addElement(
              "span",
              { class: "rec-btn next" },
              void 0,
              "刷新",
              void 0,
              document.querySelector(".rec-btn.next")
            ).addEventListener("click", () => {
              apiIndexTopRcmd().then((d2) => __INITIAL_STATE__.recommendData = d2);
            });
          });
        } else {
          const one = d.splice(0, 10);
          const two = d.splice(0, 10);
          __INITIAL_STATE__.recommendData = [...one];
          jsonpHook.async("api.bilibili.com/x/web-interface/ranking/index", void 0, async (str) => {
            const obj = urlObj(str);
            if (obj) {
              if (obj.day == "7") {
                return { code: 0, data: two, message: "0", ttl: 1 };
              } else if (obj.day == "1") {
                return { code: 0, data: d, message: "0", ttl: 1 };
              }
              return { code: 0, data: one, message: "0", ttl: 1 };
            }
          }, false);
        }
      }).catch((e) => {
        toast.error("recommendData Error!", e)();
      });
    }
    /** 修复分区排行 */
    ranking() {
      poll(() => document.querySelector("#ranking_ad"), () => {
        const vue = document.querySelector("#app > div.report-wrap-module.elevator-module").__vue__;
        const ranking_ad = document.querySelector("#ranking_ad").__vue__;
        const ranking_technology = document.querySelector("#ranking_technology").__vue__;
        const ranking_digital = document.querySelector("#ranking_digital").__vue__;
        vue.config[13].morelink = "/v/information/";
        vue.config[13].name = "资讯";
        vue.config[13].tid = 202;
        vue.config[13].type = "news";
        vue.config[8].morelink = "/v/knowledge/";
        vue.config[8].name = "知识";
        vue.config[9].morelink = "/v/tech/";
        vue.config[9].name = "科技";
        ranking_ad.config.morelink = "/v/information/";
        ranking_ad.config.name = "资讯";
        ranking_ad.config.tid = 202;
        ranking_ad.config.type = "news";
        ranking_technology.config.morelink = "/v/knowledge/";
        ranking_technology.config.name = "知识";
        ranking_digital.config.morelink = "/v/tech/";
        ranking_digital.config.name = "科技";
        poll(() => document.querySelector("#ranking_news"), (d) => {
          new VdomTool(news_default).replace(d);
        });
      });
    }
    /** 修复直播推荐 */
    roomRecommend() {
      xhrHook("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRec", (args) => {
        args[1] = args[1].includes("List") ? args[1].replace("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRecList", "api.live.bilibili.com/xlive/web-interface/v1/webMain/getList?platform=web") : args[1].replace("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRecMore", "api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList?platform=web");
      }, (obj) => {
        var _a3;
        let response = (_a3 = obj.responseText) == null ? void 0 : _a3.replace(/preview_banner_list/, "preview").replace(/ranking_list/, "ranking").replace(/recommend_room_list/, "recommend");
        if (response) {
          response = JSON.parse(response);
          response.data.text_link = { text: "233秒居然能做这些!", link: "//vc.bilibili.com" };
          if (response.data.recommend) {
            for (let i = 0; i < response.data.recommend.length; i++) {
              response.data.recommend[i].pic = response.data.recommend[i].cover;
              response.data.recommend[i].link = "//live.bilibili.com" + response.data.recommend[i].link;
            }
          }
          if (response.data.preview)
            for (let i = 0; i < response.data.preview.length; i++)
              response.data.preview[i].url = response.data.preview[i].link;
          obj.response = obj.responseText = JSON.stringify(response);
        }
      }, false);
    }
    /** 用户热点最新投稿修复资讯区最新投稿 */
    newlist() {
      jsonpHook(["newlist", "rid=202"], (url) => url.replace("rid=202", "rid=203"), void 0, false);
    }
    /** 修正电影/电视剧/纪录片排行 */
    region() {
      jsonpHook("api.bilibili.com/x/web-interface/ranking/region", (url) => {
        const obj = new URL(url);
        let arr2 = void 0;
        switch (obj.searchParams.get("rid")) {
          case "23":
            arr2 = [document.querySelector("#ranking_movie"), 2, "/ranking/cinema/23/0/3"];
            break;
          case "11":
            arr2 = [document.querySelector("#ranking_teleplay"), 5, "/ranking/cinema/11/0/3"];
            break;
          case "177":
            arr2 = [document.querySelector("#ranking_documentary"), 3, "/ranking/cinema/177/0/3"];
            break;
        }
        if (arr2) {
          apiSeasonRankList({ season_type: arr2[1] }).then((d) => {
            var _a3;
            let html = \`<header class="rank-head"><h3>排行</h3><div class="bili-dropdown rank-dropdown"><span class="selected">三日</span><i class="icon icon-arrow-down"></i><ul class="dropdown-list"><li class="dropdown-item" style="display: none;">三日</li><li class="dropdown-item">一周</li></ul></div></header><div class="rank-list-wrap"><ul class="bangumi-rank-list rank-list">\`;
            for (let i = 0; i < 8; i++) {
              html += \`<li class="rank-item\${i < 3 ? " highlight" : ""}"><i class="ri-num">\${i + 1}</i><a href="\${d[i].url}" target="_blank" title="\${d[i].title} 播放:\${d[i].stat.view}" class="ri-info-wrap"><p class="ri-title">\${d[i].title}</p><span class="ri-total">\${d[i].new_ep.index_show}</span></a></li>\`;
            }
            html += \`</ul></div><a href="\${arr2[2]}" target="_blank" class="more-link">查看更多<i class="icon icon-arrow-r"></i></a>\`;
            const vnode = htmlVnode(html);
            (_a3 = vnode[1].children[0].children) == null ? void 0 : _a3.forEach((t, i) => {
              let node;
              t.event = {
                "mouseover": (e) => {
                  const target = e.target;
                  const nodes = \`<div class="bangumi-info-module" style="left: \${target.getBoundingClientRect().left}px; top: \${offset(target).top - 150}px;"><div class="v-preview clearfix"><div class="lazy-img cover"><img alt="\${d[i].title}" src="\${d[i].cover.replace("http:", "")}@72w_72h.webp" /></div><div><p class="title">\${d[i].title}</p><p class="desc">\${d[i].new_ep.index_show}</p></div></div><div class="v-data"><span class="play"><i class="icon"></i>\${unitFormat(d[i].stat.view)}</span><span class="danmu"><i class="icon"></i>\${unitFormat(d[i].stat.danmaku)}</span><span class="fav"><i class="icon"></i>\${unitFormat(d[i].stat.follow)}</span></div></div>\`;
                  node = new VdomTool(nodes).toFragment().children[0];
                  document.body.appendChild(node);
                },
                "mouseout": () => node.remove()
              };
            });
            arr2[0].replaceChildren(new VdomTool(vnode).toFragment());
          }).catch((e) => {
            debug.error(arr2[0], e);
          });
        }
        return url;
      }, void 0, false);
    }
    adblock(arr2) {
      return arr2 == null ? void 0 : arr2.filter((d) => !d.is_ad && d.id);
    }
    /** 港澳台新番时间表 */
    timeLine() {
      poll(() => {
        var _a3;
        return (_a3 = document.querySelector("#bili_bangumi > .bangumi-module")) == null ? void 0 : _a3.__vue__;
      }, (vue) => {
        apiNewlist(33).then(async (d) => {
          const eps = d.reduce((s, d2) => {
            if (d2.redirect_url && d2.owner.mid === 11783021) {
              const arr2 = d2.redirect_url.split("/");
              const ep = arr2.at(-1);
              if (ep) {
                ep.replace(/\\d+/, (e) => d2.episode_id = e);
                s[ep] = d2;
              }
            }
            return s;
          }, {});
          const cards = await apiArticleCards(Object.keys(eps));
          Object.entries(cards).forEach((d2) => {
            if (eps[d2[0]]) {
              eps[d2[0]] = Object.assign(eps[d2[0]], d2[1]);
            }
          });
          const timingData = vue.timingData;
          Object.values(eps).forEach((d2) => {
            const date = new Date(d2.pubdate * 1e3);
            for (let i = timingData.length - 1; i >= 0; i--) {
              if (date.getDay() + 1 === timingData[i].day_of_week) {
                timingData[i].episodes.push({
                  cover: d2.cover || d2.pic,
                  delay: 0,
                  delay_id: 0,
                  delay_index: "",
                  delay_reason: "",
                  ep_cover: d2.cover || d2.pic,
                  episode_id: d2.episode_id,
                  follows: d2.follow_count,
                  plays: d2.play_count,
                  pub_index: d2.desc,
                  pub_time: \`\${integerFormat(date.getHours())}:\${integerFormat(date.getMinutes())}\`,
                  pub_ts: d2.pubdate,
                  published: 1,
                  season_id: d2.season_id,
                  square_cover: d2.cover || d2.pic,
                  title: d2.title
                });
                break;
              }
            }
          });
          vue.timingData = timingData;
        }).catch((e) => {
          debug.error("港澳台新番时间表", e);
        });
      });
    }
    recommendSpecial() {
      xhrHook.async("www.bilibili.com/index/recommend.json", void 0, async () => {
        return { response: recommend_default, responseText: recommend_default, responseType: "json" };
      }, false);
    }
    avcheck() {
      const obj = urlObj(location.href);
      if (obj.aid) {
        location.replace(\`/video/av\${obj.aid}\`);
      }
    }
  };

  // src/utils/cdn.ts
  init_tampermonkey();
  var Cdn = class {
    /**
     * 
     * @param host CDN名
     * @param hash 默认文件版本哈希值
     * @param protocol url协议
     */
    constructor(host = "Github", hash, protocol = "https") {
      this.host = host;
      this.hash = hash;
      this.protocol = protocol;
    }
    /**