Diode - zombia.io

hakurei reimu buff

// ==UserScript==
// @name         Diode - zombia.io
// @namespace    http://tampermonkey.net/
// @version      0.1.1
// @description  hakurei reimu buff
// @author       rdm / AyuBloom
// @match        *://zombia.io/*
// @icon         https://cdn.glitch.global/ba7f4151-2a49-416a-985b-56301606ae3d/Screenshot%202024-08-20%20at%2014.45.55.png?v=1724140043929
// @grant        none
// @license      GNU GPL v3
// ==/UserScript==

/*
 bytebuffer.js (c) 2015 Daniel Wirtz <[email protected]>
 Backing buffer: ArrayBuffer, Accessor: Uint8Array
 Released under the Apache License, Version 2.0
 see: https://github.com/dcodeIO/bytebuffer.js for details
*/
(function (h, l) {
    if ("function" === typeof define && define.amd) define(["long"], l);
    else if ("function" === typeof require && "object" === typeof module && module && module.exports) {
        h = module;
        try {
            var t = require("long");
        } catch (v) {}
        l = l(t);
        h.exports = l;
    } else (h.dcodeIO = h.dcodeIO || {}).ByteBuffer = l(h.dcodeIO.Long);
})(this, function (h) {
    function l(a) {
        var b = 0;
        return function () {
            return b < a.length ? a.charCodeAt(b++) : null;
        };
    }
    function t() {
        var a = [],
            b = [];
        return function () {
            if (0 === arguments.length) return b.join("") + x.apply(String, a);
            1024 < a.length + arguments.length && (b.push(x.apply(String, a)), (a.length = 0));
            Array.prototype.push.apply(a, arguments);
        };
    }
    function v(a, b, c, e, k) {
        var f = 8 * k - e - 1;
        var d = (1 << f) - 1,
            g = d >> 1,
            n = -7;
        k = c ? k - 1 : 0;
        var h = c ? -1 : 1,
            q = a[b + k];
        k += h;
        c = q & ((1 << -n) - 1);
        q >>= -n;
        for (n += f; 0 < n; c = 256 * c + a[b + k], k += h, n -= 8);
        f = c & ((1 << -n) - 1);
        c >>= -n;
        for (n += e; 0 < n; f = 256 * f + a[b + k], k += h, n -= 8);
        if (0 === c) c = 1 - g;
        else {
            if (c === d) return f ? NaN : Infinity * (q ? -1 : 1);
            f += Math.pow(2, e);
            c -= g;
        }
        return (q ? -1 : 1) * f * Math.pow(2, c - e);
    }
    function y(a, b, c, e, k, f) {
        var d,
            g = 8 * f - k - 1,
            n = (1 << g) - 1,
            h = n >> 1,
            q = 23 === k ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
        f = e ? 0 : f - 1;
        var l = e ? 1 : -1,
            m = 0 > b || (0 === b && 0 > 1 / b) ? 1 : 0;
        b = Math.abs(b);
        isNaN(b) || Infinity === b
            ? ((b = isNaN(b) ? 1 : 0), (e = n))
            : ((e = Math.floor(Math.log(b) / Math.LN2)),
              1 > b * (d = Math.pow(2, -e)) && (e--, (d *= 2)),
              (b = 1 <= e + h ? b + q / d : b + q * Math.pow(2, 1 - h)),
              2 <= b * d && (e++, (d /= 2)),
              e + h >= n ? ((b = 0), (e = n)) : 1 <= e + h ? ((b = (b * d - 1) * Math.pow(2, k)), (e += h)) : ((b = b * Math.pow(2, h - 1) * Math.pow(2, k)), (e = 0)));
        for (; 8 <= k; a[c + f] = b & 255, f += l, b /= 256, k -= 8);
        e = (e << k) | b;
        for (g += k; 0 < g; a[c + f] = e & 255, f += l, e /= 256, g -= 8);
        a[c + f - l] |= 128 * m;
    }
    var g = function (a, b, c) {
        "undefined" === typeof a && (a = g.DEFAULT_CAPACITY);
        "undefined" === typeof b && (b = g.DEFAULT_ENDIAN);
        "undefined" === typeof c && (c = g.DEFAULT_NOASSERT);
        if (!c) {
            a |= 0;
            if (0 > a) throw RangeError("Illegal capacity");
            b = !!b;
            c = !!c;
        }
        this.buffer = 0 === a ? w : new ArrayBuffer(a);
        this.view = 0 === a ? null : new Uint8Array(this.buffer);
        this.offset = 0;
        this.markedOffset = -1;
        this.limit = a;
        this.littleEndian = b;
        this.noAssert = c;
    };
    g.VERSION = "5.0.1";
    g.LITTLE_ENDIAN = !0;
    g.BIG_ENDIAN = !1;
    g.DEFAULT_CAPACITY = 16;
    g.DEFAULT_ENDIAN = g.BIG_ENDIAN;
    g.DEFAULT_NOASSERT = !1;
    g.Long = h || null;
    var d = g.prototype;
    Object.defineProperty(d, "__isByteBuffer__", { value: !0, enumerable: !1, configurable: !1 });
    var w = new ArrayBuffer(0),
        x = String.fromCharCode;
    g.accessor = function () {
        return Uint8Array;
    };
    g.allocate = function (a, b, c) {
        return new g(a, b, c);
    };
    g.concat = function (a, b, c, e) {
        if ("boolean" === typeof b || "string" !== typeof b) (e = c), (c = b), (b = void 0);
        for (var k = 0, f = 0, d = a.length, u; f < d; ++f) g.isByteBuffer(a[f]) || (a[f] = g.wrap(a[f], b)), (u = a[f].limit - a[f].offset), 0 < u && (k += u);
        if (0 === k) return new g(0, c, e);
        b = new g(k, c, e);
        for (f = 0; f < d; ) (c = a[f++]), (u = c.limit - c.offset), 0 >= u || (b.view.set(c.view.subarray(c.offset, c.limit), b.offset), (b.offset += u));
        b.limit = b.offset;
        b.offset = 0;
        return b;
    };
    g.isByteBuffer = function (a) {
        return !0 === (a && a.__isByteBuffer__);
    };
    g.type = function () {
        return ArrayBuffer;
    };
    g.wrap = function (a, b, c, e) {
        "string" !== typeof b && ((e = c), (c = b), (b = void 0));
        if ("string" === typeof a)
            switch (("undefined" === typeof b && (b = "utf8"), b)) {
                case "base64":
                    return g.fromBase64(a, c);
                case "hex":
                    return g.fromHex(a, c);
                case "binary":
                    return g.fromBinary(a, c);
                case "utf8":
                    return g.fromUTF8(a, c);
                case "debug":
                    return g.fromDebug(a, c);
                default:
                    throw Error("Unsupported encoding: " + b);
            }
        if (null === a || "object" !== typeof a) throw TypeError("Illegal buffer");
        if (g.isByteBuffer(a)) return (b = d.clone.call(a)), (b.markedOffset = -1), b;
        if (a instanceof Uint8Array) (b = new g(0, c, e)), 0 < a.length && ((b.buffer = a.buffer), (b.offset = a.byteOffset), (b.limit = a.byteOffset + a.byteLength), (b.view = new Uint8Array(a.buffer)));
        else if (a instanceof ArrayBuffer) (b = new g(0, c, e)), 0 < a.byteLength && ((b.buffer = a), (b.offset = 0), (b.limit = a.byteLength), (b.view = 0 < a.byteLength ? new Uint8Array(a) : null));
        else if ("[object Array]" === Object.prototype.toString.call(a)) for (b = new g(a.length, c, e), b.limit = a.length, c = 0; c < a.length; ++c) b.view[c] = a[c];
        else throw TypeError("Illegal buffer");
        return b;
    };
    d.writeBitSet = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if (!(a instanceof Array)) throw TypeError("Illegal BitSet: Not an array");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        var e = b,
            k = a.length,
            f = k >> 3,
            d = 0;
        for (b += this.writeVarint32(k, b); f--; ) {
            var g = (!!a[d++] & 1) | ((!!a[d++] & 1) << 1) | ((!!a[d++] & 1) << 2) | ((!!a[d++] & 1) << 3) | ((!!a[d++] & 1) << 4) | ((!!a[d++] & 1) << 5) | ((!!a[d++] & 1) << 6) | ((!!a[d++] & 1) << 7);
            this.writeByte(g, b++);
        }
        if (d < k) {
            for (g = f = 0; d < k; ) g |= (!!a[d++] & 1) << f++;
            this.writeByte(g, b++);
        }
        return c ? ((this.offset = b), this) : b - e;
    };
    d.readBitSet = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        var c = this.readVarint32(a),
            e = c.value,
            k = e >> 3,
            f = 0,
            d = [];
        for (a += c.length; k--; )
            (c = this.readByte(a++)), (d[f++] = !!(c & 1)), (d[f++] = !!(c & 2)), (d[f++] = !!(c & 4)), (d[f++] = !!(c & 8)), (d[f++] = !!(c & 16)), (d[f++] = !!(c & 32)), (d[f++] = !!(c & 64)), (d[f++] = !!(c & 128));
        if (f < e) for (k = 0, c = this.readByte(a++); f < e; ) d[f++] = !!((c >> k++) & 1);
        b && (this.offset = a);
        return d;
    };
    d.readBytes = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + a > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+" + a + ") <= " + this.buffer.byteLength);
        }
        b = this.slice(b, b + a);
        c && (this.offset += a);
        return b;
    };
    d.writeInt8 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 1;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        this.view[b - 1] = a;
        c && (this.offset += 1);
        return this;
    };
    d.writeByte = d.writeInt8;
    d.readInt8 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
        }
        a = this.view[a];
        128 === (a & 128) && (a = -(255 - a + 1));
        b && (this.offset += 1);
        return a;
    };
    d.readByte = d.readInt8;
    d.writeUint8 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 1;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        this.view[b - 1] = a;
        c && (this.offset += 1);
        return this;
    };
    d.writeUInt8 = d.writeUint8;
    d.readUint8 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
        }
        a = this.view[a];
        b && (this.offset += 1);
        return a;
    };
    d.readUInt8 = d.readUint8;
    d.writeInt16 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 2;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        b -= 2;
        this.littleEndian ? ((this.view[b + 1] = (a & 65280) >>> 8), (this.view[b] = a & 255)) : ((this.view[b] = (a & 65280) >>> 8), (this.view[b + 1] = a & 255));
        c && (this.offset += 2);
        return this;
    };
    d.writeShort = d.writeInt16;
    d.readInt16 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 2 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+2) <= " + this.buffer.byteLength);
        }
        if (this.littleEndian) {
            var c = this.view[a];
            c |= this.view[a + 1] << 8;
        } else (c = this.view[a] << 8), (c |= this.view[a + 1]);
        32768 === (c & 32768) && (c = -(65535 - c + 1));
        b && (this.offset += 2);
        return c;
    };
    d.readShort = d.readInt16;
    d.writeUint16 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 2;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        b -= 2;
        this.littleEndian ? ((this.view[b + 1] = (a & 65280) >>> 8), (this.view[b] = a & 255)) : ((this.view[b] = (a & 65280) >>> 8), (this.view[b + 1] = a & 255));
        c && (this.offset += 2);
        return this;
    };
    d.writeUInt16 = d.writeUint16;
    d.readUint16 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 2 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+2) <= " + this.buffer.byteLength);
        }
        if (this.littleEndian) {
            var c = this.view[a];
            c |= this.view[a + 1] << 8;
        } else (c = this.view[a] << 8), (c |= this.view[a + 1]);
        b && (this.offset += 2);
        return c;
    };
    d.readUInt16 = d.readUint16;
    d.writeInt32 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 4;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        b -= 4;
        this.littleEndian
            ? ((this.view[b + 3] = (a >>> 24) & 255), (this.view[b + 2] = (a >>> 16) & 255), (this.view[b + 1] = (a >>> 8) & 255), (this.view[b] = a & 255))
            : ((this.view[b] = (a >>> 24) & 255), (this.view[b + 1] = (a >>> 16) & 255), (this.view[b + 2] = (a >>> 8) & 255), (this.view[b + 3] = a & 255));
        c && (this.offset += 4);
        return this;
    };
    d.writeInt = d.writeInt32;
    d.readInt32 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+4) <= " + this.buffer.byteLength);
        }
        if (this.littleEndian) {
            var c = this.view[a + 2] << 16;
            c |= this.view[a + 1] << 8;
            c |= this.view[a];
            c += (this.view[a + 3] << 24) >>> 0;
        } else (c = this.view[a + 1] << 16), (c |= this.view[a + 2] << 8), (c |= this.view[a + 3]), (c += (this.view[a] << 24) >>> 0);
        b && (this.offset += 4);
        return c | 0;
    };
    d.readInt = d.readInt32;
    d.writeUint32 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 4;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        b -= 4;
        this.littleEndian
            ? ((this.view[b + 3] = (a >>> 24) & 255), (this.view[b + 2] = (a >>> 16) & 255), (this.view[b + 1] = (a >>> 8) & 255), (this.view[b] = a & 255))
            : ((this.view[b] = (a >>> 24) & 255), (this.view[b + 1] = (a >>> 16) & 255), (this.view[b + 2] = (a >>> 8) & 255), (this.view[b + 3] = a & 255));
        c && (this.offset += 4);
        return this;
    };
    d.writeUInt32 = d.writeUint32;
    d.readUint32 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+4) <= " + this.buffer.byteLength);
        }
        if (this.littleEndian) {
            var c = this.view[a + 2] << 16;
            c |= this.view[a + 1] << 8;
            c |= this.view[a];
            c += (this.view[a + 3] << 24) >>> 0;
        } else (c = this.view[a + 1] << 16), (c |= this.view[a + 2] << 8), (c |= this.view[a + 3]), (c += (this.view[a] << 24) >>> 0);
        b && (this.offset += 4);
        return c;
    };
    d.readUInt32 = d.readUint32;
    h &&
        ((d.writeInt64 = function (a, b) {
            var c = "undefined" === typeof b;
            c && (b = this.offset);
            if (!this.noAssert) {
                if ("number" === typeof a) a = h.fromNumber(a);
                else if ("string" === typeof a) a = h.fromString(a);
                else if (!(a && a instanceof h)) throw TypeError("Illegal value: " + a + " (not an integer or Long)");
                if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
                b >>>= 0;
                if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
            }
            "number" === typeof a ? (a = h.fromNumber(a)) : "string" === typeof a && (a = h.fromString(a));
            b += 8;
            var e = this.buffer.byteLength;
            b > e && this.resize((e *= 2) > b ? e : b);
            b -= 8;
            e = a.low;
            a = a.high;
            this.littleEndian
                ? ((this.view[b + 3] = (e >>> 24) & 255),
                  (this.view[b + 2] = (e >>> 16) & 255),
                  (this.view[b + 1] = (e >>> 8) & 255),
                  (this.view[b] = e & 255),
                  (b += 4),
                  (this.view[b + 3] = (a >>> 24) & 255),
                  (this.view[b + 2] = (a >>> 16) & 255),
                  (this.view[b + 1] = (a >>> 8) & 255),
                  (this.view[b] = a & 255))
                : ((this.view[b] = (a >>> 24) & 255),
                  (this.view[b + 1] = (a >>> 16) & 255),
                  (this.view[b + 2] = (a >>> 8) & 255),
                  (this.view[b + 3] = a & 255),
                  (b += 4),
                  (this.view[b] = (e >>> 24) & 255),
                  (this.view[b + 1] = (e >>> 16) & 255),
                  (this.view[b + 2] = (e >>> 8) & 255),
                  (this.view[b + 3] = e & 255));
            c && (this.offset += 8);
            return this;
        }),
        (d.writeLong = d.writeInt64),
        (d.readInt64 = function (a) {
            var b = "undefined" === typeof a;
            b && (a = this.offset);
            if (!this.noAssert) {
                if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
                a >>>= 0;
                if (0 > a || a + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+8) <= " + this.buffer.byteLength);
            }
            if (this.littleEndian) {
                var c = this.view[a + 2] << 16;
                c |= this.view[a + 1] << 8;
                c |= this.view[a];
                c += (this.view[a + 3] << 24) >>> 0;
                a += 4;
                var e = this.view[a + 2] << 16;
                e |= this.view[a + 1] << 8;
                e |= this.view[a];
                e += (this.view[a + 3] << 24) >>> 0;
            } else
                (e = this.view[a + 1] << 16),
                    (e |= this.view[a + 2] << 8),
                    (e |= this.view[a + 3]),
                    (e += (this.view[a] << 24) >>> 0),
                    (a += 4),
                    (c = this.view[a + 1] << 16),
                    (c |= this.view[a + 2] << 8),
                    (c |= this.view[a + 3]),
                    (c += (this.view[a] << 24) >>> 0);
            a = new h(c, e, !1);
            b && (this.offset += 8);
            return a;
        }),
        (d.readLong = d.readInt64),
        (d.writeUint64 = function (a, b) {
            var c = "undefined" === typeof b;
            c && (b = this.offset);
            if (!this.noAssert) {
                if ("number" === typeof a) a = h.fromNumber(a);
                else if ("string" === typeof a) a = h.fromString(a);
                else if (!(a && a instanceof h)) throw TypeError("Illegal value: " + a + " (not an integer or Long)");
                if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
                b >>>= 0;
                if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
            }
            "number" === typeof a ? (a = h.fromNumber(a)) : "string" === typeof a && (a = h.fromString(a));
            b += 8;
            var e = this.buffer.byteLength;
            b > e && this.resize((e *= 2) > b ? e : b);
            b -= 8;
            e = a.low;
            a = a.high;
            this.littleEndian
                ? ((this.view[b + 3] = (e >>> 24) & 255),
                  (this.view[b + 2] = (e >>> 16) & 255),
                  (this.view[b + 1] = (e >>> 8) & 255),
                  (this.view[b] = e & 255),
                  (b += 4),
                  (this.view[b + 3] = (a >>> 24) & 255),
                  (this.view[b + 2] = (a >>> 16) & 255),
                  (this.view[b + 1] = (a >>> 8) & 255),
                  (this.view[b] = a & 255))
                : ((this.view[b] = (a >>> 24) & 255),
                  (this.view[b + 1] = (a >>> 16) & 255),
                  (this.view[b + 2] = (a >>> 8) & 255),
                  (this.view[b + 3] = a & 255),
                  (b += 4),
                  (this.view[b] = (e >>> 24) & 255),
                  (this.view[b + 1] = (e >>> 16) & 255),
                  (this.view[b + 2] = (e >>> 8) & 255),
                  (this.view[b + 3] = e & 255));
            c && (this.offset += 8);
            return this;
        }),
        (d.writeUInt64 = d.writeUint64),
        (d.readUint64 = function (a) {
            var b = "undefined" === typeof a;
            b && (a = this.offset);
            if (!this.noAssert) {
                if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
                a >>>= 0;
                if (0 > a || a + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+8) <= " + this.buffer.byteLength);
            }
            if (this.littleEndian) {
                var c = this.view[a + 2] << 16;
                c |= this.view[a + 1] << 8;
                c |= this.view[a];
                c += (this.view[a + 3] << 24) >>> 0;
                a += 4;
                var e = this.view[a + 2] << 16;
                e |= this.view[a + 1] << 8;
                e |= this.view[a];
                e += (this.view[a + 3] << 24) >>> 0;
            } else
                (e = this.view[a + 1] << 16),
                    (e |= this.view[a + 2] << 8),
                    (e |= this.view[a + 3]),
                    (e += (this.view[a] << 24) >>> 0),
                    (a += 4),
                    (c = this.view[a + 1] << 16),
                    (c |= this.view[a + 2] << 8),
                    (c |= this.view[a + 3]),
                    (c += (this.view[a] << 24) >>> 0);
            a = new h(c, e, !0);
            b && (this.offset += 8);
            return a;
        }),
        (d.readUInt64 = d.readUint64));
    d.writeFloat32 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a) throw TypeError("Illegal value: " + a + " (not a number)");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 4;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        y(this.view, a, b - 4, this.littleEndian, 23, 4);
        c && (this.offset += 4);
        return this;
    };
    d.writeFloat = d.writeFloat32;
    d.readFloat32 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+4) <= " + this.buffer.byteLength);
        }
        a = v(this.view, a, this.littleEndian, 23, 4);
        b && (this.offset += 4);
        return a;
    };
    d.readFloat = d.readFloat32;
    d.writeFloat64 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a) throw TypeError("Illegal value: " + a + " (not a number)");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        b += 8;
        var e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        y(this.view, a, b - 8, this.littleEndian, 52, 8);
        c && (this.offset += 8);
        return this;
    };
    d.writeDouble = d.writeFloat64;
    d.readFloat64 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+8) <= " + this.buffer.byteLength);
        }
        a = v(this.view, a, this.littleEndian, 52, 8);
        b && (this.offset += 8);
        return a;
    };
    d.readDouble = d.readFloat64;
    g.MAX_VARINT32_BYTES = 5;
    g.calculateVarint32 = function (a) {
        a >>>= 0;
        return 128 > a ? 1 : 16384 > a ? 2 : 2097152 > a ? 3 : 268435456 > a ? 4 : 5;
    };
    g.zigZagEncode32 = function (a) {
        return (((a |= 0) << 1) ^ (a >> 31)) >>> 0;
    };
    g.zigZagDecode32 = function (a) {
        return ((a >>> 1) ^ -(a & 1)) | 0;
    };
    d.writeVarint32 = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        var e = g.calculateVarint32(a);
        b += e;
        var k = this.buffer.byteLength;
        b > k && this.resize((k *= 2) > b ? k : b);
        b -= e;
        for (a >>>= 0; 128 <= a; ) (k = (a & 127) | 128), (this.view[b++] = k), (a >>>= 7);
        this.view[b++] = a;
        return c ? ((this.offset = b), this) : e;
    };
    d.writeVarint32ZigZag = function (a, b) {
        return this.writeVarint32(g.zigZagEncode32(a), b);
    };
    d.readVarint32 = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
        }
        var c = 0,
            e = 0;
        do {
            if (!this.noAssert && a > this.limit) throw ((a = Error("Truncated")), (a.truncated = !0), a);
            var k = this.view[a++];
            5 > c && (e |= (k & 127) << (7 * c));
            ++c;
        } while (0 !== (k & 128));
        e |= 0;
        return b ? ((this.offset = a), e) : { value: e, length: c };
    };
    d.readVarint32ZigZag = function (a) {
        a = this.readVarint32(a);
        "object" === typeof a ? (a.value = g.zigZagDecode32(a.value)) : (a = g.zigZagDecode32(a));
        return a;
    };
    h &&
        ((g.MAX_VARINT64_BYTES = 10),
        (g.calculateVarint64 = function (a) {
            "number" === typeof a ? (a = h.fromNumber(a)) : "string" === typeof a && (a = h.fromString(a));
            var b = a.toInt() >>> 0,
                c = a.shiftRightUnsigned(28).toInt() >>> 0;
            a = a.shiftRightUnsigned(56).toInt() >>> 0;
            return 0 == a ? (0 == c ? (16384 > b ? (128 > b ? 1 : 2) : 2097152 > b ? 3 : 4) : 16384 > c ? (128 > c ? 5 : 6) : 2097152 > c ? 7 : 8) : 128 > a ? 9 : 10;
        }),
        (g.zigZagEncode64 = function (a) {
            "number" === typeof a ? (a = h.fromNumber(a, !1)) : "string" === typeof a ? (a = h.fromString(a, !1)) : !1 !== a.unsigned && (a = a.toSigned());
            return a.shiftLeft(1).xor(a.shiftRight(63)).toUnsigned();
        }),
        (g.zigZagDecode64 = function (a) {
            "number" === typeof a ? (a = h.fromNumber(a, !1)) : "string" === typeof a ? (a = h.fromString(a, !1)) : !1 !== a.unsigned && (a = a.toSigned());
            return a.shiftRightUnsigned(1).xor(a.and(h.ONE).toSigned().negate()).toSigned();
        }),
        (d.writeVarint64 = function (a, b) {
            var c = "undefined" === typeof b;
            c && (b = this.offset);
            if (!this.noAssert) {
                if ("number" === typeof a) a = h.fromNumber(a);
                else if ("string" === typeof a) a = h.fromString(a);
                else if (!(a && a instanceof h)) throw TypeError("Illegal value: " + a + " (not an integer or Long)");
                if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
                b >>>= 0;
                if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
            }
            "number" === typeof a ? (a = h.fromNumber(a, !1)) : "string" === typeof a ? (a = h.fromString(a, !1)) : !1 !== a.unsigned && (a = a.toSigned());
            var e = g.calculateVarint64(a),
                k = a.toInt() >>> 0,
                f = a.shiftRightUnsigned(28).toInt() >>> 0;
            a = a.shiftRightUnsigned(56).toInt() >>> 0;
            b += e;
            var d = this.buffer.byteLength;
            b > d && this.resize((d *= 2) > b ? d : b);
            b -= e;
            switch (e) {
                case 10:
                    this.view[b + 9] = (a >>> 7) & 1;
                case 9:
                    this.view[b + 8] = 9 !== e ? a | 128 : a & 127;
                case 8:
                    this.view[b + 7] = 8 !== e ? (f >>> 21) | 128 : (f >>> 21) & 127;
                case 7:
                    this.view[b + 6] = 7 !== e ? (f >>> 14) | 128 : (f >>> 14) & 127;
                case 6:
                    this.view[b + 5] = 6 !== e ? (f >>> 7) | 128 : (f >>> 7) & 127;
                case 5:
                    this.view[b + 4] = 5 !== e ? f | 128 : f & 127;
                case 4:
                    this.view[b + 3] = 4 !== e ? (k >>> 21) | 128 : (k >>> 21) & 127;
                case 3:
                    this.view[b + 2] = 3 !== e ? (k >>> 14) | 128 : (k >>> 14) & 127;
                case 2:
                    this.view[b + 1] = 2 !== e ? (k >>> 7) | 128 : (k >>> 7) & 127;
                case 1:
                    this.view[b] = 1 !== e ? k | 128 : k & 127;
            }
            return c ? ((this.offset += e), this) : e;
        }),
        (d.writeVarint64ZigZag = function (a, b) {
            return this.writeVarint64(g.zigZagEncode64(a), b);
        }),
        (d.readVarint64 = function (a) {
            var b = "undefined" === typeof a;
            b && (a = this.offset);
            if (!this.noAssert) {
                if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
                a >>>= 0;
                if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
            }
            var c = a,
                e = 0,
                k = 0;
            var d = this.view[a++];
            var g = d & 127;
            if (
                d & 128 &&
                ((d = this.view[a++]), (g |= (d & 127) << 7), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (g |= (d & 127) << 14), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (g |= (d & 127) << 21), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (e = d & 127), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (e |= (d & 127) << 7), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (e |= (d & 127) << 14), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (e |= (d & 127) << 21), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (k = d & 127), d & 128 || (this.noAssert && "undefined" === typeof d)) &&
                ((d = this.view[a++]), (k |= (d & 127) << 7), d & 128 || (this.noAssert && "undefined" === typeof d))
            )
                throw Error("Buffer overrun");
            g = h.fromBits(g | (e << 28), (e >>> 4) | (k << 24), !1);
            return b ? ((this.offset = a), g) : { value: g, length: a - c };
        }),
        (d.readVarint64ZigZag = function (a) {
            (a = this.readVarint64(a)) && a.value instanceof h ? (a.value = g.zigZagDecode64(a.value)) : (a = g.zigZagDecode64(a));
            return a;
        }));
    d.writeCString = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        var e,
            d = a.length;
        if (!this.noAssert) {
            if ("string" !== typeof a) throw TypeError("Illegal str: Not a string");
            for (e = 0; e < d; ++e) if (0 === a.charCodeAt(e)) throw RangeError("Illegal str: Contains NULL-characters");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        d = m.calculateUTF16asUTF8(l(a))[1];
        b += d + 1;
        e = this.buffer.byteLength;
        b > e && this.resize((e *= 2) > b ? e : b);
        b -= d + 1;
        m.encodeUTF16toUTF8(
            l(a),
            function (a) {
                this.view[b++] = a;
            }.bind(this)
        );
        this.view[b++] = 0;
        return c ? ((this.offset = b), this) : d;
    };
    d.readCString = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
        }
        var c = a,
            e,
            d = -1;
        m.decodeUTF8toUTF16(
            function () {
                if (0 === d) return null;
                if (a >= this.limit) throw RangeError("Illegal range: Truncated data, " + a + " < " + this.limit);
                d = this.view[a++];
                return 0 === d ? null : d;
            }.bind(this),
            (e = t()),
            !0
        );
        return b ? ((this.offset = a), e()) : { string: e(), length: a - c };
    };
    d.writeIString = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("string" !== typeof a) throw TypeError("Illegal str: Not a string");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        var e = b;
        var d = m.calculateUTF16asUTF8(l(a), this.noAssert)[1];
        b += 4 + d;
        var f = this.buffer.byteLength;
        b > f && this.resize((f *= 2) > b ? f : b);
        b -= 4 + d;
        this.littleEndian
            ? ((this.view[b + 3] = (d >>> 24) & 255), (this.view[b + 2] = (d >>> 16) & 255), (this.view[b + 1] = (d >>> 8) & 255), (this.view[b] = d & 255))
            : ((this.view[b] = (d >>> 24) & 255), (this.view[b + 1] = (d >>> 16) & 255), (this.view[b + 2] = (d >>> 8) & 255), (this.view[b + 3] = d & 255));
        b += 4;
        m.encodeUTF16toUTF8(
            l(a),
            function (a) {
                this.view[b++] = a;
            }.bind(this)
        );
        if (b !== e + 4 + d) throw RangeError("Illegal range: Truncated data, " + b + " == " + (b + 4 + d));
        return c ? ((this.offset = b), this) : b - e;
    };
    d.readIString = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+4) <= " + this.buffer.byteLength);
        }
        var c = a,
            e = this.readUint32(a);
        e = this.readUTF8String(e, g.METRICS_BYTES, (a += 4));
        a += e.length;
        return b ? ((this.offset = a), e.string) : { string: e.string, length: a - c };
    };
    g.METRICS_CHARS = "c";
    g.METRICS_BYTES = "b";
    d.writeUTF8String = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        var e = b;
        var d = m.calculateUTF16asUTF8(l(a))[1];
        b += d;
        var f = this.buffer.byteLength;
        b > f && this.resize((f *= 2) > b ? f : b);
        b -= d;
        m.encodeUTF16toUTF8(
            l(a),
            function (a) {
                this.view[b++] = a;
            }.bind(this)
        );
        return c ? ((this.offset = b), this) : b - e;
    };
    d.writeString = d.writeUTF8String;
    g.calculateUTF8Chars = function (a) {
        return m.calculateUTF16asUTF8(l(a))[0];
    };
    g.calculateUTF8Bytes = function (a) {
        return m.calculateUTF16asUTF8(l(a))[1];
    };
    g.calculateString = g.calculateUTF8Bytes;
    d.readUTF8String = function (a, b, c) {
        "number" === typeof b && ((c = b), (b = void 0));
        var e = "undefined" === typeof c;
        e && (c = this.offset);
        "undefined" === typeof b && (b = g.METRICS_CHARS);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal length: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal offset: " + c + " (not an integer)");
            c >>>= 0;
            if (0 > c || c + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + c + " (+0) <= " + this.buffer.byteLength);
        }
        var d = 0,
            f = c;
        if (b === g.METRICS_CHARS) {
            var p = t();
            m.decodeUTF8(
                function () {
                    return d < a && c < this.limit ? this.view[c++] : null;
                }.bind(this),
                function (a) {
                    ++d;
                    m.UTF8toUTF16(a, p);
                }
            );
            if (d !== a) throw RangeError("Illegal range: Truncated data, " + d + " == " + a);
            return e ? ((this.offset = c), p()) : { string: p(), length: c - f };
        }
        if (b === g.METRICS_BYTES) {
            if (!this.noAssert) {
                if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal offset: " + c + " (not an integer)");
                c >>>= 0;
                if (0 > c || c + a > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + c + " (+" + a + ") <= " + this.buffer.byteLength);
            }
            var h = c + a;
            m.decodeUTF8toUTF16(
                function () {
                    return c < h ? this.view[c++] : null;
                }.bind(this),
                (p = t()),
                this.noAssert
            );
            if (c !== h) throw RangeError("Illegal range: Truncated data, " + c + " == " + h);
            return e ? ((this.offset = c), p()) : { string: p(), length: c - f };
        }
        throw TypeError("Unsupported metrics: " + b);
    };
    d.readString = d.readUTF8String;
    d.writeVString = function (a, b) {
        var c = "undefined" === typeof b;
        c && (b = this.offset);
        if (!this.noAssert) {
            if ("string" !== typeof a) throw TypeError("Illegal str: Not a string");
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: " + b + " (not an integer)");
            b >>>= 0;
            if (0 > b || b + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + b + " (+0) <= " + this.buffer.byteLength);
        }
        var e = b;
        var d = m.calculateUTF16asUTF8(l(a), this.noAssert)[1];
        var f = g.calculateVarint32(d);
        b += f + d;
        var p = this.buffer.byteLength;
        b > p && this.resize((p *= 2) > b ? p : b);
        b -= f + d;
        b += this.writeVarint32(d, b);
        m.encodeUTF16toUTF8(
            l(a),
            function (a) {
                this.view[b++] = a;
            }.bind(this)
        );
        if (b !== e + d + f) throw RangeError("Illegal range: Truncated data, " + b + " == " + (b + d + f));
        return c ? ((this.offset = b), this) : b - e;
    };
    d.readVString = function (a) {
        var b = "undefined" === typeof a;
        b && (a = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+1) <= " + this.buffer.byteLength);
        }
        var c = a,
            e = this.readVarint32(a);
        e = this.readUTF8String(e.value, g.METRICS_BYTES, (a += e.length));
        a += e.length;
        return b ? ((this.offset = a), e.string) : { string: e.string, length: a - c };
    };
    d.append = function (a, b, c) {
        if ("number" === typeof b || "string" !== typeof b) (c = b), (b = void 0);
        var e = "undefined" === typeof c;
        e && (c = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal offset: " + c + " (not an integer)");
            c >>>= 0;
            if (0 > c || c + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + c + " (+0) <= " + this.buffer.byteLength);
        }
        a instanceof g || (a = g.wrap(a, b));
        b = a.limit - a.offset;
        if (0 >= b) return this;
        c += b;
        var d = this.buffer.byteLength;
        c > d && this.resize((d *= 2) > c ? d : c);
        c -= b;
        this.view.set(a.view.subarray(a.offset, a.limit), c);
        a.offset += b;
        e && (this.offset += b);
        return this;
    };
    d.appendTo = function (a, b) {
        a.append(this, b);
        return this;
    };
    d.writeBytes = d.append;
    d.assert = function (a) {
        this.noAssert = !a;
        return this;
    };
    d.capacity = function () {
        return this.buffer.byteLength;
    };
    d.clear = function () {
        this.offset = 0;
        this.limit = this.buffer.byteLength;
        this.markedOffset = -1;
        return this;
    };
    d.clone = function (a) {
        var b = new g(0, this.littleEndian, this.noAssert);
        a ? ((b.buffer = new ArrayBuffer(this.buffer.byteLength)), (b.view = new Uint8Array(b.buffer))) : ((b.buffer = this.buffer), (b.view = this.view));
        b.offset = this.offset;
        b.markedOffset = this.markedOffset;
        b.limit = this.limit;
        return b;
    };
    d.compact = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        if (0 === a && b === this.buffer.byteLength) return this;
        var c = b - a;
        if (0 === c) return (this.buffer = w), (this.view = null), 0 <= this.markedOffset && (this.markedOffset -= a), (this.limit = this.offset = 0), this;
        var e = new ArrayBuffer(c),
            d = new Uint8Array(e);
        d.set(this.view.subarray(a, b));
        this.buffer = e;
        this.view = d;
        0 <= this.markedOffset && (this.markedOffset -= a);
        this.offset = 0;
        this.limit = c;
        return this;
    };
    d.copy = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        if (a === b) return new g(0, this.littleEndian, this.noAssert);
        var c = b - a,
            e = new g(c, this.littleEndian, this.noAssert);
        e.offset = 0;
        e.limit = c;
        0 <= e.markedOffset && (e.markedOffset -= a);
        this.copyTo(e, 0, a, b);
        return e;
    };
    d.copyTo = function (a, b, c, e) {
        var d, f;
        if (!this.noAssert && !g.isByteBuffer(a)) throw TypeError("Illegal target: Not a ByteBuffer");
        b = (f = "undefined" === typeof b) ? a.offset : b | 0;
        c = (d = "undefined" === typeof c) ? this.offset : c | 0;
        e = "undefined" === typeof e ? this.limit : e | 0;
        if (0 > b || b > a.buffer.byteLength) throw RangeError("Illegal target range: 0 <= " + b + " <= " + a.buffer.byteLength);
        if (0 > c || e > this.buffer.byteLength) throw RangeError("Illegal source range: 0 <= " + c + " <= " + this.buffer.byteLength);
        var p = e - c;
        if (0 === p) return a;
        a.ensureCapacity(b + p);
        a.view.set(this.view.subarray(c, e), b);
        d && (this.offset += p);
        f && (a.offset += p);
        return this;
    };
    d.ensureCapacity = function (a) {
        var b = this.buffer.byteLength;
        return b < a ? this.resize((b *= 2) > a ? b : a) : this;
    };
    d.fill = function (a, b, c) {
        var e = "undefined" === typeof b;
        e && (b = this.offset);
        "string" === typeof a && 0 < a.length && (a = a.charCodeAt(0));
        "undefined" === typeof b && (b = this.offset);
        "undefined" === typeof c && (c = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal value: " + a + " (not an integer)");
            a |= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal begin: Not an integer");
            b >>>= 0;
            if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal end: Not an integer");
            c >>>= 0;
            if (0 > b || b > c || c > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + b + " <= " + c + " <= " + this.buffer.byteLength);
        }
        if (b >= c) return this;
        for (; b < c; ) this.view[b++] = a;
        e && (this.offset = b);
        return this;
    };
    d.flip = function () {
        this.limit = this.offset;
        this.offset = 0;
        return this;
    };
    d.mark = function (a) {
        a = "undefined" === typeof a ? this.offset : a;
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal offset: " + a + " (not an integer)");
            a >>>= 0;
            if (0 > a || a + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + a + " (+0) <= " + this.buffer.byteLength);
        }
        this.markedOffset = a;
        return this;
    };
    d.order = function (a) {
        if (!this.noAssert && "boolean" !== typeof a) throw TypeError("Illegal littleEndian: Not a boolean");
        this.littleEndian = !!a;
        return this;
    };
    d.LE = function (a) {
        this.littleEndian = "undefined" !== typeof a ? !!a : !0;
        return this;
    };
    d.BE = function (a) {
        this.littleEndian = "undefined" !== typeof a ? !a : !1;
        return this;
    };
    d.prepend = function (a, b, c) {
        if ("number" === typeof b || "string" !== typeof b) (c = b), (b = void 0);
        var e = "undefined" === typeof c;
        e && (c = this.offset);
        if (!this.noAssert) {
            if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal offset: " + c + " (not an integer)");
            c >>>= 0;
            if (0 > c || c + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + c + " (+0) <= " + this.buffer.byteLength);
        }
        a instanceof g || (a = g.wrap(a, b));
        b = a.limit - a.offset;
        if (0 >= b) return this;
        var d = b - c;
        if (0 < d) {
            var f = new ArrayBuffer(this.buffer.byteLength + d),
                p = new Uint8Array(f);
            p.set(this.view.subarray(c, this.buffer.byteLength), b);
            this.buffer = f;
            this.view = p;
            this.offset += d;
            0 <= this.markedOffset && (this.markedOffset += d);
            this.limit += d;
            c += d;
        } else new Uint8Array(this.buffer);
        this.view.set(a.view.subarray(a.offset, a.limit), c - b);
        a.offset = a.limit;
        e && (this.offset -= b);
        return this;
    };
    d.prependTo = function (a, b) {
        a.prepend(this, b);
        return this;
    };
    d.printDebug = function (a) {
        "function" !== typeof a && (a = console.log.bind(console));
        a(this.toString() + "\n-------------------------------------------------------------------\n" + this.toDebug(!0));
    };
    d.remaining = function () {
        return this.limit - this.offset;
    };
    d.reset = function () {
        0 <= this.markedOffset ? ((this.offset = this.markedOffset), (this.markedOffset = -1)) : (this.offset = 0);
        return this;
    };
    d.resize = function (a) {
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal capacity: " + a + " (not an integer)");
            a |= 0;
            if (0 > a) throw RangeError("Illegal capacity: 0 <= " + a);
        }
        if (this.buffer.byteLength < a) {
            a = new ArrayBuffer(a);
            var b = new Uint8Array(a);
            b.set(this.view);
            this.buffer = a;
            this.view = b;
        }
        return this;
    };
    d.reverse = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        if (a === b) return this;
        Array.prototype.reverse.call(this.view.subarray(a, b));
        return this;
    };
    d.skip = function (a) {
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal length: " + a + " (not an integer)");
            a |= 0;
        }
        var b = this.offset + a;
        if (!this.noAssert && (0 > b || b > this.buffer.byteLength)) throw RangeError("Illegal length: 0 <= " + this.offset + " + " + a + " <= " + this.buffer.byteLength);
        this.offset = b;
        return this;
    };
    d.slice = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        var c = this.clone();
        c.offset = a;
        c.limit = b;
        return c;
    };
    d.toBuffer = function (a) {
        var b = this.offset,
            c = this.limit;
        if (!this.noAssert) {
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal offset: Not an integer");
            b >>>= 0;
            if ("number" !== typeof c || 0 !== c % 1) throw TypeError("Illegal limit: Not an integer");
            c >>>= 0;
            if (0 > b || b > c || c > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + b + " <= " + c + " <= " + this.buffer.byteLength);
        }
        if (!a && 0 === b && c === this.buffer.byteLength) return this.buffer;
        if (b === c) return w;
        a = new ArrayBuffer(c - b);
        new Uint8Array(a).set(new Uint8Array(this.buffer).subarray(b, c), 0);
        return a;
    };
    d.toArrayBuffer = d.toBuffer;
    d.toString = function (a, b, c) {
        if ("undefined" === typeof a) return "ByteBufferAB(offset=" + this.offset + ",markedOffset=" + this.markedOffset + ",limit=" + this.limit + ",capacity=" + this.capacity() + ")";
        "number" === typeof a && (c = b = a = "utf8");
        switch (a) {
            case "utf8":
                return this.toUTF8(b, c);
            case "base64":
                return this.toBase64(b, c);
            case "hex":
                return this.toHex(b, c);
            case "binary":
                return this.toBinary(b, c);
            case "debug":
                return this.toDebug();
            case "columns":
                return this.toColumns();
            default:
                throw Error("Unsupported encoding: " + a);
        }
    };
    var z = (function () {
        for (
            var a = {},
                b = [
                    65,
                    66,
                    67,
                    68,
                    69,
                    70,
                    71,
                    72,
                    73,
                    74,
                    75,
                    76,
                    77,
                    78,
                    79,
                    80,
                    81,
                    82,
                    83,
                    84,
                    85,
                    86,
                    87,
                    88,
                    89,
                    90,
                    97,
                    98,
                    99,
                    100,
                    101,
                    102,
                    103,
                    104,
                    105,
                    106,
                    107,
                    108,
                    109,
                    110,
                    111,
                    112,
                    113,
                    114,
                    115,
                    116,
                    117,
                    118,
                    119,
                    120,
                    121,
                    122,
                    48,
                    49,
                    50,
                    51,
                    52,
                    53,
                    54,
                    55,
                    56,
                    57,
                    43,
                    47,
                ],
                c = [],
                e = 0,
                d = b.length;
            e < d;
            ++e
        )
            c[b[e]] = e;
        a.encode = function (a, c) {
            for (var e, d; null !== (e = a()); )
                c(b[(e >> 2) & 63]),
                    (d = (e & 3) << 4),
                    null !== (e = a())
                        ? ((d |= (e >> 4) & 15), c(b[(d | ((e >> 4) & 15)) & 63]), (d = (e & 15) << 2), null !== (e = a()) ? (c(b[(d | ((e >> 6) & 3)) & 63]), c(b[e & 63])) : (c(b[d & 63]), c(61)))
                        : (c(b[d & 63]), c(61), c(61));
        };
        a.decode = function (a, b) {
            function e(a) {
                throw Error("Illegal character code: " + a);
            }
            for (var d, k, f; null !== (d = a()); )
                if (((k = c[d]), "undefined" === typeof k && e(d), null !== (d = a()) && ((f = c[d]), "undefined" === typeof f && e(d), b(((k << 2) >>> 0) | ((f & 48) >> 4)), null !== (d = a())))) {
                    k = c[d];
                    if ("undefined" === typeof k)
                        if (61 === d) break;
                        else e(d);
                    b((((f & 15) << 4) >>> 0) | ((k & 60) >> 2));
                    if (null !== (d = a())) {
                        f = c[d];
                        if ("undefined" === typeof f)
                            if (61 === d) break;
                            else e(d);
                        b((((k & 3) << 6) >>> 0) | f);
                    }
                }
        };
        a.test = function (a) {
            return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(a);
        };
        return a;
    })();
    d.toBase64 = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        a |= 0;
        b |= 0;
        if (0 > a || b > this.capacity || a > b) throw RangeError("begin, end");
        var c;
        z.encode(
            function () {
                return a < b ? this.view[a++] : null;
            }.bind(this),
            (c = t())
        );
        return c();
    };
    g.fromBase64 = function (a, b) {
        if ("string" !== typeof a) throw TypeError("str");
        var c = new g((a.length / 4) * 3, b),
            e = 0;
        z.decode(l(a), function (a) {
            c.view[e++] = a;
        });
        c.limit = e;
        return c;
    };
    g.btoa = function (a) {
        return g.fromBinary(a).toBase64();
    };
    g.atob = function (a) {
        return g.fromBase64(a).toBinary();
    };
    d.toBinary = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        a |= 0;
        b |= 0;
        if (0 > a || b > this.capacity() || a > b) throw RangeError("begin, end");
        if (a === b) return "";
        for (var c = [], e = []; a < b; ) c.push(this.view[a++]), 1024 <= c.length && (e.push(String.fromCharCode.apply(String, c)), (c = []));
        return e.join("") + String.fromCharCode.apply(String, c);
    };
    g.fromBinary = function (a, b) {
        if ("string" !== typeof a) throw TypeError("str");
        for (var c = 0, e = a.length, d = new g(e, b); c < e; ) {
            b = a.charCodeAt(c);
            if (255 < b) throw RangeError("illegal char code: " + b);
            d.view[c++] = b;
        }
        d.limit = e;
        return d;
    };
    d.toDebug = function (a) {
        for (var b = -1, c = this.buffer.byteLength, e, d = "", f = "", g = ""; b < c; ) {
            -1 !== b && ((e = this.view[b]), (d = 16 > e ? d + ("0" + e.toString(16).toUpperCase()) : d + e.toString(16).toUpperCase()), a && (f += 32 < e && 127 > e ? String.fromCharCode(e) : "."));
            ++b;
            if (a && 0 < b && 0 === b % 16 && b !== c) {
                for (; 51 > d.length; ) d += " ";
                g += d + f + "\n";
                d = f = "";
            }
            d =
                b === this.offset && b === this.limit
                    ? d + (b === this.markedOffset ? "!" : "|")
                    : b === this.offset
                    ? d + (b === this.markedOffset ? "[" : "<")
                    : b === this.limit
                    ? d + (b === this.markedOffset ? "]" : ">")
                    : d + (b === this.markedOffset ? "'" : a || (0 !== b && b !== c) ? " " : "");
        }
        if (a && " " !== d) {
            for (; 51 > d.length; ) d += " ";
            g += d + f + "\n";
        }
        return a ? g : d;
    };
    g.fromDebug = function (a, b, c) {
        var e = a.length;
        b = new g(((e + 1) / 3) | 0, b, c);
        for (var d = 0, f = 0, h, l = !1, n = !1, m = !1, q = !1, r = !1; d < e; ) {
            switch ((h = a.charAt(d++))) {
                case "!":
                    if (!c) {
                        if (n || m || q) {
                            r = !0;
                            break;
                        }
                        n = m = q = !0;
                    }
                    b.offset = b.markedOffset = b.limit = f;
                    l = !1;
                    break;
                case "|":
                    if (!c) {
                        if (n || q) {
                            r = !0;
                            break;
                        }
                        n = q = !0;
                    }
                    b.offset = b.limit = f;
                    l = !1;
                    break;
                case "[":
                    if (!c) {
                        if (n || m) {
                            r = !0;
                            break;
                        }
                        n = m = !0;
                    }
                    b.offset = b.markedOffset = f;
                    l = !1;
                    break;
                case "<":
                    if (!c) {
                        if (n) {
                            r = !0;
                            break;
                        }
                        n = !0;
                    }
                    b.offset = f;
                    l = !1;
                    break;
                case "]":
                    if (!c) {
                        if (q || m) {
                            r = !0;
                            break;
                        }
                        q = m = !0;
                    }
                    b.limit = b.markedOffset = f;
                    l = !1;
                    break;
                case ">":
                    if (!c) {
                        if (q) {
                            r = !0;
                            break;
                        }
                        q = !0;
                    }
                    b.limit = f;
                    l = !1;
                    break;
                case "'":
                    if (!c) {
                        if (m) {
                            r = !0;
                            break;
                        }
                        m = !0;
                    }
                    b.markedOffset = f;
                    l = !1;
                    break;
                case " ":
                    l = !1;
                    break;
                default:
                    if (!c && l) r = !0;
                    else {
                        h = parseInt(h + a.charAt(d++), 16);
                        if (!c && (isNaN(h) || 0 > h || 255 < h)) throw TypeError("Illegal str: Not a debug encoded string");
                        b.view[f++] = h;
                        l = !0;
                    }
            }
            if (r) throw TypeError("Illegal str: Invalid symbol at " + d);
        }
        if (!c) {
            if (!n || !q) throw TypeError("Illegal str: Missing offset or limit");
            if (f < b.buffer.byteLength) throw TypeError("Illegal str: Not a debug encoded string (is it hex?) " + f + " < " + e);
        }
        return b;
    };
    d.toHex = function (a, b) {
        a = "undefined" === typeof a ? this.offset : a;
        b = "undefined" === typeof b ? this.limit : b;
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        for (var c = Array(b - a), e; a < b; ) (e = this.view[a++]), 16 > e ? c.push("0", e.toString(16)) : c.push(e.toString(16));
        return c.join("");
    };
    g.fromHex = function (a, b, c) {
        if (!c) {
            if ("string" !== typeof a) throw TypeError("Illegal str: Not a string");
            if (0 !== a.length % 2) throw TypeError("Illegal str: Length not a multiple of 2");
        }
        var e = a.length;
        b = new g((e / 2) | 0, b);
        for (var d, f = 0, h = 0; f < e; f += 2) {
            d = parseInt(a.substring(f, f + 2), 16);
            if (!c && (!isFinite(d) || 0 > d || 255 < d)) throw TypeError("Illegal str: Contains non-hex characters");
            b.view[h++] = d;
        }
        b.limit = h;
        return b;
    };
    var m = (function () {
        var a = {
            MAX_CODEPOINT: 1114111,
            encodeUTF8: function (a, c) {
                var b = null;
                "number" === typeof a &&
                    ((b = a),
                    (a = function () {
                        return null;
                    }));
                for (; null !== b || null !== (b = a()); )
                    128 > b
                        ? c(b & 127)
                        : (2048 > b ? c(((b >> 6) & 31) | 192) : 65536 > b ? (c(((b >> 12) & 15) | 224), c(((b >> 6) & 63) | 128)) : (c(((b >> 18) & 7) | 240), c(((b >> 12) & 63) | 128), c(((b >> 6) & 63) | 128)), c((b & 63) | 128)),
                        (b = null);
            },
            decodeUTF8: function (a, c) {
                for (
                    var b,
                        d,
                        f,
                        g,
                        h = function (a) {
                            a = a.slice(0, a.indexOf(null));
                            var b = Error(a.toString());
                            b.name = "TruncatedError";
                            b.bytes = a;
                            throw b;
                        };
                    null !== (b = a());

                )
                    if (0 === (b & 128)) c(b);
                    else if (192 === (b & 224)) null === (d = a()) && h([b, d]), c(((b & 31) << 6) | (d & 63));
                    else if (224 === (b & 240)) (null !== (d = a()) && null !== (f = a())) || h([b, d, f]), c(((b & 15) << 12) | ((d & 63) << 6) | (f & 63));
                    else if (240 === (b & 248)) (null !== (d = a()) && null !== (f = a()) && null !== (g = a())) || h([b, d, f, g]), c(((b & 7) << 18) | ((d & 63) << 12) | ((f & 63) << 6) | (g & 63));
                    else throw RangeError("Illegal starting byte: " + b);
            },
            UTF16toUTF8: function (a, c) {
                for (var b, d = null; null !== (b = null !== d ? d : a()); ) 55296 <= b && 57343 >= b && null !== (d = a()) && 56320 <= d && 57343 >= d ? (c(1024 * (b - 55296) + d - 56320 + 65536), (d = null)) : c(b);
                null !== d && c(d);
            },
            UTF8toUTF16: function (a, c) {
                var b = null;
                "number" === typeof a &&
                    ((b = a),
                    (a = function () {
                        return null;
                    }));
                for (; null !== b || null !== (b = a()); ) 65535 >= b ? c(b) : ((b -= 65536), c((b >> 10) + 55296), c((b % 1024) + 56320)), (b = null);
            },
            encodeUTF16toUTF8: function (b, c) {
                a.UTF16toUTF8(b, function (b) {
                    a.encodeUTF8(b, c);
                });
            },
            decodeUTF8toUTF16: function (b, c) {
                a.decodeUTF8(b, function (b) {
                    a.UTF8toUTF16(b, c);
                });
            },
            calculateCodePoint: function (a) {
                return 128 > a ? 1 : 2048 > a ? 2 : 65536 > a ? 3 : 4;
            },
            calculateUTF8: function (a) {
                for (var b, d = 0; null !== (b = a()); ) d += 128 > b ? 1 : 2048 > b ? 2 : 65536 > b ? 3 : 4;
                return d;
            },
            calculateUTF16asUTF8: function (b) {
                var c = 0,
                    d = 0;
                a.UTF16toUTF8(b, function (a) {
                    ++c;
                    d += 128 > a ? 1 : 2048 > a ? 2 : 65536 > a ? 3 : 4;
                });
                return [c, d];
            },
        };
        return a;
    })();
    d.toUTF8 = function (a, b) {
        "undefined" === typeof a && (a = this.offset);
        "undefined" === typeof b && (b = this.limit);
        if (!this.noAssert) {
            if ("number" !== typeof a || 0 !== a % 1) throw TypeError("Illegal begin: Not an integer");
            a >>>= 0;
            if ("number" !== typeof b || 0 !== b % 1) throw TypeError("Illegal end: Not an integer");
            b >>>= 0;
            if (0 > a || a > b || b > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + a + " <= " + b + " <= " + this.buffer.byteLength);
        }
        var c;
        try {
            m.decodeUTF8toUTF16(
                function () {
                    return a < b ? this.view[a++] : null;
                }.bind(this),
                (c = t())
            );
        } catch (e) {
            if (a !== b) throw RangeError("Illegal range: Truncated data, " + a + " != " + b);
        }
        return c();
    };
    g.fromUTF8 = function (a, b, c) {
        if (!c && "string" !== typeof a) throw TypeError("Illegal str: Not a string");
        var d = new g(m.calculateUTF16asUTF8(l(a), !0)[1], b, c),
            h = 0;
        m.encodeUTF16toUTF8(l(a), function (a) {
            d.view[h++] = a;
        });
        d.limit = h;
        return d;
    };
    return g;
});


document.querySelectorAll('#hud-intro > div > div.hud-intro-youtuber, #hud-intro > div > div.hud-intro-footer > div.hud-intro-footer-left, #hud-intro > div > div.hud-intro-footer > div.hud-intro-footer-right, .hud-intro-play').forEach(el => el.remove());
const css = `
* {
    -webkit-appearance: none;
}
${"true" === window.storage.getItem("settings-remove-animation") ? `
.hud > .hud-intro::before {
    animation: none;
}
` : ""}

.hud-intro-play-text {
    display: flex;
    flex-direction: column;
    justify-content: center;
    position: fixed;
    width: 250px;
    height: 300px;
    right: calc(50vw - 125px - 160px);
    top: calc(50vh - 150px);
    cursor: pointer;
    line-height: unset;
    padding: 0;
    transition: opacity 0.15s ease-in-out;
}
.hud-intro-play-text p {
    font-weight: bold;
    color: white;
    font-size: 60px;
    margin: 0px;
}
.hud-intro-play-text hr {
    width: 100%;
    border: 2px solid white;
}
.hud-intro-play-text span {
    font-size: 30px;
    color: #aaa;
}

.hud-intro-sidebar {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: flex-start;
    justify-content: space-between;
    position: fixed;
    padding: 30px;
    top: 0px;
    left: 0px;
    height: 100%;
    width: 320px;
    background: rgba(0, 0, 0, 0.3);
}
.hud-intro-sidebar h2 {
    display: flex;
    margin: 15px 0;
}
.hud-intro-sidebar h2::after {
    content: ' ';
    position: absolute;
    bottom: -5px;
    border: 1px solid white;
    width: 50px;
    opacity: 0.3;
}
.hud-intro-sidebar h2:first-child {
    margin: 0 0 15px;
}
.hud-intro-sidebar > div > select, .hud-intro-sidebar > div > input {
    background: rgba(0, 0, 0, 0.3);
    color: white;
}

#hud-intro-settings > div {
    align-items: flex-start;
}
#hud-intro-modes-description {
    text-align: left;
    font-size: 14px;
    opacity: 0.6;
}

#hud-intro > div > div.hud-intro-footer > div {
    right: -180px;
    left: unset;
}

.hud-intro .hud-intro-leaderboard-toggle {
    top: 30px;
    right: 30px;
}
#hud-intro > div > div.hud-intro-leaderboard.visible > h3 {
    color: rgba(255, 255, 255, 0.5);
}
#hud-intro > div > div.hud-intro-leaderboard.visible > h3 > select {
    margin: 5px 0;
}
/*
.hud-intro .hud-intro-leaderboard-toggle::before {
    background-color: white;
    filter: grayscale(1);
    border-radius: 50%;
    padding: 10px;
    background-repeat: no-repeat;
    background-position: center;
    zoom: 75%;
    box-shadow: 0 0 20px black;
    opacity: 1;
}
*/

.hud-intro-latest-changelog {
    position: fixed;
    top: 30px;
    left: 350px;
    width: 300px;
    color: white;
    opacity: 0.8;
    margin: 0px;
    font-size: 12px;
    text-align: left;
}

.hud-grid-settings-controls span {
    font-size: 14px;
}

#hud-spells-grid > div > div.hud-spells-item-description {
    margin-top: 5px;
}

#hud-shop-coming-soon {
    opacity: 0.4;
}
.hud-shop-item-tier {
    display: block;
    margin-left: 5px;
}

body > div:nth-child(6) > div.hud-grid-settings-options > label {
    margin: 5px 0;
}
`;
const styles = document.createElement("style");
styles.type = "text/css";
styles.appendChild(document.createTextNode(css));
document.head.appendChild(styles);

window.getClass = (DOMClass) => {
    return document.getElementsByClassName(DOMClass);
};

window.getId = (DOMId) => {
    return document.getElementById(DOMId);
};

const getClass = window.getClass;
const getId = window.getId;

document.querySelector("#hud-intro > div").insertAdjacentHTML("beforeend", `
    <div class="hud-intro-sidebar"></div>
    <p class="hud-intro-latest-changelog"></p>
    <div class="hud-intro-play-text hud-intro-play" id="hud-intro-play">
        <p>Start</p>
        <hr />
        <span>Click to enter</span>
    </div>
`);
getClass("hud-intro-sidebar")[0].insertAdjacentElement("beforeend", getClass("hud-intro-modes")[0]);
getClass("hud-intro-sidebar")[0].insertAdjacentElement("beforeend", getClass("hud-intro-form")[0]);
getClass("hud-intro-sidebar")[0].insertAdjacentElement("beforeend", getClass("hud-intro-settings")[0]);

getId("game-name").innerText = '';
getClass("hud-intro-form")[0].insertAdjacentHTML("afterbegin", `
    <h2>Player Options</h2>
`);

game.ui.components.uiIntro.connect = function() {
    if (!getId("hud-intro-play").classList.contains("is-disabled")) {
        getId("hud-intro-play").style.opacity = 0.4;
        game.network.setConnectionData(this.nameElem.value, this.partyKey, this.servers.find((t=>t.id == this.serversElem.value)));
        game.network.connect();
    };
};
game.ui.components.uiIntro.onSocketClosed = function() {
    if (true !== this.socketIntentionallyClosed) {
        if (!game.getInWorld()) {
            getId("hud-intro-play").style.opacity = 1;
        };
    };
};
game.ui.components.uiIntro.setFailure = function(t) {
    this.socketIntentionallyClosed = true;
    let e = "Unknown reason.";
    if (t.reason) {
        switch (t.reason) {
            case "MaxPlayerCount":
                e = "This server is currently full. Please try again later or select another server.";
                break;
            case "MaxIpLimit":
                e = "You've reached the maximum number of tabs."
        };
    };
    getId("hud-intro-play").style.opacity = 1;
    this.errorElem.innerText = e;
    this.serversElem.classList.add("has-error");
    this.errorElem.style.display = "block";
}
game.eventEmitter.on("SocketClosed", game.ui.components.uiIntro.onSocketClosed.bind(game.ui.components.uiIntro));
getId("hud-intro-play").addEventListener("mouseup", game.ui.components.uiIntro.connect.bind(game.ui.components.uiIntro));

window.addEventListener("load", async() => {
    const changelogs = await fetch("http://zombia.io/asset/changelog.md").then(e => e.text());
    getClass("hud-intro-latest-changelog")[0].innerText = changelogs.split("\n\n")[0];
    /*
    const currentChangelog = changelogs.split("\n\n")[0].split("\n");
    getClass("hud-intro-latest-changelog")[0].innerHTML = currentChangelog.map(e => {
        const importantText = e.split(":")[0];
        return [`<strong>${importantText}</strong>`, e.split(":")[1]].join(":");
    }).join("<br>");
    */
});






document.querySelector("#hud-intro-settings > div").insertAdjacentHTML("beforeend", `
    <input type="checkbox" class="hud-settings-skip-loading dark" id="hud-settings-skip-loading">
    <label style="word-wrap:break-word" for="hud-settings-skip-loading">Skip loading screen</label>

    <input type="checkbox" class="hud-settings-remove-animation dark" id="hud-settings-remove-animation">
    <label style="word-wrap:break-word" for="hud-settings-remove-animation">Remove intro animation</label>
`);

document.getElementsByClassName("hud-settings-skip-loading")[0].addEventListener("change", () => {
    window.storage.setItem("settings-skip-loading", document.getElementsByClassName("hud-settings-skip-loading")[0].checked);
});
document.getElementsByClassName("hud-settings-skip-loading")[0].checked = "true" === window.storage.getItem("settings-skip-loading");
game.eventEmitter.on("EnterWorldResponse", (t) => {
    window.storage.setItem("displayName", t.name);
    if (document.getElementsByClassName("hud-settings-skip-loading")[0].checked) {
        game.ui.components.uiIntro.hide();
        game.ui.components.uiIntro.inWorld = true;
        return;
    };
});

document.getElementsByClassName("hud-settings-remove-animation")[0].addEventListener("change", () => {
    window.storage.setItem("settings-remove-animation", document.getElementsByClassName("hud-settings-remove-animation")[0].checked);
    location.reload();
});
document.getElementsByClassName("hud-settings-remove-animation")[0].checked = "true" === window.storage.getItem("settings-remove-animation");

game.ui.components.uiIntro.onRendererUpdated = function(t) {
    const e = t - this.lastAnimationFrame;
    if (this.lastAnimationFrame = t, 1 != this.inWorld) {
        Math.random() < .005 && this.createResourceElement(!0);
        for (const t in this.resourceElements) {
            const r = this.resourceElements[t];
            r.y -= .024 * e,
                r.y <= -400 && this.destroyResourceElem(t),
                r.elem.style.top = r.y
        }
        window.storage.getItem("settings-remove-animation") === "true" || requestAnimationFrame(this.onRendererUpdated.bind(this));
    }
}

document.addEventListener("keydown", (e) => {
    if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") {
        if (e.key == "f") {
            game.network.sendRpc({
                name: "BuyTool",
                toolName: "HealthPotion"
            });
        };
    };
});

const enums = {
    packet: {
        0: 'PACKET_ENTITY_UPDATE',
        3: 'PACKET_INPUT',
        4: 'PACKET_ENTER_WORLD',
        5: 'PACKET_PRE_ENTER_WORLD',
        6: 'PACKET_ENTER_WORLD2',
        7: 'PACKET_PING',
        9: 'PACKET_RPC',
        10: 'PACKET_BLEND',
    },
};

/* @Functions */
// @ZoomWithNoLimitBcuz1.35xSucks
window.onwheel = e => {
    const _this = game.renderer;
    if (e.srcElement === _this.renderer.canvas) {
        if (e.deltaY > 0) _this.zoomDimension *= 1.015;
        else if (e.deltaY < 0) _this.zoomDimension /= 1.015;
        _this.onWindowResize();
    };
};


game.eventEmitter.once("EnterWorldResponse", async() => {
    fetch("http://zombia.io/layouts/" + document.getElementById("hud-intro-servers").value).then(async(e) => {
        const serverLayout = await e.json();
        for (const uid in serverLayout) {
            if (uid == "worldSize") continue;
            serverLayout[uid].aimingYaw = serverLayout[uid].yaw;
            serverLayout[uid].yaw = 0;
            game.renderer.world.createEntity(Object.assign(serverLayout[uid], {
                resourceType: ["Tree1", "Tree2"].indexOf(serverLayout[uid].model) > -1 ? "Tree" : "Stone",
                entityClass: "Resource",
                uid: parseInt(uid),
                radius: ["Tree1", "Tree2"].indexOf(serverLayout[uid].model) > -1 ? 68 : 52,
                hits: []
            }));
        };
        console.log(serverLayout);
    });
});

game.renderer.world.createEntity2 = game.renderer.world.createEntity;
game.renderer.world.createEntity = function(t) {
    if (t.uid in this.entities) return;
    game.renderer.world.createEntity2(t);
};

game.renderer.world.removeEntity = function(t) {
    if (this.entities[t].entityClass === "Resource") {
        if (this.entities[t].targetTick.position.x > 0 && this.entities[t].targetTick.position.y > 0) return;
    };

    game.renderer.remove(this.entities[t]);
    delete this.entities[t];
    this.entityGrid.removeEntity(parseInt(t));
};

game.debugs = {
    isDebuggingPacket: false,
    onOutgoingPacket: function(opcode, data, enc) {
        if (!this.isDebuggingPacket) return;
        console.log('%c OUTGOING', 'color: #00ff00', enums.packet[opcode], data, enc);
    },
    onIncomingPacket: function(msg, decoded) {
        if (!this.isDebuggingPacket || decoded.opcode == 0) return;
        console.log('%c INCOMING', 'color: #ff0000', enums.packet[decoded.opcode], decoded);
    }
};

game.network.sendPacket = function(opcode, data) {
    if (!this.connected) return;
    const encoded = this.encode(opcode, data);
    game.debugs.onOutgoingPacket(opcode, data, encoded);
    this.socket.send(encoded);
};

game.network.onSocketMessage = function(t) {
    if ("string" == typeof t.data) return console.log(t.data);
    const e = this.decode(t.data);
    game.debugs.onIncomingPacket(t, e);
    switch (e.opcode) {
        case 4:
            this.handleEnterWorldResponse(e);
            break;
        case 0:
            this.handleEntityUpdate(e);
            break;
        case 9:
            this.handleRpc(e);
            break;
        case 7:
            this.handlePing(e)
    }
}

game.network.onMessage = (msg => {
    const decoded = game.network.codec.decode(msg.data);
    game.network.sendPingIfNecessary();
    game.script.debugs.onIncomingPacket(msg, decoded);
    game.network.emitter.emit(game.script.enums.packet[decoded.opcode], decoded);
});