function arrChunk(t, e) {
    for (var i = [], n = 0; n < t.length; n += e) i.push(t.slice(n, n + e));
    return i
}
function isArrayFn(t) {
    return "[object Array]" === Object.prototype.toString.call(t)
} !
function(t, e) {
    "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e(t.echarts = {})
} (this,
function(t) {
    "use strict";
    function e(t, e) {
        "createCanvas" === t && (q_ = null),
        U_[t] = e
    }
    function i(t) {
        if (null == t || "object" != typeof t) return t;
        var e = t,
        n = F_.call(t);
        if ("[object Array]" === n) {
            if (!O(t)) {
                e = [];
                for (var o = 0,
                a = t.length; o < a; o++) e[o] = i(t[o])
            }
        } else if (V_[n]) {
            if (!O(t)) {
                var r = t.constructor;
                if (t.constructor.from) e = r.from(t);
                else {
                    e = new r(t.length);
                    for (var o = 0,
                    a = t.length; o < a; o++) e[o] = i(t[o])
                }
            }
        } else if (!B_[n] && !O(t) && !M(t)) {
            e = {};
            for (var s in t) t.hasOwnProperty(s) && (e[s] = i(t[s]))
        }
        return e
    }
    function n(t, e, o) {
        if (!w(e) || !w(t)) return o ? i(e) : t;
        for (var a in e) if (e.hasOwnProperty(a)) {
            var r = t[a],
            s = e[a]; ! w(s) || !w(r) || y(s) || y(r) || M(s) || M(r) || b(s) || b(r) || O(s) || O(r) ? !o && a in t || (t[a] = i(e[a], !0)) : n(r, s, o)
        }
        return t
    }
    function o(t, e) {
        for (var i = t[0], o = 1, a = t.length; o < a; o++) i = n(i, t[o], e);
        return i
    }
    function a(t, e) {
        for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]);
        return t
    }
    function r(t, e, i) {
        for (var n in e) e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]);
        return t
    }
    function s() {
        return q_ || (q_ = X_().getContext("2d")),
        q_
    }
    function l(t, e) {
        if (t) {
            if (t.indexOf) return t.indexOf(e);
            for (var i = 0,
            n = t.length; i < n; i++) if (t[i] === e) return i
        }
        return - 1
    }
    function u(t, e) {
        function i() {}
        var n = t.prototype;
        i.prototype = e.prototype,
        t.prototype = new i;
        for (var o in n) t.prototype[o] = n[o];
        t.prototype.constructor = t,
        t.superClass = e
    }
    function h(t, e, i) {
        r(t = "prototype" in t ? t.prototype: t, e = "prototype" in e ? e.prototype: e, i)
    }
    function c(t) {
        if (t) return "string" != typeof t && "number" == typeof t.length
    }
    function d(t, e, i) {
        if (t && e) if (t.forEach && t.forEach === W_) t.forEach(e, i);
        else if (t.length === +t.length) for (var n = 0,
        o = t.length; n < o; n++) e.call(i, t[n], n, t);
        else for (var a in t) t.hasOwnProperty(a) && e.call(i, t[a], a, t)
    }
    function f(t, e, i) {
        if (t && e) {
            if (t.map && t.map === j_) return t.map(e, i);
            for (var n = [], o = 0, a = t.length; o < a; o++) n.push(e.call(i, t[o], o, t));
            return n
        }
    }
    function p(t, e, i, n) {
        if (t && e) {
            if (t.reduce && t.reduce === Y_) return t.reduce(e, i, n);
            for (var o = 0,
            a = t.length; o < a; o++) i = e.call(n, i, t[o], o, t);
            return i
        }
    }
    function g(t, e, i) {
        if (t && e) {
            if (t.filter && t.filter === H_) return t.filter(e, i);
            for (var n = [], o = 0, a = t.length; o < a; o++) e.call(i, t[o], o, t) && n.push(t[o]);
            return n
        }
    }
    function m(t, e) {
        var i = Z_.call(arguments, 2);
        return function() {
            return t.apply(e, i.concat(Z_.call(arguments)))
        }
    }
    function v(t) {
        var e = Z_.call(arguments, 1);
        return function() {
            return t.apply(this, e.concat(Z_.call(arguments)))
        }
    }
    function y(t) {
        return "[object Array]" === F_.call(t)
    }
    function x(t) {
        return "function" == typeof t
    }
    function _(t) {
        return "[object String]" === F_.call(t)
    }
    function w(t) {
        var e = typeof t;
        return "function" === e || !!t && "object" == e
    }
    function b(t) {
        return !! B_[F_.call(t)]
    }
    function S(t) {
        return !! V_[F_.call(t)]
    }
    function M(t) {
        return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument
    }
    function I(t) {
        return t !== t
    }
    function T(t) {
        for (var e = 0,
        i = arguments.length; e < i; e++) if (null != arguments[e]) return arguments[e]
    }
    function A(t, e) {
        return null != t ? t: e
    }
    function D(t, e, i) {
        return null != t ? t: null != e ? e: i
    }
    function C() {
        return Function.call.apply(Z_, arguments)
    }
    function L(t) {
        if ("number" == typeof t) return [t, t, t, t];
        var e = t.length;
        return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
    }
    function k(t, e) {
        if (!t) throw new Error(e)
    }
    function P(t) {
        return null == t ? null: "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
    }
    function N(t) {
        t[K_] = !0
    }
    function O(t) {
        return t[K_]
    }
    function z(t) {
        function e(t, e) {
            i ? n.set(t, e) : n.set(e, t)
        }
        var i = y(t);
        this.data = {};
        var n = this;
        t instanceof z ? t.each(e) : t && d(t, e)
    }
    function E(t) {
        return new z(t)
    }
    function R(t, e) {
        for (var i = new t.constructor(t.length + e.length), n = 0; n < t.length; n++) i[n] = t[n];
        var o = t.length;
        for (n = 0; n < e.length; n++) i[n + o] = e[n];
        return i
    }
    function B() {}
    function V(t, e) {
        var i = new J_(2);
        return null == t && (t = 0),
        null == e && (e = 0),
        i[0] = t,
        i[1] = e,
        i
    }
    function F(t, e) {
        return t[0] = e[0],
        t[1] = e[1],
        t
    }
    function G(t) {
        var e = new J_(2);
        return e[0] = t[0],
        e[1] = t[1],
        e
    }
    function W(t, e, i) {
        return t[0] = e,
        t[1] = i,
        t
    }
    function H(t, e, i) {
        return t[0] = e[0] + i[0],
        t[1] = e[1] + i[1],
        t
    }
    function Z(t, e, i, n) {
        return t[0] = e[0] + i[0] * n,
        t[1] = e[1] + i[1] * n,
        t
    }
    function j(t, e, i) {
        return t[0] = e[0] - i[0],
        t[1] = e[1] - i[1],
        t
    }
    function Y(t) {
        return Math.sqrt(U(t))
    }
    function U(t) {
        return t[0] * t[0] + t[1] * t[1]
    }
    function X(t, e, i) {
        return t[0] = e[0] * i,
        t[1] = e[1] * i,
        t
    }
    function q(t, e) {
        var i = Y(e);
        return 0 === i ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / i, t[1] = e[1] / i),
        t
    }
    function K(t, e) {
        return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
    }
    function Q(t, e) {
        return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
    }
    function J(t, e, i, n) {
        return t[0] = e[0] + n * (i[0] - e[0]),
        t[1] = e[1] + n * (i[1] - e[1]),
        t
    }
    function $(t, e, i) {
        var n = e[0],
        o = e[1];
        return t[0] = i[0] * n + i[2] * o + i[4],
        t[1] = i[1] * n + i[3] * o + i[5],
        t
    }
    function tt(t, e, i) {
        return t[0] = Math.min(e[0], i[0]),
        t[1] = Math.min(e[1], i[1]),
        t
    }
    function et(t, e, i) {
        return t[0] = Math.max(e[0], i[0]),
        t[1] = Math.max(e[1], i[1]),
        t
    }
    function it() {
        this.on("mousedown", this._dragStart, this),
        this.on("mousemove", this._drag, this),
        this.on("mouseup", this._dragEnd, this),
        this.on("globalout", this._dragEnd, this)
    }
    function nt(t, e) {
        return {
            target: t,
            topTarget: e && e.topTarget
        }
    }
    function ot(t, e) {
        var i = t._$eventProcessor;
        return null != e && i && i.normalizeQuery && (e = i.normalizeQuery(e)),
        e
    }
    function at(t) {
        return t.getBoundingClientRect ? t.getBoundingClientRect() : {
            left: 0,
            top: 0
        }
    }
    function rt(t, e, i, n) {
        return i = i || {},
        n || !R_.canvasSupported ? st(t, e, i) : R_.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (i.zrX = e.layerX, i.zrY = e.layerY) : null != e.offsetX ? (i.zrX = e.offsetX, i.zrY = e.offsetY) : st(t, e, i),
        i
    }
    function st(t, e, i) {
        var n = at(t);
        i.zrX = e.clientX - n.left,
        i.zrY = e.clientY - n.top
    }
    function lt(t, e, i) {
        if (null != (e = e || window.event).zrX) return e;
        var n = e.type;
        if (n && n.indexOf("touch") >= 0) {
            var o = "touchend" != n ? e.targetTouches[0] : e.changedTouches[0];
            o && rt(t, o, e, i)
        } else rt(t, e, e, i),
        e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
        var a = e.button;
        return null == e.which && void 0 !== a && sw.test(e.type) && (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0),
        e
    }
    function ut(t, e, i) {
        rw ? t.addEventListener(e, i) : t.attachEvent("on" + e, i)
    }
    function ht(t, e, i) {
        rw ? t.removeEventListener(e, i) : t.detachEvent("on" + e, i)
    }
    function ct(t) {
        return t.which > 1
    }
    function dt(t, e, i) {
        return {
            type: t,
            event: i,
            target: e.target,
            topTarget: e.topTarget,
            cancelBubble: !1,
            offsetX: i.zrX,
            offsetY: i.zrY,
            gestureEvent: i.gestureEvent,
            pinchX: i.pinchX,
            pinchY: i.pinchY,
            pinchScale: i.pinchScale,
            wheelDelta: i.zrDelta,
            zrByTouch: i.zrByTouch,
            which: i.which,
            stop: ft
        }
    }
    function ft(t) {
        lw(this.event)
    }
    function pt() {}
    function gt(t, e, i) {
        if (t[t.rectHover ? "rectContain": "contain"](e, i)) {
            for (var n, o = t; o;) {
                if (o.clipPath && !o.clipPath.contain(e, i)) return ! 1;
                o.silent && (n = !0),
                o = o.parent
            }
            return ! n || uw
        }
        return ! 1
    }
    function mt() {
        var t = new dw(6);
        return vt(t),
        t
    }
    function vt(t) {
        return t[0] = 1,
        t[1] = 0,
        t[2] = 0,
        t[3] = 1,
        t[4] = 0,
        t[5] = 0,
        t
    }
    function yt(t, e) {
        return t[0] = e[0],
        t[1] = e[1],
        t[2] = e[2],
        t[3] = e[3],
        t[4] = e[4],
        t[5] = e[5],
        t
    }
    function xt(t, e, i) {
        var n = e[0] * i[0] + e[2] * i[1],
        o = e[1] * i[0] + e[3] * i[1],
        a = e[0] * i[2] + e[2] * i[3],
        r = e[1] * i[2] + e[3] * i[3],
        s = e[0] * i[4] + e[2] * i[5] + e[4],
        l = e[1] * i[4] + e[3] * i[5] + e[5];
        return t[0] = n,
        t[1] = o,
        t[2] = a,
        t[3] = r,
        t[4] = s,
        t[5] = l,
        t
    }
    function _t(t, e, i) {
        return t[0] = e[0],
        t[1] = e[1],
        t[2] = e[2],
        t[3] = e[3],
        t[4] = e[4] + i[0],
        t[5] = e[5] + i[1],
        t
    }
    function wt(t, e, i) {
        var n = e[0],
        o = e[2],
        a = e[4],
        r = e[1],
        s = e[3],
        l = e[5],
        u = Math.sin(i),
        h = Math.cos(i);
        return t[0] = n * h + r * u,
        t[1] = -n * u + r * h,
        t[2] = o * h + s * u,
        t[3] = -o * u + h * s,
        t[4] = h * a + u * l,
        t[5] = h * l - u * a,
        t
    }
    function bt(t, e, i) {
        var n = i[0],
        o = i[1];
        return t[0] = e[0] * n,
        t[1] = e[1] * o,
        t[2] = e[2] * n,
        t[3] = e[3] * o,
        t[4] = e[4] * n,
        t[5] = e[5] * o,
        t
    }
    function St(t, e) {
        var i = e[0],
        n = e[2],
        o = e[4],
        a = e[1],
        r = e[3],
        s = e[5],
        l = i * r - a * n;
        return l ? (l = 1 / l, t[0] = r * l, t[1] = -a * l, t[2] = -n * l, t[3] = i * l, t[4] = (n * s - r * o) * l, t[5] = (a * o - i * s) * l, t) : null
    }
    function Mt(t) {
        var e = mt();
        return yt(e, t),
        e
    }
    function It(t) {
        return t > gw || t < -gw
    }
    function Tt(t) {
        this._target = t.target,
        this._life = t.life || 1e3,
        this._delay = t.delay || 0,
        this._initialized = !1,
        this.loop = null != t.loop && t.loop,
        this.gap = t.gap || 0,
        this.easing = t.easing || "Linear",
        this.onframe = t.onframe,
        this.ondestroy = t.ondestroy,
        this.onrestart = t.onrestart,
        this._pausedTime = 0,
        this._paused = !1
    }
    function At(t) {
        return (t = Math.round(t)) < 0 ? 0 : t > 255 ? 255 : t
    }
    function Dt(t) {
        return (t = Math.round(t)) < 0 ? 0 : t > 360 ? 360 : t
    }
    function Ct(t) {
        return t < 0 ? 0 : t > 1 ? 1 : t
    }
    function Lt(t) {
        return At(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10))
    }
    function kt(t) {
        return Ct(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 : parseFloat(t))
    }
    function Pt(t, e, i) {
        return i < 0 ? i += 1 : i > 1 && (i -= 1),
        6 * i < 1 ? t + (e - t) * i * 6 : 2 * i < 1 ? e: 3 * i < 2 ? t + (e - t) * (2 / 3 - i) * 6 : t
    }
    function Nt(t, e, i) {
        return t + (e - t) * i
    }
    function Ot(t, e, i, n, o) {
        return t[0] = e,
        t[1] = i,
        t[2] = n,
        t[3] = o,
        t
    }
    function zt(t, e) {
        return t[0] = e[0],
        t[1] = e[1],
        t[2] = e[2],
        t[3] = e[3],
        t
    }
    function Et(t, e) {
        Cw && zt(Cw, e),
        Cw = Dw.put(t, Cw || e.slice())
    }
    function Rt(t, e) {
        if (t) {
            e = e || [];
            var i = Dw.get(t);
            if (i) return zt(e, i);
            var n = (t += "").replace(/ /g, "").toLowerCase();
            if (n in Aw) return zt(e, Aw[n]),
            Et(t, e),
            e;
            if ("#" !== n.charAt(0)) {
                var o = n.indexOf("("),
                a = n.indexOf(")");
                if ( - 1 !== o && a + 1 === n.length) {
                    var r = n.substr(0, o),
                    s = n.substr(o + 1, a - (o + 1)).split(","),
                    l = 1;
                    switch (r) {
                    case "rgba":
                        if (4 !== s.length) return void Ot(e, 0, 0, 0, 1);
                        l = kt(s.pop());
                    case "rgb":
                        return 3 !== s.length ? void Ot(e, 0, 0, 0, 1) : (Ot(e, Lt(s[0]), Lt(s[1]), Lt(s[2]), l), Et(t, e), e);
                    case "hsla":
                        return 4 !== s.length ? void Ot(e, 0, 0, 0, 1) : (s[3] = kt(s[3]), Bt(s, e), Et(t, e), e);
                    case "hsl":
                        return 3 !== s.length ? void Ot(e, 0, 0, 0, 1) : (Bt(s, e), Et(t, e), e);
                    default:
                        return
                    }
                }
                Ot(e, 0, 0, 0, 1)
            } else {
                if (4 === n.length) return (u = parseInt(n.substr(1), 16)) >= 0 && u <= 4095 ? (Ot(e, (3840 & u) >> 4 | (3840 & u) >> 8, 240 & u | (240 & u) >> 4, 15 & u | (15 & u) << 4, 1), Et(t, e), e) : void Ot(e, 0, 0, 0, 1);
                if (7 === n.length) {
                    var u = parseInt(n.substr(1), 16);
                    return u >= 0 && u <= 16777215 ? (Ot(e, (16711680 & u) >> 16, (65280 & u) >> 8, 255 & u, 1), Et(t, e), e) : void Ot(e, 0, 0, 0, 1)
                }
            }
        }
    }
    function Bt(t, e) {
        var i = (parseFloat(t[0]) % 360 + 360) % 360 / 360,
        n = kt(t[1]),
        o = kt(t[2]),
        a = o <= .5 ? o * (n + 1) : o + n - o * n,
        r = 2 * o - a;
        return e = e || [],
        Ot(e, At(255 * Pt(r, a, i + 1 / 3)), At(255 * Pt(r, a, i)), At(255 * Pt(r, a, i - 1 / 3)), 1),
        4 === t.length && (e[3] = t[3]),
        e
    }
    function Vt(t) {
        if (t) {
            var e, i, n = t[0] / 255,
            o = t[1] / 255,
            a = t[2] / 255,
            r = Math.min(n, o, a),
            s = Math.max(n, o, a),
            l = s - r,
            u = (s + r) / 2;
            if (0 === l) e = 0,
            i = 0;
            else {
                i = u < .5 ? l / (s + r) : l / (2 - s - r);
                var h = ((s - n) / 6 + l / 2) / l,
                c = ((s - o) / 6 + l / 2) / l,
                d = ((s - a) / 6 + l / 2) / l;
                n === s ? e = d - c: o === s ? e = 1 / 3 + h - d: a === s && (e = 2 / 3 + c - h),
                e < 0 && (e += 1),
                e > 1 && (e -= 1)
            }
            var f = [360 * e, i, u];
            return null != t[3] && f.push(t[3]),
            f
        }
    }
    function Ft(t, e) {
        var i = Rt(t);
        if (i) {
            for (var n = 0; n < 3; n++) i[n] = e < 0 ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0,
            i[n] > 255 ? i[n] = 255 : t[n] < 0 && (i[n] = 0);
            return Yt(i, 4 === i.length ? "rgba": "rgb")
        }
    }
    function Gt(t) {
        var e = Rt(t);
        if (e) return ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1)
    }
    function Wt(t, e, i) {
        if (e && e.length && t >= 0 && t <= 1) {
            i = i || [];
            var n = t * (e.length - 1),
            o = Math.floor(n),
            a = Math.ceil(n),
            r = e[o],
            s = e[a],
            l = n - o;
            return i[0] = At(Nt(r[0], s[0], l)),
            i[1] = At(Nt(r[1], s[1], l)),
            i[2] = At(Nt(r[2], s[2], l)),
            i[3] = Ct(Nt(r[3], s[3], l)),
            i
        }
    }
    function Ht(t, e, i) {
        if (e && e.length && t >= 0 && t <= 1) {
            var n = t * (e.length - 1),
            o = Math.floor(n),
            a = Math.ceil(n),
            r = Rt(e[o]),
            s = Rt(e[a]),
            l = n - o,
            u = Yt([At(Nt(r[0], s[0], l)), At(Nt(r[1], s[1], l)), At(Nt(r[2], s[2], l)), Ct(Nt(r[3], s[3], l))], "rgba");
            return i ? {
                color: u,
                leftIndex: o,
                rightIndex: a,
                value: n
            }: u
        }
    }
    function Zt(t, e, i, n) {
        if (t = Rt(t)) return t = Vt(t),
        null != e && (t[0] = Dt(e)),
        null != i && (t[1] = kt(i)),
        null != n && (t[2] = kt(n)),
        Yt(Bt(t), "rgba")
    }
    function jt(t, e) {
        if ((t = Rt(t)) && null != e) return t[3] = Ct(e),
        Yt(t, "rgba")
    }
    function Yt(t, e) {
        if (t && t.length) {
            var i = t[0] + "," + t[1] + "," + t[2];
            return "rgba" !== e && "hsva" !== e && "hsla" !== e || (i += "," + t[3]),
            e + "(" + i + ")"
        }
    }
    function Ut(t, e) {
        return t[e]
    }
    function Xt(t, e, i) {
        t[e] = i
    }
    function qt(t, e, i) {
        return (e - t) * i + t
    }
    function Kt(t, e, i) {
        return i > .5 ? e: t
    }
    function Qt(t, e, i, n, o) {
        var a = t.length;
        if (1 == o) for (s = 0; s < a; s++) n[s] = qt(t[s], e[s], i);
        else for (var r = a && t[0].length, s = 0; s < a; s++) for (var l = 0; l < r; l++) n[s][l] = qt(t[s][l], e[s][l], i)
    }
    function Jt(t, e, i) {
        var n = t.length,
        o = e.length;
        if (n !== o) if (n > o) t.length = o;
        else for (r = n; r < o; r++) t.push(1 === i ? e[r] : Nw.call(e[r]));
        for (var a = t[0] && t[0].length, r = 0; r < t.length; r++) if (1 === i) isNaN(t[r]) && (t[r] = e[r]);
        else for (var s = 0; s < a; s++) isNaN(t[r][s]) && (t[r][s] = e[r][s])
    }
    function $t(t, e, i) {
        if (t === e) return ! 0;
        var n = t.length;
        if (n !== e.length) return ! 1;
        if (1 === i) {
            for (a = 0; a < n; a++) if (t[a] !== e[a]) return ! 1
        } else for (var o = t[0].length, a = 0; a < n; a++) for (var r = 0; r < o; r++) if (t[a][r] !== e[a][r]) return ! 1;
        return ! 0
    }
    function te(t, e, i, n, o, a, r, s, l) {
        var u = t.length;
        if (1 == l) for (c = 0; c < u; c++) s[c] = ee(t[c], e[c], i[c], n[c], o, a, r);
        else for (var h = t[0].length, c = 0; c < u; c++) for (var d = 0; d < h; d++) s[c][d] = ee(t[c][d], e[c][d], i[c][d], n[c][d], o, a, r)
    }
    function ee(t, e, i, n, o, a, r) {
        var s = .5 * (i - t),
        l = .5 * (n - e);
        return (2 * (e - i) + s + l) * r + ( - 3 * (e - i) - 2 * s - l) * a + s * o + e
    }
    function ie(t) {
        if (c(t)) {
            var e = t.length;
            if (c(t[0])) {
                for (var i = [], n = 0; n < e; n++) i.push(Nw.call(t[n]));
                return i
            }
            return Nw.call(t)
        }
        return t
    }
    function ne(t) {
        return t[0] = Math.floor(t[0]),
        t[1] = Math.floor(t[1]),
        t[2] = Math.floor(t[2]),
        "rgba(" + t.join(",") + ")"
    }
    function oe(t) {
        var e = t[t.length - 1].value;
        return c(e && e[0]) ? 2 : 1
    }
    function ae(t, e, i, n, o, a) {
        var r = t._getter,
        s = t._setter,
        l = "spline" === e,
        u = n.length;
        if (u) {
            var h, d = c(n[0].value),
            f = !1,
            p = !1,
            g = d ? oe(n) : 0;
            n.sort(function(t, e) {
                return t.time - e.time
            }),
            h = n[u - 1].time;
            for (var m = [], v = [], y = n[0].value, x = !0, _ = 0; _ < u; _++) {
                m.push(n[_].time / h);
                var w = n[_].value;
                if (d && $t(w, y, g) || !d && w === y || (x = !1), y = w, "string" == typeof w) {
                    var b = Rt(w);
                    b ? (w = b, f = !0) : p = !0
                }
                v.push(w)
            }
            if (a || !x) {
                for (var S = v[u - 1], _ = 0; _ < u - 1; _++) d ? Jt(v[_], S, g) : !isNaN(v[_]) || isNaN(S) || p || f || (v[_] = S);
                d && Jt(r(t._target, o), S, g);
                var M, I, T, A, D, C, L = 0,
                k = 0;
                if (f) var P = [0, 0, 0, 0];
                var N = new Tt({
                    target: t._target,
                    life: h,
                    loop: t._loop,
                    delay: t._delay,
                    onframe: function(t, e) {
                        var i;
                        if (e < 0) i = 0;
                        else if (e < k) {
                            for (i = M = Math.min(L + 1, u - 1); i >= 0 && !(m[i] <= e); i--);
                            i = Math.min(i, u - 2)
                        } else {
                            for (i = L; i < u && !(m[i] > e); i++);
                            i = Math.min(i - 1, u - 2)
                        }
                        L = i,
                        k = e;
                        var n = m[i + 1] - m[i];
                        if (0 !== n) if (I = (e - m[i]) / n, l) if (A = v[i], T = v[0 === i ? i: i - 1], D = v[i > u - 2 ? u - 1 : i + 1], C = v[i > u - 3 ? u - 1 : i + 2], d) te(T, A, D, C, I, I * I, I * I * I, r(t, o), g);
                        else {
                            if (f) a = te(T, A, D, C, I, I * I, I * I * I, P, 1),
                            a = ne(P);
                            else {
                                if (p) return Kt(A, D, I);
                                a = ee(T, A, D, C, I, I * I, I * I * I)
                            }
                            s(t, o, a)
                        } else if (d) Qt(v[i], v[i + 1], I, r(t, o), g);
                        else {
                            var a;
                            if (f) Qt(v[i], v[i + 1], I, P, 1),
                            a = ne(P);
                            else {
                                if (p) return Kt(v[i], v[i + 1], I);
                                a = qt(v[i], v[i + 1], I)
                            }
                            s(t, o, a)
                        }
                    },
                    ondestroy: i
                });
                return e && "spline" !== e && (N.easing = e),
                N
            }
        }
    }
    function re(t, e, i, n, o, a, r, s) {
        _(n) ? (a = o, o = n, n = 0) : x(o) ? (a = o, o = "linear", n = 0) : x(n) ? (a = n, n = 0) : x(i) ? (a = i, i = 500) : i || (i = 500),
        t.stopAnimation(),
        se(t, "", t, e, i, n, s);
        var l = t.animators.slice(),
        u = l.length;
        u || a && a();
        for (var h = 0; h < l.length; h++) l[h].done(function() {--u || a && a()
        }).start(o, r)
    }
    function se(t, e, i, n, o, a, r) {
        var s = {},
        l = 0;
        for (var u in n) n.hasOwnProperty(u) && (null != i[u] ? w(n[u]) && !c(n[u]) ? se(t, e ? e + "." + u: u, i[u], n[u], o, a, r) : (r ? (s[u] = i[u], le(t, e, u, n[u])) : s[u] = n[u], l++) : null == n[u] || r || le(t, e, u, n[u]));
        l > 0 && t.animate(e, !1).when(null == o ? 500 : o, s).delay(a || 0)
    }
    function le(t, e, i, n) {
        if (e) {
            var o = {};
            o[e] = {},
            o[e][i] = n,
            t.attr(o)
        } else t.attr(i, n)
    }
    function ue(t, e, i, n) {
        i < 0 && (t += i, i = -i),
        n < 0 && (e += n, n = -n),
        this.x = t,
        this.y = e,
        this.width = i,
        this.height = n
    }
    function he(t) {
        for (var e = 0; t >= jw;) e |= 1 & t,
        t >>= 1;
        return t + e
    }
    function ce(t, e, i, n) {
        var o = e + 1;
        if (o === i) return 1;
        if (n(t[o++], t[e]) < 0) {
            for (; o < i && n(t[o], t[o - 1]) < 0;) o++;
            de(t, e, o)
        } else for (; o < i && n(t[o], t[o - 1]) >= 0;) o++;
        return o - e
    }
    function de(t, e, i) {
        for (i--; e < i;) {
            var n = t[e];
            t[e++] = t[i],
            t[i--] = n
        }
    }
    function fe(t, e, i, n, o) {
        for (n === e && n++; n < i; n++) {
            for (var a, r = t[n], s = e, l = n; s < l;) o(r, t[a = s + l >>> 1]) < 0 ? l = a: s = a + 1;
            var u = n - s;
            switch (u) {
            case 3:
                t[s + 3] = t[s + 2];
            case 2:
                t[s + 2] = t[s + 1];
            case 1:
                t[s + 1] = t[s];
                break;
            default:
                for (; u > 0;) t[s + u] = t[s + u - 1],
                u--
            }
            t[s] = r
        }
    }
    function pe(t, e, i, n, o, a) {
        var r = 0,
        s = 0,
        l = 1;
        if (a(t, e[i + o]) > 0) {
            for (s = n - o; l < s && a(t, e[i + o + l]) > 0;) r = l,
            (l = 1 + (l << 1)) <= 0 && (l = s);
            l > s && (l = s),
            r += o,
            l += o
        } else {
            for (s = o + 1; l < s && a(t, e[i + o - l]) <= 0;) r = l,
            (l = 1 + (l << 1)) <= 0 && (l = s);
            l > s && (l = s);
            var u = r;
            r = o - l,
            l = o - u
        }
        for (r++; r < l;) {
            var h = r + (l - r >>> 1);
            a(t, e[i + h]) > 0 ? r = h + 1 : l = h
        }
        return l
    }
    function ge(t, e, i, n, o, a) {
        var r = 0,
        s = 0,
        l = 1;
        if (a(t, e[i + o]) < 0) {
            for (s = o + 1; l < s && a(t, e[i + o - l]) < 0;) r = l,
            (l = 1 + (l << 1)) <= 0 && (l = s);
            l > s && (l = s);
            var u = r;
            r = o - l,
            l = o - u
        } else {
            for (s = n - o; l < s && a(t, e[i + o + l]) >= 0;) r = l,
            (l = 1 + (l << 1)) <= 0 && (l = s);
            l > s && (l = s),
            r += o,
            l += o
        }
        for (r++; r < l;) {
            var h = r + (l - r >>> 1);
            a(t, e[i + h]) < 0 ? l = h: r = h + 1
        }
        return l
    }
    function me(t, e) {
        function i(i) {
            var s = a[i],
            u = r[i],
            h = a[i + 1],
            c = r[i + 1];
            r[i] = u + c,
            i === l - 3 && (a[i + 1] = a[i + 2], r[i + 1] = r[i + 2]),
            l--;
            var d = ge(t[h], t, s, u, 0, e);
            s += d,
            0 != (u -= d) && 0 !== (c = pe(t[s + u - 1], t, h, c, c - 1, e)) && (u <= c ? n(s, u, h, c) : o(s, u, h, c))
        }
        function n(i, n, o, a) {
            var r = 0;
            for (r = 0; r < n; r++) u[r] = t[i + r];
            var l = 0,
            h = o,
            c = i;
            if (t[c++] = t[h++], 0 != --a) if (1 !== n) {
                for (var d, f, p, g = s;;) {
                    d = 0,
                    f = 0,
                    p = !1;
                    do {
                        if (e(t[h], u[l]) < 0) {
                            if (t[c++] = t[h++], f++, d = 0, 0 == --a) {
                                p = !0;
                                break
                            }
                        } else if (t[c++] = u[l++], d++, f = 0, 1 == --n) {
                            p = !0;
                            break
                        }
                    } while (( d | f ) < g);
                    if (p) break;
                    do {
                        if (0 !== (d = ge(t[h], u, l, n, 0, e))) {
                            for (r = 0; r < d; r++) t[c + r] = u[l + r];
                            if (c += d, l += d, (n -= d) <= 1) {
                                p = !0;
                                break
                            }
                        }
                        if (t[c++] = t[h++], 0 == --a) {
                            p = !0;
                            break
                        }
                        if (0 !== (f = pe(u[l], t, h, a, 0, e))) {
                            for (r = 0; r < f; r++) t[c + r] = t[h + r];
                            if (c += f, h += f, 0 == (a -= f)) {
                                p = !0;
                                break
                            }
                        }
                        if (t[c++] = u[l++], 1 == --n) {
                            p = !0;
                            break
                        }
                        g--
                    } while ( d >= Yw || f >= Yw );
                    if (p) break;
                    g < 0 && (g = 0),
                    g += 2
                }
                if ((s = g) < 1 && (s = 1), 1 === n) {
                    for (r = 0; r < a; r++) t[c + r] = t[h + r];
                    t[c + a] = u[l]
                } else {
                    if (0 === n) throw new Error;
                    for (r = 0; r < n; r++) t[c + r] = u[l + r]
                }
            } else {
                for (r = 0; r < a; r++) t[c + r] = t[h + r];
                t[c + a] = u[l]
            } else for (r = 0; r < n; r++) t[c + r] = u[l + r]
        }
        function o(i, n, o, a) {
            var r = 0;
            for (r = 0; r < a; r++) u[r] = t[o + r];
            var l = i + n - 1,
            h = a - 1,
            c = o + a - 1,
            d = 0,
            f = 0;
            if (t[c--] = t[l--], 0 != --n) if (1 !== a) {
                for (var p = s;;) {
                    var g = 0,
                    m = 0,
                    v = !1;
                    do {
                        if (e(u[h], t[l]) < 0) {
                            if (t[c--] = t[l--], g++, m = 0, 0 == --n) {
                                v = !0;
                                break
                            }
                        } else if (t[c--] = u[h--], m++, g = 0, 1 == --a) {
                            v = !0;
                            break
                        }
                    } while (( g | m ) < p);
                    if (v) break;
                    do {
                        if (0 != (g = n - ge(u[h], t, i, n, n - 1, e))) {
                            for (n -= g, f = 1 + (c -= g), d = 1 + (l -= g), r = g - 1; r >= 0; r--) t[f + r] = t[d + r];
                            if (0 === n) {
                                v = !0;
                                break
                            }
                        }
                        if (t[c--] = u[h--], 1 == --a) {
                            v = !0;
                            break
                        }
                        if (0 != (m = a - pe(t[l], u, 0, a, a - 1, e))) {
                            for (a -= m, f = 1 + (c -= m), d = 1 + (h -= m), r = 0; r < m; r++) t[f + r] = u[d + r];
                            if (a <= 1) {
                                v = !0;
                                break
                            }
                        }
                        if (t[c--] = t[l--], 0 == --n) {
                            v = !0;
                            break
                        }
                        p--
                    } while ( g >= Yw || m >= Yw );
                    if (v) break;
                    p < 0 && (p = 0),
                    p += 2
                }
                if ((s = p) < 1 && (s = 1), 1 === a) {
                    for (f = 1 + (c -= n), d = 1 + (l -= n), r = n - 1; r >= 0; r--) t[f + r] = t[d + r];
                    t[c] = u[h]
                } else {
                    if (0 === a) throw new Error;
                    for (d = c - (a - 1), r = 0; r < a; r++) t[d + r] = u[r]
                }
            } else {
                for (f = 1 + (c -= n), d = 1 + (l -= n), r = n - 1; r >= 0; r--) t[f + r] = t[d + r];
                t[c] = u[h]
            } else for (d = c - (a - 1), r = 0; r < a; r++) t[d + r] = u[r]
        }
        var a, r, s = Yw,
        l = 0,
        u = [];
        a = [],
        r = [],
        this.mergeRuns = function() {
            for (; l > 1;) {
                var t = l - 2;
                if (t >= 1 && r[t - 1] <= r[t] + r[t + 1] || t >= 2 && r[t - 2] <= r[t] + r[t - 1]) r[t - 1] < r[t + 1] && t--;
                else if (r[t] > r[t + 1]) break;
                i(t)
            }
        },
        this.forceMergeRuns = function() {
            for (; l > 1;) {
                var t = l - 2;
                t > 0 && r[t - 1] < r[t + 1] && t--,
                i(t)
            }
        },
        this.pushRun = function(t, e) {
            a[l] = t,
            r[l] = e,
            l += 1
        }
    }
    function ve(t, e, i, n) {
        i || (i = 0),
        n || (n = t.length);
        var o = n - i;
        if (! (o < 2)) {
            var a = 0;
            if (o < jw) return a = ce(t, i, n, e),
            void fe(t, i, n, i + a, e);
            var r = new me(t, e),
            s = he(o);
            do {
                if ((a = ce(t, i, n, e)) < s) {
                    var l = o;
                    l > s && (l = s),
                    fe(t, i, i + l, i + a, e),
                    a = l
                }
                r.pushRun(i, a), r.mergeRuns(), o -= a, i += a
            } while ( 0 !== o );
            r.forceMergeRuns()
        }
    }
    function ye(t, e) {
        return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2: t.z - e.z: t.zlevel - e.zlevel
    }
    function xe(t, e, i) {
        var n = null == e.x ? 0 : e.x,
        o = null == e.x2 ? 1 : e.x2,
        a = null == e.y ? 0 : e.y,
        r = null == e.y2 ? 0 : e.y2;
        return e.global || (n = n * i.width + i.x, o = o * i.width + i.x, a = a * i.height + i.y, r = r * i.height + i.y),
        n = isNaN(n) ? 0 : n,
        o = isNaN(o) ? 1 : o,
        a = isNaN(a) ? 0 : a,
        r = isNaN(r) ? 0 : r,
        t.createLinearGradient(n, a, o, r)
    }
    function _e(t, e, i) {
        var n = i.width,
        o = i.height,
        a = Math.min(n, o),
        r = null == e.x ? .5 : e.x,
        s = null == e.y ? .5 : e.y,
        l = null == e.r ? .5 : e.r;
        return e.global || (r = r * n + i.x, s = s * o + i.y, l *= a),
        t.createRadialGradient(r, s, 0, r, s, l)
    }
    function we() {
        return ! 1
    }
    function be(t, e, i) {
        var n = X_(),
        o = e.getWidth(),
        a = e.getHeight(),
        r = n.style;
        return r && (r.position = "absolute", r.left = 0, r.top = 0, r.width = o + "px", r.height = a + "px", n.setAttribute("data-zr-dom-id", t)),
        n.width = o * i,
        n.height = a * i,
        n
    }
    function Se(t) {
        if ("string" == typeof t) {
            var e = ob.get(t);
            return e && e.image
        }
        return t
    }
    function Me(t, e, i, n, o) {
        if (t) {
            if ("string" == typeof t) {
                if (e && e.__zrImageSrc === t || !i) return e;
                var a = ob.get(t),
                r = {
                    hostEl: i,
                    cb: n,
                    cbPayload: o
                };
                return a ? !Te(e = a.image) && a.pending.push(r) : (!e && (e = new Image), e.onload = e.onerror = Ie, ob.put(t, e.__cachedImgObj = {
                    image: e,
                    pending: [r]
                }), e.src = e.__zrImageSrc = t),
                e
            }
            return t
        }
        return e
    }
    function Ie() {
        var t = this.__cachedImgObj;
        this.onload = this.onerror = this.__cachedImgObj = null;
        for (var e = 0; e < t.pending.length; e++) {
            var i = t.pending[e],
            n = i.cb;
            n && n(this, i.cbPayload),
            i.hostEl.dirty()
        }
        t.pending.length = 0
    }
    function Te(t) {
        return t && t.width && t.height
    }
    function Ae(t, e) {
        var i = t + ":" + (e = e || ub);
        if (ab[i]) return ab[i];
        for (var n = (t + "").split("\n"), o = 0, a = 0, r = n.length; a < r; a++) o = Math.max(Ve(n[a], e).width, o);
        return rb > sb && (rb = 0, ab = {}),
        rb++,
        ab[i] = o,
        o
    }
    function De(t, e, i, n, o, a, r) {
        return a ? Le(t, e, i, n, o, a, r) : Ce(t, e, i, n, o, r)
    }
    function Ce(t, e, i, n, o, a) {
        var r = Fe(t, e, o, a),
        s = Ae(t, e);
        o && (s += o[1] + o[3]);
        var l = r.outerHeight,
        u = new ue(ke(0, s, i), Pe(0, l, n), s, l);
        return u.lineHeight = r.lineHeight,
        u
    }
    function Le(t, e, i, n, o, a, r) {
        var s = Ge(t, {
            rich: a,
            truncate: r,
            font: e,
            textAlign: i,
            textPadding: o
        }),
        l = s.outerWidth,
        u = s.outerHeight;
        return new ue(ke(0, l, i), Pe(0, u, n), l, u)
    }
    function ke(t, e, i) {
        return "right" === i ? t -= e: "center" === i && (t -= e / 2),
        t
    }
    function Pe(t, e, i) {
        return "middle" === i ? t -= e / 2 : "bottom" === i && (t -= e),
        t
    }
    function Ne(t, e, i) {
        var n = e.x,
        o = e.y,
        a = e.height,
        r = e.width,
        s = a / 2,
        l = "left",
        u = "top";
        switch (t) {
        case "left":
            n -= i,
            o += s,
            l = "right",
            u = "middle";
            break;
        case "right":
            n += i + r,
            o += s,
            u = "middle";
            break;
        case "top":
            n += r / 2,
            o -= i,
            l = "center",
            u = "bottom";
            break;
        case "bottom":
            n += r / 2,
            o += a + i,
            l = "center";
            break;
        case "inside":
            n += r / 2,
            o += s,
            l = "center",
            u = "middle";
            break;
        case "insideLeft":
            n += i,
            o += s,
            u = "middle";
            break;
        case "insideRight":
            n += r - i,
            o += s,
            l = "right",
            u = "middle";
            break;
        case "insideTop":
            n += r / 2,
            o += i,
            l = "center";
            break;
        case "insideBottom":
            n += r / 2,
            o += a - i,
            l = "center",
            u = "bottom";
            break;
        case "insideTopLeft":
            n += i,
            o += i;
            break;
        case "insideTopRight":
            n += r - i,
            o += i,
            l = "right";
            break;
        case "insideBottomLeft":
            n += i,
            o += a - i,
            u = "bottom";
            break;
        case "insideBottomRight":
            n += r - i,
            o += a - i,
            l = "right",
            u = "bottom"
        }
        return {
            x: n,
            y: o,
            textAlign: l,
            textVerticalAlign: u
        }
    }
    function Oe(t, e, i, n, o) {
        if (!e) return "";
        var a = (t + "").split("\n");
        o = ze(e, i, n, o);
        for (var r = 0,
        s = a.length; r < s; r++) a[r] = Ee(a[r], o);
        return a.join("\n")
    }
    function ze(t, e, i, n) { (n = a({},
        n)).font = e;
        var i = A(i, "...");
        n.maxIterations = A(n.maxIterations, 2);
        var o = n.minChar = A(n.minChar, 0);
        n.cnCharWidth = Ae("国", e);
        var r = n.ascCharWidth = Ae("a", e);
        n.placeholder = A(n.placeholder, "");
        for (var s = t = Math.max(0, t - 1), l = 0; l < o && s >= r; l++) s -= r;
        var u = Ae(i);
        return u > s && (i = "", u = 0),
        s = t - u,
        n.ellipsis = i,
        n.ellipsisWidth = u,
        n.contentWidth = s,
        n.containerWidth = t,
        n
    }
    function Ee(t, e) {
        var i = e.containerWidth,
        n = e.font,
        o = e.contentWidth;
        if (!i) return "";
        var a = Ae(t, n);
        if (a <= i) return t;
        for (var r = 0;; r++) {
            if (a <= o || r >= e.maxIterations) {
                t += e.ellipsis;
                break
            }
            var s = 0 === r ? Re(t, o, e.ascCharWidth, e.cnCharWidth) : a > 0 ? Math.floor(t.length * o / a) : 0;
            a = Ae(t = t.substr(0, s), n)
        }
        return "" === t && (t = e.placeholder),
        t
    }
    function Re(t, e, i, n) {
        for (var o = 0,
        a = 0,
        r = t.length; a < r && o < e; a++) {
            var s = t.charCodeAt(a);
            o += 0 <= s && s <= 127 ? i: n
        }
        return a
    }
    function Be(t) {
        return Ae("国", t)
    }
    function Ve(t, e) {
        return hb.measureText(t, e)
    }
    function Fe(t, e, i, n) {
        null != t && (t += "");
        var o = Be(e),
        a = t ? t.split("\n") : [],
        r = a.length * o,
        s = r;
        if (i && (s += i[0] + i[2]), t && n) {
            var l = n.outerHeight,
            u = n.outerWidth;
            if (null != l && s > l) t = "",
            a = [];
            else if (null != u) for (var h = ze(u - (i ? i[1] + i[3] : 0), e, n.ellipsis, {
                minChar: n.minChar,
                placeholder: n.placeholder
            }), c = 0, d = a.length; c < d; c++) a[c] = Ee(a[c], h)
        }
        return {
            lines: a,
            height: r,
            outerHeight: s,
            lineHeight: o
        }
    }
    function Ge(t, e) {
        var i = {
            lines: [],
            width: 0,
            height: 0
        };
        if (null != t && (t += ""), !t) return i;
        for (var n, o = lb.lastIndex = 0; null != (n = lb.exec(t));) {
            var a = n.index;
            a > o && We(i, t.substring(o, a)),
            We(i, n[2], n[1]),
            o = lb.lastIndex
        }
        o < t.length && We(i, t.substring(o, t.length));
        var r = i.lines,
        s = 0,
        l = 0,
        u = [],
        h = e.textPadding,
        c = e.truncate,
        d = c && c.outerWidth,
        f = c && c.outerHeight;
        for (h && (null != d && (d -= h[1] + h[3]), null != f && (f -= h[0] + h[2])), L = 0; L < r.length; L++) {
            for (var p = r[L], g = 0, m = 0, v = 0; v < p.tokens.length; v++) {
                var y = (k = p.tokens[v]).styleName && e.rich[k.styleName] || {},
                x = k.textPadding = y.textPadding,
                _ = k.font = y.font || e.font,
                w = k.textHeight = A(y.textHeight, Be(_));
                if (x && (w += x[0] + x[2]), k.height = w, k.lineHeight = D(y.textLineHeight, e.textLineHeight, w), k.textAlign = y && y.textAlign || e.textAlign, k.textVerticalAlign = y && y.textVerticalAlign || "middle", null != f && s + k.lineHeight > f) return {
                    lines: [],
                    width: 0,
                    height: 0
                };
                k.textWidth = Ae(k.text, _);
                var b = y.textWidth,
                S = null == b || "auto" === b;
                if ("string" == typeof b && "%" === b.charAt(b.length - 1)) k.percentWidth = b,
                u.push(k),
                b = 0;
                else {
                    if (S) {
                        b = k.textWidth;
                        var M = y.textBackgroundColor,
                        I = M && M.image;
                        I && Te(I = Se(I)) && (b = Math.max(b, I.width * w / I.height))
                    }
                    var T = x ? x[1] + x[3] : 0;
                    b += T;
                    var C = null != d ? d - m: null;
                    null != C && C < b && (!S || C < T ? (k.text = "", k.textWidth = b = 0) : (k.text = Oe(k.text, C - T, _, c.ellipsis, {
                        minChar: c.minChar
                    }), k.textWidth = Ae(k.text, _), b = k.textWidth + T))
                }
                m += k.width = b,
                y && (g = Math.max(g, k.lineHeight))
            }
            p.width = m,
            p.lineHeight = g,
            s += g,
            l = Math.max(l, m)
        }
        i.outerWidth = i.width = A(e.textWidth, l),
        i.outerHeight = i.height = A(e.textHeight, s),
        h && (i.outerWidth += h[1] + h[3], i.outerHeight += h[0] + h[2]);
        for (var L = 0; L < u.length; L++) {
            var k = u[L],
            P = k.percentWidth;
            k.width = parseInt(P, 10) / 100 * l
        }
        return i
    }
    function We(t, e, i) {
        for (var n = "" === e,
        o = e.split("\n"), a = t.lines, r = 0; r < o.length; r++) {
            var s = o[r],
            l = {
                styleName: i,
                text: s,
                isLineHolder: !s && !n
            };
            if (r) a.push({
                tokens: [l]
            });
            else {
                var u = (a[a.length - 1] || (a[0] = {
                    tokens: []
                })).tokens,
                h = u.length;
                1 === h && u[0].isLineHolder ? u[0] = l: (s || !h || n) && u.push(l)
            }
        }
    }
    function He(t) {
        var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily || "sans-serif"].join(" ");
        return e && P(e) || t.textFont || t.font
    }
    function Ze(t, e) {
        var i, n, o, a, r = e.x,
        s = e.y,
        l = e.width,
        u = e.height,
        h = e.r;
        l < 0 && (r += l, l = -l),
        u < 0 && (s += u, u = -u),
        "number" == typeof h ? i = n = o = a = h: h instanceof Array ? 1 === h.length ? i = n = o = a = h[0] : 2 === h.length ? (i = o = h[0], n = a = h[1]) : 3 === h.length ? (i = h[0], n = a = h[1], o = h[2]) : (i = h[0], n = h[1], o = h[2], a = h[3]) : i = n = o = a = 0;
        var c;
        i + n > l && (i *= l / (c = i + n), n *= l / c),
        o + a > l && (o *= l / (c = o + a), a *= l / c),
        n + o > u && (n *= u / (c = n + o), o *= u / c),
        i + a > u && (i *= u / (c = i + a), a *= u / c),
        t.moveTo(r + i, s),
        t.lineTo(r + l - n, s),
        0 !== n && t.arc(r + l - n, s + n, n, -Math.PI / 2, 0),
        t.lineTo(r + l, s + u - o),
        0 !== o && t.arc(r + l - o, s + u - o, o, 0, Math.PI / 2),
        t.lineTo(r + a, s + u),
        0 !== a && t.arc(r + a, s + u - a, a, Math.PI / 2, Math.PI),
        t.lineTo(r, s + i),
        0 !== i && t.arc(r + i, s + i, i, Math.PI, 1.5 * Math.PI)
    }
    function je(t) {
        return Ye(t),
        d(t.rich, Ye),
        t
    }
    function Ye(t) {
        if (t) {
            t.font = He(t);
            var e = t.textAlign;
            "middle" === e && (e = "center"),
            t.textAlign = null == e || cb[e] ? e: "left";
            var i = t.textVerticalAlign || t.textBaseline;
            "center" === i && (i = "middle"),
            t.textVerticalAlign = null == i || db[i] ? i: "top",
            t.textPadding && (t.textPadding = L(t.textPadding))
        }
    }
    function Ue(t, e, i, n, o, a) {
        n.rich ? qe(t, e, i, n, o) : Xe(t, e, i, n, o, a)
    }
    function Xe(t, e, i, n, o, a) {
        var r = a && a.style,
        s = r && "text" === a.type,
        l = n.font || ub;
        s && l === (r.font || ub) || (e.font = l);
        var u = t.__computedFont;
        t.__styleFont !== l && (t.__styleFont = l, u = t.__computedFont = e.font);
        var h = n.textPadding,
        c = t.__textCotentBlock;
        c && !t.__dirtyText || (c = t.__textCotentBlock = Fe(i, u, h, n.truncate));
        var d = c.outerHeight,
        f = c.lines,
        p = c.lineHeight,
        g = ii(d, n, o),
        m = g.baseX,
        v = g.baseY,
        y = g.textAlign || "left",
        x = g.textVerticalAlign;
        Qe(e, n, o, m, v);
        var _ = Pe(v, d, x),
        w = m,
        b = _,
        S = $e(n);
        if (S || h) {
            var M = Ae(i, u);
            h && (M += h[1] + h[3]);
            var I = ke(m, M, y);
            S && ti(t, e, n, I, _, M, d),
            h && (w = si(m, y, h), b += h[0])
        }
        for (e.textAlign = y, e.textBaseline = "middle", E = 0; E < fb.length; E++) {
            var T = fb[E],
            A = T[0],
            D = T[1],
            C = n[A];
            s && C === r[A] || (e[D] = qw(e, D, C || T[2]))
        }
        b += p / 2;
        var L = n.textStrokeWidth,
        k = s ? r.textStrokeWidth: null,
        P = !s || L !== k,
        N = !s || P || n.textStroke !== r.textStroke,
        O = oi(n.textStroke, L),
        z = ai(n.textFill);
        if (O && (P && (e.lineWidth = L), N && (e.strokeStyle = O)), z && (s && n.textFill === r.textFill && !r.textBackgroundColor || (e.fillStyle = z)), 1 === f.length) O && e.strokeText(f[0], w, b),
        z && e.fillText(f[0], w, b);
        else for (var E = 0; E < f.length; E++) O && e.strokeText(f[E], w, b),
        z && e.fillText(f[E], w, b),
        b += p
    }
    function qe(t, e, i, n, o) {
        var a = t.__textCotentBlock;
        a && !t.__dirtyText || (a = t.__textCotentBlock = Ge(i, n)),
        Ke(t, e, a, n, o)
    }
    function Ke(t, e, i, n, o) {
        var a = i.width,
        r = i.outerWidth,
        s = i.outerHeight,
        l = n.textPadding,
        u = ii(s, n, o),
        h = u.baseX,
        c = u.baseY,
        d = u.textAlign,
        f = u.textVerticalAlign;
        Qe(e, n, o, h, c);
        var p = ke(h, r, d),
        g = Pe(c, s, f),
        m = p,
        v = g;
        l && (m += l[3], v += l[0]);
        var y = m + a;
        $e(n) && ti(t, e, n, p, g, r, s);
        for (var x = 0; x < i.lines.length; x++) {
            for (var _, w = i.lines[x], b = w.tokens, S = b.length, M = w.lineHeight, I = w.width, T = 0, A = m, D = y, C = S - 1; T < S && (!(_ = b[T]).textAlign || "left" === _.textAlign);) Je(t, e, _, n, M, v, A, "left"),
            I -= _.width,
            A += _.width,
            T++;
            for (; C >= 0 && "right" === (_ = b[C]).textAlign;) Je(t, e, _, n, M, v, D, "right"),
            I -= _.width,
            D -= _.width,
            C--;
            for (A += (a - (A - m) - (y - D) - I) / 2; T <= C;) Je(t, e, _ = b[T], n, M, v, A + _.width / 2, "center"),
            A += _.width,
            T++;
            v += M
        }
    }
    function Qe(t, e, i, n, o) {
        if (i && e.textRotation) {
            var a = e.textOrigin;
            "center" === a ? (n = i.width / 2 + i.x, o = i.height / 2 + i.y) : a && (n = a[0] + i.x, o = a[1] + i.y),
            t.translate(n, o),
            t.rotate( - e.textRotation),
            t.translate( - n, -o)
        }
    }
    function Je(t, e, i, n, o, a, r, s) {
        var l = n.rich[i.styleName] || {};
        l.text = i.text;
        var u = i.textVerticalAlign,
        h = a + o / 2;
        "top" === u ? h = a + i.height / 2 : "bottom" === u && (h = a + o - i.height / 2),
        !i.isLineHolder && $e(l) && ti(t, e, l, "right" === s ? r - i.width: "center" === s ? r - i.width / 2 : r, h - i.height / 2, i.width, i.height);
        var c = i.textPadding;
        c && (r = si(r, s, c), h -= i.height / 2 - c[2] - i.textHeight / 2),
        ni(e, "shadowBlur", D(l.textShadowBlur, n.textShadowBlur, 0)),
        ni(e, "shadowColor", l.textShadowColor || n.textShadowColor || "transparent"),
        ni(e, "shadowOffsetX", D(l.textShadowOffsetX, n.textShadowOffsetX, 0)),
        ni(e, "shadowOffsetY", D(l.textShadowOffsetY, n.textShadowOffsetY, 0)),
        ni(e, "textAlign", s),
        ni(e, "textBaseline", "middle"),
        ni(e, "font", i.font || ub);
        var d = oi(l.textStroke || n.textStroke, p),
        f = ai(l.textFill || n.textFill),
        p = A(l.textStrokeWidth, n.textStrokeWidth);
        d && (ni(e, "lineWidth", p), ni(e, "strokeStyle", d), e.strokeText(i.text, r, h)),
        f && (ni(e, "fillStyle", f), e.fillText(i.text, r, h))
    }
    function $e(t) {
        return t.textBackgroundColor || t.textBorderWidth && t.textBorderColor
    }
    function ti(t, e, i, n, o, a, r) {
        var s = i.textBackgroundColor,
        l = i.textBorderWidth,
        u = i.textBorderColor,
        h = _(s);
        if (ni(e, "shadowBlur", i.textBoxShadowBlur || 0), ni(e, "shadowColor", i.textBoxShadowColor || "transparent"), ni(e, "shadowOffsetX", i.textBoxShadowOffsetX || 0), ni(e, "shadowOffsetY", i.textBoxShadowOffsetY || 0), h || l && u) {
            e.beginPath();
            var c = i.textBorderRadius;
            c ? Ze(e, {
                x: n,
                y: o,
                width: a,
                height: r,
                r: c
            }) : e.rect(n, o, a, r),
            e.closePath()
        }
        if (h) ni(e, "fillStyle", s),
        null != i.fillOpacity ? (f = e.globalAlpha, e.globalAlpha = i.fillOpacity * i.opacity, e.fill(), e.globalAlpha = f) : e.fill();
        else if (x(s)) ni(e, "fillStyle", s(i)),
        e.fill();
        else if (w(s)) {
            var d = s.image; (d = Me(d, null, t, ei, s)) && Te(d) && e.drawImage(d, n, o, a, r)
        }
        if (l && u) if (ni(e, "lineWidth", l), ni(e, "strokeStyle", u), null != i.strokeOpacity) {
            var f = e.globalAlpha;
            e.globalAlpha = i.strokeOpacity * i.opacity,
            e.stroke(),
            e.globalAlpha = f
        } else e.stroke()
    }
    function ei(t, e) {
        e.image = t
    }
    function ii(t, e, i) {
        var n = e.x || 0,
        o = e.y || 0,
        a = e.textAlign,
        r = e.textVerticalAlign;
        if (i) {
            var s = e.textPosition;
            if (s instanceof Array) n = i.x + ri(s[0], i.width),
            o = i.y + ri(s[1], i.height);
            else {
                var l = Ne(s, i, e.textDistance);
                n = l.x,
                o = l.y,
                a = a || l.textAlign,
                r = r || l.textVerticalAlign
            }
            var u = e.textOffset;
            u && (n += u[0], o += u[1])
        }
        return {
            baseX: n,
            baseY: o,
            textAlign: a,
            textVerticalAlign: r
        }
    }
    function ni(t, e, i) {
        return t[e] = qw(t, e, i),
        t[e]
    }
    function oi(t, e) {
        return null == t || e <= 0 || "transparent" === t || "none" === t ? null: t.image || t.colorStops ? "#000": t
    }
    function ai(t) {
        return null == t || "none" === t ? null: t.image || t.colorStops ? "#000": t
    }
    function ri(t, e) {
        return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e: parseFloat(t) : t
    }
    function si(t, e, i) {
        return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3]
    }
    function li(t, e) {
        return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding)
    }
    function ui(t) {
        t = t || {},
        Fw.call(this, t);
        for (var e in t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
        this.style = new Qw(t.style, this),
        this._rect = null,
        this.__clipPaths = []
    }
    function hi(t) {
        ui.call(this, t)
    }
    function ci(t) {
        return parseInt(t, 10)
    }
    function di(t) {
        return !! t && ( !! t.__builtin__ || "function" == typeof t.resize && "function" == typeof t.refresh)
    }
    function fi(t, e, i) {
        return mb.copy(t.getBoundingRect()),
        t.transform && mb.applyTransform(t.transform),
        vb.width = e,
        vb.height = i,
        !mb.intersect(vb)
    }
    function pi(t, e) {
        if (t == e) return ! 1;
        if (!t || !e || t.length !== e.length) return ! 0;
        for (var i = 0; i < t.length; i++) if (t[i] !== e[i]) return ! 0
    }
    function gi(t, e) {
        for (var i = 0; i < t.length; i++) {
            var n = t[i];
            n.setTransform(e),
            e.beginPath(),
            n.buildPath(e, n.shape),
            e.clip(),
            n.restoreTransform(e)
        }
    }
    function mi(t, e) {
        var i = document.createElement("div");
        return i.style.cssText = ["position:relative", "overflow:hidden", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0", "border-width:0"].join(";") + ";",
        i
    }
    function vi(t) {
        var e = t[1][0] - t[0][0],
        i = t[1][1] - t[0][1];
        return Math.sqrt(e * e + i * i)
    }
    function yi(t) {
        return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
    }
    function xi(t) {
        return "mousewheel" === t && R_.browser.firefox ? "DOMMouseScroll": t
    }
    function _i(t, e, i) {
        var n = t._gestureMgr;
        "start" === i && n.clear();
        var o = n.recognize(e, t.handler.findHover(e.zrX, e.zrY, null).target, t.dom);
        if ("end" === i && n.clear(), o) {
            var a = o.type;
            e.gestureEvent = a,
            t.handler.dispatchToElement({
                target: o.target
            },
            a, o.event)
        }
    }
    function wi(t) {
        t._touching = !0,
        clearTimeout(t._touchTimer),
        t._touchTimer = setTimeout(function() {
            t._touching = !1
        },
        700)
    }
    function bi(t) {
        var e = t.pointerType;
        return "pen" === e || "touch" === e
    }
    function Si(t) {
        function e(t, e) {
            return function() {
                if (!e._touching) return t.apply(e, arguments)
            }
        }
        d(Sb,
        function(e) {
            t._handlers[e] = m(Tb[e], t)
        }),
        d(Ib,
        function(e) {
            t._handlers[e] = m(Tb[e], t)
        }),
        d(bb,
        function(i) {
            t._handlers[i] = e(Tb[i], t)
        })
    }
    function Mi(t) {
        function e(e, i) {
            d(e,
            function(e) {
                ut(t, xi(e), i._handlers[e])
            },
            i)
        }
        aw.call(this),
        this.dom = t,
        this._touching = !1,
        this._touchTimer,
        this._gestureMgr = new _b,
        this._handlers = {},
        Si(this),
        R_.pointerEventsSupported ? e(Ib, this) : (R_.touchEventsSupported && e(Sb, this), e(bb, this))
    }
    function Ii(t, e) {
        var i = new kb(z_(), t, e);
        return Lb[i.id] = i,
        i
    }
    function Ti(t, e) {
        Cb[t] = e
    }
    function Ai(t) {
        delete Lb[t]
    }
    function Di(t) {
        return t instanceof Array ? t: null == t ? [] : [t]
    }
    function Ci(t, e, i) {
        if (t) {
            t[e] = t[e] || {},
            t.emphasis = t.emphasis || {},
            t.emphasis[e] = t.emphasis[e] || {};
            for (var n = 0,
            o = i.length; n < o; n++) {
                var a = i[n]; ! t.emphasis[e].hasOwnProperty(a) && t[e].hasOwnProperty(a) && (t.emphasis[e][a] = t[e][a])
            }
        }
    }
    function Li(t) {
        return ! Ob(t) || zb(t) || t instanceof Date ? t: t.value
    }
    function ki(t) {
        return Ob(t) && !(t instanceof Array)
    }
    function Pi(t, e) {
        e = (e || []).slice();
        var i = f(t || [],
        function(t, e) {
            return {
                exist: t
            }
        });
        return Nb(e,
        function(t, n) {
            if (Ob(t)) {
                for (o = 0; o < i.length; o++) if (!i[o].option && null != t.id && i[o].exist.id === t.id + "") return i[o].option = t,
                void(e[n] = null);
                for (var o = 0; o < i.length; o++) {
                    var a = i[o].exist;
                    if (! (i[o].option || null != a.id && null != t.id || null == t.name || zi(t) || zi(a) || a.name !== t.name + "")) return i[o].option = t,
                    void(e[n] = null)
                }
            }
        }),
        Nb(e,
        function(t, e) {
            if (Ob(t)) {
                for (var n = 0; n < i.length; n++) {
                    var o = i[n].exist;
                    if (!i[n].option && !zi(o) && null == t.id) {
                        i[n].option = t;
                        break
                    }
                }
                n >= i.length && i.push({
                    option: t
                })
            }
        }),
        i
    }
    function Ni(t) {
        var e = E();
        Nb(t,
        function(t, i) {
            var n = t.exist;
            n && e.set(n.id, t)
        }),
        Nb(t,
        function(t, i) {
            var n = t.option;
            k(!n || null == n.id || !e.get(n.id) || e.get(n.id) === t, "id duplicates: " + (n && n.id)),
            n && null != n.id && e.set(n.id, t),
            !t.keyInfo && (t.keyInfo = {})
        }),
        Nb(t,
        function(t, i) {
            var n = t.exist,
            o = t.option,
            a = t.keyInfo;
            if (Ob(o)) {
                if (a.name = null != o.name ? o.name + "": n ? n.name: Eb + i, n) a.id = n.id;
                else if (null != o.id) a.id = o.id + "";
                else {
                    var r = 0;
                    do {
                        a.id = "\0" + a.name + "\0" + r++
                    } while ( e . get ( a . id ))
                }
                e.set(a.id, t)
            }
        })
    }
    function Oi(t) {
        var e = t.name;
        return ! (!e || !e.indexOf(Eb))
    }
    function zi(t) {
        return Ob(t) && t.id && 0 === (t.id + "").indexOf("\0_ec_\0")
    }
    function Ei(t, e) {
        function i(t, e, i) {
            for (var n = 0,
            o = t.length; n < o; n++) for (var a = t[n].seriesId, r = Di(t[n].dataIndex), s = i && i[a], l = 0, u = r.length; l < u; l++) {
                var h = r[l];
                s && s[h] ? s[h] = null: (e[a] || (e[a] = {}))[h] = 1
            }
        }
        function n(t, e) {
            var i = [];
            for (var o in t) if (t.hasOwnProperty(o) && null != t[o]) if (e) i.push( + o);
            else {
                var a = n(t[o], !0);
                a.length && i.push({
                    seriesId: o,
                    dataIndex: a
                })
            }
            return i
        }
        var o = {},
        a = {};
        return i(t || [], o),
        i(e || [], a, o),
        [n(o), n(a)]
    }
    function Ri(t, e) {
        return null != e.dataIndexInside ? e.dataIndexInside: null != e.dataIndex ? y(e.dataIndex) ? f(e.dataIndex,
        function(e) {
            return t.indexOfRawIndex(e)
        }) : t.indexOfRawIndex(e.dataIndex) : null != e.name ? y(e.name) ? f(e.name,
        function(e) {
            return t.indexOfName(e)
        }) : t.indexOfName(e.name) : void 0
    }
    function Bi() {
        var t = "__\0ec_inner_" + Bb+++"_" + Math.random().toFixed(5);
        return function(e) {
            return e[t] || (e[t] = {})
        }
    }
    function Vi(t, e, i) {
        if (_(e)) {
            var n = {};
            n[e + "Index"] = 0,
            e = n
        }
        var o = i && i.defaultMainType; ! o || Fi(e, o + "Index") || Fi(e, o + "Id") || Fi(e, o + "Name") || (e[o + "Index"] = 0);
        var a = {};
        return Nb(e,
        function(n, o) {
            var n = e[o];
            if ("dataIndex" !== o && "dataIndexInside" !== o) {
                var r = o.match(/^(\w+)(Index|Id|Name)$/) || [],
                s = r[1],
                u = (r[2] || "").toLowerCase();
                if (! (!s || !u || null == n || "index" === u && "none" === n || i && i.includeMainTypes && l(i.includeMainTypes, s) < 0)) {
                    var h = {
                        mainType: s
                    };
                    "index" === u && "all" === n || (h[u] = n);
                    var c = t.queryComponents(h);
                    a[s + "Models"] = c,
                    a[s + "Model"] = c[0]
                }
            } else a[o] = n
        }),
        a
    }
    function Fi(t, e) {
        return t && t.hasOwnProperty(e)
    }
    function Gi(t, e, i) {
        t.setAttribute ? t.setAttribute(e, i) : t[e] = i
    }
    function Wi(t, e) {
        return t.getAttribute ? t.getAttribute(e) : t[e]
    }
    function Hi(t) {
        return "auto" === t ? R_.domSupported ? "html": "richText": t || "html"
    }
    function Zi(t) {
        var e = {
            main: "",
            sub: ""
        };
        return t && (t = t.split(Vb), e.main = t[0] || "", e.sub = t[1] || ""),
        e
    }
    function ji(t) {
        k(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal')
    }
    function Yi(t, e) {
        t.$constructor = t,
        t.extend = function(t) {
            var e = this,
            i = function() {
                t.$constructor ? t.$constructor.apply(this, arguments) : e.apply(this, arguments)
            };
            return a(i.prototype, t),
            i.extend = this.extend,
            i.superCall = Xi,
            i.superApply = qi,
            u(i, this),
            i.superClass = e,
            i
        }
    }
    function Ui(t) {
        var e = ["__\0is_clz", Gb++, Math.random().toFixed(3)].join("_");
        t.prototype[e] = !0,
        t.isInstance = function(t) {
            return ! (!t || !t[e])
        }
    }
    function Xi(t, e) {
        var i = C(arguments, 2);
        return this.superClass.prototype[e].apply(t, i)
    }
    function qi(t, e, i) {
        return this.superClass.prototype[e].apply(t, i)
    }
    function Ki(t, e) {
        function i(t) {
            var e = n[t.main];
            return e && e[Fb] || ((e = n[t.main] = {})[Fb] = !0),
            e
        }
        e = e || {};
        var n = {};
        if (t.registerClass = function(t, e) {
            return e && (ji(e), (e = Zi(e)).sub ? e.sub !== Fb && (i(e)[e.sub] = t) : n[e.main] = t),
            t
        },
        t.getClass = function(t, e, i) {
            var o = n[t];
            if (o && o[Fb] && (o = e ? o[e] : null), i && !o) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first.": t + ".type should be specified.");
            return o
        },
        t.getClassesByMainType = function(t) {
            t = Zi(t);
            var e = [],
            i = n[t.main];
            return i && i[Fb] ? d(i,
            function(t, i) {
                i !== Fb && e.push(t)
            }) : e.push(i),
            e
        },
        t.hasClass = function(t) {
            return t = Zi(t),
            !!n[t.main]
        },
        t.getAllClassMainTypes = function() {
            var t = [];
            return d(n,
            function(e, i) {
                t.push(i)
            }),
            t
        },
        t.hasSubTypes = function(t) {
            t = Zi(t);
            var e = n[t.main];
            return e && e[Fb]
        },
        t.parseClassType = Zi, e.registerWhenExtend) {
            var o = t.extend;
            o && (t.extend = function(e) {
                var i = o.call(this, e);
                return t.registerClass(i, e.type)
            })
        }
        return t
    }
    function Qi(t) {
        return t > -qb && t < qb
    }
    function Ji(t) {
        return t > qb || t < -qb
    }
    function $i(t, e, i, n, o) {
        var a = 1 - o;
        return a * a * (a * t + 3 * o * e) + o * o * (o * n + 3 * a * i)
    }
    function tn(t, e, i, n, o) {
        var a = 1 - o;
        return 3 * (((e - t) * a + 2 * (i - e) * o) * a + (n - i) * o * o)
    }
    function en(t, e, i, n, o, a) {
        var r = n + 3 * (e - i) - t,
        s = 3 * (i - 2 * e + t),
        l = 3 * (e - t),
        u = t - o,
        h = s * s - 3 * r * l,
        c = s * l - 9 * r * u,
        d = l * l - 3 * s * u,
        f = 0;
        if (Qi(h) && Qi(c)) Qi(s) ? a[0] = 0 : (M = -l / s) >= 0 && M <= 1 && (a[f++] = M);
        else {
            var p = c * c - 4 * h * d;
            if (Qi(p)) {
                var g = c / h,
                m = -g / 2; (M = -s / r + g) >= 0 && M <= 1 && (a[f++] = M),
                m >= 0 && m <= 1 && (a[f++] = m)
            } else if (p > 0) {
                var v = Xb(p),
                y = h * s + 1.5 * r * ( - c + v),
                x = h * s + 1.5 * r * ( - c - v); (M = ( - s - ((y = y < 0 ? -Ub( - y, Jb) : Ub(y, Jb)) + (x = x < 0 ? -Ub( - x, Jb) : Ub(x, Jb)))) / (3 * r)) >= 0 && M <= 1 && (a[f++] = M)
            } else {
                var _ = (2 * h * s - 3 * r * c) / (2 * Xb(h * h * h)),
                w = Math.acos(_) / 3,
                b = Xb(h),
                S = Math.cos(w),
                M = ( - s - 2 * b * S) / (3 * r),
                m = ( - s + b * (S + Qb * Math.sin(w))) / (3 * r),
                I = ( - s + b * (S - Qb * Math.sin(w))) / (3 * r);
                M >= 0 && M <= 1 && (a[f++] = M),
                m >= 0 && m <= 1 && (a[f++] = m),
                I >= 0 && I <= 1 && (a[f++] = I)
            }
        }
        return f
    }
    function nn(t, e, i, n, o) {
        var a = 6 * i - 12 * e + 6 * t,
        r = 9 * e + 3 * n - 3 * t - 9 * i,
        s = 3 * e - 3 * t,
        l = 0;
        if (Qi(r)) Ji(a) && (c = -s / a) >= 0 && c <= 1 && (o[l++] = c);
        else {
            var u = a * a - 4 * r * s;
            if (Qi(u)) o[0] = -a / (2 * r);
            else if (u > 0) {
                var h = Xb(u),
                c = ( - a + h) / (2 * r),
                d = ( - a - h) / (2 * r);
                c >= 0 && c <= 1 && (o[l++] = c),
                d >= 0 && d <= 1 && (o[l++] = d)
            }
        }
        return l
    }
    function on(t, e, i, n, o, a) {
        var r = (e - t) * o + t,
        s = (i - e) * o + e,
        l = (n - i) * o + i,
        u = (s - r) * o + r,
        h = (l - s) * o + s,
        c = (h - u) * o + u;
        a[0] = t,
        a[1] = r,
        a[2] = u,
        a[3] = c,
        a[4] = c,
        a[5] = h,
        a[6] = l,
        a[7] = n
    }
    function an(t, e, i, n, o, a, r, s, l, u, h) {
        var c, d, f, p, g, m = .005,
        v = 1 / 0;
        $b[0] = l,
        $b[1] = u;
        for (var y = 0; y < 1; y += .05) tS[0] = $i(t, i, o, r, y),
        tS[1] = $i(e, n, a, s, y),
        (p = iw($b, tS)) < v && (c = y, v = p);
        v = 1 / 0;
        for (var x = 0; x < 32 && !(m < Kb); x++) d = c - m,
        f = c + m,
        tS[0] = $i(t, i, o, r, d),
        tS[1] = $i(e, n, a, s, d),
        p = iw(tS, $b),
        d >= 0 && p < v ? (c = d, v = p) : (eS[0] = $i(t, i, o, r, f), eS[1] = $i(e, n, a, s, f), g = iw(eS, $b), f <= 1 && g < v ? (c = f, v = g) : m *= .5);
        return h && (h[0] = $i(t, i, o, r, c), h[1] = $i(e, n, a, s, c)),
        Xb(v)
    }
    function rn(t, e, i, n) {
        var o = 1 - n;
        return o * (o * t + 2 * n * e) + n * n * i
    }
    function sn(t, e, i, n) {
        return 2 * ((1 - n) * (e - t) + n * (i - e))
    }
    function ln(t, e, i, n, o) {
        var a = t - 2 * e + i,
        r = 2 * (e - t),
        s = t - n,
        l = 0;
        if (Qi(a)) Ji(r) && (c = -s / r) >= 0 && c <= 1 && (o[l++] = c);
        else {
            var u = r * r - 4 * a * s;
            if (Qi(u))(c = -r / (2 * a)) >= 0 && c <= 1 && (o[l++] = c);
            else if (u > 0) {
                var h = Xb(u),
                c = ( - r + h) / (2 * a),
                d = ( - r - h) / (2 * a);
                c >= 0 && c <= 1 && (o[l++] = c),
                d >= 0 && d <= 1 && (o[l++] = d)
            }
        }
        return l
    }
    function un(t, e, i) {
        var n = t + i - 2 * e;
        return 0 === n ? .5 : (t - e) / n
    }
    function hn(t, e, i, n, o) {
        var a = (e - t) * n + t,
        r = (i - e) * n + e,
        s = (r - a) * n + a;
        o[0] = t,
        o[1] = a,
        o[2] = s,
        o[3] = s,
        o[4] = r,
        o[5] = i
    }
    function cn(t, e, i, n, o, a, r, s, l) {
        var u, h = .005,
        c = 1 / 0;
        $b[0] = r,
        $b[1] = s;
        for (var d = 0; d < 1; d += .05) tS[0] = rn(t, i, o, d),
        tS[1] = rn(e, n, a, d),
        (m = iw($b, tS)) < c && (u = d, c = m);
        c = 1 / 0;
        for (var f = 0; f < 32 && !(h < Kb); f++) {
            var p = u - h,
            g = u + h;
            tS[0] = rn(t, i, o, p),
            tS[1] = rn(e, n, a, p);
            var m = iw(tS, $b);
            if (p >= 0 && m < c) u = p,
            c = m;
            else {
                eS[0] = rn(t, i, o, g),
                eS[1] = rn(e, n, a, g);
                var v = iw(eS, $b);
                g <= 1 && v < c ? (u = g, c = v) : h *= .5
            }
        }
        return l && (l[0] = rn(t, i, o, u), l[1] = rn(e, n, a, u)),
        Xb(c)
    }
    function dn(t, e, i) {
        if (0 !== t.length) {
            var n, o = t[0],
            a = o[0],
            r = o[0],
            s = o[1],
            l = o[1];
            for (n = 1; n < t.length; n++) o = t[n],
            a = iS(a, o[0]),
            r = nS(r, o[0]),
            s = iS(s, o[1]),
            l = nS(l, o[1]);
            e[0] = a,
            e[1] = s,
            i[0] = r,
            i[1] = l
        }
    }
    function fn(t, e, i, n, o, a) {
        o[0] = iS(t, i),
        o[1] = iS(e, n),
        a[0] = nS(t, i),
        a[1] = nS(e, n)
    }
    function pn(t, e, i, n, o, a, r, s, l, u) {
        var h, c = nn,
        d = $i,
        f = c(t, i, o, r, hS);
        for (l[0] = 1 / 0, l[1] = 1 / 0, u[0] = -1 / 0, u[1] = -1 / 0, h = 0; h < f; h++) {
            var p = d(t, i, o, r, hS[h]);
            l[0] = iS(p, l[0]),
            u[0] = nS(p, u[0])
        }
        for (f = c(e, n, a, s, cS), h = 0; h < f; h++) {
            var g = d(e, n, a, s, cS[h]);
            l[1] = iS(g, l[1]),
            u[1] = nS(g, u[1])
        }
        l[0] = iS(t, l[0]),
        u[0] = nS(t, u[0]),
        l[0] = iS(r, l[0]),
        u[0] = nS(r, u[0]),
        l[1] = iS(e, l[1]),
        u[1] = nS(e, u[1]),
        l[1] = iS(s, l[1]),
        u[1] = nS(s, u[1])
    }
    function gn(t, e, i, n, o, a, r, s) {
        var l = un,
        u = rn,
        h = nS(iS(l(t, i, o), 1), 0),
        c = nS(iS(l(e, n, a), 1), 0),
        d = u(t, i, o, h),
        f = u(e, n, a, c);
        r[0] = iS(t, o, d),
        r[1] = iS(e, a, f),
        s[0] = nS(t, o, d),
        s[1] = nS(e, a, f)
    }
    function mn(t, e, i, n, o, a, r, s, l) {
        var u = tt,
        h = et,
        c = Math.abs(o - a);
        if (c % rS < 1e-4 && c > 1e-4) return s[0] = t - i,
        s[1] = e - n,
        l[0] = t + i,
        void(l[1] = e + n);
        if (sS[0] = aS(o) * i + t, sS[1] = oS(o) * n + e, lS[0] = aS(a) * i + t, lS[1] = oS(a) * n + e, u(s, sS, lS), h(l, sS, lS), (o %= rS) < 0 && (o += rS), (a %= rS) < 0 && (a += rS), o > a && !r ? a += rS: o < a && r && (o += rS), r) {
            var d = a;
            a = o,
            o = d
        }
        for (var f = 0; f < a; f += Math.PI / 2) f > o && (uS[0] = aS(f) * i + t, uS[1] = oS(f) * n + e, u(s, uS, s), h(l, uS, l))
    }
    function vn(t, e, i, n, o, a, r) {
        if (0 === o) return ! 1;
        var s = o,
        l = 0,
        u = t;
        if (r > e + s && r > n + s || r < e - s && r < n - s || a > t + s && a > i + s || a < t - s && a < i - s) return ! 1;
        if (t === i) return Math.abs(a - t) <= s / 2;
        var h = (l = (e - n) / (t - i)) * a - r + (u = (t * n - i * e) / (t - i));
        return h * h / (l * l + 1) <= s / 2 * s / 2
    }
    function yn(t, e, i, n, o, a, r, s, l, u, h) {
        if (0 === l) return ! 1;
        var c = l;
        return ! (h > e + c && h > n + c && h > a + c && h > s + c || h < e - c && h < n - c && h < a - c && h < s - c || u > t + c && u > i + c && u > o + c && u > r + c || u < t - c && u < i - c && u < o - c && u < r - c) && an(t, e, i, n, o, a, r, s, u, h, null) <= c / 2
    }
    function xn(t, e, i, n, o, a, r, s, l) {
        if (0 === r) return ! 1;
        var u = r;
        return ! (l > e + u && l > n + u && l > a + u || l < e - u && l < n - u && l < a - u || s > t + u && s > i + u && s > o + u || s < t - u && s < i - u && s < o - u) && cn(t, e, i, n, o, a, s, l, null) <= u / 2
    }
    function _n(t) {
        return (t %= IS) < 0 && (t += IS),
        t
    }
    function wn(t, e, i, n, o, a, r, s, l) {
        if (0 === r) return ! 1;
        var u = r;
        s -= t,
        l -= e;
        var h = Math.sqrt(s * s + l * l);
        if (h - u > i || h + u < i) return ! 1;
        if (Math.abs(n - o) % TS < 1e-4) return ! 0;
        if (a) {
            var c = n;
            n = _n(o),
            o = _n(c)
        } else n = _n(n),
        o = _n(o);
        n > o && (o += TS);
        var d = Math.atan2(l, s);
        return d < 0 && (d += TS),
        d >= n && d <= o || d + TS >= n && d + TS <= o
    }
    function bn(t, e, i, n, o, a) {
        if (a > e && a > n || a < e && a < n) return 0;
        if (n === e) return 0;
        var r = n < e ? 1 : -1,
        s = (a - e) / (n - e);
        1 !== s && 0 !== s || (r = n < e ? .5 : -.5);
        var l = s * (i - t) + t;
        return l === o ? 1 / 0 : l > o ? r: 0
    }
    function Sn(t, e) {
        return Math.abs(t - e) < CS
    }
    function Mn() {
        var t = kS[0];
        kS[0] = kS[1],
        kS[1] = t
    }
    function In(t, e, i, n, o, a, r, s, l, u) {
        if (u > e && u > n && u > a && u > s || u < e && u < n && u < a && u < s) return 0;
        var h = en(e, n, a, s, u, LS);
        if (0 === h) return 0;
        for (var c, d, f = 0,
        p = -1,
        g = 0; g < h; g++) {
            var m = LS[g],
            v = 0 === m || 1 === m ? .5 : 1;
            $i(t, i, o, r, m) < l || (p < 0 && (p = nn(e, n, a, s, kS), kS[1] < kS[0] && p > 1 && Mn(), c = $i(e, n, a, s, kS[0]), p > 1 && (d = $i(e, n, a, s, kS[1]))), 2 == p ? m < kS[0] ? f += c < e ? v: -v: m < kS[1] ? f += d < c ? v: -v: f += s < d ? v: -v: m < kS[0] ? f += c < e ? v: -v: f += s < c ? v: -v)
        }
        return f
    }
    function Tn(t, e, i, n, o, a, r, s) {
        if (s > e && s > n && s > a || s < e && s < n && s < a) return 0;
        var l = ln(e, n, a, s, LS);
        if (0 === l) return 0;
        var u = un(e, n, a);
        if (u >= 0 && u <= 1) {
            for (var h = 0,
            c = rn(e, n, a, u), d = 0; d < l; d++) f = 0 === LS[d] || 1 === LS[d] ? .5 : 1,
            (p = rn(t, i, o, LS[d])) < r || (LS[d] < u ? h += c < e ? f: -f: h += a < c ? f: -f);
            return h
        }
        var f = 0 === LS[0] || 1 === LS[0] ? .5 : 1,
        p = rn(t, i, o, LS[0]);
        return p < r ? 0 : a < e ? f: -f
    }
    function An(t, e, i, n, o, a, r, s) {
        if ((s -= e) > i || s < -i) return 0;
        u = Math.sqrt(i * i - s * s),
        LS[0] = -u,
        LS[1] = u;
        var l = Math.abs(n - o);
        if (l < 1e-4) return 0;
        if (l % DS < 1e-4) return n = 0,
        o = DS,
        p = a ? 1 : -1,
        r >= LS[0] + t && r <= LS[1] + t ? p: 0;
        if (a) {
            var u = n;
            n = _n(o),
            o = _n(u)
        } else n = _n(n),
        o = _n(o);
        n > o && (o += DS);
        for (var h = 0,
        c = 0; c < 2; c++) {
            var d = LS[c];
            if (d + t > r) {
                var f = Math.atan2(s, d),
                p = a ? 1 : -1;
                f < 0 && (f = DS + f),
                (f >= n && f <= o || f + DS >= n && f + DS <= o) && (f > Math.PI / 2 && f < 1.5 * Math.PI && (p = -p), h += p)
            }
        }
        return h
    }
    function Dn(t, e, i, n, o) {
        for (var a = 0,
        r = 0,
        s = 0,
        l = 0,
        u = 0,
        h = 0; h < t.length;) {
            var c = t[h++];
            switch (c === AS.M && h > 1 && (i || (a += bn(r, s, l, u, n, o))), 1 == h && (l = r = t[h], u = s = t[h + 1]), c) {
            case AS.M:
                r = l = t[h++],
                s = u = t[h++];
                break;
            case AS.L:
                if (i) {
                    if (vn(r, s, t[h], t[h + 1], e, n, o)) return ! 0
                } else a += bn(r, s, t[h], t[h + 1], n, o) || 0;
                r = t[h++],
                s = t[h++];
                break;
            case AS.C:
                if (i) {
                    if (yn(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], e, n, o)) return ! 0
                } else a += In(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], n, o) || 0;
                r = t[h++],
                s = t[h++];
                break;
            case AS.Q:
                if (i) {
                    if (xn(r, s, t[h++], t[h++], t[h], t[h + 1], e, n, o)) return ! 0
                } else a += Tn(r, s, t[h++], t[h++], t[h], t[h + 1], n, o) || 0;
                r = t[h++],
                s = t[h++];
                break;
            case AS.A:
                var d = t[h++],
                f = t[h++],
                p = t[h++],
                g = t[h++],
                m = t[h++],
                v = t[h++],
                y = (t[h++], 1 - t[h++]),
                x = Math.cos(m) * p + d,
                _ = Math.sin(m) * g + f;
                h > 1 ? a += bn(r, s, x, _, n, o) : (l = x, u = _);
                var w = (n - d) * g / p + d;
                if (i) {
                    if (wn(d, f, g, m, m + v, y, e, w, o)) return ! 0
                } else a += An(d, f, g, m, m + v, y, w, o);
                r = Math.cos(m + v) * p + d,
                s = Math.sin(m + v) * g + f;
                break;
            case AS.R:
                l = r = t[h++],
                u = s = t[h++];
                var x = l + t[h++],
                _ = u + t[h++];
                if (i) {
                    if (vn(l, u, x, u, e, n, o) || vn(x, u, x, _, e, n, o) || vn(x, _, l, _, e, n, o) || vn(l, _, l, u, e, n, o)) return ! 0
                } else a += bn(x, u, x, _, n, o),
                a += bn(l, _, l, u, n, o);
                break;
            case AS.Z:
                if (i) {
                    if (vn(r, s, l, u, e, n, o)) return ! 0
                } else a += bn(r, s, l, u, n, o);
                r = l,
                s = u
            }
        }
        return i || Sn(s, u) || (a += bn(r, s, l, u, n, o) || 0),
        0 !== a
    }
    function Cn(t, e, i) {
        return Dn(t, 0, !1, e, i)
    }
    function Ln(t, e, i, n) {
        return Dn(t, e, !0, i, n)
    }
    function kn(t) {
        ui.call(this, t),
        this.path = null
    }
    function Pn(t, e, i, n, o, a, r, s, l, u, h) {
        var c = l * (HS / 180),
        d = WS(c) * (t - i) / 2 + GS(c) * (e - n) / 2,
        f = -1 * GS(c) * (t - i) / 2 + WS(c) * (e - n) / 2,
        p = d * d / (r * r) + f * f / (s * s);
        p > 1 && (r *= FS(p), s *= FS(p));
        var g = (o === a ? -1 : 1) * FS((r * r * (s * s) - r * r * (f * f) - s * s * (d * d)) / (r * r * (f * f) + s * s * (d * d))) || 0,
        m = g * r * f / s,
        v = g * -s * d / r,
        y = (t + i) / 2 + WS(c) * m - GS(c) * v,
        x = (e + n) / 2 + GS(c) * m + WS(c) * v,
        _ = YS([1, 0], [(d - m) / r, (f - v) / s]),
        w = [(d - m) / r, (f - v) / s],
        b = [( - 1 * d - m) / r, ( - 1 * f - v) / s],
        S = YS(w, b);
        jS(w, b) <= -1 && (S = HS),
        jS(w, b) >= 1 && (S = 0),
        0 === a && S > 0 && (S -= 2 * HS),
        1 === a && S < 0 && (S += 2 * HS),
        h.addData(u, y, x, r, s, _, S, c, a)
    }
    function Nn(t) {
        if (!t) return new MS;
        for (var e, i = 0,
        n = 0,
        o = i,
        a = n,
        r = new MS,
        s = MS.CMD,
        l = t.match(US), u = 0; u < l.length; u++) {
            for (var h, c = l[u], d = c.charAt(0), f = c.match(XS) || [], p = f.length, g = 0; g < p; g++) f[g] = parseFloat(f[g]);
            for (var m = 0; m < p;) {
                var v, y, x, _, w, b, S, M = i,
                I = n;
                switch (d) {
                case "l":
                    i += f[m++],
                    n += f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "L":
                    i = f[m++],
                    n = f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "m":
                    i += f[m++],
                    n += f[m++],
                    h = s.M,
                    r.addData(h, i, n),
                    o = i,
                    a = n,
                    d = "l";
                    break;
                case "M":
                    i = f[m++],
                    n = f[m++],
                    h = s.M,
                    r.addData(h, i, n),
                    o = i,
                    a = n,
                    d = "L";
                    break;
                case "h":
                    i += f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "H":
                    i = f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "v":
                    n += f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "V":
                    n = f[m++],
                    h = s.L,
                    r.addData(h, i, n);
                    break;
                case "C":
                    h = s.C,
                    r.addData(h, f[m++], f[m++], f[m++], f[m++], f[m++], f[m++]),
                    i = f[m - 2],
                    n = f[m - 1];
                    break;
                case "c":
                    h = s.C,
                    r.addData(h, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n),
                    i += f[m - 2],
                    n += f[m - 1];
                    break;
                case "S":
                    v = i,
                    y = n;
                    var T = r.len(),
                    A = r.data;
                    e === s.C && (v += i - A[T - 4], y += n - A[T - 3]),
                    h = s.C,
                    M = f[m++],
                    I = f[m++],
                    i = f[m++],
                    n = f[m++],
                    r.addData(h, v, y, M, I, i, n);
                    break;
                case "s":
                    v = i,
                    y = n;
                    var T = r.len(),
                    A = r.data;
                    e === s.C && (v += i - A[T - 4], y += n - A[T - 3]),
                    h = s.C,
                    M = i + f[m++],
                    I = n + f[m++],
                    i += f[m++],
                    n += f[m++],
                    r.addData(h, v, y, M, I, i, n);
                    break;
                case "Q":
                    M = f[m++],
                    I = f[m++],
                    i = f[m++],
                    n = f[m++],
                    h = s.Q,
                    r.addData(h, M, I, i, n);
                    break;
                case "q":
                    M = f[m++] + i,
                    I = f[m++] + n,
                    i += f[m++],
                    n += f[m++],
                    h = s.Q,
                    r.addData(h, M, I, i, n);
                    break;
                case "T":
                    v = i,
                    y = n;
                    var T = r.len(),
                    A = r.data;
                    e === s.Q && (v += i - A[T - 4], y += n - A[T - 3]),
                    i = f[m++],
                    n = f[m++],
                    h = s.Q,
                    r.addData(h, v, y, i, n);
                    break;
                case "t":
                    v = i,
                    y = n;
                    var T = r.len(),
                    A = r.data;
                    e === s.Q && (v += i - A[T - 4], y += n - A[T - 3]),
                    i += f[m++],
                    n += f[m++],
                    h = s.Q,
                    r.addData(h, v, y, i, n);
                    break;
                case "A":
                    x = f[m++],
                    _ = f[m++],
                    w = f[m++],
                    b = f[m++],
                    S = f[m++],
                    Pn(M = i, I = n, i = f[m++], n = f[m++], b, S, x, _, w, h = s.A, r);
                    break;
                case "a":
                    x = f[m++],
                    _ = f[m++],
                    w = f[m++],
                    b = f[m++],
                    S = f[m++],
                    Pn(M = i, I = n, i += f[m++], n += f[m++], b, S, x, _, w, h = s.A, r)
                }
            }
            "z" !== d && "Z" !== d || (h = s.Z, r.addData(h), i = o, n = a),
            e = h
        }
        return r.toStatic(),
        r
    }
    function On(t, e) {
        var i = Nn(t);
        return e = e || {},
        e.buildPath = function(t) {
            if (t.setData) t.setData(i.data),
            (e = t.getContext()) && t.rebuildPath(e);
            else {
                var e = t;
                i.rebuildPath(e)
            }
        },
        e.applyTransform = function(t) {
            VS(i, t),
            this.dirty(!0)
        },
        e
    }
    function zn(t, e) {
        return new kn(On(t, e))
    }
    function En(t, e) {
        return kn.extend(On(t, e))
    }
    function Rn(t, e, i, n, o, a, r) {
        var s = .5 * (i - t),
        l = .5 * (n - e);
        return (2 * (e - i) + s + l) * r + ( - 3 * (e - i) - 2 * s - l) * a + s * o + e
    }
    function Bn(t, e, i) {
        var n = e.points,
        o = e.smooth;
        if (n && n.length >= 2) {
            if (o && "spline" !== o) {
                var a = iM(n, o, i, e.smoothConstraint);
                t.moveTo(n[0][0], n[0][1]);
                for (var r = n.length,
                s = 0; s < (i ? r: r - 1); s++) {
                    var l = a[2 * s],
                    u = a[2 * s + 1],
                    h = n[(s + 1) % r];
                    t.bezierCurveTo(l[0], l[1], u[0], u[1], h[0], h[1])
                }
            } else {
                "spline" === o && (n = eM(n, i)),
                t.moveTo(n[0][0], n[0][1]);
                for (var s = 1,
                c = n.length; s < c; s++) t.lineTo(n[s][0], n[s][1])
            }
            i && t.closePath()
        }
    }
    function Vn(t, e, i) {
        var n = t.cpx2,
        o = t.cpy2;
        return null === n || null === o ? [(i ? tn: $i)(t.x1, t.cpx1, t.cpx2, t.x2, e), (i ? tn: $i)(t.y1, t.cpy1, t.cpy2, t.y2, e)] : [(i ? sn: rn)(t.x1, t.cpx1, t.x2, e), (i ? sn: rn)(t.y1, t.cpy1, t.y2, e)]
    }
    function Fn(t) {
        ui.call(this, t),
        this._displayables = [],
        this._temporaryDisplayables = [],
        this._cursor = 0,
        this.notClear = !0
    }
    function Gn(t) {
        return kn.extend(t)
    }
    function Wn(t, e, i, n) {
        var o = zn(t, e);
        return i && ("center" === n && (i = Zn(i, o.getBoundingRect())), jn(o, i)),
        o
    }
    function Hn(t, e, i) {
        var n = new hi({
            style: {
                image: t,
                x: e.x,
                y: e.y,
                width: e.width,
                height: e.height
            },
            onload: function(t) {
                if ("center" === i) {
                    var o = {
                        width: t.width,
                        height: t.height
                    };
                    n.setStyle(Zn(e, o))
                }
            }
        });
        return n
    }
    function Zn(t, e) {
        var i, n = e.width / e.height,
        o = t.height * n;
        return i = o <= t.width ? t.height: (o = t.width) / n,
        {
            x: t.x + t.width / 2 - o / 2,
            y: t.y + t.height / 2 - i / 2,
            width: o,
            height: i
        }
    }
    function jn(t, e) {
        if (t.applyTransform) {
            var i = t.getBoundingRect().calculateTransform(e);
            t.applyTransform(i)
        }
    }
    function Yn(t) {
        var e = t.shape,
        i = t.style.lineWidth;
        return gM(2 * e.x1) === gM(2 * e.x2) && (e.x1 = e.x2 = Xn(e.x1, i, !0)),
        gM(2 * e.y1) === gM(2 * e.y2) && (e.y1 = e.y2 = Xn(e.y1, i, !0)),
        t
    }
    function Un(t) {
        var e = t.shape,
        i = t.style.lineWidth,
        n = e.x,
        o = e.y,
        a = e.width,
        r = e.height;
        return e.x = Xn(e.x, i, !0),
        e.y = Xn(e.y, i, !0),
        e.width = Math.max(Xn(n + a, i, !1) - e.x, 0 === a ? 0 : 1),
        e.height = Math.max(Xn(o + r, i, !1) - e.y, 0 === r ? 0 : 1),
        t
    }
    function Xn(t, e, i) {
        var n = gM(2 * t);
        return (n + gM(e)) % 2 == 0 ? n / 2 : (n + (i ? 1 : -1)) / 2
    }
    function qn(t) {
        return null != t && "none" !== t
    }
    function Kn(t) {
        if ("string" != typeof t) return t;
        var e = _M.get(t);
        return e || (e = Ft(t, -.1), wM < 1e4 && (_M.set(t, e), wM++)),
        e
    }
    function Qn(t) {
        if (t.__hoverStlDirty) {
            t.__hoverStlDirty = !1;
            var e = t.__hoverStl;
            if (e) {
                var i = t.__normalStl = {},
                n = t.style;
                for (var o in e) null != e[o] && (i[o] = n[o]);
                i.fill = n.fill,
                i.stroke = n.stroke
            } else t.__normalStl = null
        }
    }
    function Jn(t) {
        var e = t.__hoverStl;
        if (e && !t.__highlighted) {
            var i = t.useHoverLayer;
            t.__highlighted = i ? "layer": "plain";
            var n = t.__zr;
            if (n || !i) {
                var o = t,
                a = t.style;
                i && (a = (o = n.addHover(t)).style),
                xo(a),
                i || Qn(o),
                a.extendFrom(e),
                $n(a, e, "fill"),
                $n(a, e, "stroke"),
                yo(a),
                i || (t.dirty(!1), t.z2 += 1)
            }
        }
    }
    function $n(t, e, i) { ! qn(e[i]) && qn(t[i]) && (t[i] = Kn(t[i]))
    }
    function to(t) {
        t.__highlighted && (eo(t), t.__highlighted = !1)
    }
    function eo(t) {
        var e = t.__highlighted;
        if ("layer" === e) t.__zr && t.__zr.removeHover(t);
        else if (e) {
            var i = t.style,
            n = t.__normalStl;
            n && (xo(i), t.setStyle(n), yo(i), t.z2 -= 1)
        }
    }
    function io(t, e) {
        t.isGroup ? t.traverse(function(t) { ! t.isGroup && e(t)
        }) : e(t)
    }
    function no(t, e) {
        e = t.__hoverStl = !1 !== e && (e || {}),
        t.__hoverStlDirty = !0,
        t.__highlighted && (to(t), Jn(t))
    }
    function oo(t) {
        return t && t.__isEmphasisEntered
    }
    function ao(t) {
        this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasisEntered && io(this, Jn)
    }
    function ro(t) {
        this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasisEntered && io(this, to)
    }
    function so() {
        this.__isEmphasisEntered = !0,
        io(this, Jn)
    }
    function lo() {
        this.__isEmphasisEntered = !1,
        io(this, to)
    }
    function uo(t, e, i) {
        t.isGroup ? t.traverse(function(t) { ! t.isGroup && no(t, t.hoverStyle || e)
        }) : no(t, t.hoverStyle || e),
        ho(t, i)
    }
    function ho(t, e) {
        var i = !1 === e;
        if (t.__hoverSilentOnTouch = null != e && e.hoverSilentOnTouch, !i || t.__hoverStyleTrigger) {
            var n = i ? "off": "on";
            t[n]("mouseover", ao)[n]("mouseout", ro),
            t[n]("emphasis", so)[n]("normal", lo),
            t.__hoverStyleTrigger = !i
        }
    }
    function co(t, e, i, n, o, a, r) {
        var s, l = (o = o || yM).labelFetcher,
        u = o.labelDataIndex,
        h = o.labelDimIndex,
        c = i.getShallow("show"),
        d = n.getShallow("show"); (c || d) && (l && (s = l.getFormattedLabel(u, "normal", null, h)), null == s && (s = x(o.defaultText) ? o.defaultText(u, o) : o.defaultText));
        var f = c ? s: null,
        p = d ? A(l ? l.getFormattedLabel(u, "emphasis", null, h) : null, s) : null;
        null == f && null == p || (fo(t, i, a, o), fo(e, n, r, o, !0)),
        t.text = f,
        e.text = p
    }
    function fo(t, e, i, n, o) {
        return po(t, e, n, o),
        i && a(t, i),
        t
    }
    function po(t, e, i, n) {
        if ((i = i || yM).isRectText) {
            var o = e.getShallow("position") || (n ? null: "inside");
            "outside" === o && (o = "top"),
            t.textPosition = o,
            t.textOffset = e.getShallow("offset");
            var a = e.getShallow("rotate");
            null != a && (a *= Math.PI / 180),
            t.textRotation = a,
            t.textDistance = A(e.getShallow("distance"), n ? null: 5)
        }
        var r, s = e.ecModel,
        l = s && s.option.textStyle,
        u = go(e);
        if (u) {
            r = {};
            for (var h in u) if (u.hasOwnProperty(h)) {
                var c = e.getModel(["rich", h]);
                mo(r[h] = {},
                c, l, i, n)
            }
        }
        return t.rich = r,
        mo(t, e, l, i, n, !0),
        i.forceRich && !i.textStyle && (i.textStyle = {}),
        t
    }
    function go(t) {
        for (var e; t && t !== t.ecModel;) {
            var i = (t.option || yM).rich;
            if (i) {
                e = e || {};
                for (var n in i) i.hasOwnProperty(n) && (e[n] = 1)
            }
            t = t.parentModel
        }
        return e
    }
    function mo(t, e, i, n, o, a) {
        i = !o && i || yM,
        t.textFill = vo(e.getShallow("color"), n) || i.color,
        t.textStroke = vo(e.getShallow("textBorderColor"), n) || i.textBorderColor,
        t.textStrokeWidth = A(e.getShallow("textBorderWidth"), i.textBorderWidth),
        t.insideRawTextPosition = t.textPosition,
        o || (a && (t.insideRollbackOpt = n, yo(t)), null == t.textFill && (t.textFill = n.autoColor)),
        t.fontStyle = e.getShallow("fontStyle") || i.fontStyle,
        t.fontWeight = e.getShallow("fontWeight") || i.fontWeight,
        t.fontSize = e.getShallow("fontSize") || i.fontSize,
        t.fontFamily = e.getShallow("fontFamily") || i.fontFamily,
        t.textAlign = e.getShallow("align"),
        t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"),
        t.textLineHeight = e.getShallow("lineHeight"),
        t.textWidth = e.getShallow("width"),
        t.textHeight = e.getShallow("height"),
        t.textTag = e.getShallow("tag"),
        a && n.disableBox || (t.textBackgroundColor = vo(e.getShallow("backgroundColor"), n), t.textPadding = e.getShallow("padding"), t.textBorderColor = vo(e.getShallow("borderColor"), n), t.textBorderWidth = e.getShallow("borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow("shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow("shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")),
        t.textShadowColor = e.getShallow("textShadowColor") || i.textShadowColor,
        t.textShadowBlur = e.getShallow("textShadowBlur") || i.textShadowBlur,
        t.textShadowOffsetX = e.getShallow("textShadowOffsetX") || i.textShadowOffsetX,
        t.textShadowOffsetY = e.getShallow("textShadowOffsetY") || i.textShadowOffsetY
    }
    function vo(t, e) {
        return "auto" !== t ? t: e && e.autoColor ? e.autoColor: null
    }
    function yo(t) {
        var e = t.insideRollbackOpt;
        if (e && null == t.textFill) {
            var i, n = e.useInsideStyle,
            o = t.insideRawTextPosition,
            a = e.autoColor; ! 1 !== n && (!0 === n || e.isRectText && o && "string" == typeof o && o.indexOf("inside") >= 0) ? (i = {
                textFill: null,
                textStroke: t.textStroke,
                textStrokeWidth: t.textStrokeWidth
            },
            t.textFill = "#fff", null == t.textStroke && (t.textStroke = a, null == t.textStrokeWidth && (t.textStrokeWidth = 2))) : null != a && (i = {
                textFill: null
            },
            t.textFill = a),
            i && (t.insideRollback = i)
        }
    }
    function xo(t) {
        var e = t.insideRollback;
        e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback = null)
    }
    function _o(t, e) {
        var i = e || e.getModel("textStyle");
        return P([t.fontStyle || i && i.getShallow("fontStyle") || "", t.fontWeight || i && i.getShallow("fontWeight") || "", (t.fontSize || i && i.getShallow("fontSize") || 12) + "px", t.fontFamily || i && i.getShallow("fontFamily") || "sans-serif"].join(" "))
    }
    function wo(t, e, i, n, o, a) {
        if ("function" == typeof o && (a = o, o = null), n && n.isAnimationEnabled()) {
            var r = t ? "Update": "",
            s = n.getShallow("animationDuration" + r),
            l = n.getShallow("animationEasing" + r),
            u = n.getShallow("animationDelay" + r);
            "function" == typeof u && (u = u(o, n.getAnimationDelayParams ? n.getAnimationDelayParams(e, o) : null)),
            "function" == typeof s && (s = s(o)),
            s > 0 ? e.animateTo(i, s, u || 0, l, a, !!a) : (e.stopAnimation(), e.attr(i), a && a())
        } else e.stopAnimation(),
        e.attr(i),
        a && a()
    }
    function bo(t, e, i, n, o) {
        wo(!0, t, e, i, n, o)
    }
    function So(t, e, i, n, o) {
        wo(!1, t, e, i, n, o)
    }
    function Mo(t, e) {
        for (var i = vt([]); t && t !== e;) xt(i, t.getLocalTransform(), i),
        t = t.parent;
        return i
    }
    function Io(t, e, i) {
        return e && !c(e) && (e = mw.getLocalTransform(e)),
        i && (e = St([], e)),
        $([], t, e)
    }
    function To(t, e, i) {
        var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]),
        o = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]),
        a = ["left" === t ? -n: "right" === t ? n: 0, "top" === t ? -o: "bottom" === t ? o: 0];
        return a = Io(a, e, i),
        Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right": "left": a[1] > 0 ? "bottom": "top"
    }
    function Ao(t, e, i, n) {
        function o(t) {
            var e = {
                position: G(t.position),
                rotation: t.rotation
            };
            return t.shape && (e.shape = a({},
            t.shape)),
            e
        }
        if (t && e) {
            var r = function(t) {
                var e = {};
                return t.traverse(function(t) { ! t.isGroup && t.anid && (e[t.anid] = t)
                }),
                e
            } (t);
            e.traverse(function(t) {
                if (!t.isGroup && t.anid) {
                    var e = r[t.anid];
                    if (e) {
                        var n = o(t);
                        t.attr(o(e)),
                        bo(t, n, i, t.dataIndex)
                    }
                }
            })
        }
    }
    function Do(t, e) {
        return f(t,
        function(t) {
            var i = t[0];
            i = mM(i, e.x),
            i = vM(i, e.x + e.width);
            var n = t[1];
            return n = mM(n, e.y),
            n = vM(n, e.y + e.height),
            [i, n]
        })
    }
    function Co(t, e, i) {
        var n = (e = a({
            rectHover: !0
        },
        e)).style = {
            strokeNoScale: !0
        };
        if (i = i || {
            x: -1,
            y: -1,
            width: 2,
            height: 2
        },
        t) return 0 === t.indexOf("image://") ? (n.image = t.slice(8), r(n, i), new hi(e)) : Wn(t.replace("path://", ""), e, i, "center")
    }
    function Lo(t, e, i) {
        this.parentModel = e,
        this.ecModel = i,
        this.option = t
    }
    function ko(t, e, i) {
        for (var n = 0; n < e.length && (!e[n] || null != (t = t && "object" == typeof t ? t[e[n]] : null)); n++);
        return null == t && i && (t = i.get(e)),
        t
    }
    function Po(t, e) {
        var i = DM(t).getParent;
        return i ? i.call(t, e) : t.parentModel
    }
    function No(t) {
        return [t || "", CM++, Math.random().toFixed(5)].join("_")
    }
    function Oo(t) {
        return t.replace(/^\s+/, "").replace(/\s+$/, "")
    }
    function zo(t, e, i, n) {
        var o = e[1] - e[0],
        a = i[1] - i[0];
        if (0 === o) return 0 === a ? i[0] : (i[0] + i[1]) / 2;
        if (n) if (o > 0) {
            if (t <= e[0]) return i[0];
            if (t >= e[1]) return i[1]
        } else {
            if (t >= e[0]) return i[0];
            if (t <= e[1]) return i[1]
        } else {
            if (t === e[0]) return i[0];
            if (t === e[1]) return i[1]
        }
        return (t - e[0]) / o * a + i[0]
    }
    function Eo(t, e) {
        switch (t) {
        case "center":
        case "middle":
            t = "50%";
            break;
        case "left":
        case "top":
            t = "0%";
            break;
        case "right":
        case "bottom":
            t = "100%"
        }
        return "string" == typeof t ? Oo(t).match(/%$/) ? parseFloat(t) / 100 * e: parseFloat(t) : null == t ? NaN: +t
    }
    function Ro(t, e, i) {
        return null == e && (e = 10),
        e = Math.min(Math.max(0, e), 20),
        t = ( + t).toFixed(e),
        i ? t: +t
    }
    function Bo(t) {
        return t.sort(function(t, e) {
            return t - e
        }),
        t
    }
    function Vo(t) {
        if (t = +t, isNaN(t)) return 0;
        for (var e = 1,
        i = 0; Math.round(t * e) / e !== t;) e *= 10,
        i++;
        return i
    }
    function Fo(t) {
        var e = t.toString(),
        i = e.indexOf("e");
        if (i > 0) {
            var n = +e.slice(i + 1);
            return n < 0 ? -n: 0
        }
        var o = e.indexOf(".");
        return o < 0 ? 0 : e.length - 1 - o
    }
    function Go(t, e) {
        var i = Math.log,
        n = Math.LN10,
        o = Math.floor(i(t[1] - t[0]) / n),
        a = Math.round(i(Math.abs(e[1] - e[0])) / n),
        r = Math.min(Math.max( - o + a, 0), 20);
        return isFinite(r) ? r: 20
    }
    function Wo(t, e, i) {
        if (!t[e]) return 0;
        var n = p(t,
        function(t, e) {
            return t + (isNaN(e) ? 0 : e)
        },
        0);
        if (0 === n) return 0;
        for (var o = Math.pow(10, i), a = f(t,
        function(t) {
            return (isNaN(t) ? 0 : t) / n * o * 100
        }), r = 100 * o, s = f(a,
        function(t) {
            return Math.floor(t)
        }), l = p(s,
        function(t, e) {
            return t + e
        },
        0), u = f(a,
        function(t, e) {
            return t - s[e]
        }); l < r;) {
            for (var h = Number.NEGATIVE_INFINITY,
            c = null,
            d = 0,
            g = u.length; d < g; ++d) u[d] > h && (h = u[d], c = d); ++s[c],
            u[c] = 0,
            ++l
        }
        return s[e] / o
    }
    function Ho(t) {
        var e = 2 * Math.PI;
        return (t % e + e) % e
    }
    function Zo(t) {
        return t > -LM && t < LM
    }
    function jo(t) {
        if (t instanceof Date) return t;
        if ("string" == typeof t) {
            var e = PM.exec(t);
            if (!e) return new Date(NaN);
            if (e[8]) {
                var i = +e[4] || 0;
                return "Z" !== e[8].toUpperCase() && (i -= e[8].slice(0, 3)),
                new Date(Date.UTC( + e[1], +(e[2] || 1) - 1, +e[3] || 1, i, +(e[5] || 0), +e[6] || 0, +e[7] || 0))
            }
            return new Date( + e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0)
        }
        return null == t ? new Date(NaN) : new Date(Math.round(t))
    }
    function Yo(t) {
        return Math.pow(10, Uo(t))
    }
    function Uo(t) {
        return Math.floor(Math.log(t) / Math.LN10)
    }
    function Xo(t, e) {
        var i, n = Uo(t),
        o = Math.pow(10, n),
        a = t / o;
        return i = e ? a < 1.5 ? 1 : a < 2.5 ? 2 : a < 4 ? 3 : a < 7 ? 5 : 10 : a < 1 ? 1 : a < 2 ? 2 : a < 3 ? 3 : a < 5 ? 5 : 10,
        t = i * o,
        n >= -20 ? +t.toFixed(n < 0 ? -n: 0) : t
    }
    function qo(t) {
        function e(t, i, n) {
            return t.interval[n] < i.interval[n] || t.interval[n] === i.interval[n] && (t.close[n] - i.close[n] == (n ? -1 : 1) || !n && e(t, i, 1))
        }
        t.sort(function(t, i) {
            return e(t, i, 0) ? -1 : 1
        });
        for (var i = -1 / 0,
        n = 1,
        o = 0; o < t.length;) {
            for (var a = t[o].interval, r = t[o].close, s = 0; s < 2; s++) a[s] <= i && (a[s] = i, r[s] = s ? 1 : 1 - n),
            i = a[s],
            n = r[s];
            a[0] === a[1] && r[0] * r[1] != 1 ? t.splice(o, 1) : o++
        }
        return t
    }
    function Ko(t) {
        return t - parseFloat(t) >= 0
    }
    function Qo(t) {
        return isNaN(t) ? "-": (t = (t + "").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t.length > 1 ? "." + t[1] : "")
    }
    function Jo(t, e) {
        return t = (t || "").toLowerCase().replace(/-(.)/g,
        function(t, e) {
            return e.toUpperCase()
        }),
        e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)),
        t
    }
    function $o(t) {
        return null == t ? "": (t + "").replace(zM,
        function(t, e) {
            return EM[e]
        })
    }
    function ta(t, e, i) {
        y(e) || (e = [e]);
        var n = e.length;
        if (!n) return "";
        for (var o = e[0].$vars || [], a = 0; a < o.length; a++) {
            var r = RM[a];
            t = t.replace(BM(r), BM(r, 0))
        }
        for (var s = 0; s < n; s++) for (var l = 0; l < o.length; l++) {
            var u = e[s][o[l]];
            t = t.replace(BM(RM[l], s), i ? $o(u) : u)
        }
        return t
    }
    function ea(t, e, i) {
        return d(e,
        function(e, n) {
            t = t.replace("{" + n + "}", i ? $o(e) : e)
        }),
        t
    }
    function ia(t, e) {
        var i = (t = _(t) ? {
            color: t,
            extraCssText: e
        }: t || {}).color,
        n = t.type,
        e = t.extraCssText,
        o = t.renderMode || "html",
        a = t.markerId || "X";
        return i ? "html" === o ? "subItem" === n ? '<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:' + $o(i) + ";" + (e || "") + '"></span>': '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' + $o(i) + ";" + (e || "") + '"></span>': {
            renderMode: o,
            content: "{marker" + a + "|}  ",
            style: {
                color: i
            }
        }: ""
    }
    function na(t, e) {
        return t += "",
        "0000".substr(0, e - t.length) + t
    }
    function oa(t, e, i) {
        "week" !== t && "month" !== t && "quarter" !== t && "half-year" !== t && "year" !== t || (t = "MM-dd\nyyyy");
        var n = jo(e),
        o = i ? "UTC": "",
        a = n["get" + o + "FullYear"](),
        r = n["get" + o + "Month"]() + 1,
        s = n["get" + o + "Date"](),
        l = n["get" + o + "Hours"](),
        u = n["get" + o + "Minutes"](),
        h = n["get" + o + "Seconds"](),
        c = n["get" + o + "Milliseconds"]();
        return t = t.replace("MM", na(r, 2)).replace("M", r).replace("yyyy", a).replace("yy", a % 100).replace("dd", na(s, 2)).replace("d", s).replace("hh", na(l, 2)).replace("h", l).replace("mm", na(u, 2)).replace("m", u).replace("ss", na(h, 2)).replace("s", h).replace("SSS", na(c, 3))
    }
    function aa(t) {
        return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
    }
    function ra(t, e, i, n, o) {
        var a = 0,
        r = 0;
        null == n && (n = 1 / 0),
        null == o && (o = 1 / 0);
        var s = 0;
        e.eachChild(function(l, u) {
            var h, c, d = l.position,
            f = l.getBoundingRect(),
            p = e.childAt(u + 1),
            g = p && p.getBoundingRect();
            if ("horizontal" === t) {
                var m = f.width + (g ? -g.x + f.x: 0); (h = a + m) > n || l.newline ? (a = 0, h = m, r += s + i, s = f.height) : s = Math.max(s, f.height)
            } else {
                var v = f.height + (g ? -g.y + f.y: 0); (c = r + v) > o || l.newline ? (a += s + i, r = 0, c = v, s = f.width) : s = Math.max(s, f.width)
            }
            l.newline || (d[0] = a, d[1] = r, "horizontal" === t ? a = h + i: r = c + i)
        })
    }
    function sa(t, e, i) {
        var n = e.width,
        o = e.height,
        a = Eo(t.x, n),
        r = Eo(t.y, o),
        s = Eo(t.x2, n),
        l = Eo(t.y2, o);
        return (isNaN(a) || isNaN(parseFloat(t.x))) && (a = 0),
        (isNaN(s) || isNaN(parseFloat(t.x2))) && (s = n),
        (isNaN(r) || isNaN(parseFloat(t.y))) && (r = 0),
        (isNaN(l) || isNaN(parseFloat(t.y2))) && (l = o),
        i = OM(i || 0),
        {
            width: Math.max(s - a - i[1] - i[3], 0),
            height: Math.max(l - r - i[0] - i[2], 0)
        }
    }
    function la(t, e, i) {
        i = OM(i || 0);
        var n = e.width,
        o = e.height,
        a = Eo(t.left, n),
        r = Eo(t.top, o),
        s = Eo(t.right, n),
        l = Eo(t.bottom, o),
        u = Eo(t.width, n),
        h = Eo(t.height, o),
        c = i[2] + i[0],
        d = i[1] + i[3],
        f = t.aspect;
        switch (isNaN(u) && (u = n - s - d - a), isNaN(h) && (h = o - l - c - r), null != f && (isNaN(u) && isNaN(h) && (f > n / o ? u = .8 * n: h = .8 * o), isNaN(u) && (u = f * h), isNaN(h) && (h = u / f)), isNaN(a) && (a = n - s - u - d), isNaN(r) && (r = o - l - h - c), t.left || t.right) {
        case "center":
            a = n / 2 - u / 2 - i[3];
            break;
        case "right":
            a = n - u - d
        }
        switch (t.top || t.bottom) {
        case "middle":
        case "center":
            r = o / 2 - h / 2 - i[0];
            break;
        case "bottom":
            r = o - h - c
        }
        a = a || 0,
        r = r || 0,
        isNaN(u) && (u = n - d - a - (s || 0)),
        isNaN(h) && (h = o - c - r - (l || 0));
        var p = new ue(a + i[3], r + i[0], u, h);
        return p.margin = i,
        p
    }
    function ua(t, e, i, n, o) {
        var a = !o || !o.hv || o.hv[0],
        s = !o || !o.hv || o.hv[1],
        l = o && o.boundingMode || "all";
        if (a || s) {
            var u;
            if ("raw" === l) u = "group" === t.type ? new ue(0, 0, +e.width || 0, +e.height || 0) : t.getBoundingRect();
            else if (u = t.getBoundingRect(), t.needLocalTransform()) {
                var h = t.getLocalTransform(); (u = u.clone()).applyTransform(h)
            }
            e = la(r({
                width: u.width,
                height: u.height
            },
            e), i, n);
            var c = t.position,
            d = a ? e.x - u.x: 0,
            f = s ? e.y - u.y: 0;
            t.attr("position", "raw" === l ? [d, f] : [c[0] + d, c[1] + f])
        }
    }
    function ha(t, e) {
        return null != t[ZM[e][0]] || null != t[ZM[e][1]] && null != t[ZM[e][2]]
    }
    function ca(t, e, i) {
        function n(i, n) {
            var r = {},
            l = 0,
            u = {},
            h = 0;
            if (WM(i,
            function(e) {
                u[e] = t[e]
            }), WM(i,
            function(t) {
                o(e, t) && (r[t] = u[t] = e[t]),
                a(r, t) && l++,
                a(u, t) && h++
            }), s[n]) return a(e, i[1]) ? u[i[2]] = null: a(e, i[2]) && (u[i[1]] = null),
            u;
            if (2 !== h && l) {
                if (l >= 2) return r;
                for (var c = 0; c < i.length; c++) {
                    var d = i[c];
                    if (!o(r, d) && o(t, d)) {
                        r[d] = t[d];
                        break
                    }
                }
                return r
            }
            return u
        }
        function o(t, e) {
            return t.hasOwnProperty(e)
        }
        function a(t, e) {
            return null != t[e] && "auto" !== t[e]
        }
        function r(t, e, i) {
            WM(t,
            function(t) {
                e[t] = i[t]
            })
        } ! w(i) && (i = {});
        var s = i.ignoreSize; ! y(s) && (s = [s, s]);
        var l = n(ZM[0], 0),
        u = n(ZM[1], 1);
        r(ZM[0], t, l),
        r(ZM[1], t, u)
    }
    function da(t) {
        return fa({},
        t)
    }
    function fa(t, e) {
        return e && t && WM(HM,
        function(i) {
            e.hasOwnProperty(i) && (t[i] = e[i])
        }),
        t
    }
    function pa(t, e) {
        for (var i = t.length,
        n = 0; n < i; n++) if (t[n].length > e) return t[n];
        return t[i - 1]
    }
    function ga(t) {
        var e = t.get("coordinateSystem"),
        i = {
            coordSysName: e,
            coordSysDims: [],
            axisMap: E(),
            categoryAxisMap: E()
        },
        n = $M[e];
        if (n) return n(t, i, i.axisMap, i.categoryAxisMap),
        i
    }
    function ma(t) {
        return "category" === t.get("type")
    }
    function va(t) {
        this.fromDataset = t.fromDataset,
        this.data = t.data || (t.sourceFormat === nI ? {}: []),
        this.sourceFormat = t.sourceFormat || oI,
        this.seriesLayoutBy = t.seriesLayoutBy || rI,
        this.dimensionsDefine = t.dimensionsDefine,
        this.encodeDefine = t.encodeDefine && E(t.encodeDefine),
        this.startIndex = t.startIndex || 0,
        this.dimensionsDetectCount = t.dimensionsDetectCount
    }
    function ya(t) {
        var e = t.option.source,
        i = oI;
        if (S(e)) i = aI;
        else if (y(e)) {
            0 === e.length && (i = eI);
            for (var n = 0,
            o = e.length; n < o; n++) {
                var a = e[n];
                if (null != a) {
                    if (y(a)) {
                        i = eI;
                        break
                    }
                    if (w(a)) {
                        i = iI;
                        break
                    }
                }
            }
        } else if (w(e)) {
            for (var r in e) if (e.hasOwnProperty(r) && c(e[r])) {
                i = nI;
                break
            }
        } else if (null != e) throw new Error("Invalid data");
        lI(t).sourceFormat = i
    }
    function xa(t) {
        return lI(t).source
    }
    function _a(t) {
        lI(t).datasetMap = E()
    }
    function wa(t) {
        var e = t.option,
        i = e.data,
        n = S(i) ? aI: tI,
        o = !1,
        a = e.seriesLayoutBy,
        r = e.sourceHeader,
        s = e.dimensions,
        l = Aa(t);
        if (l) {
            var u = l.option;
            i = u.source,
            n = lI(l).sourceFormat,
            o = !0,
            a = a || u.seriesLayoutBy,
            null == r && (r = u.sourceHeader),
            s = s || u.dimensions
        }
        var h = ba(i, n, a, r, s),
        c = e.encode; ! c && l && (c = Ta(t, l, i, n, a, h)),
        lI(t).source = new va({
            data: i,
            fromDataset: o,
            seriesLayoutBy: a,
            sourceFormat: n,
            dimensionsDefine: h.dimensionsDefine,
            startIndex: h.startIndex,
            dimensionsDetectCount: h.dimensionsDetectCount,
            encodeDefine: c
        })
    }
    function ba(t, e, i, n, o) {
        if (!t) return {
            dimensionsDefine: Sa(o)
        };
        var a, r, s;
        if (e === eI)"auto" === n || null == n ? Ma(function(t) {
            null != t && "-" !== t && (_(t) ? null == r && (r = 1) : r = 0)
        },
        i, t, 10) : r = n ? 1 : 0,
        o || 1 !== r || (o = [], Ma(function(t, e) {
            o[e] = null != t ? t: ""
        },
        i, t)),
        a = o ? o.length: i === sI ? t.length: t[0] ? t[0].length: null;
        else if (e === iI) o || (o = Ia(t), s = !0);
        else if (e === nI) o || (o = [], s = !0, d(t,
        function(t, e) {
            o.push(e)
        }));
        else if (e === tI) {
            var l = Li(t[0]);
            a = y(l) && l.length || 1
        }
        var u;
        return s && d(o,
        function(t, e) {
            "name" === (w(t) ? t.name: t) && (u = e)
        }),
        {
            startIndex: r,
            dimensionsDefine: Sa(o),
            dimensionsDetectCount: a,
            potentialNameDimIndex: u
        }
    }
    function Sa(t) {
        if (t) {
            var e = E();
            return f(t,
            function(t, i) {
                if (null == (t = a({},
                w(t) ? t: {
                    name: t
                })).name) return t;
                t.name += "",
                null == t.displayName && (t.displayName = t.name);
                var n = e.get(t.name);
                return n ? t.name += "-" + n.count++:e.set(t.name, {
                    count: 1
                }),
                t
            })
        }
    }
    function Ma(t, e, i, n) {
        if (null == n && (n = 1 / 0), e === sI) for (a = 0; a < i.length && a < n; a++) t(i[a] ? i[a][0] : null, a);
        else for (var o = i[0] || [], a = 0; a < o.length && a < n; a++) t(o[a], a)
    }
    function Ia(t) {
        for (var e, i = 0; i < t.length && !(e = t[i++]););
        if (e) {
            var n = [];
            return d(e,
            function(t, e) {
                n.push(e)
            }),
            n
        }
    }
    function Ta(t, e, i, n, o, a) {
        var r = ga(t),
        s = {},
        l = [],
        u = [],
        h = t.subType,
        c = E(["pie", "map", "funnel"]),
        f = E(["line", "bar", "pictorialBar", "scatter", "effectScatter", "candlestick", "boxplot"]);
        if (r && null != f.get(h)) {
            var p = t.ecModel,
            g = lI(p).datasetMap,
            m = e.uid + "_" + o,
            v = g.get(m) || g.set(m, {
                categoryWayDim: 1,
                valueWayDim: 0
            });
            d(r.coordSysDims,
            function(t) {
                if (null == r.firstCategoryDimIndex) e = v.valueWayDim++,
                s[t] = e,
                u.push(e);
                else if (r.categoryAxisMap.get(t)) s[t] = 0,
                l.push(0);
                else {
                    var e = v.categoryWayDim++;
                    s[t] = e,
                    u.push(e)
                }
            })
        } else if (null != c.get(h)) {
            for (var y, x = 0; x < 5 && null == y; x++) Ca(i, n, o, a.dimensionsDefine, a.startIndex, x) || (y = x);
            if (null != y) {
                s.value = y;
                var _ = a.potentialNameDimIndex || Math.max(y - 1, 0);
                u.push(_),
                l.push(_)
            }
        }
        return l.length && (s.itemName = l),
        u.length && (s.seriesName = u),
        s
    }
    function Aa(t) {
        var e = t.option;
        if (!e.data) return t.ecModel.getComponent("dataset", e.datasetIndex || 0)
    }
    function Da(t, e) {
        return Ca(t.data, t.sourceFormat, t.seriesLayoutBy, t.dimensionsDefine, t.startIndex, e)
    }
    function Ca(t, e, i, n, o, a) {
        function r(t) {
            return (null == t || !isFinite(t) || "" === t) && (!(!_(t) || "-" === t) || void 0)
        }
        var s;
        if (S(t)) return ! 1;
        var l;
        if (n && (l = w(l = n[a]) ? l.name: l), e === eI) if (i === sI) {
            for (var u = t[a], h = 0; h < (u || []).length && h < 5; h++) if (null != (s = r(u[o + h]))) return s
        } else for (h = 0; h < t.length && h < 5; h++) {
            var c = t[o + h];
            if (c && null != (s = r(c[a]))) return s
        } else if (e === iI) {
            if (!l) return;
            for (h = 0; h < t.length && h < 5; h++) if ((d = t[h]) && null != (s = r(d[l]))) return s
        } else if (e === nI) {
            if (!l) return;
            if (! (u = t[l]) || S(u)) return ! 1;
            for (h = 0; h < u.length && h < 5; h++) if (null != (s = r(u[h]))) return s
        } else if (e === tI) for (h = 0; h < t.length && h < 5; h++) {
            var d = t[h],
            f = Li(d);
            if (!y(f)) return ! 1;
            if (null != (s = r(f[a]))) return s
        }
        return ! 1
    }
    function La(t, e) {
        if (e) {
            var i = e.seiresIndex,
            n = e.seriesId,
            o = e.seriesName;
            return null != i && t.componentIndex !== i || null != n && t.id !== n || null != o && t.name !== o
        }
    }
    function ka(t, e) {
        var o = t.color && !t.colorLayer;
        d(e,
        function(e, a) {
            "colorLayer" === a && o || XM.hasClass(a) || ("object" == typeof e ? t[a] = t[a] ? n(t[a], e, !1) : i(e) : null == t[a] && (t[a] = e))
        })
    }
    function Pa(t) {
        t = t,
        this.option = {},
        this.option[uI] = 1,
        this._componentsMap = E({
            series: []
        }),
        this._seriesIndices,
        this._seriesIndicesMap,
        ka(t, this._theme.option),
        n(t, KM, !1),
        this.mergeOption(t)
    }
    function Na(t, e) {
        y(e) || (e = e ? [e] : []);
        var i = {};
        return d(e,
        function(e) {
            i[e] = (t.get(e) || []).slice()
        }),
        i
    }
    function Oa(t, e, i) {
        return e.type ? e.type: i ? i.subType: XM.determineSubType(t, e)
    }
    function za(t, e) {
        t._seriesIndicesMap = E(t._seriesIndices = f(e,
        function(t) {
            return t.componentIndex
        }) || [])
    }
    function Ea(t, e) {
        return e.hasOwnProperty("subType") ? g(t,
        function(t) {
            return t.subType === e.subType
        }) : t
    }
    function Ra(t) {
        d(cI,
        function(e) {
            this[e] = m(t[e], t)
        },
        this)
    }
    function Ba() {
        this._coordinateSystems = []
    }
    function Va(t) {
        this._api = t,
        this._timelineOptions = [],
        this._mediaList = [],
        this._mediaDefault,
        this._currentMediaIndices = [],
        this._optionBackup,
        this._newBaseOption
    }
    function Fa(t, e, i) {
        var n, o, a = [],
        r = [],
        s = t.timeline;
        if (t.baseOption && (o = t.baseOption), (s || t.options) && (o = o || {},
        a = (t.options || []).slice()), t.media) {
            o = o || {};
            var l = t.media;
            fI(l,
            function(t) {
                t && t.option && (t.query ? r.push(t) : n || (n = t))
            })
        }
        return o || (o = t),
        o.timeline || (o.timeline = s),
        fI([o].concat(a).concat(f(r,
        function(t) {
            return t.option
        })),
        function(t) {
            fI(e,
            function(e) {
                e(t, i)
            })
        }),
        {
            baseOption: o,
            timelineOptions: a,
            mediaDefault: n,
            mediaList: r
        }
    }
    function Ga(t, e, i) {
        var n = {
            width: e,
            height: i,
            aspectratio: e / i
        },
        o = !0;
        return d(t,
        function(t, e) {
            var i = e.match(vI);
            if (i && i[1] && i[2]) {
                var a = i[1],
                r = i[2].toLowerCase();
                Wa(n[r], t, a) || (o = !1)
            }
        }),
        o
    }
    function Wa(t, e, i) {
        return "min" === i ? t >= e: "max" === i ? t <= e: t === e
    }
    function Ha(t, e) {
        return t.join(",") === e.join(",")
    }
    function Za(t, e) {
        fI(e = e || {},
        function(e, i) {
            if (null != e) {
                var n = t[i];
                if (XM.hasClass(i)) {
                    e = Di(e);
                    var o = Pi(n = Di(n), e);
                    t[i] = gI(o,
                    function(t) {
                        return t.option && t.exist ? mI(t.exist, t.option, !0) : t.exist || t.option
                    })
                } else t[i] = mI(n, e, !0)
            }
        })
    }
    function ja(t) {
        var e = t && t.itemStyle;
        if (e) for (var i = 0,
        o = _I.length; i < o; i++) {
            var a = _I[i],
            r = e.normal,
            s = e.emphasis;
            r && r[a] && (t[a] = t[a] || {},
            t[a].normal ? n(t[a].normal, r[a]) : t[a].normal = r[a], r[a] = null),
            s && s[a] && (t[a] = t[a] || {},
            t[a].emphasis ? n(t[a].emphasis, s[a]) : t[a].emphasis = s[a], s[a] = null)
        }
    }
    function Ya(t, e, i) {
        if (t && t[e] && (t[e].normal || t[e].emphasis)) {
            var n = t[e].normal,
            o = t[e].emphasis;
            n && (i ? (t[e].normal = t[e].emphasis = null, r(t[e], n)) : t[e] = n),
            o && (t.emphasis = t.emphasis || {},
            t.emphasis[e] = o)
        }
    }
    function Ua(t) {
        Ya(t, "itemStyle"),
        Ya(t, "lineStyle"),
        Ya(t, "areaStyle"),
        Ya(t, "label"),
        Ya(t, "labelLine"),
        Ya(t, "upperLabel"),
        Ya(t, "edgeLabel")
    }
    function Xa(t, e) {
        var i = xI(t) && t[e],
        n = xI(i) && i.textStyle;
        if (n) for (var o = 0,
        a = Rb.length; o < a; o++) {
            var e = Rb[o];
            n.hasOwnProperty(e) && (i[e] = n[e])
        }
    }
    function qa(t) {
        t && (Ua(t), Xa(t, "label"), t.emphasis && Xa(t.emphasis, "label"))
    }
    function Ka(t) {
        if (xI(t)) {
            ja(t),
            Ua(t),
            Xa(t, "label"),
            Xa(t, "upperLabel"),
            Xa(t, "edgeLabel"),
            t.emphasis && (Xa(t.emphasis, "label"), Xa(t.emphasis, "upperLabel"), Xa(t.emphasis, "edgeLabel"));
            var e = t.markPoint;
            e && (ja(e), qa(e));
            var i = t.markLine;
            i && (ja(i), qa(i));
            var n = t.markArea;
            n && qa(n);
            var o = t.data;
            if ("graph" === t.type) {
                o = o || t.nodes;
                var a = t.links || t.edges;
                if (a && !S(a)) for (s = 0; s < a.length; s++) qa(a[s]);
                d(t.categories,
                function(t) {
                    Ua(t)
                })
            }
            if (o && !S(o)) for (s = 0; s < o.length; s++) qa(o[s]);
            if ((e = t.markPoint) && e.data) for (var r = e.data,
            s = 0; s < r.length; s++) qa(r[s]);
            if ((i = t.markLine) && i.data) for (var l = i.data,
            s = 0; s < l.length; s++) y(l[s]) ? (qa(l[s][0]), qa(l[s][1])) : qa(l[s]);
            "gauge" === t.type ? (Xa(t, "axisLabel"), Xa(t, "title"), Xa(t, "detail")) : "treemap" === t.type ? (Ya(t.breadcrumb, "itemStyle"), d(t.levels,
            function(t) {
                Ua(t)
            })) : "tree" === t.type && Ua(t.leaves)
        }
    }
    function Qa(t) {
        return y(t) ? t: t ? [t] : []
    }
    function Ja(t) {
        return (y(t) ? t[0] : t) || {}
    }
    function $a(t, e) {
        e = e.split(",");
        for (var i = t,
        n = 0; n < e.length && null != (i = i && i[e[n]]); n++);
        return i
    }
    function tr(t, e, i, n) {
        e = e.split(",");
        for (var o, a = t,
        r = 0; r < e.length - 1; r++) null == a[o = e[r]] && (a[o] = {}),
        a = a[o]; (n || null == a[e[r]]) && (a[e[r]] = i)
    }
    function er(t) {
        d(bI,
        function(e) {
            e[0] in t && !(e[1] in t) && (t[e[1]] = t[e[0]])
        })
    }
    function ir(t) {
        d(t,
        function(e, i) {
            var n = [],
            o = [NaN, NaN],
            a = [e.stackResultDimension, e.stackedOverDimension],
            r = e.data,
            s = e.isStackedByIndex,
            l = r.map(a,
            function(a, l, u) {
                var h = r.get(e.stackedDimension, u);
                if (isNaN(h)) return o;
                var c, d;
                s ? d = r.getRawIndex(u) : c = r.get(e.stackedByDimension, u);
                for (var f = NaN,
                p = i - 1; p >= 0; p--) {
                    var g = t[p];
                    if (s || (d = g.data.rawIndexOf(g.stackedByDimension, c)), d >= 0) {
                        var m = g.data.getByRawIndex(g.stackResultDimension, d);
                        if (h >= 0 && m > 0 || h <= 0 && m < 0) {
                            h += m,
                            f = m;
                            break
                        }
                    }
                }
                return n[0] = h,
                n[1] = f,
                n
            });
            r.hostModel.setData(l),
            e.data = l
        })
    }
    function nr(t, e) {
        va.isInstance(t) || (t = va.seriesDataToSource(t)),
        this._source = t;
        var i = this._data = t.data,
        n = t.sourceFormat;
        n === aI && (this._offset = 0, this._dimSize = e, this._data = i),
        a(this, TI[n === eI ? n + "_" + t.seriesLayoutBy: n])
    }
    function or() {
        return this._data.length
    }
    function ar(t) {
        return this._data[t]
    }
    function rr(t) {
        for (var e = 0; e < t.length; e++) this._data.push(t[e])
    }
    function sr(t, e, i, n) {
        return null != i ? t[i] : t
    }
    function lr(t, e, i, n) {
        return ur(t[n], this._dimensionInfos[e])
    }
    function ur(t, e) {
        var i = e && e.type;
        if ("ordinal" === i) {
            var n = e && e.ordinalMeta;
            return n ? n.parseAndCollect(t) : t
        }
        return "time" === i && "number" != typeof t && null != t && "-" !== t && (t = +jo(t)),
        null == t || "" === t ? NaN: +t
    }
    function hr(t, e, i) {
        if (t) {
            var n = t.getRawDataItem(e);
            if (null != n) {
                var o, a, r = t.getProvider().getSource().sourceFormat,
                s = t.getDimensionInfo(i);
                return s && (o = s.name, a = s.index),
                AI[r](n, e, a, o)
            }
        }
    }
    function cr(t, e, i) {
        if (t) {
            var n = t.getProvider().getSource().sourceFormat;
            if (n === tI || n === iI) {
                var o = t.getRawDataItem(e);
                return n !== tI || w(o) || (o = null),
                o ? o[i] : void 0
            }
        }
    }
    function dr(t) {
        return new fr(t)
    }
    function fr(t) {
        t = t || {},
        this._reset = t.reset,
        this._plan = t.plan,
        this._count = t.count,
        this._onDirty = t.onDirty,
        this._dirty = !0,
        this.context
    }
    function pr(t, e, i, n, o, a) {
        PI.reset(i, n, o, a),
        t._callingProgress = e,
        t._callingProgress({
            start: i,
            end: n,
            count: n - i,
            next: PI.next
        },
        t.context)
    }
    function gr(t, e) {
        t._dueIndex = t._outputDueEnd = t._dueEnd = 0,
        t._settedOutputEnd = null;
        var i, n; ! e && t._reset && ((i = t._reset(t.context)) && i.progress && (n = i.forceFirstProgress, i = i.progress), y(i) && !i.length && (i = null)),
        t._progress = i,
        t._modBy = t._modDataCount = null;
        var o = t._downstream;
        return o && o.dirty(),
        n
    }
    function mr(t) {
        var e = t.name;
        Oi(t) || (t.name = vr(t) || e)
    }
    function vr(t) {
        var e = t.getRawData(),
        i = [];
        return d(e.mapDimension("seriesName", !0),
        function(t) {
            var n = e.getDimensionInfo(t);
            n.displayName && i.push(n.displayName)
        }),
        i.join(" ")
    }
    function yr(t) {
        return t.model.getRawData().count()
    }
    function xr(t) {
        var e = t.model;
        return e.setData(e.getRawData().cloneShallow()),
        _r
    }
    function _r(t, e) {
        t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData)
    }
    function wr(t, e) {
        d(t.CHANGABLE_METHODS,
        function(i) {
            t.wrapMethod(i, v(br, e))
        })
    }
    function br(t) {
        var e = Sr(t);
        e && e.setOutputEnd(this.count())
    }
    function Sr(t) {
        var e = (t.ecModel || {}).scheduler,
        i = e && e.getPipeline(t.uid);
        if (i) {
            var n = i.currentTask;
            if (n) {
                var o = n.agentStubMap;
                o && (n = o.get(t.uid))
            }
            return n
        }
    }
    function Mr() {
        this.group = new Zw,
        this.uid = No("viewChart"),
        this.renderTask = dr({
            plan: Ar,
            reset: Dr
        }),
        this.renderTask.context = {
            view: this
        }
    }
    function Ir(t, e) {
        if (t && (t.trigger(e), "group" === t.type)) for (var i = 0; i < t.childCount(); i++) Ir(t.childAt(i), e)
    }
    function Tr(t, e, i) {
        var n = Ri(t, e);
        null != n ? d(Di(n),
        function(e) {
            Ir(t.getItemGraphicEl(e), i)
        }) : t.eachItemGraphicEl(function(t) {
            Ir(t, i)
        })
    }
    function Ar(t) {
        return VI(t.model)
    }
    function Dr(t) {
        var e = t.model,
        i = t.ecModel,
        n = t.api,
        o = t.payload,
        a = e.pipelineContext.progressiveRender,
        r = t.view,
        s = o && BI(o).updateMethod,
        l = a ? "incrementalPrepareRender": s && r[s] ? s: "render";
        return "render" !== l && r[l](e, i, n, o),
        GI[l]
    }
    function Cr(t, e, i) {
        function n() {
            h = (new Date).getTime(),
            c = null,
            t.apply(r, s || [])
        }
        var o, a, r, s, l, u = 0,
        h = 0,
        c = null;
        e = e || 0;
        var d = function() {
            o = (new Date).getTime(),
            r = this,
            s = arguments;
            var t = l || e,
            d = l || i;
            l = null,
            a = o - (d ? u: h) - t,
            clearTimeout(c),
            d ? c = setTimeout(n, t) : a >= 0 ? n() : c = setTimeout(n, -a),
            u = o
        };
        return d.clear = function() {
            c && (clearTimeout(c), c = null)
        },
        d.debounceNextCall = function(t) {
            l = t
        },
        d
    }
    function Lr(t, e, i, n) {
        var o = t[e];
        if (o) {
            var a = o[WI] || o,
            r = o[ZI];
            if (o[HI] !== i || r !== n) {
                if (null == i || !n) return t[e] = a; (o = t[e] = Cr(a, i, "debounce" === n))[WI] = a,
                o[ZI] = n,
                o[HI] = i
            }
            return o
        }
    }
    function kr(t, e) {
        var i = t[e];
        i && i[WI] && (t[e] = i[WI])
    }
    function Pr(t, e, i, n) {
        this.ecInstance = t,
        this.api = e,
        this.unfinished;
        var i = this._dataProcessorHandlers = i.slice(),
        n = this._visualHandlers = n.slice();
        this._allHandlers = i.concat(n),
        this._stageTaskMap = E()
    }
    function Nr(t, e, i, n, o) {
        function a(t, e) {
            return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id))
        }
        o = o || {};
        var r;
        d(e,
        function(e, s) {
            if (!o.visualType || o.visualType === e.visualType) {
                var l = t._stageTaskMap.get(e.uid),
                u = l.seriesTaskMap,
                h = l.overallTask;
                if (h) {
                    var c, d = h.agentStubMap;
                    d.each(function(t) {
                        a(o, t) && (t.dirty(), c = !0)
                    }),
                    c && h.dirty(),
                    KI(h, n);
                    var f = t.getPerformArgs(h, o.block);
                    d.each(function(t) {
                        t.perform(f)
                    }),
                    r |= h.perform(f)
                } else u && u.each(function(s, l) {
                    a(o, s) && s.dirty();
                    var u = t.getPerformArgs(s, o.block);
                    u.skip = !e.performRawSeries && i.isSeriesFiltered(s.context.model),
                    KI(s, n),
                    r |= s.perform(u)
                })
            }
        }),
        t.unfinished |= r
    }
    function Or(t, e, i, n, o) {
        function a(i) {
            var a = i.uid,
            s = r.get(a) || r.set(a, dr({
                plan: Fr,
                reset: Gr,
                count: Hr
            }));
            s.context = {
                model: i,
                ecModel: n,
                api: o,
                useClearVisual: e.isVisual && !e.isLayout,
                plan: e.plan,
                reset: e.reset,
                scheduler: t
            },
            Zr(t, i, s)
        }
        var r = i.seriesTaskMap || (i.seriesTaskMap = E()),
        s = e.seriesType,
        l = e.getTargetSeries;
        e.createOnAllSeries ? n.eachRawSeries(a) : s ? n.eachRawSeriesByType(s, a) : l && l(n, o).each(a);
        var u = t._pipelineMap;
        r.each(function(t, e) {
            u.get(e) || (t.dispose(), r.removeKey(e))
        })
    }
    function zr(t, e, i, n, o) {
        function a(e) {
            var i = e.uid,
            n = s.get(i);
            n || (n = s.set(i, dr({
                reset: Rr,
                onDirty: Vr
            })), r.dirty()),
            n.context = {
                model: e,
                overallProgress: h,
                modifyOutputEnd: c
            },
            n.agent = r,
            n.__block = h,
            Zr(t, e, n)
        }
        var r = i.overallTask = i.overallTask || dr({
            reset: Er
        });
        r.context = {
            ecModel: n,
            api: o,
            overallReset: e.overallReset,
            scheduler: t
        };
        var s = r.agentStubMap = r.agentStubMap || E(),
        l = e.seriesType,
        u = e.getTargetSeries,
        h = !0,
        c = e.modifyOutputEnd;
        l ? n.eachRawSeriesByType(l, a) : u ? u(n, o).each(a) : (h = !1, d(n.getSeries(), a));
        var f = t._pipelineMap;
        s.each(function(t, e) {
            f.get(e) || (t.dispose(), r.dirty(), s.removeKey(e))
        })
    }
    function Er(t) {
        t.overallReset(t.ecModel, t.api, t.payload)
    }
    function Rr(t, e) {
        return t.overallProgress && Br
    }
    function Br() {
        this.agent.dirty(),
        this.getDownstream().dirty()
    }
    function Vr() {
        this.agent && this.agent.dirty()
    }
    function Fr(t) {
        return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload)
    }
    function Gr(t) {
        t.useClearVisual && t.data.clearAllVisual();
        var e = t.resetDefines = Di(t.reset(t.model, t.ecModel, t.api, t.payload));
        return e.length > 1 ? f(e,
        function(t, e) {
            return Wr(e)
        }) : QI
    }
    function Wr(t) {
        return function(e, i) {
            var n = i.data,
            o = i.resetDefines[t];
            if (o && o.dataEach) for (var a = e.start; a < e.end; a++) o.dataEach(n, a);
            else o && o.progress && o.progress(e, n)
        }
    }
    function Hr(t) {
        return t.data.count()
    }
    function Zr(t, e, i) {
        var n = e.uid,
        o = t._pipelineMap.get(n); ! o.head && (o.head = i),
        o.tail && o.tail.pipe(i),
        o.tail = i,
        i.__idxInPipeline = o.count++,
        i.__pipeline = o
    }
    function jr(t) {
        JI = null;
        try {
            t($I, tT)
        } catch(t) {}
        return JI
    }
    function Yr(t, e) {
        for (var i in e.prototype) t[i] = B
    }
    function Ur(t) {
        for (_(t) && (t = (new DOMParser).parseFromString(t, "text/xml")), 9 === t.nodeType && (t = t.firstChild);
        "svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType;) t = t.nextSibling;
        return t
    }
    function Xr() {
        this._defs = {},
        this._root = null,
        this._isDefine = !1,
        this._isText = !1
    }
    function qr(t, e) {
        for (var i = t.firstChild; i;) {
            if (1 === i.nodeType) {
                var n = i.getAttribute("offset");
                n = n.indexOf("%") > 0 ? parseInt(n, 10) / 100 : n ? parseFloat(n) : 0;
                var o = i.getAttribute("stop-color") || "#000000";
                e.addColorStop(n, o)
            }
            i = i.nextSibling
        }
    }
    function Kr(t, e) {
        t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), r(e.__inheritedStyle, t.__inheritedStyle))
    }
    function Qr(t) {
        for (var e = P(t).split(rT), i = [], n = 0; n < e.length; n += 2) {
            var o = parseFloat(e[n]),
            a = parseFloat(e[n + 1]);
            i.push([o, a])
        }
        return i
    }
    function Jr(t, e, i, n) {
        var o = e.__inheritedStyle || {},
        r = "text" === e.type;
        if (1 === t.nodeType && (ts(t, e), a(o, es(t)), !n)) for (var s in uT) if (uT.hasOwnProperty(s)) {
            var l = t.getAttribute(s);
            null != l && (o[uT[s]] = l)
        }
        var u = r ? "textFill": "fill",
        h = r ? "textStroke": "stroke";
        e.style = e.style || new Qw;
        var c = e.style;
        null != o.fill && c.set(u, $r(o.fill, i)),
        null != o.stroke && c.set(h, $r(o.stroke, i)),
        d(["lineWidth", "opacity", "fillOpacity", "strokeOpacity", "miterLimit", "fontSize"],
        function(t) {
            var e = "lineWidth" === t && r ? "textStrokeWidth": t;
            null != o[t] && c.set(e, parseFloat(o[t]))
        }),
        o.textBaseline && "auto" !== o.textBaseline || (o.textBaseline = "alphabetic"),
        "alphabetic" === o.textBaseline && (o.textBaseline = "bottom"),
        "start" === o.textAlign && (o.textAlign = "left"),
        "end" === o.textAlign && (o.textAlign = "right"),
        d(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign", "textBaseline"],
        function(t) {
            null != o[t] && c.set(t, o[t])
        }),
        o.lineDash && (e.style.lineDash = P(o.lineDash).split(rT)),
        c[h] && "none" !== c[h] && (e[h] = !0),
        e.__inheritedStyle = o
    }
    function $r(t, e) {
        var i = e && t && t.match(hT);
        return i ? e[P(i[1])] : t
    }
    function ts(t, e) {
        var i = t.getAttribute("transform");
        if (i) {
            var n = null,
            o = []; (i = i.replace(/,/g, " ")).replace(cT,
            function(t, e, i) {
                o.push(e, i)
            });
            for (var a = o.length - 1; a > 0; a -= 2) {
                var r = o[a],
                s = o[a - 1];
                switch (n = n || mt(), s) {
                case "translate":
                    r = P(r).split(rT),
                    _t(n, n, [parseFloat(r[0]), parseFloat(r[1] || 0)]);
                    break;
                case "scale":
                    r = P(r).split(rT),
                    bt(n, n, [parseFloat(r[0]), parseFloat(r[1] || r[0])]);
                    break;
                case "rotate":
                    r = P(r).split(rT),
                    wt(n, n, parseFloat(r[0]));
                    break;
                case "skew":
                    r = P(r).split(rT),
                    console.warn("Skew transform is not supported yet");
                    break;
                case "matrix":
                    r = P(r).split(rT),
                    n[0] = parseFloat(r[0]),
                    n[1] = parseFloat(r[1]),
                    n[2] = parseFloat(r[2]),
                    n[3] = parseFloat(r[3]),
                    n[4] = parseFloat(r[4]),
                    n[5] = parseFloat(r[5])
                }
            }
        }
        e.setLocalTransform(n)
    }
    function es(t) {
        var e = t.getAttribute("style"),
        i = {};
        if (!e) return i;
        var n = {};
        dT.lastIndex = 0;
        for (var o; null != (o = dT.exec(e));) n[o[1]] = o[2];
        for (var a in uT) uT.hasOwnProperty(a) && null != n[a] && (i[uT[a]] = n[a]);
        return i
    }
    function is(t, e, i) {
        var n = e / t.width,
        o = i / t.height,
        a = Math.min(n, o);
        return {
            scale: [a, a],
            position: [ - (t.x + t.width / 2) * a + e / 2, -(t.y + t.height / 2) * a + i / 2]
        }
    }
    function ns(t, e) {
        return (new Xr).parse(t, e)
    }
    function os(t) {
        return function(e, i, n) {
            e = e && e.toLowerCase(),
            aw.prototype[t].call(this, e, i, n)
        }
    }
    function as() {
        aw.call(this)
    }
    function rs(t, e, n) {
        function o(t, e) {
            return t.__prio - e.__prio
        }
        n = n || {},
        "string" == typeof e && (e = BT[e]),
        this.id,
        this.group,
        this._dom = t;
        var a = this._zr = Ii(t, {
            renderer: n.renderer || "canvas",
            devicePixelRatio: n.devicePixelRatio,
            width: n.width,
            height: n.height
        });
        this._throttledZrFlush = Cr(m(a.flush, a), 17),
        (e = i(e)) && MI(e, !0),
        this._theme = e,
        this._chartsViews = [],
        this._chartsMap = {},
        this._componentsViews = [],
        this._componentsMap = {},
        this._coordSysMgr = new Ba;
        var r = this._api = Ms(this);
        ve(RT, o),
        ve(OT, o),
        this._scheduler = new Pr(this, r, OT, RT),
        aw.call(this, this._ecEventProcessor = new Is),
        this._messageCenter = new as,
        this._initEvents(),
        this.resize = m(this.resize, this),
        this._pendingActions = [],
        a.animation.on("frame", this._onframe, this),
        ps(a, this),
        N(this)
    }
    function ss(t, e, i) {
        var n, o = this._model,
        a = this._coordSysMgr.getCoordinateSystems();
        e = Vi(o, e);
        for (var r = 0; r < a.length; r++) {
            var s = a[r];
            if (s[t] && null != (n = s[t](o, e, i))) return n
        }
    }
    function ls(t) {
        var e = t._model,
        i = t._scheduler;
        i.restorePipelines(e),
        i.prepareStageTasks(),
        gs(t, "component", e, i),
        gs(t, "chart", e, i),
        i.plan()
    }
    function us(t, e, i, n, o) {
        function a(n) {
            n && n.__alive && n[e] && n[e](n.__model, r, t._api, i)
        }
        var r = t._model;
        if (n) {
            var s = {};
            s[n + "Id"] = i[n + "Id"],
            s[n + "Index"] = i[n + "Index"],
            s[n + "Name"] = i[n + "Name"];
            var l = {
                mainType: n,
                query: s
            };
            o && (l.subType = o);
            var u = i.excludeSeriesId;
            null != u && (u = E(Di(u))),
            r && r.eachComponent(l,
            function(e) {
                u && null != u.get(e.id) || a(t["series" === n ? "_chartsMap": "_componentsMap"][e.__viewId])
            },
            t)
        } else vT(t._componentsViews.concat(t._chartsViews), a)
    }
    function hs(t, e) {
        var i = t._chartsMap,
        n = t._scheduler;
        e.eachSeries(function(t) {
            n.updateStreamModes(t, i[t.__viewId])
        })
    }
    function cs(t, e) {
        var i = t.type,
        n = t.escapeConnect,
        o = PT[i],
        s = o.actionInfo,
        l = (s.update || "update").split(":"),
        u = l.pop();
        l = null != l[0] && _T(l[0]),
        this[TT] = !0;
        var h = [t],
        c = !1;
        t.batch && (c = !0, h = f(t.batch,
        function(e) {
            return e = r(a({},
            e), t),
            e.batch = null,
            e
        }));
        var d, p = [],
        g = "highlight" === i || "downplay" === i;
        vT(h,
        function(t) {
            d = o.action(t, this._model, this._api),
            (d = d || a({},
            t)).type = s.event || d.type,
            p.push(d),
            g ? us(this, u, t, "series") : l && us(this, u, t, l.main, l.sub)
        },
        this),
        "none" === u || g || l || (this[AT] ? (ls(this), LT.update.call(this, t), this[AT] = !1) : LT[u].call(this, t)),
        d = c ? {
            type: s.event || i,
            escapeConnect: n,
            batch: p
        }: p[0],
        this[TT] = !1,
        !e && this._messageCenter.trigger(d.type, d)
    }
    function ds(t) {
        for (var e = this._pendingActions; e.length;) {
            var i = e.shift();
            cs.call(this, i, t)
        }
    }
    function fs(t) { ! t && this.trigger("updated")
    }
    function ps(t, e) {
        t.on("rendered",
        function() {
            e.trigger("rendered"),
            !t.animation.isFinished() || e[AT] || e._scheduler.unfinished || e._pendingActions.length || e.trigger("finished")
        })
    }
    function gs(t, e, i, n) {
        function o(t) {
            var e = "_ec_" + t.id + "_" + t.type,
            o = s[e];
            if (!o) {
                var h = _T(t.type); (o = new(a ? zI.getClass(h.main, h.sub) : Mr.getClass(h.sub))).init(i, u),
                s[e] = o,
                r.push(o),
                l.add(o.group)
            }
            t.__viewId = o.__id = e,
            o.__alive = !0,
            o.__model = t,
            o.group.__ecComponentInfo = {
                mainType: t.mainType,
                index: t.componentIndex
            },
            !a && n.prepareView(o, t, i, u)
        }
        for (var a = "component" === e,
        r = a ? t._componentsViews: t._chartsViews, s = a ? t._componentsMap: t._chartsMap, l = t._zr, u = t._api, h = 0; h < r.length; h++) r[h].__alive = !1;
        for (a ? i.eachComponent(function(t, e) {
            "series" !== t && o(e)
        }) : i.eachSeries(o), h = 0; h < r.length;) {
            var c = r[h];
            c.__alive ? h++:(!a && c.renderTask.dispose(), l.remove(c.group), c.dispose(i, u), r.splice(h, 1), delete s[c.__id], c.__id = c.group.__ecComponentInfo = null)
        }
    }
    function ms(t) {
        t.clearColorPalette(),
        t.eachSeries(function(t) {
            t.clearColorPalette()
        })
    }
    function vs(t, e, i, n) {
        ys(t, e, i, n),
        vT(t._chartsViews,
        function(t) {
            t.__alive = !1
        }),
        xs(t, e, i, n),
        vT(t._chartsViews,
        function(t) {
            t.__alive || t.remove(e, i)
        })
    }
    function ys(t, e, i, n, o) {
        vT(o || t._componentsViews,
        function(t) {
            var o = t.__model;
            t.render(o, e, i, n),
            Ss(o, t)
        })
    }
    function xs(t, e, i, n, o) {
        var a, r = t._scheduler;
        e.eachSeries(function(e) {
            var i = t._chartsMap[e.__viewId];
            i.__alive = !0;
            var s = i.renderTask;
            r.updatePayload(s, n),
            o && o.get(e.uid) && s.dirty(),
            a |= s.perform(r.getPerformArgs(s)),
            i.group.silent = !!e.get("silent"),
            Ss(e, i),
            bs(e, i)
        }),
        r.unfinished |= a,
        ws(t._zr, e),
        UI(t._zr.dom, e)
    }
    function _s(t, e) {
        vT(ET,
        function(i) {
            i(t, e)
        })
    }
    function ws(t, e) {
        var i = t.storage,
        n = 0;
        i.traverse(function(t) {
            t.isGroup || n++
        }),
        n > e.get("hoverLayerThreshold") && !R_.node && i.traverse(function(t) {
            t.isGroup || (t.useHoverLayer = !0)
        })
    }
    function bs(t, e) {
        var i = t.get("blendMode") || null;
        e.group.traverse(function(t) {
            t.isGroup || t.style.blend !== i && t.setStyle("blend", i),
            t.eachPendingDisplayable && t.eachPendingDisplayable(function(t) {
                t.setStyle("blend", i)
            })
        })
    }
    function Ss(t, e) {
        var i = t.get("z"),
        n = t.get("zlevel");
        e.group.traverse(function(t) {
            "group" !== t.type && (null != i && (t.z = i), null != n && (t.zlevel = n))
        })
    }
    function Ms(t) {
        var e = t._coordSysMgr;
        return a(new Ra(t), {
            getCoordinateSystems: m(e.getCoordinateSystems, e),
            getComponentByElement: function(e) {
                for (; e;) {
                    var i = e.__ecComponentInfo;
                    if (null != i) return t._model.getComponent(i.mainType, i.index);
                    e = e.parent
                }
            }
        })
    }
    function Is() {
        this.eventInfo
    }
    function Ts(t) {
        function e(t, e) {
            for (var n = 0; n < t.length; n++) t[n][i] = e
        }
        var i = "__connectUpdateStatus";
        vT(NT,
        function(n, o) {
            t._messageCenter.on(o,
            function(n) {
                if (GT[t.group] && 0 !== t[i]) {
                    if (n && n.escapeConnect) return;
                    var o = t.makeActionFromEvent(n),
                    a = [];
                    vT(FT,
                    function(e) {
                        e !== t && e.group === t.group && a.push(e)
                    }),
                    e(a, 0),
                    vT(a,
                    function(t) {
                        1 !== t[i] && t.dispatchAction(o)
                    }),
                    e(a, 2)
                }
            })
        })
    }
    function As(t) {
        GT[t] = !1
    }
    function Ds(t) {
        return FT[Wi(t, ZT)]
    }
    function Cs(t, e) {
        BT[t] = e
    }
    function Ls(t) {
        zT.push(t)
    }
    function ks(t, e) {
        Es(OT, t, e, bT)
    }
    function Ps(t, e, i) {
        "function" == typeof e && (i = e, e = "");
        var n = xT(t) ? t.type: [t, t = {
            event: e
        }][0];
        t.event = (t.event || n).toLowerCase(),
        e = t.event,
        mT(DT.test(n) && DT.test(e)),
        PT[n] || (PT[n] = {
            action: i,
            actionInfo: t
        }),
        NT[e] = n
    }
    function Ns(t, e) {
        Ba.register(t, e)
    }
    function Os(t, e) {
        Es(RT, t, e, ST, "layout")
    }
    function zs(t, e) {
        Es(RT, t, e, MT, "visual")
    }
    function Es(t, e, i, n, o) { (yT(e) || xT(e)) && (i = e, e = n);
        var a = Pr.wrapStageHandler(i, o);
        return a.__prio = e,
        a.__raw = i,
        t.push(a),
        a
    }
    function Rs(t, e) {
        VT[t] = e
    }
    function Bs(t) {
        return XM.extend(t)
    }
    function Vs(t) {
        return zI.extend(t)
    }
    function Fs(t) {
        return OI.extend(t)
    }
    function Gs(t) {
        return Mr.extend(t)
    }
    function Ws(t) {
        return t
    }
    function Hs(t, e, i, n, o) {
        this._old = t,
        this._new = e,
        this._oldKeyGetter = i || Ws,
        this._newKeyGetter = n || Ws,
        this.context = o
    }
    function Zs(t, e, i, n, o) {
        for (var a = 0; a < t.length; a++) {
            var r = "_ec_" + o[n](t[a], a),
            s = e[r];
            null == s ? (i.push(r), e[r] = a) : (s.length || (e[r] = s = [s]), s.push(a))
        }
    }
    function js(t) {
        var e = {},
        i = e.encode = {},
        n = E(),
        o = [],
        a = [];
        d(t.dimensions,
        function(e) {
            var r = t.getDimensionInfo(e),
            s = r.coordDim;
            if (s) {
                var l = i[s];
                i.hasOwnProperty(s) || (l = i[s] = []),
                l[r.coordDimIndex] = e,
                r.isExtraCoord || (n.set(s, 1), Us(r.type) && (o[0] = e)),
                r.defaultTooltip && a.push(e)
            }
            UT.each(function(t, e) {
                var n = i[e];
                i.hasOwnProperty(e) || (n = i[e] = []);
                var o = r.otherDims[e];
                null != o && !1 !== o && (n[o] = r.name)
            })
        });
        var r = [],
        s = {};
        n.each(function(t, e) {
            var n = i[e];
            s[e] = n[0],
            r = r.concat(n)
        }),
        e.dataDimsOnCoord = r,
        e.encodeFirstDimNotExtra = s;
        var l = i.label;
        l && l.length && (o = l.slice());
        var u = i.tooltip;
        return u && u.length ? a = u.slice() : a.length || (a = o.slice()),
        i.defaultedLabel = o,
        i.defaultedTooltip = a,
        e
    }
    function Ys(t) {
        return "category" === t ? "ordinal": "time" === t ? "time": "float"
    }
    function Us(t) {
        return ! ("ordinal" === t || "time" === t)
    }
    function Xs(t) {
        return t._rawCount > 65535 ? QT: JT
    }
    function qs(t) {
        var e = t.constructor;
        return e === Array ? t.slice() : new e(t)
    }
    function Ks(t, e) {
        d($T.concat(e.__wrappedMethods || []),
        function(i) {
            e.hasOwnProperty(i) && (t[i] = e[i])
        }),
        t.__wrappedMethods = e.__wrappedMethods,
        d(tA,
        function(n) {
            t[n] = i(e[n])
        }),
        t._calculationInfo = a(e._calculationInfo)
    }
    function Qs(t) {
        var e = t._invertedIndicesMap;
        d(e,
        function(i, n) {
            var o = t._dimensionInfos[n].ordinalMeta;
            if (o) {
                for (i = e[n] = new QT(o.categories.length), a = 0; a < i.length; a++) i[a] = NaN;
                for (var a = 0; a < t._count; a++) i[t.get(n, a)] = a
            }
        })
    }
    function Js(t, e, i) {
        var n;
        if (null != e) {
            var o = t._chunkSize,
            a = Math.floor(i / o),
            r = i % o,
            s = t.dimensions[e],
            l = t._storage[s][a];
            if (l) {
                n = l[r];
                var u = t._dimensionInfos[s].ordinalMeta;
                u && u.categories.length && (n = u.categories[n])
            }
        }
        return n
    }
    function $s(t) {
        return t
    }
    function tl(t) {
        return t < this._count && t >= 0 ? this._indices[t] : -1
    }
    function el(t, e) {
        var i = t._idList[e];
        return null == i && (i = Js(t, t._idDimIdx, e)),
        null == i && (i = qT + e),
        i
    }
    function il(t) {
        return y(t) || (t = [t]),
        t
    }
    function nl(t, e) {
        var i = t.dimensions,
        n = new eA(f(i, t.getDimensionInfo, t), t.hostModel);
        Ks(n, t);
        for (var o = n._storage = {},
        a = t._storage,
        r = 0; r < i.length; r++) {
            var s = i[r];
            a[s] && (l(e, s) >= 0 ? (o[s] = ol(a[s]), n._rawExtent[s] = al(), n._extent[s] = null) : o[s] = a[s])
        }
        return n
    }
    function ol(t) {
        for (var e = new Array(t.length), i = 0; i < t.length; i++) e[i] = qs(t[i]);
        return e
    }
    function al() {
        return [1 / 0, -1 / 0]
    }
    function rl(t, e, n) {
        function o(t, e, i) {
            null != UT.get(e) ? t.otherDims[e] = i: (t.coordDim = e, t.coordDimIndex = i, h.set(e, !0))
        }
        va.isInstance(e) || (e = va.seriesDataToSource(e)),
        n = n || {},
        t = (t || []).slice();
        for (var s = (n.dimsDef || []).slice(), l = E(n.encodeDef), u = E(), h = E(), c = [], f = sl(e, t, s, n.dimCount), p = 0; p < f; p++) {
            var g = s[p] = a({},
            w(s[p]) ? s[p] : {
                name: s[p]
            }),
            m = g.name,
            v = c[p] = {
                otherDims: {}
            };
            null != m && null == u.get(m) && (v.name = v.displayName = m, u.set(m, p)),
            null != g.type && (v.type = g.type),
            null != g.displayName && (v.displayName = g.displayName)
        }
        l.each(function(t, e) {
            if (1 === (t = Di(t).slice()).length && t[0] < 0) l.set(e, !1);
            else {
                var i = l.set(e, []);
                d(t,
                function(t, n) {
                    _(t) && (t = u.get(t)),
                    null != t && t < f && (i[n] = t, o(c[t], e, n))
                })
            }
        });
        var y = 0;
        d(t,
        function(t, e) {
            var n, t, a, s;
            if (_(t)) n = t,
            t = {};
            else {
                n = t.name;
                var u = t.ordinalMeta;
                t.ordinalMeta = null,
                (t = i(t)).ordinalMeta = u,
                a = t.dimsDef,
                s = t.otherDims,
                t.name = t.coordDim = t.coordDimIndex = t.dimsDef = t.otherDims = null
            }
            var h = l.get(n);
            if (!1 !== h) {
                if (! (h = Di(h)).length) for (var f = 0; f < (a && a.length || 1); f++) {
                    for (; y < c.length && null != c[y].coordDim;) y++;
                    y < c.length && h.push(y++)
                }
                d(h,
                function(e, i) {
                    var l = c[e];
                    if (o(r(l, t), n, i), null == l.name && a) {
                        var u = a[i]; ! w(u) && (u = {
                            name: u
                        }),
                        l.name = l.displayName = u.name,
                        l.defaultTooltip = u.defaultTooltip
                    }
                    s && r(l.otherDims, s)
                })
            }
        });
        var x = n.generateCoord,
        b = n.generateCoordCount,
        S = null != b;
        b = x ? b || 1 : 0;
        for (var M = x || "value",
        I = 0; I < f; I++) null == (v = c[I] = c[I] || {}).coordDim && (v.coordDim = ll(M, h, S), v.coordDimIndex = 0, (!x || b <= 0) && (v.isExtraCoord = !0), b--),
        null == v.name && (v.name = ll(v.coordDim, u)),
        null == v.type && Da(e, I, v.name) && (v.type = "ordinal");
        return c
    }
    function sl(t, e, i, n) {
        var o = Math.max(t.dimensionsDetectCount || 1, e.length, i.length, n || 0);
        return d(e,
        function(t) {
            var e = t.dimsDef;
            e && (o = Math.max(o, e.length))
        }),
        o
    }
    function ll(t, e, i) {
        if (i || null != e.get(t)) {
            for (var n = 0; null != e.get(t + n);) n++;
            t += n
        }
        return e.set(t, !0),
        t
    }
    function ul(t, e, i) {
        var n, o, a, r, s = (i = i || {}).byIndex,
        l = i.stackedCoordDimension,
        u = !(!t || !t.get("stack"));
        if (d(e,
        function(t, i) {
            _(t) && (e[i] = t = {
                name: t
            }),
            u && !t.isExtraCoord && (s || n || !t.ordinalMeta || (n = t), o || "ordinal" === t.type || "time" === t.type || l && l !== t.coordDim || (o = t))
        }), !o || s || n || (s = !0), o) {
            a = "__\0ecstackresult",
            r = "__\0ecstackedover",
            n && (n.createInvertedIndices = !0);
            var h = o.coordDim,
            c = o.type,
            f = 0;
            d(e,
            function(t) {
                t.coordDim === h && f++
            }),
            e.push({
                name: a,
                coordDim: h,
                coordDimIndex: f,
                type: c,
                isExtraCoord: !0,
                isCalculationCoord: !0
            }),
            f++,
            e.push({
                name: r,
                coordDim: r,
                coordDimIndex: f,
                type: c,
                isExtraCoord: !0,
                isCalculationCoord: !0
            })
        }
        return {
            stackedDimension: o && o.name,
            stackedByDimension: n && n.name,
            isStackedByIndex: s,
            stackedOverDimension: r,
            stackResultDimension: a
        }
    }
    function hl(t, e) {
        return !! e && e === t.getCalculationInfo("stackedDimension")
    }
    function cl(t, e) {
        return hl(t, e) ? t.getCalculationInfo("stackResultDimension") : e
    }
    function dl(t, e, i) {
        i = i || {},
        va.isInstance(t) || (t = va.seriesDataToSource(t));
        var n, o = e.get("coordinateSystem"),
        a = Ba.get(o),
        r = ga(e);
        r && (n = f(r.coordSysDims,
        function(t) {
            var e = {
                name: t
            },
            i = r.axisMap.get(t);
            if (i) {
                var n = i.get("type");
                e.type = Ys(n)
            }
            return e
        })),
        n || (n = a && (a.getDimensionsInfo ? a.getDimensionsInfo() : a.dimensions.slice()) || ["x", "y"]);
        var s, l, u = oA(t, {
            coordDimensions: n,
            generateCoord: i.generateCoord
        });
        r && d(u,
        function(t, e) {
            var i = t.coordDim,
            n = r.categoryAxisMap.get(i);
            n && (null == s && (s = e), t.ordinalMeta = n.getOrdinalMeta()),
            null != t.otherDims.itemName && (l = !0)
        }),
        l || null == s || (u[s].otherDims.itemName = 0);
        var h = ul(e, u),
        c = new eA(u, e);
        c.setCalculationInfo(h);
        var p = null != s && fl(t) ?
        function(t, e, i, n) {
            return n === s ? i: this.defaultDimValueGetter(t, e, i, n)
        }: null;
        return c.hasItemOption = !1,
        c.initData(t, null, p),
        c
    }
    function fl(t) {
        if (t.sourceFormat === tI) {
            var e = pl(t.data || []);
            return null != e && !y(Li(e))
        }
    }
    function pl(t) {
        for (var e = 0; e < t.length && null == t[e];) e++;
        return t[e]
    }
    function gl(t) {
        this._setting = t || {},
        this._extent = [1 / 0, -1 / 0],
        this._interval = 0,
        this.init && this.init.apply(this, arguments)
    }
    function ml(t) {
        this.categories = t.categories || [],
        this._needCollect = t.needCollect,
        this._deduplication = t.deduplication,
        this._map
    }
    function vl(t) {
        return t._map || (t._map = E(t.categories))
    }
    function yl(t) {
        return w(t) && null != t.value ? t.value: t + ""
    }
    function xl(t, e, i, n) {
        var o = {},
        a = t[1] - t[0],
        r = o.interval = Xo(a / e, !0);
        null != i && r < i && (r = o.interval = i),
        null != n && r > n && (r = o.interval = n);
        var s = o.intervalPrecision = _l(r);
        return bl(o.niceTickExtent = [lA(Math.ceil(t[0] / r) * r, s), lA(Math.floor(t[1] / r) * r, s)], t),
        o
    }
    function _l(t) {
        return Fo(t) + 2
    }
    function wl(t, e, i) {
        t[e] = Math.max(Math.min(t[e], i[1]), i[0])
    }
    function bl(t, e) { ! isFinite(t[0]) && (t[0] = e[0]),
        !isFinite(t[1]) && (t[1] = e[1]),
        wl(t, 0, e),
        wl(t, 1, e),
        t[0] > t[1] && (t[0] = t[1])
    }
    function Sl(t, e, i, n) {
        var o = [];
        if (!t) return o;
        e[0] < i[0] && o.push(e[0]);
        for (var a = i[0]; a <= i[1] && (o.push(a), (a = lA(a + t, n)) !== o[o.length - 1]);) if (o.length > 1e4) return [];
        return e[1] > (o.length ? o[o.length - 1] : i[1]) && o.push(e[1]),
        o
    }
    function Ml(t) {
        return t.get("stack") || cA + t.seriesIndex
    }
    function Il(t) {
        return t.dim + t.index
    }
    function Tl(t) {
        var e = [],
        i = t.axis;
        if ("category" === i.type) {
            for (var n = i.getBandWidth(), o = 0; o < t.count; o++) e.push(r({
                bandWidth: n,
                axisKey: "axis0",
                stackId: cA + o
            },
            t));
            for (var a = Cl(e), s = [], o = 0; o < t.count; o++) {
                var l = a.axis0[cA + o];
                l.offsetCenter = l.offset + l.width / 2,
                s.push(l)
            }
            return s
        }
    }
    function Al(t, e) {
        var i = [];
        return e.eachSeriesByType(t,
        function(t) {
            Pl(t) && !Nl(t) && i.push(t)
        }),
        i
    }
    function Dl(t) {
        var e = [];
        return d(t,
        function(t) {
            var i = t.getData(),
            n = t.coordinateSystem.getBaseAxis(),
            o = n.getExtent(),
            a = "category" === n.type ? n.getBandWidth() : Math.abs(o[1] - o[0]) / i.count(),
            r = Eo(t.get("barWidth"), a),
            s = Eo(t.get("barMaxWidth"), a),
            l = t.get("barGap"),
            u = t.get("barCategoryGap");
            e.push({
                bandWidth: a,
                barWidth: r,
                barMaxWidth: s,
                barGap: l,
                barCategoryGap: u,
                axisKey: Il(n),
                stackId: Ml(t)
            })
        }),
        Cl(e)
    }
    function Cl(t) {
        var e = {};
        d(t,
        function(t, i) {
            var n = t.axisKey,
            o = t.bandWidth,
            a = e[n] || {
                bandWidth: o,
                remainedWidth: o,
                autoWidthCount: 0,
                categoryGap: "20%",
                gap: "30%",
                stacks: {}
            },
            r = a.stacks;
            e[n] = a;
            var s = t.stackId;
            r[s] || a.autoWidthCount++,
            r[s] = r[s] || {
                width: 0,
                maxWidth: 0
            };
            var l = t.barWidth;
            l && !r[s].width && (r[s].width = l, l = Math.min(a.remainedWidth, l), a.remainedWidth -= l);
            var u = t.barMaxWidth;
            u && (r[s].maxWidth = u);
            var h = t.barGap;
            null != h && (a.gap = h);
            var c = t.barCategoryGap;
            null != c && (a.categoryGap = c)
        });
        var i = {};
        return d(e,
        function(t, e) {
            i[e] = {};
            var n = t.stacks,
            o = t.bandWidth,
            a = Eo(t.categoryGap, o),
            r = Eo(t.gap, 1),
            s = t.remainedWidth,
            l = t.autoWidthCount,
            u = (s - a) / (l + (l - 1) * r);
            u = Math.max(u, 0),
            d(n,
            function(t, e) {
                var i = t.maxWidth;
                i && i < u && (i = Math.min(i, s), t.width && (i = Math.min(i, t.width)), s -= i, t.width = i, l--)
            }),
            u = (s - a) / (l + (l - 1) * r),
            u = Math.max(u, 0);
            var h, c = 0;
            d(n,
            function(t, e) {
                t.width || (t.width = u),
                h = t,
                c += t.width * (1 + r)
            }),
            h && (c -= h.width * r);
            var f = -c / 2;
            d(n,
            function(t, n) {
                i[e][n] = i[e][n] || {
                    offset: f,
                    width: t.width
                },
                f += t.width * (1 + r)
            })
        }),
        i
    }
    function Ll(t, e, i) {
        if (t && e) {
            var n = t[Il(e)];
            return null != n && null != i && (n = n[Ml(i)]),
            n
        }
    }
    function kl(t, e) {
        var i = Al(t, e),
        n = Dl(i),
        o = {};
        d(i,
        function(t) {
            var e = t.getData(),
            i = t.coordinateSystem,
            a = i.getBaseAxis(),
            r = Ml(t),
            s = n[Il(a)][r],
            l = s.offset,
            u = s.width,
            h = i.getOtherAxis(a),
            c = t.get("barMinHeight") || 0;
            o[r] = o[r] || [],
            e.setLayout({
                offset: l,
                size: u
            });
            for (var d = e.mapDimension(h.dim), f = e.mapDimension(a.dim), p = hl(e, d), g = h.isHorizontal(), m = Ol(a, h, p), v = 0, y = e.count(); v < y; v++) {
                var x = e.get(d, v),
                _ = e.get(f, v);
                if (!isNaN(x)) {
                    var w = x >= 0 ? "p": "n",
                    b = m;
                    p && (o[r][_] || (o[r][_] = {
                        p: m,
                        n: m
                    }), b = o[r][_][w]);
                    var S, M, I, T;
                    if (g) S = b,
                    M = (A = i.dataToPoint([x, _]))[1] + l,
                    I = A[0] - m,
                    T = u,
                    Math.abs(I) < c && (I = (I < 0 ? -1 : 1) * c),
                    p && (o[r][_][w] += I);
                    else {
                        var A = i.dataToPoint([_, x]);
                        S = A[0] + l,
                        M = b,
                        I = u,
                        T = A[1] - m,
                        Math.abs(T) < c && (T = (T <= 0 ? -1 : 1) * c),
                        p && (o[r][_][w] += T)
                    }
                    e.setItemLayout(v, {
                        x: S,
                        y: M,
                        width: I,
                        height: T
                    })
                }
            }
        },
        this)
    }
    function Pl(t) {
        return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type
    }
    function Nl(t) {
        return t.pipelineContext && t.pipelineContext.large
    }
    function Ol(t, e, i) {
        var n, o, a = e.getGlobalExtent();
        a[0] > a[1] ? (n = a[1], o = a[0]) : (n = a[0], o = a[1]);
        var r = e.toGlobalCoord(e.dataToCoord(0));
        return r < n && (r = n),
        r > o && (r = o),
        r
    }
    function zl(t, e) {
        return SA(t, bA(e))
    }
    function El(t, e) {
        var i, n, o, a = t.type,
        r = e.getMin(),
        s = e.getMax(),
        l = null != r,
        u = null != s,
        h = t.getExtent();
        "ordinal" === a ? i = e.getCategories().length: (y(n = e.get("boundaryGap")) || (n = [n || 0, n || 0]), "boolean" == typeof n[0] && (n = [0, 0]), n[0] = Eo(n[0], 1), n[1] = Eo(n[1], 1), o = h[1] - h[0] || Math.abs(h[0])),
        null == r && (r = "ordinal" === a ? i ? 0 : NaN: h[0] - n[0] * o),
        null == s && (s = "ordinal" === a ? i ? i - 1 : NaN: h[1] + n[1] * o),
        "dataMin" === r ? r = h[0] : "function" == typeof r && (r = r({
            min: h[0],
            max: h[1]
        })),
        "dataMax" === s ? s = h[1] : "function" == typeof s && (s = s({
            min: h[0],
            max: h[1]
        })),
        (null == r || !isFinite(r)) && (r = NaN),
        (null == s || !isFinite(s)) && (s = NaN),
        t.setBlank(I(r) || I(s) || "ordinal" === a && !t.getOrdinalMeta().categories.length),
        e.getNeedCrossZero() && (r > 0 && s > 0 && !l && (r = 0), r < 0 && s < 0 && !u && (s = 0));
        var c = e.ecModel;
        if (c && "time" === a) {
            var f, p = Al("bar", c);
            if (d(p,
            function(t) {
                f |= t.getBaseAxis() === e.axis
            }), f) {
                var g = Dl(p),
                m = Rl(r, s, e, g);
                r = m.min,
                s = m.max
            }
        }
        return [r, s]
    }
    function Rl(t, e, i, n) {
        var o = i.axis.getExtent(),
        a = o[1] - o[0],
        r = Ll(n, i.axis);
        if (void 0 === r) return {
            min: t,
            max: e
        };
        var s = 1 / 0;
        d(r,
        function(t) {
            s = Math.min(t.offset, s)
        });
        var l = -1 / 0;
        d(r,
        function(t) {
            l = Math.max(t.offset + t.width, l)
        }),
        s = Math.abs(s),
        l = Math.abs(l);
        var u = s + l,
        h = e - t,
        c = h / (1 - (s + l) / a) - h;
        return e += c * (l / u),
        t -= c * (s / u),
        {
            min: t,
            max: e
        }
    }
    function Bl(t, e) {
        var i = El(t, e),
        n = null != e.getMin(),
        o = null != e.getMax(),
        a = e.get("splitNumber");
        "log" === t.type && (t.base = e.get("logBase"));
        var r = t.type;
        t.setExtent(i[0], i[1]),
        t.niceExtent({
            splitNumber: a,
            fixMin: n,
            fixMax: o,
            minInterval: "interval" === r || "time" === r ? e.get("minInterval") : null,
            maxInterval: "interval" === r || "time" === r ? e.get("maxInterval") : null
        });
        var s = e.get("interval");
        null != s && t.setInterval && t.setInterval(s)
    }
    function Vl(t, e) {
        if (e = e || t.get("type")) switch (e) {
        case "category":
            return new sA(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [1 / 0, -1 / 0]);
        case "value":
            return new hA;
        default:
            return (gl.getClass(e) || hA).create(t)
        }
    }
    function Fl(t) {
        var e = t.scale.getExtent(),
        i = e[0],
        n = e[1];
        return ! (i > 0 && n > 0 || i < 0 && n < 0)
    }
    function Gl(t) {
        var e = t.getLabelModel().get("formatter"),
        i = "category" === t.type ? t.scale.getExtent()[0] : null;
        return "string" == typeof e ? e = function(e) {
            return function(i) {
                return i = t.scale.getLabel(i),
                e.replace("{value}", null != i ? i: "")
            }
        } (e) : "function" == typeof e ?
        function(n, o) {
            return null != i && (o = n - i),
            e(Wl(t, n), o)
        }: function(e) {
            return t.scale.getLabel(e)
        }
    }
    function Wl(t, e) {
        return "category" === t.type ? t.scale.getLabel(e) : e
    }
    function Hl(t) {
        var e = t.model,
        i = t.scale;
        if (e.get("axisLabel.show") && !i.isBlank()) {
            var n, o, a = "category" === t.type,
            r = i.getExtent();
            o = a ? i.count() : (n = i.getTicks()).length;
            var s, l = t.getLabelModel(),
            u = Gl(t),
            h = 1;
            o > 40 && (h = Math.ceil(o / 40));
            for (var c = 0; c < o; c += h) {
                var d = u(n ? n[c] : r[0] + c),
                f = Zl(l.getTextRect(d), l.get("rotate") || 0);
                s ? s.union(f) : s = f
            }
            return s
        }
    }
    function Zl(t, e) {
        var i = e * Math.PI / 180,
        n = t.plain(),
        o = n.width,
        a = n.height,
        r = o * Math.cos(i) + a * Math.sin(i),
        s = o * Math.sin(i) + a * Math.cos(i);
        return new ue(n.x, n.y, r, s)
    }
    function jl(t, e) {
        if ("image" !== this.type) {
            var i = this.style,
            n = this.shape;
            n && "line" === n.symbolType ? i.stroke = t: this.__isEmptyBrush ? (i.stroke = t, i.fill = e || "#fff") : (i.fill && (i.fill = t), i.stroke && (i.stroke = t)),
            this.dirty(!1)
        }
    }
    function Yl(t, e, i, n, o, a, r) {
        var s = 0 === t.indexOf("empty");
        s && (t = t.substr(5, 1).toLowerCase() + t.substr(6));
        var l;
        return l = 0 === t.indexOf("image://") ? Hn(t.slice(8), new ue(e, i, n, o), r ? "center": "cover") : 0 === t.indexOf("path://") ? Wn(t.slice(7), {},
        new ue(e, i, n, o), r ? "center": "cover") : new EA({
            shape: {
                symbolType: t,
                x: e,
                y: i,
                width: n,
                height: o
            }
        }),
        l.__isEmptyBrush = s,
        l.setColor = jl,
        l.setColor(a),
        l
    }
    function Ul(t, e) {
        return Math.abs(t - e) < VA
    }
    function Xl(t, e, i) {
        var n = 0,
        o = t[0];
        if (!o) return ! 1;
        for (var a = 1; a < t.length; a++) {
            var r = t[a];
            n += bn(o[0], o[1], r[0], r[1], e, i),
            o = r
        }
        var s = t[0];
        return Ul(o[0], s[0]) && Ul(o[1], s[1]) || (n += bn(o[0], o[1], s[0], s[1], e, i)),
        0 !== n
    }
    function ql(t, e, i) {
        if (this.name = t, this.geometries = e, i) i = [i[0], i[1]];
        else {
            var n = this.getBoundingRect();
            i = [n.x + n.width / 2, n.y + n.height / 2]
        }
        this.center = i
    }
    function Kl(t) {
        if (!t.UTF8Encoding) return t;
        var e = t.UTF8Scale;
        null == e && (e = 1024);
        for (var i = t.features,
        n = 0; n < i.length; n++) for (var o = i[n].geometry, a = o.coordinates, r = o.encodeOffsets, s = 0; s < a.length; s++) {
            var l = a[s];
            if ("Polygon" === o.type) a[s] = Ql(l, r[s], e);
            else if ("MultiPolygon" === o.type) for (var u = 0; u < l.length; u++) {
                var h = l[u];
                l[u] = Ql(h, r[s][u], e)
            }
        }
        return t.UTF8Encoding = !1,
        t
    }
    function Ql(t, e, i) {
        for (var n = [], o = e[0], a = e[1], r = 0; r < t.length; r += 2) {
            var s = t.charCodeAt(r) - 64,
            l = t.charCodeAt(r + 1) - 64;
            s = s >> 1 ^ -(1 & s),
            l = l >> 1 ^ -(1 & l),
            o = s += o,
            a = l += a,
            n.push([s / i, l / i])
        }
        return n
    }
    function Jl(t) {
        return "category" === t.type ? tu(t) : nu(t)
    }
    function $l(t, e) {
        return "category" === t.type ? iu(t, e) : {
            ticks: t.scale.getTicks()
        }
    }
    function tu(t) {
        var e = t.getLabelModel(),
        i = eu(t, e);
        return ! e.get("show") || t.scale.isBlank() ? {
            labels: [],
            labelCategoryInterval: i.labelCategoryInterval
        }: i
    }
    function eu(t, e) {
        var i = ou(t, "labels"),
        n = du(e),
        o = au(i, n);
        if (o) return o;
        var a, r;
        return a = x(n) ? cu(t, n) : hu(t, r = "auto" === n ? su(t) : n),
        ru(i, n, {
            labels: a,
            labelCategoryInterval: r
        })
    }
    function iu(t, e) {
        var i = ou(t, "ticks"),
        n = du(e),
        o = au(i, n);
        if (o) return o;
        var a, r;
        if (e.get("show") && !t.scale.isBlank() || (a = []), x(n)) a = cu(t, n, !0);
        else if ("auto" === n) {
            var s = eu(t, t.getLabelModel());
            r = s.labelCategoryInterval,
            a = f(s.labels,
            function(t) {
                return t.tickValue
            })
        } else a = hu(t, r = n, !0);
        return ru(i, n, {
            ticks: a,
            tickCategoryInterval: r
        })
    }
    function nu(t) {
        var e = t.scale.getTicks(),
        i = Gl(t);
        return {
            labels: f(e,
            function(e, n) {
                return {
                    formattedLabel: i(e, n),
                    rawLabel: t.scale.getLabel(e),
                    tickValue: e
                }
            })
        }
    }
    function ou(t, e) {
        return GA(t)[e] || (GA(t)[e] = [])
    }
    function au(t, e) {
        for (var i = 0; i < t.length; i++) if (t[i].key === e) return t[i].value
    }
    function ru(t, e, i) {
        return t.push({
            key: e,
            value: i
        }),
        i
    }
    function su(t) {
        var e = GA(t).autoInterval;
        return null != e ? e: GA(t).autoInterval = t.calculateCategoryInterval()
    }
    function lu(t) {
        var e = uu(t),
        i = Gl(t),
        n = (e.axisRotate - e.labelRotate) / 180 * Math.PI,
        o = t.scale,
        a = o.getExtent(),
        r = o.count();
        if (a[1] - a[0] < 1) return 0;
        var s = 1;
        r > 40 && (s = Math.max(1, Math.floor(r / 40)));
        for (var l = a[0], u = t.dataToCoord(l + 1) - t.dataToCoord(l), h = Math.abs(u * Math.cos(n)), c = Math.abs(u * Math.sin(n)), d = 0, f = 0; l <= a[1]; l += s) {
            var p = 0,
            g = 0,
            m = De(i(l), e.font, "center", "top");
            p = 1.3 * m.width,
            g = 1.3 * m.height,
            d = Math.max(d, p, 7),
            f = Math.max(f, g, 7)
        }
        var v = d / h,
        y = f / c;
        isNaN(v) && (v = 1 / 0),
        isNaN(y) && (y = 1 / 0);
        var x = Math.max(0, Math.floor(Math.min(v, y))),
        _ = GA(t.model),
        w = _.lastAutoInterval,
        b = _.lastTickCount;
        return null != w && null != b && Math.abs(w - x) <= 1 && Math.abs(b - r) <= 1 && w > x ? x = w: (_.lastTickCount = r, _.lastAutoInterval = x),
        x
    }
    function uu(t) {
        var e = t.getLabelModel();
        return {
            axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0,
            labelRotate: e.get("rotate") || 0,
            font: e.getFont()
        }
    }
    function hu(t, e, i) {
        function n(t) {
            l.push(i ? t: {
                formattedLabel: o(t),
                rawLabel: a.getLabel(t),
                tickValue: t
            })
        }
        var o = Gl(t),
        a = t.scale,
        r = a.getExtent(),
        s = t.getLabelModel(),
        l = [],
        u = Math.max((e || 0) + 1, 1),
        h = r[0],
        c = a.count();
        0 !== h && u > 1 && c / u > 2 && (h = Math.round(Math.ceil(h / u) * u));
        var d = {
            min: s.get("showMinLabel"),
            max: s.get("showMaxLabel")
        };
        d.min && h !== r[0] && n(r[0]);
        for (var f = h; f <= r[1]; f += u) n(f);
        return d.max && f !== r[1] && n(r[1]),
        l
    }
    function cu(t, e, i) {
        var n = t.scale,
        o = Gl(t),
        a = [];
        return d(n.getTicks(),
        function(t) {
            var r = n.getLabel(t);
            e(t, r) && a.push(i ? t: {
                formattedLabel: o(t),
                rawLabel: r,
                tickValue: t
            })
        }),
        a
    }
    function du(t) {
        var e = t.get("interval");
        return null == e ? "auto": e
    }
    function fu(t, e) {
        var i = (t[1] - t[0]) / e / 2;
        t[0] += i,
        t[1] -= i
    }
    function pu(t, e, i, n, o) {
        function a(t, e) {
            return h ? t > e: t < e
        }
        var r = e.length;
        if (t.onBand && !n && r) {
            var s, l = t.getExtent();
            if (1 === r) e[0].coord = l[0],
            s = e[1] = {
                coord: l[0]
            };
            else {
                var u = e[1].coord - e[0].coord;
                d(e,
                function(t) {
                    t.coord -= u / 2;
                    var e = e || 0;
                    e % 2 > 0 && (t.coord -= u / (2 * (e + 1)))
                }),
                s = {
                    coord: e[r - 1].coord + u
                },
                e.push(s)
            }
            var h = l[0] > l[1];
            a(e[0].coord, l[0]) && (o ? e[0].coord = l[0] : e.shift()),
            o && a(l[0], e[0].coord) && e.unshift({
                coord: l[0]
            }),
            a(l[1], s.coord) && (o ? s.coord = l[1] : e.pop()),
            o && a(s.coord, l[1]) && e.push({
                coord: l[1]
            })
        }
    }
    function gu(t, e) {
        var i = t.mapDimension("defaultedLabel", !0),
        n = i.length;
        if (1 === n) return hr(t, e, i[0]);
        if (n) {
            for (var o = [], a = 0; a < i.length; a++) {
                var r = hr(t, e, i[a]);
                o.push(r)
            }
            return o.join(" ")
        }
    }
    function mu(t, e, i) {
        Zw.call(this),
        this.updateData(t, e, i)
    }
    function vu(t) {
        return [t[0] / 2, t[1] / 2]
    }
    function yu(t, e) {
        this.parent.drift(t, e)
    }
    function xu() { ! oo(this) && wu.call(this)
    }
    function _u() { ! oo(this) && bu.call(this)
    }
    function wu() {
        if (!this.incremental && !this.useHoverLayer) {
            var t = this.__symbolOriginalScale,
            e = t[1] / t[0];
            this.animateTo({
                scale: [Math.max(1.1 * t[0], t[0] + 3), Math.max(1.1 * t[1], t[1] + 3 * e)]
            },
            400, "elasticOut")
        }
    }
    function bu() {
        this.incremental || this.useHoverLayer || this.animateTo({
            scale: this.__symbolOriginalScale
        },
        400, "elasticOut")
    }
    function Su(t) {
        this.group = new Zw,
        this._symbolCtor = t || mu
    }
    function Mu(t, e, i, n) {
        return e && !isNaN(e[0]) && !isNaN(e[1]) && !(n.isIgnore && n.isIgnore(i)) && !(n.clipShape && !n.clipShape.contain(e[0], e[1])) && "none" !== t.getItemVisual(i, "symbol")
    }
    function Iu(t) {
        return null == t || w(t) || (t = {
            isIgnore: t
        }),
        t || {}
    }
    function Tu(t) {
        var e = t.hostModel;
        return {
            itemStyle: e.getModel("itemStyle").getItemStyle(["color"]),
            hoverItemStyle: e.getModel("emphasis.itemStyle").getItemStyle(),
            symbolRotate: e.get("symbolRotate"),
            symbolOffset: e.get("symbolOffset"),
            hoverAnimation: e.get("hoverAnimation"),
            labelModel: e.getModel("label"),
            hoverLabelModel: e.getModel("emphasis.label"),
            cursorStyle: e.get("cursor")
        }
    }
    function Au(t, e, i) {
        var n, o = t.getBaseAxis(),
        a = t.getOtherAxis(o),
        r = Du(a, i),
        s = o.dim,
        l = a.dim,
        u = e.mapDimension(l),
        h = e.mapDimension(s),
        c = "x" === l || "radius" === l ? 1 : 0,
        d = f(t.dimensions,
        function(t) {
            return e.mapDimension(t)
        }),
        p = e.getCalculationInfo("stackResultDimension");
        return (n |= hl(e, d[0])) && (d[0] = p),
        (n |= hl(e, d[1])) && (d[1] = p),
        {
            dataDimsForPoint: d,
            valueStart: r,
            valueAxisDim: l,
            baseAxisDim: s,
            stacked: !!n,
            valueDim: u,
            baseDim: h,
            baseDataOffset: c,
            stackedOverDimension: e.getCalculationInfo("stackedOverDimension")
        }
    }
    function Du(t, e) {
        var i = 0,
        n = t.scale.getExtent();
        return "start" === e ? i = n[0] : "end" === e ? i = n[1] : n[0] > 0 ? i = n[0] : n[1] < 0 && (i = n[1]),
        i
    }
    function Cu(t, e, i, n) {
        var o = NaN;
        t.stacked && (o = i.get(i.getCalculationInfo("stackedOverDimension"), n)),
        isNaN(o) && (o = t.valueStart);
        var a = t.baseDataOffset,
        r = [];
        return r[a] = i.get(t.baseDim, n),
        r[1 - a] = o,
        e.dataToPoint(r)
    }
    function Lu(t, e) {
        var i = [];
        return e.diff(t).add(function(t) {
            i.push({
                cmd: "+",
                idx: t
            })
        }).update(function(t, e) {
            i.push({
                cmd: "=",
                idx: e,
                idx1: t
            })
        }).remove(function(t) {
            i.push({
                cmd: "-",
                idx: t
            })
        }).execute(),
        i
    }
    function ku(t) {
        return isNaN(t[0]) || isNaN(t[1])
    }
    function Pu(t, e, i, n, o, a, r, s, l, u, h) {
        return "none" !== u && u ? Nu.apply(this, arguments) : Ou.apply(this, arguments)
    }
    function Nu(t, e, i, n, o, a, r, s, l, u, h) {
        for (var c = 0,
        d = i,
        f = 0; f < n; f++) {
            var p = e[d];
            if (d >= o || d < 0) break;
            if (ku(p)) {
                if (h) {
                    d += a;
                    continue
                }
                break
            }
            if (d === i) t[a > 0 ? "moveTo": "lineTo"](p[0], p[1]);
            else if (l > 0) {
                var g = e[c],
                m = "y" === u ? 1 : 0,
                v = (p[m] - g[m]) * l;
                oD(rD, g),
                rD[m] = g[m] + v,
                oD(sD, p),
                sD[m] = p[m] - v,
                t.bezierCurveTo(rD[0], rD[1], sD[0], sD[1], p[0], p[1])
            } else t.lineTo(p[0], p[1]);
            c = d,
            d += a
        }
        return f
    }
    function Ou(t, e, i, n, o, a, r, s, l, u, h) {
        for (var c = 0,
        d = i,
        f = 0; f < n; f++) {
            var p = e[d];
            if (d >= o || d < 0) break;
            if (ku(p)) {
                if (h) {
                    d += a;
                    continue
                }
                break
            }
            if (d === i) t[a > 0 ? "moveTo": "lineTo"](p[0], p[1]),
            oD(rD, p);
            else if (l > 0) {
                var g = d + a,
                m = e[g];
                if (h) for (; m && ku(e[g]);) m = e[g += a];
                var v = .5,
                y = e[c];
                if (! (m = e[g]) || ku(m)) oD(sD, p);
                else {
                    ku(m) && !h && (m = p),
                    j(aD, m, y);
                    var x, _;
                    if ("x" === u || "y" === u) {
                        var w = "x" === u ? 0 : 1;
                        x = Math.abs(p[w] - y[w]),
                        _ = Math.abs(p[w] - m[w])
                    } else x = ew(p, y),
                    _ = ew(p, m);
                    nD(sD, p, aD, -l * (1 - (v = _ / (_ + x))))
                }
                eD(rD, rD, s),
                iD(rD, rD, r),
                eD(sD, sD, s),
                iD(sD, sD, r),
                t.bezierCurveTo(rD[0], rD[1], sD[0], sD[1], p[0], p[1]),
                nD(rD, p, aD, l * v)
            } else t.lineTo(p[0], p[1]);
            c = d,
            d += a
        }
        return f
    }
    function zu(t, e) {
        var i = [1 / 0, 1 / 0],
        n = [ - 1 / 0, -1 / 0];
        if (e) for (var o = 0; o < t.length; o++) {
            var a = t[o];
            a[0] < i[0] && (i[0] = a[0]),
            a[1] < i[1] && (i[1] = a[1]),
            a[0] > n[0] && (n[0] = a[0]),
            a[1] > n[1] && (n[1] = a[1])
        }
        return {
            min: e ? i: n,
            max: e ? n: i
        }
    }
    function Eu(t, e) {
        if (t.length === e.length) {
            for (var i = 0; i < t.length; i++) {
                var n = t[i],
                o = e[i];
                if (n[0] !== o[0] || n[1] !== o[1]) return
            }
            return ! 0
        }
    }
    function Ru(t) {
        return "number" == typeof t ? t: t ? .5 : 0
    }
    function Bu(t) {
        var e = t.getGlobalExtent();
        if (t.onBand) {
            var i = t.getBandWidth() / 2 - 1,
            n = e[1] > e[0] ? 1 : -1;
            e[0] += n * i,
            e[1] -= n * i
        }
        return e
    }
    function Vu(t, e, i) {
        if (!i.valueDim) return [];
        for (var n = [], o = 0, a = e.count(); o < a; o++) n.push(Cu(i, t, e, o));
        return n
    }
    function Fu(t, e, i, n) {
        var o = Bu(t.getAxis("x")),
        a = Bu(t.getAxis("y")),
        r = t.getBaseAxis().isHorizontal(),
        s = Math.min(o[0], o[1]),
        l = Math.min(a[0], a[1]),
        u = Math.max(o[0], o[1]) - s,
        h = Math.max(a[0], a[1]) - l;
        if (i) s -= .5,
        u += .5,
        l -= .5,
        h += .5;
        else {
            var c = n.get("lineStyle.width") || 2,
            d = n.get("clipOverflow") ? c / 2 : Math.max(u, h);
            r ? (l -= d, h += 2 * d) : (s -= d, u += 2 * d)
        }
        var f = new aM({
            shape: {
                x: s,
                y: l,
                width: u,
                height: h
            }
        });
        return e && (f.shape[r ? "width": "height"] = 0, So(f, {
            shape: {
                width: u,
                height: h
            }
        },
        n)),
        f
    }
    function Gu(t, e, i, n) {
        var o = t.getAngleAxis(),
        a = t.getRadiusAxis().getExtent().slice();
        a[0] > a[1] && a.reverse();
        var r = o.getExtent(),
        s = Math.PI / 180;
        i && (a[0] -= .5, a[1] += .5);
        var l = new $S({
            shape: {
                cx: Ro(t.cx, 1),
                cy: Ro(t.cy, 1),
                r0: Ro(a[0], 1),
                r: Ro(a[1], 1),
                startAngle: -r[0] * s,
                endAngle: -r[1] * s,
                clockwise: o.inverse
            }
        });
        return e && (l.shape.endAngle = -r[0] * s, So(l, {
            shape: {
                endAngle: -r[1] * s
            }
        },
        n)),
        l
    }
    function Wu(t, e, i, n) {
        return "polar" === t.type ? Gu(t, e, i, n) : Fu(t, e, i, n)
    }
    function Hu(t, e, i) {
        for (var n = e.getBaseAxis(), o = "x" === n.dim || "radius" === n.dim ? 0 : 1, a = [], r = 0; r < t.length - 1; r++) {
            var s = t[r + 1],
            l = t[r];
            a.push(l);
            var u = [];
            switch (i) {
            case "end":
                u[o] = s[o],
                u[1 - o] = l[1 - o],
                a.push(u);
                break;
            case "middle":
                var h = (l[o] + s[o]) / 2,
                c = [];
                u[o] = c[o] = h,
                u[1 - o] = l[1 - o],
                c[1 - o] = s[1 - o],
                a.push(u),
                a.push(c);
                break;
            default:
                u[o] = l[o],
                u[1 - o] = s[1 - o],
                a.push(u)
            }
        }
        return t[r] && a.push(t[r]),
        a
    }
    function Zu(t, e) {
        var i = t.getVisual("visualMeta");
        if (i && i.length && t.count() && "cartesian2d" === e.type) {
            for (var n, o, a = i.length - 1; a >= 0; a--) {
                var r = i[a].dimension,
                s = t.dimensions[r],
                l = t.getDimensionInfo(s);
                if ("x" === (n = l && l.coordDim) || "y" === n) {
                    o = i[a];
                    break
                }
            }
            if (o) {
                var u = e.getAxis(n),
                h = f(o.stops,
                function(t) {
                    return {
                        coord: u.toGlobalCoord(u.dataToCoord(t.value)),
                        color: t.color
                    }
                }),
                c = h.length,
                p = o.outerColors.slice();
                c && h[0].coord > h[c - 1].coord && (h.reverse(), p.reverse());
                var g = h[0].coord - 10,
                m = h[c - 1].coord + 10,
                v = m - g;
                if (v < .001) return "transparent";
                d(h,
                function(t) {
                    t.offset = (t.coord - g) / v
                }),
                h.push({
                    offset: c ? h[c - 1].offset: .5,
                    color: p[1] || "transparent"
                }),
                h.unshift({
                    offset: c ? h[0].offset: .5,
                    color: p[0] || "transparent"
                });
                var y = new dM(0, 0, 0, 0, h, !0);
                return y[n] = g,
                y[n + "2"] = m,
                y
            }
        }
    }
    function ju(t, e, i) {
        var n = t.get("showAllSymbol"),
        o = "auto" === n;
        if (!n || o) {
            var a = i.getAxesByScale("ordinal")[0];
            if (a && (!o || !Yu(a, e))) {
                var r = e.mapDimension(a.dim),
                s = {};
                return d(a.getViewLabels(),
                function(t) {
                    s[t.tickValue] = 1
                }),
                function(t) {
                    return ! s.hasOwnProperty(e.get(r, t))
                }
            }
        }
    }
    function Yu(t, e) {
        var i = t.getExtent(),
        n = Math.abs(i[1] - i[0]) / t.scale.count();
        isNaN(n) && (n = 0);
        for (var o = e.count(), a = Math.max(1, Math.round(o / 5)), r = 0; r < o; r += a) if (1.5 * mu.getSymbolSize(e, r)[t.isHorizontal() ? 1 : 0] > n) return ! 1;
        return ! 0
    }
    function Uu(t) {
        return this._axes[t]
    }
    function Xu(t) {
        pD.call(this, t)
    }
    function qu(t, e) {
        return e.type || (e.data ? "category": "value")
    }
    function Ku(t, e, i) {
        return t.getCoordSysModel() === e
    }
    function Qu(t, e, i) {
        this._coordsMap = {},
        this._coordsList = [],
        this._axesMap = {},
        this._axesList = [],
        this._initCartesian(t, e, i),
        this.model = t
    }
    function Ju(t, e, i, n) {
        function o(t) {
            return t.dim + "_" + t.index
        }
        i.getAxesOnZeroOf = function() {
            return a ? [a] : []
        };
        var a, r = t[e],
        s = i.model,
        l = s.get("axisLine.onZero"),
        u = s.get("axisLine.onZeroAxisIndex");
        if (l) {
            if (null != u) $u(r[u]) && (a = r[u]);
            else for (var h in r) if (r.hasOwnProperty(h) && $u(r[h]) && !n[o(r[h])]) {
                a = r[h];
                break
            }
            a && (n[o(a)] = !0)
        }
    }
    function $u(t) {
        return t && "category" !== t.type && "time" !== t.type && Fl(t)
    }
    function th(t, e) {
        var i = t.getExtent(),
        n = i[0] + i[1];
        t.toGlobalCoord = "x" === t.dim ?
        function(t) {
            return t + e
        }: function(t) {
            return n - t + e
        },
        t.toLocalCoord = "x" === t.dim ?
        function(t) {
            return t - e
        }: function(t) {
            return n - t + e
        }
    }
    function eh(t, e) {
        return f(SD,
        function(e) {
            return t.getReferringComponents(e)[0]
        })
    }
    function ih(t) {
        return "cartesian2d" === t.get("coordinateSystem")
    }
    function nh(t) {
        var e = {
            componentType: t.mainType,
            componentIndex: t.componentIndex
        };
        return e[t.mainType + "Index"] = t.componentIndex,
        e
    }
    function oh(t, e, i, n) {
        var o, a, r = Ho(i - t.rotation),
        s = n[0] > n[1],
        l = "start" === e && !s || "start" !== e && s;
        return Zo(r - MD / 2) ? (a = l ? "bottom": "top", o = "center") : Zo(r - 1.5 * MD) ? (a = l ? "top": "bottom", o = "center") : (a = "middle", o = r < 1.5 * MD && r > MD / 2 ? l ? "left": "right": l ? "right": "left"),
        {
            rotation: r,
            textAlign: o,
            textVerticalAlign: a
        }
    }
    function ah(t) {
        var e = t.get("tooltip");
        return t.get("silent") || !(t.get("triggerEvent") || e && e.show)
    }
    function rh(t, e, i) {
        var n = t.get("axisLabel.showMinLabel"),
        o = t.get("axisLabel.showMaxLabel");
        e = e || [],
        i = i || [];
        var a = e[0],
        r = e[1],
        s = e[e.length - 1],
        l = e[e.length - 2],
        u = i[0],
        h = i[1],
        c = i[i.length - 1],
        d = i[i.length - 2]; ! 1 === n ? (sh(a), sh(u)) : lh(a, r) && (n ? (sh(r), sh(h)) : (sh(a), sh(u))),
        !1 === o ? (sh(s), sh(c)) : lh(l, s) && (o ? (sh(l), sh(d)) : (sh(s), sh(c)))
    }
    function sh(t) {
        t && (t.ignore = !0)
    }
    function lh(t, e, i) {
        var n = t && t.getBoundingRect().clone(),
        o = e && e.getBoundingRect().clone();
        if (n && o) {
            var a = vt([]);
            return wt(a, a, -t.rotation),
            n.applyTransform(xt([], a, t.getLocalTransform())),
            o.applyTransform(xt([], a, e.getLocalTransform())),
            n.intersect(o)
        }
    }
    function uh(t) {
        return "middle" === t || "center" === t
    }
    function hh(t, e, i) {
        var n = e.axis;
        if (e.get("axisTick.show") && !n.scale.isBlank()) {
            for (var o = e.getModel("axisTick"), a = o.getModel("lineStyle"), s = o.get("length"), l = n.getTicksCoords(), u = [], h = [], c = t._transform, d = [], f = 0; f < l.length; f++) {
                var p = l[f].coord;
                u[0] = p,
                u[1] = 0,
                h[0] = p,
                h[1] = i.tickDirection * s,
                c && ($(u, u, c), $(h, h, c));
                var g = new rM(Yn({
                    anid: "tick_" + l[f].tickValue,
                    shape: {
                        x1: u[0],
                        y1: u[1],
                        x2: h[0],
                        y2: h[1]
                    },
                    style: r(a.getLineStyle(), {
                        stroke: e.get("axisLine.lineStyle.color")
                    }),
                    z2: 2,
                    silent: !0
                }));
                t.group.add(g),
                d.push(g)
            }
            return d
        }
    }
    function ch(t, e, i) {
        var n = e.axis;
        if (T(i.axisLabelShow, e.get("axisLabel.show")) && !n.scale.isBlank()) {
            var o = e.getModel("axisLabel"),
            a = o.get("margin"),
            r = n.getViewLabels(),
            s = (T(i.labelRotate, o.get("rotate")) || 0) * MD / 180,
            l = AD(i.rotation, s, i.labelDirection),
            u = e.getCategories(!0),
            h = [],
            c = ah(e),
            f = e.get("triggerEvent");
            return d(r,
            function(r, s) {
                var d = r.tickValue,
                p = r.formattedLabel,
                g = r.rawLabel,
                m = o;
                u && u[d] && u[d].textStyle && (m = new Lo(u[d].textStyle, o, e.ecModel));
                var v = m.getTextColor() || e.get("axisLine.lineStyle.color"),
                y = [n.dataToCoord(d), i.labelOffset + i.labelDirection * a],
                x = new qS({
                    anid: "label_" + d,
                    position: y,
                    rotation: l.rotation,
                    silent: c,
                    z2: 10
                });
                fo(x.style, m, {
                    text: p,
                    textAlign: m.getShallow("align", !0) || l.textAlign,
                    textVerticalAlign: m.getShallow("verticalAlign", !0) || m.getShallow("baseline", !0) || l.textVerticalAlign,
                    textFill: "function" == typeof v ? v("category" === n.type ? g: "value" === n.type ? d + "": d, s) : v
                }),
                f && (x.eventData = nh(e), x.eventData.targetType = "axisLabel", x.eventData.value = g),
                t._dumbGroup.add(x),
                x.updateTransform(),
                h.push(x),
                t.group.add(x),
                x.decomposeTransform()
            }),
            h
        }
    }
    function dh(t, e) {
        var i = {
            axesInfo: {},
            seriesInvolved: !1,
            coordSysAxesInfo: {},
            coordSysMap: {}
        };
        return fh(i, t, e),
        i.seriesInvolved && gh(i, t),
        i
    }
    function fh(t, e, i) {
        var n = e.getComponent("tooltip"),
        o = e.getComponent("axisPointer"),
        a = o.get("link", !0) || [],
        r = [];
        DD(i.getCoordinateSystems(),
        function(i) {
            function s(n, s, l) {
                var c = l.model.getModel("axisPointer", o),
                d = c.get("show");
                if (d && ("auto" !== d || n || wh(c))) {
                    null == s && (s = c.get("triggerTooltip"));
                    var f = (c = n ? ph(l, h, o, e, n, s) : c).get("snap"),
                    p = bh(l.model),
                    g = s || f || "category" === l.type,
                    m = t.axesInfo[p] = {
                        key: p,
                        axis: l,
                        coordSys: i,
                        axisPointerModel: c,
                        triggerTooltip: s,
                        involveSeries: g,
                        snap: f,
                        useHandle: wh(c),
                        seriesModels: []
                    };
                    u[p] = m,
                    t.seriesInvolved |= g;
                    var v = mh(a, l);
                    if (null != v) {
                        var y = r[v] || (r[v] = {
                            axesInfo: {}
                        });
                        y.axesInfo[p] = m,
                        y.mapper = a[v].mapper,
                        m.linkGroup = y
                    }
                }
            }
            if (i.axisPointerEnabled) {
                var l = bh(i.model),
                u = t.coordSysAxesInfo[l] = {};
                t.coordSysMap[l] = i;
                var h = i.model.getModel("tooltip", n);
                if (DD(i.getAxes(), CD(s, !1, null)), i.getTooltipAxes && n && h.get("show")) {
                    var c = "axis" === h.get("trigger"),
                    d = "cross" === h.get("axisPointer.type"),
                    f = i.getTooltipAxes(h.get("axisPointer.axis")); (c || d) && DD(f.baseAxes, CD(s, !d || "cross", c)),
                    d && DD(f.otherAxes, CD(s, "cross", !1))
                }
            }
        })
    }
    function ph(t, e, n, o, a, s) {
        var l = e.getModel("axisPointer"),
        u = {};
        DD(["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z"],
        function(t) {
            u[t] = i(l.get(t))
        }),
        u.snap = "category" !== t.type && !!s,
        "cross" === l.get("type") && (u.type = "line");
        var h = u.label || (u.label = {});
        if (null == h.show && (h.show = !1), "cross" === a) {
            var c = l.get("label.show");
            if (h.show = null == c || c, !s) {
                var d = u.lineStyle = l.get("crossStyle");
                d && r(h, d.textStyle)
            }
        }
        return t.model.getModel("axisPointer", new Lo(u, n, o))
    }
    function gh(t, e) {
        e.eachSeries(function(e) {
            var i = e.coordinateSystem,
            n = e.get("tooltip.trigger", !0),
            o = e.get("tooltip.show", !0);
            i && "none" !== n && !1 !== n && "item" !== n && !1 !== o && !1 !== e.get("axisPointer.show", !0) && DD(t.coordSysAxesInfo[bh(i.model)],
            function(t) {
                var n = t.axis;
                i.getAxis(n.dim) === n && (t.seriesModels.push(e), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount += e.getData().count())
            })
        },
        this)
    }
    function mh(t, e) {
        for (var i = e.model,
        n = e.dim,
        o = 0; o < t.length; o++) {
            var a = t[o] || {};
            if (vh(a[n + "AxisId"], i.id) || vh(a[n + "AxisIndex"], i.componentIndex) || vh(a[n + "AxisName"], i.name)) return o
        }
    }
    function vh(t, e) {
        return "all" === t || y(t) && l(t, e) >= 0 || t === e
    }
    function yh(t) {
        var e = xh(t);
        if (e) {
            var i = e.axisPointerModel,
            n = e.axis.scale,
            o = i.option,
            a = i.get("status"),
            r = i.get("value");
            null != r && (r = n.parse(r));
            var s = wh(i);
            null == a && (o.status = s ? "show": "hide");
            var l = n.getExtent().slice();
            l[0] > l[1] && l.reverse(),
            (null == r || r > l[1]) && (r = l[1]),
            r < l[0] && (r = l[0]),
            o.value = r,
            s && (o.status = e.axis.scale.isBlank() ? "hide": "show")
        }
    }
    function xh(t) {
        var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
        return e && e.axesInfo[bh(t)]
    }
    function _h(t) {
        var e = xh(t);
        return e && e.axisPointerModel
    }
    function wh(t) {
        return !! t.get("handle.show")
    }
    function bh(t) {
        return t.type + "||" + t.id
    }
    function Sh(t, e, i, n, o, a) {
        var r = LD.getAxisPointerClass(t.axisPointerClass);
        if (r) {
            var s = _h(e);
            s ? (t._axisPointer || (t._axisPointer = new r)).render(e, s, n, a) : Mh(t, n)
        }
    }
    function Mh(t, e, i) {
        var n = t._axisPointer;
        n && n.dispose(e, i),
        t._axisPointer = null
    }
    function Ih(t, e, i) {
        i = i || {};
        var n = t.coordinateSystem,
        o = e.axis,
        a = {},
        r = o.getAxesOnZeroOf()[0],
        s = o.position,
        l = r ? "onZero": s,
        u = o.dim,
        h = n.getRect(),
        c = [h.x, h.x + h.width, h.y, h.y + h.height],
        d = {
            left: 0,
            right: 1,
            top: 0,
            bottom: 1,
            onZero: 2
        },
        f = e.get("offset") || 0,
        p = "x" === u ? [c[2] - f, c[3] + f] : [c[0] - f, c[1] + f];
        if (r) {
            var g = r.toGlobalCoord(r.dataToCoord(0));
            p[d.onZero] = Math.max(Math.min(g, p[1]), p[0])
        }
        a.position = ["y" === u ? p[d[l]] : c[0], "x" === u ? p[d[l]] : c[3]],
        a.rotation = Math.PI / 2 * ("x" === u ? 0 : 1);
        var m = {
            top: -1,
            bottom: 1,
            left: -1,
            right: 1
        };
        a.labelDirection = a.tickDirection = a.nameDirection = m[s],
        a.labelOffset = r ? p[d[s]] - p[d.onZero] : 0,
        e.get("axisTick.inside") && (a.tickDirection = -a.tickDirection),
        T(i.labelInside, e.get("axisLabel.inside")) && (a.labelDirection = -a.labelDirection);
        var v = e.get("axisLabel.rotate");
        return a.labelRotate = "top" === l ? -v: v,
        a.z2 = 1,
        a
    }
    function Th(t, e, i, n, o, a, r) {
        co(t, e, i.getModel("label"), i.getModel("emphasis.label"), {
            labelFetcher: o,
            labelDataIndex: a,
            defaultText: gu(o.getData(), a),
            isRectText: !0,
            autoColor: n
        }),
        Ah(t),
        Ah(e)
    }
    function Ah(t, e) {
        "outside" === t.textPosition && (t.textPosition = e)
    }
    function Dh(t, e, i) {
        i.style.text = null,
        bo(i, {
            shape: {
                width: 0
            }
        },
        e, t,
        function() {
            i.parent && i.parent.remove(i)
        })
    }
    function Ch(t, e, i) {
        i.style.text = null,
        bo(i, {
            shape: {
                r: i.shape.r0
            }
        },
        e, t,
        function() {
            i.parent && i.parent.remove(i)
        })
    }
    function Lh(t, e, i, n, o, a, s, l) {
        var u = e.getItemVisual(i, "color"),
        h = e.getItemVisual(i, "opacity"),
        c = n.getModel("itemStyle"),
        d = n.getModel("emphasis.itemStyle").getBarItemStyle();
        l || t.setShape("r", c.get("barBorderRadius") || 0),
        t.useStyle(r({
            fill: u,
            opacity: h
        },
        c.getBarItemStyle()));
        var f = n.getShallow("cursor");
        f && t.attr("cursor", f);
        var p = s ? o.height > 0 ? "bottom": "top": o.width > 0 ? "left": "right";
        l || Th(t.style, d, n, u, a, i, p),
        uo(t, d)
    }
    function kh(t, e) {
        var i = t.get(BD) || 0;
        return Math.min(i, Math.abs(e.width), Math.abs(e.height))
    }
    function Ph(t, e, i) {
        var n = t.getData(),
        o = [],
        a = n.getLayout("valueAxisHorizontal") ? 1 : 0;
        o[1 - a] = n.getLayout("valueAxisStart");
        var r = new GD({
            shape: {
                points: n.getLayout("largePoints")
            },
            incremental: !!i,
            __startPoint: o,
            __valueIdx: a
        });
        e.add(r),
        Nh(r, t, n)
    }
    function Nh(t, e, i) {
        var n = i.getVisual("borderColor") || i.getVisual("color"),
        o = e.getModel("itemStyle").getItemStyle(["color", "borderColor"]);
        t.useStyle(o),
        t.style.fill = null,
        t.style.stroke = n,
        t.style.lineWidth = i.getLayout("barWidth")
    }
    function Oh(t, e, i, n) {
        var o = e.getData(),
        a = this.dataIndex,
        r = o.getName(a),
        s = e.get("selectedOffset");
        n.dispatchAction({
            type: "pieToggleSelect",
            from: t,
            name: r,
            seriesId: e.id
        }),
        o.each(function(t) {
            zh(o.getItemGraphicEl(t), o.getItemLayout(t), e.isSelected(o.getName(t)), s, i)
        })
    }
    function zh(t, e, i, n, o) {
        var a = (e.startAngle + e.endAngle) / 2,
        r = Math.cos(a),
        s = Math.sin(a),
        l = i ? n: 0,
        u = [r * l, s * l];
        o ? t.animate().when(200, {
            position: u
        }).start("bounceOut") : t.attr("position", u)
    }
    function Eh(t, e) {
        function i() {
            a.ignore = a.hoverIgnore,
            r.ignore = r.hoverIgnore
        }
        function n() {
            a.ignore = a.normalIgnore,
            r.ignore = r.normalIgnore
        }
        Zw.call(this);
        var o = new $S({
            z2: 2
        }),
        a = new oM,
        r = new qS;
        this.add(o),
        this.add(a),
        this.add(r),
        this.updateData(t, e, !0),
        this.on("emphasis", i).on("normal", n).on("mouseover", i).on("mouseout", n)
    }
    function Rh(t, e, i, n, o, a, r) {
        function s(e, i) {
            for (var n = e; n >= 0 && (t[n].y -= i, !(n > 0 && t[n].y > t[n - 1].y + t[n - 1].height)); n--);
        }
        function l(t, e, i, n, o, a) {
            for (var r = e ? Number.MAX_VALUE: 0, s = 0, l = t.length; s < l; s++) if ("center" !== t[s].position) {
                var u = Math.abs(t[s].y - n),
                h = t[s].len,
                c = t[s].len2,
                d = u < o + h ? Math.sqrt((o + h + c) * (o + h + c) - u * u) : Math.abs(t[s].x - i);
                e && d >= r && (d = r - 10),
                !e && d <= r && (d = r + 10),
                t[s].x = i + d * a,
                r = d
            }
        }
        t.sort(function(t, e) {
            return t.y - e.y
        });
        for (var u, h = 0,
        c = t.length,
        d = [], f = [], p = 0; p < c; p++)(u = t[p].y - h) < 0 &&
        function(e, i, n, o) {
            for (var a = e; a < i; a++) if (t[a].y += n, a > e && a + 1 < i && t[a + 1].y > t[a].y + t[a].height) return void s(a, n / 2);
            s(i - 1, n / 2)
        } (p, c, -u),
        h = t[p].y + t[p].height;
        for (r - h < 0 && s(c - 1, h - r), p = 0; p < c; p++) t[p].y >= i ? f.push(t[p]) : d.push(t[p]);
        l(d, !1, e, i, n, o),
        l(f, !0, e, i, n, o)
    }
    function Bh(t, e, i, n, o, a) {
        for (var r = [], s = [], l = 0; l < t.length; l++) t[l].x < e ? r.push(t[l]) : s.push(t[l]);
        for (Rh(s, e, i, n, 1, o, a), Rh(r, e, i, n, -1, o, a), l = 0; l < t.length; l++) {
            var u = t[l].linePoints;
            if (u) {
                var h = u[1][0] - u[2][0];
                t[l].x < e ? u[2][0] = t[l].x + 3 : u[2][0] = t[l].x - 3,
                u[1][1] = u[2][1] = t[l].y,
                u[1][0] = u[2][0] + h
            }
        }
    }
    function Vh() {
        this.group = new Zw
    }
    function Fh(t, e, i) {
        HA.call(this, t, e, i),
        this.type = "value",
        this.angle = 0,
        this.name = "",
        this.model
    }
    function Gh(t, e, i) {
        this._model = t,
        this.dimensions = [],
        this._indicatorAxes = f(t.getIndicatorModels(),
        function(t, e) {
            var i = "indicator_" + e,
            n = new Fh(i, new hA);
            return n.name = t.get("name"),
            n.model = t,
            t.axis = n,
            this.dimensions.push(i),
            n
        },
        this),
        this.resize(t, i),
        this.cx,
        this.cy,
        this.r,
        this.r0,
        this.startAngle
    }
    function Wh(t, e) {
        return r({
            show: e
        },
        t)
    }
    function Hh(t) {
        return y(t) || (t = [ + t, +t]),
        t
    }
    function Zh() {
        mw.call(this)
    }
    function jh(t) {
        this.name = t,
        this.zoomLimit,
        mw.call(this),
        this._roamTransformable = new Zh,
        this._rawTransformable = new Zh,
        this._center,
        this._zoom
    }
    function Yh(t, e, i, n) {
        var o = i.seriesModel,
        a = o ? o.coordinateSystem: null;
        return a === this ? a[t](n) : null
    }
    function Uh(t) {
        for (var e, i = 0; i < t.length; i++) {
            var n = t[i].getBoundingRect(); (e = e || n.clone()).union(n)
        }
        return e
    }
    function Xh(t, e) {
        var i, n, o = t.svgXML;
        try {
            k(null != (n = (i = o && ns(o, {
                ignoreViewBox: !0,
                ignoreRootClip: !0
            }) || {}).root))
        } catch(t) {
            throw new Error("Invalid svg format\n" + t.message)
        }
        var a = i.width,
        r = i.height,
        s = i.viewBoxRect;
        if (e || (e = null == a || null == r ? n.getBoundingRect() : new ue(0, 0, 0, 0), null != a && (e.width = a), null != r && (e.height = r)), s) {
            var l = is(s, e.width, e.height),
            u = n; (n = new Zw).add(u),
            u.scale = l.scale,
            u.position = l.position
        }
        return n.setClipPath(new aM({
            shape: e.plain()
        })),
        {
            root: n,
            boundingRect: e
        }
    }
    function qh(t) {
        return function(e, i) {
            var n = [];
            return d(Kh(e),
            function(o) {
                var a = yC[o.type][t];
                a && n.push(a(e, o, i))
            }),
            n
        }
    }
    function Kh(t) {
        return pT.retrieveMap(t) || []
    }
    function Qh(t, e, i, n) {
        jh.call(this, t),
        this.map = e;
        var o = xC.load(e, i);
        this._nameCoordMap = o.nameCoordMap,
        this._regionsMap = o.nameCoordMap,
        this._invertLongitute = null == n || n,
        this.regions = o.regions,
        this._rect = o.boundingRect
    }
    function Jh(t, e, i, n) {
        var o = i.geoModel,
        a = i.seriesModel,
        r = o ? o.coordinateSystem: a ? a.coordinateSystem || (a.getReferringComponents("geo")[0] || {}).coordinateSystem: null;
        return r === this ? r[t](n) : null
    }
    function $h(t, e) {
        var i = t.get("boundingCoords");
        if (null != i) {
            var n = i[0],
            o = i[1];
            isNaN(n[0]) || isNaN(n[1]) || isNaN(o[0]) || isNaN(o[1]) || this.setBoundingRect(n[0], n[1], o[0] - n[0], o[1] - n[1])
        }
        var a, r = this.getBoundingRect(),
        s = t.get("layoutCenter"),
        l = t.get("layoutSize"),
        u = e.getWidth(),
        h = e.getHeight(),
        c = r.width / r.height * this.aspectScale,
        d = !1;
        if (s && l && (s = [Eo(s[0], u), Eo(s[1], h)], l = Eo(l, Math.min(u, h)), isNaN(s[0]) || isNaN(s[1]) || isNaN(l) || (d = !0)), d) {
            var f = {};
            c > 1 ? (f.width = l, f.height = l / c) : (f.height = l, f.width = l * c),
            f.y = s[1] - f.height / 2,
            f.x = s[0] - f.width / 2
        } else(a = t.getBoxLayoutParams()).aspect = c,
        f = la(a, {
            width: u,
            height: h
        });
        this.setViewRect(f.x, f.y, f.width, f.height),
        this.setCenter(t.get("center")),
        this.setZoom(t.get("zoom"))
    }
    function tc(t, e) {
        d(e.get("geoCoord"),
        function(e, i) {
            t.addGeoCoord(i, e)
        })
    }
    function ec(t, e, i) {
        oc(t)[e] = i
    }
    function ic(t, e, i) {
        var n = oc(t);
        n[e] === i && (n[e] = null)
    }
    function nc(t, e) {
        return !! oc(t)[e]
    }
    function oc(t) {
        return t[bC] || (t[bC] = {})
    }
    function ac(t) {
        this.pointerChecker,
        this._zr = t,
        this._opt = {};
        var e = m,
        n = e(rc, this),
        o = e(sc, this),
        a = e(lc, this),
        s = e(uc, this),
        l = e(hc, this);
        aw.call(this),
        this.setPointerChecker = function(t) {
            this.pointerChecker = t
        },
        this.enable = function(e, u) {
            this.disable(),
            this._opt = r(i(u) || {},
            {
                zoomOnMouseWheel: !0,
                moveOnMouseMove: !0,
                moveOnMouseWheel: !1,
                preventDefaultMouseMove: !0
            }),
            null == e && (e = !0),
            !0 !== e && "move" !== e && "pan" !== e || (t.on("mousedown", n), t.on("mousemove", o), t.on("mouseup", a)),
            !0 !== e && "scale" !== e && "zoom" !== e || (t.on("mousewheel", s), t.on("pinch", l))
        },
        this.disable = function() {
            t.off("mousedown", n),
            t.off("mousemove", o),
            t.off("mouseup", a),
            t.off("mousewheel", s),
            t.off("pinch", l)
        },
        this.dispose = this.disable,
        this.isDragging = function() {
            return this._dragging
        },
        this.isPinching = function() {
            return this._pinching
        }
    }
    function rc(t) {
        if (! (ct(t) || t.target && t.target.draggable)) {
            var e = t.offsetX,
            i = t.offsetY;
            this.pointerChecker && this.pointerChecker(t, e, i) && (this._x = e, this._y = i, this._dragging = !0)
        }
    }
    function sc(t) {
        if (!ct(t) && fc("moveOnMouseMove", t, this._opt) && this._dragging && "pinch" !== t.gestureEvent && !nc(this._zr, "globalPan")) {
            var e = t.offsetX,
            i = t.offsetY,
            n = this._x,
            o = this._y,
            a = e - n,
            r = i - o;
            this._x = e,
            this._y = i,
            this._opt.preventDefaultMouseMove && lw(t.event),
            dc(this, "pan", "moveOnMouseMove", t, {
                dx: a,
                dy: r,
                oldX: n,
                oldY: o,
                newX: e,
                newY: i
            })
        }
    }
    function lc(t) {
        ct(t) || (this._dragging = !1)
    }
    function uc(t) {
        var e = fc("zoomOnMouseWheel", t, this._opt),
        i = fc("moveOnMouseWheel", t, this._opt),
        n = t.wheelDelta,
        o = Math.abs(n),
        a = t.offsetX,
        r = t.offsetY;
        if (0 !== n && (e || i)) {
            if (e) {
                var s = o > 3 ? 1.4 : o > 1 ? 1.2 : 1.1;
                cc(this, "zoom", "zoomOnMouseWheel", t, {
                    scale: n > 0 ? s: 1 / s,
                    originX: a,
                    originY: r
                })
            }
            if (i) {
                var l = Math.abs(n);
                cc(this, "scrollMove", "moveOnMouseWheel", t, {
                    scrollDelta: (n > 0 ? 1 : -1) * (l > 3 ? .4 : l > 1 ? .15 : .05),
                    originX: a,
                    originY: r
                })
            }
        }
    }
    function hc(t) {
        nc(this._zr, "globalPan") || cc(this, "zoom", null, t, {
            scale: t.pinchScale > 1 ? 1.1 : 1 / 1.1,
            originX: t.pinchX,
            originY: t.pinchY
        })
    }
    function cc(t, e, i, n, o) {
        t.pointerChecker && t.pointerChecker(n, o.originX, o.originY) && (lw(n.event), dc(t, e, i, n, o))
    }
    function dc(t, e, i, n, o) {
        o.isAvailableBehavior = m(fc, null, i, n),
        t.trigger(e, o)
    }
    function fc(t, e, i) {
        var n = i[t];
        return ! t || n && (!_(n) || e.event[n + "Key"])
    }
    function pc(t, e, i) {
        var n = t.target,
        o = n.position;
        o[0] += e,
        o[1] += i,
        n.dirty()
    }
    function gc(t, e, i, n) {
        var o = t.target,
        a = t.zoomLimit,
        r = o.position,
        s = o.scale,
        l = t.zoom = t.zoom || 1;
        if (l *= e, a) {
            var u = a.min || 0,
            h = a.max || 1 / 0;
            l = Math.max(Math.min(h, l), u)
        }
        var c = l / t.zoom;
        t.zoom = l,
        r[0] -= (i - r[0]) * (c - 1),
        r[1] -= (n - r[1]) * (c - 1),
        s[0] *= c,
        s[1] *= c,
        o.dirty()
    }
    function mc(t, e, i) {
        var n = e.getComponentByElement(t.topTarget),
        o = n && n.coordinateSystem;
        return n && n !== i && !SC[n.mainType] && o && o.model !== i
    }
    function vc(t, e) {
        var i = t.getItemStyle(),
        n = t.get("areaColor");
        return null != n && (i.fill = n),
        i
    }
    function yc(t, e, i, n, o) {
        i.off("click"),
        i.off("mousedown"),
        e.get("selectedMode") && (i.on("mousedown",
        function() {
            t._mouseDownFlag = !0
        }), i.on("click",
        function(a) {
            if (t._mouseDownFlag) {
                t._mouseDownFlag = !1;
                for (var r = a.target; ! r.__regions;) r = r.parent;
                if (r) {
                    var s = {
                        type: ("geo" === e.mainType ? "geo": "map") + "ToggleSelect",
                        batch: f(r.__regions,
                        function(t) {
                            return {
                                name: t.name,
                                from: o.uid
                            }
                        })
                    };
                    s[e.mainType + "Id"] = e.id,
                    n.dispatchAction(s),
                    xc(e, i)
                }
            }
        }))
    }
    function xc(t, e) {
        e.eachChild(function(e) {
            d(e.__regions,
            function(i) {
                e.trigger(t.isSelected(i.name) ? "emphasis": "normal")
            })
        })
    }
    function _c(t, e) {
        var i = new Zw;
        this.uid = No("ec_map_draw"),
        this._controller = new ac(t.getZr()),
        this._controllerHost = {
            target: e ? i: null
        },
        this.group = i,
        this._updateGroup = e,
        this._mouseDownFlag,
        this._mapName,
        this._initialized,
        i.add(this._regionsGroup = new Zw),
        i.add(this._backgroundGroup = new Zw)
    }
    function wc(t, e, i) {
        var n = t.getZoom(),
        o = t.getCenter(),
        a = e.zoom,
        r = t.dataToPoint(o);
        if (null != e.dx && null != e.dy && (r[0] -= e.dx, r[1] -= e.dy, o = t.pointToData(r), t.setCenter(o)), null != a) {
            if (i) {
                var s = i.min || 0,
                l = i.max || 1 / 0;
                a = Math.max(Math.min(n * a, l), s) / n
            }
            t.scale[0] *= a,
            t.scale[1] *= a;
            var u = t.position,
            h = (e.originX - u[0]) * (a - 1),
            c = (e.originY - u[1]) * (a - 1);
            u[0] -= h,
            u[1] -= c,
            t.updateTransform(),
            o = t.pointToData(r),
            t.setCenter(o),
            t.setZoom(a * n)
        }
        return {
            center: t.getCenter(),
            zoom: t.getZoom()
        }
    }
    function bc(t, e) {
        var i = {};
        return d(t,
        function(t) {
            t.each(t.mapDimension("value"),
            function(e, n) {
                var o = "ec-" + t.getName(n);
                i[o] = i[o] || [],
                isNaN(e) || i[o].push(e)
            })
        }),
        t[0].map(t[0].mapDimension("value"),
        function(n, o) {
            for (var a = "ec-" + t[0].getName(o), r = 0, s = 1 / 0, l = -1 / 0, u = i[a].length, h = 0; h < u; h++) s = Math.min(s, i[a][h]),
            l = Math.max(l, i[a][h]),
            r += i[a][h];
            var c;
            return c = "min" === e ? s: "max" === e ? l: "average" === e ? r / u: r,
            0 === u ? NaN: c
        })
    }
    function Sc(t) {
        var e = t.mainData,
        i = t.datas;
        i || (i = {
            main: e
        },
        t.datasAttr = {
            main: "data"
        }),
        t.datas = t.mainData = null,
        Cc(e, i, t),
        MC(i,
        function(i) {
            MC(e.TRANSFERABLE_METHODS,
            function(e) {
                i.wrapMethod(e, v(Mc, t))
            })
        }),
        e.wrapMethod("cloneShallow", v(Tc, t)),
        MC(e.CHANGABLE_METHODS,
        function(i) {
            e.wrapMethod(i, v(Ic, t))
        }),
        k(i[e.dataType] === e)
    }
    function Mc(t, e) {
        if (Dc(this)) {
            var i = a({},
            this[IC]);
            i[this.dataType] = e,
            Cc(e, i, t)
        } else Lc(e, this.dataType, this[TC], t);
        return e
    }
    function Ic(t, e) {
        return t.struct && t.struct.update(this),
        e
    }
    function Tc(t, e) {
        return MC(e[IC],
        function(i, n) {
            i !== e && Lc(i.cloneShallow(), n, e, t)
        }),
        e
    }
    function Ac(t) {
        var e = this[TC];
        return null == t || null == e ? e: e[IC][t]
    }
    function Dc(t) {
        return t[TC] === t
    }
    function Cc(t, e, i) {
        t[IC] = {},
        MC(e,
        function(e, n) {
            Lc(e, n, t, i)
        })
    }
    function Lc(t, e, i, n) {
        i[IC][e] = t,
        t[TC] = i,
        t.dataType = e,
        n.struct && (t[n.structAttr] = n.struct, n.struct[n.datasAttr[e]] = t),
        t.getLinkedData = Ac
    }
    function kc(t, e, i) {
        this.root,
        this.data,
        this._nodes = [],
        this.hostModel = t,
        this.levelModels = f(e || [],
        function(e) {
            return new Lo(e, t, t.ecModel)
        }),
        this.leavesModel = new Lo(i || {},
        t, t.ecModel)
    }
    function Pc(t, e) {
        var i = e.children;
        t.parentNode !== e && (i.push(t), t.parentNode = e)
    }
    function Nc(t) {
        t.hierNode = {
            defaultAncestor: null,
            ancestor: t,
            prelim: 0,
            modifier: 0,
            change: 0,
            shift: 0,
            i: 0,
            thread: null
        };
        for (var e, i, n = [t]; e = n.pop();) if (i = e.children, e.isExpand && i.length) for (var o = i.length - 1; o >= 0; o--) {
            var a = i[o];
            a.hierNode = {
                defaultAncestor: null,
                ancestor: a,
                prelim: 0,
                modifier: 0,
                change: 0,
                shift: 0,
                i: o,
                thread: null
            },
            n.push(a)
        }
    }
    function Oc(t, e) {
        var i = t.isExpand ? t.children: [],
        n = t.parentNode.children,
        o = t.hierNode.i ? n[t.hierNode.i - 1] : null;
        if (i.length) {
            Vc(t);
            var a = (i[0].hierNode.prelim + i[i.length - 1].hierNode.prelim) / 2;
            o ? (t.hierNode.prelim = o.hierNode.prelim + e(t, o), t.hierNode.modifier = t.hierNode.prelim - a) : t.hierNode.prelim = a
        } else o && (t.hierNode.prelim = o.hierNode.prelim + e(t, o));
        t.parentNode.hierNode.defaultAncestor = Fc(t, o, t.parentNode.hierNode.defaultAncestor || n[0], e)
    }
    function zc(t) {
        var e = t.hierNode.prelim + t.parentNode.hierNode.modifier;
        t.setLayout({
            x: e
        },
        !0),
        t.hierNode.modifier += t.parentNode.hierNode.modifier
    }
    function Ec(t) {
        return arguments.length ? t: jc
    }
    function Rc(t, e) {
        var i = {};
        return t -= Math.PI / 2,
        i.x = e * Math.cos(t),
        i.y = e * Math.sin(t),
        i
    }
    function Bc(t, e) {
        return la(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        })
    }
    function Vc(t) {
        for (var e = t.children,
        i = e.length,
        n = 0,
        o = 0; --i >= 0;) {
            var a = e[i];
            a.hierNode.prelim += n,
            a.hierNode.modifier += n,
            o += a.hierNode.change,
            n += a.hierNode.shift + o
        }
    }
    function Fc(t, e, i, n) {
        if (e) {
            for (var o = t,
            a = t,
            r = a.parentNode.children[0], s = e, l = o.hierNode.modifier, u = a.hierNode.modifier, h = r.hierNode.modifier, c = s.hierNode.modifier; s = Gc(s), a = Wc(a), s && a;) {
                o = Gc(o),
                r = Wc(r),
                o.hierNode.ancestor = t;
                var d = s.hierNode.prelim + c - a.hierNode.prelim - u + n(s, a);
                d > 0 && (Zc(Hc(s, t, i), t, d), u += d, l += d),
                c += s.hierNode.modifier,
                u += a.hierNode.modifier,
                l += o.hierNode.modifier,
                h += r.hierNode.modifier
            }
            s && !Gc(o) && (o.hierNode.thread = s, o.hierNode.modifier += c - l),
            a && !Wc(r) && (r.hierNode.thread = a, r.hierNode.modifier += u - h, i = t)
        }
        return i
    }
    function Gc(t) {
        var e = t.children;
        return e.length && t.isExpand ? e[e.length - 1] : t.hierNode.thread
    }
    function Wc(t) {
        var e = t.children;
        return e.length && t.isExpand ? e[0] : t.hierNode.thread
    }
    function Hc(t, e, i) {
        return t.hierNode.ancestor.parentNode === e.parentNode ? t.hierNode.ancestor: i
    }
    function Zc(t, e, i) {
        var n = i / (e.hierNode.i - t.hierNode.i);
        e.hierNode.change -= n,
        e.hierNode.shift += i,
        e.hierNode.modifier += i,
        e.hierNode.prelim += i,
        t.hierNode.change += n
    }
    function jc(t, e) {
        return t.parentNode === e.parentNode ? 1 : 2
    }
    function Yc(t, e) {
        var i = t.getItemLayout(e);
        return i && !isNaN(i.x) && !isNaN(i.y) && "none" !== t.getItemVisual(e, "symbol")
    }
    function Uc(t, e, i) {
        return i.itemModel = e,
        i.itemStyle = e.getModel("itemStyle").getItemStyle(),
        i.hoverItemStyle = e.getModel("emphasis.itemStyle").getItemStyle(),
        i.lineStyle = e.getModel("lineStyle").getLineStyle(),
        i.labelModel = e.getModel("labareaColor: el"),
        i.hoverLabelModel = e.getModel("emphasis.label"),
        !1 === t.isExpand && 0 !== t.children.length ? i.symbolInnerColor = i.itemStyle.fill: i.symbolInnerColor = "#fff",
        i
    }
    function Xc(t, e, i, n, o, a) {
        var s = !i,
        l = t.tree.getNodeByDataIndex(e),
        a = Uc(l, l.getModel(), a),
        u = t.tree.root,
        h = l.parentNode === u ? l: l.parentNode || l,
        c = t.getItemGraphicEl(h.dataIndex),
        d = h.getLayout(),
        f = c ? {
            x: c.position[0],
            y: c.position[1],
            rawX: c.__radialOldRawX,
            rawY: c.__radialOldRawY
        }: d,
        p = l.getLayout();
        s ? (i = new mu(t, e, a)).attr("position", [f.x, f.y]) : i.updateData(t, e, a),
        i.__radialOldRawX = i.__radialRawX,
        i.__radialOldRawY = i.__radialRawY,
        i.__radialRawX = p.rawX,
        i.__radialRawY = p.rawY,
        n.add(i),
        t.setItemGraphicEl(e, i),
        bo(i, {
            position: [p.x, p.y]
        },
        o);
        var g = i.getSymbolPath();
        if ("radial" === a.layout) {
            var m, v, y = u.children[0],
            x = y.getLayout(),
            _ = y.children.length;
            if (p.x === x.x && !0 === l.isExpand) {
                var w = {};
                w.x = (y.children[0].getLayout().x + y.children[_ - 1].getLayout().x) / 2,
                w.y = (y.children[0].getLayout().y + y.children[_ - 1].getLayout().y) / 2,
                (m = Math.atan2(w.y - x.y, w.x - x.x)) < 0 && (m = 2 * Math.PI + m),
                (v = w.x < x.x) && (m -= Math.PI)
            } else(m = Math.atan2(p.y - x.y, p.x - x.x)) < 0 && (m = 2 * Math.PI + m),
            0 === l.children.length || 0 !== l.children.length && !1 === l.isExpand ? (v = p.x < x.x) && (m -= Math.PI) : (v = p.x > x.x) || (m -= Math.PI);
            var b = v ? "left": "right";
            g.setStyle({
                textPosition: b,
                textRotation: -m,
                textOrigin: "center",
                verticalAlign: "middle"
            })
        }
        if (l.parentNode && l.parentNode !== u) {
            var S = i.__edge;
            S || (S = i.__edge = new lM({
                shape: Kc(a, f, f),
                style: r({
                    opacity: 0,
                    strokeNoScale: !0
                },
                a.lineStyle)
            })),
            bo(S, {
                shape: Kc(a, d, p),
                style: {
                    opacity: 1
                }
            },
            o),
            n.add(S)
        }
    }
    function qc(t, e, i, n, o, a) {
        for (var r, s = t.tree.getNodeByDataIndex(e), l = t.tree.root, a = Uc(s, s.getModel(), a), u = s.parentNode === l ? s: s.parentNode || s; null == (r = u.getLayout());) u = u.parentNode === l ? u: u.parentNode || u;
        bo(i, {
            position: [r.x + 1, r.y + 1]
        },
        o,
        function() {
            n.remove(i),
            t.setItemGraphicEl(e, null)
        }),
        i.fadeOut(null, {
            keepLabel: !0
        });
        var h = i.__edge;
        h && bo(h, {
            shape: Kc(a, r, r),
            style: {
                opacity: 0
            }
        },
        o,
        function() {
            n.remove(h)
        })
    }
    function Kc(t, e, i) {
        var n, o, a, r, s, l, u, h, c = t.orient;
        if ("radial" === t.layout) {
            s = e.rawX,
            u = e.rawY,
            l = i.rawX,
            h = i.rawY;
            var d = Rc(s, u),
            f = Rc(s, u + (h - u) * t.curvature),
            p = Rc(l, h + (u - h) * t.curvature),
            g = Rc(l, h);
            return {
                x1: d.x,
                y1: d.y,
                x2: g.x,
                y2: g.y,
                cpx1: f.x,
                cpy1: f.y,
                cpx2: p.x,
                cpy2: p.y
            }
        }
        return s = e.x,
        u = e.y,
        l = i.x,
        h = i.y,
        "LR" !== c && "RL" !== c || (n = s + (l - s) * t.curvature, o = u, a = l + (s - l) * t.curvature, r = h),
        "TB" !== c && "BT" !== c || (n = s, o = u + (h - u) * t.curvature, a = l, r = h + (u - h) * t.curvature),
        {
            x1: s,
            y1: u,
            x2: l,
            y2: h,
            cpx1: n,
            cpy1: o,
            cpx2: a,
            cpy2: r
        }
    }
    function Qc(t, e, i) {
        for (var n, o = [t], a = []; n = o.pop();) if (a.push(n), n.isExpand) {
            var r = n.children;
            if (r.length) for (var s = 0; s < r.length; s++) o.push(r[s])
        }
        for (; n = a.pop();) e(n, i)
    }
    function Jc(t, e) {
        for (var i, n = [t]; i = n.pop();) if (e(i), i.isExpand) {
            var o = i.children;
            if (o.length) for (var a = o.length - 1; a >= 0; a--) n.push(o[a])
        }
    }
    function $c(t, e) {
        var i = Bc(t, e);
        t.layoutInfo = i;
        var n = t.get("layout"),
        o = 0,
        a = 0,
        r = null;
        "radial" === n ? (o = 2 * Math.PI, a = Math.min(i.height, i.width) / 2, r = Ec(function(t, e) {
            return (t.parentNode === e.parentNode ? 1 : 2) / t.depth
        })) : (o = i.width, a = i.height, r = Ec());
        var s = t.getData().tree.root,
        l = s.children[0];
        if (l) {
            Nc(s),
            Qc(l, Oc, r),
            s.hierNode.modifier = -l.hierNode.prelim,
            Jc(l, zc);
            var u = l,
            h = l,
            c = l;
            Jc(l,
            function(t) {
                var e = t.getLayout().x;
                e < u.getLayout().x && (u = t),
                e > h.getLayout().x && (h = t),
                t.depth > c.depth && (c = t)
            });
            var d = u === h ? 1 : r(u, h) / 2,
            f = d - u.getLayout().x,
            p = 0,
            g = 0,
            m = 0,
            v = 0;
            if ("radial" === n) p = o / (h.getLayout().x + d + f),
            g = a / (c.depth - 1 || 1),
            Jc(l,
            function(t) {
                m = (t.getLayout().x + f) * p,
                v = (t.depth - 1) * g;
                var e = Rc(m, v);
                t.setLayout({
                    x: e.x,
                    y: e.y,
                    rawX: m,
                    rawY: v
                },
                !0)
            });
            else {
                var y = t.getOrient();
                "RL" === y || "LR" === y ? (g = a / (h.getLayout().x + d + f), p = o / (c.depth - 1 || 1), Jc(l,
                function(t) {
                    v = (t.getLayout().x + f) * g,
                    m = "LR" === y ? (t.depth - 1) * p: o - (t.depth - 1) * p,
                    t.setLayout({
                        x: m,
                        y: v
                    },
                    !0)
                })) : "TB" !== y && "BT" !== y || (p = o / (h.getLayout().x + d + f), g = a / (c.depth - 1 || 1), Jc(l,
                function(t) {
                    m = (t.getLayout().x + f) * p,
                    v = "TB" === y ? (t.depth - 1) * g: a - (t.depth - 1) * g,
                    t.setLayout({
                        x: m,
                        y: v
                    },
                    !0)
                }))
            }
        }
    }
    function td(t, e, i) {
        if (t && l(e, t.type) >= 0) {
            var n = i.getData().tree.root,
            o = t.targetNode;
            if ("string" == typeof o && (o = n.getNodeById(o)), o && n.contains(o)) return {
                node: o
            };
            var a = t.targetNodeId;
            if (null != a && (o = n.getNodeById(a))) return {
                node: o
            }
        }
    }
    function ed(t) {
        for (var e = []; t;)(t = t.parentNode) && e.push(t);
        return e.reverse()
    }
    function id(t, e) {
        return l(ed(t), e) >= 0
    }
    function nd(t, e) {
        for (var i = []; t;) {
            var n = t.dataIndex;
            i.push({
                name: t.name,
                dataIndex: n,
                value: e.getRawValue(n)
            }),
            t = t.parentNode
        }
        return i.reverse(),
        i
    }
    function od(t) {
        var e = 0;
        d(t.children,
        function(t) {
            od(t);
            var i = t.value;
            y(i) && (i = i[0]),
            e += i
        });
        var i = t.value;
        y(i) && (i = i[0]),
        (null == i || isNaN(i)) && (i = e),
        i < 0 && (i = 0),
        y(t.value) ? t.value[0] = i: t.value = i
    }
    function ad(t, e) {
        var i = e.get("color");
        if (i) {
            var n;
            return d(t = t || [],
            function(t) {
                var e = new Lo(t),
                i = e.get("color"); (e.get("itemStyle.color") || i && "none" !== i) && (n = !0)
            }),
            n || ((t[0] || (t[0] = {})).color = i.slice()),
            t
        }
    }
    function rd(t) {
        this.group = new Zw,
        t.add(this.group)
    }
    function sd(t, e, i, n, o, a) {
        var r = [[o ? t: t - DC, e], [t + i, e], [t + i, e + n], [o ? t: t - DC, e + n]];
        return ! a && r.splice(2, 0, [t + i + DC, e + n / 2]),
        !o && r.push([t, e + n / 2]),
        r
    }
    function ld(t, e, i) {
        t.eventData = {
            componentType: "series",
            componentSubType: "treemap",
            componentIndex: e.componentIndex,
            seriesIndex: e.componentIndex,
            seriesName: e.name,
            seriesType: "treemap",
            selfType: "breadcrumb",
            nodeData: {
                dataIndex: i && i.dataIndex,
                name: i && i.name
            },
            treePathInfo: i && nd(i, e)
        }
    }
    function ud() {
        var t, e = [],
        i = {};
        return {
            add: function(t, n, o, a, r) {
                return _(a) && (r = a, a = 0),
                !i[t.id] && (i[t.id] = 1, e.push({
                    el: t,
                    target: n,
                    time: o,
                    delay: a,
                    easing: r
                }), !0)
            },
            done: function(e) {
                return t = e,
                this
            },
            start: function() {
                for (var n = e.length,
                o = 0,
                a = e.length; o < a; o++) {
                    var r = e[o];
                    r.el.animateTo(r.target, r.time, r.delay, r.easing,
                    function() {--n || (e.length = 0, i = {},
                        t && t())
                    })
                }
                return this
            }
        }
    }
    function hd(t, e, n, o, r, s, l, u, h, c) {
        function d(t, e) {
            w ? !t.invisible && s.push(t) : (e(), t.__tmWillVisible || (t.invisible = !1))
        }
        function f(e, n, o, a, r, s) {
            var u = l.getModel(),
            h = T(t.getFormattedLabel(l.dataIndex, "normal", null, null, s ? "upperLabel": "label"), u.get("name"));
            if (!s && v.isLeafRoot) {
                var c = t.get("drillDownIcon", !0);
                h = c ? c + " " + h: h
            }
            var d = u.getModel(s ? zC: NC),
            f = u.getModel(s ? EC: OC),
            p = d.getShallow("show");
            co(e, n, d, f, {
                defaultText: p ? h: null,
                autoColor: o,
                isRectText: !0
            }),
            s && (e.textRect = i(s)),
            e.truncate = p && d.get("ellipsis") ? {
                outerWidth: a,
                outerHeight: r,
                minChar: 2
            }: null
        }
        function p(t, i, o, a) {
            var s = null != S && n[t][S],
            l = r[t];
            return s ? (n[t][S] = null, g(l, s, t)) : w || ((s = new i({
                z: cd(o, a)
            })).__tmDepth = o, s.__tmStorageName = t, m(l, s, t)),
            e[t][b] = s
        }
        function g(t, e, i) { (t[b] = {}).old = "nodeGroup" === i ? e.position.slice() : a({},
            e.shape)
        }
        function m(t, e, i) {
            var n = t[b] = {},
            a = l.parentNode;
            if (a && (!o || "drillDown" === o.direction)) {
                var s = 0,
                u = 0,
                h = r.background[a.getRawIndex()]; ! o && h && h.old && (s = h.old.width, u = h.old.height),
                n.old = "nodeGroup" === i ? [0, u] : {
                    x: s,
                    y: u,
                    width: 0,
                    height: 0
                }
            }
            n.fadein = "nodeGroup" !== i
        }
        if (l) {
            var v = l.getLayout();
            if (v && v.isInView) {
                var y = v.width,
                x = v.height,
                _ = v.borderWidth,
                w = v.invisible,
                b = l.getRawIndex(),
                S = u && u.getRawIndex(),
                M = l.viewChildren,
                I = v.upperHeight,
                A = M && M.length,
                D = l.getModel("itemStyle"),
                C = l.getModel("emphasis.itemStyle"),
                L = p("nodeGroup", LC);
                if (L) {
                    if (h.add(L), L.attr("position", [v.x || 0, v.y || 0]), L.__tmNodeWidth = y, L.__tmNodeHeight = x, v.isAboveViewRoot) return L;
                    var k = p("background", kC, c, BC);
                    if (k &&
                    function(e, i, n) {
                        i.dataIndex = l.dataIndex,
                        i.seriesIndex = t.seriesIndex,
                        i.setShape({
                            x: 0,
                            y: 0,
                            width: y,
                            height: x
                        });
                        var o = l.getVisual("borderColor", !0),
                        a = C.get("borderColor");
                        d(i,
                        function() {
                            var t = GC(D);
                            t.fill = o;
                            var e = FC(C);
                            if (e.fill = a, n) {
                                var r = y - 2 * _;
                                f(t, e, o, r, I, {
                                    x: _,
                                    y: 0,
                                    width: r,
                                    height: I
                                })
                            } else t.text = e.text = null;
                            i.setStyle(t),
                            uo(i, e)
                        }),
                        e.add(i)
                    } (L, k, A && v.upperHeight), !A) {
                        var P = p("content", kC, c, VC);
                        P &&
                        function(e, i) {
                            i.dataIndex = l.dataIndex,
                            i.seriesIndex = t.seriesIndex;
                            var n = Math.max(y - 2 * _, 0),
                            o = Math.max(x - 2 * _, 0);
                            i.culling = !0,
                            i.setShape({
                                x: _,
                                y: _,
                                width: n,
                                height: o
                            });
                            var a = l.getVisual("color", !0);
                            d(i,
                            function() {
                                var t = GC(D);
                                t.fill = a;
                                var e = FC(C);
                                f(t, e, a, n, o),
                                i.setStyle(t),
                                uo(i, e)
                            }),
                            e.add(i)
                        } (L, P)
                    }
                    return L
                }
            }
        }
    }
    function cd(t, e) {
        var i = t * RC + e;
        return (i - 1) / i
    }
    function dd(t) {
        var e = t.pieceList;
        t.hasSpecialVisual = !1,
        d(e,
        function(e, i) {
            e.originIndex = i,
            null != e.visual && (t.hasSpecialVisual = !0)
        })
    }
    function fd(t) {
        var e = t.categories,
        i = t.visual,
        n = t.categoryMap = {};
        if (ZC(e,
        function(t, e) {
            n[t] = e
        }), !y(i)) {
            var o = [];
            w(i) ? ZC(i,
            function(t, e) {
                var i = n[e];
                o[null != i ? i: YC] = t
            }) : o[YC] = i,
            i = bd(t, o)
        }
        for (var a = e.length - 1; a >= 0; a--) null == i[a] && (delete n[e[a]], e.pop())
    }
    function pd(t, e) {
        var i = t.visual,
        n = [];
        w(i) ? ZC(i,
        function(t) {
            n.push(t)
        }) : null != i && n.push(i);
        var o = {
            color: 1,
            symbol: 1
        };
        e || 1 !== n.length || o.hasOwnProperty(t.type) || (n[1] = n[0]),
        bd(t, n)
    }
    function gd(t) {
        return {
            applyVisual: function(e, i, n) {
                e = this.mapValueToVisual(e),
                n("color", t(i("color"), e))
            },
            _doMap: _d([0, 1])
        }
    }
    function md(t) {
        var e = this.option.visual;
        return e[Math.round(zo(t, [0, 1], [0, e.length - 1], !0))] || {}
    }
    function vd(t) {
        return function(e, i, n) {
            n(t, this.mapValueToVisual(e))
        }
    }
    function yd(t) {
        var e = this.option.visual;
        return e[this.option.loop && t !== YC ? t % e.length: t]
    }
    function xd() {
        return this.option.visual[0]
    }
    function _d(t) {
        return {
            linear: function(e) {
                return zo(e, t, this.option.visual, !0)
            },
            category: yd,
            piecewise: function(e, i) {
                var n = wd.call(this, i);
                return null == n && (n = zo(e, t, this.option.visual, !0)),
                n
            },
            fixed: xd
        }
    }
    function wd(t) {
        var e = this.option,
        i = e.pieceList;
        if (e.hasSpecialVisual) {
            var n = i[UC.findPieceIndex(t, i)];
            if (n && n.visual) return n.visual[this.type]
        }
    }
    function bd(t, e) {
        return t.visual = e,
        "color" === t.type && (t.parsedVisual = f(e,
        function(t) {
            return Rt(t)
        })),
        e
    }
    function Sd(t, e, i) {
        return t ? e <= i: e < i
    }
    function Md(t, e, i, n, o, a) {
        var r = t.getModel(),
        s = t.getLayout();
        if (s && !s.invisible && s.isInView) {
            var l, u = t.getModel(QC),
            h = Id(u, e, i[t.depth], n),
            c = u.get("borderColor"),
            f = u.get("borderColorSaturation");
            null != f && (c = Ad(f, l = Td(h))),
            t.setVisual("borderColor", c);
            var p = t.viewChildren;
            if (p && p.length) {
                var g = Cd(t, r, s, u, h, p);
                d(p,
                function(t, e) { (t.depth >= o.length || t === o[t.depth]) && Md(t, kd(r, h, t, e, g, a), i, n, o, a)
                })
            } else l = Td(h),
            t.setVisual("color", l)
        }
    }
    function Id(t, e, i, n) {
        var o = a({},
        e);
        return d(["color", "colorAlpha", "colorSaturation"],
        function(a) {
            var r = t.get(a, !0);
            null == r && i && (r = i[a]),
            null == r && (r = e[a]),
            null == r && (r = n.get(a)),
            null != r && (o[a] = r)
        }),
        o
    }
    function Td(t) {
        var e = Dd(t, "color");
        if (e) {
            var i = Dd(t, "colorAlpha"),
            n = Dd(t, "colorSaturation");
            return n && (e = Zt(e, null, null, n)),
            i && (e = jt(e, i)),
            e
        }
    }
    function Ad(t, e) {
        return null != e ? Zt(e, null, null, t) : null
    }
    function Dd(t, e) {
        var i = t[e];
        if (null != i && "none" !== i) return i
    }
    function Cd(t, e, i, n, o, a) {
        if (a && a.length) {
            var r = Ld(e, "color") || null != o.color && "none" !== o.color && (Ld(e, "colorAlpha") || Ld(e, "colorSaturation"));
            if (r) {
                var s = e.get("visualMin"),
                l = e.get("visualMax"),
                u = i.dataExtent.slice();
                null != s && s < u[0] && (u[0] = s),
                null != l && l > u[1] && (u[1] = l);
                var h = e.get("colorMappingBy"),
                c = {
                    type: r.name,
                    dataExtent: u,
                    visual: r.range
                };
                "color" !== c.type || "index" !== h && "id" !== h ? c.mappingMethod = "linear": (c.mappingMethod = "category", c.loop = !0);
                var d = new UC(c);
                return d.__drColorMappingBy = h,
                d
            }
        }
    }
    function Ld(t, e) {
        var i = t.get(e);
        return KC(i) && i.length ? {
            name: e,
            range: i
        }: null
    }
    function kd(t, e, i, n, o, r) {
        var s = a({},
        e);
        if (o) {
            var l = o.type,
            u = "color" === l && o.__drColorMappingBy,
            h = "index" === u ? n: "id" === u ? r.mapIdToIndex(i.getId()) : i.getValue(t.get("visualDimension"));
            s[l] = o.mapValueToVisual(h)
        }
        return s
    }
    function Pd(t, e, i, n) {
        var o, a;
        if (!t.isRemoved()) {
            var r = t.getLayout();
            o = r.width,
            a = r.height;
            var s = (f = t.getModel()).get(nL),
            l = f.get(oL) / 2,
            u = Wd(f),
            h = Math.max(s, u),
            c = s - l,
            d = h - l,
            f = t.getModel();
            t.setLayout({
                borderWidth: s,
                upperHeight: h,
                upperLabelHeight: u
            },
            !0);
            var p = (o = $C(o - 2 * c, 0)) * (a = $C(a - c - d, 0)),
            g = Nd(t, f, p, e, i, n);
            if (g.length) {
                var m = {
                    x: c,
                    y: d,
                    width: o,
                    height: a
                },
                v = tL(o, a),
                y = 1 / 0,
                x = [];
                x.area = 0;
                for (var _ = 0,
                w = g.length; _ < w;) {
                    var b = g[_];
                    x.push(b),
                    x.area += b.getLayout().area;
                    var S = Rd(x, v, e.squareRatio);
                    S <= y ? (_++, y = S) : (x.area -= x.pop().getLayout().area, Bd(x, v, m, l, !1), v = tL(m.width, m.height), x.length = x.area = 0, y = 1 / 0)
                }
                if (x.length && Bd(x, v, m, l, !0), !i) {
                    var M = f.get("childrenVisibleMin");
                    null != M && p < M && (i = !0)
                }
                for (var _ = 0,
                w = g.length; _ < w; _++) Pd(g[_], e, i, n + 1)
            }
        }
    }
    function Nd(t, e, i, n, o, a) {
        var r = t.children || [],
        s = n.sort;
        "asc" !== s && "desc" !== s && (s = null);
        var l = null != n.leafDepth && n.leafDepth <= a;
        if (o && !l) return t.viewChildren = [];
        zd(r = g(r,
        function(t) {
            return ! t.isRemoved()
        }), s);
        var u = Ed(e, r, s);
        if (0 === u.sum) return t.viewChildren = [];
        if (u.sum = Od(e, i, u.sum, s, r), 0 === u.sum) return t.viewChildren = [];
        for (var h = 0,
        c = r.length; h < c; h++) {
            var d = r[h].getValue() / u.sum * i;
            r[h].setLayout({
                area: d
            })
        }
        return l && (r.length && t.setLayout({
            isLeafRoot: !0
        },
        !0), r.length = 0),
        t.viewChildren = r,
        t.setLayout({
            dataExtent: u.dataExtent
        },
        !0),
        r
    }
    function Od(t, e, i, n, o) {
        if (!n) return i;
        for (var a = t.get("visibleMin"), r = o.length, s = r, l = r - 1; l >= 0; l--) {
            var u = o["asc" === n ? r - l - 1 : l].getValue();
            u / i * e < a && (s = l, i -= u)
        }
        return "asc" === n ? o.splice(0, r - s) : o.splice(s, r - s),
        i
    }
    function zd(t, e) {
        return e && t.sort(function(t, i) {
            var n = "asc" === e ? t.getValue() - i.getValue() : i.getValue() - t.getValue();
            return 0 === n ? "asc" === e ? t.dataIndex - i.dataIndex: i.dataIndex - t.dataIndex: n
        }),
        t
    }
    function Ed(t, e, i) {
        for (var n = 0,
        o = 0,
        a = e.length; o < a; o++) n += e[o].getValue();
        var r = t.get("visualDimension");
        if (e && e.length) if ("value" === r && i) s = [e[e.length - 1].getValue(), e[0].getValue()],
        "asc" === i && s.reverse();
        else {
            var s = [1 / 0, -1 / 0];
            iL(e,
            function(t) {
                var e = t.getValue(r);
                e < s[0] && (s[0] = e),
                e > s[1] && (s[1] = e)
            })
        } else s = [NaN, NaN];
        return {
            sum: n,
            dataExtent: s
        }
    }
    function Rd(t, e, i) {
        for (var n, o = 0,
        a = 1 / 0,
        r = 0,
        s = t.length; r < s; r++)(n = t[r].getLayout().area) && (n < a && (a = n), n > o && (o = n));
        var l = t.area * t.area,
        u = e * e * i;
        return l ? $C(u * o / l, l / (u * a)) : 1 / 0
    }
    function Bd(t, e, i, n, o) {
        var a = e === i.width ? 0 : 1,
        r = 1 - a,
        s = ["x", "y"],
        l = ["width", "height"],
        u = i[s[a]],
        h = e ? t.area / e: 0; (o || h > i[l[r]]) && (h = i[l[r]]);
        for (var c = 0,
        d = t.length; c < d; c++) {
            var f = t[c],
            p = {},
            g = h ? f.getLayout().area / h: 0,
            m = p[l[r]] = $C(h - 2 * n, 0),
            v = i[s[a]] + i[l[a]] - u,
            y = c === d - 1 || v < g ? v: g,
            x = p[l[a]] = $C(y - 2 * n, 0);
            p[s[r]] = i[s[r]] + tL(n, m / 2),
            p[s[a]] = u + tL(n, x / 2),
            u += y,
            f.setLayout(p, !0)
        }
        i[s[r]] += h,
        i[l[r]] -= h
    }
    function Vd(t, e, i, n, o) {
        var a = (e || {}).node,
        r = [n, o];
        if (!a || a === i) return r;
        for (var s, l = n * o,
        u = l * t.option.zoomToNodeRatio; s = a.parentNode;) {
            for (var h = 0,
            c = s.children,
            d = 0,
            f = c.length; d < f; d++) h += c[d].getValue();
            var p = a.getValue();
            if (0 === p) return r;
            u *= h / p;
            var g = s.getModel(),
            m = g.get(nL); (u += 4 * m * m + (3 * m + Math.max(m, Wd(g))) * Math.pow(u, .5)) > kM && (u = kM),
            a = s
        }
        u < l && (u = l);
        var v = Math.pow(u / l, .5);
        return [n * v, o * v]
    }
    function Fd(t, e, i) {
        if (e) return {
            x: e.x,
            y: e.y
        };
        var n = {
            x: 0,
            y: 0
        };
        if (!i) return n;
        var o = i.node,
        a = o.getLayout();
        if (!a) return n;
        for (var r = [a.width / 2, a.height / 2], s = o; s;) {
            var l = s.getLayout();
            r[0] += l.x,
            r[1] += l.y,
            s = s.parentNode
        }
        return {
            x: t.width / 2 - r[0],
            y: t.height / 2 - r[1]
        }
    }
    function Gd(t, e, i, n, o) {
        var a = t.getLayout(),
        r = i[o],
        s = r && r === t;
        if (! (r && !s || o === i.length && t !== n)) {
            t.setLayout({
                isInView: !0,
                invisible: !s && !e.intersect(a),
                isAboveViewRoot: s
            },
            !0);
            var l = new ue(e.x - a.x, e.y - a.y, e.width, e.height);
            iL(t.viewChildren || [],
            function(t) {
                Gd(t, l, i, n, o + 1)
            })
        }
    }
    function Wd(t) {
        return t.get(aL) ? t.get(rL) : 0
    }
    function Hd(t) {
        return "_EC_" + t
    }
    function Zd(t, e) {
        this.id = null == t ? "": t,
        this.inEdges = [],
        this.outEdges = [],
        this.edges = [],
        this.hostGraph,
        this.dataIndex = null == e ? -1 : e
    }
    function jd(t, e, i) {
        this.node1 = t,
        this.node2 = e,
        this.dataIndex = null == i ? -1 : i
    }
    function Yd(t) {
        return isNaN( + t.cpx1) || isNaN( + t.cpy1)
    }
    function Ud(t) {
        return "_" + t + "Type"
    }
    function Xd(t, e, i) {
        var n = e.getItemVisual(i, "color"),
        o = e.getItemVisual(i, t),
        a = e.getItemVisual(i, t + "Size");
        if (o && "none" !== o) {
            y(a) || (a = [a, a]);
            var r = Yl(o, -a[0] / 2, -a[1] / 2, a[0], a[1], n);
            return r.name = t,
            r
        }
    }
    function qd(t) {
        var e = new gL({
            name: "line"
        });
        return Kd(e.shape, t),
        e
    }
    function Kd(t, e) {
        var i = e[0],
        n = e[1],
        o = e[2];
        t.x1 = i[0],
        t.y1 = i[1],
        t.x2 = n[0],
        t.y2 = n[1],
        t.percent = 1,
        o ? (t.cpx1 = o[0], t.cpy1 = o[1]) : (t.cpx1 = NaN, t.cpy1 = NaN)
    }
    function Qd(t, e, i) {
        Zw.call(this),
        this._createLine(t, e, i)
    }
    function Jd(t) {
        this._ctor = t || Qd,
        this.group = new Zw
    }
    function $d(t, e, i, n) {
        if (of(e.getItemLayout(i))) {
            var o = new t._ctor(e, i, n);
            e.setItemGraphicEl(i, o),
            t.group.add(o)
        }
    }
    function tf(t, e, i, n, o, a) {
        var r = e.getItemGraphicEl(n);
        of(i.getItemLayout(o)) ? (r ? r.updateData(i, o, a) : r = new t._ctor(i, o, a), i.setItemGraphicEl(o, r), t.group.add(r)) : t.group.remove(r)
    }
    function ef(t) {
        var e = t.hostModel;
        return {
            lineStyle: e.getModel("lineStyle").getLineStyle(),
            hoverLineStyle: e.getModel("emphasis.lineStyle").getLineStyle(),
            labelModel: e.getModel("label"),
            hoverLabelModel: e.getModel("emphasis.label")
        }
    }
    function nf(t) {
        return isNaN(t[0]) || isNaN(t[1])
    }
    function of(t) {
        return ! nf(t[0]) && !nf(t[1])
    }
    function af(t, e, i) {
        for (var n, o = t[0], a = t[1], r = t[2], s = 1 / 0, l = i * i, u = .1, h = .1; h <= .9; h += .1) xL[0] = bL(o[0], a[0], r[0], h),
        xL[1] = bL(o[1], a[1], r[1], h),
        (f = ML(SL(xL, e) - l)) < s && (s = f, n = h);
        for (var c = 0; c < 32; c++) {
            var d = n + u;
            _L[0] = bL(o[0], a[0], r[0], n),
            _L[1] = bL(o[1], a[1], r[1], n),
            wL[0] = bL(o[0], a[0], r[0], d),
            wL[1] = bL(o[1], a[1], r[1], d);
            var f = SL(_L, e) - l;
            if (ML(f) < .01) break;
            var p = SL(wL, e) - l;
            u /= 2,
            f < 0 ? p >= 0 ? n += u: n -= u: p >= 0 ? n -= u: n += u
        }
        return n
    }
    function rf(t, e) {
        return t.getVisual("opacity") || t.getModel().get(e)
    }
    function sf(t, e, i) {
        var n = t.getGraphicEl(),
        o = rf(t, e);
        null != i && (null == o && (o = 1), o *= i),
        n.downplay && n.downplay(),
        n.traverse(function(t) {
            "group" !== t.type && t.setStyle("opacity", o)
        })
    }
    function lf(t, e) {
        var i = rf(t, e),
        n = t.getGraphicEl();
        n.highlight && n.highlight(),
        n.traverse(function(t) {
            "group" !== t.type && t.setStyle("opacity", i)
        })
    }
    function uf(t) {
        return t instanceof Array || (t = [t, t]),
        t
    }
    function hf(t) {
        var e = t.coordinateSystem;
        if (!e || "view" === e.type) {
            var i = t.getGraph();
            i.eachNode(function(t) {
                var e = t.getModel();
                t.setLayout([ + e.get("x"), +e.get("y")])
            }),
            cf(i)
        }
    }
    function cf(t) {
        t.eachEdge(function(t) {
            var e = t.getModel().get("lineStyle.curveness") || 0,
            i = G(t.node1.getLayout()),
            n = G(t.node2.getLayout()),
            o = [i, n]; + e && o.push([(i[0] + n[0]) / 2 - (i[1] - n[1]) * e, (i[1] + n[1]) / 2 - (n[0] - i[0]) * e]),
            t.setLayout(o)
        })
    }
    function df(t) {
        var e = t.coordinateSystem;
        if (!e || "view" === e.type) {
            var i = e.getBoundingRect(),
            n = t.getData(),
            o = n.graph,
            a = 0,
            r = n.getSum("value"),
            s = 2 * Math.PI / (r || n.count()),
            l = i.width / 2 + i.x,
            u = i.height / 2 + i.y,
            h = Math.min(i.width, i.height) / 2;
            o.eachNode(function(t) {
                var e = t.getValue("value");
                a += s * (r ? e: 1) / 2,
                t.setLayout([h * Math.cos(a) + l, h * Math.sin(a) + u]),
                a += s * (r ? e: 1) / 2
            }),
            n.setLayout({
                cx: l,
                cy: u
            }),
            o.eachEdge(function(t) {
                var e, i = t.getModel().get("lineStyle.curveness") || 0,
                n = G(t.node1.getLayout()),
                o = G(t.node2.getLayout()),
                a = (n[0] + o[0]) / 2,
                r = (n[1] + o[1]) / 2; + i && (e = [l * (i *= 3) + a * (1 - i), u * i + r * (1 - i)]),
                t.setLayout([n, o, e])
            })
        }
    }
    function ff(t, e, i) {
        for (var n = i.rect,
        o = n.width,
        a = n.height,
        r = [n.x + o / 2, n.y + a / 2], s = null == i.gravity ? .1 : i.gravity, l = 0; l < t.length; l++) {
            var u = t[l];
            u.p || (u.p = V(o * (Math.random() - .5) + r[0], a * (Math.random() - .5) + r[1])),
            u.pp = G(u.p),
            u.edges = null
        }
        var h = .6;
        return {
            warmUp: function() {
                h = .5
            },
            setFixed: function(e) {
                t[e].fixed = !0
            },
            setUnfixed: function(e) {
                t[e].fixed = !1
            },
            step: function(i) {
                for (var n = [], o = t.length, a = 0; a < e.length; a++) {
                    var l = e[a],
                    u = l.n1;
                    j(n, (p = l.n2).p, u.p);
                    var c = Y(n) - l.d,
                    d = p.w / (u.w + p.w);
                    isNaN(d) && (d = 0),
                    q(n, n),
                    !u.fixed && DL(u.p, u.p, n, d * c * h),
                    !p.fixed && DL(p.p, p.p, n, -(1 - d) * c * h)
                }
                for (a = 0; a < o; a++)(v = t[a]).fixed || (j(n, r, v.p), DL(v.p, v.p, n, s * h));
                for (a = 0; a < o; a++) for (var u = t[a], f = a + 1; f < o; f++) {
                    var p = t[f];
                    j(n, p.p, u.p),
                    0 === (c = Y(n)) && (W(n, Math.random() - .5, Math.random() - .5), c = 1);
                    var g = (u.rep + p.rep) / c / c; ! u.fixed && DL(u.pp, u.pp, n, g),
                    !p.fixed && DL(p.pp, p.pp, n, -g)
                }
                for (var m = [], a = 0; a < o; a++) {
                    var v = t[a];
                    v.fixed || (j(m, v.p, v.pp), DL(v.p, v.p, m, h), F(v.pp, v.p))
                }
                h *= .992,
                i && i(t, e, h < .01)
            }
        }
    }
    function pf(t, e, i) {
        var n = t.getBoxLayoutParams();
        return n.aspect = i,
        la(n, {
            width: e.getWidth(),
            height: e.getHeight()
        })
    }
    function gf(t, e) {
        var i = t.get("center"),
        n = e.getWidth(),
        o = e.getHeight(),
        a = Math.min(n, o);
        return {
            cx: Eo(i[0], e.getWidth()),
            cy: Eo(i[1], e.getHeight()),
            r: Eo(t.get("radius"), a / 2)
        }
    }
    function mf(t, e) {
        return e && ("string" == typeof e ? t = e.replace("{value}", null != t ? t: "") : "function" == typeof e && (t = e(t))),
        t
    }
    function vf(t, e) {
        function i() {
            a.ignore = a.hoverIgnore,
            r.ignore = r.hoverIgnore
        }
        function n() {
            a.ignore = a.normalIgnore,
            r.ignore = r.normalIgnore
        }
        Zw.call(this);
        var o = new nM,
        a = new oM,
        r = new qS;
        this.add(o),
        this.add(a),
        this.add(r),
        this.updateData(t, e, !0),
        this.on("emphasis", i).on("normal", n).on("mouseover", i).on("mouseout", n)
    }
    function yf(t, e) {
        return la(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        })
    }
    function xf(t, e) {
        for (var i = t.mapDimension("value"), n = t.mapArray(i,
        function(t) {
            return t
        }), o = [], a = "ascending" === e, r = 0, s = t.count(); r < s; r++) o[r] = r;
        return "function" == typeof e ? o.sort(e) : "none" !== e && o.sort(function(t, e) {
            return a ? n[t] - n[e] : n[e] - n[t]
        }),
        o
    }
    function _f(t) {
        t.each(function(e) {
            var i, n, o, a, r = t.getItemModel(e),
            s = r.getModel("label").get("position"),
            l = r.getModel("labelLine"),
            u = t.getItemLayout(e),
            h = u.points,
            c = "inner" === s || "inside" === s || "center" === s;
            if (c) i = "center",
            a = [[n = (h[0][0] + h[1][0] + h[2][0] + h[3][0]) / 4, o = (h[0][1] + h[1][1] + h[2][1] + h[3][1]) / 4], [n, o]];
            else {
                var d, f, p, g = l.get("length");
                "left" === s ? (d = (h[3][0] + h[0][0]) / 2, f = (h[3][1] + h[0][1]) / 2, n = (p = d - g) - 5, i = "right") : (d = (h[1][0] + h[2][0]) / 2, f = (h[1][1] + h[2][1]) / 2, n = (p = d + g) + 5, i = "left");
                var m = f;
                a = [[d, f], [p, m]],
                o = m
            }
            u.label = {
                linePoints: a,
                x: n,
                y: o,
                verticalAlign: "middle",
                textAlign: i,
                inside: c
            }
        })
    }
    function wf(t) {
        if (!t.parallel) {
            var e = !1;
            d(t.series,
            function(t) {
                t && "parallel" === t.type && (e = !0)
            }),
            e && (t.parallel = [{}])
        }
    }
    function bf(t) {
        d(Di(t.parallelAxis),
        function(e) {
            if (w(e)) {
                var i = e.parallelIndex || 0,
                o = Di(t.parallel)[i];
                o && o.parallelAxisDefault && n(e, o.parallelAxisDefault, !1)
            }
        })
    }
    function Sf(t, e) {
        var i = t[e] - t[1 - e];
        return {
            span: Math.abs(i),
            sign: i > 0 ? -1 : i < 0 ? 1 : e ? -1 : 1
        }
    }
    function Mf(t, e) {
        return Math.min(e[1], Math.max(e[0], t))
    }
    function If(t, e, i) {
        this._axesMap = E(),
        this._axesLayout = {},
        this.dimensions = t.dimensions,
        this._rect,
        this._model = t,
        this._init(t, e, i)
    }
    function Tf(t, e) {
        return RL(BL(t, e[0]), e[1])
    }
    function Af(t, e) {
        var i = e.layoutLength / (e.axisCount - 1);
        return {
            position: i * t,
            axisNameAvailableWidth: i,
            axisLabelShow: !0
        }
    }
    function Df(t, e) {
        var i, n, o = e.layoutLength,
        a = e.axisExpandWidth,
        r = e.axisCount,
        s = e.axisCollapseWidth,
        l = e.winInnerIndices,
        u = s,
        h = !1;
        return t < l[0] ? (i = t * s, n = s) : t <= l[1] ? (i = e.axisExpandWindow0Pos + t * a - e.axisExpandWindow[0], u = a, h = !0) : (i = o - (r - 1 - t) * s, n = s),
        {
            position: i,
            axisNameAvailableWidth: u,
            axisLabelShow: h,
            nameTruncateMaxWidth: n
        }
    }
    function Cf(t) {
        aw.call(this),
        this._zr = t,
        this.group = new Zw,
        this._brushType,
        this._brushOption,
        this._panels,
        this._track = [],
        this._dragging,
        this._covers = [],
        this._creatingCover,
        this._creatingPanel,
        this._enableGlobalPan,
        this._uid = "brushController_" + ok++,
        this._handlers = {},
        YL(ak,
        function(t, e) {
            this._handlers[e] = m(t, this)
        },
        this)
    }
    function Lf(t, e) {
        var o = t._zr;
        t._enableGlobalPan || ec(o, tk, t._uid),
        YL(t._handlers,
        function(t, e) {
            o.on(e, t)
        }),
        t._brushType = e.brushType,
        t._brushOption = n(i(nk), e, !0)
    }
    function kf(t) {
        var e = t._zr;
        ic(e, tk, t._uid),
        YL(t._handlers,
        function(t, i) {
            e.off(i, t)
        }),
        t._brushType = t._brushOption = null
    }
    function Pf(t, e) {
        var i = rk[e.brushType].createCover(t, e);
        return i.__brushOption = e,
        zf(i, e),
        t.group.add(i),
        i
    }
    function Nf(t, e) {
        var i = Rf(e);
        return i.endCreating && (i.endCreating(t, e), zf(e, e.__brushOption)),
        e
    }
    function Of(t, e) {
        var i = e.__brushOption;
        Rf(e).updateCoverShape(t, e, i.range, i)
    }
    function zf(t, e) {
        var i = e.z;
        null == i && (i = QL),
        t.traverse(function(t) {
            t.z = i,
            t.z2 = i
        })
    }
    function Ef(t, e) {
        Rf(e).updateCommon(t, e),
        Of(t, e)
    }
    function Rf(t) {
        return rk[t.__brushOption.brushType]
    }
    function Bf(t, e, i) {
        var n = t._panels;
        if (!n) return ! 0;
        var o, a = t._transform;
        return YL(n,
        function(t) {
            t.isTargetByCursor(e, i, a) && (o = t)
        }),
        o
    }
    function Vf(t, e) {
        var i = t._panels;
        if (!i) return ! 0;
        var n = e.__brushOption.panelId;
        return null == n || i[n]
    }
    function Ff(t) {
        var e = t._covers,
        i = e.length;
        return YL(e,
        function(e) {
            t.group.remove(e)
        },
        t),
        e.length = 0,
        !!i
    }
    function Gf(t, e) {
        var n = UL(t._covers,
        function(t) {
            var e = t.__brushOption,
            n = i(e.range);
            return {
                brushType: e.brushType,
                panelId: e.panelId,
                range: n
            }
        });
        t.trigger("brush", n, {
            isEnd: !!e.isEnd,
            removeOnClick: !!e.removeOnClick
        })
    }
    function Wf(t) {
        var e = t._track;
        if (!e.length) return ! 1;
        var i = e[e.length - 1],
        n = e[0],
        o = i[0] - n[0],
        a = i[1] - n[1];
        return KL(o * o + a * a, .5) > JL
    }
    function Hf(t) {
        var e = t.length - 1;
        return e < 0 && (e = 0),
        [t[0], t[e]]
    }
    function Zf(t, e, i, n) {
        var o = new Zw;
        return o.add(new aM({
            name: "main",
            style: Xf(i),
            silent: !0,
            draggable: !0,
            cursor: "move",
            drift: jL(t, e, o, "nswe"),
            ondragend: jL(Gf, e, {
                isEnd: !0
            })
        })),
        YL(n,
        function(i) {
            o.add(new aM({
                name: i,
                style: {
                    opacity: 0
                },
                draggable: !0,
                silent: !0,
                invisible: !0,
                drift: jL(t, e, o, i),
                ondragend: jL(Gf, e, {
                    isEnd: !0
                })
            }))
        }),
        o
    }
    function jf(t, e, i, n) {
        var o = n.brushStyle.lineWidth || 0,
        a = qL(o, $L),
        r = i[0][0],
        s = i[1][0],
        l = r - o / 2,
        u = s - o / 2,
        h = i[0][1],
        c = i[1][1],
        d = h - a + o / 2,
        f = c - a + o / 2,
        p = h - r,
        g = c - s,
        m = p + o,
        v = g + o;
        Uf(t, e, "main", r, s, p, g),
        n.transformable && (Uf(t, e, "w", l, u, a, v), Uf(t, e, "e", d, u, a, v), Uf(t, e, "n", l, u, m, a), Uf(t, e, "s", l, f, m, a), Uf(t, e, "nw", l, u, a, a), Uf(t, e, "ne", d, u, a, a), Uf(t, e, "sw", l, f, a, a), Uf(t, e, "se", d, f, a, a))
    }
    function Yf(t, e) {
        var i = e.__brushOption,
        n = i.transformable,
        o = e.childAt(0);
        o.useStyle(Xf(i)),
        o.attr({
            silent: !n,
            cursor: n ? "move": "default"
        }),
        YL(["w", "e", "n", "s", "se", "sw", "ne", "nw"],
        function(i) {
            var o = e.childOfName(i),
            a = Qf(t, i);
            o && o.attr({
                silent: !n,
                invisible: !n,
                cursor: n ? ik[a] + "-resize": null
            })
        })
    }
    function Uf(t, e, i, n, o, a, r) {
        var s = e.childOfName(i);
        s && s.setShape(ip(ep(t, e, [[n, o], [n + a, o + r]])))
    }
    function Xf(t) {
        return r({
            strokeNoScale: !0
        },
        t.brushStyle)
    }
    function qf(t, e, i, n) {
        var o = [XL(t, i), XL(e, n)],
        a = [qL(t, i), qL(e, n)];
        return [[o[0], a[0]], [o[1], a[1]]]
    }
    function Kf(t) {
        return Mo(t.group)
    }
    function Qf(t, e) {
        if (e.length > 1) return ("e" === (n = [Qf(t, (e = e.split(""))[0]), Qf(t, e[1])])[0] || "w" === n[0]) && n.reverse(),
        n.join("");
        var i = {
            left: "w",
            right: "e",
            top: "n",
            bottom: "s"
        },
        n = To({
            w: "left",
            e: "right",
            n: "top",
            s: "bottom"
        } [e], Kf(t));
        return i[n]
    }
    function Jf(t, e, i, n, o, a, r, s) {
        var l = n.__brushOption,
        u = t(l.range),
        h = tp(i, a, r);
        YL(o.split(""),
        function(t) {
            var e = ek[t];
            u[e[0]][e[1]] += h[e[0]]
        }),
        l.range = e(qf(u[0][0], u[1][0], u[0][1], u[1][1])),
        Ef(i, n),
        Gf(i, {
            isEnd: !1
        })
    }
    function $f(t, e, i, n, o) {
        var a = e.__brushOption.range,
        r = tp(t, i, n);
        YL(a,
        function(t) {
            t[0] += r[0],
            t[1] += r[1]
        }),
        Ef(t, e),
        Gf(t, {
            isEnd: !1
        })
    }
    function tp(t, e, i) {
        var n = t.group,
        o = n.transformCoordToLocal(e, i),
        a = n.transformCoordToLocal(0, 0);
        return [o[0] - a[0], o[1] - a[1]]
    }
    function ep(t, e, n) {
        var o = Vf(t, e);
        return o && !0 !== o ? o.clipPath(n, t._transform) : i(n)
    }
    function ip(t) {
        var e = XL(t[0][0], t[1][0]),
        i = XL(t[0][1], t[1][1]);
        return {
            x: e,
            y: i,
            width: qL(t[0][0], t[1][0]) - e,
            height: qL(t[0][1], t[1][1]) - i
        }
    }
    function np(t, e, i) {
        if (t._brushType) {
            var n = t._zr,
            o = t._covers,
            a = Bf(t, e, i);
            if (!t._dragging) for (var r = 0; r < o.length; r++) {
                var s = o[r].__brushOption;
                if (a && (!0 === a || s.panelId === a.panelId) && rk[s.brushType].contain(o[r], i[0], i[1])) return
            }
            a && n.setCursorStyle("crosshair")
        }
    }
    function op(t) {
        var e = t.event;
        e.preventDefault && e.preventDefault()
    }
    function ap(t, e, i) {
        return t.childOfName("main").contain(e, i)
    }
    function rp(t, e, n, o) {
        var a, r = t._creatingCover,
        s = t._creatingPanel,
        l = t._brushOption;
        if (t._track.push(n.slice()), Wf(t) || r) {
            if (s && !r) {
                "single" === l.brushMode && Ff(t);
                var u = i(l);
                u.brushType = sp(u.brushType, s),
                u.panelId = !0 === s ? null: s.panelId,
                r = t._creatingCover = Pf(t, u),
                t._covers.push(r)
            }
            if (r) {
                var h = rk[sp(t._brushType, s)];
                r.__brushOption.range = h.getCreatingRange(ep(t, r, t._track)),
                o && (Nf(t, r), h.updateCommon(t, r)),
                Of(t, r),
                a = {
                    isEnd: o
                }
            }
        } else o && "single" === l.brushMode && l.removeOnClick && Bf(t, e, n) && Ff(t) && (a = {
            isEnd: o,
            removeOnClick: !0
        });
        return a
    }
    function sp(t, e) {
        return "auto" === t ? e.defaultBrushType: t
    }
    function lp(t) {
        if (this._dragging) {
            op(t);
            var e = rp(this, t, this.group.transformCoordToLocal(t.offsetX, t.offsetY), !0);
            this._dragging = !1,
            this._track = [],
            this._creatingCover = null,
            e && Gf(this, e)
        }
    }
    function up(t) {
        return {
            createCover: function(e, i) {
                return Zf(jL(Jf,
                function(e) {
                    var i = [e, [0, 100]];
                    return t && i.reverse(),
                    i
                },
                function(e) {
                    return e[t]
                }), e, i, [["w", "e"], ["n", "s"]][t])
            },
            getCreatingRange: function(e) {
                var i = Hf(e);
                return [XL(i[0][t], i[1][t]), qL(i[0][t], i[1][t])]
            },
            updateCoverShape: function(e, i, n, o) {
                var a, r = Vf(e, i);
                if (!0 !== r && r.getLinearBrushOtherExtent) a = r.getLinearBrushOtherExtent(t, e._transform);
                else {
                    var s = e._zr;
                    a = [0, [s.getWidth(), s.getHeight()][1 - t]]
                }
                var l = [n, a];
                t && l.reverse(),
                jf(e, i, l, o)
            },
            updateCommon: Yf,
            contain: ap
        }
    }
    function hp(t) {
        return t = fp(t),
        function(e, i) {
            return Do(e, t)
        }
    }
    function cp(t, e) {
        return t = fp(t),
        function(i) {
            var n = null != e ? e: i,
            o = n ? t.width: t.height,
            a = n ? t.x: t.y;
            return [a, a + (o || 0)]
        }
    }
    function dp(t, e, i) {
        return t = fp(t),
        function(n, o, a) {
            return t.contain(o[0], o[1]) && !mc(n, e, i)
        }
    }
    function fp(t) {
        return ue.create(t)
    }
    function pp(t, e, i) {
        return i && "axisAreaSelect" === i.type && e.findComponents({
            mainType: "parallelAxis",
            query: i
        })[0] === t
    }
    function gp(t) {
        var e = t.axis;
        return f(t.activeIntervals,
        function(t) {
            return {
                brushType: "lineX",
                panelId: "pl",
                range: [e.dataToCoord(t[0], !0), e.dataToCoord(t[1], !0)]
            }
        })
    }
    function mp(t, e) {
        return e.getComponent("parallel", t.get("parallelIndex"))
    }
    function vp(t, e) {
        var i = t._model;
        return i.get("axisExpandable") && i.get("axisExpandTriggerOn") === e
    }
    function yp(t, e) {
        if (!t.encodeDefine) {
            var i = e.ecModel.getComponent("parallel", e.get("parallelIndex"));
            if (i) {
                var n = t.encodeDefine = E();
                d(i.dimensions,
                function(t) {
                    var e = xp(t);
                    n.set(t, e)
                })
            }
        }
    }
    function xp(t) {
        return + t.replace("dim", "")
    }
    function _p(t, e, i) {
        var n = t.model,
        o = t.getRect(),
        a = new aM({
            shape: {
                x: o.x,
                y: o.y,
                width: o.width,
                height: o.height
            }
        }),
        r = "horizontal" === n.get("layout") ? "width": "height";
        return a.setShape(r, 0),
        So(a, {
            shape: {
                width: o.width,
                height: o.height
            }
        },
        e, i),
        a
    }
    function wp(t, e, i, n) {
        for (var o = [], a = 0; a < i.length; a++) {
            var r = i[a],
            s = t.get(t.mapDimension(r), e);
            Ip(s, n.getAxis(r).type) || o.push(n.dataToPoint(s, r))
        }
        return o
    }
    function bp(t, e, i, n, o) {
        var a = wp(t, i, n, o),
        r = new oM({
            shape: {
                points: a
            },
            silent: !0,
            z2: 10
        });
        return e.add(r),
        t.setItemGraphicEl(i, r),
        r
    }
    function Sp(t) {
        var e = t.get("smooth", !0);
        return ! 0 === e && (e = hk),
        {
            lineStyle: t.getModel("lineStyle").getLineStyle(),
            smooth: null != e ? e: hk
        }
    }
    function Mp(t, e, i, n) {
        var o = n.lineStyle;
        e.hasItemOption && (o = e.getItemModel(i).getModel("lineStyle").getLineStyle()),
        t.useStyle(o);
        var a = t.style;
        a.fill = null,
        a.stroke = e.getItemVisual(i, "color"),
        a.opacity = e.getItemVisual(i, "opacity"),
        n.smooth && (t.shape.smooth = n.smooth)
    }
    function Ip(t, e) {
        return "category" === e ? null == t: null == t || isNaN(t)
    }
    function Tp(t, e) {
        return t.getVisual("opacity") || t.getModel().get(e)
    }
    function Ap(t, e, i) {
        var n = t.getGraphicEl(),
        o = Tp(t, e);
        null != i && (null == o && (o = 1), o *= i),
        n.downplay && n.downplay(),
        n.traverse(function(t) {
            "group" !== t.type && t.setStyle("opacity", o)
        })
    }
    function Dp(t, e) {
        var i = Tp(t, e),
        n = t.getGraphicEl();
        n.highlight && n.highlight(),
        n.traverse(function(t) {
            "group" !== t.type && t.setStyle("opacity", i)
        })
    }
    function Cp(t, e, i) {
        var n = new aM({
            shape: {
                x: t.x - 10,
                y: t.y - 10,
                width: 0,
                height: t.height + 20
            }
        });
        return So(n, {
            shape: {
                width: t.width + 20,
                height: t.height + 20
            }
        },
        e, i),
        n
    }
    function Lp() {
        function t(e, n) {
            if (n >= i.length) return e;
            for (var o = -1,
            a = e.length,
            r = i[n++], s = {},
            l = {}; ++o < a;) {
                var u = r(e[o]),
                h = l[u];
                h ? h.push(e[o]) : l[u] = [e[o]]
            }
            return d(l,
            function(e, i) {
                s[i] = t(e, n)
            }),
            s
        }
        function e(t, o) {
            if (o >= i.length) return t;
            var a = [],
            r = n[o++];
            return d(t,
            function(t, i) {
                a.push({
                    key: i,
                    values: e(t, o)
                })
            }),
            r ? a.sort(function(t, e) {
                return r(t.key, e.key)
            }) : a
        }
        var i = [],
        n = [];
        return {
            key: function(t) {
                return i.push(t),
                this
            },
            sortKeys: function(t) {
                return n[i.length - 1] = t,
                this
            },
            entries: function(i) {
                return e(t(i, 0), 0)
            }
        }
    }
    function kp(t, e) {
        return la(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        })
    }
    function Pp(t, e, i, n, o, a, r, s) {
        Op(t, e, i, o, a, s),
        Rp(t, e, a, o, n, r, s),
        Xp(t, s)
    }
    function Np(t) {
        d(t,
        function(t) {
            var e = Yp(t.outEdges, jp),
            i = Yp(t.inEdges, jp),
            n = Math.max(e, i);
            t.setLayout({
                value: n
            },
            !0)
        })
    }
    function Op(t, e, i, n, o, a) {
        for (var r = [], s = [], l = [], u = [], h = 0, c = 0; c < e.length; c++) r[c] = 1;
        for (c = 0; c < t.length; c++) s[c] = t[c].inEdges.length,
        0 === s[c] && l.push(t[c]);
        for (; l.length;) {
            for (var d = 0; d < l.length; d++) {
                var f = l[d];
                "vertical" === a ? (f.setLayout({
                    y: h
                },
                !0), f.setLayout({
                    dy: i
                },
                !0)) : (f.setLayout({
                    x: h
                },
                !0), f.setLayout({
                    dx: i
                },
                !0));
                for (var p = 0; p < f.outEdges.length; p++) {
                    var g = f.outEdges[p];
                    r[e.indexOf(g)] = 0;
                    var m = g.node2;
                    0 == --s[t.indexOf(m)] && u.push(m)
                }
            }++h,
            l = u,
            u = []
        }
        for (c = 0; c < r.length; c++);
        zp(t, h, a),
        Ep(t, "vertical" === a ? (o - i) / (h - 1) : (n - i) / (h - 1), a)
    }
    function zp(t, e, i) {
        d(t,
        function(t) {
            t.outEdges.length || ("vertical" === i ? t.setLayout({
                y: e - 1
            },
            !0) : t.setLayout({
                x: e - 1
            },
            !0))
        })
    }
    function Ep(t, e, i) {
        d(t,
        function(t) {
            if ("vertical" === i) {
                var n = t.getLayout().y * e;
                t.setLayout({
                    y: n
                },
                !0)
            } else {
                var o = t.getLayout().x * e;
                t.setLayout({
                    x: o
                },
                !0)
            }
        })
    }
    function Rp(t, e, i, n, o, a, r) {
        var s = Lp().key(Bp(r)).sortKeys(function(t, e) {
            return t - e
        }).entries(t).map(function(t) {
            return t.values
        });
        Vp(t, s, e, i, n, o, r),
        Fp(s, o, i, n, r);
        for (var l = 1; a > 0; a--) Gp(s, l *= .99, r),
        Fp(s, o, i, n, r),
        Up(s, l, r),
        Fp(s, o, i, n, r)
    }
    function Bp(t) {
        return "vertical" === t ?
        function(t) {
            return t.getLayout().y
        }: function(t) {
            return t.getLayout().x
        }
    }
    function Vp(t, e, i, n, o, a, r) {
        var s = [];
        d(e,
        function(t) {
            var e = t.length,
            i = 0,
            l = 0;
            d(t,
            function(t) {
                i += t.getLayout().value
            }),
            l = "vertical" === r ? (o - (e - 1) * a) / i: (n - (e - 1) * a) / i,
            s.push(l)
        }),
        s.sort(function(t, e) {
            return t - e
        });
        var l = s[0];
        d(e,
        function(t) {
            d(t,
            function(t, e) {
                var i = t.getLayout().value * l;
                "vertical" === r ? (t.setLayout({
                    x: e
                },
                !0), t.setLayout({
                    dx: i
                },
                !0)) : (t.setLayout({
                    y: e
                },
                !0), t.setLayout({
                    dy: i
                },
                !0))
            })
        }),
        d(i,
        function(t) {
            var e = +t.getValue() * l;
            t.setLayout({
                dy: e
            },
            !0)
        })
    }
    function Fp(t, e, i, n, o) {
        d(t,
        function(t) {
            var a, r, s, l = 0,
            u = t.length;
            if ("vertical" === o) {
                var h;
                for (t.sort(function(t, e) {
                    return t.getLayout().x - e.getLayout().x
                }), s = 0; s < u; s++)(r = l - (a = t[s]).getLayout().x) > 0 && (h = a.getLayout().x + r, a.setLayout({
                    x: h
                },
                !0)),
                l = a.getLayout().x + a.getLayout().dx + e;
                if ((r = l - e - n) > 0) for (h = a.getLayout().x - r, a.setLayout({
                    x: h
                },
                !0), l = h, s = u - 2; s >= 0; --s)(r = (a = t[s]).getLayout().x + a.getLayout().dx + e - l) > 0 && (h = a.getLayout().x - r, a.setLayout({
                    x: h
                },
                !0)),
                l = a.getLayout().x
            } else {
                var c;
                for (t.sort(function(t, e) {
                    return t.getLayout().y - e.getLayout().y
                }), s = 0; s < u; s++)(r = l - (a = t[s]).getLayout().y) > 0 && (c = a.getLayout().y + r, a.setLayout({
                    y: c
                },
                !0)),
                l = a.getLayout().y + a.getLayout().dy + e;
                if ((r = l - e - i) > 0) for (c = a.getLayout().y - r, a.setLayout({
                    y: c
                },
                !0), l = c, s = u - 2; s >= 0; --s)(r = (a = t[s]).getLayout().y + a.getLayout().dy + e - l) > 0 && (c = a.getLayout().y - r, a.setLayout({
                    y: c
                },
                !0)),
                l = a.getLayout().y
            }
        })
    }
    function Gp(t, e, i) {
        d(t.slice().reverse(),
        function(t) {
            d(t,
            function(t) {
                if (t.outEdges.length) {
                    var n = Yp(t.outEdges, Wp, i) / Yp(t.outEdges, jp, i);
                    if ("vertical" === i) {
                        var o = t.getLayout().x + (n - Zp(t, i)) * e;
                        t.setLayout({
                            x: o
                        },
                        !0)
                    } else {
                        var a = t.getLayout().y + (n - Zp(t, i)) * e;
                        t.setLayout({
                            y: a
                        },
                        !0)
                    }
                }
            })
        })
    }
    function Wp(t, e) {
        return Zp(t.node2, e) * t.getValue()
    }
    function Hp(t, e) {
        return Zp(t.node1, e) * t.getValue()
    }
    function Zp(t, e) {
        return "vertical" === e ? t.getLayout().x + t.getLayout().dx / 2 : t.getLayout().y + t.getLayout().dy / 2
    }
    function jp(t) {
        return t.getValue()
    }
    function Yp(t, e, i) {
        for (var n = 0,
        o = t.length,
        a = -1; ++a < o;) {
            var r = +e.call(t, t[a], i);
            isNaN(r) || (n += r)
        }
        return n
    }
    function Up(t, e, i) {
        d(t,
        function(t) {
            d(t,
            function(t) {
                if (t.inEdges.length) {
                    var n = Yp(t.inEdges, Hp, i) / Yp(t.inEdges, jp, i);
                    if ("vertical" === i) {
                        var o = t.getLayout().x + (n - Zp(t, i)) * e;
                        t.setLayout({
                            x: o
                        },
                        !0)
                    } else {
                        var a = t.getLayout().y + (n - Zp(t, i)) * e;
                        t.setLayout({
                            y: a
                        },
                        !0)
                    }
                }
            })
        })
    }
    function Xp(t, e) {
        d(t,
        function(t) {
            "vertical" === e ? (t.outEdges.sort(function(t, e) {
                return t.node2.getLayout().x - e.node2.getLayout().x
            }), t.inEdges.sort(function(t, e) {
                return t.node1.getLayout().x - e.node1.getLayout().x
            })) : (t.outEdges.sort(function(t, e) {
                return t.node2.getLayout().y - e.node2.getLayout().y
            }), t.inEdges.sort(function(t, e) {
                return t.node1.getLayout().y - e.node1.getLayout().y
            }))
        }),
        d(t,
        function(t) {
            var e = 0,
            i = 0;
            d(t.outEdges,
            function(t) {
                t.setLayout({
                    sy: e
                },
                !0),
                e += t.getLayout().dy
            }),
            d(t.inEdges,
            function(t) {
                t.setLayout({
                    ty: i
                },
                !0),
                i += t.getLayout().dy
            })
        })
    }
    function qp(t, e, i, n, o) {
        var a = t.ends,
        r = new xk({
            shape: {
                points: o ? Qp(a, n, t) : a
            }
        });
        return Kp(t, r, e, i, o),
        r
    }
    function Kp(t, e, i, n, o) {
        var a = i.hostModel; (0, bM[o ? "initProps": "updateProps"])(e, {
            shape: {
                points: t.ends
            }
        },
        a, n);
        var r = i.getItemModel(n),
        s = r.getModel(vk),
        l = i.getItemVisual(n, "color"),
        u = s.getItemStyle(["borderColor"]);
        u.stroke = l,
        u.strokeNoScale = !0,
        e.useStyle(u),
        e.z2 = 100,
        uo(e, r.getModel(yk).getItemStyle())
    }
    function Qp(t, e, i) {
        return f(t,
        function(t) {
            return t = t.slice(),
            t[e] = i.initBaseline,
            t
        })
    }
    function Jp(t) {
        var e = [],
        i = [];
        return t.eachSeriesByType("boxplot",
        function(t) {
            var n = t.getBaseAxis(),
            o = l(i, n);
            o < 0 && (o = i.length, i[o] = n, e[o] = {
                axis: n,
                seriesModels: []
            }),
            e[o].seriesModels.push(t)
        }),
        e
    }
    function $p(t) {
        var e, i, n = t.axis,
        o = t.seriesModels,
        a = o.length,
        r = t.boxWidthList = [],
        s = t.boxOffsetList = [],
        l = [];
        if ("category" === n.type) i = n.getBandWidth();
        else {
            var u = 0;
            wk(o,
            function(t) {
                u = Math.max(u, t.getData().count())
            }),
            e = n.getExtent(),
            Math.abs(e[1] - e[0])
        }
        wk(o,
        function(t) {
            var e = t.get("boxWidth");
            y(e) || (e = [e, e]),
            l.push([Eo(e[0], i) || 0, Eo(e[1], i) || 0])
        });
        var h = .8 * i - 2,
        c = h / a * .3,
        d = (h - c * (a - 1)) / a,
        f = d / 2 - h / 2;
        wk(o,
        function(t, e) {
            s.push(f),
            f += c + d,
            r.push(Math.min(Math.max(d, l[e][0]), l[e][1]))
        })
    }
    function tg(t, e, i) {
        function n(t, i, n) {
            var o = s.get(i, n),
            a = [];
            a[u] = t,
            a[h] = o;
            var l;
            return isNaN(t) || isNaN(o) ? l = [NaN, NaN] : (l = r.dataToPoint(a))[u] += e,
            l
        }
        function o(t, e, i) {
            var n = e.slice(),
            o = e.slice();
            n[u] += l,
            o[u] -= l,
            i ? t.push(n, o) : t.push(o, n)
        }
        function a(t, e) {
            var i = e.slice(),
            n = e.slice();
            i[u] -= l,
            n[u] += l,
            t.push(i, n)
        }
        var r = t.coordinateSystem,
        s = t.getData(),
        l = i / 2,
        u = "horizontal" === t.get("layout") ? 0 : 1,
        h = 1 - u,
        c = ["x", "y"],
        d = s.mapDimension(c[u]),
        f = s.mapDimension(c[h], !0);
        if (! (null == d || f.length < 5)) for (var p = 0; p < s.count(); p++) {
            var g = s.get(d, p),
            m = n(g, f[2], p),
            v = n(g, f[0], p),
            y = n(g, f[1], p),
            x = n(g, f[3], p),
            _ = n(g, f[4], p),
            w = [];
            o(w, y, 0),
            o(w, x, 1),
            w.push(v, y, _, x),
            a(w, v),
            a(w, _),
            a(w, m),
            s.setItemLayout(p, {
                initBaseline: m[h],
                ends: w
            })
        }
    }
    function eg(t, e, i) {
        var n = t.ends;
        return new Ik({
            shape: {
                points: i ? ng(n, t) : n
            },
            z2: 100
        })
    }
    function ig(t, e, i, n) {
        var o = e.getItemModel(i),
        a = o.getModel(bk),
        r = e.getItemVisual(i, "color"),
        s = e.getItemVisual(i, "borderColor") || r,
        l = a.getItemStyle(Mk);
        t.useStyle(l),
        t.style.strokeNoScale = !0,
        t.style.fill = r,
        t.style.stroke = s,
        t.__simpleBox = n,
        uo(t, o.getModel(Sk).getItemStyle())
    }
    function ng(t, e) {
        return f(t,
        function(t) {
            return t = t.slice(),
            t[1] = e.initBaseline,
            t
        })
    }
    function og(t, e, i) {
        var n = t.getData(),
        o = n.getLayout("largePoints"),
        a = new Tk({
            shape: {
                points: o
            },
            __sign: 1
        });
        e.add(a);
        var r = new Tk({
            shape: {
                points: o
            },
            __sign: -1
        });
        e.add(r),
        ag(1, a, t, n),
        ag( - 1, r, t, n),
        i && (a.incremental = !0, r.incremental = !0)
    }
    function ag(t, e, i, n) {
        var o = t > 0 ? "P": "N",
        a = n.getVisual("borderColor" + o) || n.getVisual("color" + o),
        r = i.getModel(bk).getItemStyle(Mk);
        e.useStyle(r),
        e.style.fill = null,
        e.style.stroke = a
    }
    function rg(t, e, i, n, o) {
        return i > n ? -1 : i < n ? 1 : e > 0 ? t.get(o, e - 1) <= n ? 1 : -1 : 1
    }
    function sg(t, e) {
        var i, n = t.getBaseAxis(),
        o = "category" === n.type ? n.getBandWidth() : (i = n.getExtent(), Math.abs(i[1] - i[0]) / e.count()),
        a = Eo(A(t.get("barMaxWidth"), o), o),
        r = Eo(A(t.get("barMinWidth"), 1), o),
        s = t.get("barWidth");
        return null != s ? Eo(s, o) : Math.max(Math.min(o / 2, a), r)
    }
    function lg(t) {
        return y(t) || (t = [ + t, +t]),
        t
    }
    function ug(t, e) {
        t.eachChild(function(t) {
            t.attr({
                z: e.z,
                zlevel: e.zlevel,
                style: {
                    stroke: "stroke" === e.brushType ? e.color: null,
                    fill: "fill" === e.brushType ? e.color: null
                }
            })
        })
    }
    function hg(t, e) {
        Zw.call(this);
        var i = new mu(t, e),
        n = new Zw;
        this.add(i),
        this.add(n),
        n.beforeUpdate = function() {
            this.attr(i.getScale())
        },
        this.updateData(t, e)
    }
    function cg(t) {
        var e = t.data;
        e && e[0] && e[0][0] && e[0][0].coord && (t.data = f(e,
        function(t) {
            var e = {
                coords: [t[0].coord, t[1].coord]
            };
            return t[0].name && (e.fromName = t[0].name),
            t[1].name && (e.toName = t[1].name),
            o([e, t[0], t[1]])
        }))
    }
    function dg(t, e, i) {
        Zw.call(this),
        this.add(this.createLine(t, e, i)),
        this._updateEffectSymbol(t, e)
    }
    function fg(t, e, i) {
        Zw.call(this),
        this._createPolyline(t, e, i)
    }
    function pg(t, e, i) {
        dg.call(this, t, e, i),
        this._lastFrame = 0,
        this._lastFramePercent = 0
    }
    function gg() {
        this.group = new Zw
    }
    function mg(t) {
        return t instanceof Array || (t = [t, t]),
        t
    }
    function vg() {
        var t = X_();
        this.canvas = t,
        this.blurSize = 30,
        this.pointSize = 20,
        this.maxOpacity = 1,
        this.minOpacity = 0,
        this._gradientPixels = {}
    }
    function yg(t, e, i) {
        var n = t[1] - t[0],
        o = (e = f(e,
        function(e) {
            return {
                interval: [(e.interval[0] - t[0]) / n, (e.interval[1] - t[0]) / n]
            }
        })).length,
        a = 0;
        return function(t) {
            for (n = a; n < o; n++) if ((r = e[n].interval)[0] <= t && t <= r[1]) {
                a = n;
                break
            }
            if (n === o) for (var n = a - 1; n >= 0; n--) {
                var r = e[n].interval;
                if (r[0] <= t && t <= r[1]) {
                    a = n;
                    break
                }
            }
            return n >= 0 && n < o && i[n]
        }
    }
    function xg(t, e) {
        var i = t[1] - t[0];
        return e = [(e[0] - t[0]) / i, (e[1] - t[0]) / i],
        function(t) {
            return t >= e[0] && t <= e[1]
        }
    }
    function _g(t) {
        var e = t.dimensions;
        return "lng" === e[0] && "lat" === e[1]
    }
    function wg(t, e, i, n) {
        var o = t.getItemLayout(e),
        a = i.get("symbolRepeat"),
        r = i.get("symbolClip"),
        s = i.get("symbolPosition") || "start",
        l = (i.get("symbolRotate") || 0) * Math.PI / 180 || 0,
        u = i.get("symbolPatternSize") || 2,
        h = i.isAnimationEnabled(),
        c = {
            dataIndex: e,
            layout: o,
            itemModel: i,
            symbolType: t.getItemVisual(e, "symbol") || "circle",
            color: t.getItemVisual(e, "color"),
            symbolClip: r,
            symbolRepeat: a,
            symbolRepeatDirection: i.get("symbolRepeatDirection"),
            symbolPatternSize: u,
            rotation: l,
            animationModel: h ? i: null,
            hoverAnimation: h && i.get("hoverAnimation"),
            z2: i.getShallow("z", !0) || 0
        };
        bg(i, a, o, n, c),
        Mg(t, e, o, a, r, c.boundingLength, c.pxSign, u, n, c),
        Ig(i, c.symbolScale, l, n, c);
        var d = c.symbolSize,
        f = i.get("symbolOffset");
        return y(f) && (f = [Eo(f[0], d[0]), Eo(f[1], d[1])]),
        Tg(i, d, o, a, r, f, s, c.valueLineWidth, c.boundingLength, c.repeatCutLength, n, c),
        c
    }
    function bg(t, e, i, n, o) {
        var a, r = n.valueDim,
        s = t.get("symbolBoundingData"),
        l = n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),
        u = l.toGlobalCoord(l.dataToCoord(0)),
        h = 1 - +(i[r.wh] <= 0);
        if (y(s)) {
            var c = [Sg(l, s[0]) - u, Sg(l, s[1]) - u];
            c[1] < c[0] && c.reverse(),
            a = c[h]
        } else a = null != s ? Sg(l, s) - u: e ? n.coordSysExtent[r.index][h] - u: i[r.wh];
        o.boundingLength = a,
        e && (o.repeatCutLength = i[r.wh]),
        o.pxSign = a > 0 ? 1 : a < 0 ? -1 : 0
    }
    function Sg(t, e) {
        return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))
    }
    function Mg(t, e, i, n, o, a, r, s, l, u) {
        var h = l.valueDim,
        c = l.categoryDim,
        d = Math.abs(i[c.wh]),
        f = t.getItemVisual(e, "symbolSize");
        y(f) ? f = f.slice() : (null == f && (f = "100%"), f = [f, f]),
        f[c.index] = Eo(f[c.index], d),
        f[h.index] = Eo(f[h.index], n ? d: Math.abs(a)),
        u.symbolSize = f,
        (u.symbolScale = [f[0] / s, f[1] / s])[h.index] *= (l.isHorizontal ? -1 : 1) * r
    }
    function Ig(t, e, i, n, o) {
        var a = t.get(Uk) || 0;
        a && (qk.attr({
            scale: e.slice(),
            rotation: i
        }), qk.updateTransform(), a /= qk.getLineScale(), a *= e[n.valueDim.index]),
        o.valueLineWidth = a
    }
    function Tg(t, e, i, n, o, r, s, l, u, h, c, d) {
        var f = c.categoryDim,
        p = c.valueDim,
        g = d.pxSign,
        m = Math.max(e[p.index] + l, 0),
        v = m;
        if (n) {
            var y = Math.abs(u),
            x = T(t.get("symbolMargin"), "15%") + "",
            _ = !1;
            x.lastIndexOf("!") === x.length - 1 && (_ = !0, x = x.slice(0, x.length - 1)),
            x = Eo(x, e[p.index]);
            var w = Math.max(m + 2 * x, 0),
            b = _ ? 0 : 2 * x,
            S = Ko(n),
            M = S ? n: Hg((y + b) / w);
            w = m + 2 * (x = (y - M * m) / 2 / (_ ? M: M - 1)),
            b = _ ? 0 : 2 * x,
            S || "fixed" === n || (M = h ? Hg((Math.abs(h) + b) / w) : 0),
            v = M * w - b,
            d.repeatTimes = M,
            d.symbolMargin = x
        }
        var I = g * (v / 2),
        A = d.pathPosition = [];
        A[f.index] = i[f.wh] / 2,
        A[p.index] = "start" === s ? I: "end" === s ? u - I: u / 2,
        r && (A[0] += r[0], A[1] += r[1]);
        var D = d.bundlePosition = [];
        D[f.index] = i[f.xy],
        D[p.index] = i[p.xy];
        var C = d.barRectShape = a({},
        i);
        C[p.wh] = g * Math.max(Math.abs(i[p.wh]), Math.abs(A[p.index] + I)),
        C[f.wh] = i[f.wh];
        var L = d.clipShape = {};
        L[f.xy] = -i[f.xy],
        L[f.wh] = c.ecSize[f.wh],
        L[p.xy] = 0,
        L[p.wh] = i[p.wh]
    }
    function Ag(t) {
        var e = t.symbolPatternSize,
        i = Yl(t.symbolType, -e / 2, -e / 2, e, e, t.color);
        return i.attr({
            culling: !0
        }),
        "image" !== i.type && i.setStyle({
            strokeNoScale: !0
        }),
        i
    }
    function Dg(t, e, i, n) {
        function o(t) {
            var e = l.slice(),
            n = i.pxSign,
            o = t;
            return ("start" === i.symbolRepeatDirection ? n > 0 : n < 0) && (o = h - 1 - t),
            e[u.index] = d * (o - h / 2 + .5) + l[u.index],
            {
                position: e,
                scale: i.symbolScale.slice(),
                rotation: i.rotation
            }
        }
        var a = t.__pictorialBundle,
        r = i.symbolSize,
        s = i.valueLineWidth,
        l = i.pathPosition,
        u = e.valueDim,
        h = i.repeatTimes || 0,
        c = 0,
        d = r[e.valueDim.index] + s + 2 * i.symbolMargin;
        for (Fg(t,
        function(t) {
            t.__pictorialAnimationIndex = c,
            t.__pictorialRepeatTimes = h,
            c < h ? Gg(t, null, o(c), i, n) : Gg(t, null, {
                scale: [0, 0]
            },
            i, n,
            function() {
                a.remove(t)
            }),
            zg(t, i),
            c++
        }); c < h; c++) {
            var f = Ag(i);
            f.__pictorialAnimationIndex = c,
            f.__pictorialRepeatTimes = h,
            a.add(f);
            var p = o(c);
            Gg(f, {
                position: p.position,
                scale: [0, 0]
            },
            {
                scale: p.scale,
                rotation: p.rotation
            },
            i, n),
            f.on("mouseover",
            function() {
                Fg(t,
                function(t) {
                    t.trigger("emphasis")
                })
            }).on("mouseout",
            function() {
                Fg(t,
                function(t) {
                    t.trigger("normal")
                })
            }),
            zg(f, i)
        }
    }
    function Cg(t, e, i, n) {
        var o = t.__pictorialBundle,
        a = t.__pictorialMainPath;
        a ? Gg(a, null, {
            position: i.pathPosition.slice(),
            scale: i.symbolScale.slice(),
            rotation: i.rotation
        },
        i, n) : (a = t.__pictorialMainPath = Ag(i), o.add(a), Gg(a, {
            position: i.pathPosition.slice(),
            scale: [0, 0],
            rotation: i.rotation
        },
        {
            scale: i.symbolScale.slice()
        },
        i, n), a.on("mouseover",
        function() {
            this.trigger("emphasis")
        }).on("mouseout",
        function() {
            this.trigger("normal")
        })),
        zg(a, i)
    }
    function Lg(t, e, i) {
        var n = a({},
        e.barRectShape),
        o = t.__pictorialBarRect;
        o ? Gg(o, null, {
            shape: n
        },
        e, i) : (o = t.__pictorialBarRect = new aM({
            z2: 2,
            shape: n,
            silent: !0,
            style: {
                stroke: "transparent",
                fill: "transparent",
                lineWidth: 0
            }
        }), t.add(o))
    }
    function kg(t, e, i, n) {
        if (i.symbolClip) {
            var o = t.__pictorialClipPath,
            r = a({},
            i.clipShape),
            s = e.valueDim,
            l = i.animationModel,
            u = i.dataIndex;
            if (o) bo(o, {
                shape: r
            },
            l, u);
            else {
                r[s.wh] = 0,
                o = new aM({
                    shape: r
                }),
                t.__pictorialBundle.setClipPath(o),
                t.__pictorialClipPath = o;
                var h = {};
                h[s.wh] = i.clipShape[s.wh],
                bM[n ? "updateProps": "initProps"](o, {
                    shape: h
                },
                l, u)
            }
        }
    }
    function Pg(t, e) {
        var i = t.getItemModel(e);
        return i.getAnimationDelayParams = Ng,
        i.isAnimationEnabled = Og,
        i
    }
    function Ng(t) {
        return {
            index: t.__pictorialAnimationIndex,
            count: t.__pictorialRepeatTimes
        }
    }
    function Og() {
        return this.parentModel.isAnimationEnabled() && !!this.getShallow("animation")
    }
    function zg(t, e) {
        t.off("emphasis").off("normal");
        var i = e.symbolScale.slice();
        e.hoverAnimation && t.on("emphasis",
        function() {
            this.animateTo({
                scale: [1.1 * i[0], 1.1 * i[1]]
            },
            400, "elasticOut")
        }).on("normal",
        function() {
            this.animateTo({
                scale: i.slice()
            },
            400, "elasticOut")
        })
    }
    function Eg(t, e, i, n) {
        var o = new Zw,
        a = new Zw;
        return o.add(a),
        o.__pictorialBundle = a,
        a.attr("position", i.bundlePosition.slice()),
        i.symbolRepeat ? Dg(o, e, i) : Cg(o, e, i),
        Lg(o, i, n),
        kg(o, e, i, n),
        o.__pictorialShapeStr = Vg(t, i),
        o.__pictorialSymbolMeta = i,
        o
    }
    function Rg(t, e, i) {
        var n = i.animationModel,
        o = i.dataIndex;
        bo(t.__pictorialBundle, {
            position: i.bundlePosition.slice()
        },
        n, o),
        i.symbolRepeat ? Dg(t, e, i, !0) : Cg(t, e, i, !0),
        Lg(t, i, !0),
        kg(t, e, i, !0)
    }
    function Bg(t, e, i, n) {
        var o = n.__pictorialBarRect;
        o && (o.style.text = null);
        var a = [];
        Fg(n,
        function(t) {
            a.push(t)
        }),
        n.__pictorialMainPath && a.push(n.__pictorialMainPath),
        n.__pictorialClipPath && (i = null),
        d(a,
        function(t) {
            bo(t, {
                scale: [0, 0]
            },
            i, e,
            function() {
                n.parent && n.parent.remove(n)
            })
        }),
        t.setItemGraphicEl(e, null)
    }
    function Vg(t, e) {
        return [t.getItemVisual(e.dataIndex, "symbol") || "none", !!e.symbolRepeat, !!e.symbolClip].join(":")
    }
    function Fg(t, e, i) {
        d(t.__pictorialBundle.children(),
        function(n) {
            n !== t.__pictorialBarRect && e.call(i, n)
        })
    }
    function Gg(t, e, i, n, o, a) {
        e && t.attr(e),
        n.symbolClip && !o ? i && t.attr(i) : i && bM[o ? "updateProps": "initProps"](t, i, n.animationModel, n.dataIndex, a)
    }
    function Wg(t, e, i) {
        var n = i.color,
        o = i.dataIndex,
        a = i.itemModel,
        s = a.getModel("itemStyle").getItemStyle(["color"]),
        l = a.getModel("emphasis.itemStyle").getItemStyle(),
        u = a.getShallow("cursor");
        Fg(t,
        function(t) {
            t.setColor(n),
            t.setStyle(r({
                fill: n,
                opacity: i.opacity
            },
            s)),
            uo(t, l),
            u && (t.cursor = u),
            t.z2 = i.z2
        });
        var h = {},
        c = e.valueDim.posDesc[ + (i.boundingLength > 0)],
        d = t.__pictorialBarRect;
        Th(d.style, h, a, n, e.seriesModel, o, c),
        uo(d, h)
    }
    function Hg(t) {
        var e = Math.round(t);
        return Math.abs(t - e) < 1e-4 ? e: Math.ceil(t)
    }
    function Zg(t, e, i) {
        this.dimension = "single",
        this.dimensions = ["single"],
        this._axis = null,
        this._rect,
        this._init(t, e, i),
        this.model = t
    }
    function jg(t, e) {
        e = e || {};
        var i = t.coordinateSystem,
        n = t.axis,
        o = {},
        a = n.position,
        r = n.orient,
        s = i.getRect(),
        l = [s.x, s.x + s.width, s.y, s.y + s.height],
        u = {
            horizontal: {
                top: l[2],
                bottom: l[3]
            },
            vertical: {
                left: l[0],
                right: l[1]
            }
        };
        o.position = ["vertical" === r ? u.vertical[a] : l[0], "horizontal" === r ? u.horizontal[a] : l[3]];
        var h = {
            horizontal: 0,
            vertical: 1
        };
        o.rotation = Math.PI / 2 * h[r];
        var c = {
            top: -1,
            bottom: 1,
            right: 1,
            left: -1
        };
        o.labelDirection = o.tickDirection = o.nameDirection = c[a],
        t.get("axisTick.inside") && (o.tickDirection = -o.tickDirection),
        T(e.labelInside, t.get("axisLabel.inside")) && (o.labelDirection = -o.labelDirection);
        var d = e.rotate;
        return null == d && (d = t.get("axisLabel.rotate")),
        o.labelRotation = "top" === a ? -d: d,
        o.z2 = 1,
        o
    }
    function Yg(t, e, i, n, o) {
        var r = t.axis;
        if (!r.scale.isBlank() && r.containData(e)) if (t.involveSeries) {
            var s = Ug(e, t),
            l = s.payloadBatch,
            u = s.snapToValue;
            l[0] && null == o.seriesIndex && a(o, l[0]),
            !n && t.snap && r.containData(u) && null != u && (e = u),
            i.showPointer(t, e, l, o),
            i.showTooltip(t, s, u)
        } else i.showPointer(t, e)
    }
    function Ug(t, e) {
        var i = e.axis,
        n = i.dim,
        o = t,
        a = [],
        r = Number.MAX_VALUE,
        s = -1;
        return iP(e.seriesModels,
        function(e, l) {
            var u, h, c = e.getData().mapDimension(n, !0);
            if (e.getAxisTooltipData) {
                var d = e.getAxisTooltipData(c, t, i);
                h = d.dataIndices,
                u = d.nestestValue
            } else {
                if (! (h = e.getData().indicesOfNearest(c[0], t, "category" === i.type ? .5 : null)).length) return;
                u = e.getData().get(c[0], h[0])
            }
            if (null != u && isFinite(u)) {
                var f = t - u,
                p = Math.abs(f);
                p <= r && ((p < r || f >= 0 && s < 0) && (r = p, s = f, o = u, a.length = 0), iP(h,
                function(t) {
                    a.push({
                        seriesIndex: e.seriesIndex,
                        dataIndexInside: t,
                        dataIndex: e.getData().getRawIndex(t)
                    })
                }))
            }
        }),
        {
            payloadBatch: a,
            snapToValue: o
        }
    }
    function Xg(t, e, i, n) {
        t[e.key] = {
            value: i,
            payloadBatch: n
        }
    }
    function qg(t, e, i, n) {
        var o = i.payloadBatch,
        a = e.axis,
        r = a.model,
        s = e.axisPointerModel;
        if (e.triggerTooltip && o.length) {
            var l = e.coordSys.model,
            u = bh(l),
            h = t.map[u];
            h || (h = t.map[u] = {
                coordSysId: l.id,
                coordSysIndex: l.componentIndex,
                coordSysType: l.type,
                coordSysMainType: l.mainType,
                dataByAxis: []
            },
            t.list.push(h)),
            h.dataByAxis.push({
                axisDim: a.dim,
                axisIndex: r.componentIndex,
                axisType: r.type,
                axisId: r.id,
                value: n,
                valueLabelOpt: {
                    precision: s.get("label.precision"),
                    formatter: s.get("label.formatter")
                },
                seriesDataIndices: o.slice()
            })
        }
    }
    function Kg(t, e, i) {
        var n = i.axesInfo = [];
        iP(e,
        function(e, i) {
            var o = e.axisPointerModel.option,
            a = t[i];
            a ? (!e.useHandle && (o.status = "show"), o.value = a.value, o.seriesDataIndices = (a.payloadBatch || []).slice()) : !e.useHandle && (o.status = "hide"),
            "show" === o.status && n.push({
                axisDim: e.axis.dim,
                axisIndex: e.axis.model.componentIndex,
                value: o.value
            })
        })
    }
    function Qg(t, e, i, n) {
        if (!em(e) && t.list.length) {
            var o = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
            n({
                type: "showTip",
                escapeConnect: !0,
                x: e[0],
                y: e[1],
                tooltipOption: i.tooltipOption,
                position: i.position,
                dataIndexInside: o.dataIndexInside,
                dataIndex: o.dataIndex,
                seriesIndex: o.seriesIndex,
                dataByCoordSys: t.list
            })
        } else n({
            type: "hideTip"
        })
    }
    function Jg(t, e, i) {
        var n = i.getZr(),
        o = oP(n).axisPointerLastHighlights || {},
        a = oP(n).axisPointerLastHighlights = {};
        iP(t,
        function(t, e) {
            var i = t.axisPointerModel.option;
            "show" === i.status && iP(i.seriesDataIndices,
            function(t) {
                var e = t.seriesIndex + " | " + t.dataIndex;
                a[e] = t
            })
        });
        var r = [],
        s = [];
        d(o,
        function(t, e) { ! a[e] && s.push(t)
        }),
        d(a,
        function(t, e) { ! o[e] && r.push(t)
        }),
        s.length && i.dispatchAction({
            type: "downplay",
            escapeConnect: !0,
            batch: s
        }),
        r.length && i.dispatchAction({
            type: "highlight",
            escapeConnect: !0,
            batch: r
        })
    }
    function $g(t, e) {
        for (var i = 0; i < (t || []).length; i++) {
            var n = t[i];
            if (e.axis.dim === n.axisDim && e.axis.model.componentIndex === n.axisIndex) return n
        }
    }
    function tm(t) {
        var e = t.axis.model,
        i = {},
        n = i.axisDim = t.axis.dim;
        return i.axisIndex = i[n + "AxisIndex"] = e.componentIndex,
        i.axisName = i[n + "AxisName"] = e.name,
        i.axisId = i[n + "AxisId"] = e.id,
        i
    }
    function em(t) {
        return ! t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1])
    }
    function im(t, e, i) {
        if (!R_.node) {
            var n = e.getZr();
            aP(n).records || (aP(n).records = {}),
            nm(n, e),
            (aP(n).records[t] || (aP(n).records[t] = {})).handler = i
        }
    }
    function nm(t, e) {
        function i(i, n) {
            t.on(i,
            function(i) {
                var o = sm(e);
                rP(aP(t).records,
                function(t) {
                    t && n(t, i, o.dispatchAction)
                }),
                om(o.pendings, e)
            })
        }
        aP(t).initialized || (aP(t).initialized = !0, i("click", v(rm, "click")), i("mousemove", v(rm, "mousemove")), i("globalout", am))
    }
    function om(t, e) {
        var i, n = t.showTip.length,
        o = t.hideTip.length;
        n ? i = t.showTip[n - 1] : o && (i = t.hideTip[o - 1]),
        i && (i.dispatchAction = null, e.dispatchAction(i))
    }
    function am(t, e, i) {
        t.handler("leave", null, i)
    }
    function rm(t, e, i, n) {
        e.handler(t, i, n)
    }
    function sm(t) {
        var e = {
            showTip: [],
            hideTip: []
        },
        i = function(n) {
            var o = e[n.type];
            o ? o.push(n) : (n.dispatchAction = i, t.dispatchAction(n))
        };
        return {
            dispatchAction: i,
            pendings: e
        }
    }
    function lm(t, e) {
        if (!R_.node) {
            var i = e.getZr(); (aP(i).records || {})[t] && (aP(i).records[t] = null)
        }
    }
    function um() {}
    function hm(t, e, i, n) {
        cm(lP(i).lastProp, n) || (lP(i).lastProp = n, e ? bo(i, n, t) : (i.stopAnimation(), i.attr(n)))
    }
    function cm(t, e) {
        if (w(t) && w(e)) {
            var i = !0;
            return d(e,
            function(e, n) {
                i = i && cm(t[n], e)
            }),
            !!i
        }
        return t === e
    }
    function dm(t, e) {
        t[e.get("label.show") ? "show": "hide"]()
    }
    function fm(t) {
        return {
            position: t.position.slice(),
            rotation: t.rotation || 0
        }
    }
    function pm(t, e, i) {
        var n = e.get("z"),
        o = e.get("zlevel");
        t && t.traverse(function(t) {
            "group" !== t.type && (null != n && (t.z = n), null != o && (t.zlevel = o), t.silent = i)
        })
    }
    function gm(t) {
        var e, i = t.get("type"),
        n = t.getModel(i + "Style");
        return "line" === i ? (e = n.getLineStyle()).fill = null: "shadow" === i && ((e = n.getAreaStyle()).stroke = null),
        e
    }
    function mm(t, e, i, n, o) {
        var a = ym(i.get("value"), e.axis, e.ecModel, i.get("seriesDataIndices"), {
            precision: i.get("label.precision"),
            formatter: i.get("label.formatter")
        }),
        r = i.getModel("label"),
        s = OM(r.get("padding") || 0),
        l = r.getFont(),
        u = De(a, l),
        h = o.position,
        c = u.width + s[1] + s[3],
        d = u.height + s[0] + s[2],
        f = o.align;
        "right" === f && (h[0] -= c),
        "center" === f && (h[0] -= c / 2);
        var p = o.verticalAlign;
        "bottom" === p && (h[1] -= d),
        "middle" === p && (h[1] -= d / 2),
        vm(h, c, d, n);
        var g = r.get("backgroundColor");
        g && "auto" !== g || (g = e.get("axisLine.lineStyle.color")),
        t.label = {
            shape: {
                x: 0,
                y: 0,
                width: c,
                height: d,
                r: r.get("borderRadius")
            },
            position: h.slice(),
            style: {
                text: a,
                textFont: l,
                textFill: r.getTextColor(),
                textPosition: "inside",
                fill: g,
                stroke: r.get("borderColor") || "transparent",
                lineWidth: r.get("borderWidth") || 0,
                shadowBlur: r.get("shadowBlur"),
                shadowColor: r.get("shadowColor"),
                shadowOffsetX: r.get("shadowOffsetX"),
                shadowOffsetY: r.get("shadowOffsetY")
            },
            z2: 10
        }
    }
    function vm(t, e, i, n) {
        var o = n.getWidth(),
        a = n.getHeight();
        t[0] = Math.min(t[0] + e, o) - e,
        t[1] = Math.min(t[1] + i, a) - i,
        t[0] = Math.max(t[0], 0),
        t[1] = Math.max(t[1], 0)
    }
    function ym(t, e, i, n, o) {
        t = e.scale.parse(t);
        var a = e.scale.getLabel(t, {
            precision: o.precision
        }),
        r = o.formatter;
        if (r) {
            var s = {
                value: Wl(e, t),
                seriesData: []
            };
            d(n,
            function(t) {
                var e = i.getSeriesByIndex(t.seriesIndex),
                n = t.dataIndexInside,
                o = e && e.getDataParams(n);
                o && s.seriesData.push(o)
            }),
            _(r) ? a = r.replace("{value}", a) : x(r) && (a = r(s))
        }
        return a
    }
    function xm(t, e, i) {
        var n = mt();
        return wt(n, n, i.rotation),
        _t(n, n, i.position),
        Io([t.dataToCoord(e), (i.labelOffset || 0) + (i.labelDirection || 1) * (i.labelMargin || 0)], n)
    }
    function _m(t, e, i, n, o, a) {
        var r = ID.innerTextLayout(i.rotation, 0, i.labelDirection);
        i.labelMargin = o.get("label.margin"),
        mm(e, n, o, a, {
            position: xm(n.axis, t, i),
            align: r.textAlign,
            verticalAlign: r.textVerticalAlign
        })
    }
    function wm(t, e, i) {
        return i = i || 0,
        {
            x1: t[i],
            y1: t[1 - i],
            x2: e[i],
            y2: e[1 - i]
        }
    }
    function bm(t, e, i) {
        return i = i || 0,
        {
            x: t[i],
            y: t[1 - i],
            width: e[i],
            height: e[1 - i]
        }
    }
    function Sm(t, e, i, n, o, a) {
        return {
            cx: t,
            cy: e,
            r0: i,
            r: n,
            startAngle: o,
            endAngle: a,
            clockwise: !0
        }
    }
    function Mm(t, e) {
        var i = {};
        return i[e.dim + "AxisIndex"] = e.index,
        t.getCartesian(i)
    }
    function Im(t) {
        return "x" === t.dim ? 0 : 1
    }
    function Tm(t) {
        return t.isHorizontal() ? 0 : 1
    }
    function Am(t, e) {
        var i = t.getRect();
        return [i[fP[e]], i[fP[e]] + i[pP[e]]]
    }
    function Dm(t, e, i) {
        var n = new aM({
            shape: {
                x: t.x - 10,
                y: t.y - 10,
                width: 0,
                height: t.height + 20
            }
        });
        return So(n, {
            shape: {
                width: t.width + 20,
                height: t.height + 20
            }
        },
        e, i),
        n
    }
    function Cm(t, e, i) {
        if (t.count()) for (var n, o = e.coordinateSystem,
        a = e.getLayerSeries(), r = t.mapDimension("single"), s = t.mapDimension("value"), l = f(a,
        function(e) {
            return f(e.indices,
            function(e) {
                var i = o.dataToPoint(t.get(r, e));
                return i[1] = t.get(s, e),
                i
            })
        }), u = Lm(l), h = u.y0, c = i / u.max, d = a.length, p = a[0].indices.length, g = 0; g < p; ++g) {
            n = h[g] * c,
            t.setItemLayout(a[0].indices[g], {
                layerIndex: 0,
                x: l[0][g][0],
                y0: n,
                y: l[0][g][1] * c
            });
            for (var m = 1; m < d; ++m) n += l[m - 1][g][1] * c,
            t.setItemLayout(a[m].indices[g], {
                layerIndex: m,
                x: l[m][g][0],
                y0: n,
                y: l[m][g][1] * c
            })
        }
    }
    function Lm(t) {
        for (var e = t.length,
        i = t[0].length, n = [], o = [], a = 0, r = {},
        s = 0; s < i; ++s) {
            for (var l = 0,
            u = 0; l < e; ++l) u += t[l][s][1];
            u > a && (a = u),
            n.push(u)
        }
        for (var h = 0; h < i; ++h) o[h] = (a - n[h]) / 2;
        a = 0;
        for (var c = 0; c < i; ++c) {
            var d = n[c] + o[c];
            d > a && (a = d)
        }
        return r.y0 = o,
        r.max = a,
        r
    }
    function km(t) {
        var e = 0;
        d(t.children,
        function(t) {
            km(t);
            var i = t.value;
            y(i) && (i = i[0]),
            e += i
        });
        var i = t.value;
        y(i) && (i = i[0]),
        (null == i || isNaN(i)) && (i = e),
        i < 0 && (i = 0),
        y(t.value) ? t.value[0] = i: t.value = i
    }
    function Pm(t, e, i) {
        function n() {
            r.ignore = r.hoverIgnore
        }
        function o() {
            r.ignore = r.normalIgnore
        }
        Zw.call(this);
        var a = new $S({
            z2: xP
        });
        a.seriesIndex = e.seriesIndex;
        var r = new qS({
            z2: _P,
            silent: t.getModel("label").get("silent")
        });
        this.add(a),
        this.add(r),
        this.updateData(!0, t, "normal", e, i),
        this.on("emphasis", n).on("normal", o).on("mouseover", n).on("mouseout", o)
    }
    function Nm(t, e, i) {
        var n = t.getVisual("color"),
        o = t.getVisual("visualMeta");
        o && 0 !== o.length || (n = null);
        var a = t.getModel("itemStyle").get("color");
        if (a) return a;
        if (n) return n;
        if (0 === t.depth) return i.option.color[0];
        var r = i.option.color.length;
        return a = i.option.color[Om(t) % r]
    }
    function Om(t) {
        for (var e = t; e.depth > 1;) e = e.parentNode;
        return l(t.getAncestors()[0].children, e)
    }
    function zm(t, e, i) {
        return i !== yP.NONE && (i === yP.SELF ? t === e: i === yP.ANCESTOR ? t === e || t.isAncestorOf(e) : t === e || t.isDescendantOf(e))
    }
    function Em(t, e) {
        var i = t.children || [];
        t.children = Rm(i, e),
        i.length && d(t.children,
        function(t) {
            Em(t, e)
        })
    }
    function Rm(t, e) {
        if ("function" == typeof e) return t.sort(e);
        var i = "asc" === e;
        return t.sort(function(t, e) {
            var n = (t.getValue() - e.getValue()) * (i ? 1 : -1);
            return 0 === n ? (t.dataIndex - e.dataIndex) * (i ? -1 : 1) : n
        })
    }
    function Bm(t, e) {
        return e = e || [0, 0],
        f(["x", "y"],
        function(i, n) {
            var o = this.getAxis(i),
            a = e[n],
            r = t[n] / 2;
            return "category" === o.type ? o.getBandWidth() : Math.abs(o.dataToCoord(a - r) - o.dataToCoord(a + r))
        },
        this)
    }
    function Vm(t, e) {
        return e = e || [0, 0],
        f([0, 1],
        function(i) {
            var n = e[i],
            o = t[i] / 2,
            a = [],
            r = [];
            return a[i] = n - o,
            r[i] = n + o,
            a[1 - i] = r[1 - i] = e[1 - i],
            Math.abs(this.dataToPoint(a)[i] - this.dataToPoint(r)[i])
        },
        this)
    }
    function Fm(t, e) {
        var i = this.getAxis(),
        n = e instanceof Array ? e[0] : e,
        o = (t instanceof Array ? t[0] : t) / 2;
        return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - o) - i.dataToCoord(n + o))
    }
    function Gm(t, e) {
        return f(["Radius", "Angle"],
        function(i, n) {
            var o = this["get" + i + "Axis"](),
            a = e[n],
            r = t[n] / 2,
            s = "dataTo" + i,
            l = "category" === o.type ? o.getBandWidth() : Math.abs(o[s](a - r) - o[s](a + r));
            return "Angle" === i && (l = l * Math.PI / 180),
            l
        },
        this)
    }
    function Wm(t) {
        var e, i = t.type;
        if ("path" === i) {
            var n = t.shape,
            o = null != n.width && null != n.height ? {
                x: n.x || 0,
                y: n.y || 0,
                width: n.width,
                height: n.height
            }: null,
            a = tv(n); (e = Wn(a, null, o, n.layout || "center")).__customPathData = a
        } else "image" === i ? (e = new hi({})).__customImagePath = t.style.image: "text" === i ? (e = new qS({})).__customText = t.style.text: e = new(0, bM[i.charAt(0).toUpperCase() + i.slice(1)]);
        return e.__customGraphicType = i,
        e.name = t.name,
        e
    }
    function Hm(t, e, n, o, a, r, s) {
        var l = {},
        u = n.style || {};
        if (n.shape && (l.shape = i(n.shape)), n.position && (l.position = n.position.slice()), n.scale && (l.scale = n.scale.slice()), n.origin && (l.origin = n.origin.slice()), n.rotation && (l.rotation = n.rotation), "image" === t.type && n.style && (h = l.style = {},
        d(["x", "y", "width", "height"],
        function(e) {
            Zm(e, h, u, t.style, r)
        })), "text" === t.type && n.style) {
            var h = l.style = {};
            d(["x", "y"],
            function(e) {
                Zm(e, h, u, t.style, r)
            }),
            !u.hasOwnProperty("textFill") && u.fill && (u.textFill = u.fill),
            !u.hasOwnProperty("textStroke") && u.stroke && (u.textStroke = u.stroke)
        }
        if ("group" !== t.type && (t.useStyle(u), r)) {
            t.style.opacity = 0;
            var c = u.opacity;
            null == c && (c = 1),
            So(t, {
                style: {
                    opacity: c
                }
            },
            o, e)
        }
        r ? t.attr(l) : bo(t, l, o, e),
        n.hasOwnProperty("z2") && t.attr("z2", n.z2 || 0),
        n.hasOwnProperty("silent") && t.attr("silent", n.silent),
        n.hasOwnProperty("invisible") && t.attr("invisible", n.invisible),
        n.hasOwnProperty("ignore") && t.attr("ignore", n.ignore),
        n.hasOwnProperty("info") && t.attr("info", n.info);
        var f = n.styleEmphasis,
        p = !1 === f;
        t.__cusHasEmphStl && null == f || !t.__cusHasEmphStl && p || (no(t, f), t.__cusHasEmphStl = !p),
        s && ho(t, !p)
    }
    function Zm(t, e, i, n, o) {
        null == i[t] || o || (e[t] = i[t], i[t] = n[t])
    }
    function jm(t, e, i, n) {
        function o(t) {
            null == t && (t = h),
            v && (c = e.getItemModel(t), d = c.getModel(AP), f = c.getModel(DP), p = e.getItemVisual(t, "color"), v = !1)
        }
        var s = t.get("renderItem"),
        l = t.coordinateSystem,
        u = {};
        l && (u = l.prepareCustoms ? l.prepareCustoms() : LP[l.type](l));
        var h, c, d, f, p, g = r({
            getWidth: n.getWidth,
            getHeight: n.getHeight,
            getZr: n.getZr,
            getDevicePixelRatio: n.getDevicePixelRatio,
            value: function(t, i) {
                return null == i && (i = h),
                e.get(e.getDimension(t || 0), i)
            },
            style: function(i, n) {
                null == n && (n = h),
                o(n);
                var r = c.getModel(IP).getItemStyle();
                null != p && (r.fill = p);
                var s = e.getItemVisual(n, "opacity");
                return null != s && (r.opacity = s),
                fo(r, d, null, {
                    autoColor: p,
                    isRectText: !0
                }),
                r.text = d.getShallow("show") ? A(t.getFormattedLabel(n, "normal"), gu(e, n)) : null,
                i && a(r, i),
                r
            },
            styleEmphasis: function(i, n) {
                null == n && (n = h),
                o(n);
                var r = c.getModel(TP).getItemStyle();
                return fo(r, f, null, {
                    isRectText: !0
                },
                !0),
                r.text = f.getShallow("show") ? D(t.getFormattedLabel(n, "emphasis"), t.getFormattedLabel(n, "normal"), gu(e, n)) : null,
                i && a(r, i),
                r
            },
            visual: function(t, i) {
                return null == i && (i = h),
                e.getItemVisual(i, t)
            },
            barLayout: function(t) {
                if (l.getBaseAxis) return Tl(r({
                    axis: l.getBaseAxis()
                },
                t), n)
            },
            currentSeriesIndices: function() {
                return i.getCurrentSeriesIndices()
            },
            font: function(t) {
                return _o(t, i)
            }
        },
        u.api || {}),
        m = {
            context: {},
            seriesId: t.id,
            seriesName: t.name,
            seriesIndex: t.seriesIndex,
            coordSys: u.coordSys,
            dataInsideLength: e.count(),
            encode: Ym(t.getData())
        },
        v = !0;
        return function(t, i) {
            return h = t,
            v = !0,
            s && s(r({
                dataIndexInside: t,
                dataIndex: e.getRawIndex(t),
                actionType: i ? i.type: null
            },
            m), g)
        }
    }
    function Ym(t) {
        var e = {};
        return d(t.dimensions,
        function(i, n) {
            var o = t.getDimensionInfo(i);
            if (!o.isExtraCoord) {
                var a = o.coordDim; (e[a] = e[a] || [])[o.coordDimIndex] = n
            }
        }),
        e
    }
    function Um(t, e, i, n, o, a) {
        return (t = Xm(t, e, i, n, o, a, !0)) && a.setItemGraphicEl(e, t),
        t
    }
    function Xm(t, e, i, n, o, a, r) {
        var s = !i,
        l = (i = i || {}).type,
        u = i.shape,
        h = i.style;
        if (t && (s || null != l && l !== t.__customGraphicType || "path" === l && ev(u) && tv(u) !== t.__customPathData || "image" === l && iv(h, "image") && h.image !== t.__customImagePath || "text" === l && iv(u, "text") && h.text !== t.__customText) && (o.remove(t), t = null), !s) {
            var c = !t;
            return ! t && (t = Wm(i)),
            Hm(t, e, i, n, a, c, r),
            "group" === l && qm(t, e, i, n, a),
            o.add(t),
            t
        }
    }
    function qm(t, e, i, n, o) {
        var a = i.children,
        r = a ? a.length: 0,
        s = i.$mergeChildren,
        l = "byName" === s || i.diffChildrenByName,
        u = !1 === s;
        if (r || l || u) if (l) Km({
            oldChildren: t.children() || [],
            newChildren: a || [],
            dataIndex: e,
            animatableModel: n,
            group: t,
            data: o
        });
        else {
            u && t.removeAll();
            for (var h = 0; h < r; h++) a[h] && Xm(t.childAt(h), e, a[h], n, t, o)
        }
    }
    function Km(t) {
        new Hs(t.oldChildren, t.newChildren, Qm, Qm, t).add(Jm).update(Jm).remove($m).execute()
    }
    function Qm(t, e) {
        var i = t && t.name;
        return null != i ? i: CP + e
    }
    function Jm(t, e) {
        var i = this.context,
        n = null != t ? i.newChildren[t] : null;
        Xm(null != e ? i.oldChildren[e] : null, i.dataIndex, n, i.animatableModel, i.group, i.data)
    }
    function $m(t) {
        var e = this.context,
        i = e.oldChildren[t];
        i && e.group.remove(i)
    }
    function tv(t) {
        return t && (t.pathData || t.d)
    }
    function ev(t) {
        return t && (t.hasOwnProperty("pathData") || t.hasOwnProperty("d"))
    }
    function iv(t, e) {
        return t && t.hasOwnProperty(e)
    }
    function nv(t, e, i, n) {
        var o = i.type,
        a = new(0, bM[o.charAt(0).toUpperCase() + o.slice(1)])(i);
        e.add(a),
        n.set(t, a),
        a.__ecGraphicId = t
    }
    function ov(t, e) {
        var i = t && t.parent;
        i && ("group" === t.type && t.traverse(function(t) {
            ov(t, e)
        }), e.removeKey(t.__ecGraphicId), i.remove(t))
    }
    function av(t) {
        return t = a({},
        t),
        d(["id", "parentId", "$action", "hv", "bounding"].concat(HM),
        function(e) {
            delete t[e]
        }),
        t
    }
    function rv(t, e) {
        var i;
        return d(e,
        function(e) {
            null != t[e] && "auto" !== t[e] && (i = !0)
        }),
        i
    }
    function sv(t, e) {
        var i = t.exist;
        if (e.id = t.keyInfo.id, !e.type && i && (e.type = i.type), null == e.parentId) {
            var n = e.parentOption;
            n ? e.parentId = n.id: i && (e.parentId = i.parentId)
        }
        e.parentOption = null
    }
    function lv(t, e, i) {
        var o = a({},
        i),
        r = t[e],
        s = i.$action || "merge";
        "merge" === s ? r ? (n(r, o, !0), ca(r, o, {
            ignoreSize: !0
        }), fa(i, r)) : t[e] = o: "replace" === s ? t[e] = o: "remove" === s && r && (t[e] = null)
    }
    function uv(t, e) {
        t && (t.hv = e.hv = [rv(e, ["left", "right"]), rv(e, ["top", "bottom"])], "group" === t.type && (null == t.width && (t.width = e.width = 0), null == t.height && (t.height = e.height = 0)))
    }
    function hv(t, e, i) {
        var n = t.eventData;
        t.silent || t.ignore || n || (n = t.eventData = {
            componentType: "graphic",
            componentIndex: e.componentIndex,
            name: t.name
        }),
        n && (n.info = t.info)
    }
    function cv(t, e, i) {
        var n, o = {},
        a = "toggleSelected" === t;
        return i.eachComponent("legend",
        function(i) {
            a && null != n ? i[n ? "select": "unSelect"](e.name) : (i[t](e.name), n = i.isSelected(e.name)),
            d(i.getData(),
            function(t) {
                var e = t.get("name");
                if ("\n" !== e && "" !== e) {
                    var n = i.isSelected(e);
                    o.hasOwnProperty(e) ? o[e] = o[e] && n: o[e] = n
                }
            })
        }),
        {
            name: e.name,
            selected: o
        }
    }
    function dv(t, e, i) {
        var n = e.getBoxLayoutParams(),
        o = e.get("padding"),
        a = {
            width: i.getWidth(),
            height: i.getHeight()
        },
        r = la(n, a, o);
        jM(e.get("orient"), t, e.get("itemGap"), r.width, r.height),
        ua(t, n, a, o)
    }
    function fv(t, e) {
        var i = OM(e.get("padding")),
        n = e.getItemStyle(["color", "opacity"]);
        return n.fill = e.get("backgroundColor"),
        t = new aM({
            shape: {
                x: t.x - i[3],
                y: t.y - i[0],
                width: t.width + i[1] + i[3],
                height: t.height + i[0] + i[2],
                r: e.get("borderRadius")
            },
            style: n,
            silent: !0,
            z2: -1
        })
    }
    function pv(t, e) {
        e.dispatchAction({
            type: "legendToggleSelect",
            name: t
        })
    }
    function gv(t, e, i, n) {
        var o = i.getZr().storage.getDisplayList()[0];
        o && o.useHoverLayer || i.dispatchAction({
            type: "highlight",
            seriesName: t,
            name: e,
            excludeSeriesId: n
        })
    }
    function mv(t, e, i, n) {
        var o = i.getZr().storage.getDisplayList()[0];
        o && o.useHoverLayer || i.dispatchAction({
            type: "downplay",
            seriesName: t,
            name: e,
            excludeSeriesId: n
        })
    }
    function vv(t, e, i) {
        var n = [1, 1];
        n[t.getOrient().index] = 0,
        ca(e, i, {
            type: "box",
            ignoreSize: n
        })
    }
    function yv(t) {
        var e = "left " + t + "s cubic-bezier(0.23, 1, 0.32, 1),top " + t + "s cubic-bezier(0.23, 1, 0.32, 1)";
        return f(ZP,
        function(t) {
            return t + "transition:" + e
        }).join(";")
    }
    function xv(t) {
        var e = [],
        i = t.get("fontSize"),
        n = t.getTextColor();
        return n && e.push("color:" + n),
        e.push("font:" + t.getFont()),
        i && e.push("line-height:" + Math.round(3 * i / 2) + "px"),
        WP(["decoration", "align"],
        function(i) {
            var n = t.get(i);
            n && e.push("text-" + i + ":" + n)
        }),
        e.join(";")
    }
    function _v(t) {
        var e = [],
        i = t.get("transitionDuration"),
        n = t.get("backgroundColor"),
        o = t.getModel("textStyle"),
        a = t.get("padding");
        return i && e.push(yv(i)),
        n && (R_.canvasSupported ? e.push("background-Color:" + n) : (e.push("background-Color:#" + Gt(n)), e.push("filter:alpha(opacity=70)"))),
        WP(["width", "color", "radius"],
        function(i) {
            var n = "border-" + i,
            o = HP(n),
            a = t.get(o);
            null != a && e.push(n + ":" + a + ("color" === i ? "": "px"))
        }),
        e.push(xv(o)),
        null != a && e.push("padding:" + OM(a).join("px ") + "px"),
        e.join(";") + ";"
    }
    function wv(t, e) {
        if (R_.wxa) return null;
        var i = document.createElement("div"),
        n = this._zr = e.getZr();
        this.el = i,
        this._x = e.getWidth() / 2,
        this._y = e.getHeight() / 2,
        t.appendChild(i),
        this._container = t,
        this._show = !1,
        this._hideTimeout;
        var o = this;
        i.onmouseenter = function() {
            o._enterable && (clearTimeout(o._hideTimeout), o._show = !0),
            o._inContent = !0
        },
        i.onmousemove = function(e) {
            if (e = e || window.event, !o._enterable) {
                var i = n.handler;
                lt(t, e, !0),
                i.dispatch("mousemove", e)
            }
        },
        i.onmouseleave = function() {
            o._enterable && o._show && o.hideLater(o._hideDelay),
            o._inContent = !1
        }
    }
    function bv(t) {
        this._zr = t.getZr(),
        this._show = !1,
        this._hideTimeout
    }
    function Sv(t) {
        for (var e = t.pop(); t.length;) {
            var i = t.pop();
            i && (Lo.isInstance(i) && (i = i.get("tooltip", !0)), "string" == typeof i && (i = {
                formatter: i
            }), e = new Lo(i, e, e.ecModel))
        }
        return e
    }
    function Mv(t, e) {
        return t.dispatchAction || m(e.dispatchAction, e)
    }
    function Iv(t, e, i, n, o, a, r) {
        var s = i.getOuterSize(),
        l = s.width,
        u = s.height;
        return null != a && (t + l + a > n ? t -= l + a: t += a),
        null != r && (e + u + r > o ? e -= u + r: e += r),
        [t, e]
    }
    function Tv(t, e, i, n, o) {
        var a = i.getOuterSize(),
        r = a.width,
        s = a.height;
        return t = Math.min(t + r, n) - r,
        e = Math.min(e + s, o) - s,
        t = Math.max(t, 0),
        e = Math.max(e, 0),
        [t, e]
    }
    function Av(t, e, i) {
        var n = i[0],
        o = i[1],
        a = 0,
        r = 0,
        s = e.width,
        l = e.height;
        switch (t) {
        case "inside":
            a = e.x + s / 2 - n / 2,
            r = e.y + l / 2 - o / 2;
            break;
        case "top":
            a = e.x + s / 2 - n / 2,
            r = e.y - o - 5;
            break;
        case "bottom":
            a = e.x + s / 2 - n / 2,
            r = e.y + l + 5;
            break;
        case "left":
            a = e.x - n - 5,
            r = e.y + l / 2 - o / 2;
            break;
        case "right":
            a = e.x + s + 5,
            r = e.y + l / 2 - o / 2
        }
        return [a, r]
    }
    function Dv(t) {
        return "center" === t || "middle" === t
    }
    function Cv(t) {
        return t.get("stack") || "__ec_stack_" + t.seriesIndex
    }
    function Lv(t) {
        return t.dim
    }
    function kv(t, e) {
        var i = {};
        d(t,
        function(t, e) {
            var n = t.getData(),
            o = t.coordinateSystem.getBaseAxis(),
            a = o.getExtent(),
            r = "category" === o.type ? o.getBandWidth() : Math.abs(a[1] - a[0]) / n.count(),
            s = i[Lv(o)] || {
                bandWidth: r,
                remainedWidth: r,
                autoWidthCount: 0,
                categoryGap: "20%",
                gap: "30%",
                stacks: {}
            },
            l = s.stacks;
            i[Lv(o)] = s;
            var u = Cv(t);
            l[u] || s.autoWidthCount++,
            l[u] = l[u] || {
                width: 0,
                maxWidth: 0
            };
            var h = Eo(t.get("barWidth"), r),
            c = Eo(t.get("barMaxWidth"), r),
            d = t.get("barGap"),
            f = t.get("barCategoryGap");
            h && !l[u].width && (h = Math.min(s.remainedWidth, h), l[u].width = h, s.remainedWidth -= h),
            c && (l[u].maxWidth = c),
            null != d && (s.gap = d),
            null != f && (s.categoryGap = f)
        });
        var n = {};
        return d(i,
        function(t, e) {
            n[e] = {};
            var i = t.stacks,
            o = t.bandWidth,
            a = Eo(t.categoryGap, o),
            r = Eo(t.gap, 1),
            s = t.remainedWidth,
            l = t.autoWidthCount,
            u = (s - a) / (l + (l - 1) * r);
            u = Math.max(u, 0),
            d(i,
            function(t, e) {
                var i = t.maxWidth;
                i && i < u && (i = Math.min(i, s), t.width && (i = Math.min(i, t.width)), s -= i, t.width = i, l--)
            }),
            u = (s - a) / (l + (l - 1) * r),
            u = Math.max(u, 0);
            var h, c = 0;
            d(i,
            function(t, e) {
                t.width || (t.width = u),
                h = t,
                c += t.width * (1 + r)
            }),
            h && (c -= h.width * r);
            var f = -c / 2;
            d(i,
            function(t, i) {
                n[e][i] = n[e][i] || {
                    offset: f,
                    width: t.width
                },
                f += t.width * (1 + r)
            })
        }),
        n
    }
    function Pv(t, e) {
        HA.call(this, "radius", t, e),
        this.type = "category"
    }
    function Nv(t, e) {
        e = e || [0, 360],
        HA.call(this, "angle", t, e),
        this.type = "category"
    }
    function Ov(t, e) {
        return e.type || (e.data ? "category": "value")
    }
    function zv(t, e, i) {
        var n = e.get("center"),
        o = i.getWidth(),
        a = i.getHeight();
        t.cx = Eo(n[0], o),
        t.cy = Eo(n[1], a);
        var r = t.getRadiusAxis(),
        s = Math.min(o, a) / 2,
        l = Eo(e.get("radius"), s);
        r.inverse ? r.setExtent(l, 0) : r.setExtent(0, l)
    }
    function Ev(t, e) {
        var i = this,
        n = i.getAngleAxis(),
        o = i.getRadiusAxis();
        if (n.scale.setExtent(1 / 0, -1 / 0), o.scale.setExtent(1 / 0, -1 / 0), t.eachSeries(function(t) {
            if (t.coordinateSystem === i) {
                var e = t.getData();
                d(e.mapDimension("radius", !0),
                function(t) {
                    o.scale.unionExtentFromData(e, cl(e, t))
                }),
                d(e.mapDimension("angle", !0),
                function(t) {
                    n.scale.unionExtentFromData(e, cl(e, t))
                })
            }
        }), Bl(n.scale, n.model), Bl(o.scale, o.model), "category" === n.type && !n.onBand) {
            var a = n.getExtent(),
            r = 360 / n.scale.count();
            n.inverse ? a[1] += r: a[1] -= r,
            n.setExtent(a[0], a[1])
        }
    }
    function Rv(t, e) {
        if (t.type = e.get("type"), t.scale = Vl(e), t.onBand = e.get("boundaryGap") && "category" === t.type, t.inverse = e.get("inverse"), "angleAxis" === e.mainType) {
            t.inverse ^= e.get("clockwise");
            var i = e.get("startAngle");
            t.setExtent(i, i + (t.inverse ? -360 : 360))
        }
        e.axis = t,
        t.model = e
    }
    function Bv(t, e, i) {
        e[1] > e[0] && (e = e.slice().reverse());
        var n = t.coordToPoint([e[0], i]),
        o = t.coordToPoint([e[1], i]);
        return {
            x1: n[0],
            y1: n[1],
            x2: o[0],
            y2: o[1]
        }
    }
    function Vv(t) {
        return t.getRadiusAxis().inverse ? 0 : 1
    }
    function Fv(t) {
        var e = t[0],
        i = t[t.length - 1];
        e && i && Math.abs(Math.abs(e.coord - i.coord) - 360) < 1e-4 && t.pop()
    }
    function Gv(t, e, i) {
        return {
            position: [t.cx, t.cy],
            rotation: i / 180 * Math.PI,
            labelDirection: -1,
            tickDirection: -1,
            nameDirection: 1,
            labelRotate: e.getModel("axisLabel").get("rotate"),
            z2: 1
        }
    }
    function Wv(t, e, i, n, o) {
        var a = e.axis,
        r = a.dataToCoord(t),
        s = n.getAngleAxis().getExtent()[0];
        s = s / 180 * Math.PI;
        var l, u, h, c = n.getRadiusAxis().getExtent();
        if ("radius" === a.dim) {
            var d = mt();
            wt(d, d, s),
            _t(d, d, [n.cx, n.cy]),
            l = Io([r, -o], d);
            var f = e.getModel("axisLabel").get("rotate") || 0,
            p = ID.innerTextLayout(s, f * Math.PI / 180, -1);
            u = p.textAlign,
            h = p.textVerticalAlign
        } else {
            var g = c[1];
            l = n.coordToPoint([g + o, r]);
            var m = n.cx,
            v = n.cy;
            u = Math.abs(l[0] - m) / g < .3 ? "center": l[0] > m ? "left": "right",
            h = Math.abs(l[1] - v) / g < .3 ? "middle": l[1] > v ? "top": "bottom"
        }
        return {
            position: l,
            align: u,
            verticalAlign: h
        }
    }
    function Hv(t, e) {
        e.update = "updateView",
        Ps(e,
        function(e, i) {
            var n = {};
            return i.eachComponent({
                mainType: "geo",
                query: e
            },
            function(i) {
                i[t](e.name),
                d(i.coordinateSystem.regions,
                function(t) {
                    n[t.name] = i.isSelected(t.name) || !1
                })
            }),
            {
                selected: n,
                name: e.name
            }
        })
    }
    function Zv(t) {
        var e = {};
        d(t,
        function(t) {
            e[t] = 1
        }),
        t.length = 0,
        d(e,
        function(e, i) {
            t.push(i)
        })
    }
    function jv(t) {
        if (t) for (var e in t) if (t.hasOwnProperty(e)) return ! 0
    }
    function Yv(t, e, n) {
        function o() {
            var t = function() {};
            return t.prototype.__hidden = t.prototype,
            new t
        }
        var a = {};
        return rN(e,
        function(e) {
            var r = a[e] = o();
            rN(t[e],
            function(t, o) {
                if (UC.isValidType(o)) {
                    var a = {
                        type: o,
                        visual: t
                    };
                    n && n(a, e),
                    r[o] = new UC(a),
                    "opacity" === o && ((a = i(a)).type = "colorAlpha", r.__hidden.__alphaForOpacity = new UC(a))
                }
            })
        }),
        a
    }
    function Uv(t, e, n) {
        var o;
        d(n,
        function(t) {
            e.hasOwnProperty(t) && jv(e[t]) && (o = !0)
        }),
        o && d(n,
        function(n) {
            e.hasOwnProperty(n) && jv(e[n]) ? t[n] = i(e[n]) : delete t[n]
        })
    }
    function Xv(t, e, i, n, o, a) {
        function r(t) {
            return i.getItemVisual(h, t)
        }
        function s(t, e) {
            i.setItemVisual(h, t, e)
        }
        function l(t, l) {
            h = null == a ? t: l;
            var c = i.getRawDataItem(h);
            if (!c || !1 !== c.visualMap) for (var d = n.call(o, t), f = e[d], p = u[d], g = 0, m = p.length; g < m; g++) {
                var v = p[g];
                f[v] && f[v].applyVisual(t, r, s)
            }
        }
        var u = {};
        d(t,
        function(t) {
            var i = UC.prepareVisualTypes(e[t]);
            u[t] = i
        });
        var h;
        null == a ? i.each(l) : i.each([a], l)
    }
    function qv(t, e, i, n) {
        var o = {};
        return d(t,
        function(t) {
            var i = UC.prepareVisualTypes(e[t]);
            o[t] = i
        }),
        {
            progress: function(t, a) {
                null != n && (n = a.getDimension(n));
                for (var r; null != (r = t.next());) {
                    var s = a.getRawDataItem(r);
                    if (s && !1 === s.visualMap) return;
                    for (var l = null != n ? a.get(n, r, !0) : r, u = i(l), h = e[u], c = o[u], d = 0, f = c.length; d < f; d++) {
                        var p = c[d];
                        h[p] && h[p].applyVisual(l,
                        function(t) {
                            return a.getItemVisual(r, t)
                        },
                        function(t, e) {
                            a.setItemVisual(r, t, e)
                        })
                    }
                }
            }
        }
    }
    function Kv(t) {
        var e = ["x", "y"],
        i = ["width", "height"];
        return {
            point: function(e, i, n) {
                if (e) {
                    var o = n.range;
                    return Qv(e[t], o)
                }
            },
            rect: function(n, o, a) {
                if (n) {
                    var r = a.range,
                    s = [n[e[t]], n[e[t]] + n[i[t]]];
                    return s[1] < s[0] && s.reverse(),
                    Qv(s[0], r) || Qv(s[1], r) || Qv(r[0], s) || Qv(r[1], s)
                }
            }
        }
    }
    function Qv(t, e) {
        return e[0] <= t && t <= e[1]
    }
    function Jv(t, e, i, n, o) {
        for (var a = 0,
        r = o[o.length - 1]; a < o.length; a++) {
            var s = o[a];
            if ($v(t, e, i, n, s[0], s[1], r[0], r[1])) return ! 0;
            r = s
        }
    }
    function $v(t, e, i, n, o, a, r, s) {
        var l = ey(i - t, o - r, n - e, a - s);
        if (ty(l)) return ! 1;
        var u = ey(o - t, o - r, a - e, a - s) / l;
        if (u < 0 || u > 1) return ! 1;
        var h = ey(i - t, o - t, n - e, a - e) / l;
        return ! (h < 0 || h > 1)
    }
    function ty(t) {
        return t <= 1e-6 && t >= -1e-6
    }
    function ey(t, e, i, n) {
        return t * n - e * i
    }
    function iy(t, e, i) {
        var n = this._targetInfoList = [],
        o = {},
        a = oy(e, t);
        lN(pN,
        function(t, e) { (!i || !i.include || uN(i.include, e) >= 0) && t(a, n, o)
        })
    }
    function ny(t) {
        return t[0] > t[1] && t.reverse(),
        t
    }
    function oy(t, e) {
        return Vi(t, e, {
            includeMainTypes: dN
        })
    }
    function ay(t, e, i, n) {
        var o = i.getAxis(["x", "y"][t]),
        a = ny(f([0, 1],
        function(t) {
            return e ? o.coordToData(o.toLocalCoord(n[t])) : o.toGlobalCoord(o.dataToCoord(n[t]))
        })),
        r = [];
        return r[t] = a,
        r[1 - t] = [NaN, NaN],
        {
            values: a,
            xyMinMax: r
        }
    }
    function ry(t, e, i, n) {
        return [e[0] - n[t] * i[0], e[1] - n[t] * i[1]]
    }
    function sy(t, e) {
        var i = ly(t),
        n = ly(e),
        o = [i[0] / n[0], i[1] / n[1]];
        return isNaN(o[0]) && (o[0] = 1),
        isNaN(o[1]) && (o[1] = 1),
        o
    }
    function ly(t) {
        return t ? [t[0][1] - t[0][0], t[1][1] - t[1][0]] : [NaN, NaN]
    }
    function uy(t, e, i, n, o) {
        if (o) {
            var a = t.getZr();
            a[wN] || (a[_N] || (a[_N] = hy), Lr(a, _N, i, e)(t, n))
        }
    }
    function hy(t, e) {
        if (!t.isDisposed()) {
            var i = t.getZr();
            i[wN] = !0,
            t.dispatchAction({
                type: "brushSelect",
                batch: e
            }),
            i[wN] = !1
        }
    }
    function cy(t, e, i, n) {
        for (var o = 0,
        a = e.length; o < a; o++) {
            var r = e[o];
            if (t[r.brushType](n, i, r.selectors, r)) return ! 0
        }
    }
    function dy(t) {
        var e = t.brushSelector;
        if (_(e)) {
            var i = [];
            return d(sN,
            function(t, n) {
                i[n] = function(i, n, o, a) {
                    var r = n.getItemLayout(i);
                    return t[e](r, o, a)
                }
            }),
            i
        }
        if (x(e)) {
            var n = {};
            return d(sN,
            function(t, i) {
                n[i] = e
            }),
            n
        }
        return e
    }
    function fy(t, e) {
        var i = t.option.seriesIndex;
        return null != i && "all" !== i && (y(i) ? l(i, e) < 0 : e !== i)
    }
    function py(t) {
        var e = t.selectors = {};
        return d(sN[t.brushType],
        function(i, n) {
            e[n] = function(n) {
                return i(n, e, t)
            }
        }),
        t
    }
    function gy(t) {
        return new ue(t[0][0], t[1][0], t[0][1] - t[0][0], t[1][1] - t[1][0])
    }
    function my(t, e) {
        return n({
            brushType: t.brushType,
            brushMode: t.brushMode,
            transformable: t.transformable,
            brushStyle: new Lo(t.brushStyle).getItemStyle(),
            removeOnClick: t.removeOnClick,
            z: t.z
        },
        e, !0)
    }
    function vy(t, e, i, n) { (!n || n.$from !== t.id) && this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice())
    }
    function yy(t, e) {
        IN[t] = e
    }
    function xy(t) {
        return IN[t]
    }
    function _y(t, e, i) {
        this.model = t,
        this.ecModel = e,
        this.api = i,
        this._brushType,
        this._brushMode
    }
    function wy(t, e, i) {
        this._model = t
    }
    function by(t, e, i, n) {
        var o = i.calendarModel,
        a = i.seriesModel,
        r = o ? o.coordinateSystem: a ? a.coordinateSystem: null;
        return r === this ? r[t](n) : null
    }
    function Sy(t, e) {
        var i = t.cellSize;
        y(i) ? 1 === i.length && (i[1] = i[0]) : i = t.cellSize = [i, i];
        var n = f([0, 1],
        function(t) {
            return ha(e, t) && (i[t] = "auto"),
            null != i[t] && "auto" !== i[t]
        });
        ca(t, e, {
            type: "box",
            ignoreSize: n
        })
    }
    function My(t) {
        return l(kN, t) >= 0
    }
    function Iy(t, e, i) {
        function n(t, e) {
            return l(e.nodes, t) >= 0
        }
        function o(t, n) {
            var o = !1;
            return e(function(e) {
                d(i(t, e) || [],
                function(t) {
                    n.records[e.name][t] && (o = !0)
                })
            }),
            o
        }
        function a(t, n) {
            n.nodes.push(t),
            e(function(e) {
                d(i(t, e) || [],
                function(t) {
                    n.records[e.name][t] = !0
                })
            })
        }
        return function(i) {
            var r = {
                nodes: [],
                records: {}
            };
            if (e(function(t) {
                r.records[t.name] = {}
            }), !i) return r;
            a(i, r);
            var s;
            do {
                s = !1, t(function(t) { ! n(t, r) && o(t, r) && (a(t, r), s = !0)
                })
            } while ( s );
            return r
        }
    }
    function Ty(t, e, i) {
        var n = [1 / 0, -1 / 0];
        return NN(i,
        function(t) {
            var i = t.getData();
            i && NN(i.mapDimension(e, !0),
            function(t) {
                var e = i.getApproximateExtent(t);
                e[0] < n[0] && (n[0] = e[0]),
                e[1] > n[1] && (n[1] = e[1])
            })
        }),
        n[1] < n[0] && (n = [NaN, NaN]),
        Ay(t, n),
        n
    }
    function Ay(t, e) {
        var i = t.getAxisModel(),
        n = i.getMin(!0),
        o = "category" === i.get("type"),
        a = o && i.getCategories().length;
        null != n && "dataMin" !== n && "function" != typeof n ? e[0] = n: o && (e[0] = a > 0 ? 0 : NaN);
        var r = i.getMax(!0);
        return null != r && "dataMax" !== r && "function" != typeof r ? e[1] = r: o && (e[1] = a > 0 ? a - 1 : NaN),
        i.get("scale", !0) || (e[0] > 0 && (e[0] = 0), e[1] < 0 && (e[1] = 0)),
        e
    }
    function Dy(t, e) {
        var i = t.getAxisModel(),
        n = t._percentWindow,
        o = t._valueWindow;
        if (n) {
            var a = Go(o, [0, 500]);
            a = Math.min(a, 20);
            var r = e || 0 === n[0] && 100 === n[1];
            i.setRange(r ? null: +o[0].toFixed(a), r ? null: +o[1].toFixed(a))
        }
    }
    function Cy(t) {
        var e = t._minMaxSpan = {},
        i = t._dataZoomModel;
        NN(["min", "max"],
        function(n) {
            e[n + "Span"] = i.get(n + "Span");
            var o = i.get(n + "ValueSpan");
            if (null != o && (e[n + "ValueSpan"] = o, null != (o = t.getAxisModel().axis.scale.parse(o)))) {
                var a = t._dataExtent;
                e[n + "Span"] = zo(a[0] + o, a, [0, 100], !0)
            }
        })
    }
    function Ly(t) {
        var e = {};
        return EN(["start", "end", "startValue", "endValue", "throttle"],
        function(i) {
            t.hasOwnProperty(i) && (e[i] = t[i])
        }),
        e
    }
    function ky(t, e) {
        var i = t._rangePropMode,
        n = t.get("rangeMode");
        EN([["start", "startValue"], ["end", "endValue"]],
        function(t, o) {
            var a = null != e[t[0]],
            r = null != e[t[1]];
            a && !r ? i[o] = "percent": !a && r ? i[o] = "value": n ? i[o] = n[o] : a && (i[o] = "percent")
        })
    }
    function Py(t) {
        return {
            x: "y",
            y: "x",
            radius: "angle",
            angle: "radius"
        } [t]
    }
    function Ny(t) {
        return "vertical" === t ? "ns-resize": "ew-resize"
    }
    function Oy(t, e) {
        var i = Ry(t),
        n = e.dataZoomId,
        o = e.coordId;
        d(i,
        function(t, i) {
            var a = t.dataZoomInfos;
            a[n] && l(e.allCoordIds, o) < 0 && (delete a[n], t.count--)
        }),
        Vy(i);
        var a = i[o];
        a || ((a = i[o] = {
            coordId: o,
            dataZoomInfos: {},
            count: 0
        }).controller = By(t, a), a.dispatchAction = v(Fy, t)),
        !a.dataZoomInfos[n] && a.count++,
        a.dataZoomInfos[n] = e;
        var r = Gy(a.dataZoomInfos);
        a.controller.enable(r.controlType, r.opt),
        a.controller.setPointerChecker(e.containsPoint),
        Lr(a, "dispatchAction", e.dataZoomModel.get("throttle", !0), "fixRate")
    }
    function zy(t, e) {
        var i = Ry(t);
        d(i,
        function(t) {
            t.controller.dispose();
            var i = t.dataZoomInfos;
            i[e] && (delete i[e], t.count--)
        }),
        Vy(i)
    }
    function Ey(t) {
        return t.type + "\0_" + t.id
    }
    function Ry(t) {
        var e = t.getZr();
        return e[qN] || (e[qN] = {})
    }
    function By(t, e) {
        var i = new ac(t.getZr());
        return d(["pan", "zoom", "scrollMove"],
        function(t) {
            i.on(t,
            function(i) {
                var n = [];
                d(e.dataZoomInfos,
                function(o) {
                    if (i.isAvailableBehavior(o.dataZoomModel.option)) {
                        var a = (o.getRange || {})[t],
                        r = a && a(e.controller, i); ! o.dataZoomModel.get("disabled", !0) && r && n.push({
                            dataZoomId: o.dataZoomId,
                            start: r[0],
                            end: r[1]
                        })
                    }
                }),
                n.length && e.dispatchAction(n)
            })
        }),
        i
    }
    function Vy(t) {
        d(t,
        function(e, i) {
            e.count || (e.controller.dispose(), delete t[i])
        })
    }
    function Fy(t, e) {
        t.dispatchAction({
            type: "dataZoom",
            batch: e
        })
    }
    function Gy(t) {
        var e, i = {
            type_true: 2,
            type_move: 1,
            type_false: 0,
            type_undefined: -1
        },
        n = !0;
        return d(t,
        function(t) {
            var o = t.dataZoomModel,
            a = !o.get("disabled", !0) && (!o.get("zoomLock", !0) || "move");
            i["type_" + a] > i["type_" + e] && (e = a),
            n &= o.get("preventDefaultMouseMove", !0)
        }),
        {
            controlType: e,
            opt: {
                zoomOnMouseWheel: !0,
                moveOnMouseMove: !0,
                moveOnMouseWheel: !0,
                preventDefaultMouseMove: !!n
            }
        }
    }
    function Wy(t) {
        return function(e, i, n, o) {
            var a = this._range,
            r = a.slice(),
            s = e.axisModels[0];
            if (s) {
                var l = t(r, s, e, i, n, o);
                return zL(l, r, [0, 100], "all"),
                this._range = r,
                a[0] !== r[0] || a[1] !== r[1] ? r: void 0
            }
        }
    }
    function Hy(t, e) {
        return t && t.hasOwnProperty && t.hasOwnProperty(e)
    }
    function Zy(t, e, i, n) {
        for (var o = e.targetVisuals[n], a = UC.prepareVisualTypes(o), r = {
            color: t.getData().getVisual("color")
        },
        s = 0, l = a.length; s < l; s++) {
            var u = a[s],
            h = o["opacity" === u ? "__alphaForOpacity": u];
            h && h.applyVisual(i,
            function(t) {
                return r[t]
            },
            function(t, e) {
                r[t] = e
            })
        }
        return r.color
    }
    function jy(t, e, i) {
        if (i[0] === i[1]) return i.slice();
        for (var n = (i[1] - i[0]) / 200, o = i[0], a = [], r = 0; r <= 200 && o < i[1]; r++) a.push(o),
        o += n;
        return a.push(i[1]),
        a
    }
    function Yy(t, e, i) {
        var n = t.option,
        o = n.align;
        if (null != o && "auto" !== o) return o;
        for (var a = {
            width: e.getWidth(),
            height: e.getHeight()
        },
        r = "horizontal" === n.orient ? 1 : 0, s = [["left", "right", "width"], ["top", "bottom", "height"]], l = s[r], u = [0, null, 10], h = {},
        c = 0; c < 3; c++) h[s[1 - r][c]] = u[c],
        h[l[c]] = 2 === c ? i[0] : n[l[c]];
        var d = [["x", "width", 3], ["y", "height", 0]][r],
        f = la(h, a, n.padding);
        return l[(f.margin[d[2]] || 0) + f[d[0]] + .5 * f[d[1]] < .5 * a[d[1]] ? 0 : 1]
    }
    function Uy(t) {
        return d(t || [],
        function(e) {
            null != t.dataIndex && (t.dataIndexInside = t.dataIndex, t.dataIndex = null)
        }),
        t
    }
    function Xy(t, e, i, n) {
        return new nM({
            shape: {
                points: t
            },
            draggable: !!i,
            cursor: e,
            drift: i,
            onmousemove: function(t) {
                lw(t.event)
            },
            ondragend: n
        })
    }
    function qy(t, e) {
        return 0 === t ? [[0, 0], [e, 0], [e, -e]] : [[0, 0], [e, 0], [e, e]]
    }
    function Ky(t, e, i, n) {
        return t ? [[0, -yO(e, xO(i, 0))], [wO, 0], [0, yO(e, xO(n - i, 0))]] : [[0, 0], [5, -5], [5, 5]]
    }
    function Qy(t, e, i) {
        var n = _O / 2,
        o = t.get("hoverLinkDataSize");
        return o && (n = mO(o, e, i, !0) / 2),
        n
    }
    function Jy(t) {
        var e = t.get("hoverLinkOnHandle");
        return !! (null == e ? t.get("realtime") : e)
    }
    function $y(t) {
        return "vertical" === t ? "ns-resize": "ew-resize"
    }
    function tx(t, e) {
        var i = t.inverse; ("vertical" === t.orient ? !i: i) && e.reverse()
    }
    function ex(t) {
        Ci(t, "label", ["show"])
    }
    function ix(t) {
        return ! (isNaN(parseFloat(t.x)) && isNaN(parseFloat(t.y)))
    }
    function nx(t) {
        return ! isNaN(parseFloat(t.x)) && !isNaN(parseFloat(t.y))
    }
    function ox(t, e, i, n, o, a) {
        var r = [],
        s = hl(e, n) ? e.getCalculationInfo("stackResultDimension") : n,
        l = hx(e, s, t),
        u = e.indicesOfNearest(s, l)[0];
        r[o] = e.get(i, u),
        r[a] = e.get(n, u);
        var h = Vo(e.get(n, u));
        return (h = Math.min(h, 20)) >= 0 && (r[a] = +r[a].toFixed(h)),
        r
    }
    function ax(t, e) {
        var n = t.getData(),
        o = t.coordinateSystem;
        if (e && !nx(e) && !y(e.coord) && o) {
            var a = o.dimensions,
            r = rx(e, n, o, t);
            if ((e = i(e)).type && LO[e.type] && r.baseAxis && r.valueAxis) {
                var s = DO(a, r.baseAxis.dim),
                l = DO(a, r.valueAxis.dim);
                e.coord = LO[e.type](n, r.baseDataDim, r.valueDataDim, s, l),
                e.value = e.coord[l]
            } else {
                for (var u = [null != e.xAxis ? e.xAxis: e.radiusAxis, null != e.yAxis ? e.yAxis: e.angleAxis], h = 0; h < 2; h++) LO[u[h]] && (u[h] = hx(n, n.mapDimension(a[h]), u[h]));
                e.coord = u
            }
        }
        return e
    }
    function rx(t, e, i, n) {
        var o = {};
        return null != t.valueIndex || null != t.valueDim ? (o.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) : t.valueDim, o.valueAxis = i.getAxis(sx(n, o.valueDataDim)), o.baseAxis = i.getOtherAxis(o.valueAxis), o.baseDataDim = e.mapDimension(o.baseAxis.dim)) : (o.baseAxis = n.getBaseAxis(), o.valueAxis = i.getOtherAxis(o.baseAxis), o.baseDataDim = e.mapDimension(o.baseAxis.dim), o.valueDataDim = e.mapDimension(o.valueAxis.dim)),
        o
    }
    function sx(t, e) {
        var i = t.getData(),
        n = i.dimensions;
        e = i.getDimension(e);
        for (var o = 0; o < n.length; o++) {
            var a = i.getDimensionInfo(n[o]);
            if (a.name === e) return a.coordDim
        }
    }
    function lx(t, e) {
        return ! (t && t.containData && e.coord && !ix(e)) || t.containData(e.coord)
    }
    function ux(t, e, i, n) {
        return n < 2 ? t.coord && t.coord[n] : t.value
    }
    function hx(t, e, i) {
        if ("average" === i) {
            var n = 0,
            o = 0;
            return t.each(e,
            function(t, e) {
                isNaN(t) || (n += t, o++)
            }),
            n / o
        }
        return "median" === i ? t.getMedian(e) : t.getDataExtent(e, !0)["max" === i ? 1 : 0]
    }
    function cx(t, e, i) {
        var n = e.coordinateSystem;
        t.each(function(o) {
            var a, r = t.getItemModel(o),
            s = Eo(r.get("x"), i.getWidth()),
            l = Eo(r.get("y"), i.getHeight());
            if (isNaN(s) || isNaN(l)) {
                if (e.getMarkerPosition) a = e.getMarkerPosition(t.getValues(t.dimensions, o));
                else if (n) {
                    var u = t.get(n.dimensions[0], o),
                    h = t.get(n.dimensions[1], o);
                    a = n.dataToPoint([u, h])
                }
            } else a = [s, l];
            isNaN(s) || (a[0] = s),
            isNaN(l) || (a[1] = l),
            t.setItemLayout(o, a)
        })
    }
    function dx(t, e, i) {
        var n;
        n = t ? f(t && t.dimensions,
        function(t) {
            return r({
                name: t
            },
            e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {})
        }) : [{
            name: "value",
            type: "float"
        }];
        var o = new eA(n, i),
        a = f(i.get("data"), v(ax, e));
        return t && (a = g(a, v(lx, t))),
        o.initData(a, null, t ? ux: function(t) {
            return t.value
        }),
        o
    }
    function fx(t) {
        return ! isNaN(t) && !isFinite(t)
    }
    function px(t, e, i, n) {
        var o = 1 - t,
        a = n.dimensions[t];
        return fx(e[o]) && fx(i[o]) && e[t] === i[t] && n.getAxis(a).containData(e[t])
    }
    function gx(t, e) {
        if ("cartesian2d" === t.type) {
            var i = e[0].coord,
            n = e[1].coord;
            if (i && n && (px(1, i, n, t) || px(0, i, n, t))) return ! 0
        }
        return lx(t, e[0]) && lx(t, e[1])
    }
    function mx(t, e, i, n, o) {
        var a, r = n.coordinateSystem,
        s = t.getItemModel(e),
        l = Eo(s.get("x"), o.getWidth()),
        u = Eo(s.get("y"), o.getHeight());
        if (isNaN(l) || isNaN(u)) {
            if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(t.dimensions, e));
            else {
                var h = r.dimensions,
                c = t.get(h[0], e),
                d = t.get(h[1], e);
                a = r.dataToPoint([c, d])
            }
            if ("cartesian2d" === r.type) {
                var f = r.getAxis("x"),
                p = r.getAxis("y"),
                h = r.dimensions;
                fx(t.get(h[0], e)) ? a[0] = f.toGlobalCoord(f.getExtent()[i ? 0 : 1]) : fx(t.get(h[1], e)) && (a[1] = p.toGlobalCoord(p.getExtent()[i ? 0 : 1]))
            }
            isNaN(l) || (a[0] = l),
            isNaN(u) || (a[1] = u)
        } else a = [l, u];
        t.setItemLayout(e, a)
    }
    function vx(t, e, i) {
        var n;
        n = t ? f(t && t.dimensions,
        function(t) {
            return r({
                name: t
            },
            e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {})
        }) : [{
            name: "value",
            type: "float"
        }];
        var o = new eA(n, i),
        a = new eA(n, i),
        s = new eA([], i),
        l = f(i.get("data"), v(PO, e, t, i));
        t && (l = g(l, v(gx, t)));
        var u = t ? ux: function(t) {
            return t.value
        };
        return o.initData(f(l,
        function(t) {
            return t[0]
        }), null, u),
        a.initData(f(l,
        function(t) {
            return t[1]
        }), null, u),
        s.initData(f(l,
        function(t) {
            return t[2]
        })),
        s.hasItemOption = !0,
        {
            from: o,
            to: a,
            line: s
        }
    }
    function yx(t) {
        return ! isNaN(t) && !isFinite(t)
    }
    function xx(t, e, i, n) {
        var o = 1 - t;
        return yx(e[o]) && yx(i[o])
    }
    function _x(t, e) {
        var i = e.coord[0],
        n = e.coord[1];
        return ! ("cartesian2d" !== t.type || !i || !n || !xx(1, i, n, t) && !xx(0, i, n, t)) || lx(t, {
            coord: i,
            x: e.x0,
            y: e.y0
        }) || lx(t, {
            coord: n,
            x: e.x1,
            y: e.y1
        })
    }
    function bx(t, e, i, n, o) {
        var a, r = n.coordinateSystem,
        s = t.getItemModel(e),
        l = Eo(s.get(i[0]), o.getWidth()),
        u = Eo(s.get(i[1]), o.getHeight());
        if (isNaN(l) || isNaN(u)) {
            if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(i, e));
            else {
                var h = [f = t.get(i[0], e), p = t.get(i[1], e)];
                r.clampData && r.clampData(h, h),
                a = r.dataToPoint(h, !0)
            }
            if ("cartesian2d" === r.type) {
                var c = r.getAxis("x"),
                d = r.getAxis("y"),
                f = t.get(i[0], e),
                p = t.get(i[1], e);
                yx(f) ? a[0] = c.toGlobalCoord(c.getExtent()["x0" === i[0] ? 0 : 1]) : yx(p) && (a[1] = d.toGlobalCoord(d.getExtent()["y0" === i[1] ? 0 : 1]))
            }
            isNaN(l) || (a[0] = l),
            isNaN(u) || (a[1] = u)
        } else a = [l, u];
        return a
    }
    function Sx(t, e, i) {
        var n, o, a = ["x0", "y0", "x1", "y1"];
        t ? (n = f(t && t.dimensions,
        function(t) {
            var i = e.getData();
            return r({
                name: t
            },
            i.getDimensionInfo(i.mapDimension(t)) || {})
        }), o = new eA(f(a,
        function(t, e) {
            return {
                name: t,
                type: n[e % 2].type
            }
        }), i)) : o = new eA(n = [{
            name: "value",
            type: "float"
        }], i);
        var s = f(i.get("data"), v(NO, e, t, i));
        t && (s = g(s, v(_x, t)));
        var l = t ?
        function(t, e, i, n) {
            return t.coord[Math.floor(n / 2)][n % 2]
        }: function(t) {
            return t.value
        };
        return o.initData(s, null, l),
        o.hasItemOption = !0,
        o
    }
    function Mx(t) {
        var e = t.type,
        i = {
            number: "value",
            time: "time"
        };
        if (i[e] && (t.axisType = i[e], delete t.type), Ix(t), Tx(t, "controlPosition")) {
            var n = t.controlStyle || (t.controlStyle = {});
            Tx(n, "position") || (n.position = t.controlPosition),
            "none" !== n.position || Tx(n, "show") || (n.show = !1, delete n.position),
            delete t.controlPosition
        }
        d(t.data || [],
        function(t) {
            w(t) && !y(t) && (!Tx(t, "value") && Tx(t, "name") && (t.value = t.name), Ix(t))
        })
    }
    function Ix(t) {
        var e = t.itemStyle || (t.itemStyle = {}),
        i = e.emphasis || (e.emphasis = {}),
        n = t.label || t.label || {},
        o = n.normal || (n.normal = {}),
        a = {
            normal: 1,
            emphasis: 1
        };
        d(n,
        function(t, e) {
            a[e] || Tx(o, e) || (o[e] = t)
        }),
        i.label && !Tx(n, "emphasis") && (n.emphasis = i.label, delete i.label)
    }
    function Tx(t, e) {
        return t.hasOwnProperty(e)
    }
    function Ax(t, e) {
        return la(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        },
        t.get("padding"))
    }
    function Dx(t, e, n, o) {
        return Wn(t.get(e).replace(/^path:\/\//, ""), i(o || {}), new ue(n[0], n[1], n[2], n[3]), "center")
    }
    function Cx(t, e, i, o, a, r) {
        var s = e.get("color");
        a ? (a.setColor(s), i.add(a), r && r.onUpdate(a)) : ((a = Yl(t.get("symbol"), -1, -1, 2, 2, s)).setStyle("strokeNoScale", !0), i.add(a), r && r.onCreate(a));
        var l = e.getItemStyle(["color", "symbol", "symbolSize"]);
        a.setStyle(l),
        o = n({
            rectHover: !0,
            z2: 100
        },
        o, !0);
        var u = t.get("symbolSize"); (u = u instanceof Array ? u.slice() : [ + u, +u])[0] /= 2,
        u[1] /= 2,
        o.scale = u;
        var h = t.get("symbolOffset");
        if (h) {
            var c = o.position = o.position || [0, 0];
            c[0] += Eo(h[0], u[0]),
            c[1] += Eo(h[1], u[1])
        }
        var d = t.get("symbolRotate");
        return o.rotation = (d || 0) * Math.PI / 180 || 0,
        a.attr(o),
        a.updateTransform(),
        a
    }
    function Lx(t, e, i, n, o) {
        if (!t.dragging) {
            var a = n.getModel("checkpointStyle"),
            r = i.dataToCoord(n.getData().get(["value"], e));
            o || !a.get("animation", !0) ? t.attr({
                position: [r, 0]
            }) : (t.stopAnimation(!0), t.animateTo({
                position: [r, 0]
            },
            a.get("animationDuration", !0), a.get("animationEasing", !0)))
        }
    }
    function kx(t) {
        return 0 === t.indexOf("my")
    }
    function Px(t) {
        this.model = t
    }
    function Nx(t) {
        this.model = t
    }
    function Ox(t) {
        var e = {},
        i = [],
        n = [];
        return t.eachRawSeries(function(t) {
            var o = t.coordinateSystem;
            if (!o || "cartesian2d" !== o.type && "polar" !== o.type) i.push(t);
            else {
                var a = o.getBaseAxis();
                if ("category" === a.type) {
                    var r = a.dim + "_" + a.index;
                    e[r] || (e[r] = {
                        categoryAxis: a,
                        valueAxis: o.getOtherAxis(a),
                        series: []
                    },
                    n.push({
                        axisDim: a.dim,
                        axisIndex: a.index
                    })),
                    e[r].series.push(t)
                } else i.push(t)
            }
        }),
        {
            seriesGroupByCategoryAxis: e,
            other: i,
            meta: n
        }
    }
    function zx(t) {
        var e = [];
        return d(t,
        function(t, i) {
            var n = t.categoryAxis,
            o = t.valueAxis.dim,
            a = [" "].concat(f(t.series,
            function(t) {
                return t.name
            })),
            r = [n.model.getCategories()];
            d(t.series,
            function(t) {
                r.push(t.getRawData().mapArray(o,
                function(t) {
                    return t
                }))
            });
            for (var s = [a.join(qO)], l = 0; l < r[0].length; l++) {
                for (var u = [], h = 0; h < r.length; h++) u.push(r[h][l]);
                s.push(u.join(qO))
            }
            e.push(s.join("\n"))
        }),
        e.join("\n\n" + XO + "\n\n")
    }
    function Ex(t) {
        return f(t,
        function(t) {
            var e = t.getRawData(),
            i = [t.name],
            n = [];
            return e.each(e.dimensions,
            function() {
                for (var t = arguments.length,
                o = arguments[t - 1], a = e.getName(o), r = 0; r < t - 1; r++) n[r] = arguments[r];
                i.push((a ? a + qO: "") + n.join(qO))
            }),
            i.join("\n")
        }).join("\n\n" + XO + "\n\n")
    }
    function Rx(t) {
        var e = Ox(t);
        return {
            value: g([zx(e.seriesGroupByCategoryAxis), Ex(e.other)],
            function(t) {
                return t.replace(/[\n\t\s]/g, "")
            }).join("\n\n" + XO + "\n\n"),
            meta: e.meta
        }
    }
    function Bx(t) {
        return t.replace(/^\s\s*/, "").replace(/\s\s*$/, "")
    }
    function Vx(t) {
        if (t.slice(0, t.indexOf("\n")).indexOf(qO) >= 0) return ! 0
    }
    function Fx(t) {
        for (var e = t.split(/\n+/g), i = [], n = f(Bx(e.shift()).split(KO),
        function(t) {
            return {
                name: t,
                data: []
            }
        }), o = 0; o < e.length; o++) {
            var a = Bx(e[o]).split(KO);
            i.push(a.shift());
            for (var r = 0; r < a.length; r++) n[r] && (n[r].data[o] = a[r])
        }
        return {
            series: n,
            categories: i
        }
    }
    function Gx(t) {
        for (var e = t.split(/\n+/g), i = Bx(e.shift()), n = [], o = 0; o < e.length; o++) {
            var a, r = Bx(e[o]).split(KO),
            s = "",
            l = !1;
            isNaN(r[0]) ? (l = !0, s = r[0], r = r.slice(1), n[o] = {
                name: s,
                value: []
            },
            a = n[o].value) : a = n[o] = [];
            for (var u = 0; u < r.length; u++) a.push( + r[u]);
            1 === a.length && (l ? n[o].value = a[0] : n[o] = a[0])
        }
        return {
            name: i,
            data: n
        }
    }
    function Wx(t, e) {
        var i = {
            series: []
        };
        return d(t.split(new RegExp("\n*" + XO + "\n*", "g")),
        function(t, n) {
            if (Vx(t)) {
                var o = Fx(t),
                a = e[n],
                r = a.axisDim + "Axis";
                a && (i[r] = i[r] || [], i[r][a.axisIndex] = {
                    data: o.categories
                },
                i.series = i.series.concat(o.series))
            } else o = Gx(t),
            i.series.push(o)
        }),
        i
    }
    function Hx(t) {
        this._dom = null,
        this.model = t
    }
    function Zx(t, e) {
        return f(t,
        function(t, i) {
            var n = e && e[i];
            return w(n) && !y(n) ? (w(t) && !y(t) && (t = t.value), r({
                value: t
            },
            n)) : t
        })
    }
    function jx(t, e) {
        var i = qx(t);
        QO(e,
        function(e, n) {
            for (var o = i.length - 1; o >= 0 && !i[o][n]; o--);
            if (o < 0) {
                var a = t.queryComponents({
                    mainType: "dataZoom",
                    subType: "select",
                    id: n
                })[0];
                if (a) {
                    var r = a.getPercentRange();
                    i[0][n] = {
                        dataZoomId: n,
                        start: r[0],
                        end: r[1]
                    }
                }
            }
        }),
        i.push(e)
    }
    function Yx(t) {
        var e = qx(t),
        i = e[e.length - 1];
        e.length > 1 && e.pop();
        var n = {};
        return QO(i,
        function(t, i) {
            for (var o = e.length - 1; o >= 0; o--) if (t = e[o][i]) {
                n[i] = t;
                break
            }
        }),
        n
    }
    function Ux(t) {
        t[JO] = null
    }
    function Xx(t) {
        return qx(t).length
    }
    function qx(t) {
        var e = t[JO];
        return e || (e = t[JO] = [{}]),
        e
    }
    function Kx(t, e, i) { (this._brushController = new Cf(i.getZr())).on("brush", m(this._onBrush, this)).mount(),
        this._isZoomActive
    }
    function Qx(t) {
        var e = {};
        return d(["xAxisIndex", "yAxisIndex"],
        function(i) {
            e[i] = t[i],
            null == e[i] && (e[i] = "all"),
            (!1 === e[i] || "none" === e[i]) && (e[i] = [])
        }),
        e
    }
    function Jx(t, e) {
        t.setIconStatus("back", Xx(e) > 1 ? "emphasis": "normal")
    }
    function $x(t, e, i, n, o) {
        var a = i._isZoomActive;
        n && "takeGlobalCursor" === n.type && (a = "dataZoomSelect" === n.key && n.dataZoomSelectActive),
        i._isZoomActive = a,
        t.setIconStatus("zoom", a ? "emphasis": "normal");
        var r = new iy(Qx(t.option), e, {
            include: ["grid"]
        });
        i._brushController.setPanels(r.makePanelOpts(o,
        function(t) {
            return t.xAxisDeclared && !t.yAxisDeclared ? "lineX": !t.xAxisDeclared && t.yAxisDeclared ? "lineY": "rect"
        })).enableBrush( !! a && {
            brushType: "auto",
            brushStyle: {
                lineWidth: 0,
                fill: "rgba(0,0,0,0.2)"
            }
        })
    }
    function t_(t) {
        this.model = t
    }
    function e_(t) {
        return az(t)
    }
    function i_() {
        if (!lz && uz) {
            lz = !0;
            var t = uz.styleSheets;
            t.length < 31 ? uz.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml", "behavior:url(#default#VML)")
        }
    }
    function n_(t) {
        return parseInt(t, 10)
    }
    function o_(t, e) {
        i_(),
        this.root = t,
        this.storage = e;
        var i = document.createElement("div"),
        n = document.createElement("div");
        i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",
        n.style.cssText = "position:absolute;left:0;top:0;",
        t.appendChild(i),
        this._vmlRoot = n,
        this._vmlViewport = i,
        this.resize();
        var o = e.delFromStorage,
        a = e.addToStorage;
        e.delFromStorage = function(t) {
            o.call(e, t),
            t && t.onRemove && t.onRemove(n)
        },
        e.addToStorage = function(t) {
            t.onAdd && t.onAdd(n),
            a.call(e, t)
        },
        this._firstPaint = !0
    }
    function a_(t) {
        return function() {
            Bw('In IE8.0 VML mode painter not support method "' + t + '"')
        }
    }
    function r_(t) {
        return document.createElementNS(Hz, t)
    }
    function s_(t) {
        return Uz(1e4 * t) / 1e4
    }
    function l_(t) {
        return t < $z && t > -$z
    }
    function u_(t, e) {
        var i = e ? t.textFill: t.fill;
        return null != i && i !== Yz
    }
    function h_(t, e) {
        var i = e ? t.textStroke: t.stroke;
        return null != i && i !== Yz
    }
    function c_(t, e) {
        e && d_(t, "transform", "matrix(" + jz.call(e, ",") + ")")
    }
    function d_(t, e, i) { (!i || "linear" !== i.type && "radial" !== i.type) && ("string" == typeof i && i.indexOf("NaN") > -1 && console.log(i), t.setAttribute(e, i))
    }
    function f_(t, e, i) {
        t.setAttributeNS("http://www.w3.org/1999/xlink", e, i)
    }
    function p_(t, e, i, n) {
        if (u_(e, i)) {
            var o = i ? e.textFill: e.fill;
            o = "transparent" === o ? Yz: o,
            "none" !== t.getAttribute("clip-path") && o === Yz && (o = "rgba(0, 0, 0, 0.002)"),
            d_(t, "fill", o),
            d_(t, "fill-opacity", null != e.fillOpacity ? e.fillOpacity * e.opacity: e.opacity)
        } else d_(t, "fill", Yz);
        if (h_(e, i)) {
            var a = i ? e.textStroke: e.stroke;
            d_(t, "stroke", a = "transparent" === a ? Yz: a),
            d_(t, "stroke-width", (i ? e.textStrokeWidth: e.lineWidth) / (!i && e.strokeNoScale ? n.getLineScale() : 1)),
            d_(t, "paint-order", i ? "stroke": "fill"),
            d_(t, "stroke-opacity", null != e.strokeOpacity ? e.strokeOpacity: e.opacity),
            e.lineDash ? (d_(t, "stroke-dasharray", e.lineDash.join(",")), d_(t, "stroke-dashoffset", Uz(e.lineDashOffset || 0))) : d_(t, "stroke-dasharray", ""),
            e.lineCap && d_(t, "stroke-linecap", e.lineCap),
            e.lineJoin && d_(t, "stroke-linejoin", e.lineJoin),
            e.miterLimit && d_(t, "stroke-miterlimit", e.miterLimit)
        } else d_(t, "stroke", Yz)
    }
    function g_(t) {
        for (var e = [], i = t.data, n = t.len(), o = 0; o < n;) {
            var a = "",
            r = 0;
            switch (i[o++]) {
            case Zz.M:
                a = "M",
                r = 2;
                break;
            case Zz.L:
                a = "L",
                r = 2;
                break;
            case Zz.Q:
                a = "Q",
                r = 4;
                break;
            case Zz.C:
                a = "C",
                r = 6;
                break;
            case Zz.A:
                var s = i[o++],
                l = i[o++],
                u = i[o++],
                h = i[o++],
                c = i[o++],
                d = i[o++],
                f = i[o++],
                p = i[o++],
                g = Math.abs(d),
                m = l_(g - Qz) && !l_(g),
                v = !1;
                v = g >= Qz || !l_(g) && (d > -Kz && d < 0 || d > Kz) == !!p;
                var y = s_(s + u * qz(c)),
                x = s_(l + h * Xz(c));
                m && (d = p ? Qz - 1e-4: 1e-4 - Qz, v = !0, 9 === o && e.push("M", y, x));
                var _ = s_(s + u * qz(c + d)),
                w = s_(l + h * Xz(c + d));
                e.push("A", s_(u), s_(h), Uz(f * Jz), +v, +p, _, w);
                break;
            case Zz.Z:
                a = "Z";
                break;
            case Zz.R:
                var _ = s_(i[o++]),
                w = s_(i[o++]),
                b = s_(i[o++]),
                S = s_(i[o++]);
                e.push("M", _, w, "L", _ + b, w, "L", _ + b, w + S, "L", _, w + S, "L", _, w)
            }
            a && e.push(a);
            for (var M = 0; M < r; M++) e.push(s_(i[o++]))
        }
        return e.join(" ")
    }
    function m_(t) {
        return "middle" === t ? "middle": "bottom" === t ? "after-edge": "hanging"
    }
    function v_() {}
    function y_(t, e, i, n) {
        for (var o = 0,
        a = e.length,
        r = 0,
        s = 0; o < a; o++) {
            var l = e[o];
            if (l.removed) {
                for (var u = [], h = s; h < s + l.count; h++) u.push(h);
                l.indices = u,
                s += l.count
            } else {
                for (var u = [], h = r; h < r + l.count; h++) u.push(h);
                l.indices = u,
                r += l.count,
                l.added || (s += l.count)
            }
        }
        return e
    }
    function x_(t) {
        return {
            newPos: t.newPos,
            components: t.components.slice(0)
        }
    }
    function __(t, e, i, n, o) {
        this._zrId = t,
        this._svgRoot = e,
        this._tagNames = "string" == typeof i ? [i] : i,
        this._markLabel = n,
        this._domName = o || "_dom",
        this.nextId = 0
    }
    function w_(t, e) {
        __.call(this, t, e, ["linearGradient", "radialGradient"], "__gradient_in_use__")
    }
    function b_(t, e) {
        __.call(this, t, e, "clipPath", "__clippath_in_use__")
    }
    function S_(t, e) {
        __.call(this, t, e, ["filter"], "__filter_in_use__", "_shadowDom")
    }
    function M_(t) {
        return t && (t.shadowBlur || t.shadowOffsetX || t.shadowOffsetY || t.textShadowBlur || t.textShadowOffsetX || t.textShadowOffsetY)
    }
    function I_(t) {
        return parseInt(t, 10)
    }
    function T_(t) {
        return t instanceof kn ? tE: t instanceof hi ? eE: t instanceof qS ? iE: tE
    }
    function A_(t, e) {
        return e && t && e.parentNode !== t
    }
    function D_(t, e, i) {
        if (A_(t, e) && i) {
            var n = i.nextSibling;
            n ? t.insertBefore(e, n) : t.appendChild(e)
        }
    }
    function C_(t, e) {
        if (A_(t, e)) {
            var i = t.firstChild;
            i ? t.insertBefore(e, i) : t.appendChild(e)
        }
    }
    function L_(t, e) {
        e && t && e.parentNode === t && t.removeChild(e)
    }
    function k_(t) {
        return t.__textSvgEl
    }
    function P_(t) {
        return t.__svgEl
    }
    function N_(t) {
        return function() {
            Bw('In SVG mode painter not support method "' + t + '"')
        }
    }
    var O_ = 2311,
    z_ = function() {
        return O_++
    },
    E_ = {},
    R_ = E_ = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? {
        browser: {},
        os: {},
        node: !1,
        wxa: !0,
        canvasSupported: !0,
        svgSupported: !1,
        touchEventsSupported: !0,
        domSupported: !1
    }: "undefined" == typeof document && "undefined" != typeof self ? {
        browser: {},
        os: {},
        node: !1,
        worker: !0,
        canvasSupported: !0,
        domSupported: !1
    }: "undefined" == typeof navigator ? {
        browser: {},
        os: {},
        node: !0,
        worker: !1,
        canvasSupported: !0,
        svgSupported: !0,
        domSupported: !1
    }: function(t) {
        var e = {},
        i = {},
        n = t.match(/Firefox\/([\d.]+)/),
        o = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/),
        a = t.match(/Edge\/([\d.]+)/),
        r = /micromessenger/i.test(t);
        return n && (i.firefox = !0, i.version = n[1]),
        o && (i.ie = !0, i.version = o[1]),
        a && (i.edge = !0, i.version = a[1]),
        r && (i.weChat = !0),
        {
            browser: i,
            os: e,
            node: !1,
            canvasSupported: !!document.createElement("canvas").getContext,
            svgSupported: "undefined" != typeof SVGRect,
            touchEventsSupported: "ontouchstart" in window && !i.ie && !i.edge,
            pointerEventsSupported: "onpointerdown" in window && (i.edge || i.ie && i.version >= 11),
            domSupported: "undefined" != typeof document
        }
    } (navigator.userAgent),
    B_ = {
        "[object Function]": 1,
        "[object RegExp]": 1,
        "[object Date]": 1,
        "[object Error]": 1,
        "[object CanvasGradient]": 1,
        "[object CanvasPattern]": 1,
        "[object Image]": 1,
        "[object Canvas]": 1
    },
    V_ = {
        "[object Int8Array]": 1,
        "[object Uint8Array]": 1,
        "[object Uint8ClampedArray]": 1,
        "[object Int16Array]": 1,
        "[object Uint16Array]": 1,
        "[object Int32Array]": 1,
        "[object Uint32Array]": 1,
        "[object Float32Array]": 1,
        "[object Float64Array]": 1
    },
    F_ = Object.prototype.toString,
    G_ = Array.prototype,
    W_ = G_.forEach,
    H_ = G_.filter,
    Z_ = G_.slice,
    j_ = G_.map,
    Y_ = G_.reduce,
    U_ = {},
    X_ = function() {
        return U_.createCanvas()
    };
    U_.createCanvas = function() {
        return document.createElement("canvas")
    };
    var q_, K_ = "__ec_primitive__";
    z.prototype = {
        constructor: z,
        get: function(t) {
            return this.data.hasOwnProperty(t) ? this.data[t] : null
        },
        set: function(t, e) {
            return this.data[t] = e
        },
        each: function(t, e) {
            void 0 !== e && (t = m(t, e));
            for (var i in this.data) this.data.hasOwnProperty(i) && t(this.data[i], i)
        },
        removeKey: function(t) {
            delete this.data[t]
        }
    };
    var Q_ = (Object.freeze || Object)({
        $override: e,
        clone: i,
        merge: n,
        mergeAll: o,
        extend: a,
        defaults: r,
        createCanvas: X_,
        getContext: s,
        indexOf: l,
        inherits: u,
        mixin: h,
        isArrayLike: c,
        each: d,
        map: f,
        reduce: p,
        filter: g,
        find: function(t, e, i) {
            if (t && e) for (var n = 0,
            o = t.length; n < o; n++) if (e.call(i, t[n], n, t)) return t[n]
        },
        bind: m,
        curry: v,
        isArray: y,
        isFunction: x,
        isString: _,
        isObject: w,
        isBuiltInObject: b,
        isTypedArray: S,
        isDom: M,
        eqNaN: I,
        retrieve: T,
        retrieve2: A,
        retrieve3: D,
        slice: C,
        normalizeCssArray: L,
        assert: k,
        trim: P,
        setAsPrimitive: N,
        isPrimitive: O,
        createHashMap: E,
        concatArray: R,
        noop: B
    }),
    J_ = "undefined" == typeof Float32Array ? Array: Float32Array,
    $_ = Y,
    tw = U,
    ew = K,
    iw = Q,
    nw = (Object.freeze || Object)({
        create: V,
        copy: F,
        clone: G,
        set: W,
        add: H,
        scaleAndAdd: Z,
        sub: j,
        len: Y,
        length: $_,
        lenSquare: U,
        lengthSquare: tw,
        mul: function(t, e, i) {
            return t[0] = e[0] * i[0],
            t[1] = e[1] * i[1],
            t
        },
        div: function(t, e, i) {
            return t[0] = e[0] / i[0],
            t[1] = e[1] / i[1],
            t
        },
        dot: function(t, e) {
            return t[0] * e[0] + t[1] * e[1]
        },
        scale: X,
        normalize: q,
        distance: K,
        dist: ew,
        distanceSquare: Q,
        distSquare: iw,
        negate: function(t, e) {
            return t[0] = -e[0],
            t[1] = -e[1],
            t
        },
        lerp: J,
        applyTransform: $,
        min: tt,
        max: et
    });
    it.prototype = {
        constructor: it,
        _dragStart: function(t) {
            var e = t.target;
            e && e.draggable && (this._draggingTarget = e, e.dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(nt(e, t), "dragstart", t.event))
        },
        _drag: function(t) {
            var e = this._draggingTarget;
            if (e) {
                var i = t.offsetX,
                n = t.offsetY,
                o = i - this._x,
                a = n - this._y;
                this._x = i,
                this._y = n,
                e.drift(o, a, t),
                this.dispatchToElement(nt(e, t), "drag", t.event);
                var r = this.findHover(i, n, e).target,
                s = this._dropTarget;
                this._dropTarget = r,
                e !== r && (s && r !== s && this.dispatchToElement(nt(s, t), "dragleave", t.event), r && r !== s && this.dispatchToElement(nt(r, t), "dragenter", t.event))
            }
        },
        _dragEnd: function(t) {
            var e = this._draggingTarget;
            e && (e.dragging = !1),
            this.dispatchToElement(nt(e, t), "dragend", t.event),
            this._dropTarget && this.dispatchToElement(nt(this._dropTarget, t), "drop", t.event),
            this._draggingTarget = null,
            this._dropTarget = null
        }
    };
    var ow = Array.prototype.slice,
    aw = function(t) {
        this._$handlers = {},
        this._$eventProcessor = t
    };
    aw.prototype = {
        constructor: aw,
        one: function(t, e, i, n) {
            var o = this._$handlers;
            if ("function" == typeof e && (n = i, i = e, e = null), !i || !t) return this;
            e = ot(this, e),
            o[t] || (o[t] = []);
            for (var a = 0; a < o[t].length; a++) if (o[t][a].h === i) return this;
            return o[t].push({
                h: i,
                one: !0,
                query: e,
                ctx: n || this
            }),
            this
        },
        on: function(t, e, i, n) {
            var o = this._$handlers;
            if ("function" == typeof e && (n = i, i = e, e = null), !i || !t) return this;
            e = ot(this, e),
            o[t] || (o[t] = []);
            for (var a = 0; a < o[t].length; a++) if (o[t][a].h === i) return this;
            return o[t].push({
                h: i,
                one: !1,
                query: e,
                ctx: n || this
            }),
            this
        },
        isSilent: function(t) {
            var e = this._$handlers;
            return e[t] && e[t].length
        },
        off: function(t, e) {
            var i = this._$handlers;
            if (!t) return this._$handlers = {},
            this;
            if (e) {
                if (i[t]) {
                    for (var n = [], o = 0, a = i[t].length; o < a; o++) i[t][o].h !== e && n.push(i[t][o]);
                    i[t] = n
                }
                i[t] && 0 === i[t].length && delete i[t]
            } else delete i[t];
            return this
        },
        trigger: function(t) {
            var e = this._$handlers[t],
            i = this._$eventProcessor;
            if (e) {
                var n = arguments,
                o = n.length;
                o > 3 && (n = ow.call(n, 1));
                for (var a = e.length,
                r = 0; r < a;) {
                    var s = e[r];
                    if (i && i.filter && null != s.query && !i.filter(t, s.query)) r++;
                    else {
                        switch (o) {
                        case 1:
                            s.h.call(s.ctx);
                            break;
                        case 2:
                            s.h.call(s.ctx, n[1]);
                            break;
                        case 3:
                            s.h.call(s.ctx, n[1], n[2]);
                            break;
                        default:
                            s.h.apply(s.ctx, n)
                        }
                        s.one ? (e.splice(r, 1), a--) : r++
                    }
                }
            }
            return i && i.afterTrigger && i.afterTrigger(t),
            this
        },
        triggerWithContext: function(t) {
            var e = this._$handlers[t],
            i = this._$eventProcessor;
            if (e) {
                var n = arguments,
                o = n.length;
                o > 4 && (n = ow.call(n, 1, n.length - 1));
                for (var a = n[n.length - 1], r = e.length, s = 0; s < r;) {
                    var l = e[s];
                    if (i && i.filter && null != l.query && !i.filter(t, l.query)) s++;
                    else {
                        switch (o) {
                        case 1:
                            l.h.call(a);
                            break;
                        case 2:
                            l.h.call(a, n[1]);
                            break;
                        case 3:
                            l.h.call(a, n[1], n[2]);
                            break;
                        default:
                            l.h.apply(a, n)
                        }
                        l.one ? (e.splice(s, 1), r--) : s++
                    }
                }
            }
            return i && i.afterTrigger && i.afterTrigger(t),
            this
        }
    };
    var rw = "undefined" != typeof window && !!window.addEventListener,
    sw = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
    lw = rw ?
    function(t) {
        t.preventDefault(),
        t.stopPropagation(),
        t.cancelBubble = !0
    }: function(t) {
        t.returnValue = !1,
        t.cancelBubble = !0
    },
    uw = "silent";
    pt.prototype.dispose = function() {};
    var hw = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
    cw = function(t, e, i, n) {
        aw.call(this),
        this.storage = t,
        this.painter = e,
        this.painterRoot = n,
        i = i || new pt,
        this.proxy = null,
        this._hovered = {},
        this._lastTouchMoment,
        this._lastX,
        this._lastY,
        it.call(this),
        this.setHandlerProxy(i)
    };
    cw.prototype = {
        constructor: cw,
        setHandlerProxy: function(t) {
            this.proxy && this.proxy.dispose(),
            t && (d(hw,
            function(e) {
                t.on && t.on(e, this[e], this)
            },
            this), t.handler = this),
            this.proxy = t
        },
        mousemove: function(t) {
            var e = t.zrX,
            i = t.zrY,
            n = this._hovered,
            o = n.target;
            o && !o.__zr && (o = (n = this.findHover(n.x, n.y)).target);
            var a = this._hovered = this.findHover(e, i),
            r = a.target,
            s = this.proxy;
            s.setCursor && s.setCursor(r ? r.cursor: "default"),
            o && r !== o && this.dispatchToElement(n, "mouseout", t),
            this.dispatchToElement(a, "mousemove", t),
            r && r !== o && this.dispatchToElement(a, "mouseover", t)
        },
        mouseout: function(t) {
            this.dispatchToElement(this._hovered, "mouseout", t);
            var e, i = t.toElement || t.relatedTarget;
            do {
                i = i && i.parentNode
            } while ( i && 9 != i . nodeType && !( e = i === this . painterRoot )); ! e && this.trigger("globalout", {
                event: t
            })
        },
        resize: function(t) {
            this._hovered = {}
        },
        dispatch: function(t, e) {
            var i = this[t];
            i && i.call(this, e)
        },
        dispose: function() {
            this.proxy.dispose(),
            this.storage = this.proxy = this.painter = null
        },
        setCursorStyle: function(t) {
            var e = this.proxy;
            e.setCursor && e.setCursor(t)
        },
        dispatchToElement: function(t, e, i) {
            var n = (t = t || {}).target;
            if (!n || !n.silent) {
                for (var o = "on" + e,
                a = dt(e, t, i); n && (n[o] && (a.cancelBubble = n[o].call(n, a)), n.trigger(e, a), n = n.parent, !a.cancelBubble););
                a.cancelBubble || (this.trigger(e, a), this.painter && this.painter.eachOtherLayer(function(t) {
                    "function" == typeof t[o] && t[o].call(t, a),
                    t.trigger && t.trigger(e, a)
                }))
            }
        },
        findHover: function(t, e, i) {
            for (var n = this.storage.getDisplayList(), o = {
                x: t,
                y: e
            },
            a = n.length - 1; a >= 0; a--) {
                var r;
                if (n[a] !== i && !n[a].ignore && (r = gt(n[a], t, e)) && (!o.topTarget && (o.topTarget = n[a]), r !== uw)) {
                    o.target = n[a];
                    break
                }
            }
            return o
        }
    },
    d(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"],
    function(t) {
        cw.prototype[t] = function(e) {
            var i = this.findHover(e.zrX, e.zrY),
            n = i.target;
            if ("mousedown" === t) this._downEl = n,
            this._downPoint = [e.zrX, e.zrY],
            this._upEl = n;
            else if ("mouseup" === t) this._upEl = n;
            else if ("click" === t) {
                if (this._downEl !== this._upEl || !this._downPoint || ew(this._downPoint, [e.zrX, e.zrY]) > 4) return;
                this._downPoint = null
            }
            this.dispatchToElement(i, t, e)
        }
    }),
    h(cw, aw),
    h(cw, it);
    var dw = "undefined" == typeof Float32Array ? Array: Float32Array,
    fw = (Object.freeze || Object)({
        create: mt,
        identity: vt,
        copy: yt,
        mul: xt,
        translate: _t,
        rotate: wt,
        scale: bt,
        invert: St,
        clone: Mt
    }),
    pw = vt,
    gw = 5e-5,
    mw = function(t) { (t = t || {}).position || (this.position = [0, 0]),
        null == t.rotation && (this.rotation = 0),
        t.scale || (this.scale = [1, 1]),
        this.origin = this.origin || null
    },
    vw = mw.prototype;
    vw.transform = null,
    vw.needLocalTransform = function() {
        return It(this.rotation) || It(this.position[0]) || It(this.position[1]) || It(this.scale[0] - 1) || It(this.scale[1] - 1)
    };
    var yw = [];
    vw.updateTransform = function() {
        var t = this.parent,
        e = t && t.transform,
        i = this.needLocalTransform(),
        n = this.transform;
        if (i || e) {
            n = n || mt(),
            i ? this.getLocalTransform(n) : pw(n),
            e && (i ? xt(n, t.transform, n) : yt(n, t.transform)),
            this.transform = n;
            var o = this.globalScaleRatio;
            if (null != o && 1 !== o) {
                this.getGlobalScale(yw);
                var a = yw[0] < 0 ? -1 : 1,
                r = yw[1] < 0 ? -1 : 1,
                s = ((yw[0] - a) * o + a) / yw[0] || 0,
                l = ((yw[1] - r) * o + r) / yw[1] || 0;
                n[0] *= s,
                n[1] *= s,
                n[2] *= l,
                n[3] *= l
            }
            this.invTransform = this.invTransform || mt(),
            St(this.invTransform, n)
        } else n && pw(n)
    },
    vw.getLocalTransform = function(t) {
        return mw.getLocalTransform(this, t)
    },
    vw.setTransform = function(t) {
        var e = this.transform,
        i = t.dpr || 1;
        e ? t.setTransform(i * e[0], i * e[1], i * e[2], i * e[3], i * e[4], i * e[5]) : t.setTransform(i, 0, 0, i, 0, 0)
    },
    vw.restoreTransform = function(t) {
        var e = t.dpr || 1;
        t.setTransform(e, 0, 0, e, 0, 0)
    };
    var xw = [],
    _w = mt();
    vw.setLocalTransform = function(t) {
        if (t) {
            var e = t[0] * t[0] + t[1] * t[1],
            i = t[2] * t[2] + t[3] * t[3],
            n = this.position,
            o = this.scale;
            It(e - 1) && (e = Math.sqrt(e)),
            It(i - 1) && (i = Math.sqrt(i)),
            t[0] < 0 && (e = -e),
            t[3] < 0 && (i = -i),
            n[0] = t[4],
            n[1] = t[5],
            o[0] = e,
            o[1] = i,
            this.rotation = Math.atan2( - t[1] / i, t[0] / e)
        }
    },
    vw.decomposeTransform = function() {
        if (this.transform) {
            var t = this.parent,
            e = this.transform;
            t && t.transform && (xt(xw, t.invTransform, e), e = xw);
            var i = this.origin;
            i && (i[0] || i[1]) && (_w[4] = i[0], _w[5] = i[1], xt(xw, e, _w), xw[4] -= i[0], xw[5] -= i[1], e = xw),
            this.setLocalTransform(e)
        }
    },
    vw.getGlobalScale = function(t) {
        var e = this.transform;
        return t = t || [],
        e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]), e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1]), t) : (t[0] = 1, t[1] = 1, t)
    },
    vw.transformCoordToLocal = function(t, e) {
        var i = [t, e],
        n = this.invTransform;
        return n && $(i, i, n),
        i
    },
    vw.transformCoordToGlobal = function(t, e) {
        var i = [t, e],
        n = this.transform;
        return n && $(i, i, n),
        i
    },
    mw.getLocalTransform = function(t, e) {
        pw(e = e || []);
        var i = t.origin,
        n = t.scale || [1, 1],
        o = t.rotation || 0,
        a = t.position || [0, 0];
        return i && (e[4] -= i[0], e[5] -= i[1]),
        bt(e, e, n),
        o && wt(e, e, o),
        i && (e[4] += i[0], e[5] += i[1]),
        e[4] += a[0],
        e[5] += a[1],
        e
    };
    var ww = {
        linear: function(t) {
            return t
        },
        quadraticIn: function(t) {
            return t * t
        },
        quadraticOut: function(t) {
            return t * (2 - t)
        },
        quadraticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t: -.5 * (--t * (t - 2) - 1)
        },
        cubicIn: function(t) {
            return t * t * t
        },
        cubicOut: function(t) {
            return--t * t * t + 1
        },
        cubicInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t: .5 * ((t -= 2) * t * t + 2)
        },
        quarticIn: function(t) {
            return t * t * t * t
        },
        quarticOut: function(t) {
            return 1 - --t * t * t * t
        },
        quarticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t * t: -.5 * ((t -= 2) * t * t * t - 2)
        },
        quinticIn: function(t) {
            return t * t * t * t * t
        },
        quinticOut: function(t) {
            return--t * t * t * t * t + 1
        },
        quinticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t * t * t: .5 * ((t -= 2) * t * t * t * t + 2)
        },
        sinusoidalIn: function(t) {
            return 1 - Math.cos(t * Math.PI / 2)
        },
        sinusoidalOut: function(t) {
            return Math.sin(t * Math.PI / 2)
        },
        sinusoidalInOut: function(t) {
            return.5 * (1 - Math.cos(Math.PI * t))
        },
        exponentialIn: function(t) {
            return 0 === t ? 0 : Math.pow(1024, t - 1)
        },
        exponentialOut: function(t) {
            return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
        },
        exponentialInOut: function(t) {
            return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1)))
        },
        circularIn: function(t) {
            return 1 - Math.sqrt(1 - t * t)
        },
        circularOut: function(t) {
            return Math.sqrt(1 - --t * t)
        },
        circularInOut: function(t) {
            return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
        },
        elasticIn: function(t) {
            var e, i = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), -i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4))
        },
        elasticOut: function(t) {
            var e, i = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin((t - e) * (2 * Math.PI) / .4) + 1)
        },
        elasticInOut: function(t) {
            var e, i = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * -.5 : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * .5 + 1)
        },
        backIn: function(t) {
            var e = 1.70158;
            return t * t * ((e + 1) * t - e)
        },
        backOut: function(t) {
            var e = 1.70158;
            return--t * t * ((e + 1) * t + e) + 1
        },
        backInOut: function(t) {
            var e = 2.5949095;
            return (t *= 2) < 1 ? t * t * ((e + 1) * t - e) * .5 : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
        },
        bounceIn: function(t) {
            return 1 - ww.bounceOut(1 - t)
        },
        bounceOut: function(t) {
            return t < 1 / 2.75 ? 7.5625 * t * t: t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
        },
        bounceInOut: function(t) {
            return t < .5 ? .5 * ww.bounceIn(2 * t) : .5 * ww.bounceOut(2 * t - 1) + .5
        }
    };
    Tt.prototype = {
        constructor: Tt,
        step: function(t, e) {
            if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) this._pausedTime += e;
            else {
                var i = (t - this._startTime - this._pausedTime) / this._life;
                if (! (i < 0)) {
                    i = Math.min(i, 1);
                    var n = this.easing,
                    o = "string" == typeof n ? ww[n] : n,
                    a = "function" == typeof o ? o(i) : i;
                    return this.fire("frame", a),
                    1 == i ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, "destroy") : null
                }
            }
        },
        restart: function(t) {
            var e = (t - this._startTime - this._pausedTime) % this._life;
            this._startTime = t - e + this.gap,
            this._pausedTime = 0,
            this._needsRemove = !1
        },
        fire: function(t, e) {
            this[t = "on" + t] && this[t](this._target, e)
        },
        pause: function() {
            this._paused = !0
        },
        resume: function() {
            this._paused = !1
        }
    };
    var bw = function() {
        this.head = null,
        this.tail = null,
        this._len = 0
    },
    Sw = bw.prototype;
    Sw.insert = function(t) {
        var e = new Mw(t);
        return this.insertEntry(e),
        e
    },
    Sw.insertEntry = function(t) {
        this.head ? (this.tail.next = t, t.prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t,
        this._len++
    },
    Sw.remove = function(t) {
        var e = t.prev,
        i = t.next;
        e ? e.next = i: this.head = i,
        i ? i.prev = e: this.tail = e,
        t.next = t.prev = null,
        this._len--
    },
    Sw.len = function() {
        return this._len
    },
    Sw.clear = function() {
        this.head = this.tail = null,
        this._len = 0
    };
    var Mw = function(t) {
        this.value = t,
        this.next,
        this.prev
    },
    Iw = function(t) {
        this._list = new bw,
        this._map = {},
        this._maxSize = t || 10,
        this._lastRemovedEntry = null
    },
    Tw = Iw.prototype;
    Tw.put = function(t, e) {
        var i = this._list,
        n = this._map,
        o = null;
        if (null == n[t]) {
            var a = i.len(),
            r = this._lastRemovedEntry;
            if (a >= this._maxSize && a > 0) {
                var s = i.head;
                i.remove(s),
                delete n[s.key],
                o = s.value,
                this._lastRemovedEntry = s
            }
            r ? r.value = e: r = new Mw(e),
            r.key = t,
            i.insertEntry(r),
            n[t] = r
        }
        return o
    },
    Tw.get = function(t) {
        var e = this._map[t],
        i = this._list;
        if (null != e) return e !== i.tail && (i.remove(e), i.insertEntry(e)),
        e.value
    },
    Tw.clear = function() {
        this._list.clear(),
        this._map = {}
    };
    var Aw = {
        transparent: [0, 0, 0, 0],
        aliceblue: [240, 248, 255, 1],
        antiquewhite: [250, 235, 215, 1],
        aqua: [0, 255, 255, 1],
        aquamarine: [127, 255, 212, 1],
        azure: [240, 255, 255, 1],
        beige: [245, 245, 220, 1],
        bisque: [255, 228, 196, 1],
        black: [0, 0, 0, 1],
        blanchedalmond: [255, 235, 205, 1],
        blue: [0, 0, 255, 1],
        blueviolet: [138, 43, 226, 1],
        brown: [165, 42, 42, 1],
        burlywood: [222, 184, 135, 1],
        cadetblue: [95, 158, 160, 1],
        chartreuse: [127, 255, 0, 1],
        chocolate: [210, 105, 30, 1],
        coral: [255, 127, 80, 1],
        cornflowerblue: [100, 149, 237, 1],
        cornsilk: [255, 248, 220, 1],
        crimson: [220, 20, 60, 1],
        cyan: [0, 255, 255, 1],
        darkblue: [0, 0, 139, 1],
        darkcyan: [0, 139, 139, 1],
        darkgoldenrod: [184, 134, 11, 1],
        darkgray: [169, 169, 169, 1],
        darkgreen: [0, 100, 0, 1],
        darkgrey: [169, 169, 169, 1],
        darkkhaki: [189, 183, 107, 1],
        darkmagenta: [139, 0, 139, 1],
        darkolivegreen: [85, 107, 47, 1],
        darkorange: [255, 140, 0, 1],
        darkorchid: [153, 50, 204, 1],
        darkred: [139, 0, 0, 1],
        darksalmon: [233, 150, 122, 1],
        darkseagreen: [143, 188, 143, 1],
        darkslateblue: [72, 61, 139, 1],
        darkslategray: [47, 79, 79, 1],
        darkslategrey: [47, 79, 79, 1],
        darkturquoise: [0, 206, 209, 1],
        darkviolet: [148, 0, 211, 1],
        deeppink: [255, 20, 147, 1],
        deepskyblue: [0, 191, 255, 1],
        dimgray: [105, 105, 105, 1],
        dimgrey: [105, 105, 105, 1],
        dodgerblue: [30, 144, 255, 1],
        firebrick: [178, 34, 34, 1],
        floralwhite: [255, 250, 240, 1],
        forestgreen: [34, 139, 34, 1],
        fuchsia: [255, 0, 255, 1],
        gainsboro: [220, 220, 220, 1],
        ghostwhite: [248, 248, 255, 1],
        gold: [255, 215, 0, 1],
        goldenrod: [218, 165, 32, 1],
        gray: [128, 128, 128, 1],
        green: [0, 128, 0, 1],
        greenyellow: [173, 255, 47, 1],
        grey: [128, 128, 128, 1],
        honeydew: [240, 255, 240, 1],
        hotpink: [255, 105, 180, 1],
        indianred: [205, 92, 92, 1],
        indigo: [75, 0, 130, 1],
        ivory: [255, 255, 240, 1],
        khaki: [240, 230, 140, 1],
        lavender: [230, 230, 250, 1],
        lavenderblush: [255, 240, 245, 1],
        lawngreen: [124, 252, 0, 1],
        lemonchiffon: [255, 250, 205, 1],
        lightblue: [173, 216, 230, 1],
        lightcoral: [240, 128, 128, 1],
        lightcyan: [224, 255, 255, 1],
        lightgoldenrodyellow: [250, 250, 210, 1],
        lightgray: [211, 211, 211, 1],
        lightgreen: [144, 238, 144, 1],
        lightgrey: [211, 211, 211, 1],
        lightpink: [255, 182, 193, 1],
        lightsalmon: [255, 160, 122, 1],
        lightseagreen: [32, 178, 170, 1],
        lightskyblue: [135, 206, 250, 1],
        lightslategray: [119, 136, 153, 1],
        lightslategrey: [119, 136, 153, 1],
        lightsteelblue: [176, 196, 222, 1],
        lightyellow: [255, 255, 224, 1],
        lime: [0, 255, 0, 1],
        limegreen: [50, 205, 50, 1],
        linen: [250, 240, 230, 1],
        magenta: [255, 0, 255, 1],
        maroon: [128, 0, 0, 1],
        mediumaquamarine: [102, 205, 170, 1],
        mediumblue: [0, 0, 205, 1],
        mediumorchid: [186, 85, 211, 1],
        mediumpurple: [147, 112, 219, 1],
        mediumseagreen: [60, 179, 113, 1],
        mediumslateblue: [123, 104, 238, 1],
        mediumspringgreen: [0, 250, 154, 1],
        mediumturquoise: [72, 209, 204, 1],
        mediumvioletred: [199, 21, 133, 1],
        midnightblue: [25, 25, 112, 1],
        mintcream: [245, 255, 250, 1],
        mistyrose: [255, 228, 225, 1],
        moccasin: [255, 228, 181, 1],
        navajowhite: [255, 222, 173, 1],
        navy: [0, 0, 128, 1],
        oldlace: [253, 245, 230, 1],
        olive: [128, 128, 0, 1],
        olivedrab: [107, 142, 35, 1],
        orange: [255, 165, 0, 1],
        orangered: [255, 69, 0, 1],
        orchid: [218, 112, 214, 1],
        palegoldenrod: [238, 232, 170, 1],
        palegreen: [152, 251, 152, 1],
        paleturquoise: [175, 238, 238, 1],
        palevioletred: [219, 112, 147, 1],
        papayawhip: [255, 239, 213, 1],
        peachpuff: [255, 218, 185, 1],
        peru: [205, 133, 63, 1],
        pink: [255, 192, 203, 1],
        plum: [221, 160, 221, 1],
        powderblue: [176, 224, 230, 1],
        purple: [128, 0, 128, 1],
        red: [255, 0, 0, 1],
        rosybrown: [188, 143, 143, 1],
        royalblue: [65, 105, 225, 1],
        saddlebrown: [139, 69, 19, 1],
        salmon: [250, 128, 114, 1],
        sandybrown: [244, 164, 96, 1],
        seagreen: [46, 139, 87, 1],
        seashell: [255, 245, 238, 1],
        sienna: [160, 82, 45, 1],
        silver: [192, 192, 192, 1],
        skyblue: [135, 206, 235, 1],
        slateblue: [106, 90, 205, 1],
        slategray: [112, 128, 144, 1],
        slategrey: [112, 128, 144, 1],
        snow: [255, 250, 250, 1],
        springgreen: [0, 255, 127, 1],
        steelblue: [70, 130, 180, 1],
        tan: [210, 180, 140, 1],
        teal: [0, 128, 128, 1],
        thistle: [216, 191, 216, 1],
        tomato: [255, 99, 71, 1],
        turquoise: [64, 224, 208, 1],
        violet: [238, 130, 238, 1],
        wheat: [245, 222, 179, 1],
        white: [255, 255, 255, 1],
        whitesmoke: [245, 245, 245, 1],
        yellow: [255, 255, 0, 1],
        yellowgreen: [154, 205, 50, 1]
    },
    Dw = new Iw(20),
    Cw = null,
    Lw = Wt,
    kw = Ht,
    Pw = (Object.freeze || Object)({
        parse: Rt,
        lift: Ft,
        toHex: Gt,
        fastLerp: Wt,
        fastMapToColor: Lw,
        lerp: Ht,
        mapToColor: kw,
        modifyHSL: Zt,
        modifyAlpha: jt,
        stringify: Yt
    }),
    Nw = Array.prototype.slice,
    Ow = function(t, e, i, n) {
        this._tracks = {},
        this._target = t,
        this._loop = e || !1,
        this._getter = i || Ut,
        this._setter = n || Xt,
        this._clipCount = 0,
        this._delay = 0,
        this._doneList = [],
        this._onframeList = [],
        this._clipList = []
    };
    Ow.prototype = {
        when: function(t, e) {
            var i = this._tracks;
            for (var n in e) if (e.hasOwnProperty(n)) {
                if (!i[n]) {
                    i[n] = [];
                    var o = this._getter(this._target, n);
                    if (null == o) continue;
                    0 !== t && i[n].push({
                        time: 0,
                        value: ie(o)
                    })
                }
                i[n].push({
                    time: t,
                    value: e[n]
                })
            }
            return this
        },
        during: function(t) {
            return this._onframeList.push(t),
            this
        },
        pause: function() {
            for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause();
            this._paused = !0
        },
        resume: function() {
            for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume();
            this._paused = !1
        },
        isPaused: function() {
            return !! this._paused
        },
        _doneCallback: function() {
            this._tracks = {},
            this._clipList.length = 0;
            for (var t = this._doneList,
            e = t.length,
            i = 0; i < e; i++) t[i].call(this)
        },
        start: function(t, e) {
            var i, n = this,
            o = 0;
            for (var a in this._tracks) if (this._tracks.hasOwnProperty(a)) {
                var r = ae(this, t,
                function() {--o || n._doneCallback()
                },
                this._tracks[a], a, e);
                r && (this._clipList.push(r), o++, this.animation && this.animation.addClip(r), i = r)
            }
            if (i) {
                var s = i.onframe;
                i.onframe = function(t, e) {
                    s(t, e);
                    for (var i = 0; i < n._onframeList.length; i++) n._onframeList[i](t, e)
                }
            }
            return o || this._doneCallback(),
            this
        },
        stop: function(t) {
            for (var e = this._clipList,
            i = this.animation,
            n = 0; n < e.length; n++) {
                var o = e[n];
                t && o.onframe(this._target, 1),
                i && i.removeClip(o)
            }
            e.length = 0
        },
        delay: function(t) {
            return this._delay = t,
            this
        },
        done: function(t) {
            return t && this._doneList.push(t),
            this
        },
        getClips: function() {
            return this._clipList
        }
    };
    var zw = 1;
    "undefined" != typeof window && (zw = Math.max(window.devicePixelRatio || 1, 1));
    var Ew = zw,
    Rw = function() {},
    Bw = Rw,
    Vw = function() {
        this.animators = []
    };
    Vw.prototype = {
        constructor: Vw,
        animate: function(t, e) {
            var i, n = !1,
            o = this,
            a = this.__zr;
            if (t) {
                var r = t.split("."),
                s = o;
                n = "shape" === r[0];
                for (var u = 0,
                h = r.length; u < h; u++) s && (s = s[r[u]]);
                s && (i = s)
            } else i = o;
            if (i) {
                var c = o.animators,
                d = new Ow(i, e);
                return d.during(function(t) {
                    o.dirty(n)
                }).done(function() {
                    c.splice(l(c, d), 1)
                }),
                c.push(d),
                a && a.animation.addAnimator(d),
                d
            }
            Bw('Property "' + t + '" is not existed in element ' + o.id)
        },
        stopAnimation: function(t) {
            for (var e = this.animators,
            i = e.length,
            n = 0; n < i; n++) e[n].stop(t);
            return e.length = 0,
            this
        },
        animateTo: function(t, e, i, n, o, a) {
            re(this, t, e, i, n, o, a)
        },
        animateFrom: function(t, e, i, n, o, a) {
            re(this, t, e, i, n, o, a, !0)
        }
    };
    var Fw = function(t) {
        mw.call(this, t),
        aw.call(this, t),
        Vw.call(this, t),
        this.id = t.id || z_()
    };
    Fw.prototype = {
        type: "element",
        name: "",
        __zr: null,
        ignore: !1,
        clipPath: null,
        isGroup: !1,
        drift: function(t, e) {
            switch (this.draggable) {
            case "horizontal":
                e = 0;
                break;
            case "vertical":
                t = 0
            }
            var i = this.transform;
            i || (i = this.transform = [1, 0, 0, 1, 0, 0]),
            i[4] += t,
            i[5] += e,
            this.decomposeTransform(),
            this.dirty(!1)
        },
        beforeUpdate: function() {},
        afterUpdate: function() {},
        update: function() {
            this.updateTransform()
        },
        traverse: function(t, e) {},
        attrKV: function(t, e) {
            if ("position" === t || "scale" === t || "origin" === t) {
                if (e) {
                    var i = this[t];
                    i || (i = this[t] = []),
                    i[0] = e[0],
                    i[1] = e[1]
                }
            } else this[t] = e
        },
        hide: function() {
            this.ignore = !0,
            this.__zr && this.__zr.refresh()
        },
        show: function() {
            this.ignore = !1,
            this.__zr && this.__zr.refresh()
        },
        attr: function(t, e) {
            if ("string" == typeof t) this.attrKV(t, e);
            else if (w(t)) for (var i in t) t.hasOwnProperty(i) && this.attrKV(i, t[i]);
            return this.dirty(!1),
            this
        },
        setClipPath: function(t) {
            var e = this.__zr;
            e && t.addSelfToZr(e),
            this.clipPath && this.clipPath !== t && this.removeClipPath(),
            this.clipPath = t,
            t.__zr = e,
            t.__clipTarget = this,
            this.dirty(!1)
        },
        removeClipPath: function() {
            var t = this.clipPath;
            t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(!1))
        },
        addSelfToZr: function(t) {
            this.__zr = t;
            var e = this.animators;
            if (e) for (var i = 0; i < e.length; i++) t.animation.addAnimator(e[i]);
            this.clipPath && this.clipPath.addSelfToZr(t)
        },
        removeSelfFromZr: function(t) {
            this.__zr = null;
            var e = this.animators;
            if (e) for (var i = 0; i < e.length; i++) t.animation.removeAnimator(e[i]);
            this.clipPath && this.clipPath.removeSelfFromZr(t)
        }
    },
    h(Fw, Vw),
    h(Fw, mw),
    h(Fw, aw);
    var Gw = $,
    Ww = Math.min,
    Hw = Math.max;
    ue.prototype = {
        constructor: ue,
        union: function(t) {
            var e = Ww(t.x, this.x),
            i = Ww(t.y, this.y);
            this.width = Hw(t.x + t.width, this.x + this.width) - e,
            this.height = Hw(t.y + t.height, this.y + this.height) - i,
            this.x = e,
            this.y = i
        },
        applyTransform: function() {
            var t = [],
            e = [],
            i = [],
            n = [];
            return function(o) {
                if (o) {
                    t[0] = i[0] = this.x,
                    t[1] = n[1] = this.y,
                    e[0] = n[0] = this.x + this.width,
                    e[1] = i[1] = this.y + this.height,
                    Gw(t, t, o),
                    Gw(e, e, o),
                    Gw(i, i, o),
                    Gw(n, n, o),
                    this.x = Ww(t[0], e[0], i[0], n[0]),
                    this.y = Ww(t[1], e[1], i[1], n[1]);
                    var a = Hw(t[0], e[0], i[0], n[0]),
                    r = Hw(t[1], e[1], i[1], n[1]);
                    this.width = a - this.x,
                    this.height = r - this.y
                }
            }
        } (),
        calculateTransform: function(t) {
            var e = this,
            i = t.width / e.width,
            n = t.height / e.height,
            o = mt();
            return _t(o, o, [ - e.x, -e.y]),
            bt(o, o, [i, n]),
            _t(o, o, [t.x, t.y]),
            o
        },
        intersect: function(t) {
            if (!t) return ! 1;
            t instanceof ue || (t = ue.create(t));
            var e = this,
            i = e.x,
            n = e.x + e.width,
            o = e.y,
            a = e.y + e.height,
            r = t.x,
            s = t.x + t.width,
            l = t.y,
            u = t.y + t.height;
            return ! (n < r || s < i || a < l || u < o)
        },
        contain: function(t, e) {
            var i = this;
            return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i.height
        },
        clone: function() {
            return new ue(this.x, this.y, this.width, this.height)
        },
        copy: function(t) {
            this.x = t.x,
            this.y = t.y,
            this.width = t.width,
            this.height = t.height
        },
        plain: function() {
            return {
                x: this.x,
                y: this.y,
                width: this.width,
                height: this.height
            }
        }
    },
    ue.create = function(t) {
        return new ue(t.x, t.y, t.width, t.height)
    };
    var Zw = function(t) {
        t = t || {},
        Fw.call(this, t);
        for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
        this._children = [],
        this.__storage = null,
        this.__dirty = !0
    };
    Zw.prototype = {
        constructor: Zw,
        isGroup: !0,
        type: "group",
        silent: !1,
        children: function() {
            return this._children.slice()
        },
        childAt: function(t) {
            return this._children[t]
        },
        childOfName: function(t) {
            for (var e = this._children,
            i = 0; i < e.length; i++) if (e[i].name === t) return e[i]
        },
        childCount: function() {
            return this._children.length
        },
        add: function(t) {
            return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)),
            this
        },
        addBefore: function(t, e) {
            if (t && t !== this && t.parent !== this && e && e.parent === this) {
                var i = this._children,
                n = i.indexOf(e);
                n >= 0 && (i.splice(n, 0, t), this._doAdd(t))
            }
            return this
        },
        _doAdd: function(t) {
            t.parent && t.parent.remove(t),
            t.parent = this;
            var e = this.__storage,
            i = this.__zr;
            e && e !== t.__storage && (e.addToStorage(t), t instanceof Zw && t.addChildrenToStorage(e)),
            i && i.refresh()
        },
        remove: function(t) {
            var e = this.__zr,
            i = this.__storage,
            n = this._children,
            o = l(n, t);
            return o < 0 ? this: (n.splice(o, 1), t.parent = null, i && (i.delFromStorage(t), t instanceof Zw && t.delChildrenFromStorage(i)), e && e.refresh(), this)
        },
        removeAll: function() {
            var t, e, i = this._children,
            n = this.__storage;
            for (e = 0; e < i.length; e++) t = i[e],
            n && (n.delFromStorage(t), t instanceof Zw && t.delChildrenFromStorage(n)),
            t.parent = null;
            return i.length = 0,
            this
        },
        eachChild: function(t, e) {
            for (var i = this._children,
            n = 0; n < i.length; n++) {
                var o = i[n];
                t.call(e, o, n)
            }
            return this
        },
        traverse: function(t, e) {
            for (var i = 0; i < this._children.length; i++) {
                var n = this._children[i];
                t.call(e, n),
                "group" === n.type && n.traverse(t, e)
            }
            return this
        },
        addChildrenToStorage: function(t) {
            for (var e = 0; e < this._children.length; e++) {
                var i = this._children[e];
                t.addToStorage(i),
                i instanceof Zw && i.addChildrenToStorage(t)
            }
        },
        delChildrenFromStorage: function(t) {
            for (var e = 0; e < this._children.length; e++) {
                var i = this._children[e];
                t.delFromStorage(i),
                i instanceof Zw && i.delChildrenFromStorage(t)
            }
        },
        dirty: function() {
            return this.__dirty = !0,
            this.__zr && this.__zr.refresh(),
            this
        },
        getBoundingRect: function(t) {
            for (var e = null,
            i = new ue(0, 0, 0, 0), n = t || this._children, o = [], a = 0; a < n.length; a++) {
                var r = n[a];
                if (!r.ignore && !r.invisible) {
                    var s = r.getBoundingRect(),
                    l = r.getLocalTransform(o);
                    l ? (i.copy(s), i.applyTransform(l), (e = e || i.clone()).union(i)) : (e = e || s.clone()).union(s)
                }
            }
            return e || i
        }
    },
    u(Zw, Fw);
    var jw = 32,
    Yw = 7,
    Uw = function() {
        this._roots = [],
        this._displayList = [],
        this._displayListLen = 0
    };
    Uw.prototype = {
        constructor: Uw,
        traverse: function(t, e) {
            for (var i = 0; i < this._roots.length; i++) this._roots[i].traverse(t, e)
        },
        getDisplayList: function(t, e) {
            return e = e || !1,
            t && this.updateDisplayList(e),
            this._displayList
        },
        updateDisplayList: function(t) {
            this._displayListLen = 0;
            for (var e = this._roots,
            i = this._displayList,
            n = 0,
            o = e.length; n < o; n++) this._updateAndAddDisplayable(e[n], null, t);
            i.length = this._displayListLen,
            R_.canvasSupported && ve(i, ye)
        },
        _updateAndAddDisplayable: function(t, e, i) {
            if (!t.ignore || i) {
                t.beforeUpdate(),
                t.__dirty && t.update(),
                t.afterUpdate();
                var n = t.clipPath;
                if (n) {
                    e = e ? e.slice() : [];
                    for (var o = n,
                    a = t; o;) o.parent = a,
                    o.updateTransform(),
                    e.push(o),
                    a = o,
                    o = o.clipPath
                }
                if (t.isGroup) {
                    for (var r = t._children,
                    s = 0; s < r.length; s++) {
                        var l = r[s];
                        t.__dirty && (l.__dirty = !0),
                        this._updateAndAddDisplayable(l, e, i)
                    }
                    t.__dirty = !1
                } else t.__clipPaths = e,
                this._displayList[this._displayListLen++] = t
            }
        },
        addRoot: function(t) {
            t.__storage !== this && (t instanceof Zw && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(t))
        },
        delRoot: function(t) {
            if (null == t) {
                for (i = 0; i < this._roots.length; i++) {
                    var e = this._roots[i];
                    e instanceof Zw && e.delChildrenFromStorage(this)
                }
                return this._roots = [],
                this._displayList = [],
                void(this._displayListLen = 0)
            }
            if (t instanceof Array) for (var i = 0,
            n = t.length; i < n; i++) this.delRoot(t[i]);
            else {
                var o = l(this._roots, t);
                o >= 0 && (this.delFromStorage(t), this._roots.splice(o, 1), t instanceof Zw && t.delChildrenFromStorage(this))
            }
        },
        addToStorage: function(t) {
            return t && (t.__storage = this, t.dirty(!1)),
            this
        },
        delFromStorage: function(t) {
            return t && (t.__storage = null),
            this
        },
        dispose: function() {
            this._renderList = this._roots = null
        },
        displayableSortFunc: ye
    };
    var Xw = {
        shadowBlur: 1,
        shadowOffsetX: 1,
        shadowOffsetY: 1,
        textShadowBlur: 1,
        textShadowOffsetX: 1,
        textShadowOffsetY: 1,
        textBoxShadowBlur: 1,
        textBoxShadowOffsetX: 1,
        textBoxShadowOffsetY: 1
    },
    qw = function(t, e, i) {
        return Xw.hasOwnProperty(e) ? i *= t.dpr: i
    },
    Kw = [["shadowBlur", 0], ["shadowOffsetX", 0], ["shadowOffsetY", 0], ["shadowColor", "#000"], ["lineCap", "butt"], ["lineJoin", "miter"], ["miterLimit", 10]],
    Qw = function(t) {
        this.extendFrom(t, !1)
    };
    Qw.prototype = {
        constructor: Qw,
        fill: "#000",
        stroke: null,
        opacity: 1,
        fillOpacity: null,
        strokeOpacity: null,
        lineDash: null,
        lineDashOffset: 0,
        shadowBlur: 0,
        shadowOffsetX: 0,
        shadowOffsetY: 0,
        lineWidth: 1,
        strokeNoScale: !1,
        text: null,
        font: null,
        textFont: null,
        fontStyle: null,
        fontWeight: null,
        fontSize: null,
        fontFamily: null,
        textTag: null,
        textFill: "#000",
        textStroke: null,
        textWidth: null,
        textHeight: null,
        textStrokeWidth: 0,
        textLineHeight: null,
        textPosition: "inside",
        textRect: null,
        textOffset: null,
        textAlign: null,
        textVerticalAlign: null,
        textDistance: 5,
        textShadowColor: "transparent",
        textShadowBlur: 0,
        textShadowOffsetX: 0,
        textShadowOffsetY: 0,
        textBoxShadowColor: "transparent",
        textBoxShadowBlur: 0,
        textBoxShadowOffsetX: 0,
        textBoxShadowOffsetY: 0,
        transformText: !1,
        textRotation: 0,
        textOrigin: null,
        textBackgroundColor: null,
        textBorderColor: null,
        textBorderWidth: 0,
        textBorderRadius: 0,
        textPadding: null,
        rich: null,
        truncate: null,
        blend: null,
        bind: function(t, e, i) {
            for (var n = this,
            o = i && i.style,
            a = !o,
            r = 0; r < Kw.length; r++) {
                var s = Kw[r],
                l = s[0]; (a || n[l] !== o[l]) && (t[l] = qw(t, l, n[l] || s[1]))
            }
            if ((a || n.fill !== o.fill) && (t.fillStyle = n.fill), (a || n.stroke !== o.stroke) && (t.strokeStyle = n.stroke), (a || n.opacity !== o.opacity) && (t.globalAlpha = null == n.opacity ? 1 : n.opacity), (a || n.blend !== o.blend) && (t.globalCompositeOperation = n.blend || "source-over"), this.hasStroke()) {
                var u = n.lineWidth;
                t.lineWidth = u / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1)
            }
        },
        hasFill: function() {
            var t = this.fill;
            return null != t && "none" !== t
        },
        hasStroke: function() {
            var t = this.stroke;
            return null != t && "none" !== t && this.lineWidth > 0
        },
        extendFrom: function(t, e) {
            if (t) for (var i in t) ! t.hasOwnProperty(i) || !0 !== e && (!1 === e ? this.hasOwnProperty(i) : null == t[i]) || (this[i] = t[i])
        },
        set: function(t, e) {
            "string" == typeof t ? this[t] = e: this.extendFrom(t, !0)
        },
        clone: function() {
            var t = new this.constructor;
            return t.extendFrom(this, !0),
            t
        },
        getGradient: function(t, e, i) {
            for (var n = ("radial" === e.type ? _e: xe)(t, e, i), o = e.colorStops, a = 0; a < o.length; a++) n.addColorStop(o[a].offset, o[a].color);
            return n
        }
    };
    for (var Jw = Qw.prototype,
    $w = 0; $w < Kw.length; $w++) {
        var tb = Kw[$w];
        tb[0] in Jw || (Jw[tb[0]] = tb[1])
    }
    Qw.getGradient = Jw.getGradient;
    var eb = function(t, e) {
        this.image = t,
        this.repeat = e,
        this.type = "pattern"
    };
    eb.prototype.getCanvasPattern = function(t) {
        return t.createPattern(this.image, this.repeat || "repeat")
    };
    var ib = function(t, e, i) {
        var n;
        i = i || Ew,
        "string" == typeof t ? n = be(t, e, i) : w(t) && (t = (n = t).id),
        this.id = t,
        this.dom = n;
        var o = n.style;
        o && (n.onselectstart = we, o["-webkit-user-select"] = "none", o["user-select"] = "none", o["-webkit-touch-callout"] = "none", o["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", o.padding = 0, o.margin = 0, o["border-width"] = 0),
        this.domBack = null,
        this.ctxBack = null,
        this.painter = e,
        this.config = null,
        this.clearColor = 0,
        this.motionBlur = !1,
        this.lastFrameAlpha = .7,
        this.dpr = i
    };
    ib.prototype = {
        constructor: ib,
        __dirty: !0,
        __used: !1,
        __drawIndex: 0,
        __startIndex: 0,
        __endIndex: 0,
        incremental: !1,
        getElementCount: function() {
            return this.__endIndex - this.__startIndex
        },
        initContext: function() {
            this.ctx = this.dom.getContext("2d"),
            this.ctx.dpr = this.dpr
        },
        createBackBuffer: function() {
            var t = this.dpr;
            this.domBack = be("back-" + this.id, this.painter, t),
            this.ctxBack = this.domBack.getContext("2d"),
            1 != t && this.ctxBack.scale(t, t)
        },
        resize: function(t, e) {
            var i = this.dpr,
            n = this.dom,
            o = n.style,
            a = this.domBack;
            o && (o.width = t + "px", o.height = e + "px"),
            n.width = t * i,
            n.height = e * i,
            a && (a.width = t * i, a.height = e * i, 1 != i && this.ctxBack.scale(i, i))
        },
        clear: function(t, e) {
            var i = this.dom,
            n = this.ctx,
            o = i.width,
            a = i.height,
            e = e || this.clearColor,
            r = this.motionBlur && !t,
            s = this.lastFrameAlpha,
            l = this.dpr;
            if (r && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(i, 0, 0, o / l, a / l)), n.clearRect(0, 0, o, a), e && "transparent" !== e) {
                var u;
                e.colorStops ? (u = e.__canvasGradient || Qw.getGradient(n, e, {
                    x: 0,
                    y: 0,
                    width: o,
                    height: a
                }), e.__canvasGradient = u) : e.image && (u = eb.prototype.getCanvasPattern.call(e, n)),
                n.save(),
                n.fillStyle = u || e,
                n.fillRect(0, 0, o, a),
                n.restore()
            }
            if (r) {
                var h = this.domBack;
                n.save(),
                n.globalAlpha = s,
                n.drawImage(h, 0, 0, o, a),
                n.restore()
            }
        }
    };
    var nb = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) ||
    function(t) {
        setTimeout(t, 16)
    },
    ob = new Iw(50),
    ab = {},
    rb = 0,
    sb = 5e3,
    lb = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,
    ub = "12px sans-serif",
    hb = {};
    hb.measureText = function(t, e) {
        var i = s();
        return i.font = e || ub,
        i.measureText(t)
    };
    var cb = {
        left: 1,
        right: 1,
        center: 1
    },
    db = {
        top: 1,
        bottom: 1,
        middle: 1
    },
    fb = [["textShadowBlur", "shadowBlur", 0], ["textShadowOffsetX", "shadowOffsetX", 0], ["textShadowOffsetY", "shadowOffsetY", 0], ["textShadowColor", "shadowColor", "transparent"]],
    pb = new ue,
    gb = function() {};
    gb.prototype = {
        constructor: gb,
        drawRectText: function(t, e) {
            var i = this.style;
            e = i.textRect || e,
            this.__dirty && je(i);
            var n = i.text;
            if (null != n && (n += ""), li(n, i)) {
                t.save();
                var o = this.transform;
                i.transformText ? this.setTransform(t) : o && (pb.copy(e), pb.applyTransform(o), e = pb),
                Ue(this, t, n, i, e),
                t.restore()
            }
        }
    },
    ui.prototype = {
        constructor: ui,
        type: "displayable",
        __dirty: !0,
        invisible: !1,
        z: 0,
        z2: 0,
        zlevel: 0,
        draggable: !1,
        dragging: !1,
        silent: !1,
        culling: !1,
        cursor: "pointer",
        rectHover: !1,
        progressive: !1,
        incremental: !1,
        globalScaleRatio: 1,
        beforeBrush: function(t) {},
        afterBrush: function(t) {},
        brush: function(t, e) {},
        getBoundingRect: function() {},
        contain: function(t, e) {
            return this.rectContain(t, e)
        },
        traverse: function(t, e) {
            t.call(e, this)
        },
        rectContain: function(t, e) {
            var i = this.transformCoordToLocal(t, e);
            return this.getBoundingRect().contain(i[0], i[1])
        },
        dirty: function() {
            this.__dirty = this.__dirtyText = !0,
            this._rect = null,
            this.__zr && this.__zr.refresh()
        },
        animateStyle: function(t) {
            return this.animate("style", t)
        },
        attrKV: function(t, e) {
            "style" !== t ? Fw.prototype.attrKV.call(this, t, e) : this.style.set(e)
        },
        setStyle: function(t, e) {
            return this.style.set(t, e),
            this.dirty(!1),
            this
        },
        useStyle: function(t) {
            return this.style = new Qw(t, this),
            this.dirty(!1),
            this
        }
    },
    u(ui, Fw),
    h(ui, gb),
    hi.prototype = {
        constructor: hi,
        type: "image",
        brush: function(t, e) {
            var i = this.style,
            n = i.image;
            i.bind(t, this, e);
            var o = this._image = Me(n, this._image, this, this.onload);
            if (o && Te(o)) {
                var a = i.x || 0,
                r = i.y || 0,
                s = i.width,
                l = i.height,
                u = o.width / o.height;
                if (null == s && null != l ? s = l * u: null == l && null != s ? l = s / u: null == s && null == l && (s = o.width, l = o.height), this.setTransform(t), i.sWidth && i.sHeight) {
                    var h = i.sx || 0,
                    c = i.sy || 0;
                    t.drawImage(o, h, c, i.sWidth, i.sHeight, a, r, s, l)
                } else if (i.sx && i.sy) {
                    var d = s - (h = i.sx),
                    f = l - (c = i.sy);
                    t.drawImage(o, h, c, d, f, a, r, s, l)
                } else t.drawImage(o, a, r, s, l);
                null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
            }
        },
        getBoundingRect: function() {
            var t = this.style;
            return this._rect || (this._rect = new ue(t.x || 0, t.y || 0, t.width || 0, t.height || 0)),
            this._rect
        }
    },
    u(hi, ui);
    var mb = new ue(0, 0, 0, 0),
    vb = new ue(0, 0, 0, 0),
    yb = function(t, e, i) {
        this.type = "canvas";
        var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
        this._opts = i = a({},
        i || {}),
        this.dpr = i.devicePixelRatio || Ew,
        this._singleCanvas = n,
        this.root = t;
        var o = t.style;
        o && (o["-webkit-tap-highlight-color"] = "transparent", o["-webkit-user-select"] = o["user-select"] = o["-webkit-touch-callout"] = "none", t.innerHTML = ""),
        this.storage = e;
        var r = this._zlevelList = [],
        s = this._layers = {};
        if (this._layerConfig = {},
        this._needsManuallyCompositing = !1, n) {
            var l = t.width,
            u = t.height;
            null != i.width && (l = i.width),
            null != i.height && (u = i.height),
            this.dpr = i.devicePixelRatio || 1,
            t.width = l * this.dpr,
            t.height = u * this.dpr,
            this._width = l,
            this._height = u;
            var h = new ib(t, this, this.dpr);
            h.__builtin__ = !0,
            h.initContext(),
            s[314159] = h,
            h.zlevel = 314159,
            r.push(314159),
            this._domRoot = t
        } else {
            this._width = this._getSize(0),
            this._height = this._getSize(1);
            var c = this._domRoot = mi(this._width, this._height);
            t.appendChild(c)
        }
        this._hoverlayer = null,
        this._hoverElements = []
    };
    yb.prototype = {
        constructor: yb,
        getType: function() {
            return "canvas"
        },
        isSingleCanvas: function() {
            return this._singleCanvas
        },
        getViewportRoot: function() {
            return this._domRoot
        },
        getViewportRootOffset: function() {
            var t = this.getViewportRoot();
            if (t) return {
                offsetLeft: t.offsetLeft || 0,
                offsetTop: t.offsetTop || 0
            }
        },
        refresh: function(t) {
            var e = this.storage.getDisplayList(!0),
            i = this._zlevelList;
            this._redrawId = Math.random(),
            this._paintList(e, t, this._redrawId);
            for (var n = 0; n < i.length; n++) {
                var o = i[n],
                a = this._layers[o];
                if (!a.__builtin__ && a.refresh) {
                    var r = 0 === n ? this._backgroundColor: null;
                    a.refresh(r)
                }
            }
            return this.refreshHover(),
            this
        },
        addHover: function(t, e) {
            if (!t.__hoverMir) {
                var i = new t.constructor({
                    style: t.style,
                    shape: t.shape,
                    z: t.z,
                    z2: t.z2,
                    silent: t.silent
                });
                return i.__from = t,
                t.__hoverMir = i,
                e && i.setStyle(e),
                this._hoverElements.push(i),
                i
            }
        },
        removeHover: function(t) {
            var e = t.__hoverMir,
            i = this._hoverElements,
            n = l(i, e);
            n >= 0 && i.splice(n, 1),
            t.__hoverMir = null
        },
        clearHover: function(t) {
            for (var e = this._hoverElements,
            i = 0; i < e.length; i++) {
                var n = e[i].__from;
                n && (n.__hoverMir = null)
            }
            e.length = 0
        },
        refreshHover: function() {
            var t = this._hoverElements,
            e = t.length,
            i = this._hoverlayer;
            if (i && i.clear(), e) {
                ve(t, this.storage.displayableSortFunc),
                i || (i = this._hoverlayer = this.getLayer(1e5));
                var n = {};
                i.ctx.save();
                for (var o = 0; o < e;) {
                    var a = t[o],
                    r = a.__from;
                    r && r.__zr ? (o++, r.invisible || (a.transform = r.transform, a.invTransform = r.invTransform, a.__clipPaths = r.__clipPaths, this._doPaintEl(a, i, !0, n))) : (t.splice(o, 1), r.__hoverMir = null, e--)
                }
                i.ctx.restore()
            }
        },
        getHoverLayer: function() {
            return this.getLayer(1e5)
        },
        _paintList: function(t, e, i) {
            if (this._redrawId === i) {
                e = e || !1,
                this._updateLayerStatus(t);
                var n = this._doPaintList(t, e);
                if (this._needsManuallyCompositing && this._compositeManually(), !n) {
                    var o = this;
                    nb(function() {
                        o._paintList(t, e, i)
                    })
                }
            }
        },
        _compositeManually: function() {
            var t = this.getLayer(314159).ctx,
            e = this._domRoot.width,
            i = this._domRoot.height;
            t.clearRect(0, 0, e, i),
            this.eachBuiltinLayer(function(n) {
                n.virtual && t.drawImage(n.dom, 0, 0, e, i)
            })
        },
        _doPaintList: function(t, e) {
            for (var i = [], n = 0; n < this._zlevelList.length; n++) {
                var o = this._zlevelList[n]; (s = this._layers[o]).__builtin__ && s !== this._hoverlayer && (s.__dirty || e) && i.push(s)
            }
            for (var a = !0,
            r = 0; r < i.length; r++) {
                var s = i[r],
                l = s.ctx,
                u = {};
                l.save();
                var h = e ? s.__startIndex: s.__drawIndex,
                c = !e && s.incremental && Date.now,
                f = c && Date.now(),
                p = s.zlevel === this._zlevelList[0] ? this._backgroundColor: null;
                if (s.__startIndex === s.__endIndex) s.clear(!1, p);
                else if (h === s.__startIndex) {
                    var g = t[h];
                    g.incremental && g.notClear && !e || s.clear(!1, p)
                } - 1 === h && (console.error("For some unknown reason. drawIndex is -1"), h = s.__startIndex);
                for (var m = h; m < s.__endIndex; m++) {
                    var v = t[m];
                    if (this._doPaintEl(v, s, e, u), v.__dirty = v.__dirtyText = !1, c && Date.now() - f > 15) break
                }
                s.__drawIndex = m,
                s.__drawIndex < s.__endIndex && (a = !1),
                u.prevElClipPaths && l.restore(),
                l.restore()
            }
            return R_.wxa && d(this._layers,
            function(t) {
                t && t.ctx && t.ctx.draw && t.ctx.draw()
            }),
            a
        },
        _doPaintEl: function(t, e, i, n) {
            var o = e.ctx,
            a = t.transform;
            if ((e.__dirty || i) && !t.invisible && 0 !== t.style.opacity && (!a || a[0] || a[3]) && (!t.culling || !fi(t, this._width, this._height))) {
                var r = t.__clipPaths;
                n.prevElClipPaths && !pi(r, n.prevElClipPaths) || (n.prevElClipPaths && (e.ctx.restore(), n.prevElClipPaths = null, n.prevEl = null), r && (o.save(), gi(r, o), n.prevElClipPaths = r)),
                t.beforeBrush && t.beforeBrush(o),
                t.brush(o, n.prevEl || null),
                n.prevEl = t,
                t.afterBrush && t.afterBrush(o)
            }
        },
        getLayer: function(t, e) {
            this._singleCanvas && !this._needsManuallyCompositing && (t = 314159);
            var i = this._layers[t];
            return i || ((i = new ib("zr_" + t, this, this.dpr)).zlevel = t, i.__builtin__ = !0, this._layerConfig[t] && n(i, this._layerConfig[t], !0), e && (i.virtual = e), this.insertLayer(t, i), i.initContext()),
            i
        },
        insertLayer: function(t, e) {
            var i = this._layers,
            n = this._zlevelList,
            o = n.length,
            a = null,
            r = -1,
            s = this._domRoot;
            if (i[t]) Bw("ZLevel " + t + " has been used already");
            else if (di(e)) {
                if (o > 0 && t > n[0]) {
                    for (r = 0; r < o - 1 && !(n[r] < t && n[r + 1] > t); r++);
                    a = i[n[r]]
                }
                if (n.splice(r + 1, 0, t), i[t] = e, !e.virtual) if (a) {
                    var l = a.dom;
                    l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom)
                } else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom)
            } else Bw("Layer of zlevel " + t + " is not valid")
        },
        eachLayer: function(t, e) {
            var i, n, o = this._zlevelList;
            for (n = 0; n < o.length; n++) i = o[n],
            t.call(e, this._layers[i], i)
        },
        eachBuiltinLayer: function(t, e) {
            var i, n, o, a = this._zlevelList;
            for (o = 0; o < a.length; o++) n = a[o],
            (i = this._layers[n]).__builtin__ && t.call(e, i, n)
        },
        eachOtherLayer: function(t, e) {
            var i, n, o, a = this._zlevelList;
            for (o = 0; o < a.length; o++) n = a[o],
            (i = this._layers[n]).__builtin__ || t.call(e, i, n)
        },
        getLayers: function() {
            return this._layers
        },
        _updateLayerStatus: function(t) {
            function e(t) {
                i && (i.__endIndex !== t && (i.__dirty = !0), i.__endIndex = t)
            }
            if (this.eachBuiltinLayer(function(t, e) {
                t.__dirty = t.__used = !1
            }), this._singleCanvas) for (o = 1; o < t.length; o++) if ((r = t[o]).zlevel !== t[o - 1].zlevel || r.incremental) {
                this._needsManuallyCompositing = !0;
                break
            }
            for (var i = null,
            n = 0,
            o = 0; o < t.length; o++) {
                var a, r = t[o],
                s = r.zlevel;
                r.incremental ? ((a = this.getLayer(s + .001, this._needsManuallyCompositing)).incremental = !0, n = 1) : a = this.getLayer(s + (n > 0 ? .01 : 0), this._needsManuallyCompositing),
                a.__builtin__ || Bw("ZLevel " + s + " has been used by unkown layer " + a.id),
                a !== i && (a.__used = !0, a.__startIndex !== o && (a.__dirty = !0), a.__startIndex = o, a.incremental ? a.__drawIndex = -1 : a.__drawIndex = o, e(o), i = a),
                r.__dirty && (a.__dirty = !0, a.incremental && a.__drawIndex < 0 && (a.__drawIndex = o))
            }
            e(o),
            this.eachBuiltinLayer(function(t, e) { ! t.__used && t.getElementCount() > 0 && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0),
                t.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex)
            })
        },
        clear: function() {
            return this.eachBuiltinLayer(this._clearLayer),
            this
        },
        _clearLayer: function(t) {
            t.clear()
        },
        setBackgroundColor: function(t) {
            this._backgroundColor = t
        },
        configLayer: function(t, e) {
            if (e) {
                var i = this._layerConfig;
                i[t] ? n(i[t], e, !0) : i[t] = e;
                for (var o = 0; o < this._zlevelList.length; o++) {
                    var a = this._zlevelList[o];
                    a !== t && a !== t + .01 || n(this._layers[a], i[t], !0)
                }
            }
        },
        delLayer: function(t) {
            var e = this._layers,
            i = this._zlevelList,
            n = e[t];
            n && (n.dom.parentNode.removeChild(n.dom), delete e[t], i.splice(l(i, t), 1))
        },
        resize: function(t, e) {
            if (this._domRoot.style) {
                var i = this._domRoot;
                i.style.display = "none";
                var n = this._opts;
                if (null != t && (n.width = t), null != e && (n.height = e), t = this._getSize(0), e = this._getSize(1), i.style.display = "", this._width != t || e != this._height) {
                    i.style.width = t + "px",
                    i.style.height = e + "px";
                    for (var o in this._layers) this._layers.hasOwnProperty(o) && this._layers[o].resize(t, e);
                    d(this._progressiveLayers,
                    function(i) {
                        i.resize(t, e)
                    }),
                    this.refresh(!0)
                }
                this._width = t,
                this._height = e
            } else {
                if (null == t || null == e) return;
                this._width = t,
                this._height = e,
                this.getLayer(314159).resize(t, e)
            }
            return this
        },
        clearLayer: function(t) {
            var e = this._layers[t];
            e && e.clear()
        },
        dispose: function() {
            this.root.innerHTML = "",
            this.root = this.storage = this._domRoot = this._layers = null
        },
        getRenderedCanvas: function(t) {
            if (t = t || {},
            this._singleCanvas && !this._compositeManually) return this._layers[314159].dom;
            var e = new ib("image", this, t.pixelRatio || this.dpr);
            if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) {
                this.refresh();
                var i = e.dom.width,
                n = e.dom.height,
                o = e.ctx;
                this.eachLayer(function(t) {
                    t.__builtin__ ? o.drawImage(t.dom, 0, 0, i, n) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx), e.ctx.restore())
                })
            } else for (var a = {},
            r = this.storage.getDisplayList(!0), s = 0; s < r.length; s++) {
                var l = r[s];
                this._doPaintEl(l, e, !0, a)
            }
            return e.dom
        },
        getWidth: function() {
            return this._width
        },
        getHeight: function() {
            return this._height
        },
        _getSize: function(t) {
            var e = this._opts,
            i = ["width", "height"][t],
            n = ["clientWidth", "clientHeight"][t],
            o = ["paddingLeft", "paddingTop"][t],
            a = ["paddingRight", "paddingBottom"][t];
            if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]);
            var r = this.root,
            s = document.defaultView.getComputedStyle(r);
            return (r[n] || ci(s[i]) || ci(r.style[i])) - (ci(s[o]) || 0) - (ci(s[a]) || 0) | 0
        },
        pathToImage: function(t, e) {
            e = e || this.dpr;
            var i = document.createElement("canvas"),
            n = i.getContext("2d"),
            o = t.getBoundingRect(),
            a = t.style,
            r = a.shadowBlur * e,
            s = a.shadowOffsetX * e,
            l = a.shadowOffsetY * e,
            u = a.hasStroke() ? a.lineWidth: 0,
            h = Math.max(u / 2, -s + r),
            c = Math.max(u / 2, s + r),
            d = Math.max(u / 2, -l + r),
            f = Math.max(u / 2, l + r),
            p = o.width + h + c,
            g = o.height + d + f;
            i.width = p * e,
            i.height = g * e,
            n.scale(e, e),
            n.clearRect(0, 0, p, g),
            n.dpr = e;
            var m = {
                position: t.position,
                rotation: t.rotation,
                scale: t.scale
            };
            t.position = [h - o.x, d - o.y],
            t.rotation = 0,
            t.scale = [1, 1],
            t.updateTransform(),
            t && t.brush(n);
            var v = new hi({
                style: {
                    x: 0,
                    y: 0,
                    image: i
                }
            });
            return null != m.position && (v.position = t.position = m.position),
            null != m.rotation && (v.rotation = t.rotation = m.rotation),
            null != m.scale && (v.scale = t.scale = m.scale),
            v
        }
    };
    var xb = function(t) {
        t = t || {},
        this.stage = t.stage || {},
        this.onframe = t.onframe ||
        function() {},
        this._clips = [],
        this._running = !1,
        this._time,
        this._pausedTime,
        this._pauseStart,
        this._paused = !1,
        aw.call(this)
    };
    xb.prototype = {
        constructor: xb,
        addClip: function(t) {
            this._clips.push(t)
        },
        addAnimator: function(t) {
            t.animation = this;
            for (var e = t.getClips(), i = 0; i < e.length; i++) this.addClip(e[i])
        },
        removeClip: function(t) {
            var e = l(this._clips, t);
            e >= 0 && this._clips.splice(e, 1)
        },
        removeAnimator: function(t) {
            for (var e = t.getClips(), i = 0; i < e.length; i++) this.removeClip(e[i]);
            t.animation = null
        },
        _update: function() {
            for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, i = this._clips, n = i.length, o = [], a = [], r = 0; r < n; r++) {
                var s = i[r],
                l = s.step(t, e);
                l && (o.push(l), a.push(s))
            }
            for (r = 0; r < n;) i[r]._needsRemove ? (i[r] = i[n - 1], i.pop(), n--) : r++;
            for (n = o.length, r = 0; r < n; r++) a[r].fire(o[r]);
            this._time = t,
            this.onframe(e),
            this.trigger("frame", e),
            this.stage.update && this.stage.update()
        },
        _startLoop: function() {
            function t() {
                e._running && (nb(t), !e._paused && e._update())
            }
            var e = this;
            this._running = !0,
            nb(t)
        },
        start: function() {
            this._time = (new Date).getTime(),
            this._pausedTime = 0,
            this._startLoop()
        },
        stop: function() {
            this._running = !1
        },
        pause: function() {
            this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0)
        },
        resume: function() {
            this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1)
        },
        clear: function() {
            this._clips = []
        },
        isFinished: function() {
            return ! this._clips.length
        },
        animate: function(t, e) {
            var i = new Ow(t, (e = e || {}).loop, e.getter, e.setter);
            return this.addAnimator(i),
            i
        }
    },
    h(xb, aw);
    var _b = function() {
        this._track = []
    };
    _b.prototype = {
        constructor: _b,
        recognize: function(t, e, i) {
            return this._doTrack(t, e, i),
            this._recognize(t)
        },
        clear: function() {
            return this._track.length = 0,
            this
        },
        _doTrack: function(t, e, i) {
            var n = t.touches;
            if (n) {
                for (var o = {
                    points: [],
                    touches: [],
                    target: e,
                    event: t
                },
                a = 0, r = n.length; a < r; a++) {
                    var s = n[a],
                    l = rt(i, s, {});
                    o.points.push([l.zrX, l.zrY]),
                    o.touches.push(s)
                }
                this._track.push(o)
            }
        },
        _recognize: function(t) {
            for (var e in wb) if (wb.hasOwnProperty(e)) {
                var i = wb[e](this._track, t);
                if (i) return i
            }
        }
    };
    var wb = {
        pinch: function(t, e) {
            var i = t.length;
            if (i) {
                var n = (t[i - 1] || {}).points,
                o = (t[i - 2] || {}).points || n;
                if (o && o.length > 1 && n && n.length > 1) {
                    var a = vi(n) / vi(o); ! isFinite(a) && (a = 1),
                    e.pinchScale = a;
                    var r = yi(n);
                    return e.pinchX = r[0],
                    e.pinchY = r[1],
                    {
                        type: "pinch",
                        target: t[0].target,
                        event: e
                    }
                }
            }
        }
    },
    bb = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
    Sb = ["touchstart", "touchend", "touchmove"],
    Mb = {
        pointerdown: 1,
        pointerup: 1,
        pointermove: 1,
        pointerout: 1
    },
    Ib = f(bb,
    function(t) {
        var e = t.replace("mouse", "pointer");
        return Mb[e] ? e: t
    }),
    Tb = {
        mousemove: function(t) {
            t = lt(this.dom, t),
            this.trigger("mousemove", t)
        },
        mouseout: function(t) {
            var e = (t = lt(this.dom, t)).toElement || t.relatedTarget;
            if (e != this.dom) for (; e && 9 != e.nodeType;) {
                if (e === this.dom) return;
                e = e.parentNode
            }
            this.trigger("mouseout", t)
        },
        touchstart: function(t) { (t = lt(this.dom, t)).zrByTouch = !0,
            this._lastTouchMoment = new Date,
            _i(this, t, "start"),
            Tb.mousemove.call(this, t),
            Tb.mousedown.call(this, t),
            wi(this)
        },
        touchmove: function(t) { (t = lt(this.dom, t)).zrByTouch = !0,
            _i(this, t, "change"),
            Tb.mousemove.call(this, t),
            wi(this)
        },
        touchend: function(t) { (t = lt(this.dom, t)).zrByTouch = !0,
            _i(this, t, "end"),
            Tb.mouseup.call(this, t),
            +new Date - this._lastTouchMoment < 300 && Tb.click.call(this, t),
            wi(this)
        },
        pointerdown: function(t) {
            Tb.mousedown.call(this, t)
        },
        pointermove: function(t) {
            bi(t) || Tb.mousemove.call(this, t)
        },
        pointerup: function(t) {
            Tb.mouseup.call(this, t)
        },
        pointerout: function(t) {
            bi(t) || Tb.mouseout.call(this, t)
        }
    };
    d(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"],
    function(t) {
        Tb[t] = function(e) {
            e = lt(this.dom, e),
            this.trigger(t, e)
        }
    });
    var Ab = Mi.prototype;
    Ab.dispose = function() {
        for (var t = bb.concat(Sb), e = 0; e < t.length; e++) {
            var i = t[e];
            ht(this.dom, xi(i), this._handlers[i])
        }
    },
    Ab.setCursor = function(t) {
        this.dom.style && (this.dom.style.cursor = t || "default")
    },
    h(Mi, aw);
    var Db = !R_.canvasSupported,
    Cb = {
        canvas: yb
    },
    Lb = {},
    kb = function(t, e, i) {
        i = i || {},
        this.dom = e,
        this.id = t;
        var n = this,
        o = new Uw,
        a = i.renderer;
        if (Db) {
            if (!Cb.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
            a = "vml"
        } else a && Cb[a] || (a = "canvas");
        var r = new Cb[a](e, o, i, t);
        this.storage = o,
        this.painter = r;
        var s = R_.node || R_.worker ? null: new Mi(r.getViewportRoot());
        this.handler = new cw(o, r, s, r.root),
        this.animation = new xb({
            stage: {
                update: m(this.flush, this)
            }
        }),
        this.animation.start(),
        this._needsRefresh;
        var l = o.delFromStorage,
        u = o.addToStorage;
        o.delFromStorage = function(t) {
            l.call(o, t),
            t && t.removeSelfFromZr(n)
        },
        o.addToStorage = function(t) {
            u.call(o, t),
            t.addSelfToZr(n)
        }
    };
    kb.prototype = {
        constructor: kb,
        getId: function() {
            return this.id
        },
        add: function(t) {
            this.storage.addRoot(t),
            this._needsRefresh = !0
        },
        remove: function(t) {
            this.storage.delRoot(t),
            this._needsRefresh = !0
        },
        configLayer: function(t, e) {
            this.painter.configLayer && this.painter.configLayer(t, e),
            this._needsRefresh = !0
        },
        setBackgroundColor: function(t) {
            this.painter.setBackgroundColor && this.painter.setBackgroundColor(t),
            this._needsRefresh = !0
        },
        refreshImmediately: function() {
            this._needsRefresh = !1,
            this.painter.refresh(),
            this._needsRefresh = !1
        },
        refresh: function() {
            this._needsRefresh = !0
        },
        flush: function() {
            var t;
            this._needsRefresh && (t = !0, this.refreshImmediately()),
            this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()),
            t && this.trigger("rendered")
        },
        addHover: function(t, e) {
            if (this.painter.addHover) {
                var i = this.painter.addHover(t, e);
                return this.refreshHover(),
                i
            }
        },
        removeHover: function(t) {
            this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover())
        },
        clearHover: function() {
            this.painter.clearHover && (this.painter.clearHover(), this.refreshHover())
        },
        refreshHover: function() {
            this._needsRefreshHover = !0
        },
        refreshHoverImmediately: function() {
            this._needsRefreshHover = !1,
            this.painter.refreshHover && this.painter.refreshHover()
        },
        resize: function(t) {
            t = t || {},
            this.painter.resize(t.width, t.height),
            this.handler.resize()
        },
        clearAnimation: function() {
            this.animation.clear()
        },
        getWidth: function() {
            return this.painter.getWidth()
        },
        getHeight: function() {
            return this.painter.getHeight()
        },
        pathToImage: function(t, e) {
            return this.painter.pathToImage(t, e)
        },
        setCursorStyle: function(t) {
            this.handler.setCursorStyle(t)
        },
        findHover: function(t, e) {
            return this.handler.findHover(t, e)
        },
        on: function(t, e, i) {
            this.handler.on(t, e, i)
        },
        off: function(t, e) {
            this.handler.off(t, e)
        },
        trigger: function(t, e) {
            this.handler.trigger(t, e)
        },
        clear: function() {
            this.storage.delRoot(),
            this.painter.clear()
        },
        dispose: function() {
            this.animation.stop(),
            this.clear(),
            this.storage.dispose(),
            this.painter.dispose(),
            this.handler.dispose(),
            this.animation = this.storage = this.painter = this.handler = null,
            Ai(this.id)
        }
    };
    var Pb = (Object.freeze || Object)({
        version: "4.0.5",
        init: Ii,
        dispose: function(t) {
            if (t) t.dispose();
            else {
                for (var e in Lb) Lb.hasOwnProperty(e) && Lb[e].dispose();
                Lb = {}
            }
            return this
        },
        getInstance: function(t) {
            return Lb[t]
        },
        registerPainter: Ti
    }),
    Nb = d,
    Ob = w,
    zb = y,
    Eb = "series\0",
    Rb = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"],
    Bb = 0,
    Vb = ".",
    Fb = "___EC__COMPONENT__CONTAINER___",
    Gb = 0,
    Wb = function(t) {
        for (var e = 0; e < t.length; e++) t[e][1] || (t[e][1] = t[e][0]);
        return function(e, i, n) {
            for (var o = {},
            a = 0; a < t.length; a++) {
                var r = t[a][1];
                if (! (i && l(i, r) >= 0 || n && l(n, r) < 0)) {
                    var s = e.getShallow(r);
                    null != s && (o[t[a][0]] = s)
                }
            }
            return o
        }
    },
    Hb = Wb([["lineWidth", "width"], ["stroke", "color"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]),
    Zb = {
        getLineStyle: function(t) {
            var e = Hb(this, t),
            i = this.getLineDash(e.lineWidth);
            return i && (e.lineDash = i),
            e
        },
        getLineDash: function(t) {
            null == t && (t = 1);
            var e = this.get("type"),
            i = Math.max(t, 2),
            n = 4 * t;
            return "solid" === e || null == e ? null: "dashed" === e ? [n, n] : [i, i]
        }
    },
    jb = Wb([["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["opacity"], ["shadowColor"]]),
    Yb = {
        getAreaStyle: function(t, e) {
            return jb(this, t, e)
        }
    },
    Ub = Math.pow,
    Xb = Math.sqrt,
    qb = 1e-8,
    Kb = 1e-4,
    Qb = Xb(3),
    Jb = 1 / 3,
    $b = V(),
    tS = V(),
    eS = V(),
    iS = Math.min,
    nS = Math.max,
    oS = Math.sin,
    aS = Math.cos,
    rS = 2 * Math.PI,
    sS = V(),
    lS = V(),
    uS = V(),
    hS = [],
    cS = [],
    dS = {
        M: 1,
        L: 2,
        C: 3,
        Q: 4,
        A: 5,
        Z: 6,
        R: 7
    },
    fS = [],
    pS = [],
    gS = [],
    mS = [],
    vS = Math.min,
    yS = Math.max,
    xS = Math.cos,
    _S = Math.sin,
    wS = Math.sqrt,
    bS = Math.abs,
    SS = "undefined" != typeof Float32Array,
    MS = function(t) {
        this._saveData = !t,
        this._saveData && (this.data = []),
        this._ctx = null
    };
    MS.prototype = {
        constructor: MS,
        _xi: 0,
        _yi: 0,
        _x0: 0,
        _y0: 0,
        _ux: 0,
        _uy: 0,
        _len: 0,
        _lineDash: null,
        _dashOffset: 0,
        _dashIdx: 0,
        _dashSum: 0,
        setScale: function(t, e) {
            this._ux = bS(1 / Ew / t) || 0,
            this._uy = bS(1 / Ew / e) || 0
        },
        getContext: function() {
            return this._ctx
        },
        beginPath: function(t) {
            return this._ctx = t,
            t && t.beginPath(),
            t && (this.dpr = t.dpr),
            this._saveData && (this._len = 0),
            this._lineDash && (this._lineDash = null, this._dashOffset = 0),
            this
        },
        moveTo: function(t, e) {
            return this.addData(dS.M, t, e),
            this._ctx && this._ctx.moveTo(t, e),
            this._x0 = t,
            this._y0 = e,
            this._xi = t,
            this._yi = e,
            this
        },
        lineTo: function(t, e) {
            var i = bS(t - this._xi) > this._ux || bS(e - this._yi) > this._uy || this._len < 5;
            return this.addData(dS.L, t, e),
            this._ctx && i && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)),
            i && (this._xi = t, this._yi = e),
            this
        },
        bezierCurveTo: function(t, e, i, n, o, a) {
            return this.addData(dS.C, t, e, i, n, o, a),
            this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, o, a) : this._ctx.bezierCurveTo(t, e, i, n, o, a)),
            this._xi = o,
            this._yi = a,
            this
        },
        quadraticCurveTo: function(t, e, i, n) {
            return this.addData(dS.Q, t, e, i, n),
            this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) : this._ctx.quadraticCurveTo(t, e, i, n)),
            this._xi = i,
            this._yi = n,
            this
        },
        arc: function(t, e, i, n, o, a) {
            return this.addData(dS.A, t, e, i, i, n, o - n, 0, a ? 0 : 1),
            this._ctx && this._ctx.arc(t, e, i, n, o, a),
            this._xi = xS(o) * i + t,
            this._yi = _S(o) * i + e,
            this
        },
        arcTo: function(t, e, i, n, o) {
            return this._ctx && this._ctx.arcTo(t, e, i, n, o),
            this
        },
        rect: function(t, e, i, n) {
            return this._ctx && this._ctx.rect(t, e, i, n),
            this.addData(dS.R, t, e, i, n),
            this
        },
        closePath: function() {
            this.addData(dS.Z);
            var t = this._ctx,
            e = this._x0,
            i = this._y0;
            return t && (this._needsDash() && this._dashedLineTo(e, i), t.closePath()),
            this._xi = e,
            this._yi = i,
            this
        },
        fill: function(t) {
            t && t.fill(),
            this.toStatic()
        },
        stroke: function(t) {
            t && t.stroke(),
            this.toStatic()
        },
        setLineDash: function(t) {
            if (t instanceof Array) {
                this._lineDash = t,
                this._dashIdx = 0;
                for (var e = 0,
                i = 0; i < t.length; i++) e += t[i];
                this._dashSum = e
            }
            return this
        },
        setLineDashOffset: function(t) {
            return this._dashOffset = t,
            this
        },
        len: function() {
            return this._len
        },
        setData: function(t) {
            var e = t.length;
            this.data && this.data.length == e || !SS || (this.data = new Float32Array(e));
            for (var i = 0; i < e; i++) this.data[i] = t[i];
            this._len = e
        },
        appendPath: function(t) {
            t instanceof Array || (t = [t]);
            for (var e = t.length,
            i = 0,
            n = this._len,
            o = 0; o < e; o++) i += t[o].len();
            for (SS && this.data instanceof Float32Array && (this.data = new Float32Array(n + i)), o = 0; o < e; o++) for (var a = t[o].data, r = 0; r < a.length; r++) this.data[n++] = a[r];
            this._len = n
        },
        addData: function(t) {
            if (this._saveData) {
                var e = this.data;
                this._len + arguments.length > e.length && (this._expandData(), e = this.data);
                for (var i = 0; i < arguments.length; i++) e[this._len++] = arguments[i];
                this._prevCmd = t
            }
        },
        _expandData: function() {
            if (! (this.data instanceof Array)) {
                for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
                this.data = t
            }
        },
        _needsDash: function() {
            return this._lineDash
        },
        _dashedLineTo: function(t, e) {
            var i, n, o = this._dashSum,
            a = this._dashOffset,
            r = this._lineDash,
            s = this._ctx,
            l = this._xi,
            u = this._yi,
            h = t - l,
            c = e - u,
            d = wS(h * h + c * c),
            f = l,
            p = u,
            g = r.length;
            for (h /= d, c /= d, a < 0 && (a = o + a), f -= (a %= o) * h, p -= a * c; h > 0 && f <= t || h < 0 && f >= t || 0 == h && (c > 0 && p <= e || c < 0 && p >= e);) f += h * (i = r[n = this._dashIdx]),
            p += c * i,
            this._dashIdx = (n + 1) % g,
            h > 0 && f < l || h < 0 && f > l || c > 0 && p < u || c < 0 && p > u || s[n % 2 ? "moveTo": "lineTo"](h >= 0 ? vS(f, t) : yS(f, t), c >= 0 ? vS(p, e) : yS(p, e));
            h = f - t,
            c = p - e,
            this._dashOffset = -wS(h * h + c * c)
        },
        _dashedBezierTo: function(t, e, i, n, o, a) {
            var r, s, l, u, h, c = this._dashSum,
            d = this._dashOffset,
            f = this._lineDash,
            p = this._ctx,
            g = this._xi,
            m = this._yi,
            v = $i,
            y = 0,
            x = this._dashIdx,
            _ = f.length,
            w = 0;
            for (d < 0 && (d = c + d), d %= c, r = 0; r < 1; r += .1) s = v(g, t, i, o, r + .1) - v(g, t, i, o, r),
            l = v(m, e, n, a, r + .1) - v(m, e, n, a, r),
            y += wS(s * s + l * l);
            for (; x < _ && !((w += f[x]) > d); x++);
            for (r = (w - d) / y; r <= 1;) u = v(g, t, i, o, r),
            h = v(m, e, n, a, r),
            x % 2 ? p.moveTo(u, h) : p.lineTo(u, h),
            r += f[x] / y,
            x = (x + 1) % _;
            x % 2 != 0 && p.lineTo(o, a),
            s = o - u,
            l = a - h,
            this._dashOffset = -wS(s * s + l * l)
        },
        _dashedQuadraticTo: function(t, e, i, n) {
            var o = i,
            a = n;
            i = (i + 2 * t) / 3,
            n = (n + 2 * e) / 3,
            t = (this._xi + 2 * t) / 3,
            e = (this._yi + 2 * e) / 3,
            this._dashedBezierTo(t, e, i, n, o, a)
        },
        toStatic: function() {
            var t = this.data;
            t instanceof Array && (t.length = this._len, SS && (this.data = new Float32Array(t)))
        },
        getBoundingRect: function() {
            fS[0] = fS[1] = gS[0] = gS[1] = Number.MAX_VALUE,
            pS[0] = pS[1] = mS[0] = mS[1] = -Number.MAX_VALUE;
            for (var t = this.data,
            e = 0,
            i = 0,
            n = 0,
            o = 0,
            a = 0; a < t.length;) {
                var r = t[a++];
                switch (1 == a && (n = e = t[a], o = i = t[a + 1]), r) {
                case dS.M:
                    e = n = t[a++],
                    i = o = t[a++],
                    gS[0] = n,
                    gS[1] = o,
                    mS[0] = n,
                    mS[1] = o;
                    break;
                case dS.L:
                    fn(e, i, t[a], t[a + 1], gS, mS),
                    e = t[a++],
                    i = t[a++];
                    break;
                case dS.C:
                    pn(e, i, t[a++], t[a++], t[a++], t[a++], t[a], t[a + 1], gS, mS),
                    e = t[a++],
                    i = t[a++];
                    break;
                case dS.Q:
                    gn(e, i, t[a++], t[a++], t[a], t[a + 1], gS, mS),
                    e = t[a++],
                    i = t[a++];
                    break;
                case dS.A:
                    var s = t[a++],
                    l = t[a++],
                    u = t[a++],
                    h = t[a++],
                    c = t[a++],
                    d = t[a++] + c,
                    f = (t[a++], 1 - t[a++]);
                    1 == a && (n = xS(c) * u + s, o = _S(c) * h + l),
                    mn(s, l, u, h, c, d, f, gS, mS),
                    e = xS(d) * u + s,
                    i = _S(d) * h + l;
                    break;
                case dS.R:
                    fn(n = e = t[a++], o = i = t[a++], n + t[a++], o + t[a++], gS, mS);
                    break;
                case dS.Z:
                    e = n,
                    i = o
                }
                tt(fS, fS, gS),
                et(pS, pS, mS)
            }
            return 0 === a && (fS[0] = fS[1] = pS[0] = pS[1] = 0),
            new ue(fS[0], fS[1], pS[0] - fS[0], pS[1] - fS[1])
        },
        rebuildPath: function(t) {
            for (var e, i, n, o, a, r, s = this.data,
            l = this._ux,
            u = this._uy,
            h = this._len,
            c = 0; c < h;) {
                var d = s[c++];
                switch (1 == c && (e = n = s[c], i = o = s[c + 1]), d) {
                case dS.M:
                    e = n = s[c++],
                    i = o = s[c++],
                    t.moveTo(n, o);
                    break;
                case dS.L:
                    a = s[c++],
                    r = s[c++],
                    (bS(a - n) > l || bS(r - o) > u || c === h - 1) && (t.lineTo(a, r), n = a, o = r);
                    break;
                case dS.C:
                    t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]),
                    n = s[c - 2],
                    o = s[c - 1];
                    break;
                case dS.Q:
                    t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]),
                    n = s[c - 2],
                    o = s[c - 1];
                    break;
                case dS.A:
                    var f = s[c++],
                    p = s[c++],
                    g = s[c++],
                    m = s[c++],
                    v = s[c++],
                    y = s[c++],
                    x = s[c++],
                    _ = s[c++],
                    w = g > m ? g: m,
                    b = g > m ? 1 : g / m,
                    S = g > m ? m / g: 1,
                    M = v + y;
                    Math.abs(g - m) > .001 ? (t.translate(f, p), t.rotate(x), t.scale(b, S), t.arc(0, 0, w, v, M, 1 - _), t.scale(1 / b, 1 / S), t.rotate( - x), t.translate( - f, -p)) : t.arc(f, p, w, v, M, 1 - _),
                    1 == c && (e = xS(v) * g + f, i = _S(v) * m + p),
                    n = xS(M) * g + f,
                    o = _S(M) * m + p;
                    break;
                case dS.R:
                    e = n = s[c],
                    i = o = s[c + 1],
                    t.rect(s[c++], s[c++], s[c++], s[c++]);
                    break;
                case dS.Z:
                    t.closePath(),
                    n = e,
                    o = i
                }
            }
        }
    },
    MS.CMD = dS;
    var IS = 2 * Math.PI,
    TS = 2 * Math.PI,
    AS = MS.CMD,
    DS = 2 * Math.PI,
    CS = 1e-4,
    LS = [ - 1, -1, -1],
    kS = [ - 1, -1],
    PS = eb.prototype.getCanvasPattern,
    NS = Math.abs,
    OS = new MS(!0);
    kn.prototype = {
        constructor: kn,
        type: "path",
        __dirtyPath: !0,
        strokeContainThreshold: 5,
        brush: function(t, e) {
            var i = this.style,
            n = this.path || OS,
            o = i.hasStroke(),
            a = i.hasFill(),
            r = i.fill,
            s = i.stroke,
            l = a && !!r.colorStops,
            u = o && !!s.colorStops,
            h = a && !!r.image,
            c = o && !!s.image;
            if (i.bind(t, this, e), this.setTransform(t), this.__dirty) {
                var d;
                l && (d = d || this.getBoundingRect(), this._fillGradient = i.getGradient(t, r, d)),
                u && (d = d || this.getBoundingRect(), this._strokeGradient = i.getGradient(t, s, d))
            }
            l ? t.fillStyle = this._fillGradient: h && (t.fillStyle = PS.call(r, t)),
            u ? t.strokeStyle = this._strokeGradient: c && (t.strokeStyle = PS.call(s, t));
            var f = i.lineDash,
            p = i.lineDashOffset,
            g = !!t.setLineDash,
            m = this.getGlobalScale();
            if (n.setScale(m[0], m[1]), this.__dirtyPath || f && !g && o ? (n.beginPath(t), f && !g && (n.setLineDash(f), n.setLineDashOffset(p)), this.buildPath(n, this.shape, !1), this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), a && (null != i.fillOpacity ? (v = t.globalAlpha, t.globalAlpha = i.fillOpacity * i.opacity, n.fill(t), t.globalAlpha = v) : n.fill(t)), f && g && (t.setLineDash(f), t.lineDashOffset = p), o) if (null != i.strokeOpacity) {
                var v = t.globalAlpha;
                t.globalAlpha = i.strokeOpacity * i.opacity,
                n.stroke(t),
                t.globalAlpha = v
            } else n.stroke(t);
            f && g && t.setLineDash([]),
            null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
        },
        buildPath: function(t, e, i) {},
        createPathProxy: function() {
            this.path = new MS
        },
        getBoundingRect: function() {
            var t = this._rect,
            e = this.style,
            i = !t;
            if (i) {
                var n = this.path;
                n || (n = this.path = new MS),
                this.__dirtyPath && (n.beginPath(), this.buildPath(n, this.shape, !1)),
                t = n.getBoundingRect()
            }
            if (this._rect = t, e.hasStroke()) {
                var o = this._rectWithStroke || (this._rectWithStroke = t.clone());
                if (this.__dirty || i) {
                    o.copy(t);
                    var a = e.lineWidth,
                    r = e.strokeNoScale ? this.getLineScale() : 1;
                    e.hasFill() || (a = Math.max(a, this.strokeContainThreshold || 4)),
                    r > 1e-10 && (o.width += a / r, o.height += a / r, o.x -= a / r / 2, o.y -= a / r / 2)
                }
                return o
            }
            return t
        },
        contain: function(t, e) {
            var i = this.transformCoordToLocal(t, e),
            n = this.getBoundingRect(),
            o = this.style;
            if (t = i[0], e = i[1], n.contain(t, e)) {
                var a = this.path.data;
                if (o.hasStroke()) {
                    var r = o.lineWidth,
                    s = o.strokeNoScale ? this.getLineScale() : 1;
                    if (s > 1e-10 && (o.hasFill() || (r = Math.max(r, this.strokeContainThreshold)), Ln(a, r / s, t, e))) return ! 0
                }
                if (o.hasFill()) return Cn(a, t, e)
            }
            return ! 1
        },
        dirty: function(t) {
            null == t && (t = !0),
            t && (this.__dirtyPath = t, this._rect = null),
            this.__dirty = this.__dirtyText = !0,
            this.__zr && this.__zr.refresh(),
            this.__clipTarget && this.__clipTarget.dirty()
        },
        animateShape: function(t) {
            return this.animate("shape", t)
        },
        attrKV: function(t, e) {
            "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : ui.prototype.attrKV.call(this, t, e)
        },
        setShape: function(t, e) {
            var i = this.shape;
            if (i) {
                if (w(t)) for (var n in t) t.hasOwnProperty(n) && (i[n] = t[n]);
                else i[t] = e;
                this.dirty(!0)
            }
            return this
        },
        getLineScale: function() {
            var t = this.transform;
            return t && NS(t[0] - 1) > 1e-10 && NS(t[3] - 1) > 1e-10 ? Math.sqrt(NS(t[0] * t[3] - t[2] * t[1])) : 1
        }
    },
    kn.extend = function(t) {
        var e = function(e) {
            kn.call(this, e),
            t.style && this.style.extendFrom(t.style, !1);
            var i = t.shape;
            if (i) {
                this.shape = this.shape || {};
                var n = this.shape;
                for (var o in i) ! n.hasOwnProperty(o) && i.hasOwnProperty(o) && (n[o] = i[o])
            }
            t.init && t.init.call(this, e)
        };
        u(e, kn);
        for (var i in t)"style" !== i && "shape" !== i && (e.prototype[i] = t[i]);
        return e
    },
    u(kn, ui);
    var zS = MS.CMD,
    ES = [[], [], []],
    RS = Math.sqrt,
    BS = Math.atan2,
    VS = function(t, e) {
        var i, n, o, a, r, s, l = t.data,
        u = zS.M,
        h = zS.C,
        c = zS.L,
        d = zS.R,
        f = zS.A,
        p = zS.Q;
        for (o = 0, a = 0; o < l.length;) {
            switch (i = l[o++], a = o, n = 0, i) {
            case u:
            case c:
                n = 1;
                break;
            case h:
                n = 3;
                break;
            case p:
                n = 2;
                break;
            case f:
                var g = e[4],
                m = e[5],
                v = RS(e[0] * e[0] + e[1] * e[1]),
                y = RS(e[2] * e[2] + e[3] * e[3]),
                x = BS( - e[1] / y, e[0] / v);
                l[o] *= v,
                l[o++] += g,
                l[o] *= y,
                l[o++] += m,
                l[o++] *= v,
                l[o++] *= y,
                l[o++] += x,
                l[o++] += x,
                a = o += 2;
                break;
            case d:
                s[0] = l[o++],
                s[1] = l[o++],
                $(s, s, e),
                l[a++] = s[0],
                l[a++] = s[1],
                s[0] += l[o++],
                s[1] += l[o++],
                $(s, s, e),
                l[a++] = s[0],
                l[a++] = s[1]
            }
            for (r = 0; r < n; r++)(s = ES[r])[0] = l[o++],
            s[1] = l[o++],
            $(s, s, e),
            l[a++] = s[0],
            l[a++] = s[1]
        }
    },
    FS = Math.sqrt,
    GS = Math.sin,
    WS = Math.cos,
    HS = Math.PI,
    ZS = function(t) {
        return Math.sqrt(t[0] * t[0] + t[1] * t[1])
    },
    jS = function(t, e) {
        return (t[0] * e[0] + t[1] * e[1]) / (ZS(t) * ZS(e))
    },
    YS = function(t, e) {
        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(jS(t, e))
    },
    US = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,
    XS = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g,
    qS = function(t) {
        ui.call(this, t)
    };
    qS.prototype = {
        constructor: qS,
        type: "text",
        brush: function(t, e) {
            var i = this.style;
            this.__dirty && je(i),
            i.fill = i.stroke = i.shadowBlur = i.shadowColor = i.shadowOffsetX = i.shadowOffsetY = null;
            var n = i.text;
            null != n && (n += ""),
            li(n, i) && (this.setTransform(t), Ue(this, t, n, i, null, e), this.restoreTransform(t))
        },
        getBoundingRect: function() {
            var t = this.style;
            if (this.__dirty && je(t), !this._rect) {
                var e = t.text;
                null != e ? e += "": e = "";
                var i = De(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.rich);
                if (i.x += t.x || 0, i.y += t.y || 0, oi(t.textStroke, t.textStrokeWidth)) {
                    var n = t.textStrokeWidth;
                    i.x -= n / 2,
                    i.y -= n / 2,
                    i.width += n,
                    i.height += n
                }
                this._rect = i
            }
            return this._rect
        }
    },
    u(qS, ui);
    var KS = kn.extend({
        type: "circle",
        shape: {
            cx: 0,
            cy: 0,
            r: 0
        },
        buildPath: function(t, e, i) {
            i && t.moveTo(e.cx + e.r, e.cy),
            t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
        }
    }),
    QS = [["shadowBlur", 0], ["shadowColor", "#000"], ["shadowOffsetX", 0], ["shadowOffsetY", 0]],
    JS = function(t) {
        return R_.browser.ie && R_.browser.version >= 11 ?
        function() {
            var e, i = this.__clipPaths,
            n = this.style;
            if (i) for (var o = 0; o < i.length; o++) {
                var a = i[o],
                r = a && a.shape,
                s = a && a.type;
                if (r && ("sector" === s && r.startAngle === r.endAngle || "rect" === s && (!r.width || !r.height))) {
                    for (l = 0; l < QS.length; l++) QS[l][2] = n[QS[l][0]],
                    n[QS[l][0]] = QS[l][1];
                    e = !0;
                    break
                }
            }
            if (t.apply(this, arguments), e) for (var l = 0; l < QS.length; l++) n[QS[l][0]] = QS[l][2]
        }: t
    },
    $S = kn.extend({
        type: "sector",
        shape: {
            cx: 0,
            cy: 0,
            r0: 0,
            r: 0,
            startAngle: 0,
            endAngle: 2 * Math.PI,
            clockwise: !0
        },
        brush: JS(kn.prototype.brush),
        buildPath: function(t, e) {
            var i = e.cx,
            n = e.cy,
            o = Math.max(e.r0 || 0, 0),
            a = Math.max(e.r, 0),
            r = e.startAngle,
            s = e.endAngle,
            l = e.clockwise,
            u = Math.cos(r),
            h = Math.sin(r);
            t.moveTo(u * o + i, h * o + n),
            t.lineTo(u * a + i, h * a + n),
            t.arc(i, n, a, r, s, !l),
            t.lineTo(Math.cos(s) * o + i, Math.sin(s) * o + n),
            0 !== o && t.arc(i, n, o, s, r, l),
            t.closePath()
        }
    }),
    tM = kn.extend({
        type: "ring",
        shape: {
            cx: 0,
            cy: 0,
            r: 0,
            r0: 0
        },
        buildPath: function(t, e) {
            var i = e.cx,
            n = e.cy,
            o = 2 * Math.PI;
            t.moveTo(i + e.r, n),
            t.arc(i, n, e.r, 0, o, !1),
            t.moveTo(i + e.r0, n),
            t.arc(i, n, e.r0, 0, o, !0)
        }
    }),
    eM = function(t, e) {
        for (var i = t.length,
        n = [], o = 0, a = 1; a < i; a++) o += K(t[a - 1], t[a]);
        var r = o / 2;
        for (r = r < i ? i: r, a = 0; a < r; a++) {
            var s, l, u, h = a / (r - 1) * (e ? i: i - 1),
            c = Math.floor(h),
            d = h - c,
            f = t[c % i];
            e ? (s = t[(c - 1 + i) % i], l = t[(c + 1) % i], u = t[(c + 2) % i]) : (s = t[0 === c ? c: c - 1], l = t[c > i - 2 ? i - 1 : c + 1], u = t[c > i - 3 ? i - 1 : c + 2]);
            var p = d * d,
            g = d * p;
            n.push([Rn(s[0], f[0], l[0], u[0], d, p, g), Rn(s[1], f[1], l[1], u[1], d, p, g)])
        }
        return n
    },
    iM = function(t, e, i, n) {
        var o, a, r, s, l = [],
        u = [],
        h = [],
        c = [];
        if (n) {
            r = [1 / 0, 1 / 0],
            s = [ - 1 / 0, -1 / 0];
            for (var d = 0,
            f = t.length; d < f; d++) tt(r, r, t[d]),
            et(s, s, t[d]);
            tt(r, r, n[0]),
            et(s, s, n[1])
        }
        for (var d = 0,
        f = t.length; d < f; d++) {
            var p = t[d];
            if (i) o = t[d ? d - 1 : f - 1],
            a = t[(d + 1) % f];
            else {
                if (0 === d || d === f - 1) {
                    l.push(G(t[d]));
                    continue
                }
                o = t[d - 1],
                a = t[d + 1]
            }
            j(u, a, o),
            X(u, u, e);
            var g = K(p, o),
            m = K(p, a),
            v = g + m;
            0 !== v && (g /= v, m /= v),
            X(h, u, -g),
            X(c, u, m);
            var y = H([], p, h),
            x = H([], p, c);
            n && (et(y, y, r), tt(y, y, s), et(x, x, r), tt(x, x, s)),
            l.push(y),
            l.push(x)
        }
        return i && l.push(l.shift()),
        l
    },
    nM = kn.extend({
        type: "polygon",
        shape: {
            points: null,
            smooth: !1,
            smoothConstraint: null
        },
        buildPath: function(t, e) {
            Bn(t, e, !0)
        }
    }),
    oM = kn.extend({
        type: "polyline",
        shape: {
            points: null,
            smooth: !1,
            smoothConstraint: null
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            Bn(t, e, !1)
        }
    }),
    aM = kn.extend({
        type: "rect",
        shape: {
            r: 0,
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var i = e.x,
            n = e.y,
            o = e.width,
            a = e.height;
            e.r ? Ze(t, e) : t.rect(i, n, o, a),
            t.closePath()
        }
    }),
    rM = kn.extend({
        type: "line",
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            percent: 1
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var i = e.x1,
            n = e.y1,
            o = e.x2,
            a = e.y2,
            r = e.percent;
            0 !== r && (t.moveTo(i, n), r < 1 && (o = i * (1 - r) + o * r, a = n * (1 - r) + a * r), t.lineTo(o, a))
        },
        pointAt: function(t) {
            var e = this.shape;
            return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
        }
    }),
    sM = [],
    lM = kn.extend({
        type: "bezier-curve",
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            cpx1: 0,
            cpy1: 0,
            percent: 1
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var i = e.x1,
            n = e.y1,
            o = e.x2,
            a = e.y2,
            r = e.cpx1,
            s = e.cpy1,
            l = e.cpx2,
            u = e.cpy2,
            h = e.percent;
            0 !== h && (t.moveTo(i, n), null == l || null == u ? (h < 1 && (hn(i, r, o, h, sM), r = sM[1], o = sM[2], hn(n, s, a, h, sM), s = sM[1], a = sM[2]), t.quadraticCurveTo(r, s, o, a)) : (h < 1 && (on(i, r, l, o, h, sM), r = sM[1], l = sM[2], o = sM[3], on(n, s, u, a, h, sM), s = sM[1], u = sM[2], a = sM[3]), t.bezierCurveTo(r, s, l, u, o, a)))
        },
        pointAt: function(t) {
            return Vn(this.shape, t, !1)
        },
        tangentAt: function(t) {
            var e = Vn(this.shape, t, !0);
            return q(e, e)
        }
    }),
    uM = kn.extend({
        type: "arc",
        shape: {
            cx: 0,
            cy: 0,
            r: 0,
            startAngle: 0,
            endAngle: 2 * Math.PI,
            clockwise: !0
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var i = e.cx,
            n = e.cy,
            o = Math.max(e.r, 0),
            a = e.startAngle,
            r = e.endAngle,
            s = e.clockwise,
            l = Math.cos(a),
            u = Math.sin(a);
            t.moveTo(l * o + i, u * o + n),
            t.arc(i, n, o, a, r, !s)
        }
    }),
    hM = kn.extend({
        type: "compound",
        shape: {
            paths: null
        },
        _updatePathDirty: function() {
            for (var t = this.__dirtyPath,
            e = this.shape.paths,
            i = 0; i < e.length; i++) t = t || e[i].__dirtyPath;
            this.__dirtyPath = t,
            this.__dirty = this.__dirty || t
        },
        beforeBrush: function() {
            this._updatePathDirty();
            for (var t = this.shape.paths || [], e = this.getGlobalScale(), i = 0; i < t.length; i++) t[i].path || t[i].createPathProxy(),
            t[i].path.setScale(e[0], e[1])
        },
        buildPath: function(t, e) {
            for (var i = e.paths || [], n = 0; n < i.length; n++) i[n].buildPath(t, i[n].shape, !0)
        },
        afterBrush: function() {
            for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1
        },
        getBoundingRect: function() {
            return this._updatePathDirty(),
            kn.prototype.getBoundingRect.call(this)
        }
    }),
    cM = function(t) {
        this.colorStops = t || []
    };
    cM.prototype = {
        constructor: cM,
        addColorStop: function(t, e) {
            this.colorStops.push({
                offset: t,
                color: e
            })
        }
    };
    var dM = function(t, e, i, n, o, a) {
        this.x = null == t ? 0 : t,
        this.y = null == e ? 0 : e,
        this.x2 = null == i ? 1 : i,
        this.y2 = null == n ? 0 : n,
        this.type = "linear",
        this.global = a || !1,
        cM.call(this, o)
    };
    dM.prototype = {
        constructor: dM
    },
    u(dM, cM);
    var fM = function(t, e, i, n, o) {
        this.x = null == t ? .5 : t,
        this.y = null == e ? .5 : e,
        this.r = null == i ? .5 : i,
        this.type = "radial",
        this.global = o || !1,
        cM.call(this, n)
    };
    fM.prototype = {
        constructor: fM
    },
    u(fM, cM),
    Fn.prototype.incremental = !0,
    Fn.prototype.clearDisplaybles = function() {
        this._displayables = [],
        this._temporaryDisplayables = [],
        this._cursor = 0,
        this.dirty(),
        this.notClear = !1
    },
    Fn.prototype.addDisplayable = function(t, e) {
        e ? this._temporaryDisplayables.push(t) : this._displayables.push(t),
        this.dirty()
    },
    Fn.prototype.addDisplayables = function(t, e) {
        e = e || !1;
        for (var i = 0; i < t.length; i++) this.addDisplayable(t[i], e)
    },
    Fn.prototype.eachPendingDisplayable = function(t) {
        for (e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]);
        for (var e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e])
    },
    Fn.prototype.update = function() {
        for (this.updateTransform(), t = this._cursor; t < this._displayables.length; t++)(e = this._displayables[t]).parent = this,
        e.update(),
        e.parent = null;
        for (var t = 0; t < this._temporaryDisplayables.length; t++) {
            var e = this._temporaryDisplayables[t];
            e.parent = this,
            e.update(),
            e.parent = null
        }
    },
    Fn.prototype.brush = function(t, e) {
        for (i = this._cursor; i < this._displayables.length; i++)(n = this._displayables[i]).beforeBrush && n.beforeBrush(t),
        n.brush(t, i === this._cursor ? null: this._displayables[i - 1]),
        n.afterBrush && n.afterBrush(t);
        this._cursor = i;
        for (var i = 0; i < this._temporaryDisplayables.length; i++) {
            var n = this._temporaryDisplayables[i];
            n.beforeBrush && n.beforeBrush(t),
            n.brush(t, 0 === i ? null: this._temporaryDisplayables[i - 1]),
            n.afterBrush && n.afterBrush(t)
        }
        this._temporaryDisplayables = [],
        this.notClear = !0
    };
    var pM = [];
    Fn.prototype.getBoundingRect = function() {
        if (!this._rect) {
            for (var t = new ue(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) {
                var i = this._displayables[e],
                n = i.getBoundingRect().clone();
                i.needLocalTransform() && n.applyTransform(i.getLocalTransform(pM)),
                t.union(n)
            }
            this._rect = t
        }
        return this._rect
    },
    Fn.prototype.contain = function(t, e) {
        var i = this.transformCoordToLocal(t, e);
        if (this.getBoundingRect().contain(i[0], i[1])) for (var n = 0; n < this._displayables.length; n++) if (this._displayables[n].contain(t, e)) return ! 0;
        return ! 1
    },
    u(Fn, ui);
    var gM = Math.round,
    mM = Math.max,
    vM = Math.min,
    yM = {},
    xM = function(t, e) {
        for (var i = [], n = t.length, o = 0; o < n; o++) {
            var a = t[o];
            a.path || a.createPathProxy(),
            a.__dirtyPath && a.buildPath(a.path, a.shape, !0),
            i.push(a.path)
        }
        var r = new kn(e);
        return r.createPathProxy(),
        r.buildPath = function(t) {
            t.appendPath(i);
            var e = t.getContext();
            e && t.rebuildPath(e)
        },
        r
    },
    _M = E(),
    wM = 0,
    bM = (Object.freeze || Object)({
        extendShape: Gn,
        extendPath: function(t, e) {
            return En(t, e)
        },
        makePath: Wn,
        makeImage: Hn,
        mergePath: xM,
        resizePath: jn,
        subPixelOptimizeLine: Yn,
        subPixelOptimizeRect: Un,
        subPixelOptimize: Xn,
        setElementHoverStyle: no,
        isInEmphasis: oo,
        setHoverStyle: uo,
        setAsHoverStyleTrigger: ho,
        setLabelStyle: co,
        setTextStyle: fo,
        setText: function(t, e, i) {
            var n, o = {
                isRectText: !0
            }; ! 1 === i ? n = !0 : o.autoColor = i,
            po(t, e, o, n)
        },
        getFont: _o,
        updateProps: bo,
        initProps: So,
        getTransform: Mo,
        applyTransform: Io,
        transformDirection: To,
        groupTransition: Ao,
        clipPointsByRect: Do,
        clipRectByRect: function(t, e) {
            var i = mM(t.x, e.x),
            n = vM(t.x + t.width, e.x + e.width),
            o = mM(t.y, e.y),
            a = vM(t.y + t.height, e.y + e.height);
            if (n >= i && a >= o) return {
                x: i,
                y: o,
                width: n - i,
                height: a - o
            }
        },
        createIcon: Co,
        Group: Zw,
        Image: hi,
        Text: qS,
        Circle: KS,
        Sector: $S,
        Ring: tM,
        Polygon: nM,
        Polyline: oM,
        Rect: aM,
        Line: rM,
        BezierCurve: lM,
        Arc: uM,
        IncrementalDisplayable: Fn,
        CompoundPath: hM,
        LinearGradient: dM,
        RadialGradient: fM,
        BoundingRect: ue
    }),
    SM = ["textStyle", "color"],
    MM = {
        getTextColor: function(t) {
            var e = this.ecModel;
            return this.getShallow("color") || (!t && e ? e.get(SM) : null)
        },
        getFont: function() {
            return _o({
                fontStyle: this.getShallow("fontStyle"),
                fontWeight: this.getShallow("fontWeight"),
                fontSize: this.getShallow("fontSize"),
                fontFamily: this.getShallow("fontFamily")
            },
            this.ecModel)
        },
        getTextRect: function(t) {
            return De(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow("baseline"), this.getShallow("padding"), this.getShallow("rich"), this.getShallow("truncateText"))
        }
    },
    IM = Wb([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["textPosition"], ["textAlign"]]),
    TM = {
        getItemStyle: function(t, e) {
            var i = IM(this, t, e),
            n = this.getBorderLineDash();
            return n && (i.lineDash = n),
            i
        },
        getBorderLineDash: function() {
            var t = this.get("borderType");
            return "solid" === t || null == t ? null: "dashed" === t ? [5, 5] : [1, 1]
        }
    },
    AM = h,
    DM = Bi();
    Lo.prototype = {
        constructor: Lo,
        init: null,
        mergeOption: function(t) {
            n(this.option, t, !0)
        },
        get: function(t, e) {
            return null == t ? this.option: ko(this.option, this.parsePath(t), !e && Po(this, t))
        },
        getShallow: function(t, e) {
            var i = this.option,
            n = null == i ? i: i[t],
            o = !e && Po(this, t);
            return null == n && o && (n = o.getShallow(t)),
            n
        },
        getModel: function(t, e) {
            var i, n = null == t ? this.option: ko(this.option, t = this.parsePath(t));
            return e = e || (i = Po(this, t)) && i.getModel(t),
            new Lo(n, e, this.ecModel)
        },
        isEmpty: function() {
            return null == this.option
        },
        restoreData: function() {},
        clone: function() {
            return new(0, this.constructor)(i(this.option))
        },
        setReadOnly: function(t) {},
        parsePath: function(t) {
            return "string" == typeof t && (t = t.split(".")),
            t
        },
        customizeGetParent: function(t) {
            DM(this).getParent = t
        },
        isAnimationEnabled: function() {
            if (!R_.node) {
                if (null != this.option.animation) return !! this.option.animation;
                if (this.parentModel) return this.parentModel.isAnimationEnabled()
            }
        }
    },
    Yi(Lo),
    Ui(Lo),
    AM(Lo, Zb),
    AM(Lo, Yb),
    AM(Lo, MM),
    AM(Lo, TM);
    var CM = 0,
    LM = 1e-4,
    kM = 9007199254740991,
    PM = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,
    NM = (Object.freeze || Object)({
        linearMap: zo,
        parsePercent: Eo,
        round: Ro,
        asc: Bo,
        getPrecision: Vo,
        getPrecisionSafe: Fo,
        getPixelPrecision: Go,
        getPercentWithPrecision: Wo,
        MAX_SAFE_INTEGER: kM,
        remRadian: Ho,
        isRadianAroundZero: Zo,
        parseDate: jo,
        quantity: Yo,
        nice: Xo,
        quantile: function(t, e) {
            var i = (t.length - 1) * e + 1,
            n = Math.floor(i),
            o = +t[n - 1],
            a = i - n;
            return a ? o + a * (t[n] - o) : o
        },
        reformIntervals: qo,
        isNumeric: Ko
    }),
    OM = L,
    zM = /([&<>"'])/g,
    EM = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#39;"
    },
    RM = ["a", "b", "c", "d", "e", "f", "g"],
    BM = function(t, e) {
        return "{" + t + (null == e ? "": e) + "}"
    },
    VM = Oe,
    FM = De,
    GM = (Object.freeze || Object)({
        addCommas: Qo,
        toCamelCase: Jo,
        normalizeCssArray: OM,
        encodeHTML: $o,
        formatTpl: ta,
        formatTplSimple: ea,
        getTooltipMarker: ia,
        formatTime: oa,
        capitalFirst: aa,
        truncateText: VM,
        getTextRect: FM
    }),
    WM = d,
    HM = ["left", "right", "top", "bottom", "width", "height"],
    ZM = [["width", "left", "right"], ["height", "top", "bottom"]],
    jM = ra,
    YM = (v(ra, "vertical"), v(ra, "horizontal"), {
        getBoxLayoutParams: function() {
            return {
                left: this.get("left"),
                top: this.get("top"),
                right: this.get("right"),
                bottom: this.get("bottom"),
                width: this.get("width"),
                height: this.get("height")
            }
        }
    }),
    UM = Bi(),
    XM = Lo.extend({
        type: "component",
        id: "",
        name: "",
        mainType: "",
        subType: "",
        componentIndex: 0,
        defaultOption: null,
        ecModel: null,
        dependentModels: [],
        uid: null,
        layoutMode: null,
        $constructor: function(t, e, i, n) {
            Lo.call(this, t, e, i, n),
            this.uid = No("ec_cpt_model")
        },
        init: function(t, e, i, n) {
            this.mergeDefaultAndTheme(t, i)
        },
        mergeDefaultAndTheme: function(t, e) {
            var i = this.layoutMode,
            o = i ? da(t) : {};
            n(t, e.getTheme().get(this.mainType)),
            n(t, this.getDefaultOption()),
            i && ca(t, o, i)
        },
        mergeOption: function(t, e) {
            n(this.option, t, !0);
            var i = this.layoutMode;
            i && ca(this.option, t, i)
        },
        optionUpdated: function(t, e) {},
        getDefaultOption: function() {
            var t = UM(this);
            if (!t.defaultOption) {
                for (var e = [], i = this.constructor; i;) {
                    var o = i.prototype.defaultOption;
                    o && e.push(o),
                    i = i.superClass
                }
                for (var a = {},
                r = e.length - 1; r >= 0; r--) a = n(a, e[r], !0);
                t.defaultOption = a
            }
            return t.defaultOption
        },
        getReferringComponents: function(t) {
            return this.ecModel.queryComponents({
                mainType: t,
                index: this.get(t + "Index", !0),
                id: this.get(t + "Id", !0)
            })
        }
    });
    Ki(XM, {
        registerWhenExtend: !0
    }),
    function(t) {
        var e = {};
        t.registerSubTypeDefaulter = function(t, i) {
            t = Zi(t),
            e[t.main] = i
        },
        t.determineSubType = function(i, n) {
            var o = n.type;
            if (!o) {
                var a = Zi(i).main;
                t.hasSubTypes(i) && e[a] && (o = e[a](n))
            }
            return o
        }
    } (XM),
    function(t, e) {
        function i(t) {
            var i = {},
            a = [];
            return d(t,
            function(r) {
                var s = n(i, r),
                u = o(s.originalDeps = e(r), t);
                s.entryCount = u.length,
                0 === s.entryCount && a.push(r),
                d(u,
                function(t) {
                    l(s.predecessor, t) < 0 && s.predecessor.push(t);
                    var e = n(i, t);
                    l(e.successor, t) < 0 && e.successor.push(r)
                })
            }),
            {
                graph: i,
                noEntryList: a
            }
        }
        function n(t, e) {
            return t[e] || (t[e] = {
                predecessor: [],
                successor: []
            }),
            t[e]
        }
        function o(t, e) {
            var i = [];
            return d(t,
            function(t) {
                l(e, t) >= 0 && i.push(t)
            }),
            i
        }
        t.topologicalTravel = function(t, e, n, o) {
            function a(t) {
                0 === --s[t].entryCount && l.push(t)
            }
            if (t.length) {
                var r = i(e),
                s = r.graph,
                l = r.noEntryList,
                u = {};
                for (d(t,
                function(t) {
                    u[t] = !0
                }); l.length;) {
                    var h = l.pop(),
                    c = s[h],
                    f = !!u[h];
                    f && (n.call(o, h, c.originalDeps.slice()), delete u[h]),
                    d(c.successor, f ?
                    function(t) {
                        u[t] = !0,
                        a(t)
                    }: a)
                }
                d(u,
                function() {
                    throw new Error("Circle dependency may exists")
                })
            }
        }
    } (XM,
    function(t) {
        var e = [];
        return d(XM.getClassesByMainType(t),
        function(t) {
            e = e.concat(t.prototype.dependencies || [])
        }),
        e = f(e,
        function(t) {
            return Zi(t).main
        }),
        "dataset" !== t && l(e, "dataset") <= 0 && e.unshift("dataset"),
        e
    }),
    h(XM, YM);
    var qM = "";
    "undefined" != typeof navigator && (qM = navigator.platform || "");
    var KM = {
        color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3"],
        gradientColor: ["#f6efa6", "#d88273", "#bf444c"],
        textStyle: {
            fontFamily: qM.match(/^Win/) ? "Microsoft YaHei": "sans-serif",
            fontSize: 12,
            fontStyle: "normal",
            fontWeight: "normal"
        },
        blendMode: null,
        animation: "auto",
        animationDuration: 1e3,
        animationDurationUpdate: 300,
        animationEasing: "exponentialOut",
        animationEasingUpdate: "cubicOut",
        animationThreshold: 2e3,
        progressiveThreshold: 3e3,
        progressive: 400,
        hoverLayerThreshold: 3e3,
        useUTC: !1
    },
    QM = Bi(),
    JM = {
        clearColorPalette: function() {
            QM(this).colorIdx = 0,
            QM(this).colorNameMap = {}
        },
        getColorFromPalette: function(t, e, i) {
            var n = QM(e = e || this),
            o = n.colorIdx || 0,
            a = n.colorNameMap = n.colorNameMap || {};
            if (a.hasOwnProperty(t)) return a[t];
            var r = Di(this.get("color", !0)),
            s = this.get("colorLayer", !0),
            l = null != i && s ? pa(s, i) : r;
            if ((l = l || r) && l.length) {
                var u = l[o];
                return t && (a[t] = u),
                n.colorIdx = (o + 1) % l.length,
                u
            }
        }
    },
    $M = {
        cartesian2d: function(t, e, i, n) {
            var o = t.getReferringComponents("xAxis")[0],
            a = t.getReferringComponents("yAxis")[0];
            e.coordSysDims = ["x", "y"],
            i.set("x", o),
            i.set("y", a),
            ma(o) && (n.set("x", o), e.firstCategoryDimIndex = 0),
            ma(a) && (n.set("y", a), e.firstCategoryDimIndex = 1)
        },
        singleAxis: function(t, e, i, n) {
            var o = t.getReferringComponents("singleAxis")[0];
            e.coordSysDims = ["single"],
            i.set("single", o),
            ma(o) && (n.set("single", o), e.firstCategoryDimIndex = 0)
        },
        polar: function(t, e, i, n) {
            var o = t.getReferringComponents("polar")[0],
            a = o.findAxisModel("radiusAxis"),
            r = o.findAxisModel("angleAxis");
            e.coordSysDims = ["radius", "angle"],
            i.set("radius", a),
            i.set("angle", r),
            ma(a) && (n.set("radius", a), e.firstCategoryDimIndex = 0),
            ma(r) && (n.set("angle", r), e.firstCategoryDimIndex = 1)
        },
        geo: function(t, e, i, n) {
            e.coordSysDims = ["lng", "lat"]
        },
        parallel: function(t, e, i, n) {
            var o = t.ecModel,
            a = o.getComponent("parallel", t.get("parallelIndex")),
            r = e.coordSysDims = a.dimensions.slice();
            d(a.parallelAxisIndex,
            function(t, a) {
                var s = o.getComponent("parallelAxis", t),
                l = r[a];
                i.set(l, s),
                ma(s) && null == e.firstCategoryDimIndex && (n.set(l, s), e.firstCategoryDimIndex = a)
            })
        }
    },
    tI = "original",
    eI = "arrayRows",
    iI = "objectRows",
    nI = "keyedColumns",
    oI = "unknown",
    aI = "typedArray",
    rI = "column",
    sI = "row";
    va.seriesDataToSource = function(t) {
        return new va({
            data: t,
            sourceFormat: S(t) ? aI: tI,
            fromDataset: !1
        })
    },
    Ui(va);
    var lI = Bi(),
    uI = "\0_ec_inner",
    hI = Lo.extend({
        init: function(t, e, i, n) {
            i = i || {},
            this.option = null,
            this._theme = new Lo(i),
            this._optionManager = n
        },
        setOption: function(t, e) {
            k(!(uI in t), "please use chart.getOption()"),
            this._optionManager.setOption(t, e),
            this.resetOption(null)
        },
        resetOption: function(t) {
            var e = !1,
            i = this._optionManager;
            if (!t || "recreate" === t) {
                var n = i.mountOption("recreate" === t);
                this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(n)) : Pa.call(this, n),
                e = !0
            }
            if ("timeline" !== t && "media" !== t || this.restoreData(), !t || "recreate" === t || "timeline" === t) {
                var o = i.getTimelineOption(this);
                o && (this.mergeOption(o), e = !0)
            }
            if (!t || "recreate" === t || "media" === t) {
                var a = i.getMediaOption(this, this._api);
                a.length && d(a,
                function(t) {
                    this.mergeOption(t, e = !0)
                },
                this)
            }
            return e
        },
        mergeOption: function(t) {
            var e = this.option,
            o = this._componentsMap,
            r = [];
            _a(this),
            d(t,
            function(t, o) {
                null != t && (XM.hasClass(o) ? o && r.push(o) : e[o] = null == e[o] ? i(t) : n(e[o], t, !0))
            }),
            XM.topologicalTravel(r, XM.getAllClassMainTypes(),
            function(i, n) {
                var r = Di(t[i]),
                s = Pi(o.get(i), r);
                Ni(s),
                d(s,
                function(t, e) {
                    var n = t.option;
                    w(n) && (t.keyInfo.mainType = i, t.keyInfo.subType = Oa(i, n, t.exist))
                });
                var l = Na(o, n);
                e[i] = [],
                o.set(i, []),
                d(s,
                function(t, n) {
                    var r = t.exist,
                    s = t.option;
                    if (k(w(s) || r, "Empty component definition"), s) {
                        var u = XM.getClass(i, t.keyInfo.subType, !0);
                        if (r && r instanceof u) r.name = t.keyInfo.name,
                        r.mergeOption(s, this),
                        r.optionUpdated(s, !1);
                        else {
                            var h = a({
                                dependentModels: l,
                                componentIndex: n
                            },
                            t.keyInfo);
                            a(r = new u(s, this, this, h), h),
                            r.init(s, this, this, h),
                            r.optionUpdated(null, !0)
                        }
                    } else r.mergeOption({},
                    this),
                    r.optionUpdated({},
                    !1);
                    o.get(i)[n] = r,
                    e[i][n] = r.option
                },
                this),
                "series" === i && za(this, o.get("series"))
            },
            this),
            this._seriesIndicesMap = E(this._seriesIndices = this._seriesIndices || [])
        },
        getOption: function() {
            var t = i(this.option);
            return d(t,
            function(e, i) {
                if (XM.hasClass(i)) {
                    for (var n = (e = Di(e)).length - 1; n >= 0; n--) zi(e[n]) && e.splice(n, 1);
                    t[i] = e
                }
            }),
            delete t[uI],
            t
        },
        getTheme: function() {
            return this._theme
        },
        getComponent: function(t, e) {
            var i = this._componentsMap.get(t);
            if (i) return i[e || 0]
        },
        queryComponents: function(t) {
            var e = t.mainType;
            if (!e) return [];
            var i = t.index,
            n = t.id,
            o = t.name,
            a = this._componentsMap.get(e);
            if (!a || !a.length) return [];
            var r;
            if (null != i) y(i) || (i = [i]),
            r = g(f(i,
            function(t) {
                return a[t]
            }),
            function(t) {
                return !! t
            });
            else if (null != n) {
                var s = y(n);
                r = g(a,
                function(t) {
                    return s && l(n, t.id) >= 0 || !s && t.id === n
                })
            } else if (null != o) {
                var u = y(o);
                r = g(a,
                function(t) {
                    return u && l(o, t.name) >= 0 || !u && t.name === o
                })
            } else r = a.slice();
            return Ea(r, t)
        },
        findComponents: function(t) {
            var e = t.query,
            i = t.mainType,
            n = function(t) {
                var e = i + "Index",
                n = i + "Id",
                o = i + "Name";
                return ! t || null == t[e] && null == t[n] && null == t[o] ? null: {
                    mainType: i,
                    index: t[e],
                    id: t[n],
                    name: t[o]
                }
            } (e);
            return function(e) {
                return t.filter ? g(e, t.filter) : e
            } (Ea(n ? this.queryComponents(n) : this._componentsMap.get(i), t))
        },
        eachComponent: function(t, e, i) {
            var n = this._componentsMap;
            "function" == typeof t ? (i = e, e = t, n.each(function(t, n) {
                d(t,
                function(t, o) {
                    e.call(i, n, t, o)
                })
            })) : _(t) ? d(n.get(t), e, i) : w(t) && d(this.findComponents(t), e, i)
        },
        getSeriesByName: function(t) {
            return g(this._componentsMap.get("series"),
            function(e) {
                return e.name === t
            })
        },
        getSeriesByIndex: function(t) {
            return this._componentsMap.get("series")[t]
        },
        getSeriesByType: function(t) {
            return g(this._componentsMap.get("series"),
            function(e) {
                return e.subType === t
            })
        },
        getSeries: function() {
            return this._componentsMap.get("series").slice()
        },
        getSeriesCount: function() {
            return this._componentsMap.get("series").length
        },
        eachSeries: function(t, e) {
            d(this._seriesIndices,
            function(i) {
                var n = this._componentsMap.get("series")[i];
                t.call(e, n, i)
            },
            this)
        },
        eachRawSeries: function(t, e) {
            d(this._componentsMap.get("series"), t, e)
        },
        eachSeriesByType: function(t, e, i) {
            d(this._seriesIndices,
            function(n) {
                var o = this._componentsMap.get("series")[n];
                o.subType === t && e.call(i, o, n)
            },
            this)
        },
        eachRawSeriesByType: function(t, e, i) {
            return d(this.getSeriesByType(t), e, i)
        },
        isSeriesFiltered: function(t) {
            return null == this._seriesIndicesMap.get(t.componentIndex)
        },
        getCurrentSeriesIndices: function() {
            return (this._seriesIndices || []).slice()
        },
        filterSeries: function(t, e) {
            za(this, g(this._componentsMap.get("series"), t, e))
        },
        restoreData: function(t) {
            var e = this._componentsMap;
            za(this, e.get("series"));
            var i = [];
            e.each(function(t, e) {
                i.push(e)
            }),
            XM.topologicalTravel(i, XM.getAllClassMainTypes(),
            function(i, n) {
                d(e.get(i),
                function(e) { ("series" !== i || !La(e, t)) && e.restoreData()
                })
            })
        }
    });
    h(hI, JM);
    var cI = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel", "getViewOfSeriesModel"],
    dI = {};
    Ba.prototype = {
        constructor: Ba,
        create: function(t, e) {
            var i = [];
            d(dI,
            function(n, o) {
                var a = n.create(t, e);
                i = i.concat(a || [])
            }),
            this._coordinateSystems = i
        },
        update: function(t, e) {
            d(this._coordinateSystems,
            function(i) {
                i.update && i.update(t, e)
            })
        },
        getCoordinateSystems: function() {
            return this._coordinateSystems.slice()
        }
    },
    Ba.register = function(t, e) {
        dI[t] = e
    },
    Ba.get = function(t) {
        return dI[t]
    };
    var fI = d,
    pI = i,
    gI = f,
    mI = n,
    vI = /^(min|max)?(.+)$/;
    Va.prototype = {
        constructor: Va,
        setOption: function(t, e) {
            t && d(Di(t.series),
            function(t) {
                t && t.data && S(t.data) && N(t.data)
            }),
            t = pI(t, !0);
            var i = this._optionBackup,
            n = Fa.call(this, t, e, !i);
            this._newBaseOption = n.baseOption,
            i ? (Za(i.baseOption, n.baseOption), n.timelineOptions.length && (i.timelineOptions = n.timelineOptions), n.mediaList.length && (i.mediaList = n.mediaList), n.mediaDefault && (i.mediaDefault = n.mediaDefault)) : this._optionBackup = n
        },
        mountOption: function(t) {
            var e = this._optionBackup;
            return this._timelineOptions = gI(e.timelineOptions, pI),
            this._mediaList = gI(e.mediaList, pI),
            this._mediaDefault = pI(e.mediaDefault),
            this._currentMediaIndices = [],
            pI(t ? e.baseOption: this._newBaseOption)
        },
        getTimelineOption: function(t) {
            var e, i = this._timelineOptions;
            if (i.length) {
                var n = t.getComponent("timeline");
                n && (e = pI(i[n.getCurrentIndex()], !0))
            }
            return e
        },
        getMediaOption: function(t) {
            var e = this._api.getWidth(),
            i = this._api.getHeight(),
            n = this._mediaList,
            o = this._mediaDefault,
            a = [],
            r = [];
            if (!n.length && !o) return r;
            for (var s = 0,
            l = n.length; s < l; s++) Ga(n[s].query, e, i) && a.push(s);
            return ! a.length && o && (a = [ - 1]),
            a.length && !Ha(a, this._currentMediaIndices) && (r = gI(a,
            function(t) {
                return pI( - 1 === t ? o.option: n[t].option)
            })),
            this._currentMediaIndices = a,
            r
        }
    };
    var yI = d,
    xI = w,
    _I = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"],
    wI = function(t, e) {
        yI(Qa(t.series),
        function(t) {
            xI(t) && Ka(t)
        });
        var i = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"];
        e && i.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"),
        yI(i,
        function(e) {
            yI(Qa(t[e]),
            function(t) {
                t && (Xa(t, "axisLabel"), Xa(t.axisPointer, "label"))
            })
        }),
        yI(Qa(t.parallel),
        function(t) {
            var e = t && t.parallelAxisDefault;
            Xa(e, "axisLabel"),
            Xa(e && e.axisPointer, "label")
        }),
        yI(Qa(t.calendar),
        function(t) {
            Ya(t, "itemStyle"),
            Xa(t, "dayLabel"),
            Xa(t, "monthLabel"),
            Xa(t, "yearLabel")
        }),
        yI(Qa(t.radar),
        function(t) {
            Xa(t, "name")
        }),
        yI(Qa(t.geo),
        function(t) {
            xI(t) && (qa(t), yI(Qa(t.regions),
            function(t) {
                qa(t)
            }))
        }),
        yI(Qa(t.timeline),
        function(t) {
            qa(t),
            Ya(t, "label"),
            Ya(t, "itemStyle"),
            Ya(t, "controlStyle", !0);
            var e = t.data;
            y(e) && d(e,
            function(t) {
                w(t) && (Ya(t, "label"), Ya(t, "itemStyle"))
            })
        }),
        yI(Qa(t.toolbox),
        function(t) {
            Ya(t, "iconStyle"),
            yI(t.feature,
            function(t) {
                Ya(t, "iconStyle")
            })
        }),
        Xa(Ja(t.axisPointer), "label"),
        Xa(Ja(t.tooltip).axisPointer, "label")
    },
    bI = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"]],
    SI = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"],
    MI = function(t, e) {
        wI(t, e),
        t.series = Di(t.series),
        d(t.series,
        function(t) {
            if (w(t)) {
                var e = t.type;
                if ("pie" !== e && "gauge" !== e || null != t.clockWise && (t.clockwise = t.clockWise), "gauge" === e) {
                    var i = $a(t, "pointer.color");
                    null != i && tr(t, "itemStyle.normal.color", i)
                }
                er(t)
            }
        }),
        t.dataRange && (t.visualMap = t.dataRange),
        d(SI,
        function(e) {
            var i = t[e];
            i && (y(i) || (i = [i]), d(i,
            function(t) {
                er(t)
            }))
        })
    },
    II = nr.prototype;
    II.pure = !1,
    II.persistent = !0,
    II.getSource = function() {
        return this._source
    };
    var TI = {
        arrayRows_column: {
            pure: !0,
            count: function() {
                return Math.max(0, this._data.length - this._source.startIndex)
            },
            getItem: function(t) {
                return this._data[t + this._source.startIndex]
            },
            appendData: rr
        },
        arrayRows_row: {
            pure: !0,
            count: function() {
                var t = this._data[0];
                return t ? Math.max(0, t.length - this._source.startIndex) : 0
            },
            getItem: function(t) {
                t += this._source.startIndex;
                for (var e = [], i = this._data, n = 0; n < i.length; n++) {
                    var o = i[n];
                    e.push(o ? o[t] : null)
                }
                return e
            },
            appendData: function() {
                throw new Error('Do not support appendData when set seriesLayoutBy: "row".')
            }
        },
        objectRows: {
            pure: !0,
            count: or,
            getItem: ar,
            appendData: rr
        },
        keyedColumns: {
            pure: !0,
            count: function() {
                var t = this._source.dimensionsDefine[0].name,
                e = this._data[t];
                return e ? e.length: 0
            },
            getItem: function(t) {
                for (var e = [], i = this._source.dimensionsDefine, n = 0; n < i.length; n++) {
                    var o = this._data[i[n].name];
                    e.push(o ? o[t] : null)
                }
                return e
            },
            appendData: function(t) {
                var e = this._data;
                d(t,
                function(t, i) {
                    for (var n = e[i] || (e[i] = []), o = 0; o < (t || []).length; o++) n.push(t[o])
                })
            }
        },
        original: {
            count: or,
            getItem: ar,
            appendData: rr
        },
        typedArray: {
            persistent: !1,
            pure: !0,
            count: function() {
                return this._data ? this._data.length / this._dimSize: 0
            },
            getItem: function(t, e) {
                t -= this._offset,
                e = e || [];
                for (var i = this._dimSize * t,
                n = 0; n < this._dimSize; n++) e[n] = this._data[i + n];
                return e
            },
            appendData: function(t) {
                this._data = t
            },
            clean: function() {
                this._offset += this.count(),
                this._data = null
            }
        }
    },
    AI = {
        arrayRows: sr,
        objectRows: function(t, e, i, n) {
            return null != i ? t[n] : t
        },
        keyedColumns: sr,
        original: function(t, e, i, n) {
            var o = Li(t);
            return null != i && o instanceof Array ? o[i] : o
        },
        typedArray: sr
    },
    DI = {
        arrayRows: lr,
        objectRows: function(t, e, i, n) {
            return ur(t[e], this._dimensionInfos[e])
        },
        keyedColumns: lr,
        original: function(t, e, i, n) {
            var o = t && (null == t.value ? t: t.value);
            return ! this._rawData.pure && ki(t) && (this.hasItemOption = !0),
            ur(o instanceof Array ? o[n] : o, this._dimensionInfos[e])
        },
        typedArray: function(t, e, i, n) {
            return t[n]
        }
    },
    CI = /\{@(.+?)\}/g,
    LI = {
        getDataParams: function(t, e) {
            var i = this.getData(e),
            n = this.getRawValue(t, e),
            o = i.getRawIndex(t),
            a = i.getName(t),
            r = i.getRawDataItem(t),
            s = i.getItemVisual(t, "color"),
            l = this.ecModel.getComponent("tooltip"),
            u = Hi(l && l.get("renderMode")),
            h = this.mainType,
            c = "series" === h;
            return {
                componentType: h,
                componentSubType: this.subType,
                componentIndex: this.componentIndex,
                seriesType: c ? this.subType: null,
                seriesIndex: this.seriesIndex,
                seriesId: c ? this.id: null,
                seriesName: c ? this.name: null,
                name: a,
                dataIndex: o,
                data: r,
                dataType: e,
                value: n,
                color: s,
                marker: ia({
                    color: s,
                    renderMode: u
                }),
                $vars: ["seriesName", "name", "value"]
            }
        },
        getFormattedLabel: function(t, e, i, n, o) {
            e = e || "normal";
            var a = this.getData(i),
            r = a.getItemModel(t),
            s = this.getDataParams(t, i);
            null != n && s.value instanceof Array && (s.value = s.value[n]);
            var l = r.get("normal" === e ? [o || "label", "formatter"] : [e, o || "label", "formatter"]);
            return "function" == typeof l ? (s.status = e, l(s)) : "string" == typeof l ? ta(l, s).replace(CI,
            function(e, i) {
                var n = i.length;
                return "[" === i.charAt(0) && "]" === i.charAt(n - 1) && (i = +i.slice(1, n - 1)),
                hr(a, t, i)
            }) : void 0
        },
        getRawValue: function(t, e) {
            return hr(this.getData(e), t)
        },
        formatTooltip: function() {}
    },
    kI = fr.prototype;
    kI.perform = function(t) {
        function e(t) {
            return ! (t >= 1) && (t = 1),
            t
        }
        var i = this._upstream,
        n = t && t.skip;
        if (this._dirty && i) {
            var o = this.context;
            o.data = o.outputData = i.context.outputData
        }
        this.__pipeline && (this.__pipeline.currentTask = this);
        var a;
        this._plan && !n && (a = this._plan(this.context));
        var r = e(this._modBy),
        s = this._modDataCount || 0,
        l = e(t && t.modBy),
        u = t && t.modDataCount || 0;
        r === l && s === u || (a = "reset");
        var h; (this._dirty || "reset" === a) && (this._dirty = !1, h = gr(this, n)),
        this._modBy = l,
        this._modDataCount = u;
        var c = t && t.step;
        if (this._dueEnd = i ? i._outputDueEnd: this._count ? this._count(this.context) : 1 / 0, this._progress) {
            var d = this._dueIndex,
            f = Math.min(null != c ? this._dueIndex + c: 1 / 0, this._dueEnd);
            if (!n && (h || d < f)) {
                var p = this._progress;
                if (y(p)) for (var g = 0; g < p.length; g++) pr(this, p[g], d, f, l, u);
                else pr(this, p, d, f, l, u)
            }
            this._dueIndex = f;
            var m = null != this._settedOutputEnd ? this._settedOutputEnd: f;
            this._outputDueEnd = m
        } else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd: this._dueEnd;
        return this.unfinished()
    };
    var PI = function() {
        function t() {
            return n < i ? n++:null
        }
        function e() {
            var t = n % r * o + Math.ceil(n / r),
            e = n >= i ? null: t < a ? t: n;
            return n++,
            e
        }
        var i, n, o, a, r, s = {
            reset: function(l, u, h, c) {
                n = l,
                i = u,
                o = h,
                a = c,
                r = Math.ceil(a / o),
                s.next = o > 1 && a > 0 ? e: t
            }
        };
        return s
    } ();
    kI.dirty = function() {
        this._dirty = !0,
        this._onDirty && this._onDirty(this.context)
    },
    kI.unfinished = function() {
        return this._progress && this._dueIndex < this._dueEnd
    },
    kI.pipe = function(t) { (this._downstream !== t || this._dirty) && (this._downstream = t, t._upstream = this, t.dirty())
    },
    kI.dispose = function() {
        this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream = null), this._dirty = !1, this._disposed = !0)
    },
    kI.getUpstream = function() {
        return this._upstream
    },
    kI.getDownstream = function() {
        return this._downstream
    },
    kI.setOutputEnd = function(t) {
        this._outputDueEnd = this._settedOutputEnd = t
    };
    var NI = Bi(),
    OI = XM.extend({
        type: "series.__base__",
        seriesIndex: 0,
        coordinateSystem: null,
        defaultOption: null,
        legendDataProvider: null,
        visualColorAccessPath: "itemStyle.color",
        layoutMode: null,
        init: function(t, e, i, n) {
            this.seriesIndex = this.componentIndex,
            this.dataTask = dr({
                count: yr,
                reset: xr
            }),
            this.dataTask.context = {
                model: this
            },
            this.mergeDefaultAndTheme(t, i),
            wa(this);
            var o = this.getInitialData(t, i);
            wr(o, this),
            this.dataTask.context.data = o,
            NI(this).dataBeforeProcessed = o,
            mr(this)
        },
        mergeDefaultAndTheme: function(t, e) {
            var i = this.layoutMode,
            o = i ? da(t) : {},
            a = this.subType;
            XM.hasClass(a) && (a += "Series"),
            n(t, e.getTheme().get(this.subType)),
            n(t, this.getDefaultOption()),
            Ci(t, "label", ["show"]),
            this.fillDataTextStyle(t.data),
            i && ca(t, o, i)
        },
        mergeOption: function(t, e) {
            t = n(this.option, t, !0),
            this.fillDataTextStyle(t.data);
            var i = this.layoutMode;
            i && ca(this.option, t, i),
            wa(this);
            var o = this.getInitialData(t, e);
            wr(o, this),
            this.dataTask.dirty(),
            this.dataTask.context.data = o,
            NI(this).dataBeforeProcessed = o,
            mr(this)
        },
        fillDataTextStyle: function(t) {
            if (t && !S(t)) for (var e = ["show"], i = 0; i < t.length; i++) t[i] && t[i].label && Ci(t[i], "label", e)
        },
        getInitialData: function() {},
        appendData: function(t) {
            this.getRawData().appendData(t.data)
        },
        getData: function(t) {
            var e = Sr(this);
            if (e) {
                var i = e.context.data;
                return null == t ? i: i.getLinkedData(t)
            }
            return NI(this).data
        },
        setData: function(t) {
            var e = Sr(this);
            if (e) {
                var i = e.context;
                i.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()),
                i.outputData = t,
                e !== this.dataTask && (i.data = t)
            }
            NI(this).data = t
        },
        getSource: function() {
            return xa(this)
        },
        getRawData: function() {
            return NI(this).dataBeforeProcessed
        },
        getBaseAxis: function() {
            var t = this.coordinateSystem;
            return t && t.getBaseAxis && t.getBaseAxis()
        },
        formatTooltip: function(t, e, i, n) {
            var o = this,
            a = "html" === (n = n || "html") ? "<br/>": "\n",
            r = "richText" === n,
            s = {},
            l = 0,
            u = this.getData(),
            h = u.mapDimension("defaultedTooltip", !0),
            c = h.length,
            f = this.getRawValue(t),
            g = y(f),
            m = u.getItemVisual(t, "color");
            w(m) && m.colorStops && (m = (m.colorStops[0] || {}).color),
            m = m || "transparent";
            var v = (c > 1 || g && !c ?
            function(i) {
                function a(t, i) {
                    var a = u.getDimensionInfo(i);
                    if (a && !1 !== a.otherDims.tooltip) {
                        var h = a.type,
                        d = "sub" + o.seriesIndex + "at" + l,
                        p = ia({
                            color: m,
                            type: "subItem",
                            renderMode: n,
                            markerId: d
                        }),
                        g = "string" == typeof p ? p: p.content,
                        v = (c ? g + $o(a.displayName || "-") + ": ": "") + $o("ordinal" === h ? t + "": "time" === h ? e ? "": oa("yyyy/MM/dd hh:mm:ss", t) : Qo(t));
                        v && f.push(v),
                        r && (s[d] = m, ++l)
                    }
                }
                var c = p(i,
                function(t, e, i) {
                    var n = u.getDimensionInfo(i);
                    return t |= n && !1 !== n.tooltip && null != n.displayName
                },
                0),
                f = [];
                h.length ? d(h,
                function(e) {
                    a(hr(u, t, e), e)
                }) : d(i, a);
                var g = c ? r ? "\n": "<br/>": "",
                v = g + f.join(g || ", ");
                return {
                    renderMode: n,
                    content: v,
                    style: s
                }
            } (f) : function(t) {
                return {
                    renderMode: n,
                    content: $o(Qo(t)),
                    style: s
                }
            } (c ? hr(u, t, h[0]) : g ? f[0] : f)).content,
            x = o.seriesIndex + "at" + l,
            _ = ia({
                color: m,
                type: "item",
                renderMode: n,
                markerId: x
            });
            s[x] = m,
            ++l;
            var b = u.getName(t),
            S = this.name;
            Oi(this) || (S = ""),
            S = S ? $o(S) + (e ? ": ": a) : "";
            var M = "string" == typeof _ ? _: _.content;
            return {
                html: e ? M + S + v: S + M + (b ? $o(b) + ": " + v: v),
                markers: s
            }
        },
        isAnimationEnabled: function() {
            if (R_.node) return ! 1;
            var t = this.getShallow("animation");
            return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1),
            t
        },
        restoreData: function() {
            this.dataTask.dirty()
        },
        getColorFromPalette: function(t, e, i) {
            var n = this.ecModel,
            o = JM.getColorFromPalette.call(this, t, e, i);
            return o || (o = n.getColorFromPalette(t, e, i)),
            o
        },
        coordDimToDataDim: function(t) {
            return this.getRawData().mapDimension(t, !0)
        },
        getProgressive: function() {
            return this.get("progressive")
        },
        getProgressiveThreshold: function() {
            return this.get("progressiveThreshold")
        },
        getAxisTooltipData: null,
        getTooltipPosition: null,
        pipeTask: null,
        preventIncremental: null,
        pipelineContext: null
    });
    h(OI, LI),
    h(OI, JM);
    var zI = function() {
        this.group = new Zw,
        this.uid = No("viewComponent")
    };
    zI.prototype = {
        constructor: zI,
        init: function(t, e) {},
        render: function(t, e, i, n) {},
        dispose: function() {},
        filterForExposedEvent: null
    };
    var EI = zI.prototype;
    EI.updateView = EI.updateLayout = EI.updateVisual = function(t, e, i, n) {},
    Yi(zI),
    Ki(zI, {
        registerWhenExtend: !0
    });
    var RI = function() {
        var t = Bi();
        return function(e) {
            var i = t(e),
            n = e.pipelineContext,
            o = i.large,
            a = i.progressiveRender,
            r = i.large = n.large,
            s = i.progressiveRender = n.progressiveRender;
            return !! (o ^ r || a ^ s) && "reset"
        }
    },
    BI = Bi(),
    VI = RI();
    Mr.prototype = {
        type: "chart",
        init: function(t, e) {},
        render: function(t, e, i, n) {},
        highlight: function(t, e, i, n) {
            Tr(t.getData(), n, "emphasis")
        },
        downplay: function(t, e, i, n) {
            Tr(t.getData(), n, "normal")
        },
        remove: function(t, e) {
            this.group.removeAll()
        },
        dispose: function() {},
        incrementalPrepareRender: null,
        incrementalRender: null,
        updateTransform: null,
        filterForExposedEvent: null
    };
    var FI = Mr.prototype;
    FI.updateView = FI.updateLayout = FI.updateVisual = function(t, e, i, n) {
        this.render(t, e, i, n)
    },
    Yi(Mr),
    Ki(Mr, {
        registerWhenExtend: !0
    }),
    Mr.markUpdateMethod = function(t, e) {
        BI(t).updateMethod = e
    };
    var GI = {
        incrementalPrepareRender: {
            progress: function(t, e) {
                e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload)
            }
        },
        render: {
            forceFirstProgress: !0,
            progress: function(t, e) {
                e.view.render(e.model, e.ecModel, e.api, e.payload)
            }
        }
    },
    WI = "\0__throttleOriginMethod",
    HI = "\0__throttleRate",
    ZI = "\0__throttleType",
    jI = {
        createOnAllSeries: !0,
        performRawSeries: !0,
        reset: function(t, e) {
            var i = t.getData(),
            n = (t.visualColorAccessPath || "itemStyle.color").split("."),
            o = t.get(n) || t.getColorFromPalette(t.name, null, e.getSeriesCount());
            if (i.setVisual("color", o), !e.isSeriesFiltered(t)) return "function" != typeof o || o instanceof cM || i.each(function(e) {
                i.setItemVisual(e, "color", o(t.getDataParams(e)))
            }),
            {
                dataEach: i.hasItemOption ?
                function(t, e) {
                    var i = t.getItemModel(e).get(n, !0);
                    null != i && t.setItemVisual(e, "color", i)
                }: null
            }
        }
    },
    YI = {
        toolbox: {
            brush: {
                title: {
                    rect: "矩形选择",
                    polygon: "圈选",
                    lineX: "横向选择",
                    lineY: "纵向选择",
                    keep: "保持选择",
                    clear: "清除选择"
                }
            },
            dataView: {
                title: "数据视图",
                lang: ["数据视图", "关闭", "刷新"]
            },
            dataZoom: {
                title: {
                    zoom: "区域缩放",
                    back: "区域缩放还原"
                }
            },
            magicType: {
                title: {
                    line: "切换为折线图",
                    bar: "切换为柱状图",
                    stack: "切换为堆叠",
                    tiled: "切换为平铺"
                }
            },
            restore: {
                title: "还原"
            },
            saveAsImage: {
                title: "保存为图片",
                lang: ["右键另存为图片"]
            }
        },
        series: {
            typeNames: {
                pie: "饼图",
                bar: "柱状图",
                line: "折线图",
                scatter: "散点图",
                effectScatter: "涟漪散点图",
                radar: "雷达图",
                tree: "树图",
                treemap: "矩形树图",
                boxplot: "箱型图",
                candlestick: "K线图",
                k: "K线图",
                heatmap: "热力图",
                map: "地图",
                parallel: "平行坐标图",
                lines: "线图",
                graph: "关系图",
                sankey: "桑基图",
                funnel: "漏斗图",
                gauge: "仪表盘图",
                pictorialBar: "象形柱图",
                themeRiver: "主题河流图",
                sunburst: "旭日图"
            }
        },
        aria: {
            general: {
                withTitle: "这是一个关于“{title}”的图表。",
                withoutTitle: "这是一个图表，"
            },
            series: {
                single: {
                    prefix: "",
                    withName: "图表类型是{seriesType}，表示{seriesName}。",
                    withoutName: "图表类型是{seriesType}。"
                },
                multiple: {
                    prefix: "它由{seriesCount}个图表系列组成。",
                    withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType}，",
                    withoutName: "第{seriesId}个系列是一个{seriesType}，",
                    separator: {
                        middle: "；",
                        end: "。"
                    }
                }
            },
            data: {
                allData: "其数据是——",
                partialData: "其中，前{displayCnt}项是——",
                withName: "{name}的数据是{value}",
                withoutName: "{value}",
                separator: {
                    middle: "，",
                    end: ""
                }
            }
        }
    },
    UI = function(t, e) {
        function i(t, e) {
            if ("string" != typeof t) return t;
            var i = t;
            return d(e,
            function(t, e) {
                i = i.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t)
            }),
            i
        }
        function n(t) {
            var e = a.get(t);
            if (null == e) {
                for (var i = t.split("."), n = YI.aria, o = 0; o < i.length; ++o) n = n[i[o]];
                return n
            }
            return e
        }
        function o(t) {
            return YI.series.typeNames[t] || "自定义图"
        }
        var a = e.getModel("aria");
        if (a.get("show")) if (a.get("description")) t.setAttribute("aria-label", a.get("description"));
        else {
            var r = 0;
            e.eachSeries(function(t, e) {++r
            },
            this);
            var s, l = a.get("data.maxCount") || 10,
            u = a.get("series.maxCount") || 10,
            h = Math.min(r, u);
            if (! (r < 1)) {
                var c = function() {
                    var t = e.getModel("title").option;
                    return t && t.length && (t = t[0]),
                    t && t.text
                } ();
                s = c ? i(n("general.withTitle"), {
                    title: c
                }) : n("general.withoutTitle");
                var f = [];
                s += i(n(r > 1 ? "series.multiple.prefix": "series.single.prefix"), {
                    seriesCount: r
                }),
                e.eachSeries(function(t, e) {
                    if (e < h) {
                        var a, s = t.get("name"),
                        u = "series." + (r > 1 ? "multiple": "single") + ".";
                        a = i(a = n(s ? u + "withName": u + "withoutName"), {
                            seriesId: t.seriesIndex,
                            seriesName: t.get("name"),
                            seriesType: o(t.subType)
                        });
                        var c = t.getData();
                        window.data = c,
                        c.count() > l ? a += i(n("data.partialData"), {
                            displayCnt: l
                        }) : a += n("data.allData");
                        for (var d = [], p = 0; p < c.count(); p++) if (p < l) {
                            var g = c.getName(p),
                            m = hr(c, p);
                            d.push(i(n(g ? "data.withName": "data.withoutName"), {
                                name: g,
                                value: m
                            }))
                        }
                        a += d.join(n("data.separator.middle")) + n("data.separator.end"),
                        f.push(a)
                    }
                }),
                s += f.join(n("series.multiple.separator.middle")) + n("series.multiple.separator.end"),
                t.setAttribute("aria-label", s)
            }
        }
    },
    XI = Math.PI,
    qI = Pr.prototype;
    qI.restoreData = function(t, e) {
        t.restoreData(e),
        this._stageTaskMap.each(function(t) {
            var e = t.overallTask;
            e && e.dirty()
        })
    },
    qI.getPerformArgs = function(t, e) {
        if (t.__pipeline) {
            var i = this._pipelineMap.get(t.__pipeline.id),
            n = i.context,
            o = !e && i.progressiveEnabled && (!n || n.progressiveRender) && t.__idxInPipeline > i.blockIndex ? i.step: null,
            a = n && n.modDataCount;
            return {
                step: o,
                modBy: null != a ? Math.ceil(a / o) : null,
                modDataCount: a
            }
        }
    },
    qI.getPipeline = function(t) {
        return this._pipelineMap.get(t)
    },
    qI.updateStreamModes = function(t, e) {
        var i = this._pipelineMap.get(t.uid),
        n = t.getData().count(),
        o = i.progressiveEnabled && e.incrementalPrepareRender && n >= i.threshold,
        a = t.get("large") && n >= t.get("largeThreshold"),
        r = "mod" === t.get("progressiveChunkMode") ? n: null;
        t.pipelineContext = i.context = {
            progressiveRender: o,
            modDataCount: r,
            large: a
        }
    },
    qI.restorePipelines = function(t) {
        var e = this,
        i = e._pipelineMap = E();
        t.eachSeries(function(t) {
            var n = t.getProgressive(),
            o = t.uid;
            i.set(o, {
                id: o,
                head: null,
                tail: null,
                threshold: t.getProgressiveThreshold(),
                progressiveEnabled: n && !(t.preventIncremental && t.preventIncremental()),
                blockIndex: -1,
                step: Math.round(n || 700),
                count: 0
            }),
            Zr(e, t, t.dataTask)
        })
    },
    qI.prepareStageTasks = function() {
        var t = this._stageTaskMap,
        e = this.ecInstance.getModel(),
        i = this.api;
        d(this._allHandlers,
        function(n) {
            var o = t.get(n.uid) || t.set(n.uid, []);
            n.reset && Or(this, n, o, e, i),
            n.overallReset && zr(this, n, o, e, i)
        },
        this)
    },
    qI.prepareView = function(t, e, i, n) {
        var o = t.renderTask,
        a = o.context;
        a.model = e,
        a.ecModel = i,
        a.api = n,
        o.__block = !t.incrementalPrepareRender,
        Zr(this, e, o)
    },
    qI.performDataProcessorTasks = function(t, e) {
        Nr(this, this._dataProcessorHandlers, t, e, {
            block: !0
        })
    },
    qI.performVisualTasks = function(t, e, i) {
        Nr(this, this._visualHandlers, t, e, i)
    },
    qI.performSeriesTasks = function(t) {
        var e;
        t.eachSeries(function(t) {
            e |= t.dataTask.perform()
        }),
        this.unfinished |= e
    },
    qI.plan = function() {
        this._pipelineMap.each(function(t) {
            var e = t.tail;
            do {
                if (e.__block) {
                    t.blockIndex = e.__idxInPipeline;
                    break
                }
                e = e.getUpstream()
            } while ( e )
        })
    };
    var KI = qI.updatePayload = function(t, e) {
        "remain" !== e && (t.context.payload = e)
    },
    QI = Wr(0);
    Pr.wrapStageHandler = function(t, e) {
        return x(t) && (t = {
            overallReset: t,
            seriesType: jr(t)
        }),
        t.uid = No("stageHandler"),
        e && (t.visualType = e),
        t
    };
    var JI, $I = {},
    tT = {};
    Yr($I, hI),
    Yr(tT, Ra),
    $I.eachSeriesByType = $I.eachRawSeriesByType = function(t) {
        JI = t
    },
    $I.eachComponent = function(t) {
        "series" === t.mainType && t.subType && (JI = t.subType)
    };
    var eT = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"],
    iT = {
        color: eT,
        colorLayer: [["#37A2DA", "#ffd85c", "#fd7b5f"], ["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"], ["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], eT]
    },
    nT = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c", "#f49f42"],
    oT = {
        color: nT,
        backgroundColor: "#333",
        tooltip: {
            axisPointer: {
                lineStyle: {
                    color: "#eee"
                },
                crossStyle: {
                    color: "#eee"
                }
            }
        },
        legend: {
            textStyle: {
                color: "#eee"
            }
        },
        textStyle: {
            color: "#eee"
        },
        title: {
            textStyle: {
                color: "#eee"
            }
        },
        toolbox: {
            iconStyle: {
                normal: {
                    borderColor: "#eee"
                }
            }
        },
        dataZoom: {
            textStyle: {
                color: "#eee"
            }
        },
        visualMap: {
            textStyle: {
                color: "#eee"
            }
        },
        timeline: {
            lineStyle: {
                color: "#eee"
            },
            itemStyle: {
                normal: {
                    color: nT[1]
                }
            },
            label: {
                normal: {
                    textStyle: {
                        color: "#eee"
                    }
                }
            },
            controlStyle: {
                normal: {
                    color: "#eee",
                    borderColor: "#eee"
                }
            }
        },
        timeAxis: {
            axisLine: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisTick: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisLabel: {
                textStyle: {
                    color: "#eee"
                }
            },
            splitLine: {
                lineStyle: {
                    type: "dashed",
                    color: "#aaa"
                }
            },
            splitArea: {
                areaStyle: {
                    color: "#eee"
                }
            }
        },
        logAxis: {
            axisLine: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisTick: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisLabel: {
                textStyle: {
                    color: "#eee"
                }
            },
            splitLine: {
                lineStyle: {
                    type: "dashed",
                    color: "#aaa"
                }
            },
            splitArea: {
                areaStyle: {
                    color: "#eee"
                }
            }
        },
        valueAxis: {
            axisLine: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisTick: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisLabel: {
                textStyle: {
                    color: "#eee"
                }
            },
            splitLine: {
                lineStyle: {
                    type: "dashed",
                    color: "#aaa"
                }
            },
            splitArea: {
                areaStyle: {
                    color: "#eee"
                }
            }
        },
        categoryAxis: {
            axisLine: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisTick: {
                lineStyle: {
                    color: "#eee"
                }
            },
            axisLabel: {
                textStyle: {
                    color: "#eee"
                }
            },
            splitLine: {
                lineStyle: {
                    type: "dashed",
                    color: "#aaa"
                }
            },
            splitArea: {
                areaStyle: {
                    color: "#eee"
                }
            }
        },
        line: {
            symbol: "circle"
        },
        graph: {
            color: nT
        },
        gauge: {
            title: {
                textStyle: {
                    color: "#eee"
                }
            }
        },
        candlestick: {
            itemStyle: {
                normal: {
                    color: "#FD1050",
                    color0: "#0CF49B",
                    borderColor: "#FD1050",
                    borderColor0: "#0CF49B"
                }
            }
        }
    };
    oT.categoryAxis.splitLine.show = !1,
    XM.extend({
        type: "dataset",
        defaultOption: {
            seriesLayoutBy: rI,
            sourceHeader: null,
            dimensions: null,
            source: null
        },
        optionUpdated: function() {
            ya(this)
        }
    }),
    zI.extend({
        type: "dataset"
    });
    var aT = kn.extend({
        type: "ellipse",
        shape: {
            cx: 0,
            cy: 0,
            rx: 0,
            ry: 0
        },
        buildPath: function(t, e) {
            var i = .5522848,
            n = e.cx,
            o = e.cy,
            a = e.rx,
            r = e.ry,
            s = a * i,
            l = r * i;
            t.moveTo(n - a, o),
            t.bezierCurveTo(n - a, o - l, n - s, o - r, n, o - r),
            t.bezierCurveTo(n + s, o - r, n + a, o - l, n + a, o),
            t.bezierCurveTo(n + a, o + l, n + s, o + r, n, o + r),
            t.bezierCurveTo(n - s, o + r, n - a, o + l, n - a, o),
            t.closePath()
        }
    }),
    rT = /[\s,]+/;
    Xr.prototype.parse = function(t, e) {
        e = e || {};
        var i = Ur(t);
        if (!i) throw new Error("Illegal svg");
        var n = new Zw;
        this._root = n;
        var o = i.getAttribute("viewBox") || "",
        a = parseFloat(i.getAttribute("width") || e.width),
        r = parseFloat(i.getAttribute("height") || e.height);
        isNaN(a) && (a = null),
        isNaN(r) && (r = null),
        Jr(i, n, null, !0);
        for (var s = i.firstChild; s;) this._parseNode(s, n),
        s = s.nextSibling;
        var l, u;
        if (o) {
            var h = P(o).split(rT);
            h.length >= 4 && (l = {
                x: parseFloat(h[0] || 0),
                y: parseFloat(h[1] || 0),
                width: parseFloat(h[2]),
                height: parseFloat(h[3])
            })
        }
        if (l && null != a && null != r && (u = is(l, a, r), !e.ignoreViewBox)) {
            var c = n; (n = new Zw).add(c),
            c.scale = u.scale.slice(),
            c.position = u.position.slice()
        }
        return e.ignoreRootClip || null == a || null == r || n.setClipPath(new aM({
            shape: {
                x: 0,
                y: 0,
                width: a,
                height: r
            }
        })),
        {
            root: n,
            width: a,
            height: r,
            viewBoxRect: l,
            viewBoxTransform: u
        }
    },
    Xr.prototype._parseNode = function(t, e) {
        var i = t.nodeName.toLowerCase();
        "defs" === i ? this._isDefine = !0 : "text" === i && (this._isText = !0);
        var n;
        if (this._isDefine) {
            if (r = lT[i]) {
                var o = r.call(this, t),
                a = t.getAttribute("id");
                a && (this._defs[a] = o)
            }
        } else {
            var r = sT[i];
            r && (n = r.call(this, t, e), e.add(n))
        }
        for (var s = t.firstChild; s;) 1 === s.nodeType && this._parseNode(s, n),
        3 === s.nodeType && this._isText && this._parseText(s, n),
        s = s.nextSibling;
        "defs" === i ? this._isDefine = !1 : "text" === i && (this._isText = !1)
    },
    Xr.prototype._parseText = function(t, e) {
        if (1 === t.nodeType) {
            var i = t.getAttribute("dx") || 0,
            n = t.getAttribute("dy") || 0;
            this._textX += parseFloat(i),
            this._textY += parseFloat(n)
        }
        var o = new qS({
            style: {
                text: t.textContent,
                transformText: !0
            },
            position: [this._textX || 0, this._textY || 0]
        });
        Kr(e, o),
        Jr(t, o, this._defs);
        var a = o.style.fontSize;
        a && a < 9 && (o.style.fontSize = 9, o.scale = o.scale || [1, 1], o.scale[0] *= a / 9, o.scale[1] *= a / 9);
        var r = o.getBoundingRect();
        return this._textX += r.width,
        e.add(o),
        o
    };
    var sT = {
        g: function(t, e) {
            var i = new Zw;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i
        },
        rect: function(t, e) {
            var i = new aM;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i.setShape({
                x: parseFloat(t.getAttribute("x") || 0),
                y: parseFloat(t.getAttribute("y") || 0),
                width: parseFloat(t.getAttribute("width") || 0),
                height: parseFloat(t.getAttribute("height") || 0)
            }),
            i
        },
        circle: function(t, e) {
            var i = new KS;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i.setShape({
                cx: parseFloat(t.getAttribute("cx") || 0),
                cy: parseFloat(t.getAttribute("cy") || 0),
                r: parseFloat(t.getAttribute("r") || 0)
            }),
            i
        },
        line: function(t, e) {
            var i = new rM;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i.setShape({
                x1: parseFloat(t.getAttribute("x1") || 0),
                y1: parseFloat(t.getAttribute("y1") || 0),
                x2: parseFloat(t.getAttribute("x2") || 0),
                y2: parseFloat(t.getAttribute("y2") || 0)
            }),
            i
        },
        ellipse: function(t, e) {
            var i = new aT;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i.setShape({
                cx: parseFloat(t.getAttribute("cx") || 0),
                cy: parseFloat(t.getAttribute("cy") || 0),
                rx: parseFloat(t.getAttribute("rx") || 0),
                ry: parseFloat(t.getAttribute("ry") || 0)
            }),
            i
        },
        polygon: function(t, e) {
            var i = t.getAttribute("points");
            i && (i = Qr(i));
            var n = new nM({
                shape: {
                    points: i || []
                }
            });
            return Kr(e, n),
            Jr(t, n, this._defs),
            n
        },
        polyline: function(t, e) {
            var i = new kn;
            Kr(e, i),
            Jr(t, i, this._defs);
            var n = t.getAttribute("points");
            return n && (n = Qr(n)),
            new oM({
                shape: {
                    points: n || []
                }
            })
        },
        image: function(t, e) {
            var i = new hi;
            return Kr(e, i),
            Jr(t, i, this._defs),
            i.setStyle({
                image: t.getAttribute("xlink:href"),
                x: t.getAttribute("x"),
                y: t.getAttribute("y"),
                width: t.getAttribute("width"),
                height: t.getAttribute("height")
            }),
            i
        },
        text: function(t, e) {
            var i = t.getAttribute("x") || 0,
            n = t.getAttribute("y") || 0,
            o = t.getAttribute("dx") || 0,
            a = t.getAttribute("dy") || 0;
            this._textX = parseFloat(i) + parseFloat(o),
            this._textY = parseFloat(n) + parseFloat(a);
            var r = new Zw;
            return Kr(e, r),
            Jr(t, r, this._defs),
            r
        },
        tspan: function(t, e) {
            var i = t.getAttribute("x"),
            n = t.getAttribute("y");
            null != i && (this._textX = parseFloat(i)),
            null != n && (this._textY = parseFloat(n));
            var o = t.getAttribute("dx") || 0,
            a = t.getAttribute("dy") || 0,
            r = new Zw;
            return Kr(e, r),
            Jr(t, r, this._defs),
            this._textX += o,
            this._textY += a,
            r
        },
        path: function(t, e) {
            var i = zn(t.getAttribute("d") || "");
            return Kr(e, i),
            Jr(t, i, this._defs),
            i
        }
    },
    lT = {
        lineargradient: function(t) {
            var e = parseInt(t.getAttribute("x1") || 0, 10),
            i = parseInt(t.getAttribute("y1") || 0, 10),
            n = parseInt(t.getAttribute("x2") || 10, 10),
            o = parseInt(t.getAttribute("y2") || 0, 10),
            a = new dM(e, i, n, o);
            return qr(t, a),
            a
        },
        radialgradient: function(t) {}
    },
    uT = {
        fill: "fill",
        stroke: "stroke",
        "stroke-width": "lineWidth",
        opacity: "opacity",
        "fill-opacity": "fillOpacity",
        "stroke-opacity": "strokeOpacity",
        "stroke-dasharray": "lineDash",
        "stroke-dashoffset": "lineDashOffset",
        "stroke-linecap": "lineCap",
        "stroke-linejoin": "lineJoin",
        "stroke-miterlimit": "miterLimit",
        "font-family": "fontFamily",
        "font-size": "fontSize",
        "font-style": "fontStyle",
        "font-weight": "fontWeight",
        "text-align": "textAlign",
        "alignment-baseline": "textBaseline"
    },
    hT = /url\(\s*#(.*?)\)/,
    cT = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,
    dT = /([^\s:;]+)\s*:\s*([^:;]+)/g,
    fT = E(),
    pT = {
        registerMap: function(t, e, i) {
            var n;
            return y(e) ? n = e: e.svg ? n = [{
                type: "svg",
                source: e.svg,
                specialAreas: e.specialAreas
            }] : (e.geoJson && !e.features && (i = e.specialAreas, e = e.geoJson), n = [{
                type: "geoJSON",
                source: e,
                specialAreas: i
            }]),
            d(n,
            function(t) {
                var e = t.type;
                "geoJson" === e && (e = t.type = "geoJSON"),
                (0, gT[e])(t)
            }),
            fT.set(t, n)
        },
        retrieveMap: function(t) {
            return fT.get(t)
        }
    },
    gT = {
        geoJSON: function(t) {
            var e = t.source;
            t.geoJSON = _(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")() : e
        },
        svg: function(t) {
            t.svgXML = Ur(t.source)
        }
    },
    mT = k,
    vT = d,
    yT = x,
    xT = w,
    _T = XM.parseClassType,
    wT = {
        zrender: "4.0.5"
    },
    bT = 1e3,
    ST = 1e3,
    MT = 3e3,
    IT = {
        PROCESSOR: {
            FILTER: bT,
            STATISTIC: 5e3
        },
        VISUAL: {
            LAYOUT: ST,
            GLOBAL: 2e3,
            CHART: MT,
            COMPONENT: 4e3,
            BRUSH: 5e3
        }
    },
    TT = "__flagInMainProcess",
    AT = "__optionUpdated",
    DT = /^[a-zA-Z0-9_]+$/;
    as.prototype.on = os("on"),
    as.prototype.off = os("off"),
    as.prototype.one = os("one"),
    h(as, aw);
    var CT = rs.prototype;
    CT._onframe = function() {
        if (!this._disposed) {
            var t = this._scheduler;
            if (this[AT]) {
                var e = this[AT].silent;
                this[TT] = !0,
                ls(this),
                LT.update.call(this),
                this[TT] = !1,
                this[AT] = !1,
                ds.call(this, e),
                fs.call(this, e)
            } else if (t.unfinished) {
                var i = 1,
                n = this._model;
                this._api,
                t.unfinished = !1;
                do {
                    var o = +new Date;
                    t.performSeriesTasks(n), t.performDataProcessorTasks(n), hs(this, n), t.performVisualTasks(n), xs(this, this._model, 0, "remain"), i -= +new Date - o
                } while ( i > 0 && t . unfinished );
                t.unfinished || this._zr.flush()
            }
        }
    },
    CT.getDom = function() {
        return this._dom
    },
    CT.getZr = function() {
        return this._zr
    },
    CT.setOption = function(t, e, i) {
        var n;
        if (xT(e) && (i = e.lazyUpdate, n = e.silent, e = e.notMerge), this[TT] = !0, !this._model || e) {
            var o = new Va(this._api),
            a = this._theme,
            r = this._model = new hI(null, null, a, o);
            r.scheduler = this._scheduler,
            r.init(null, null, a, o)
        }
        this._model.setOption(t, zT),
        i ? (this[AT] = {
            silent: n
        },
        this[TT] = !1) : (ls(this), LT.update.call(this), this._zr.flush(), this[AT] = !1, this[TT] = !1, ds.call(this, n), fs.call(this, n))
    },
    CT.setTheme = function() {
        console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
    },
    CT.getModel = function() {
        return this._model
    },
    CT.getOption = function() {
        return this._model && this._model.getOption()
    },
    CT.getWidth = function() {
        return this._zr.getWidth()
    },
    CT.getHeight = function() {
        return this._zr.getHeight()
    },
    CT.getDevicePixelRatio = function() {
        return this._zr.painter.dpr || window.devicePixelRatio || 1
    },
    CT.getRenderedCanvas = function(t) {
        if (R_.canvasSupported) return (t = t || {}).pixelRatio = t.pixelRatio || 1,
        t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor"),
        this._zr.painter.getRenderedCanvas(t)
    },
    CT.getSvgDataUrl = function() {
        if (R_.svgSupported) {
            var t = this._zr;
            return d(t.storage.getDisplayList(),
            function(t) {
                t.stopAnimation(!0)
            }),
            t.painter.pathToDataUrl()
        }
    },
    CT.getDataURL = function(t) {
        var e = (t = t || {}).excludeComponents,
        i = this._model,
        n = [],
        o = this;
        vT(e,
        function(t) {
            i.eachComponent({
                mainType: t
            },
            function(t) {
                var e = o._componentsMap[t.__viewId];
                e.group.ignore || (n.push(e), e.group.ignore = !0)
            })
        });
        var a = "svg" === this._zr.painter.getType() ? this.getSvgDataUrl() : this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png"));
        return vT(n,
        function(t) {
            t.group.ignore = !1
        }),
        a
    },
    CT.getConnectedDataURL = function(t) {
        if (R_.canvasSupported) {
            var e = this.group,
            n = Math.min,
            o = Math.max;
            if (GT[e]) {
                var a = 1 / 0,
                r = 1 / 0,
                s = -1 / 0,
                l = -1 / 0,
                u = [],
                h = t && t.pixelRatio || 1;
                d(FT,
                function(h, c) {
                    if (h.group === e) {
                        var d = h.getRenderedCanvas(i(t)),
                        f = h.getDom().getBoundingClientRect();
                        a = n(f.left, a),
                        r = n(f.top, r),
                        s = o(f.right, s),
                        l = o(f.bottom, l),
                        u.push({
                            dom: d,
                            left: f.left,
                            top: f.top
                        })
                    }
                });
                var c = (s *= h) - (a *= h),
                f = (l *= h) - (r *= h),
                p = X_();
                p.width = c,
                p.height = f;
                var g = Ii(p);
                return vT(u,
                function(t) {
                    var e = new hi({
                        style: {
                            x: t.left * h - a,
                            y: t.top * h - r,
                            image: t.dom
                        }
                    });
                    g.add(e)
                }),
                g.refreshImmediately(),
                p.toDataURL("image/" + (t && t.type || "png"))
            }
            return this.getDataURL(t)
        }
    },
    CT.convertToPixel = v(ss, "convertToPixel"),
    CT.convertFromPixel = v(ss, "convertFromPixel"),
    CT.containPixel = function(t, e) {
        var i;
        return t = Vi(this._model, t),
        d(t,
        function(t, n) {
            n.indexOf("Models") >= 0 && d(t,
            function(t) {
                var o = t.coordinateSystem;
                if (o && o.containPoint) i |= !!o.containPoint(e);
                else if ("seriesModels" === n) {
                    var a = this._chartsMap[t.__viewId];
                    a && a.containPoint && (i |= a.containPoint(e, t))
                }
            },
            this)
        },
        this),
        !!i
    },
    CT.getVisual = function(t, e) {
        var i = (t = Vi(this._model, t, {
            defaultMainType: "series"
        })).seriesModel.getData(),
        n = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside: t.hasOwnProperty("dataIndex") ? i.indexOfRawIndex(t.dataIndex) : null;
        return null != n ? i.getItemVisual(n, e) : i.getVisual(e)
    },
    CT.getViewOfComponentModel = function(t) {
        return this._componentsMap[t.__viewId]
    },
    CT.getViewOfSeriesModel = function(t) {
        return this._chartsMap[t.__viewId]
    };
    var LT = {
        prepareAndUpdate: function(t) {
            ls(this),
            LT.update.call(this, t)
        },
        update: function(t) {
            var e = this._model,
            i = this._api,
            n = this._zr,
            o = this._coordSysMgr,
            a = this._scheduler;
            if (e) {
                a.restoreData(e, t),
                a.performSeriesTasks(e),
                o.create(e, i),
                a.performDataProcessorTasks(e, t),
                hs(this, e),
                o.update(e, i),
                ms(e),
                a.performVisualTasks(e, t),
                vs(this, e, i, t);
                var r = e.get("backgroundColor") || "transparent";
                if (R_.canvasSupported) n.setBackgroundColor(r);
                else {
                    var s = Rt(r);
                    r = Yt(s, "rgb"),
                    0 === s[3] && (r = "transparent")
                }
                _s(e, i)
            }
        },
        updateTransform: function(t) {
            var e = this._model,
            i = this,
            n = this._api;
            if (e) {
                var o = [];
                e.eachComponent(function(a, r) {
                    var s = i.getViewOfComponentModel(r);
                    if (s && s.__alive) if (s.updateTransform) {
                        var l = s.updateTransform(r, e, n, t);
                        l && l.update && o.push(s)
                    } else o.push(s)
                });
                var a = E();
                e.eachSeries(function(o) {
                    var r = i._chartsMap[o.__viewId];
                    if (r.updateTransform) {
                        var s = r.updateTransform(o, e, n, t);
                        s && s.update && a.set(o.uid, 1)
                    } else a.set(o.uid, 1)
                }),
                ms(e),
                this._scheduler.performVisualTasks(e, t, {
                    setDirty: !0,
                    dirtyMap: a
                }),
                xs(i, e, 0, t, a),
                _s(e, this._api)
            }
        },
        updateView: function(t) {
            var e = this._model;
            e && (Mr.markUpdateMethod(t, "updateView"), ms(e), this._scheduler.performVisualTasks(e, t, {
                setDirty: !0
            }), vs(this, this._model, this._api, t), _s(e, this._api))
        },
        updateVisual: function(t) {
            LT.update.call(this, t)
        },
        updateLayout: function(t) {
            LT.update.call(this, t)
        }
    };
    CT.resize = function(t) {
        this._zr.resize(t);
        var e = this._model;
        if (this._loadingFX && this._loadingFX.resize(), e) {
            var i = e.resetOption("media"),
            n = t && t.silent;
            this[TT] = !0,
            i && ls(this),
            LT.update.call(this),
            this[TT] = !1,
            ds.call(this, n),
            fs.call(this, n)
        }
    },
    CT.showLoading = function(t, e) {
        if (xT(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), VT[t]) {
            var i = VT[t](this._api, e),
            n = this._zr;
            this._loadingFX = i,
            n.add(i)
        }
    },
    CT.hideLoading = function() {
        this._loadingFX && this._zr.remove(this._loadingFX),
        this._loadingFX = null
    },
    CT.makeActionFromEvent = function(t) {
        var e = a({},
        t);
        return e.type = NT[t.type],
        e
    },
    CT.dispatchAction = function(t, e) {
        xT(e) || (e = {
            silent: !!e
        }),
        PT[t.type] && this._model && (this[TT] ? this._pendingActions.push(t) : (cs.call(this, t, e.silent), e.flush ? this._zr.flush(!0) : !1 !== e.flush && R_.browser.weChat && this._throttledZrFlush(), ds.call(this, e.silent), fs.call(this, e.silent)))
    },
    CT.appendData = function(t) {
        var e = t.seriesIndex;
        this.getModel().getSeriesByIndex(e).appendData(t),
        this._scheduler.unfinished = !0
    },
    CT.on = os("on"),
    CT.off = os("off"),
    CT.one = os("one");
    var kT = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"];
    CT._initEvents = function() {
        vT(kT,
        function(t) {
            this._zr.on(t,
            function(e) {
                var i, n = this.getModel(),
                o = e.target;
                if ("globalout" === t) i = {};
                else if (o && null != o.dataIndex) {
                    var r = o.dataModel || n.getSeriesByIndex(o.seriesIndex);
                    i = r && r.getDataParams(o.dataIndex, o.dataType, o) || {}
                } else o && o.eventData && (i = a({},
                o.eventData));
                if (i) {
                    var s = i.componentType,
                    l = i.componentIndex;
                    "markLine" !== s && "markPoint" !== s && "markArea" !== s || (s = "series", l = i.seriesIndex);
                    var u = s && null != l && n.getComponent(s, l),
                    h = u && this["series" === u.mainType ? "_chartsMap": "_componentsMap"][u.__viewId];
                    i.event = e,
                    i.type = t,
                    this._ecEventProcessor.eventInfo = {
                        targetEl: o,
                        packedEvent: i,
                        model: u,
                        view: h
                    },
                    this.trigger(t, i)
                }
            },
            this)
        },
        this),
        vT(NT,
        function(t, e) {
            this._messageCenter.on(e,
            function(t) {
                this.trigger(e, t)
            },
            this)
        },
        this)
    },
    CT.isDisposed = function() {
        return this._disposed
    },
    CT.clear = function() {
        this.setOption({
            series: []
        },
        !0)
    },
    CT.dispose = function() {
        if (!this._disposed) {
            this._disposed = !0,
            Gi(this.getDom(), ZT, "");
            var t = this._api,
            e = this._model;
            vT(this._componentsViews,
            function(i) {
                i.dispose(e, t)
            }),
            vT(this._chartsViews,
            function(i) {
                i.dispose(e, t)
            }),
            this._zr.dispose(),
            delete FT[this.id]
        }
    },
    h(rs, aw),
    Is.prototype = {
        constructor: Is,
        normalizeQuery: function(t) {
            var e = {},
            i = {},
            n = {};
            if (_(t)) {
                var o = _T(t);
                e.mainType = o.main || null,
                e.subType = o.sub || null
            } else {
                var a = ["Index", "Name", "Id"],
                r = {
                    name: 1,
                    dataIndex: 1,
                    dataType: 1
                };
                d(t,
                function(t, o) {
                    for (var s = !1,
                    l = 0; l < a.length; l++) {
                        var u = a[l],
                        h = o.lastIndexOf(u);
                        if (h > 0 && h === o.length - u.length) {
                            var c = o.slice(0, h);
                            "data" !== c && (e.mainType = c, e[u.toLowerCase()] = t, s = !0)
                        }
                    }
                    r.hasOwnProperty(o) && (i[o] = t, s = !0),
                    s || (n[o] = t)
                })
            }
            return {
                cptQuery: e,
                dataQuery: i,
                otherQuery: n
            }
        },
        filter: function(t, e, i) {
            function n(t, e, i, n) {
                return null == t[i] || e[n || i] === t[i]
            }
            var o = this.eventInfo;
            if (!o) return ! 0;
            var a = o.targetEl,
            r = o.packedEvent,
            s = o.model,
            l = o.view;
            if (!s || !l) return ! 0;
            var u = e.cptQuery,
            h = e.dataQuery;
            return n(u, s, "mainType") && n(u, s, "subType") && n(u, s, "index", "componentIndex") && n(u, s, "name") && n(u, s, "id") && n(h, r, "name") && n(h, r, "dataIndex") && n(h, r, "dataType") && (!l.filterForExposedEvent || l.filterForExposedEvent(t, e.otherQuery, a, r))
        },
        afterTrigger: function() {
            this.eventInfo = null
        }
    };
    var PT = {},
    NT = {},
    OT = [],
    zT = [],
    ET = [],
    RT = [],
    BT = {},
    VT = {},
    FT = {},
    GT = {},
    WT = new Date - 0,
    HT = new Date - 0,
    ZT = "_echarts_instance_",
    jT = As;
    zs(2e3, jI),
    Ls(MI),
    ks(5e3,
    function(t) {
        var e = E();
        t.eachSeries(function(t) {
            var i = t.get("stack");
            if (i) {
                var n = e.get(i) || e.set(i, []),
                o = t.getData(),
                a = {
                    stackResultDimension: o.getCalculationInfo("stackResultDimension"),
                    stackedOverDimension: o.getCalculationInfo("stackedOverDimension"),
                    stackedDimension: o.getCalculationInfo("stackedDimension"),
                    stackedByDimension: o.getCalculationInfo("stackedByDimension"),
                    isStackedByIndex: o.getCalculationInfo("isStackedByIndex"),
                    data: o,
                    seriesModel: t
                };
                if (!a.stackedDimension || !a.isStackedByIndex && !a.stackedByDimension) return;
                n.length && o.setCalculationInfo("stackedOnSeries", n[n.length - 1].seriesModel),
                n.push(a)
            }
        }),
        e.each(ir)
    }),
    Rs("default",
    function(t, e) {
        r(e = e || {},
        {
            text: "loading",
            color: "#c23531",
            textColor: "#000",
            maskColor: "rgba(255, 255, 255, 0.8)",
            zlevel: 0
        });
        var i = new aM({
            style: {
                fill: e.maskColor
            },
            zlevel: e.zlevel,
            z: 1e4
        }),
        n = new uM({
            shape: {
                startAngle: -XI / 2,
                endAngle: -XI / 2 + .1,
                r: 10
            },
            style: {
                stroke: e.color,
                lineCap: "round",
                lineWidth: 5
            },
            zlevel: e.zlevel,
            z: 10001
        }),
        o = new aM({
            style: {
                fill: "none",
                text: e.text,
                textPosition: "right",
                textDistance: 10,
                textFill: e.textColor
            },
            zlevel: e.zlevel,
            z: 10001
        });
        n.animateShape(!0).when(1e3, {
            endAngle: 3 * XI / 2
        }).start("circularInOut"),
        n.animateShape(!0).when(1e3, {
            startAngle: 3 * XI / 2
        }).delay(300).start("circularInOut");
        var a = new Zw;
        return a.add(n),
        a.add(o),
        a.add(i),
        a.resize = function() {
            var e = t.getWidth() / 2,
            a = t.getHeight() / 2;
            n.setShape({
                cx: e,
                cy: a
            });
            var r = n.shape.r;
            o.setShape({
                x: e - r,
                y: a - r,
                width: 2 * r,
                height: 2 * r
            }),
            i.setShape({
                x: 0,
                y: 0,
                width: t.getWidth(),
                height: t.getHeight()
            })
        },
        a.resize(),
        a
    }),
    Ps({
        type: "highlight",
        event: "highlight",
        update: "highlight"
    },
    B),
    Ps({
        type: "downplay",
        event: "downplay",
        update: "downplay"
    },
    B),
    Cs("light", iT),
    Cs("dark", oT);
    var YT = {};
    Hs.prototype = {
        constructor: Hs,
        add: function(t) {
            return this._add = t,
            this
        },
        update: function(t) {
            return this._update = t,
            this
        },
        remove: function(t) {
            return this._remove = t,
            this
        },
        execute: function() {
            var t = this._old,
            e = this._new,
            i = {},
            n = [],
            o = [];
            for (Zs(t, {},
            n, "_oldKeyGetter", this), Zs(e, i, o, "_newKeyGetter", this), a = 0; a < t.length; a++) null != (s = i[r = n[a]]) ? ((u = s.length) ? (1 === u && (i[r] = null), s = s.unshift()) : i[r] = null, this._update && this._update(s, a)) : this._remove && this._remove(a);
            for (var a = 0; a < o.length; a++) {
                var r = o[a];
                if (i.hasOwnProperty(r)) {
                    var s = i[r];
                    if (null == s) continue;
                    if (s.length) for (var l = 0,
                    u = s.length; l < u; l++) this._add && this._add(s[l]);
                    else this._add && this._add(s)
                }
            }
        }
    };
    var UT = E(["tooltip", "label", "itemName", "itemId", "seriesName"]),
    XT = w,
    qT = "e\0\0",
    KT = {
        float: "undefined" == typeof Float64Array ? Array: Float64Array,
        int: "undefined" == typeof Int32Array ? Array: Int32Array,
        ordinal: Array,
        number: Array,
        time: Array
    },
    QT = "undefined" == typeof Uint32Array ? Array: Uint32Array,
    JT = "undefined" == typeof Uint16Array ? Array: Uint16Array,
    $T = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount", "_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"],
    tA = ["_extent", "_approximateExtent", "_rawExtent"],
    eA = function(t, e) {
        t = t || ["x", "y"];
        for (var i = {},
        n = [], o = {},
        a = 0; a < t.length; a++) {
            var r = t[a];
            _(r) && (r = {
                name: r
            });
            var s = r.name;
            r.type = r.type || "float",
            r.coordDim || (r.coordDim = s, r.coordDimIndex = 0),
            r.otherDims = r.otherDims || {},
            n.push(s),
            i[s] = r,
            r.index = a,
            r.createInvertedIndices && (o[s] = [])
        }
        this.dimensions = n,
        this._dimensionInfos = i,
        this.hostModel = e,
        this.dataType,
        this._indices = null,
        this._count = 0,
        this._rawCount = 0,
        this._storage = {},
        this._nameList = [],
        this._idList = [],
        this._optionModels = [],
        this._visual = {},
        this._layout = {},
        this._itemVisuals = [],
        this.hasItemVisual = {},
        this._itemLayouts = [],
        this._graphicEls = [],
        this._chunkSize = 1e5,
        this._chunkCount = 0,
        this._rawData,
        this._rawExtent = {},
        this._extent = {},
        this._approximateExtent = {},
        this._dimensionsSummary = js(this),
        this._invertedIndicesMap = o,
        this._calculationInfo = {}
    },
    iA = eA.prototype;
    iA.type = "list",
    iA.hasItemOption = !0,
    iA.getDimension = function(t) {
        return isNaN(t) || (t = this.dimensions[t] || t),
        t
    },
    iA.getDimensionInfo = function(t) {
        return this._dimensionInfos[this.getDimension(t)]
    },
    iA.getDimensionsOnCoord = function() {
        return this._dimensionsSummary.dataDimsOnCoord.slice()
    },
    iA.mapDimension = function(t, e) {
        var i = this._dimensionsSummary;
        if (null == e) return i.encodeFirstDimNotExtra[t];
        var n = i.encode[t];
        return ! 0 === e ? (n || []).slice() : n && n[e]
    },
    iA.initData = function(t, e, i) { (va.isInstance(t) || c(t)) && (t = new nr(t, this.dimensions.length)),
        this._rawData = t,
        this._storage = {},
        this._indices = null,
        this._nameList = e || [],
        this._idList = [],
        this._nameRepeatCount = {},
        i || (this.hasItemOption = !1),
        this.defaultDimValueGetter = DI[this._rawData.getSource().sourceFormat],
        this._dimValueGetter = i = i || this.defaultDimValueGetter,
        this._rawExtent = {},
        this._initDataFromProvider(0, t.count()),
        t.pure && (this.hasItemOption = !1)
    },
    iA.getProvider = function() {
        return this._rawData
    },
    iA.appendData = function(t) {
        var e = this._rawData,
        i = this.count();
        e.appendData(t);
        var n = e.count();
        e.persistent || (n += i),
        this._initDataFromProvider(i, n)
    },
    iA._initDataFromProvider = function(t, e) {
        if (! (t >= e)) {
            for (var i, n = this._chunkSize,
            o = this._rawData,
            a = this._storage,
            r = this.dimensions,
            s = r.length,
            l = this._dimensionInfos,
            u = this._nameList,
            h = this._idList,
            c = this._rawExtent,
            d = this._nameRepeatCount = {},
            f = this._chunkCount,
            p = f - 1,
            g = 0; g < s; g++) {
                c[T = r[g]] || (c[T] = [1 / 0, -1 / 0]);
                var m = l[T];
                0 === m.otherDims.itemName && (i = this._nameDimIdx = g),
                0 === m.otherDims.itemId && (this._idDimIdx = g);
                var v = KT[m.type];
                a[T] || (a[T] = []);
                var y = a[T][p];
                if (y && y.length < n) {
                    for (var x = new v(Math.min(e - p * n, n)), _ = 0; _ < y.length; _++) x[_] = y[_];
                    a[T][p] = x
                }
                for (I = f * n; I < e; I += n) a[T].push(new v(Math.min(e - I, n)));
                this._chunkCount = a[T].length
            }
            for (var w = new Array(s), b = t; b < e; b++) {
                w = o.getItem(b, w);
                for (var S = Math.floor(b / n), M = b % n, I = 0; I < s; I++) {
                    var T = r[I],
                    A = a[T][S],
                    D = this._dimValueGetter(w, T, b, I);
                    A[M] = D;
                    var C = c[T];
                    D < C[0] && (C[0] = D),
                    D > C[1] && (C[1] = D)
                }
                if (!o.pure) {
                    var L = u[b];
                    if (w && null == L) if (null != w.name) u[b] = L = w.name;
                    else if (null != i) {
                        var k = r[i],
                        P = a[k][S];
                        if (P) {
                            L = P[M];
                            var N = l[k].ordinalMeta;
                            N && N.categories.length && (L = N.categories[L])
                        }
                    }
                    var O = null == w ? null: w.id;
                    null == O && null != L && (d[L] = d[L] || 0, O = L, d[L] > 0 && (O += "__ec__" + d[L]), d[L]++),
                    null != O && (h[b] = O)
                }
            } ! o.persistent && o.clean && o.clean(),
            this._rawCount = this._count = e,
            this._extent = {},
            Qs(this)
        }
    },
    iA.count = function() {
        return this._count
    },
    iA.getIndices = function() {
        var t = this._indices;
        if (t) {
            var e = t.constructor,
            i = this._count;
            if (e === Array) for (n = new e(i), o = 0; o < i; o++) n[o] = t[o];
            else n = new e(t.buffer, 0, i)
        } else for (var n = new(e = Xs(this))(this.count()), o = 0; o < n.length; o++) n[o] = o;
        return n
    },
    iA.get = function(t, e) {
        if (! (e >= 0 && e < this._count)) return NaN;
        var i = this._storage;
        if (!i[t]) return NaN;
        e = this.getRawIndex(e);
        var n = Math.floor(e / this._chunkSize),
        o = e % this._chunkSize;
        return i[t][n][o]
    },
    iA.getByRawIndex = function(t, e) {
        if (! (e >= 0 && e < this._rawCount)) return NaN;
        var i = this._storage[t];
        if (!i) return NaN;
        var n = Math.floor(e / this._chunkSize),
        o = e % this._chunkSize;
        return i[n][o]
    },
    iA._getFast = function(t, e) {
        var i = Math.floor(e / this._chunkSize),
        n = e % this._chunkSize;
        return this._storage[t][i][n]
    },
    iA.getValues = function(t, e) {
        var i = [];
        y(t) || (e = t, t = this.dimensions);
        for (var n = 0,
        o = t.length; n < o; n++) i.push(this.get(t[n], e));
        return i
    },
    iA.hasValue = function(t) {
        for (var e = this._dimensionsSummary.dataDimsOnCoord,
        i = this._dimensionInfos,
        n = 0,
        o = e.length; n < o; n++) if ("ordinal" !== i[e[n]].type && isNaN(this.get(e[n], t))) return ! 1;
        return ! 0
    },
    iA.getDataExtent = function(t) {
        t = this.getDimension(t);
        var e = [1 / 0, -1 / 0];
        if (!this._storage[t]) return e;
        var i, n = this.count();
        if (!this._indices) return this._rawExtent[t].slice();
        if (i = this._extent[t]) return i.slice();
        for (var o = (i = e)[0], a = i[1], r = 0; r < n; r++) {
            var s = this._getFast(t, this.getRawIndex(r));
            s < o && (o = s),
            s > a && (a = s)
        }
        return i = [o, a],
        this._extent[t] = i,
        i
    },
    iA.getApproximateExtent = function(t) {
        return t = this.getDimension(t),
        this._approximateExtent[t] || this.getDataExtent(t)
    },
    iA.setApproximateExtent = function(t, e) {
        e = this.getDimension(e),
        this._approximateExtent[e] = t.slice()
    },
    iA.getCalculationInfo = function(t) {
        return this._calculationInfo[t]
    },
    iA.setCalculationInfo = function(t, e) {
        XT(t) ? a(this._calculationInfo, t) : this._calculationInfo[t] = e
    },
    iA.getSum = function(t) {
        var e = 0;
        if (this._storage[t]) for (var i = 0,
        n = this.count(); i < n; i++) {
            var o = this.get(t, i);
            isNaN(o) || (e += o)
        }
        return e
    },
    iA.getMedian = function(t) {
        var e = [];
        this.each(t,
        function(t, i) {
            isNaN(t) || e.push(t)
        });
        var i = [].concat(e).sort(function(t, e) {
            return t - e
        }),
        n = this.count();
        return 0 === n ? 0 : n % 2 == 1 ? i[(n - 1) / 2] : (i[n / 2] + i[n / 2 - 1]) / 2
    },
    iA.rawIndexOf = function(t, e) {
        var i = (t && this._invertedIndicesMap[t])[e];
        return null == i || isNaN(i) ? -1 : i
    },
    iA.indexOfName = function(t) {
        for (var e = 0,
        i = this.count(); e < i; e++) if (this.getName(e) === t) return e;
        return - 1
    },
    iA.indexOfRawIndex = function(t) {
        if (!this._indices) return t;
        if (t >= this._rawCount || t < 0) return - 1;
        var e = this._indices,
        i = e[t];
        if (null != i && i < this._count && i === t) return t;
        for (var n = 0,
        o = this._count - 1; n <= o;) {
            var a = (n + o) / 2 | 0;
            if (e[a] < t) n = a + 1;
            else {
                if (! (e[a] > t)) return a;
                o = a - 1
            }
        }
        return - 1
    },
    iA.indicesOfNearest = function(t, e, i) {
        var n = [];
        if (!this._storage[t]) return n;
        null == i && (i = 1 / 0);
        for (var o = Number.MAX_VALUE,
        a = -1,
        r = 0,
        s = this.count(); r < s; r++) {
            var l = e - this.get(t, r),
            u = Math.abs(l);
            l <= i && u <= o && ((u < o || l >= 0 && a < 0) && (o = u, a = l, n.length = 0), n.push(r))
        }
        return n
    },
    iA.getRawIndex = $s,
    iA.getRawDataItem = function(t) {
        if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t));
        for (var e = [], i = 0; i < this.dimensions.length; i++) {
            var n = this.dimensions[i];
            e.push(this.get(n, t))
        }
        return e
    },
    iA.getName = function(t) {
        var e = this.getRawIndex(t);
        return this._nameList[e] || Js(this, this._nameDimIdx, e) || ""
    },
    iA.getId = function(t) {
        return el(this, this.getRawIndex(t))
    },
    iA.each = function(t, e, i, n) {
        if (this._count) {
            "function" == typeof t && (n = i, i = e, e = t, t = []),
            i = i || n || this;
            for (var o = (t = f(il(t), this.getDimension, this)).length, a = 0; a < this.count(); a++) switch (o) {
            case 0:
                e.call(i, a);
                break;
            case 1:
                e.call(i, this.get(t[0], a), a);
                break;
            case 2:
                e.call(i, this.get(t[0], a), this.get(t[1], a), a);
                break;
            default:
                for (var r = 0,
                s = []; r < o; r++) s[r] = this.get(t[r], a);
                s[r] = a,
                e.apply(i, s)
            }
        }
    },
    iA.filterSelf = function(t, e, i, n) {
        if (this._count) {
            "function" == typeof t && (n = i, i = e, e = t, t = []),
            i = i || n || this,
            t = f(il(t), this.getDimension, this);
            for (var o = this.count(), a = new(Xs(this))(o), r = [], s = t.length, l = 0, u = t[0], h = 0; h < o; h++) {
                var c, d = this.getRawIndex(h);
                if (0 === s) c = e.call(i, h);
                else if (1 === s) {
                    var p = this._getFast(u, d);
                    c = e.call(i, p, h)
                } else {
                    for (var g = 0; g < s; g++) r[g] = this._getFast(u, d);
                    r[g] = h,
                    c = e.apply(i, r)
                }
                c && (a[l++] = d)
            }
            return l < o && (this._indices = a),
            this._count = l,
            this._extent = {},
            this.getRawIndex = this._indices ? tl: $s,
            this
        }
    },
    iA.selectRange = function(t) {
        if (this._count) {
            var e = [];
            for (var i in t) t.hasOwnProperty(i) && e.push(i);
            var n = e.length;
            if (n) {
                var o = this.count(),
                a = new(Xs(this))(o),
                r = 0,
                s = e[0],
                l = t[s][0],
                u = t[s][1],
                h = !1;
                if (!this._indices) {
                    var c = 0;
                    if (1 === n) {
                        for (var d = this._storage[e[0]], f = 0; f < this._chunkCount; f++) for (var p = d[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++)((w = p[m]) >= l && w <= u || isNaN(w)) && (a[r++] = c),
                        c++;
                        h = !0
                    } else if (2 === n) {
                        for (var d = this._storage[s], v = this._storage[e[1]], y = t[e[1]][0], x = t[e[1]][1], f = 0; f < this._chunkCount; f++) for (var p = d[f], _ = v[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) {
                            var w = p[m],
                            b = _[m]; (w >= l && w <= u || isNaN(w)) && (b >= y && b <= x || isNaN(b)) && (a[r++] = c),
                            c++
                        }
                        h = !0
                    }
                }
                if (!h) if (1 === n) for (m = 0; m < o; m++) M = this.getRawIndex(m),
                ((w = this._getFast(s, M)) >= l && w <= u || isNaN(w)) && (a[r++] = M);
                else for (m = 0; m < o; m++) {
                    for (var S = !0,
                    M = this.getRawIndex(m), f = 0; f < n; f++) {
                        var I = e[f]; ((w = this._getFast(i, M)) < t[I][0] || w > t[I][1]) && (S = !1)
                    }
                    S && (a[r++] = this.getRawIndex(m))
                }
                return r < o && (this._indices = a),
                this._count = r,
                this._extent = {},
                this.getRawIndex = this._indices ? tl: $s,
                this
            }
        }
    },
    iA.mapArray = function(t, e, i, n) {
        "function" == typeof t && (n = i, i = e, e = t, t = []),
        i = i || n || this;
        var o = [];
        return this.each(t,
        function() {
            o.push(e && e.apply(this, arguments))
        },
        i),
        o
    },
    iA.map = function(t, e, i, n) {
        i = i || n || this;
        var o = nl(this, t = f(il(t), this.getDimension, this));
        o._indices = this._indices,
        o.getRawIndex = o._indices ? tl: $s;
        for (var a = o._storage,
        r = [], s = this._chunkSize, l = t.length, u = this.count(), h = [], c = o._rawExtent, d = 0; d < u; d++) {
            for (var p = 0; p < l; p++) h[p] = this.get(t[p], d);
            h[l] = d;
            var g = e && e.apply(i, h);
            if (null != g) {
                "object" != typeof g && (r[0] = g, g = r);
                for (var m = this.getRawIndex(d), v = Math.floor(m / s), y = m % s, x = 0; x < g.length; x++) {
                    var _ = t[x],
                    w = g[x],
                    b = c[_],
                    S = a[_];
                    S && (S[v][y] = w),
                    w < b[0] && (b[0] = w),
                    w > b[1] && (b[1] = w)
                }
            }
        }
        return o
    },
    iA.downSample = function(t, e, i, n) {
        for (var o = nl(this, [t]), a = o._storage, r = [], s = Math.floor(1 / e), l = a[t], u = this.count(), h = this._chunkSize, c = o._rawExtent[t], d = new(Xs(this))(u), f = 0, p = 0; p < u; p += s) {
            s > u - p && (s = u - p, r.length = s);
            for (var g = 0; g < s; g++) {
                var m = this.getRawIndex(p + g),
                v = Math.floor(m / h),
                y = m % h;
                r[g] = l[v][y]
            }
            var x = i(r),
            _ = this.getRawIndex(Math.min(p + n(r, x) || 0, u - 1)),
            w = _ % h;
            l[Math.floor(_ / h)][w] = x,
            x < c[0] && (c[0] = x),
            x > c[1] && (c[1] = x),
            d[f++] = _
        }
        return o._count = f,
        o._indices = d,
        o.getRawIndex = tl,
        o
    },
    iA.getItemModel = function(t) {
        var e = this.hostModel;
        return new Lo(this.getRawDataItem(t), e, e && e.ecModel)
    },
    iA.diff = function(t) {
        var e = this;
        return new Hs(t ? t.getIndices() : [], this.getIndices(),
        function(e) {
            return el(t, e)
        },
        function(t) {
            return el(e, t)
        })
    },
    iA.getVisual = function(t) {
        var e = this._visual;
        return e && e[t]
    },
    iA.setVisual = function(t, e) {
        if (XT(t)) for (var i in t) t.hasOwnProperty(i) && this.setVisual(i, t[i]);
        else this._visual = this._visual || {},
        this._visual[t] = e
    },
    iA.setLayout = function(t, e) {
        if (XT(t)) for (var i in t) t.hasOwnProperty(i) && this.setLayout(i, t[i]);
        else this._layout[t] = e
    },
    iA.getLayout = function(t) {
        return this._layout[t]
    },
    iA.getItemLayout = function(t) {
        return this._itemLayouts[t]
    },
    iA.setItemLayout = function(t, e, i) {
        this._itemLayouts[t] = i ? a(this._itemLayouts[t] || {},
        e) : e
    },
    iA.clearItemLayouts = function() {
        this._itemLayouts.length = 0
    },
    iA.getItemVisual = function(t, e, i) {
        var n = this._itemVisuals[t],
        o = n && n[e];
        return null != o || i ? o: this.getVisual(e)
    },
    iA.setItemVisual = function(t, e, i) {
        var n = this._itemVisuals[t] || {},
        o = this.hasItemVisual;
        if (this._itemVisuals[t] = n, XT(e)) for (var a in e) e.hasOwnProperty(a) && (n[a] = e[a], o[a] = !0);
        else n[e] = i,
        o[e] = !0
    },
    iA.clearAllVisual = function() {
        this._visual = {},
        this._itemVisuals = [],
        this.hasItemVisual = {}
    };
    var nA = function(t) {
        t.seriesIndex = this.seriesIndex,
        t.dataIndex = this.dataIndex,
        t.dataType = this.dataType
    };
    iA.setItemGraphicEl = function(t, e) {
        var i = this.hostModel;
        e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = i && i.seriesIndex, "group" === e.type && e.traverse(nA, e)),
        this._graphicEls[t] = e
    },
    iA.getItemGraphicEl = function(t) {
        return this._graphicEls[t]
    },
    iA.eachItemGraphicEl = function(t, e) {
        d(this._graphicEls,
        function(i, n) {
            i && t && t.call(e, i, n)
        })
    },
    iA.cloneShallow = function(t) {
        if (!t) {
            var e = f(this.dimensions, this.getDimensionInfo, this);
            t = new eA(e, this.hostModel)
        }
        if (t._storage = this._storage, Ks(t, this), this._indices) {
            var i = this._indices.constructor;
            t._indices = new i(this._indices)
        } else t._indices = null;
        return t.getRawIndex = t._indices ? tl: $s,
        t
    },
    iA.wrapMethod = function(t, e) {
        var i = this[t];
        "function" == typeof i && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[t] = function() {
            var t = i.apply(this, arguments);
            return e.apply(this, [t].concat(C(arguments)))
        })
    },
    iA.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"],
    iA.CHANGABLE_METHODS = ["filterSelf", "selectRange"];
    var oA = function(t, e) {
        return e = e || {},
        rl(e.coordDimensions || [], t, {
            dimsDef: e.dimensionsDefine || t.dimensionsDefine,
            encodeDef: e.encodeDefine || t.encodeDefine,
            dimCount: e.dimensionsCount,
            generateCoord: e.generateCoord,
            generateCoordCount: e.generateCoordCount
        })
    };
    gl.prototype.parse = function(t) {
        return t
    },
    gl.prototype.getSetting = function(t) {
        return this._setting[t]
    },
    gl.prototype.contain = function(t) {
        var e = this._extent;
        return t >= e[0] && t <= e[1]
    },
    gl.prototype.normalize = function(t) {
        var e = this._extent;
        return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
    },
    gl.prototype.scale = function(t) {
        var e = this._extent;
        return t * (e[1] - e[0]) + e[0]
    },
    gl.prototype.unionExtent = function(t) {
        var e = this._extent;
        t[0] < e[0] && (e[0] = t[0]),
        t[1] > e[1] && (e[1] = t[1])
    },
    gl.prototype.unionExtentFromData = function(t, e) {
        this.unionExtent(t.getApproximateExtent(e))
    },
    gl.prototype.getExtent = function() {
        return this._extent.slice()
    },
    gl.prototype.setExtent = function(t, e) {
        var i = this._extent;
        isNaN(t) || (i[0] = t),
        isNaN(e) || (i[1] = e)
    },
    gl.prototype.isBlank = function() {
        return this._isBlank
    },
    gl.prototype.setBlank = function(t) {
        this._isBlank = t
    },
    gl.prototype.getLabel = null,
    Yi(gl),
    Ki(gl, {
        registerWhenExtend: !0
    }),
    ml.createByAxisModel = function(t) {
        var e = t.option,
        i = e.data,
        n = i && f(i, yl);
        return new ml({
            categories: n,
            needCollect: !n,
            deduplication: !1 !== e.dedplication
        })
    };
    var aA = ml.prototype;
    aA.getOrdinal = function(t) {
        return vl(this).get(t)
    },
    aA.parseAndCollect = function(t) {
        var e, i = this._needCollect;
        if ("string" != typeof t && !i) return t;
        if (i && !this._deduplication) return e = this.categories.length,
        this.categories[e] = t,
        e;
        var n = vl(this);
        return null == (e = n.get(t)) && (i ? (e = this.categories.length, this.categories[e] = t, n.set(t, e)) : e = NaN),
        e
    };
    var rA = gl.prototype,
    sA = gl.extend({
        type: "ordinal",
        init: function(t, e) {
            t && !y(t) || (t = new ml({
                categories: t
            })),
            this._ordinalMeta = t,
            this._extent = e || [0, t.categories.length - 1]
        },
        parse: function(t) {
            return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t)
        },
        contain: function(t) {
            return t = this.parse(t),
            rA.contain.call(this, t) && null != this._ordinalMeta.categories[t]
        },
        normalize: function(t) {
            return rA.normalize.call(this, this.parse(t))
        },
        scale: function(t) {
            return Math.round(rA.scale.call(this, t))
        },
        getTicks: function() {
            for (var t = [], e = this._extent, i = e[0]; i <= e[1];) t.push(i),
            i++;
            return t
        },
        getLabel: function(t) {
            if (!this.isBlank()) return this._ordinalMeta.categories[t]
        },
        count: function() {
            return this._extent[1] - this._extent[0] + 1
        },
        unionExtentFromData: function(t, e) {
            this.unionExtent(t.getApproximateExtent(e))
        },
        getOrdinalMeta: function() {
            return this._ordinalMeta
        },
        niceTicks: B,
        niceExtent: B
    });
    sA.create = function() {
        return new sA
    };
    var lA = Ro,
    uA = Ro,
    hA = gl.extend({
        type: "interval",
        _interval: 0,
        _intervalPrecision: 2,
        setExtent: function(t, e) {
            var i = this._extent;
            isNaN(t) || (i[0] = parseFloat(t)),
            isNaN(e) || (i[1] = parseFloat(e))
        },
        unionExtent: function(t) {
            var e = this._extent;
            t[0] < e[0] && (e[0] = t[0]),
            t[1] > e[1] && (e[1] = t[1]),
            hA.prototype.setExtent.call(this, e[0], e[1])
        },
        getInterval: function() {
            return this._interval
        },
        setInterval: function(t) {
            this._interval = t,
            this._niceExtent = this._extent.slice(),
            this._intervalPrecision = _l(t)
        },
        getTicks: function() {
            return Sl(this._interval, this._extent, this._niceExtent, this._intervalPrecision)
        },
        getLabel: function(t, e) {
            if (null == t) return "";
            var i = e && e.precision;
            return null == i ? i = Fo(t) || 0 : "auto" === i && (i = this._intervalPrecision),
            t = uA(t, i, !0),
            Qo(t)
        },
        niceTicks: function(t, e, i) {
            t = t || 5;
            var n = this._extent,
            o = n[1] - n[0];
            if (isFinite(o)) {
                o < 0 && (o = -o, n.reverse());
                var a = xl(n, t, e, i);
                this._intervalPrecision = a.intervalPrecision,
                this._interval = a.interval,
                this._niceExtent = a.niceTickExtent
            }
        },
        niceExtent: function(t) {
            var e = this._extent;
            if (e[0] === e[1]) if (0 !== e[0]) {
                var i = e[0];
                t.fixMax ? e[0] -= i / 2 : (e[1] += i / 2, e[0] -= i / 2)
            } else e[1] = 1;
            var n = e[1] - e[0];
            isFinite(n) || (e[0] = 0, e[1] = 1),
            this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
            var o = this._interval;
            t.fixMin || (e[0] = uA(Math.floor(e[0] / o) * o)),
            t.fixMax || (e[1] = uA(Math.ceil(e[1] / o) * o))
        }
    });
    hA.create = function() {
        return new hA
    };
    var cA = "__ec_stack_",
    dA = "undefined" != typeof Float32Array ? Float32Array: Array,
    fA = {
        seriesType: "bar",
        plan: RI(),
        reset: function(t) {
            if (Pl(t) && Nl(t)) {
                var e = t.getData(),
                i = t.coordinateSystem,
                n = i.getBaseAxis(),
                o = i.getOtherAxis(n),
                a = e.mapDimension(o.dim),
                r = e.mapDimension(n.dim),
                s = o.isHorizontal(),
                l = s ? 0 : 1,
                u = Ll(Dl([t]), n, t).width;
                return u > .5 || (u = .5),
                {
                    progress: function(t, e) {
                        for (var n, h = new dA(2 * t.count), c = [], d = [], f = 0; null != (n = t.next());) d[l] = e.get(a, n),
                        d[1 - l] = e.get(r, n),
                        c = i.dataToPoint(d, null, c),
                        h[f++] = c[0],
                        h[f++] = c[1];
                        e.setLayout({
                            largePoints: h,
                            barWidth: u,
                            valueAxisStart: Ol(0, o),
                            valueAxisHorizontal: s
                        })
                    }
                }
            }
        }
    },
    pA = hA.prototype,
    gA = Math.ceil,
    mA = Math.floor,
    vA = function(t, e, i, n) {
        for (; i < n;) {
            var o = i + n >>> 1;
            t[o][1] < e ? i = o + 1 : n = o
        }
        return i
    },
    yA = hA.extend({
        type: "time",
        getLabel: function(t) {
            var e = this._stepLvl,
            i = new Date(t);
            return oa(e[0], i, this.getSetting("useUTC"))
        },
        niceExtent: function(t) {
            var e = this._extent;
            if (e[0] === e[1] && (e[0] -= 864e5, e[1] += 864e5), e[1] === -1 / 0 && e[0] === 1 / 0) {
                var i = new Date;
                e[1] = +new Date(i.getFullYear(), i.getMonth(), i.getDate()),
                e[0] = e[1] - 864e5
            }
            this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
            var n = this._interval;
            t.fixMin || (e[0] = Ro(mA(e[0] / n) * n)),
            t.fixMax || (e[1] = Ro(gA(e[1] / n) * n))
        },
        niceTicks: function(t, e, i) {
            t = t || 10;
            var n = this._extent,
            o = n[1] - n[0],
            a = o / t;
            null != e && a < e && (a = e),
            null != i && a > i && (a = i);
            var r = xA.length,
            s = vA(xA, a, 0, r),
            l = xA[Math.min(s, r - 1)],
            u = l[1];
            "year" === l[0] && (u *= Xo(o / u / t, !0));
            var h = this.getSetting("useUTC") ? 0 : 60 * new Date( + n[0] || +n[1]).getTimezoneOffset() * 1e3,
            c = [Math.round(gA((n[0] - h) / u) * u + h), Math.round(mA((n[1] - h) / u) * u + h)];
            bl(c, n),
            this._stepLvl = l,
            this._interval = u,
            this._niceExtent = c
        },
        parse: function(t) {
            return + jo(t)
        }
    });
    d(["contain", "normalize"],
    function(t) {
        yA.prototype[t] = function(e) {
            return pA[t].call(this, this.parse(e))
        }
    });
    var xA = [["hh:mm:ss", 1e3], ["hh:mm:ss", 5e3], ["hh:mm:ss", 1e4], ["hh:mm:ss", 15e3], ["hh:mm:ss", 3e4], ["hh:mm\nMM-dd", 6e4], ["hh:mm\nMM-dd", 3e5], ["hh:mm\nMM-dd", 6e5], ["hh:mm\nMM-dd", 9e5], ["hh:mm\nMM-dd", 18e5], ["hh:mm\nMM-dd", 36e5], ["hh:mm\nMM-dd", 72e5], ["hh:mm\nMM-dd", 216e5], ["hh:mm\nMM-dd", 432e5], ["MM-dd\nyyyy", 864e5], ["MM-dd\nyyyy", 1728e5], ["MM-dd\nyyyy", 2592e5], ["MM-dd\nyyyy", 3456e5], ["MM-dd\nyyyy", 432e6], ["MM-dd\nyyyy", 5184e5], ["week", 6048e5], ["MM-dd\nyyyy", 864e6], ["week", 12096e5], ["week", 18144e5], ["month", 26784e5], ["week", 36288e5], ["month", 53568e5], ["week", 6048e6], ["quarter", 8208e6], ["month", 107136e5], ["month", 13392e6], ["half-year", 16416e6], ["month", 214272e5], ["month", 26784e6], ["year", 32832e6]];
    yA.create = function(t) {
        return new yA({
            useUTC: t.ecModel.get("useUTC")
        })
    };
    var _A = gl.prototype,
    wA = hA.prototype,
    bA = Fo,
    SA = Ro,
    MA = Math.floor,
    IA = Math.ceil,
    TA = Math.pow,
    AA = Math.log,
    DA = gl.extend({
        type: "log",
        base: 10,
        $constructor: function() {
            gl.apply(this, arguments),
            this._originalScale = new hA
        },
        getTicks: function() {
            var t = this._originalScale,
            e = this._extent,
            i = t.getExtent();
            return f(wA.getTicks.call(this),
            function(n) {
                var o = Ro(TA(this.base, n));
                return o = n === e[0] && t.__fixMin ? zl(o, i[0]) : o,
                o = n === e[1] && t.__fixMax ? zl(o, i[1]) : o
            },
            this)
        },
        getLabel: wA.getLabel,
        scale: function(t) {
            return t = _A.scale.call(this, t),
            TA(this.base, t)
        },
        setExtent: function(t, e) {
            var i = this.base;
            t = AA(t) / AA(i),
            e = AA(e) / AA(i),
            wA.setExtent.call(this, t, e)
        },
        getExtent: function() {
            var t = this.base,
            e = _A.getExtent.call(this);
            e[0] = TA(t, e[0]),
            e[1] = TA(t, e[1]);
            var i = this._originalScale,
            n = i.getExtent();
            return i.__fixMin && (e[0] = zl(e[0], n[0])),
            i.__fixMax && (e[1] = zl(e[1], n[1])),
            e
        },
        unionExtent: function(t) {
            this._originalScale.unionExtent(t);
            var e = this.base;
            t[0] = AA(t[0]) / AA(e),
            t[1] = AA(t[1]) / AA(e),
            _A.unionExtent.call(this, t)
        },
        unionExtentFromData: function(t, e) {
            this.unionExtent(t.getApproximateExtent(e))
        },
        niceTicks: function(t) {
            t = t || 10;
            var e = this._extent,
            i = e[1] - e[0];
            if (! (i === 1 / 0 || i <= 0)) {
                var n = Yo(i);
                for (t / i * n <= .5 && (n *= 10); ! isNaN(n) && Math.abs(n) < 1 && Math.abs(n) > 0;) n *= 10;
                var o = [Ro(IA(e[0] / n) * n), Ro(MA(e[1] / n) * n)];
                this._interval = n,
                this._niceExtent = o
            }
        },
        niceExtent: function(t) {
            wA.niceExtent.call(this, t);
            var e = this._originalScale;
            e.__fixMin = t.fixMin,
            e.__fixMax = t.fixMax
        }
    });
    d(["contain", "normalize"],
    function(t) {
        DA.prototype[t] = function(e) {
            return e = AA(e) / AA(this.base),
            _A[t].call(this, e)
        }
    }),
    DA.create = function() {
        return new DA
    };
    var CA = {
        getMin: function(t) {
            var e = this.option,
            i = t || null == e.rangeStart ? e.min: e.rangeStart;
            return this.axis && null != i && "dataMin" !== i && "function" != typeof i && !I(i) && (i = this.axis.scale.parse(i)),
            i
        },
        getMax: function(t) {
            var e = this.option,
            i = t || null == e.rangeEnd ? e.max: e.rangeEnd;
            return this.axis && null != i && "dataMax" !== i && "function" != typeof i && !I(i) && (i = this.axis.scale.parse(i)),
            i
        },
        getNeedCrossZero: function() {
            var t = this.option;
            return null == t.rangeStart && null == t.rangeEnd && !t.scale
        },
        getCoordSysModel: B,
        setRange: function(t, e) {
            this.option.rangeStart = t,
            this.option.rangeEnd = e
        },
        resetRange: function() {
            this.option.rangeStart = this.option.rangeEnd = null
        }
    },
    LA = Gn({
        type: "triangle",
        shape: {
            cx: 0,
            cy: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var i = e.cx,
            n = e.cy,
            o = e.width / 2,
            a = e.height / 2;
            t.moveTo(i, n - a),
            t.lineTo(i + o, n + a),
            t.lineTo(i - o, n + a),
            t.closePath()
        }
    }),
    kA = Gn({
        type: "diamond",
        shape: {
            cx: 0,
            cy: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var i = e.cx,
            n = e.cy,
            o = e.width / 2,
            a = e.height / 2;
            t.moveTo(i, n - a),
            t.lineTo(i + o, n),
            t.lineTo(i, n + a),
            t.lineTo(i - o, n),
            t.closePath()
        }
    }),
    PA = Gn({
        type: "pin",
        shape: {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var i = e.x,
            n = e.y,
            o = e.width / 5 * 3,
            a = Math.max(o, e.height),
            r = o / 2,
            s = r * r / (a - r),
            l = n - a + r + s,
            u = Math.asin(s / r),
            h = Math.cos(u) * r,
            c = Math.sin(u),
            d = Math.cos(u),
            f = .6 * r,
            p = .7 * r;
            t.moveTo(i - h, l + s),
            t.arc(i, l, r, Math.PI - u, 2 * Math.PI + u),
            t.bezierCurveTo(i + h - c * f, l + s + d * f, i, n - p, i, n),
            t.bezierCurveTo(i, n - p, i - h + c * f, l + s + d * f, i - h, l + s),
            t.closePath()
        }
    }),
    NA = Gn({
        type: "arrow",
        shape: {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var i = e.height,
            n = e.width,
            o = e.x,
            a = e.y,
            r = n / 3 * 2;
            t.moveTo(o, a),
            t.lineTo(o + r, a + i),
            t.lineTo(o, a + i / 4 * 3),
            t.lineTo(o - r, a + i),
            t.lineTo(o, a),
            t.closePath()
        }
    }),
    OA = {
        line: function(t, e, i, n, o) {
            o.x1 = t,
            o.y1 = e + n / 2,
            o.x2 = t + i,
            o.y2 = e + n / 2
        },
        rect: function(t, e, i, n, o) {
            o.x = t,
            o.y = e,
            o.width = i,
            o.height = n
        },
        roundRect: function(t, e, i, n, o) {
            o.x = t,
            o.y = e,
            o.width = i,
            o.height = n,
            o.r = Math.min(i, n) / 4
        },
        square: function(t, e, i, n, o) {
            var a = Math.min(i, n);
            o.x = t,
            o.y = e,
            o.width = a,
            o.height = a
        },
        circle: function(t, e, i, n, o) {
            o.cx = t + i / 2,
            o.cy = e + n / 2,
            o.r = Math.min(i, n) / 2
        },
        diamond: function(t, e, i, n, o) {
            o.cx = t + i / 2,
            o.cy = e + n / 2,
            o.width = i,
            o.height = n
        },
        pin: function(t, e, i, n, o) {
            o.x = t + i / 2,
            o.y = e + n / 2,
            o.width = i,
            o.height = n
        },
        arrow: function(t, e, i, n, o) {
            o.x = t + i / 2,
            o.y = e + n / 2,
            o.width = i,
            o.height = n
        },
        triangle: function(t, e, i, n, o) {
            o.cx = t + i / 2,
            o.cy = e + n / 2,
            o.width = i,
            o.height = n
        }
    },
    zA = {};
    d({
        line: rM,
        rect: aM,
        roundRect: aM,
        square: aM,
        circle: KS,
        diamond: kA,
        pin: PA,
        arrow: NA,
        triangle: LA
    },
    function(t, e) {
        zA[e] = new t
    });
    var EA = Gn({
        type: "symbol",
        shape: {
            symbolType: "",
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        beforeBrush: function() {
            var t = this.style;
            "pin" === this.shape.symbolType && "inside" === t.textPosition && (t.textPosition = ["50%", "40%"], t.textAlign = "center", t.textVerticalAlign = "middle")
        },
        buildPath: function(t, e, i) {
            var n = e.symbolType,
            o = zA[n];
            "none" !== e.symbolType && (o || (o = zA[n = "rect"]), OA[n](e.x, e.y, e.width, e.height, o.shape), o.buildPath(t, o.shape, i))
        }
    }),
    RA = {
        isDimensionStacked: hl,
        enableDataStack: ul,
        getStackedDimension: cl
    },
    BA = (Object.freeze || Object)({
        createList: function(t) {
            return dl(t.getSource(), t)
        },
        getLayoutRect: la,
        dataStack: RA,
        createScale: function(t, e) {
            var i = e;
            Lo.isInstance(e) || h(i = new Lo(e), CA);
            var n = Vl(i);
            return n.setExtent(t[0], t[1]),
            Bl(n, i),
            n
        },
        mixinAxisModelCommonMethods: function(t) {
            h(t, CA)
        },
        completeDimensions: rl,
        createDimensions: oA,
        createSymbol: Yl
    }),
    VA = 1e-8;
    ql.prototype = {
        constructor: ql,
        properties: null,
        getBoundingRect: function() {
            var t = this._rect;
            if (t) return t;
            for (var e = Number.MAX_VALUE,
            i = [e, e], n = [ - e, -e], o = [], a = [], r = this.geometries, s = 0; s < r.length; s++)"polygon" === r[s].type && (dn(r[s].exterior, o, a), tt(i, i, o), et(n, n, a));
            return 0 === s && (i[0] = i[1] = n[0] = n[1] = 0),
            this._rect = new ue(i[0], i[1], n[0] - i[0], n[1] - i[1])
        },
        contain: function(t) {
            var e = this.getBoundingRect(),
            i = this.geometries;
            if (!e.contain(t[0], t[1])) return ! 1;
            t: for (var n = 0,
            o = i.length; n < o; n++) if ("polygon" === i[n].type) {
                var a = i[n].exterior,
                r = i[n].interiors;
                if (Xl(a, t[0], t[1])) {
                    for (var s = 0; s < (r ? r.length: 0); s++) if (Xl(r[s])) continue t;
                    return ! 0
                }
            }
            return ! 1
        },
        transformTo: function(t, e, i, n) {
            var o = this.getBoundingRect(),
            a = o.width / o.height;
            i ? n || (n = i / a) : i = a * n;
            for (var r = new ue(t, e, i, n), s = o.calculateTransform(r), l = this.geometries, u = 0; u < l.length; u++) if ("polygon" === l[u].type) {
                for (var h = l[u].exterior, c = l[u].interiors, d = 0; d < h.length; d++) $(h[d], h[d], s);
                for (var f = 0; f < (c ? c.length: 0); f++) for (d = 0; d < c[f].length; d++) $(c[f][d], c[f][d], s)
            } (o = this._rect).copy(r),
            this.center = [o.x + o.width / 2, o.y + o.height / 2]
        },
        cloneShallow: function(t) {
            null == t && (t = this.name);
            var e = new ql(t, this.geometries, this.center);
            return e._rect = this._rect,
            e.transformTo = null,
            e
        }
    };
    var FA = function(t) {
        return Kl(t),
        f(g(t.features,
        function(t) {
            return t.geometry && t.properties && t.geometry.coordinates.length > 0
        }),
        function(t) {
            var e = t.properties,
            i = t.geometry,
            n = i.coordinates,
            o = [];
            "Polygon" === i.type && o.push({
                type: "polygon",
                exterior: n[0],
                interiors: n.slice(1)
            }),
            "MultiPolygon" === i.type && d(n,
            function(t) {
                t[0] && o.push({
                    type: "polygon",
                    exterior: t[0],
                    interiors: t.slice(1)
                })
            });
            var a = new ql(e.name, o, e.cp);
            return a.properties = e,
            a
        })
    },
    GA = Bi(),
    WA = [0, 1],
    HA = function(t, e, i) {
        this.dim = t,
        this.scale = e,
        this._extent = i || [0, 0],
        this.inverse = !1,
        this.onBand = !1
    };
    HA.prototype = {
        constructor: HA,
        contain: function(t) {
            var e = this._extent,
            i = Math.min(e[0], e[1]),
            n = Math.max(e[0], e[1]);
            return t >= i && t <= n
        },
        containData: function(t) {
            return this.contain(this.dataToCoord(t))
        },
        getExtent: function() {
            return this._extent.slice()
        },
        getPixelPrecision: function(t) {
            return Go(t || this.scale.getExtent(), this._extent)
        },
        setExtent: function(t, e) {
            var i = this._extent;
            i[0] = t,
            i[1] = e
        },
        dataToCoord: function(t, e) {
            var i = this._extent,
            n = this.scale;
            return t = n.normalize(t),
            this.onBand && "ordinal" === n.type && fu(i = i.slice(), n.count()),
            zo(t, WA, i, e)
        },
        coordToData: function(t, e) {
            var i = this._extent,
            n = this.scale;
            this.onBand && "ordinal" === n.type && fu(i = i.slice(), n.count());
            var o = zo(t, i, WA, e);
            return this.scale.scale(o)
        },
        pointToData: function(t, e) {},
        getTicksCoords: function(t) {
            var e = (t = t || {}).tickModel || this.getTickModel(),
            i = $l(this, e),
            n = f(i.ticks,
            function(t) {
                return {
                    coord: this.dataToCoord(t),
                    tickValue: t
                }
            },
            this),
            o = e.get("alignWithLabel");
            return pu(this, n, i.tickCategoryInterval, o, t.clamp),
            n
        },
        getViewLabels: function() {
            return Jl(this).labels
        },
        getLabelModel: function() {
            return this.model.getModel("axisLabel")
        },
        getTickModel: function() {
            return this.model.getModel("axisTick")
        },
        getBandWidth: function() {
            var t = this._extent,
            e = this.scale.getExtent(),
            i = e[1] - e[0] + (this.onBand ? 1 : 0);
            0 === i && (i = 1);
            var n = Math.abs(t[1] - t[0]);
            return Math.abs(n) / i
        },
        isHorizontal: null,
        getRotate: null,
        calculateCategoryInterval: function() {
            return lu(this)
        }
    };
    var ZA = FA,
    jA = {};
    d(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString", "isObject", "isFunction", "extend", "defaults", "clone", "merge"],
    function(t) {
        jA[t] = Q_[t]
    });
    var YA = {};
    d(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle", "setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform", "clipPointsByRect", "clipRectByRect", "Group", "Image", "Text", "Circle", "Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable", "CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"],
    function(t) {
        YA[t] = bM[t]
    }),
    OI.extend({
        type: "series.line",
        dependencies: ["grid", "polar"],
        getInitialData: function(t, e) {
            return dl(this.getSource(), this)
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: !0,
            hoverAnimation: !0,
            clipOverflow: !0,
            label: {
                position: "top"
            },
            lineStyle: {
                width: 2,
                type: "solid"
            },
            step: !1,
            smooth: !1,
            smoothMonotone: null,
            symbol: "emptyCircle",
            symbolSize: 4,
            symbolRotate: null,
            showSymbol: !0,
            showAllSymbol: "auto",
            connectNulls: !1,
            sampling: "none",
            animationEasing: "linear",
            progressive: 0,
            hoverLayerThreshold: 1 / 0
        }
    });
    var UA = mu.prototype,
    XA = mu.getSymbolSize = function(t, e) {
        var i = t.getItemVisual(e, "symbolSize");
        return i instanceof Array ? i.slice() : [ + i, +i]
    };
    UA._createSymbol = function(t, e, i, n, o) {
        this.removeAll();
        var a = Yl(t, -1, -1, 2, 2, e.getItemVisual(i, "color"), o);
        a.attr({
            z2: 100,
            culling: !0,
            scale: vu(n)
        }),
        a.drift = yu,
        this._symbolType = t,
        this.add(a)
    },
    UA.stopSymbolAnimation = function(t) {
        this.childAt(0).stopAnimation(t)
    },
    UA.getSymbolPath = function() {
        return this.childAt(0)
    },
    UA.getScale = function() {
        return this.childAt(0).scale
    },
    UA.highlight = function() {
        this.childAt(0).trigger("emphasis")
    },
    UA.downplay = function() {
        this.childAt(0).trigger("normal")
    },
    UA.setZ = function(t, e) {
        var i = this.childAt(0);
        i.zlevel = t,
        i.z = e
    },
    UA.setDraggable = function(t) {
        var e = this.childAt(0);
        e.draggable = t,
        e.cursor = t ? "move": "pointer"
    },
    UA.updateData = function(t, e, i) {
        this.silent = !1;
        var n = t.getItemVisual(e, "symbol") || "circle",
        o = t.hostModel,
        a = XA(t, e),
        r = n !== this._symbolType;
        if (r) {
            var s = t.getItemVisual(e, "symbolKeepAspect");
            this._createSymbol(n, t, e, a, s)
        } else(l = this.childAt(0)).silent = !1,
        bo(l, {
            scale: vu(a)
        },
        o, e);
        if (this._updateCommon(t, e, a, i), r) {
            var l = this.childAt(0),
            u = i && i.fadeIn,
            h = {
                scale: l.scale.slice()
            };
            u && (h.style = {
                opacity: l.style.opacity
            }),
            l.scale = [0, 0],
            u && (l.style.opacity = 0),
            So(l, h, o, e)
        }
        this._seriesModel = o
    };
    var qA = ["itemStyle"],
    KA = ["emphasis", "itemStyle"],
    QA = ["label"],
    JA = ["emphasis", "label"];
    UA._updateCommon = function(t, e, i, n) {
        var o = this.childAt(0),
        r = t.hostModel,
        s = t.getItemVisual(e, "color");
        "image" !== o.type && o.useStyle({
            strokeNoScale: !0
        });
        var l = n && n.itemStyle,
        u = n && n.hoverItemStyle,
        h = n && n.symbolRotate,
        c = n && n.symbolOffset,
        d = n && n.labelModel,
        f = n && n.hoverLabelModel,
        p = n && n.hoverAnimation,
        g = n && n.cursorStyle;
        if (!n || t.hasItemOption) {
            var m = n && n.itemModel ? n.itemModel: t.getItemModel(e);
            l = m.getModel(qA).getItemStyle(["color"]),
            u = m.getModel(KA).getItemStyle(),
            h = m.getShallow("symbolRotate"),
            c = m.getShallow("symbolOffset"),
            d = m.getModel(QA),
            f = m.getModel(JA),
            p = m.getShallow("hoverAnimation"),
            g = m.getShallow("cursor")
        } else u = a({},
        u);
        var v = o.style;
        o.attr("rotation", (h || 0) * Math.PI / 180 || 0),
        c && o.attr("position", [Eo(c[0], i[0]), Eo(c[1], i[1])]),
        g && o.attr("cursor", g),
        o.setColor(s, n && n.symbolInnerColor),
        o.setStyle(l);
        var y = t.getItemVisual(e, "opacity");
        null != y && (v.opacity = y);
        var x = t.getItemVisual(e, "liftZ"),
        _ = o.__z2Origin;
        null != x ? null == _ && (o.__z2Origin = o.z2, o.z2 += x) : null != _ && (o.z2 = _, o.__z2Origin = null);
        var w = n && n.useNameLabel;
        co(v, u, d, f, {
            labelFetcher: r,
            labelDataIndex: e,
            defaultText: function(e, i) {
                return w ? t.getName(e) : gu(t, e)
            },
            isRectText: !0,
            autoColor: s
        }),
        o.off("mouseover").off("mouseout").off("emphasis").off("normal"),
        o.hoverStyle = u,
        uo(o),
        o.__symbolOriginalScale = vu(i),
        p && r.isAnimationEnabled() && o.on("mouseover", xu).on("mouseout", _u).on("emphasis", wu).on("normal", bu)
    },
    UA.fadeOut = function(t, e) {
        var i = this.childAt(0);
        this.silent = i.silent = !0,
        !(e && e.keepLabel) && (i.style.text = null),
        bo(i, {
            style: {
                opacity: 0
            },
            scale: [0, 0]
        },
        this._seriesModel, this.dataIndex, t)
    },
    u(mu, Zw);
    var $A = Su.prototype;
    $A.updateData = function(t, e) {
        e = Iu(e);
        var i = this.group,
        n = t.hostModel,
        o = this._data,
        a = this._symbolCtor,
        r = Tu(t);
        o || i.removeAll(),
        t.diff(o).add(function(n) {
            var o = t.getItemLayout(n);
            if (Mu(t, o, n, e)) {
                var s = new a(t, n, r);
                s.attr("position", o),
                t.setItemGraphicEl(n, s),
                i.add(s)
            }
        }).update(function(s, l) {
            var u = o.getItemGraphicEl(l),
            h = t.getItemLayout(s);
            Mu(t, h, s, e) ? (u ? (u.updateData(t, s, r), bo(u, {
                position: h
            },
            n)) : (u = new a(t, s)).attr("position", h), i.add(u), t.setItemGraphicEl(s, u)) : i.remove(u)
        }).remove(function(t) {
            var e = o.getItemGraphicEl(t);
            e && e.fadeOut(function() {
                i.remove(e)
            })
        }).execute(),
        this._data = t
    },
    $A.isPersistent = function() {
        return ! 0
    },
    $A.updateLayout = function() {
        var t = this._data;
        t && t.eachItemGraphicEl(function(e, i) {
            var n = t.getItemLayout(i);
            e.attr("position", n)
        })
    },
    $A.incrementalPrepareUpdate = function(t) {
        this._seriesScope = Tu(t),
        this._data = null,
        this.group.removeAll()
    },
    $A.incrementalUpdate = function(t, e, i) {
        i = Iu(i);
        for (var n = t.start; n < t.end; n++) {
            var o = e.getItemLayout(n);
            if (Mu(e, o, n, i)) {
                var a = new this._symbolCtor(e, n, this._seriesScope);
                a.traverse(function(t) {
                    t.isGroup || (t.incremental = t.useHoverLayer = !0)
                }),
                a.attr("position", o),
                this.group.add(a),
                e.setItemGraphicEl(n, a)
            }
        }
    },
    $A.remove = function(t) {
        var e = this.group,
        i = this._data;
        i && t ? i.eachItemGraphicEl(function(t) {
            t.fadeOut(function() {
                e.remove(t)
            })
        }) : e.removeAll()
    };
    var tD = function(t, e, i, n, o, a, r, s) {
        for (var l = Lu(t, e), u = [], h = [], c = [], d = [], f = [], p = [], g = [], m = Au(o, e, r), v = Au(a, t, s), y = 0; y < l.length; y++) {
            var x = l[y],
            _ = !0;
            switch (x.cmd) {
            case "=":
                var w = t.getItemLayout(x.idx),
                b = e.getItemLayout(x.idx1); (isNaN(w[0]) || isNaN(w[1])) && (w = b.slice()),
                u.push(w),
                h.push(b),
                c.push(i[x.idx]),
                d.push(n[x.idx1]),
                g.push(e.getRawIndex(x.idx1));
                break;
            case "+":
                S = x.idx,
                u.push(o.dataToPoint([e.get(m.dataDimsForPoint[0], S), e.get(m.dataDimsForPoint[1], S)])),
                h.push(e.getItemLayout(S).slice()),
                c.push(Cu(m, o, e, S)),
                d.push(n[S]),
                g.push(e.getRawIndex(S));
                break;
            case "-":
                var S = x.idx,
                M = t.getRawIndex(S);
                M !== S ? (u.push(t.getItemLayout(S)), h.push(a.dataToPoint([t.get(v.dataDimsForPoint[0], S), t.get(v.dataDimsForPoint[1], S)])), c.push(i[S]), d.push(Cu(v, a, t, S)), g.push(M)) : _ = !1
            }
            _ && (f.push(x), p.push(p.length))
        }
        p.sort(function(t, e) {
            return g[t] - g[e]
        });
        for (var I = [], T = [], A = [], D = [], C = [], y = 0; y < p.length; y++) S = p[y],
        I[y] = u[S],
        T[y] = h[S],
        A[y] = c[S],
        D[y] = d[S],
        C[y] = f[S];
        return {
            current: I,
            next: T,
            stackedOnCurrent: A,
            stackedOnNext: D,
            status: C
        }
    },
    eD = tt,
    iD = et,
    nD = Z,
    oD = F,
    aD = [],
    rD = [],
    sD = [],
    lD = kn.extend({
        type: "ec-polyline",
        shape: {
            points: [],
            smooth: 0,
            smoothConstraint: !0,
            smoothMonotone: null,
            connectNulls: !1
        },
        style: {
            fill: null,
            stroke: "#000"
        },
        brush: JS(kn.prototype.brush),
        buildPath: function(t, e) {
            var i = e.points,
            n = 0,
            o = i.length,
            a = zu(i, e.smoothConstraint);
            if (e.connectNulls) {
                for (; o > 0 && ku(i[o - 1]); o--);
                for (; n < o && ku(i[n]); n++);
            }
            for (; n < o;) n += Pu(t, i, n, o, o, 1, a.min, a.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1
        }
    }),
    uD = kn.extend({
        type: "ec-polygon",
        shape: {
            points: [],
            stackedOnPoints: [],
            smooth: 0,
            stackedOnSmooth: 0,
            smoothConstraint: !0,
            smoothMonotone: null,
            connectNulls: !1
        },
        brush: JS(kn.prototype.brush),
        buildPath: function(t, e) {
            var i = e.points,
            n = e.stackedOnPoints,
            o = 0,
            a = i.length,
            r = e.smoothMonotone,
            s = zu(i, e.smoothConstraint),
            l = zu(n, e.smoothConstraint);
            if (e.connectNulls) {
                for (; a > 0 && ku(i[a - 1]); a--);
                for (; o < a && ku(i[o]); o++);
            }
            for (; o < a;) {
                var u = Pu(t, i, o, a, a, 1, s.min, s.max, e.smooth, r, e.connectNulls);
                Pu(t, n, o + u - 1, u, a, -1, l.min, l.max, e.stackedOnSmooth, r, e.connectNulls),
                o += u + 1,
                t.closePath()
            }
        }
    });
    Mr.extend({
        type: "line",
        init: function() {
            var t = new Zw,
            e = new Su;
            this.group.add(e.group),
            this._symbolDraw = e,
            this._lineGroup = t
        },
        render: function(t, e, i) {
            var n = t.coordinateSystem,
            o = this.group,
            a = t.getData(),
            s = t.getModel("lineStyle"),
            l = t.getModel("areaStyle"),
            u = a.mapArray(a.getItemLayout),
            h = "polar" === n.type,
            c = this._coordSys,
            d = this._symbolDraw,
            f = this._polyline,
            p = this._polygon,
            g = this._lineGroup,
            m = t.get("animation"),
            v = !l.isEmpty(),
            y = l.get("origin"),
            x = Vu(n, a, Au(n, a, y)),
            _ = t.get("showSymbol"),
            w = _ && !h && ju(t, a, n),
            b = this._data;
            b && b.eachItemGraphicEl(function(t, e) {
                t.__temp && (o.remove(t), b.setItemGraphicEl(e, null))
            }),
            _ || d.remove(),
            o.add(g);
            var S = !h && t.get("step");
            f && c.type === n.type && S === this._step ? (v && !p ? p = this._newPolygon(u, x, n, m) : p && !v && (g.remove(p), p = this._polygon = null), g.setClipPath(Wu(n, !1, !1, t)), _ && d.updateData(a, {
                isIgnore: w,
                clipShape: Wu(n, !1, !0, t)
            }), a.eachItemGraphicEl(function(t) {
                t.stopAnimation(!0)
            }), Eu(this._stackedOnPoints, x) && Eu(this._points, u) || (m ? this._updateAnimation(a, x, n, i, S, y) : (S && (u = Hu(u, n, S), x = Hu(x, n, S)), f.setShape({
                points: u
            }), p && p.setShape({
                points: u,
                stackedOnPoints: x
            })))) : (_ && d.updateData(a, {
                isIgnore: w,
                clipShape: Wu(n, !1, !0, t)
            }), S && (u = Hu(u, n, S), x = Hu(x, n, S)), f = this._newPolyline(u, n, m), v && (p = this._newPolygon(u, x, n, m)), g.setClipPath(Wu(n, !0, !1, t)));
            var M = Zu(a, n) || a.getVisual("color");
            f.useStyle(r(s.getLineStyle(), {
                fill: "none",
                stroke: M,
                lineJoin: "bevel"
            }));
            var I = t.get("smooth");
            if (I = Ru(t.get("smooth")), f.setShape({
                smooth: I,
                smoothMonotone: t.get("smoothMonotone"),
                connectNulls: t.get("connectNulls")
            }), p) {
                var T = a.getCalculationInfo("stackedOnSeries"),
                A = 0;
                p.useStyle(r(l.getAreaStyle(), {
                    fill: M,
                    opacity: .7,
                    lineJoin: "bevel"
                })),
                T && (A = Ru(T.get("smooth"))),
                p.setShape({
                    smooth: I,
                    stackedOnSmooth: A,
                    smoothMonotone: t.get("smoothMonotone"),
                    connectNulls: t.get("connectNulls")
                })
            }
            this._data = a,
            this._coordSys = n,
            this._stackedOnPoints = x,
            this._points = u,
            this._step = S,
            this._valueOrigin = y
        },
        dispose: function() {},
        highlight: function(t, e, i, n) {
            var o = t.getData(),
            a = Ri(o, n);
            if (! (a instanceof Array) && null != a && a >= 0) {
                var r = o.getItemGraphicEl(a);
                if (!r) {
                    var s = o.getItemLayout(a);
                    if (!s) return; (r = new mu(o, a)).position = s,
                    r.setZ(t.get("zlevel"), t.get("z")),
                    r.ignore = isNaN(s[0]) || isNaN(s[1]),
                    r.__temp = !0,
                    o.setItemGraphicEl(a, r),
                    r.stopSymbolAnimation(!0),
                    this.group.add(r)
                }
                r.highlight()
            } else Mr.prototype.highlight.call(this, t, e, i, n)
        },
        downplay: function(t, e, i, n) {
            var o = t.getData(),
            a = Ri(o, n);
            if (null != a && a >= 0) {
                var r = o.getItemGraphicEl(a);
                r && (r.__temp ? (o.setItemGraphicEl(a, null), this.group.remove(r)) : r.downplay())
            } else Mr.prototype.downplay.call(this, t, e, i, n)
        },
        _newPolyline: function(t) {
            var e = this._polyline;
            return e && this._lineGroup.remove(e),
            e = new lD({
                shape: {
                    points: t
                },
                silent: !0,
                z2: 10
            }),
            this._lineGroup.add(e),
            this._polyline = e,
            e
        },
        _newPolygon: function(t, e) {
            var i = this._polygon;
            return i && this._lineGroup.remove(i),
            i = new uD({
                shape: {
                    points: t,
                    stackedOnPoints: e
                },
                silent: !0
            }),
            this._lineGroup.add(i),
            this._polygon = i,
            i
        },
        _updateAnimation: function(t, e, i, n, o, a) {
            var r = this._polyline,
            s = this._polygon,
            l = t.hostModel,
            u = tD(this._data, t, this._stackedOnPoints, e, this._coordSys, i, this._valueOrigin, a),
            h = u.current,
            c = u.stackedOnCurrent,
            d = u.next,
            f = u.stackedOnNext;
            o && (h = Hu(u.current, i, o), c = Hu(u.stackedOnCurrent, i, o), d = Hu(u.next, i, o), f = Hu(u.stackedOnNext, i, o)),
            r.shape.__points = u.current,
            r.shape.points = h,
            bo(r, {
                shape: {
                    points: d
                }
            },
            l),
            s && (s.setShape({
                points: h,
                stackedOnPoints: c
            }), bo(s, {
                shape: {
                    points: d,
                    stackedOnPoints: f
                }
            },
            l));
            for (var p = [], g = u.status, m = 0; m < g.length; m++) if ("=" === g[m].cmd) {
                var v = t.getItemGraphicEl(g[m].idx1);
                v && p.push({
                    el: v,
                    ptIdx: m
                })
            }
            r.animators && r.animators.length && r.animators[0].during(function() {
                for (var t = 0; t < p.length; t++) p[t].el.attr("position", r.shape.__points[p[t].ptIdx])
            })
        },
        remove: function(t) {
            var e = this.group,
            i = this._data;
            this._lineGroup.removeAll(),
            this._symbolDraw.remove(!0),
            i && i.eachItemGraphicEl(function(t, n) {
                t.__temp && (e.remove(t), i.setItemGraphicEl(n, null))
            }),
            this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null
        }
    });
    var hD = function(t, e, i) {
        return {
            seriesType: t,
            performRawSeries: !0,
            reset: function(t, n, o) {
                var a = t.getData(),
                r = t.get("symbol") || e,
                s = t.get("symbolSize"),
                l = t.get("symbolKeepAspect");
                if (a.setVisual({
                    legendSymbol: i || r,
                    symbol: r,
                    symbolSize: s,
                    symbolKeepAspect: l
                }), !n.isSeriesFiltered(t)) {
                    var u = "function" == typeof s;
                    return {
                        dataEach: a.hasItemOption || u ?
                        function(e, i) {
                            if ("function" == typeof s) {
                                var n = t.getRawValue(i),
                                o = t.getDataParams(i);
                                e.setItemVisual(i, "symbolSize", s(n, o))
                            }
                            if (e.hasItemOption) {
                                var a = e.getItemModel(i),
                                r = a.getShallow("symbol", !0),
                                l = a.getShallow("symbolSize", !0),
                                u = a.getShallow("symbolKeepAspect", !0);
                                null != r && e.setItemVisual(i, "symbol", r),
                                null != l && e.setItemVisual(i, "symbolSize", l),
                                null != u && e.setItemVisual(i, "symbolKeepAspect", u)
                            }
                        }: null
                    }
                }
            }
        }
    },
    cD = function(t) {
        return {
            seriesType: t,
            plan: RI(),
            reset: function(t) {
                var e = t.getData(),
                i = t.coordinateSystem,
                n = t.pipelineContext.large;
                if (i) {
                    var o = f(i.dimensions,
                    function(t) {
                        return e.mapDimension(t)
                    }).slice(0, 2),
                    a = o.length,
                    r = e.getCalculationInfo("stackResultDimension");
                    return hl(e, o[0]) && (o[0] = r),
                    hl(e, o[1]) && (o[1] = r),
                    a && {
                        progress: function(t, e) {
                            for (var r = t.end - t.start,
                            s = n && new Float32Array(r * a), l = t.start, u = 0, h = [], c = []; l < t.end; l++) {
                                var d;
                                if (1 === a) f = e.get(o[0], l),
                                d = !isNaN(f) && i.dataToPoint(f, null, c);
                                else {
                                    var f = h[0] = e.get(o[0], l),
                                    p = h[1] = e.get(o[1], l);
                                    d = !isNaN(f) && !isNaN(p) && i.dataToPoint(h, null, c)
                                }
                                n ? (s[u++] = d ? d[0] : NaN, s[u++] = d ? d[1] : NaN) : e.setItemLayout(l, d && d.slice() || [NaN, NaN])
                            }
                            n && e.setLayout("symbolPoints", s)
                        }
                    }
                }
            }
        }
    },
    dD = {
        average: function(t) {
            for (var e = 0,
            i = 0,
            n = 0; n < t.length; n++) isNaN(t[n]) || (e += t[n], i++);
            return 0 === i ? NaN: e / i
        },
        sum: function(t) {
            for (var e = 0,
            i = 0; i < t.length; i++) e += t[i] || 0;
            return e
        },
        max: function(t) {
            for (var e = -1 / 0,
            i = 0; i < t.length; i++) t[i] > e && (e = t[i]);
            return isFinite(e) ? e: NaN
        },
        min: function(t) {
            for (var e = 1 / 0,
            i = 0; i < t.length; i++) t[i] < e && (e = t[i]);
            return isFinite(e) ? e: NaN
        },
        nearest: function(t) {
            return t[0]
        }
    },
    fD = function(t, e) {
        return Math.round(t.length / 2)
    },
    pD = function(t) {
        this._axes = {},
        this._dimList = [],
        this.name = t || ""
    };
    pD.prototype = {
        constructor: pD,
        type: "cartesian",
        getAxis: function(t) {
            return this._axes[t]
        },
        getAxes: function() {
            return f(this._dimList, Uu, this)
        },
        getAxesByScale: function(t) {
            return t = t.toLowerCase(),
            g(this.getAxes(),
            function(e) {
                return e.scale.type === t
            })
        },
        addAxis: function(t) {
            var e = t.dim;
            this._axes[e] = t,
            this._dimList.push(e)
        },
        dataToCoord: function(t) {
            return this._dataCoordConvert(t, "dataToCoord")
        },
        coordToData: function(t) {
            return this._dataCoordConvert(t, "coordToData")
        },
        _dataCoordConvert: function(t, e) {
            for (var i = this._dimList,
            n = t instanceof Array ? [] : {},
            o = 0; o < i.length; o++) {
                var a = i[o],
                r = this._axes[a];
                n[a] = r[e](t[a])
            }
            return n
        }
    },
    Xu.prototype = {
        constructor: Xu,
        type: "cartesian2d",
        dimensions: ["x", "y"],
        getBaseAxis: function() {
            return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x")
        },
        containPoint: function(t) {
            var e = this.getAxis("x"),
            i = this.getAxis("y");
            return e.contain(e.toLocalCoord(t[0])) && i.contain(i.toLocalCoord(t[1]))
        },
        containData: function(t) {
            return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1])
        },
        dataToPoint: function(t, e, i) {
            var n = this.getAxis("x"),
            o = this.getAxis("y");
            return i = i || [],
            i[0] = n.toGlobalCoord(n.dataToCoord(t[0])),
            i[1] = o.toGlobalCoord(o.dataToCoord(t[1])),
            i
        },
        clampData: function(t, e) {
            var i = this.getAxis("x").scale,
            n = this.getAxis("y").scale,
            o = i.getExtent(),
            a = n.getExtent(),
            r = i.parse(t[0]),
            s = n.parse(t[1]);
            return e = e || [],
            e[0] = Math.min(Math.max(Math.min(o[0], o[1]), r), Math.max(o[0], o[1])),
            e[1] = Math.min(Math.max(Math.min(a[0], a[1]), s), Math.max(a[0], a[1])),
            e
        },
        pointToData: function(t, e) {
            var i = this.getAxis("x"),
            n = this.getAxis("y");
            return e = e || [],
            e[0] = i.coordToData(i.toLocalCoord(t[0])),
            e[1] = n.coordToData(n.toLocalCoord(t[1])),
            e
        },
        getOtherAxis: function(t) {
            return this.getAxis("x" === t.dim ? "y": "x")
        }
    },
    u(Xu, pD);
    var gD = function(t, e, i, n, o) {
        HA.call(this, t, e, i),
        this.type = n || "value",
        this.position = o || "bottom"
    };
    gD.prototype = {
        constructor: gD,
        index: 0,
        getAxesOnZeroOf: null,
        model: null,
        isHorizontal: function() {
            var t = this.position;
            return "top" === t || "bottom" === t
        },
        getGlobalExtent: function(t) {
            var e = this.getExtent();
            return e[0] = this.toGlobalCoord(e[0]),
            e[1] = this.toGlobalCoord(e[1]),
            t && e[0] > e[1] && e.reverse(),
            e
        },
        getOtherAxis: function() {
            this.grid.getOtherAxis()
        },
        pointToData: function(t, e) {
            return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e)
        },
        toLocalCoord: null,
        toGlobalCoord: null
    },
    u(gD, HA);
    var mD = {
        show: !0,
        zlevel: 0,
        z: 0,
        inverse: !1,
        name: "",
        nameLocation: "end",
        nameRotate: null,
        nameTruncate: {
            maxWidth: null,
            ellipsis: "...",
            placeholder: "."
        },
        nameTextStyle: {},
        nameGap: 15,
        silent: !1,
        triggerEvent: !1,
        tooltip: {
            show: !1
        },
        axisPointer: {},
        axisLine: {
            show: !0,
            onZero: !0,
            onZeroAxisIndex: null,
            lineStyle: {
                color: "#333",
                width: 1,
                type: "solid"
            },
            symbol: ["none", "none"],
            symbolSize: [10, 15]
        },
        axisTick: {
            show: !0,
            inside: !1,
            length: 5,
            lineStyle: {
                width: 1
            }
        },
        axisLabel: {
            show: !0,
            inside: !1,
            rotate: 0,
            showMinLabel: null,
            showMaxLabel: null,
            margin: 8,
            fontSize: 12
        },
        splitLine: {
            show: !0,
            lineStyle: {
                color: ["#ccc"],
                width: 1,
                type: "solid"
            }
        },
        splitArea: {
            show: !1,
            areaStyle: {
                color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
            }
        }
    },
    vD = {};
    vD.categoryAxis = n({
        boundaryGap: !0,
        deduplication: null,
        splitLine: {
            show: !1
        },
        axisTick: {
            alignWithLabel: !1,
            interval: "auto"
        },
        axisLabel: {
            interval: "auto"
        }
    },
    mD),
    vD.valueAxis = n({
        boundaryGap: [0, 0],
        splitNumber: 5
    },
    mD),
    vD.timeAxis = r({
        scale: !0,
        min: "dataMin",
        max: "dataMax"
    },
    vD.valueAxis),
    vD.logAxis = r({
        scale: !0,
        logBase: 10
    },
    vD.valueAxis);
    var yD = ["value", "category", "time", "log"],
    xD = function(t, e, i, a) {
        d(yD,
        function(r) {
            e.extend({
                type: t + "Axis." + r,
                mergeDefaultAndTheme: function(e, o) {
                    var a = this.layoutMode,
                    s = a ? da(e) : {};
                    n(e, o.getTheme().get(r + "Axis")),
                    n(e, this.getDefaultOption()),
                    e.type = i(t, e),
                    a && ca(e, s, a)
                },
                optionUpdated: function() {
                    "category" === this.option.type && (this.__ordinalMeta = ml.createByAxisModel(this))
                },
                getCategories: function(t) {
                    var e = this.option;
                    if ("category" === e.type) return t ? e.data: this.__ordinalMeta.categories
                },
                getOrdinalMeta: function() {
                    return this.__ordinalMeta
                },
                defaultOption: o([{},
                vD[r + "Axis"], a], !0)
            })
        }),
        XM.registerSubTypeDefaulter(t + "Axis", v(i, t))
    },
    _D = XM.extend({
        type: "cartesian2dAxis",
        axis: null,
        init: function() {
            _D.superApply(this, "init", arguments),
            this.resetRange()
        },
        mergeOption: function() {
            _D.superApply(this, "mergeOption", arguments),
            this.resetRange()
        },
        restoreData: function() {
            _D.superApply(this, "restoreData", arguments),
            this.resetRange()
        },
        getCoordSysModel: function() {
            return this.ecModel.queryComponents({
                mainType: "grid",
                index: this.option.gridIndex,
                id: this.option.gridId
            })[0]
        }
    });
    n(_D.prototype, CA);
    var wD = {
        offset: 0
    };
    xD("x", _D, qu, wD),
    xD("y", _D, qu, wD),
    XM.extend({
        type: "grid",
        dependencies: ["xAxis", "yAxis"],
        layoutMode: "box",
        coordinateSystem: null,
        defaultOption: {
            show: !1,
            zlevel: 0,
            z: 0,
            left: "10%",
            top: 60,
            right: "10%",
            bottom: 60,
            containLabel: !1,
            backgroundColor: "rgba(0,0,0,0)",
            borderWidth: 1,
            borderColor: "#ccc"
        }
    });
    var bD = Qu.prototype;
    bD.type = "grid",
    bD.axisPointerEnabled = !0,
    bD.getRect = function() {
        return this._rect
    },
    bD.update = function(t, e) {
        var i = this._axesMap;
        this._updateScale(t, this.model),
        d(i.x,
        function(t) {
            Bl(t.scale, t.model)
        }),
        d(i.y,
        function(t) {
            Bl(t.scale, t.model)
        });
        var n = {};
        d(i.x,
        function(t) {
            Ju(i, "y", t, n)
        }),
        d(i.y,
        function(t) {
            Ju(i, "x", t, n)
        }),
        this.resize(this.model, e)
    },
    bD.resize = function(t, e, i) {
        function n() {
            d(a,
            function(t) {
                var e = t.isHorizontal(),
                i = e ? [0, o.width] : [0, o.height],
                n = t.inverse ? 1 : 0;
                t.setExtent(i[n], i[1 - n]),
                th(t, e ? o.x: o.y)
            })
        }
        var o = la(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        });
        this._rect = o;
        var a = this._axesList;
        n(),
        !i && t.get("containLabel") && (d(a,
        function(t) {
            if (!t.model.get("axisLabel.inside")) {
                var e = Hl(t);
                if (e) {
                    var i = t.isHorizontal() ? "height": "width",
                    n = t.model.get("axisLabel.margin");
                    o[i] -= e[i] + n,
                    "top" === t.position ? o.y += e.height + n: "left" === t.position && (o.x += e.width + n)
                }
            }
        }), n())
    },
    bD.getAxis = function(t, e) {
        var i = this._axesMap[t];
        if (null != i) {
            if (null == e) for (var n in i) if (i.hasOwnProperty(n)) return i[n];
            return i[e]
        }
    },
    bD.getAxes = function() {
        return this._axesList.slice()
    },
    bD.getCartesian = function(t, e) {
        if (null != t && null != e) {
            var i = "x" + t + "y" + e;
            return this._coordsMap[i]
        }
        w(t) && (e = t.yAxisIndex, t = t.xAxisIndex);
        for (var n = 0,
        o = this._coordsList; n < o.length; n++) if (o[n].getAxis("x").index === t || o[n].getAxis("y").index === e) return o[n]
    },
    bD.getCartesians = function() {
        return this._coordsList.slice()
    },
    bD.convertToPixel = function(t, e, i) {
        var n = this._findConvertTarget(t, e);
        return n.cartesian ? n.cartesian.dataToPoint(i) : n.axis ? n.axis.toGlobalCoord(n.axis.dataToCoord(i)) : null
    },
    bD.convertFromPixel = function(t, e, i) {
        var n = this._findConvertTarget(t, e);
        return n.cartesian ? n.cartesian.pointToData(i) : n.axis ? n.axis.coordToData(n.axis.toLocalCoord(i)) : null
    },
    bD._findConvertTarget = function(t, e) {
        var i, n, o = e.seriesModel,
        a = e.xAxisModel || o && o.getReferringComponents("xAxis")[0],
        r = e.yAxisModel || o && o.getReferringComponents("yAxis")[0],
        s = e.gridModel,
        u = this._coordsList;
        return o ? l(u, i = o.coordinateSystem) < 0 && (i = null) : a && r ? i = this.getCartesian(a.componentIndex, r.componentIndex) : a ? n = this.getAxis("x", a.componentIndex) : r ? n = this.getAxis("y", r.componentIndex) : s && s.coordinateSystem === this && (i = this._coordsList[0]),
        {
            cartesian: i,
            axis: n
        }
    },
    bD.containPoint = function(t) {
        var e = this._coordsList[0];
        if (e) return e.containPoint(t)
    },
    bD._initCartesian = function(t, e, i) {
        function n(i) {
            return function(n, s) {
                if (Ku(n, t, e)) {
                    var l = n.get("position");
                    "x" === i ? "top" !== l && "bottom" !== l && o[l = "bottom"] && (l = "top" === l ? "bottom": "top") : "left" !== l && "right" !== l && o[l = "left"] && (l = "left" === l ? "right": "left"),
                    o[l] = !0;
                    var u = new gD(i, Vl(n), [0, 0], n.get("type"), l),
                    h = "category" === u.type;
                    u.onBand = h && n.get("boundaryGap"),
                    u.inverse = n.get("inverse"),
                    n.axis = u,
                    u.model = n,
                    u.grid = this,
                    u.index = s,
                    this._axesList.push(u),
                    a[i][s] = u,
                    r[i]++
                }
            }
        }
        var o = {
            left: !1,
            right: !1,
            top: !1,
            bottom: !1
        },
        a = {
            x: {},
            y: {}
        },
        r = {
            x: 0,
            y: 0
        };
        if (e.eachComponent("xAxis", n("x"), this), e.eachComponent("yAxis", n("y"), this), !r.x || !r.y) return this._axesMap = {},
        void(this._axesList = []);
        this._axesMap = a,
        d(a.x,
        function(e, i) {
            d(a.y,
            function(n, o) {
                var a = "x" + i + "y" + o,
                r = new Xu(a);
                r.grid = this,
                r.model = t,
                this._coordsMap[a] = r,
                this._coordsList.push(r),
                r.addAxis(e),
                r.addAxis(n)
            },
            this)
        },
        this)
    },
    bD._updateScale = function(t, e) {
        function i(t, e, i) {
            d(t.mapDimension(e.dim, !0),
            function(i) {
                e.scale.unionExtentFromData(t, cl(t, i))
            })
        }
        d(this._axesList,
        function(t) {
            t.scale.setExtent(1 / 0, -1 / 0)
        }),
        t.eachSeries(function(n) {
            if (ih(n)) {
                var o = eh(n),
                a = o[0],
                r = o[1];
                if (!Ku(a, e, t) || !Ku(r, e, t)) return;
                var s = this.getCartesian(a.componentIndex, r.componentIndex),
                l = n.getData(),
                u = s.getAxis("x"),
                h = s.getAxis("y");
                "list" === l.type && (i(l, u), i(l, h))
            }
        },
        this)
    },
    bD.getTooltipAxes = function(t) {
        var e = [],
        i = [];
        return d(this.getCartesians(),
        function(n) {
            var o = null != t && "auto" !== t ? n.getAxis(t) : n.getBaseAxis(),
            a = n.getOtherAxis(o);
            l(e, o) < 0 && e.push(o),
            l(i, a) < 0 && i.push(a)
        }),
        {
            baseAxes: e,
            otherAxes: i
        }
    };
    var SD = ["xAxis", "yAxis"];
    Qu.create = function(t, e) {
        var i = [];
        return t.eachComponent("grid",
        function(n, o) {
            var a = new Qu(n, t, e);
            a.name = "grid_" + o,
            a.resize(n, e, !0),
            n.coordinateSystem = a,
            i.push(a)
        }),
        t.eachSeries(function(t) {
            if (ih(t)) {
                var e = eh(t),
                i = e[0],
                n = e[1],
                o = i.getCoordSysModel().coordinateSystem;
                t.coordinateSystem = o.getCartesian(i.componentIndex, n.componentIndex)
            }
        }),
        i
    },
    Qu.dimensions = Qu.prototype.dimensions = Xu.prototype.dimensions,
    Ba.register("cartesian2d", Qu);
    var MD = Math.PI,
    ID = function(t, e) {
        this.opt = e,
        this.axisModel = t,
        r(e, {
            labelOffset: 0,
            nameDirection: 1,
            tickDirection: 1,
            labelDirection: 1,
            silent: !0
        }),
        this.group = new Zw;
        var i = new Zw({
            position: e.position.slice(),
            rotation: e.rotation
        });
        i.updateTransform(),
        this._transform = i.transform,
        this._dumbGroup = i
    };
    ID.prototype = {
        constructor: ID,
        hasBuilder: function(t) {
            return !! TD[t]
        },
        add: function(t) {
            TD[t].call(this)
        },
        getGroup: function() {
            return this.group
        }
    };
    var TD = {
        axisLine: function() {
            var t = this.opt,
            e = this.axisModel;
            if (e.get("axisLine.show")) {
                var i = this.axisModel.axis.getExtent(),
                n = this._transform,
                o = [i[0], 0],
                r = [i[1], 0];
                n && ($(o, o, n), $(r, r, n));
                var s = a({
                    lineCap: "round"
                },
                e.getModel("axisLine.lineStyle").getLineStyle());
                this.group.add(new rM(Yn({
                    anid: "line",
                    shape: {
                        x1: o[0],
                        y1: o[1],
                        x2: r[0],
                        y2: r[1]
                    },
                    style: s,
                    strokeContainThreshold: t.strokeContainThreshold || 5,
                    silent: !0,
                    z2: 1
                })));
                var l = e.get("axisLine.symbol"),
                u = e.get("axisLine.symbolSize"),
                h = e.get("axisLine.symbolOffset") || 0;
                if ("number" == typeof h && (h = [h, h]), null != l) {
                    "string" == typeof l && (l = [l, l]),
                    "string" != typeof u && "number" != typeof u || (u = [u, u]);
                    var c = u[0],
                    f = u[1];
                    d([{
                        rotate: t.rotation + Math.PI / 2,
                        offset: h[0],
                        r: 0
                    },
                    {
                        rotate: t.rotation - Math.PI / 2,
                        offset: h[1],
                        r: Math.sqrt((o[0] - r[0]) * (o[0] - r[0]) + (o[1] - r[1]) * (o[1] - r[1]))
                    }],
                    function(e, i) {
                        if ("none" !== l[i] && null != l[i]) {
                            var n = Yl(l[i], -c / 2, -f / 2, c, f, s.stroke, !0),
                            a = e.r + e.offset,
                            r = [o[0] + a * Math.cos(t.rotation), o[1] - a * Math.sin(t.rotation)];
                            n.attr({
                                rotation: e.rotate,
                                position: r,
                                silent: !0
                            }),
                            this.group.add(n)
                        }
                    },
                    this)
                }
            }
        },
        axisTickLabel: function() {
            var t = this.axisModel,
            e = this.opt,
            i = hh(this, t, e);
            rh(t, ch(this, t, e), i)
        },
        axisName: function() {
            var t = this.opt,
            e = this.axisModel,
            i = T(t.axisName, e.get("name"));
            if (i) {
                var n, o = e.get("nameLocation"),
                r = t.nameDirection,
                s = e.getModel("nameTextStyle"),
                l = e.get("nameGap") || 0,
                u = this.axisModel.axis.getExtent(),
                h = u[0] > u[1] ? -1 : 1,
                c = ["start" === o ? u[0] - h * l: "end" === o ? u[1] + h * l: (u[0] + u[1]) / 2, uh(o) ? t.labelOffset + r * l: 0],
                d = e.get("nameRotate");
                null != d && (d = d * MD / 180);
                var f;
                uh(o) ? n = AD(t.rotation, null != d ? d: t.rotation, r) : (n = oh(t, o, d || 0, u), null != (f = t.axisNameAvailableWidth) && (f = Math.abs(f / Math.sin(n.rotation)), !isFinite(f) && (f = null)));
                var p = s.getFont(),
                g = e.get("nameTruncate", !0) || {},
                m = g.ellipsis,
                v = T(t.nameTruncateMaxWidth, g.maxWidth, f),
                y = null != m && null != v ? VM(i, v, p, m, {
                    minChar: 2,
                    placeholder: g.placeholder
                }) : i,
                x = e.get("tooltip", !0),
                _ = e.mainType,
                w = {
                    componentType: _,
                    name: i,
                    $vars: ["name"]
                };
                w[_ + "Index"] = e.componentIndex;
                var b = new qS({
                    anid: "name",
                    __fullText: i,
                    __truncatedText: y,
                    position: c,
                    rotation: n.rotation,
                    silent: ah(e),
                    z2: 1,
                    tooltip: x && x.show ? a({
                        content: i,
                        formatter: function() {
                            return i
                        },
                        formatterParams: w
                    },
                    x) : null
                });
                fo(b.style, s, {
                    text: y,
                    textFont: p,
                    textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"),
                    textAlign: n.textAlign,
                    textVerticalAlign: n.textVerticalAlign
                }),
                e.get("triggerEvent") && (b.eventData = nh(e), b.eventData.targetType = "axisName", b.eventData.name = i),
                this._dumbGroup.add(b),
                b.updateTransform(),
                this.group.add(b),
                b.decomposeTransform()
            }
        }
    },
    AD = ID.innerTextLayout = function(t, e, i) {
        var n, o, a = Ho(e - t);
        return Zo(a) ? (o = i > 0 ? "top": "bottom", n = "center") : Zo(a - MD) ? (o = i > 0 ? "bottom": "top", n = "center") : (o = "middle", n = a > 0 && a < MD ? i > 0 ? "right": "left": i > 0 ? "left": "right"),
        {
            rotation: a,
            textAlign: n,
            textVerticalAlign: o
        }
    },
    DD = d,
    CD = v,
    LD = Vs({
        type: "axis",
        _axisPointer: null,
        axisPointerClass: null,
        render: function(t, e, i, n) {
            this.axisPointerClass && yh(t),
            LD.superApply(this, "render", arguments),
            Sh(this, t, 0, i, 0, !0)
        },
        updateAxisPointer: function(t, e, i, n, o) {
            Sh(this, t, 0, i, 0, !1)
        },
        remove: function(t, e) {
            var i = this._axisPointer;
            i && i.remove(e),
            LD.superApply(this, "remove", arguments)
        },
        dispose: function(t, e) {
            Mh(this, e),
            LD.superApply(this, "dispose", arguments)
        }
    }),
    kD = [];
    LD.registerAxisPointerClass = function(t, e) {
        kD[t] = e
    },
    LD.getAxisPointerClass = function(t) {
        return t && kD[t]
    };
    var PD = ["axisLine", "axisTickLabel", "axisName"],
    ND = ["splitArea", "splitLine"],
    OD = LD.extend({
        type: "cartesianAxis",
        axisPointerClass: "CartesianAxisPointer",
        render: function(t, e, i, n) {
            this.group.removeAll();
            var o = this._axisGroup;
            if (this._axisGroup = new Zw, this.group.add(this._axisGroup), t.get("show")) {
                var a = t.getCoordSysModel(),
                r = Ih(a, t),
                s = new ID(t, r);
                d(PD, s.add, s),
                this._axisGroup.add(s.getGroup()),
                d(ND,
                function(e) {
                    t.get(e + ".show") && this["_" + e](t, a)
                },
                this),
                Ao(o, this._axisGroup, t),
                OD.superCall(this, "render", t, e, i, n)
            }
        },
        remove: function() {
            this._splitAreaColors = null
        },
        _splitLine: function(t, e) {
            var i = t.axis;
            if (!i.scale.isBlank()) {
                var n = t.getModel("splitLine"),
                o = n.getModel("lineStyle"),
                a = o.get("color");
                a = y(a) ? a: [a];
                for (var s = e.coordinateSystem.getRect(), l = i.isHorizontal(), u = 0, h = i.getTicksCoords({
                    tickModel: n
                }), c = [], d = [], f = o.getLineStyle(), p = 0; p < h.length; p++) {
                    var g = i.toGlobalCoord(h[p].coord);
                    l ? (c[0] = g, c[1] = s.y, d[0] = g, d[1] = s.y + s.height) : (c[0] = s.x, c[1] = g, d[0] = s.x + s.width, d[1] = g);
                    var m = u++%a.length,
                    v = h[p].tickValue;
                    this._axisGroup.add(new rM(Yn({
                        anid: null != v ? "line_" + h[p].tickValue: null,
                        shape: {
                            x1: c[0],
                            y1: c[1],
                            x2: d[0],
                            y2: d[1]
                        },
                        style: r({
                            stroke: a[m]
                        },
                        f),
                        silent: !0
                    })))
                }
            }
        },
        _splitArea: function(t, e) {
            var i = t.axis;
            if (!i.scale.isBlank()) {
                var n = t.getModel("splitArea"),
                o = n.getModel("areaStyle"),
                a = o.get("color"),
                s = e.coordinateSystem.getRect(),
                l = i.getTicksCoords({
                    tickModel: n,
                    clamp: !0
                });
                if (l.length) {
                    var u = a.length,
                    h = this._splitAreaColors,
                    c = E(),
                    d = 0;
                    if (h) for (m = 0; m < l.length; m++) {
                        var f = h.get(l[m].tickValue);
                        if (null != f) {
                            d = (f + (u - 1) * m) % u;
                            break
                        }
                    }
                    var p = i.toGlobalCoord(l[0].coord),
                    g = o.getAreaStyle();
                    a = y(a) ? a: [a];
                    for (var m = 1; m < l.length; m++) {
                        var v, x, _, w, b = i.toGlobalCoord(l[m].coord);
                        i.isHorizontal() ? (v = p, x = s.y, _ = b - v, w = s.height, p = v + _) : (v = s.x, x = p, _ = s.width, p = x + (w = b - x));
                        var S = l[m - 1].tickValue;
                        null != S && c.set(S, d),
                        this._axisGroup.add(new aM({
                            anid: null != S ? "area_" + S: null,
                            shape: {
                                x: v,
                                y: x,
                                width: _,
                                height: w
                            },
                            style: r({
                                fill: a[d]
                            },
                            g),
                            silent: !0
                        })),
                        d = (d + 1) % u
                    }
                    this._splitAreaColors = c
                }
            }
        }
    });
    OD.extend({
        type: "xAxis"
    }),
    OD.extend({
        type: "yAxis"
    }),
    Vs({
        type: "grid",
        render: function(t, e) {
            this.group.removeAll(),
            t.get("show") && this.group.add(new aM({
                shape: t.coordinateSystem.getRect(),
                style: r({
                    fill: t.get("backgroundColor")
                },
                t.getItemStyle()),
                silent: !0,
                z2: -1
            }))
        }
    }),
    Ls(function(t) {
        t.xAxis && t.yAxis && !t.grid && (t.grid = {})
    }),
    zs(hD("line", "circle", "line")),
    Os(cD("line")),
    ks(IT.PROCESSOR.STATISTIC,
    function(t) {
        return {
            seriesType: "line",
            modifyOutputEnd: !0,
            reset: function(t, e, i) {
                var n = t.getData(),
                o = t.get("sampling"),
                a = t.coordinateSystem;
                if ("cartesian2d" === a.type && o) {
                    var r = a.getBaseAxis(),
                    s = a.getOtherAxis(r),
                    l = r.getExtent(),
                    u = l[1] - l[0],
                    h = Math.round(n.count() / u);
                    if (h > 1) {
                        var c;
                        "string" == typeof o ? c = dD[o] : "function" == typeof o && (c = o),
                        c && t.setData(n.downSample(n.mapDimension(s.dim), 1 / h, c, fD))
                    }
                }
            }
        }
    } ());
    var zD = OI.extend({
        type: "series.__base_bar__",
        getInitialData: function(t, e) {
            return dl(this.getSource(), this)
        },
        getMarkerPosition: function(t) {
            var e = this.coordinateSystem;
            if (e) {
                var i = e.dataToPoint(e.clampData(t)),
                n = this.getData(),
                o = n.getLayout("offset"),
                a = n.getLayout("size");
                return i[e.getBaseAxis().isHorizontal() ? 0 : 1] += o + a / 2,
                i
            }
            return [NaN, NaN]
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: !0,
            barMinHeight: 0,
            barMinAngle: 0,
            large: !1,
            largeThreshold: 400,
            progressive: 3e3,
            progressiveChunkMode: "mod",
            itemStyle: {},
            emphasis: {}
        }
    });
    zD.extend({
        type: "series.bar",
        dependencies: ["grid", "polar"],
        brushSelector: "rect",
        getProgressive: function() {
            return !! this.get("large") && this.get("progressive")
        },
        getProgressiveThreshold: function() {
            var t = this.get("progressiveThreshold"),
            e = this.get("largeThreshold");
            return e > t && (t = e),
            t
        }
    });
    var ED = Wb([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["stroke", "barBorderColor"], ["lineWidth", "barBorderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]),
    RD = {
        getBarItemStyle: function(t) {
            var e = ED(this, t);
            if (this.getBorderLineDash) {
                var i = this.getBorderLineDash();
                i && (e.lineDash = i)
            }
            return e
        }
    },
    BD = ["itemStyle", "barBorderWidth"];
    a(Lo.prototype, RD),
    Gs({
        type: "bar",
        render: function(t, e, i) {
            this._updateDrawMode(t);
            var n = t.get("coordinateSystem");
            return "cartesian2d" !== n && "polar" !== n || (this._isLargeDraw ? this._renderLarge(t, e, i) : this._renderNormal(t, e, i)),
            this.group
        },
        incrementalPrepareRender: function(t, e, i) {
            this._clear(),
            this._updateDrawMode(t)
        },
        incrementalRender: function(t, e, i, n) {
            this._incrementalRenderLarge(t, e)
        },
        _updateDrawMode: function(t) {
            var e = t.pipelineContext.large; (null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear())
        },
        _renderNormal: function(t, e, i) {
            var n, o = this.group,
            a = t.getData(),
            r = this._data,
            s = t.coordinateSystem,
            l = s.getBaseAxis();
            "cartesian2d" === s.type ? n = l.isHorizontal() : "polar" === s.type && (n = "angle" === l.dim);
            var u = t.isAnimationEnabled() ? t: null;
            a.diff(r).add(function(e) {
                if (a.hasValue(e)) {
                    var i = a.getItemModel(e),
                    r = FD[s.type](a, e, i),
                    l = VD[s.type](a, e, i, r, n, u);
                    a.setItemGraphicEl(e, l),
                    o.add(l),
                    Lh(l, a, e, i, r, t, n, "polar" === s.type)
                }
            }).update(function(e, i) {
                var l = r.getItemGraphicEl(i);
                if (a.hasValue(e)) {
                    var h = a.getItemModel(e),
                    c = FD[s.type](a, e, h);
                    l ? bo(l, {
                        shape: c
                    },
                    u, e) : l = VD[s.type](a, e, h, c, n, u, !0),
                    a.setItemGraphicEl(e, l),
                    o.add(l),
                    Lh(l, a, e, h, c, t, n, "polar" === s.type)
                } else o.remove(l)
            }).remove(function(t) {
                var e = r.getItemGraphicEl(t);
                "cartesian2d" === s.type ? e && Dh(t, u, e) : e && Ch(t, u, e)
            }).execute(),
            this._data = a
        },
        _renderLarge: function(t, e, i) {
            this._clear(),
            Ph(t, this.group)
        },
        _incrementalRenderLarge: function(t, e) {
            Ph(e, this.group, !0)
        },
        dispose: B,
        remove: function(t) {
            this._clear(t)
        },
        _clear: function(t) {
            var e = this.group,
            i = this._data;
            t && t.get("animation") && i && !this._isLargeDraw ? i.eachItemGraphicEl(function(e) {
                "sector" === e.type ? Ch(e.dataIndex, t, e) : Dh(e.dataIndex, t, e)
            }) : e.removeAll(),
            this._data = null
        }
    });
    var VD = {
        cartesian2d: function(t, e, i, n, o, r, s) {
            var l = new aM({
                shape: a({},
                n)
            });
            if (r) {
                var u = l.shape,
                h = o ? "height": "width",
                c = {};
                u[h] = 0,
                c[h] = n[h],
                bM[s ? "updateProps": "initProps"](l, {
                    shape: c
                },
                r, e)
            }
            return l
        },
        polar: function(t, e, i, n, o, a, s) {
            var l = n.startAngle < n.endAngle,
            u = new $S({
                shape: r({
                    clockwise: l
                },
                n)
            });
            if (a) {
                var h = u.shape,
                c = o ? "r": "endAngle",
                d = {};
                h[c] = o ? 0 : n.startAngle,
                d[c] = n[c],
                bM[s ? "updateProps": "initProps"](u, {
                    shape: d
                },
                a, e)
            }
            return u
        }
    },
    FD = {
        cartesian2d: function(t, e, i) {
            var n = t.getItemLayout(e),
            o = kh(i, n),
            a = n.width > 0 ? 1 : -1,
            r = n.height > 0 ? 1 : -1;
            return {
                x: n.x + a * o / 2,
                y: n.y + r * o / 2,
                width: n.width - a * o,
                height: n.height - r * o
            }
        },
        polar: function(t, e, i) {
            var n = t.getItemLayout(e);
            return {
                cx: n.cx,
                cy: n.cy,
                r0: n.r0,
                r: n.r,
                startAngle: n.startAngle,
                endAngle: n.endAngle
            }
        }
    },
    GD = kn.extend({
        type: "largeBar",
        shape: {
            points: []
        },
        buildPath: function(t, e) {
            for (var i = e.points,
            n = this.__startPoint,
            o = this.__valueIdx,
            a = 0; a < i.length; a += 2) n[this.__valueIdx] = i[a + o],
            t.moveTo(n[0], n[1]),
            t.lineTo(i[a], i[a + 1])
        }
    });
    Os(v(kl, "bar")),
    Os(fA),
    zs({
        seriesType: "bar",
        reset: function(t) {
            t.getData().setVisual("legendSymbol", "roundRect")
        }
    });
    var WD = function(t, e, i) {
        e = y(e) && {
            coordDimensions: e
        } || a({},
        e);
        var n = t.getSource(),
        o = oA(n, e),
        r = new eA(o, t);
        return r.initData(n, i),
        r
    },
    HD = {
        updateSelectedMap: function(t) {
            this._targetList = y(t) ? t.slice() : [],
            this._selectTargetMap = p(t || [],
            function(t, e) {
                return t.set(e.name, e),
                t
            },
            E())
        },
        select: function(t, e) {
            var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
            "single" === this.get("selectedMode") && this._selectTargetMap.each(function(t) {
                t.selected = !1
            }),
            i && (i.selected = !0)
        },
        unSelect: function(t, e) {
            var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
            i && (i.selected = !1)
        },
        toggleSelected: function(t, e) {
            var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
            if (null != i) return this[i.selected ? "unSelect": "select"](t, e),
            i.selected
        },
        isSelected: function(t, e) {
            var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
            return i && i.selected
        }
    },
    ZD = Fs({
        type: "series.pie",
        init: function(t) {
            ZD.superApply(this, "init", arguments),
            this.legendDataProvider = function() {
                return this.getRawData()
            },
            this.updateSelectedMap(this._createSelectableList()),
            this._defaultLabelLine(t)
        },
        mergeOption: function(t) {
            ZD.superCall(this, "mergeOption", t),
            this.updateSelectedMap(this._createSelectableList())
        },
        getInitialData: function(t, e) {
            return WD(this, ["value"])
        },
        _createSelectableList: function() {
            for (var t = this.getRawData(), e = t.mapDimension("value"), i = [], n = 0, o = t.count(); n < o; n++) i.push({
                name: t.getName(n),
                value: t.get(e, n),
                selected: cr(t, n, "selected")
            });
            return i
        },
        getDataParams: function(t) {
            var e = this.getData(),
            i = ZD.superCall(this, "getDataParams", t),
            n = [];
            return e.each(e.mapDimension("value"),
            function(t) {
                n.push(t)
            }),
            i.percent = Wo(n, t, e.hostModel.get("percentPrecision")),
            i.$vars.push("percent"),
            i
        },
        _defaultLabelLine: function(t) {
            Ci(t, "labelLine", ["show"]);
            var e = t.labelLine,
            i = t.emphasis.labelLine;
            e.show = e.show && t.label.show,
            i.show = i.show && t.emphasis.label.show
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            hoverAnimation: !0,
            center: ["50%", "50%"],
            radius: [0, "75%"],
            clockwise: !0,
            startAngle: 90,
            minAngle: 0,
            selectedOffset: 10,
            hoverOffset: 10,
            avoidLabelOverlap: !0,
            percentPrecision: 2,
            stillShowZeroSum: !0,
            label: {
                rotate: !1,
                show: !0,
                position: "outer"
            },
            labelLine: {
                show: !0,
                length: 15,
                length2: 15,
                smooth: !1,
                lineStyle: {
                    width: 1,
                    type: "solid"
                }
            },
            itemStyle: {
                borderWidth: 1
            },
            animationType: "expansion",
            animationEasing: "cubicOut"
        }
    });
    h(ZD, HD);
    var jD = Eh.prototype;
    jD.updateData = function(t, e, i) {
        function n() {
            s.stopAnimation(!0),
            s.animateTo({
                shape: {
                    r: h.r + l.get("hoverOffset")
                }
            },
            300, "elasticOut")
        }
        function o() {
            s.stopAnimation(!0),
            s.animateTo({
                shape: {
                    r: h.r
                }
            },
            300, "elasticOut")
        }
        var s = this.childAt(0),
        l = t.hostModel,
        u = t.getItemModel(e),
        h = t.getItemLayout(e),
        c = a({},
        h);
        c.label = null,
        i ? (s.setShape(c), "scale" === l.getShallow("animationType") ? (s.shape.r = h.r0, So(s, {
            shape: {
                r: h.r
            }
        },
        l, e)) : (s.shape.endAngle = h.startAngle, bo(s, {
            shape: {
                endAngle: h.endAngle
            }
        },
        l, e))) : bo(s, {
            shape: c
        },
        l, e);
        var d = t.getItemVisual(e, "color");
        s.useStyle(r({
            lineJoin: "bevel",
            fill: d
        },
        u.getModel("itemStyle").getItemStyle())),
        s.hoverStyle = u.getModel("emphasis.itemStyle").getItemStyle();
        var f = u.getShallow("cursor");
        f && s.attr("cursor", f),
        zh(this, t.getItemLayout(e), l.isSelected(null, e), l.get("selectedOffset"), l.get("animation")),
        s.off("mouseover").off("mouseout").off("emphasis").off("normal"),
        u.get("hoverAnimation") && l.isAnimationEnabled() && s.on("mouseover", n).on("mouseout", o).on("emphasis", n).on("normal", o),
        this._updateLabel(t, e),
        uo(this)
    },
    jD._updateLabel = function(t, e) {
        var i = this.childAt(1),
        n = this.childAt(2),
        o = t.hostModel,
        a = t.getItemModel(e),
        r = t.getItemLayout(e).label,
        s = t.getItemVisual(e, "color");
        bo(i, {
            shape: {
                points: r.linePoints || [[r.x, r.y], [r.x, r.y], [r.x, r.y]]
            }
        },
        o, e),
        bo(n, {
            style: {
                x: r.x,
                y: r.y
            }
        },
        o, e),
        n.attr({
            rotation: r.rotation,
            origin: [r.x, r.y],
            z2: 10
        });
        var l = a.getModel("label"),
        u = a.getModel("emphasis.label"),
        h = a.getModel("labelLine"),
        c = a.getModel("emphasis.labelLine"),
        s = t.getItemVisual(e, "color");
        co(n.style, n.hoverStyle = {},
        l, u, {
            labelFetcher: t.hostModel,
            labelDataIndex: e,
            defaultText: t.getName(e),
            autoColor: s,
            useInsideStyle: !!r.inside
        },
        {
            textAlign: r.textAlign,
            textVerticalAlign: r.verticalAlign,
            opacity: t.getItemVisual(e, "opacity")
        }),
        n.ignore = n.normalIgnore = !l.get("show"),
        n.hoverIgnore = !u.get("show"),
        i.ignore = i.normalIgnore = !h.get("show"),
        i.hoverIgnore = !c.get("show"),
        i.setStyle({
            stroke: s,
            opacity: t.getItemVisual(e, "opacity")
        }),
        i.setStyle(h.getModel("lineStyle").getLineStyle()),
        i.hoverStyle = c.getModel("lineStyle").getLineStyle();
        var d = h.get("smooth");
        d && !0 === d && (d = .4),
        i.setShape({
            smooth: d
        })
    },
    u(Eh, Zw),
    Mr.extend({
        type: "pie",
        init: function() {
            var t = new Zw;
            this._sectorGroup = t
        },
        render: function(t, e, i, n) {
            if (!n || n.from !== this.uid) {
                var o = t.getData(),
                a = this._data,
                r = this.group,
                s = e.get("animation"),
                l = !a,
                u = t.get("animationType"),
                h = v(Oh, this.uid, t, s, i),
                c = t.get("selectedMode");
                if (o.diff(a).add(function(t) {
                    var e = new Eh(o, t);
                    l && "scale" !== u && e.eachChild(function(t) {
                        t.stopAnimation(!0)
                    }),
                    c && e.on("click", h),
                    o.setItemGraphicEl(t, e),
                    r.add(e)
                }).update(function(t, e) {
                    var i = a.getItemGraphicEl(e);
                    i.updateData(o, t),
                    i.off("click"),
                    c && i.on("click", h),
                    r.add(i),
                    o.setItemGraphicEl(t, i)
                }).remove(function(t) {
                    var e = a.getItemGraphicEl(t);
                    r.remove(e)
                }).execute(), s && l && o.count() > 0 && "scale" !== u) {
                    var d = o.getItemLayout(0),
                    f = Math.max(i.getWidth(), i.getHeight()) / 2,
                    p = m(r.removeClipPath, r);
                    r.setClipPath(this._createClipPath(d.cx, d.cy, f, d.startAngle, d.clockwise, p, t))
                } else r.removeClipPath();
                this._data = o
            }
        },
        dispose: function() {},
        _createClipPath: function(t, e, i, n, o, a, r) {
            var s = new $S({
                shape: {
                    cx: t,
                    cy: e,
                    r0: 0,
                    r: i,
                    startAngle: n,
                    endAngle: n,
                    clockwise: o
                }
            });
            return So(s, {
                shape: {
                    endAngle: n + (o ? 1 : -1) * Math.PI * 2
                }
            },
            r, a),
            s
        },
        containPoint: function(t, e) {
            var i = e.getData().getItemLayout(0);
            if (i) {
                var n = t[0] - i.cx,
                o = t[1] - i.cy,
                a = Math.sqrt(n * n + o * o);
                return a <= i.r && a >= i.r0
            }
        }
    });
    var YD = function(t, e) {
        d(e,
        function(e) {
            e.update = "updateView",
            Ps(e,
            function(i, n) {
                var o = {};
                return n.eachComponent({
                    mainType: "series",
                    subType: t,
                    query: i
                },
                function(t) {
                    t[e.method] && t[e.method](i.name, i.dataIndex);
                    var n = t.getData();
                    n.each(function(e) {
                        var i = n.getName(e);
                        o[i] = t.isSelected(i) || !1
                    })
                }),
                {
                    name: i.name,
                    selected: o
                }
            })
        })
    },
    UD = function(t) {
        return {
            getTargetSeries: function(e) {
                var i = {},
                n = E();
                return e.eachSeriesByType(t,
                function(t) {
                    t.__paletteScope = i,
                    n.set(t.uid, t)
                }),
                n
            },
            reset: function(t, e) {
                var i = t.getRawData(),
                n = {},
                o = t.getData();
                o.each(function(t) {
                    var e = o.getRawIndex(t);
                    n[e] = t
                }),
                i.each(function(e) {
                    var a = n[e],
                    r = null != a && o.getItemVisual(a, "color", !0);
                    if (r) i.setItemVisual(e, "color", r);
                    else {
                        var s = i.getItemModel(e).get("itemStyle.color") || t.getColorFromPalette(i.getName(e) || e + "", t.__paletteScope, i.count());
                        i.setItemVisual(e, "color", s),
                        null != a && o.setItemVisual(a, "color", s)
                    }
                })
            }
        }
    },
    XD = function(t, e, i, n) {
        var o, a, r = t.getData(),
        s = [],
        l = !1;
        r.each(function(i) {
            var n, u, h, c, d = r.getItemLayout(i),
            f = r.getItemModel(i),
            p = f.getModel("label"),
            g = p.get("position") || f.get("emphasis.label.position"),
            m = f.getModel("labelLine"),
            v = m.get("length"),
            y = m.get("length2"),
            x = (d.startAngle + d.endAngle) / 2,
            _ = Math.cos(x),
            w = Math.sin(x);
            o = d.cx,
            a = d.cy;
            var b = "inside" === g || "inner" === g;
            if ("center" === g) n = d.cx,
            u = d.cy,
            c = "center";
            else {
                var S = (b ? (d.r + d.r0) / 2 * _: d.r * _) + o,
                M = (b ? (d.r + d.r0) / 2 * w: d.r * w) + a;
                if (n = S + 3 * _, u = M + 3 * w, !b) {
                    var I = S + _ * (v + e - d.r),
                    T = M + w * (v + e - d.r),
                    A = I + (_ < 0 ? -1 : 1) * y,
                    D = T;
                    n = A + (_ < 0 ? -5 : 5),
                    u = D,
                    h = [[S, M], [I, T], [A, D]]
                }
                c = b ? "center": _ > 0 ? "left": "right"
            }
            var C = p.getFont(),
            L = p.get("rotate") ? _ < 0 ? -x + Math.PI: -x: 0,
            k = De(t.getFormattedLabel(i, "normal") || r.getName(i), C, c, "top");
            l = !!L,
            d.label = {
                x: n,
                y: u,
                position: g,
                height: k.height,
                len: v,
                len2: y,
                linePoints: h,
                textAlign: c,
                verticalAlign: "middle",
                rotation: L,
                inside: b
            },
            b || s.push(d.label)
        }),
        !l && t.get("avoidLabelOverlap") && Bh(s, o, a, e, i, n)
    },
    qD = 2 * Math.PI,
    KD = Math.PI / 180,
    QD = function(t) {
        return {
            seriesType: t,
            reset: function(t, e) {
                var i = e.findComponents({
                    mainType: "legend"
                });
                if (i && i.length) {
                    var n = t.getData();
                    n.filterSelf(function(t) {
                        for (var e = n.getName(t), o = 0; o < i.length; o++) if (!i[o].isSelected(e)) return ! 1;
                        return ! 0
                    })
                }
            }
        }
    };
    YD("pie", [{
        type: "pieToggleSelect",
        event: "pieselectchanged",
        method: "toggleSelected"
    },
    {
        type: "pieSelect",
        event: "pieselected",
        method: "select"
    },
    {
        type: "pieUnSelect",
        event: "pieunselected",
        method: "unSelect"
    }]),
    zs(UD("pie")),
    Os(v(function(t, e, i, n) {
        e.eachSeriesByType(t,
        function(t) {
            var e = t.getData(),
            n = e.mapDimension("value"),
            o = t.get("center"),
            a = t.get("radius");
            y(a) || (a = [0, a]),
            y(o) || (o = [o, o]);
            var r = i.getWidth(),
            s = i.getHeight(),
            l = Math.min(r, s),
            u = Eo(o[0], r),
            h = Eo(o[1], s),
            c = Eo(a[0], l / 2),
            d = Eo(a[1], l / 2),
            f = -t.get("startAngle") * KD,
            p = t.get("minAngle") * KD,
            g = 0;
            e.each(n,
            function(t) { ! isNaN(t) && g++
            });
            var m = e.getSum(n),
            v = Math.PI / (m || g) * 2,
            x = t.get("clockwise"),
            _ = t.get("roseType"),
            w = t.get("stillShowZeroSum"),
            b = e.getDataExtent(n);
            b[0] = 0;
            var S = qD,
            M = 0,
            I = f,
            T = x ? 1 : -1;
            if (e.each(n,
            function(t, i) {
                var n;
                if (isNaN(t)) e.setItemLayout(i, {
                    angle: NaN,
                    startAngle: NaN,
                    endAngle: NaN,
                    clockwise: x,
                    cx: u,
                    cy: h,
                    r0: c,
                    r: _ ? NaN: d
                });
                else { (n = "area" !== _ ? 0 === m && w ? v: t * v: qD / g) < p ? (n = p, S -= p) : M += t;
                    var o = I + T * n;
                    e.setItemLayout(i, {
                        angle: n,
                        startAngle: I,
                        endAngle: o,
                        clockwise: x,
                        cx: u,
                        cy: h,
                        r0: c,
                        r: _ ? zo(t, b, [c, d]) : d
                    }),
                    I = o
                }
            }), S < qD && g) if (S <= .001) {
                var A = qD / g;
                e.each(n,
                function(t, i) {
                    if (!isNaN(t)) {
                        var n = e.getItemLayout(i);
                        n.angle = A,
                        n.startAngle = f + T * i * A,
                        n.endAngle = f + T * (i + 1) * A
                    }
                })
            } else v = S / M,
            I = f,
            e.each(n,
            function(t, i) {
                if (!isNaN(t)) {
                    var n = e.getItemLayout(i),
                    o = n.angle === p ? p: t * v;
                    n.startAngle = I,
                    n.endAngle = I + T * o,
                    I += T * o
                }
            });
            XD(t, d, r, s)
        })
    },
    "pie")),
    ks(QD("pie")),
    OI.extend({
        type: "series.scatter",
        dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"],
        getInitialData: function(t, e) {
            return dl(this.getSource(), this)
        },
        brushSelector: "point",
        getProgressive: function() {
            var t = this.option.progressive;
            return null == t ? this.option.large ? 5e3: this.get("progressive") : t
        },
        getProgressiveThreshold: function() {
            var t = this.option.progressiveThreshold;
            return null == t ? this.option.large ? 1e4: this.get("progressiveThreshold") : t
        },
        defaultOption: {
            coordinateSystem: "cartesian2d",
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            hoverAnimation: !0,
            symbolSize: 10,
            large: !1,
            largeThreshold: 2e3,
            itemStyle: {
                opacity: .8
            }
        }
    });
    var JD = Gn({
        shape: {
            points: null
        },
        symbolProxy: null,
        buildPath: function(t, e) {
            var i = e.points,
            n = e.size,
            o = this.symbolProxy,
            a = o.shape;
            if (! ((t.getContext ? t.getContext() : t) && n[0] < 4)) for (var r = 0; r < i.length;) {
                var s = i[r++],
                l = i[r++];
                isNaN(s) || isNaN(l) || (a.x = s - n[0] / 2, a.y = l - n[1] / 2, a.width = n[0], a.height = n[1], o.buildPath(t, a, !0))
            }
        },
        afterBrush: function(t) {
            var e = this.shape,
            i = e.points,
            n = e.size;
            if (n[0] < 4) {
                this.setTransform(t);
                for (var o = 0; o < i.length;) {
                    var a = i[o++],
                    r = i[o++];
                    isNaN(a) || isNaN(r) || t.fillRect(a - n[0] / 2, r - n[1] / 2, n[0], n[1])
                }
                this.restoreTransform(t)
            }
        },
        findDataIndex: function(t, e) {
            for (var i = this.shape,
            n = i.points,
            o = i.size,
            a = Math.max(o[0], 4), r = Math.max(o[1], 4), s = n.length / 2 - 1; s >= 0; s--) {
                var l = 2 * s,
                u = n[l] - a / 2,
                h = n[l + 1] - r / 2;
                if (t >= u && e >= h && t <= u + a && e <= h + r) return s
            }
            return - 1
        }
    }),
    $D = Vh.prototype;
    $D.isPersistent = function() {
        return ! this._incremental
    },
    $D.updateData = function(t) {
        this.group.removeAll();
        var e = new JD({
            rectHover: !0,
            cursor: "default"
        });
        e.setShape({
            points: t.getLayout("symbolPoints")
        }),
        this._setCommon(e, t),
        this.group.add(e),
        this._incremental = null
    },
    $D.updateLayout = function(t) {
        if (!this._incremental) {
            var e = t.getLayout("symbolPoints");
            this.group.eachChild(function(t) {
                if (null != t.startIndex) {
                    var i = 2 * (t.endIndex - t.startIndex),
                    n = 4 * t.startIndex * 2;
                    e = new Float32Array(e.buffer, n, i)
                }
                t.setShape("points", e)
            })
        }
    },
    $D.incrementalPrepareUpdate = function(t) {
        this.group.removeAll(),
        this._clearIncremental(),
        t.count() > 2e6 ? (this._incremental || (this._incremental = new Fn({
            silent: !0
        })), this.group.add(this._incremental)) : this._incremental = null
    },
    $D.incrementalUpdate = function(t, e) {
        var i;
        this._incremental ? (i = new JD, this._incremental.addDisplayable(i, !0)) : ((i = new JD({
            rectHover: !0,
            cursor: "default",
            startIndex: t.start,
            endIndex: t.end
        })).incremental = !0, this.group.add(i)),
        i.setShape({
            points: e.getLayout("symbolPoints")
        }),
        this._setCommon(i, e, !!this._incremental)
    },
    $D._setCommon = function(t, e, i) {
        var n = e.hostModel,
        o = e.getVisual("symbolSize");
        t.setShape("size", o instanceof Array ? o: [o, o]),
        t.symbolProxy = Yl(e.getVisual("symbol"), 0, 0, 0, 0),
        t.setColor = t.symbolProxy.setColor;
        var a = t.shape.size[0] < 4;
        t.useStyle(n.getModel("itemStyle").getItemStyle(a ? ["color", "shadowBlur", "shadowColor"] : ["color"]));
        var r = e.getVisual("color");
        r && t.setColor(r),
        i || (t.seriesIndex = n.seriesIndex, t.on("mousemove",
        function(e) {
            t.dataIndex = null;
            var i = t.findDataIndex(e.offsetX, e.offsetY);
            i >= 0 && (t.dataIndex = i + (t.startIndex || 0))
        }))
    },
    $D.remove = function() {
        this._clearIncremental(),
        this._incremental = null,
        this.group.removeAll()
    },
    $D._clearIncremental = function() {
        var t = this._incremental;
        t && t.clearDisplaybles()
    },
    Gs({
        type: "scatter",
        render: function(t, e, i) {
            var n = t.getData();
            this._updateSymbolDraw(n, t).updateData(n),
            this._finished = !0
        },
        incrementalPrepareRender: function(t, e, i) {
            var n = t.getData();
            this._updateSymbolDraw(n, t).incrementalPrepareUpdate(n),
            this._finished = !1
        },
        incrementalRender: function(t, e, i) {
            this._symbolDraw.incrementalUpdate(t, e.getData()),
            this._finished = t.end === e.getData().count()
        },
        updateTransform: function(t, e, i) {
            var n = t.getData();
            if (this.group.dirty(), !this._finished || n.count() > 1e4 || !this._symbolDraw.isPersistent()) return {
                update: !0
            };
            var o = cD().reset(t);
            o.progress && o.progress({
                start: 0,
                end: n.count()
            },
            n),
            this._symbolDraw.updateLayout(n)
        },
        _updateSymbolDraw: function(t, e) {
            var i = this._symbolDraw,
            n = e.pipelineContext.large;
            return i && n === this._isLargeDraw || (i && i.remove(), i = this._symbolDraw = n ? new Vh: new Su, this._isLargeDraw = n, this.group.removeAll()),
            this.group.add(i.group),
            i
        },
        remove: function(t, e) {
            this._symbolDraw && this._symbolDraw.remove(!0),
            this._symbolDraw = null
        },
        dispose: function() {}
    }),
    zs(hD("scatter", "circle")),
    Os(cD("scatter")),
    u(Fh, HA),
    Gh.prototype.getIndicatorAxes = function() {
        return this._indicatorAxes
    },
    Gh.prototype.dataToPoint = function(t, e) {
        var i = this._indicatorAxes[e];
        return this.coordToPoint(i.dataToCoord(t), e)
    },
    Gh.prototype.coordToPoint = function(t, e) {
        var i = this._indicatorAxes[e].angle;
        return [this.cx + t * Math.cos(i), this.cy - t * Math.sin(i)]
    },
    Gh.prototype.pointToData = function(t) {
        var e = t[0] - this.cx,
        i = t[1] - this.cy,
        n = Math.sqrt(e * e + i * i);
        e /= n,
        i /= n;
        for (var o, a = Math.atan2( - i, e), r = 1 / 0, s = -1, l = 0; l < this._indicatorAxes.length; l++) {
            var u = this._indicatorAxes[l],
            h = Math.abs(a - u.angle);
            h < r && (o = u, s = l, r = h)
        }
        return [s, +(o && o.coodToData(n))]
    },
    Gh.prototype.resize = function(t, e) {
        var i = t.get("center"),
        n = e.getWidth(),
        o = e.getHeight(),
        a = Math.min(n, o) / 2;
        this.cx = Eo(i[0], n),
        this.cy = Eo(i[1], o),
        this.startAngle = t.get("startAngle") * Math.PI / 180;
        var r = t.get("radius");
        "string" != typeof r && "number" != typeof r || (r = [0, r]),
        this.r0 = Eo(r[0], a),
        this.r = Eo(r[1], a),
        d(this._indicatorAxes,
        function(t, e) {
            t.setExtent(this.r0, this.r);
            var i = this.startAngle + e * Math.PI * 2 / this._indicatorAxes.length;
            i = Math.atan2(Math.sin(i), Math.cos(i)),
            t.angle = i
        },
        this)
    },
    Gh.prototype.update = function(t, e) {
        function i(t) {
            var e = Math.pow(10, Math.floor(Math.log(t) / Math.LN10)),
            i = t / e;
            return 2 === i ? i = 5 : i *= 2,
            i * e
        }
        var n = this._indicatorAxes,
        o = this._model;
        d(n,
        function(t) {
            t.scale.setExtent(1 / 0, -1 / 0)
        }),
        t.eachSeriesByType("radar",
        function(e, i) {
            if ("radar" === e.get("coordinateSystem") && t.getComponent("radar", e.get("radarIndex")) === o) {
                var a = e.getData();
                d(n,
                function(t) {
                    t.scale.unionExtentFromData(a, a.mapDimension(t.dim))
                })
            }
        },
        this);
        var a = o.get("splitNumber");
        d(n,
        function(t, e) {
            var n = El(t.scale, t.model);
            Bl(t.scale, t.model);
            var o = t.model,
            r = t.scale,
            s = o.getMin(),
            l = o.getMax(),
            u = r.getInterval();
            if (null != s && null != l) r.setExtent( + s, +l),
            r.setInterval((l - s) / a);
            else if (null != s) {
                var h;
                do {
                    h = s + u * a, r.setExtent( + s, h), r.setInterval(u), u = i(u)
                } while ( h < n [ 1 ] && isFinite(h) && isFinite(n[1]))
            } else if (null != l) {
                var c;
                do {
                    c = l - u * a, r.setExtent(c, +l), r.setInterval(u), u = i(u)
                } while ( c > n [ 0 ] && isFinite(c) && isFinite(n[0]))
            } else {
                r.getTicks().length - 1 > a && (u = i(u));
                var d = Math.round((n[0] + n[1]) / 2 / u) * u,
                f = Math.round(a / 2);
                r.setExtent(Ro(d - f * u), Ro(d + (a - f) * u)),
                r.setInterval(u)
            }
        })
    },
    Gh.dimensions = [],
    Gh.create = function(t, e) {
        var i = [];
        return t.eachComponent("radar",
        function(n) {
            var o = new Gh(n, t, e);
            i.push(o),
            n.coordinateSystem = o
        }),
        t.eachSeriesByType("radar",
        function(t) {
            "radar" === t.get("coordinateSystem") && (t.coordinateSystem = i[t.get("radarIndex") || 0])
        }),
        i
    },
    Ba.register("radar", Gh);
    var tC = vD.valueAxis,
    eC = (Bs({
        type: "radar",
        optionUpdated: function() {
            var t = this.get("boundaryGap"),
            e = this.get("splitNumber"),
            o = this.get("scale"),
            s = this.get("axisLine"),
            l = this.get("axisTick"),
            u = this.get("axisLabel"),
            h = this.get("name"),
            c = this.get("name.show"),
            d = this.get("name.formatter"),
            p = this.get("nameGap"),
            g = this.get("triggerEvent"),
            m = f(this.get("indicator") || [],
            function(f) {
                null != f.max && f.max > 0 && !f.min ? f.min = 0 : null != f.min && f.min < 0 && !f.max && (f.max = 0);
                var m = h;
                if (null != f.color && (m = r({
                    color: f.color
                },
                h)), f = n(i(f), {
                    boundaryGap: t,
                    splitNumber: e,
                    scale: o,
                    axisLine: s,
                    axisTick: l,
                    axisLabel: u,
                    name: f.text,
                    nameLocation: "end",
                    nameGap: p,
                    nameTextStyle: m,
                    triggerEvent: g
                },
                !1), c || (f.name = ""), "string" == typeof d) {
                    var v = f.name;
                    f.name = d.replace("{value}", null != v ? v: "")
                } else "function" == typeof d && (f.name = d(f.name, f));
                var y = a(new Lo(f, null, this.ecModel), CA);
                return y.mainType = "radar",
                y.componentIndex = this.componentIndex,
                y
            },
            this);
            this.getIndicatorModels = function() {
                return m
            }
        },
        defaultOption: {
            zlevel: 0,
            z: 0,
            center: ["50%", "50%"],
            radius: "75%",
            startAngle: 90,
            name: {
                show: !0
            },
            boundaryGap: [0, 0],
            splitNumber: 5,
            nameGap: 15,
            scale: !1,
            shape: "polygon",
            axisLine: n({
                lineStyle: {
                    color: "#bbb"
                }
            },
            tC.axisLine),
            axisLabel: Wh(tC.axisLabel, !1),
            axisTick: Wh(tC.axisTick, !1),
            splitLine: Wh(tC.splitLine, !0),
            splitArea: Wh(tC.splitArea, !0),
            indicator: []
        }
    }), ["axisLine", "axisTickLabel", "axisName"]);
    Vs({
        type: "radar",
        render: function(t, e, i) {
            this.group.removeAll(),
            this._buildAxes(t),
            this._buildSplitLineAndArea(t)
        },
        _buildAxes: function(t) {
            var e = t.coordinateSystem;
            d(f(e.getIndicatorAxes(),
            function(t) {
                return new ID(t.model, {
                    position: [e.cx, e.cy],
                    rotation: t.angle,
                    labelDirection: -1,
                    tickDirection: -1,
                    nameDirection: 1
                })
            }),
            function(t) {
                d(eC, t.add, t),
                this.group.add(t.getGroup())
            },
            this)
        },
        _buildSplitLineAndArea: function(t) {
            function e(t, e, i) {
                var n = i % e.length;
                return t[n] = t[n] || [],
                n
            }
            var i = t.coordinateSystem,
            n = i.getIndicatorAxes();
            if (n.length) {
                var o = t.get("shape"),
                a = t.getModel("splitLine"),
                s = t.getModel("splitArea"),
                l = a.getModel("lineStyle"),
                u = s.getModel("areaStyle"),
                h = a.get("show"),
                c = s.get("show"),
                p = l.get("color"),
                g = u.get("color");
                p = y(p) ? p: [p],
                g = y(g) ? g: [g];
                var m = [],
                v = [];
                if ("circle" === o) for (var x = n[0].getTicksCoords(), _ = i.cx, w = i.cy, b = 0; b < x.length; b++) h && m[D = e(m, p, b)].push(new KS({
                    shape: {
                        cx: _,
                        cy: w,
                        r: x[b].coord
                    }
                })),
                c && b < x.length - 1 && v[D = e(v, g, b)].push(new tM({
                    shape: {
                        cx: _,
                        cy: w,
                        r0: x[b].coord,
                        r: x[b + 1].coord
                    }
                }));
                else for (var S, M = f(n,
                function(t, e) {
                    var n = t.getTicksCoords();
                    return S = null == S ? n.length - 1 : Math.min(n.length - 1, S),
                    f(n,
                    function(t) {
                        return i.coordToPoint(t.coord, e)
                    })
                }), I = [], b = 0; b <= S; b++) {
                    for (var T = [], A = 0; A < n.length; A++) T.push(M[A][b]);
                    if (T[0] && T.push(T[0].slice()), h && m[D = e(m, p, b)].push(new oM({
                        shape: {
                            points: T
                        }
                    })), c && I) {
                        var D = e(v, g, b - 1);
                        v[D].push(new nM({
                            shape: {
                                points: T.concat(I)
                            }
                        }))
                    }
                    I = T.slice().reverse()
                }
                var C = l.getLineStyle(),
                L = u.getAreaStyle();
                d(v,
                function(t, e) {
                    this.group.add(xM(t, {
                        style: r({
                            stroke: "none",
                            fill: g[e % g.length]
                        },
                        L),
                        silent: !0
                    }))
                },
                this),
                d(m,
                function(t, e) {
                    this.group.add(xM(t, {
                        style: r({
                            fill: "none",
                            stroke: p[e % p.length]
                        },
                        C),
                        silent: !0
                    }))
                },
                this)
            }
        }
    });
    var iC = OI.extend({
        type: "series.radar",
        dependencies: ["radar"],
        init: function(t) {
            iC.superApply(this, "init", arguments),
            this.legendDataProvider = function() {
                return this.getRawData()
            }
        },
        getInitialData: function(t, e) {
            return WD(this, {
                generateCoord: "indicator_",
                generateCoordCount: 1 / 0
            })
        },
        formatTooltip: function(t) {
            var e = this.getData(),
            i = this.coordinateSystem.getIndicatorAxes(),
            n = this.getData().getName(t);
            return $o("" === n ? this.name: n) + "<br/>" + f(i,
            function(i, n) {
                var o = e.get(e.mapDimension(i.dim), t);
                return $o(i.name + " : " + o)
            }).join("<br />")
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "radar",
            legendHoverLink: !0,
            radarIndex: 0,
            lineStyle: {
                width: 2,
                type: "solid"
            },
            label: {
                position: "top"
            },
            symbol: "emptyCircle",
            symbolSize: 4
        }
    });
    Gs({
        type: "radar",
        render: function(t, e, n) {
            function o(t, e) {
                var i = t.getItemVisual(e, "symbol") || "circle",
                n = t.getItemVisual(e, "color");
                if ("none" !== i) {
                    var o = Hh(t.getItemVisual(e, "symbolSize")),
                    a = Yl(i, -1, -1, 2, 2, n);
                    return a.attr({
                        style: {
                            strokeNoScale: !0
                        },
                        z2: 100,
                        scale: [o[0] / 2, o[1] / 2]
                    }),
                    a
                }
            }
            function a(e, i, n, a, r, s) {
                n.removeAll();
                for (var l = 0; l < i.length - 1; l++) {
                    var u = o(a, r);
                    u && (u.__dimIdx = l, e[l] ? (u.attr("position", e[l]), bM[s ? "initProps": "updateProps"](u, {
                        position: i[l]
                    },
                    t, r)) : u.attr("position", i[l]), n.add(u))
                }
            }
            function s(t) {
                return f(t,
                function(t) {
                    return [l.cx, l.cy]
                })
            }
            var l = t.coordinateSystem,
            u = this.group,
            h = t.getData(),
            c = this._data;
            h.diff(c).add(function(e) {
                var i = h.getItemLayout(e);
                if (i) {
                    var n = new nM,
                    o = new oM,
                    r = {
                        shape: {
                            points: i
                        }
                    };
                    n.shape.points = s(i),
                    o.shape.points = s(i),
                    So(n, r, t, e),
                    So(o, r, t, e);
                    var l = new Zw,
                    u = new Zw;
                    l.add(o),
                    l.add(n),
                    l.add(u),
                    a(o.shape.points, i, u, h, e, !0),
                    h.setItemGraphicEl(e, l)
                }
            }).update(function(e, i) {
                var n = c.getItemGraphicEl(i),
                o = n.childAt(0),
                r = n.childAt(1),
                s = n.childAt(2),
                l = {
                    shape: {
                        points: h.getItemLayout(e)
                    }
                };
                l.shape.points && (a(o.shape.points, l.shape.points, s, h, e, !1), bo(o, l, t), bo(r, l, t), h.setItemGraphicEl(e, n))
            }).remove(function(t) {
                u.remove(c.getItemGraphicEl(t))
            }).execute(),
            h.eachItemGraphicEl(function(t, e) {
                function n() {
                    l.attr("ignore", m)
                }
                function o() {
                    l.attr("ignore", g)
                }
                var a = h.getItemModel(e),
                s = t.childAt(0),
                l = t.childAt(1),
                c = t.childAt(2),
                d = h.getItemVisual(e, "color");
                u.add(t),
                s.useStyle(r(a.getModel("lineStyle").getLineStyle(), {
                    fill: "none",
                    stroke: d
                })),
                s.hoverStyle = a.getModel("emphasis.lineStyle").getLineStyle();
                var f = a.getModel("areaStyle"),
                p = a.getModel("emphasis.areaStyle"),
                g = f.isEmpty() && f.parentModel.isEmpty(),
                m = p.isEmpty() && p.parentModel.isEmpty();
                m = m && g,
                l.ignore = g,
                l.useStyle(r(f.getAreaStyle(), {
                    fill: d,
                    opacity: .7
                })),
                l.hoverStyle = p.getAreaStyle();
                var v = a.getModel("itemStyle").getItemStyle(["color"]),
                y = a.getModel("emphasis.itemStyle").getItemStyle(),
                x = a.getModel("label"),
                _ = a.getModel("emphasis.label");
                c.eachChild(function(t) {
                    t.setStyle(v),
                    t.hoverStyle = i(y),
                    co(t.style, t.hoverStyle, x, _, {
                        labelFetcher: h.hostModel,
                        labelDataIndex: e,
                        labelDimIndex: t.__dimIdx,
                        defaultText: h.get(h.dimensions[t.__dimIdx], e),
                        autoColor: d,
                        isRectText: !0
                    })
                }),
                t.off("mouseover").off("mouseout").off("normal").off("emphasis"),
                t.on("emphasis", n).on("mouseover", n).on("normal", o).on("mouseout", o),
                uo(t)
            }),
            this._data = h
        },
        remove: function() {
            this.group.removeAll(),
            this._data = null
        },
        dispose: function() {}
    }),
    zs(UD("radar")),
    zs(hD("radar", "circle")),
    Os(function(t) {
        t.eachSeriesByType("radar",
        function(t) {
            var e = t.getData(),
            i = [],
            n = t.coordinateSystem;
            if (n) {
                for (var o = n.getIndicatorAxes(), a = 0; a < o.length; a++) e.each(e.mapDimension(o[a].dim),
                function(t, e) {
                    i[e] = i[e] || [],
                    i[e][a] = n.dataToPoint(t, a)
                });
                e.each(function(t) {
                    i[t][0] && i[t].push(i[t][0].slice()),
                    e.setItemLayout(t, i[t])
                })
            }
        })
    }),
    ks(QD("radar")),
    Ls(function(t) {
        var e = t.polar;
        if (e) {
            y(e) || (e = [e]);
            var i = [];
            d(e,
            function(e, n) {
                e.indicator ? (e.type && !e.shape && (e.shape = e.type), t.radar = t.radar || [], y(t.radar) || (t.radar = [t.radar]), t.radar.push(e)) : i.push(e)
            }),
            t.polar = i
        }
        d(t.series,
        function(t) {
            t && "radar" === t.type && t.polarIndex && (t.radarIndex = t.polarIndex)
        })
    });
    var nC = $;
    h(Zh, mw),
    jh.prototype = {
        constructor: jh,
        type: "view",
        dimensions: ["x", "y"],
        setBoundingRect: function(t, e, i, n) {
            return this._rect = new ue(t, e, i, n),
            this._rect
        },
        getBoundingRect: function() {
            return this._rect
        },
        setViewRect: function(t, e, i, n) {
            this.transformTo(t, e, i, n),
            this._viewRect = new ue(t, e, i, n)
        },
        transformTo: function(t, e, i, n) {
            var o = this.getBoundingRect(),
            a = this._rawTransformable;
            a.transform = o.calculateTransform(new ue(t, e, i, n)),
            a.decomposeTransform(),
            this._updateTransform()
        },
        setCenter: function(t) {
            t && (this._center = t, this._updateCenterAndZoom())
        },
        setZoom: function(t) {
            t = t || 1;
            var e = this.zoomLimit;
            e && (null != e.max && (t = Math.min(e.max, t)), null != e.min && (t = Math.max(e.min, t))),
            this._zoom = t,
            this._updateCenterAndZoom()
        },
        getDefaultCenter: function() {
            var t = this.getBoundingRect();
            return [t.x + t.width / 2, t.y + t.height / 2]
        },
        getCenter: function() {
            return this._center || this.getDefaultCenter()
        },
        getZoom: function() {
            return this._zoom || 1
        },
        getRoamTransform: function() {
            return this._roamTransformable.getLocalTransform()
        },
        _updateCenterAndZoom: function() {
            var t = this._rawTransformable.getLocalTransform(),
            e = this._roamTransformable,
            i = this.getDefaultCenter(),
            n = this.getCenter(),
            o = this.getZoom();
            n = $([], n, t),
            i = $([], i, t),
            e.origin = n,
            e.position = [i[0] - n[0], i[1] - n[1]],
            e.scale = [o, o],
            this._updateTransform()
        },
        _updateTransform: function() {
            var t = this._roamTransformable,
            e = this._rawTransformable;
            e.parent = t,
            t.updateTransform(),
            e.updateTransform(),
            yt(this.transform || (this.transform = []), e.transform || mt()),
            this._rawTransform = e.getLocalTransform(),
            this.invTransform = this.invTransform || [],
            St(this.invTransform, this.transform),
            this.decomposeTransform()
        },
        getViewRect: function() {
            return this._viewRect
        },
        getViewRectAfterRoam: function() {
            var t = this.getBoundingRect().clone();
            return t.applyTransform(this.transform),
            t
        },
        dataToPoint: function(t, e, i) {
            var n = e ? this._rawTransform: this.transform;
            return i = i || [],
            n ? nC(i, t, n) : F(i, t)
        },
        pointToData: function(t) {
            var e = this.invTransform;
            return e ? nC([], t, e) : [t[0], t[1]]
        },
        convertToPixel: v(Yh, "dataToPoint"),
        convertFromPixel: v(Yh, "pointToData"),
        containPoint: function(t) {
            return this.getViewRectAfterRoam().contain(t[0], t[1])
        }
    },
    h(jh, mw);
    for (var oC = [126, 25], aC = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, .7], [52, .7], [56, 7.7], [59, .7], [64, .7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]], rC = 0; rC < aC.length; rC++) for (var sC = 0; sC < aC[rC].length; sC++) aC[rC][sC][0] /= 10.5,
    aC[rC][sC][1] /= -14,
    aC[rC][sC][0] += oC[0],
    aC[rC][sC][1] += oC[1];
    var lC = function(t, e) {
        "china" === t && e.push(new ql("南海诸岛", f(aC,
        function(t) {
            return {
                type: "polygon",
                exterior: t
            }
        }), oC))
    },
    uC = {
        "南海诸岛": [32, 80],
        "广州": [0, -10],
        "香港": [10, 5],
        "澳门": [ - 10, 10],
        "天津": [5, 5]
    },
    hC = function(t, e) {
        if ("china" === t) {
            var i = uC[e.name];
            if (i) {
                var n = e.center;
                n[0] += i[0] / 10.5,
                n[1] += -i[1] / 14
            }
        }
    },
    cC = {
        Russia: [100, 60],
        "United States": [ - 99, 38],
        "United States of America": [ - 99, 38]
    },
    dC = function(t, e) {
        if ("world" === t) {
            var i = cC[e.name];
            if (i) {
                var n = e.center;
                n[0] = i[0],
                n[1] = i[1]
            }
        }
    },
    fC = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]],
    pC = function(t, e) {
        "china" === t && "台湾" === e.name && e.geometries.push({
            type: "polygon",
            exterior: fC[0]
        })
    },
    gC = Bi(),
    mC = {
        load: function(t, e) {
            var i = gC(e).parsed;
            if (i) return i;
            var n, o = e.specialAreas || {},
            a = e.geoJSON;
            try {
                n = a ? FA(a) : []
            } catch(t) {
                throw new Error("Invalid geoJson format\n" + t.message)
            }
            return d(n,
            function(e) {
                var i = e.name;
                hC(t, e),
                dC(t, e),
                pC(t, e);
                var n = o[i];
                n && e.transformTo(n.left, n.top, n.width, n.height)
            }),
            lC(t, n),
            gC(e).parsed = {
                regions: n,
                boundingRect: Uh(n)
            }
        }
    },
    vC = Bi(),
    yC = {
        geoJSON: mC,
        svg: {
            load: function(t, e) {
                var i = vC(e).originRoot;
                if (i) return {
                    root: i,
                    boundingRect: vC(e).boundingRect
                };
                var n = Xh(e);
                return vC(e).originRoot = n.root,
                vC(e).boundingRect = n.boundingRect,
                n
            },
            makeGraphic: function(t, e, i) {
                var n = vC(e),
                o = n.rootMap || (n.rootMap = E()),
                a = o.get(i);
                if (a) return a;
                var r = n.originRoot,
                s = n.boundingRect;
                return n.originRootHostKey ? a = Xh(e, s).root: (n.originRootHostKey = i, a = r),
                o.set(i, a)
            },
            removeGraphic: function(t, e, i) {
                var n = vC(e),
                o = n.rootMap;
                o && o.removeKey(i),
                i === n.originRootHostKey && (n.originRootHostKey = null)
            }
        }
    },
    xC = {
        load: function(t, e) {
            var i, n = [],
            o = E(),
            a = E();
            return d(Kh(t),
            function(r) {
                var s = yC[r.type].load(t, r);
                d(s.regions,
                function(t) {
                    var i = t.name;
                    e && e.hasOwnProperty(i) && (t = t.cloneShallow(i = e[i])),
                    n.push(t),
                    o.set(i, t),
                    a.set(i, t.center)
                });
                var l = s.boundingRect;
                l && (i ? i.union(l) : i = l.clone())
            }),
            {
                regions: n,
                regionsMap: o,
                nameCoordMap: a,
                boundingRect: i || new ue(0, 0, 0, 0)
            }
        },
        makeGraphic: qh("makeGraphic"),
        removeGraphic: qh("removeGraphic")
    };
    Qh.prototype = {
        constructor: Qh,
        type: "geo",
        dimensions: ["lng", "lat"],
        containCoord: function(t) {
            for (var e = this.regions,
            i = 0; i < e.length; i++) if (e[i].contain(t)) return ! 0;
            return ! 1
        },
        transformTo: function(t, e, i, n) {
            var o = this.getBoundingRect(),
            a = this._invertLongitute;
            o = o.clone(),
            a && (o.y = -o.y - o.height);
            var r = this._rawTransformable;
            if (r.transform = o.calculateTransform(new ue(t, e, i, n)), r.decomposeTransform(), a) {
                var s = r.scale;
                s[1] = -s[1]
            }
            r.updateTransform(),
            this._updateTransform()
        },
        getRegion: function(t) {
            return this._regionsMap.get(t)
        },
        getRegionByCoord: function(t) {
            for (var e = this.regions,
            i = 0; i < e.length; i++) if (e[i].contain(t)) return e[i]
        },
        addGeoCoord: function(t, e) {
            this._nameCoordMap.set(t, e)
        },
        getGeoCoord: function(t) {
            return this._nameCoordMap.get(t)
        },
        getBoundingRect: function() {
            return this._rect
        },
        dataToPoint: function(t, e, i) {
            if ("string" == typeof t && (t = this.getGeoCoord(t)), t) return jh.prototype.dataToPoint.call(this, t, e, i)
        },
        convertToPixel: v(Jh, "dataToPoint"),
        convertFromPixel: v(Jh, "pointToData")
    },
    h(Qh, jh);
    var _C = {
        dimensions: Qh.prototype.dimensions,
        create: function(t, e) {
            var i = [];
            t.eachComponent("geo",
            function(t, n) {
                var o = t.get("map"),
                a = t.get("aspectScale"),
                r = !0,
                s = pT.retrieveMap(o);
                s && s[0] && "svg" === s[0].type ? (null == a && (a = 1), r = !1) : null == a && (a = .75);
                var l = new Qh(o + n, o, t.get("nameMap"), r);
                l.aspectScale = a,
                l.zoomLimit = t.get("scaleLimit"),
                i.push(l),
                tc(l, t),
                t.coordinateSystem = l,
                l.model = t,
                l.resize = $h,
                l.resize(t, e)
            }),
            t.eachSeries(function(t) {
                if ("geo" === t.get("coordinateSystem")) {
                    var e = t.get("geoIndex") || 0;
                    t.coordinateSystem = i[e]
                }
            });
            var n = {};
            return t.eachSeriesByType("map",
            function(t) {
                if (!t.getHostGeoModel()) {
                    var e = t.getMapType();
                    n[e] = n[e] || [],
                    n[e].push(t)
                }
            }),
            d(n,
            function(t, n) {
                var a = new Qh(n, n, o(f(t,
                function(t) {
                    return t.get("nameMap")
                })));
                a.zoomLimit = T.apply(null, f(t,
                function(t) {
                    return t.get("scaleLimit")
                })),
                i.push(a),
                a.resize = $h,
                a.aspectScale = t[0].get("aspectScale"),
                a.resize(t[0], e),
                d(t,
                function(t) {
                    t.coordinateSystem = a,
                    tc(a, t)
                })
            }),
            i
        },
        getFilledRegions: function(t, e, i) {
            for (var n = (t || []).slice(), o = E(), a = 0; a < n.length; a++) o.set(n[a].name, n[a]);
            return d(xC.load(e, i).regions,
            function(t) {
                var e = t.name; ! o.get(e) && n.push({
                    name: e
                })
            }),
            n
        }
    };
    Ns("geo", _C);
    var wC = OI.extend({
        type: "series.map",
        dependencies: ["geo"],
        layoutMode: "box",
        needsDrawMap: !1,
        seriesGroup: [],
        init: function(t) {
            wC.superApply(this, "init", arguments),
            this.updateSelectedMap(this._createSelectableList())
        },
        getInitialData: function(t) {
            return WD(this, ["value"])
        },
        mergeOption: function(t) {
            wC.superApply(this, "mergeOption", arguments),
            this.updateSelectedMap(this._createSelectableList())
        },
        _createSelectableList: function() {
            for (var t = this.getRawData(), e = t.mapDimension("value"), i = [], n = 0, o = t.count(); n < o; n++) i.push({
                name: t.getName(n),
                value: t.get(e, n),
                selected: cr(t, n, "selected")
            });
            return i = _C.getFilledRegions(i, this.getMapType(), this.option.nameMap)
        },
        getHostGeoModel: function() {
            var t = this.option.geoIndex;
            return null != t ? this.dependentModels.geo[t] : null
        },
        getMapType: function() {
            return (this.getHostGeoModel() || this).option.map
        },
        _fillOption: function(t, e) {},
        getRawValue: function(t) {
            var e = this.getData();
            return e.get(e.mapDimension("value"), t)
        },
        getRegionModel: function(t) {
            var e = this.getData();
            return e.getItemModel(e.indexOfName(t))
        },
        formatTooltip: function(t) {
            for (var e = this.getData(), i = Qo(this.getRawValue(t)), n = e.getName(t), o = this.seriesGroup, a = [], r = 0; r < o.length; r++) {
                var s = o[r].originalData.indexOfName(n),
                l = e.mapDimension("value");
                isNaN(o[r].originalData.get(l, s)) || a.push($o(o[r].name))
            }
            return a.join(", ") + "<br />" + $o(n + " : " + i)
        },
        getTooltipPosition: function(t) {
            if (null != t) {
                var e = this.getData().getName(t),
                i = this.coordinateSystem,
                n = i.getRegion(e);
                return n && i.dataToPoint(n.center)
            }
        },
        setZoom: function(t) {
            this.option.zoom = t
        },
        setCenter: function(t) {
            this.option.center = t
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "geo",
            map: "",
            left: "center",
            top: "center",
            aspectScale: .75,
            showLegendSymbol: !0,
            dataRangeHoverLink: !0,
            boundingCoords: null,
            center: null,
            zoom: 1,
            scaleLimit: null,
            label: {
                show: !1,
                color: "#000"
            },
            itemStyle: {
                borderWidth: .5,
                borderColor: "#444",
                areaColor: "#eee"
            },
            emphasis: {
                label: {
                    show: !0,
                    color: "rgb(100,0,0)"
                },
                itemStyle: {
                    areaColor: "rgba(255,215,0,0.8)"
                }
            }
        }
    });
    h(wC, HD);
    var bC = "\0_ec_interaction_mutex";
    Ps({
        type: "takeGlobalCursor",
        event: "globalCursorTaken",
        update: "update"
    },
    function() {}),
    h(ac, aw);
    var SC = {
        axisPointer: 1,
        tooltip: 1,
        brush: 1
    };
    _c.prototype = {
        constructor: _c,
        draw: function(t, e, i, n, o) {
            var a = "geo" === t.mainType,
            r = t.getData && t.getData();
            a && e.eachComponent({
                mainType: "series",
                subType: "map"
            },
            function(e) {
                r || e.getHostGeoModel() !== t || (r = e.getData())
            });
            var s = t.coordinateSystem;
            this._updateBackground(s);
            var l = this._regionsGroup,
            u = this.group,
            h = s.scale,
            c = {
                position: s.position,
                scale: h
            }; ! l.childAt(0) || o ? u.attr(c) : bo(u, c, t),
            l.removeAll();
            var f = ["itemStyle"],
            p = ["emphasis", "itemStyle"],
            g = ["label"],
            m = ["emphasis", "label"],
            v = E();
            d(s.regions,
            function(e) {
                var i = v.get(e.name) || v.set(e.name, new Zw),
                n = new hM({
                    shape: {
                        paths: []
                    }
                });
                i.add(n);
                var o, s = (C = t.getRegionModel(e.name) || t).getModel(f),
                u = C.getModel(p),
                c = vc(s),
                y = vc(u),
                x = C.getModel(g),
                _ = C.getModel(m);
                if (r) {
                    o = r.indexOfName(e.name);
                    var w = r.getItemVisual(o, "color", !0);
                    w && (c.fill = w)
                }
                d(e.geometries,
                function(t) {
                    if ("polygon" === t.type) {
                        n.shape.paths.push(new nM({
                            shape: {
                                points: t.exterior
                            }
                        }));
                        for (var e = 0; e < (t.interiors ? t.interiors.length: 0); e++) n.shape.paths.push(new nM({
                            shape: {
                                points: t.interiors[e]
                            }
                        }))
                    }
                }),
                n.setStyle(c),
                n.style.strokeNoScale = !0,
                n.culling = !0;
                var b = x.get("show"),
                S = _.get("show"),
                M = r && isNaN(r.get(r.mapDimension("value"), o)),
                I = r && r.getItemLayout(o);
                if (a || M && (b || S) || I && I.showLabel) {
                    var T, A = a ? e.name: o; (!r || o >= 0) && (T = t);
                    var D = new qS({
                        position: e.center.slice(),
                        scale: [1 / h[0], 1 / h[1]],
                        z2: 10,
                        silent: !0
                    });
                    co(D.style, D.hoverStyle = {},
                    x, _, {
                        labelFetcher: T,
                        labelDataIndex: A,
                        defaultText: e.name,
                        useInsideStyle: !1
                    },
                    {
                        textAlign: "center",
                        textVerticalAlign: "middle"
                    }),
                    i.add(D)
                }
                if (r) r.setItemGraphicEl(o, i);
                else {
                    var C = t.getRegionModel(e.name);
                    n.eventData = {
                        componentType: "geo",
                        componentIndex: t.componentIndex,
                        geoIndex: t.componentIndex,
                        name: e.name,
                        region: C && C.option || {}
                    }
                } (i.__regions || (i.__regions = [])).push(e),
                uo(i, y, {
                    hoverSilentOnTouch: !!t.get("selectedMode")
                }),
                l.add(i)
            }),
            this._updateController(t, e, i),
            yc(this, t, l, i, n),
            xc(t, l)
        },
        remove: function() {
            this._regionsGroup.removeAll(),
            this._backgroundGroup.removeAll(),
            this._controller.dispose(),
            this._mapName && xC.removeGraphic(this._mapName, this.uid),
            this._mapName = null,
            this._controllerHost = {}
        },
        _updateBackground: function(t) {
            var e = t.map;
            this._mapName !== e && d(xC.makeGraphic(e, this.uid),
            function(t) {
                this._backgroundGroup.add(t)
            },
            this),
            this._mapName = e
        },
        _updateController: function(t, e, i) {
            function n() {
                var e = {
                    type: "geoRoam",
                    componentType: l
                };
                return e[l + "Id"] = t.id,
                e
            }
            var o = t.coordinateSystem,
            r = this._controller,
            s = this._controllerHost;
            s.zoomLimit = t.get("scaleLimit"),
            s.zoom = o.getZoom(),
            r.enable(t.get("roam") || !1);
            var l = t.mainType;
            r.off("pan").on("pan",
            function(t) {
                this._mouseDownFlag = !1,
                pc(s, t.dx, t.dy),
                i.dispatchAction(a(n(), {
                    dx: t.dx,
                    dy: t.dy
                }))
            },
            this),
            r.off("zoom").on("zoom",
            function(t) {
                if (this._mouseDownFlag = !1, gc(s, t.scale, t.originX, t.originY), i.dispatchAction(a(n(), {
                    zoom: t.scale,
                    originX: t.originX,
                    originY: t.originY
                })), this._updateGroup) {
                    var e = this.group.scale;
                    this._regionsGroup.traverse(function(t) {
                        "text" === t.type && t.attr("scale", [1 / e[0], 1 / e[1]])
                    })
                }
            },
            this),
            r.setPointerChecker(function(e, n, a) {
                return o.getViewRectAfterRoam().contain(n, a) && !mc(e, i, t)
            })
        }
    },
    Gs({
        type: "map",
        render: function(t, e, i, n) {
            if (!n || "mapToggleSelect" !== n.type || n.from !== this.uid) {
                var o = this.group;
                if (o.removeAll(), !t.getHostGeoModel()) {
                    if (n && "geoRoam" === n.type && "series" === n.componentType && n.seriesId === t.id)(a = this._mapDraw) && o.add(a.group);
                    else if (t.needsDrawMap) {
                        var a = this._mapDraw || new _c(i, !0);
                        o.add(a.group),
                        a.draw(t, e, i, this, n),
                        this._mapDraw = a
                    } else this._mapDraw && this._mapDraw.remove(),
                    this._mapDraw = null;
                    t.get("showLegendSymbol") && e.getComponent("legend") && this._renderSymbols(t, e, i)
                }
            }
        },
        remove: function() {
            this._mapDraw && this._mapDraw.remove(),
            this._mapDraw = null,
            this.group.removeAll()
        },
        dispose: function() {
            this._mapDraw && this._mapDraw.remove(),
            this._mapDraw = null
        },
        _renderSymbols: function(t, e, i) {
            var n = t.originalData,
            o = this.group;
            n.each(n.mapDimension("value"),
            function(e, i) {
                if (!isNaN(e)) {
                    var a = n.getItemLayout(i);
                    if (a && a.point) {
                        var r = a.point,
                        s = a.offset,
                        l = new KS({
                            style: {
                                fill: t.getData().getVisual("color")
                            },
                            shape: {
                                cx: r[0] + 9 * s,
                                cy: r[1],
                                r: 3
                            },
                            silent: !0,
                            z2: s ? 8 : 10
                        });
                        if (!s) {
                            var u = t.mainSeries.getData(),
                            h = n.getName(i),
                            c = u.indexOfName(h),
                            d = n.getItemModel(i),
                            f = d.getModel("label"),
                            p = d.getModel("emphasis.label"),
                            g = u.getItemGraphicEl(c),
                            m = A(t.getFormattedLabel(i, "normal"), h),
                            v = A(t.getFormattedLabel(i, "emphasis"), m),
                            y = function() {
                                var t = fo({},
                                p, {
                                    text: p.get("show") ? v: null
                                },
                                {
                                    isRectText: !0,
                                    useInsideStyle: !1
                                },
                                !0);
                                l.style.extendFrom(t),
                                l.__mapOriginalZ2 = l.z2,
                                l.z2 += 1
                            },
                            x = function() {
                                fo(l.style, f, {
                                    text: f.get("show") ? m: null,
                                    textPosition: f.getShallow("position") || "bottom"
                                },
                                {
                                    isRectText: !0,
                                    useInsideStyle: !1
                                }),
                                null != l.__mapOriginalZ2 && (l.z2 = l.__mapOriginalZ2, l.__mapOriginalZ2 = null)
                            };
                            g.on("mouseover", y).on("mouseout", x).on("emphasis", y).on("normal", x),
                            x()
                        }
                        o.add(l)
                    }
                }
            })
        }
    }),
    Ps({
        type: "geoRoam",
        event: "geoRoam",
        update: "updateTransform"
    },
    function(t, e) {
        var i = t.componentType || "series";
        e.eachComponent({
            mainType: i,
            query: t
        },
        function(e) {
            var n = e.coordinateSystem;
            if ("geo" === n.type) {
                var o = wc(n, t, e.get("scaleLimit"));
                e.setCenter && e.setCenter(o.center),
                e.setZoom && e.setZoom(o.zoom),
                "series" === i && d(e.seriesGroup,
                function(t) {
                    t.setCenter(o.center),
                    t.setZoom(o.zoom)
                })
            }
        })
    }),
    Os(function(t) {
        var e = {};
        t.eachSeriesByType("map",
        function(i) {
            var n = i.getMapType();
            if (!i.getHostGeoModel() && !e[n]) {
                var o = {};
                d(i.seriesGroup,
                function(e) {
                    var i = e.coordinateSystem,
                    n = e.originalData;
                    e.get("showLegendSymbol") && t.getComponent("legend") && n.each(n.mapDimension("value"),
                    function(t, e) {
                        var a = n.getName(e),
                        r = i.getRegion(a);
                        if (r && !isNaN(t)) {
                            var s = o[a] || 0,
                            l = i.dataToPoint(r.center);
                            o[a] = s + 1,
                            n.setItemLayout(e, {
                                point: l,
                                offset: s
                            })
                        }
                    })
                });
                var a = i.getData();
                a.each(function(t) {
                    var e = a.getName(t),
                    i = a.getItemLayout(t) || {};
                    i.showLabel = !o[e],
                    a.setItemLayout(t, i)
                }),
                e[n] = !0
            }
        })
    }),
    zs(function(t) {
        t.eachSeriesByType("map",
        function(t) {
            var e = t.get("color"),
            i = t.getModel("itemStyle"),
            n = i.get("areaColor"),
            o = i.get("color") || e[t.seriesIndex % e.length];
            t.getData().setVisual({
                areaColor: n,
                color: o
            })
        })
    }),
    ks(IT.PROCESSOR.STATISTIC,
    function(t) {
        var e = {};
        t.eachSeriesByType("map",
        function(t) {
            var i = t.getHostGeoModel(),
            n = i ? "o" + i.id: "i" + t.getMapType(); (e[n] = e[n] || []).push(t)
        }),
        d(e,
        function(t, e) {
            for (var i = bc(f(t,
            function(t) {
                return t.getData()
            }), t[0].get("mapValueCalculation")), n = 0; n < t.length; n++) t[n].originalData = t[n].getData();
            for (n = 0; n < t.length; n++) t[n].seriesGroup = t,
            t[n].needsDrawMap = 0 === n && !t[n].getHostGeoModel(),
            t[n].setData(i.cloneShallow()),
            t[n].mainSeries = t[0]
        })
    }),
    Ls(function(t) {
        var e = [];
        d(t.series,
        function(t) {
            t && "map" === t.type && (e.push(t), t.map = t.map || t.mapType, r(t, t.mapLocation))
        })
    }),
    YD("map", [{
        type: "mapToggleSelect",
        event: "mapselectchanged",
        method: "toggleSelected"
    },
    {
        type: "mapSelect",
        event: "mapselected",
        method: "select"
    },
    {
        type: "mapUnSelect",
        event: "mapunselected",
        method: "unSelect"
    }]);
    var MC = d,
    IC = "\0__link_datas",
    TC = "\0__link_mainData",
    AC = function(t, e) {
        this.name = t || "",
        this.depth = 0,
        this.height = 0,
        this.parentNode = null,
        this.dataIndex = -1,
        this.children = [],
        this.viewChildren = [],
        this.hostTree = e
    };
    AC.prototype = {
        constructor: AC,
        isRemoved: function() {
            return this.dataIndex < 0
        },
        eachNode: function(t, e, i) {
            "function" == typeof t && (i = e, e = t, t = null),
            _(t = t || {}) && (t = {
                order: t
            });
            var n, o = t.order || "preorder",
            a = this[t.attr || "children"];
            "preorder" === o && (n = e.call(i, this));
            for (var r = 0; ! n && r < a.length; r++) a[r].eachNode(t, e, i);
            "postorder" === o && e.call(i, this)
        },
        updateDepthAndHeight: function(t) {
            var e = 0;
            this.depth = t;
            for (var i = 0; i < this.children.length; i++) {
                var n = this.children[i];
                n.updateDepthAndHeight(t + 1),
                n.height > e && (e = n.height)
            }
            this.height = e + 1
        },
        getNodeById: function(t) {
            if (this.getId() === t) return this;
            for (var e = 0,
            i = this.children,
            n = i.length; e < n; e++) {
                var o = i[e].getNodeById(t);
                if (o) return o
            }
        },
        contains: function(t) {
            if (t === this) return ! 0;
            for (var e = 0,
            i = this.children,
            n = i.length; e < n; e++) {
                var o = i[e].contains(t);
                if (o) return o
            }
        },
        getAncestors: function(t) {
            for (var e = [], i = t ? this: this.parentNode; i;) e.push(i),
            i = i.parentNode;
            return e.reverse(),
            e
        },
        getValue: function(t) {
            var e = this.hostTree.data;
            return e.get(e.getDimension(t || "value"), this.dataIndex)
        },
        setLayout: function(t, e) {
            this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, t, e)
        },
        getLayout: function() {
            return this.hostTree.data.getItemLayout(this.dataIndex)
        },
        getModel: function(t) {
            if (! (this.dataIndex < 0)) {
                var e, i = this.hostTree,
                n = i.data.getItemModel(this.dataIndex),
                o = this.getLevelModel();
                return o || 0 !== this.children.length && (0 === this.children.length || !1 !== this.isExpand) || (e = this.getLeavesModel()),
                n.getModel(t, (o || e || i.hostModel).getModel(t))
            }
        },
        getLevelModel: function() {
            return (this.hostTree.levelModels || [])[this.depth]
        },
        getLeavesModel: function() {
            return this.hostTree.leavesModel
        },
        setVisual: function(t, e) {
            this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, t, e)
        },
        getVisual: function(t, e) {
            return this.hostTree.data.getItemVisual(this.dataIndex, t, e)
        },
        getRawIndex: function() {
            return this.hostTree.data.getRawIndex(this.dataIndex)
        },
        getId: function() {
            return this.hostTree.data.getId(this.dataIndex)
        },
        isAncestorOf: function(t) {
            for (var e = t.parentNode; e;) {
                if (e === this) return ! 0;
                e = e.parentNode
            }
            return ! 1
        },
        isDescendantOf: function(t) {
            return t !== this && t.isAncestorOf(this)
        }
    },
    kc.prototype = {
        constructor: kc,
        type: "tree",
        eachNode: function(t, e, i) {
            this.root.eachNode(t, e, i)
        },
        getNodeByDataIndex: function(t) {
            var e = this.data.getRawIndex(t);
            return this._nodes[e]
        },
        getNodeByName: function(t) {
            return this.root.getNodeByName(t)
        },
        update: function() {
            for (var t = this.data,
            e = this._nodes,
            i = 0,
            n = e.length; i < n; i++) e[i].dataIndex = -1;
            for (var i = 0,
            n = t.count(); i < n; i++) e[t.getRawIndex(i)].dataIndex = i
        },
        clearLayouts: function() {
            this.data.clearItemLayouts()
        }
    },
    kc.createTree = function(t, e, i) {
        function n(t, e) {
            var i = t.value;
            r = Math.max(r, y(i) ? i.length: 1),
            a.push(t);
            var s = new AC(t.name, o);
            e ? Pc(s, e) : o.root = s,
            o._nodes.push(s);
            var l = t.children;
            if (l) for (var u = 0; u < l.length; u++) n(l[u], s)
        }
        var o = new kc(e, i.levels, i.leaves),
        a = [],
        r = 1;
        n(t),
        o.root.updateDepthAndHeight(0);
        var s = oA(a, {
            coordDimensions: ["value"],
            dimensionsCount: r
        }),
        l = new eA(s, e);
        return l.initData(a),
        Sc({
            mainData: l,
            struct: o,
            structAttr: "tree"
        }),
        o.update(),
        o
    },
    OI.extend({
        type: "series.tree",
        layoutInfo: null,
        layoutMode: "box",
        getInitialData: function(t) {
            var e = {
                name: t.name,
                children: t.data
            },
            i = t.leaves || {},
            n = {};
            n.leaves = i;
            var o = kc.createTree(e, this, n),
            a = 0;
            o.eachNode("preorder",
            function(t) {
                t.depth > a && (a = t.depth)
            });
            var r = t.expandAndCollapse && t.initialTreeDepth >= 0 ? t.initialTreeDepth: a;
            return o.root.eachNode("preorder",
            function(t) {
                var e = t.hostTree.data.getRawDataItem(t.dataIndex);
                t.isExpand = e && null != e.collapsed ? !e.collapsed: t.depth <= r
            }),
            o.data
        },
        getOrient: function() {
            var t = this.get("orient");
            return "horizontal" === t ? t = "LR": "vertical" === t && (t = "TB"),
            t
        },
        setZoom: function(t) {
            this.option.zoom = t
        },
        setCenter: function(t) {
            this.option.center = t
        },
        formatTooltip: function(t) {
            for (var e = this.getData().tree, i = e.root.children[0], n = e.getNodeByDataIndex(t), o = n.getValue(), a = n.name; n && n !== i;) a = n.parentNode.name + "." + a,
            n = n.parentNode;
            return $o(a + (isNaN(o) || null == o ? "": " : " + o))
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "view",
            left: "12%",
            top: "12%",
            right: "12%",
            bottom: "12%",
            layout: "orthogonal",
            roam: !1,
            nodeScaleRatio: .4,
            center: null,
            zoom: 1,
            orient: "LR",
            symbol: "emptyCircle",
            symbolSize: 7,
            expandAndCollapse: !0,
            initialTreeDepth: 2,
            lineStyle: {
                color: "#ccc",
                width: 1.5,
                curveness: .5
            },
            itemStyle: {
                color: "lightsteelblue",
                borderColor: "#c23531",
                borderWidth: 1.5
            },
            label: {
                show: !0,
                color: "#555"
            },
            leaves: {
                label: {
                    show: !0
                }
            },
            animationEasing: "linear",
            animationDuration: 700,
            animationDurationUpdate: 1e3
        }
    }),
    Gs({
        type: "tree",
        init: function(t, e) {
            this._oldTree,
            this._mainGroup = new Zw,
            this._controller = new ac(e.getZr()),
            this._controllerHost = {
                target: this.group
            },
            this.group.add(this._mainGroup)
        },
        render: function(t, e, i, n) {
            var o = t.getData(),
            a = t.layoutInfo,
            r = this._mainGroup,
            s = t.get("layout");
            "radial" === s ? r.attr("position", [a.x + a.width / 2, a.y + a.height / 2]) : r.attr("position", [a.x, a.y]),
            this._updateViewCoordSys(t),
            this._updateController(t, e, i);
            var l = this._data,
            u = {
                expandAndCollapse: t.get("expandAndCollapse"),
                layout: s,
                orient: t.getOrient(),
                curvature: t.get("lineStyle.curveness"),
                symbolRotate: t.get("symbolRotate"),
                symbolOffset: t.get("symbolOffset"),
                hoverAnimation: t.get("hoverAnimation"),
                useNameLabel: !0,
                fadeIn: !0
            };
            o.diff(l).add(function(e) {
                Yc(o, e) && Xc(o, e, null, r, t, u)
            }).update(function(e, i) {
                var n = l.getItemGraphicEl(i);
                Yc(o, e) ? Xc(o, e, n, r, t, u) : n && qc(l, i, n, r, t, u)
            }).remove(function(e) {
                var i = l.getItemGraphicEl(e);
                i && qc(l, e, i, r, t, u)
            }).execute(),
            this._nodeScaleRatio = t.get("nodeScaleRatio"),
            this._updateNodeAndLinkScale(t),
            !0 === u.expandAndCollapse && o.eachItemGraphicEl(function(e, n) {
                e.off("click").on("click",
                function() {
                    i.dispatchAction({
                        type: "treeExpandAndCollapse",
                        seriesId: t.id,
                        dataIndex: n
                    })
                })
            }),
            this._data = o
        },
        _updateViewCoordSys: function(t) {
            var e = t.getData(),
            i = [];
            e.each(function(t) {
                var n = e.getItemLayout(t); ! n || isNaN(n.x) || isNaN(n.y) || i.push([ + n.x, +n.y])
            });
            var n = [],
            o = [];
            dn(i, n, o),
            o[0] - n[0] == 0 && (o[0] += 1, n[0] -= 1),
            o[1] - n[1] == 0 && (o[1] += 1, n[1] -= 1);
            var a = t.coordinateSystem = new jh;
            a.zoomLimit = t.get("scaleLimit"),
            a.setBoundingRect(n[0], n[1], o[0] - n[0], o[1] - n[1]),
            a.setCenter(t.get("center")),
            a.setZoom(t.get("zoom")),
            this.group.attr({
                position: a.position,
                scale: a.scale
            }),
            this._viewCoordSys = a
        },
        _updateController: function(t, e, i) {
            var n = this._controller,
            o = this._controllerHost,
            a = this.group;
            n.setPointerChecker(function(e, n, o) {
                var r = a.getBoundingRect();
                return r.applyTransform(a.transform),
                r.contain(n, o) && !mc(e, i, t)
            }),
            n.enable(t.get("roam")),
            o.zoomLimit = t.get("scaleLimit"),
            o.zoom = t.coordinateSystem.getZoom(),
            n.off("pan").off("zoom").on("pan",
            function(e) {
                pc(o, e.dx, e.dy),
                i.dispatchAction({
                    seriesId: t.id,
                    type: "treeRoam",
                    dx: e.dx,
                    dy: e.dy
                })
            },
            this).on("zoom",
            function(e) {
                gc(o, e.scale, e.originX, e.originY),
                i.dispatchAction({
                    seriesId: t.id,
                    type: "treeRoam",
                    zoom: e.scale,
                    originX: e.originX,
                    originY: e.originY
                }),
                this._updateNodeAndLinkScale(t)
            },
            this)
        },
        _updateNodeAndLinkScale: function(t) {
            var e = t.getData(),
            i = this._getNodeGlobalScale(t),
            n = [i, i];
            e.eachItemGraphicEl(function(t, e) {
                t.attr("scale", n)
            })
        },
        _getNodeGlobalScale: function(t) {
            var e = t.coordinateSystem;
            if ("view" !== e.type) return 1;
            var i = this._nodeScaleRatio,
            n = e.scale,
            o = n && n[0] || 1;
            return ((e.getZoom() - 1) * i + 1) / o
        },
        dispose: function() {
            this._controller && this._controller.dispose(),
            this._controllerHost = {}
        },
        remove: function() {
            this._mainGroup.removeAll(),
            this._data = null
        }
    }),
    Ps({
        type: "treeExpandAndCollapse",
        event: "treeExpandAndCollapse",
        update: "update"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "tree",
            query: t
        },
        function(e) {
            var i = t.dataIndex,
            n = e.getData().tree.getNodeByDataIndex(i);
            n.isExpand = !n.isExpand
        })
    }),
    Ps({
        type: "treeRoam",
        event: "treeRoam",
        update: "none"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "tree",
            query: t
        },
        function(e) {
            var i = wc(e.coordinateSystem, t);
            e.setCenter && e.setCenter(i.center),
            e.setZoom && e.setZoom(i.zoom)
        })
    }),
    zs(hD("tree", "circle")),
    Os(function(t, e) {
        t.eachSeriesByType("tree",
        function(t) {
            $c(t, e)
        })
    }),
    OI.extend({
        type: "series.treemap",
        layoutMode: "box",
        dependencies: ["grid", "polar"],
        _viewRoot: null,
        defaultOption: {
            progressive: 0,
            hoverLayerThreshold: 1 / 0,
            left: "center",
            top: "middle",
            right: null,
            bottom: null,
            width: "80%",
            height: "80%",
            sort: !0,
            clipWindow: "origin",
            squareRatio: .5 * (1 + Math.sqrt(5)),
            leafDepth: null,
            drillDownIcon: "▶",
            zoomToNodeRatio: .1024,
            roam: !0,
            nodeClick: "zoomToNode",
            animation: !0,
            animationDurationUpdate: 900,
            animationEasing: "quinticInOut",
            breadcrumb: {
                show: !0,
                height: 22,
                left: "center",
                top: "bottom",
                emptyItemWidth: 25,
                itemStyle: {
                    color: "rgba(0,0,0,0.7)",
                    borderColor: "rgba(255,255,255,0.7)",
                    borderWidth: 1,
                    shadowColor: "rgba(150,150,150,1)",
                    shadowBlur: 3,
                    shadowOffsetX: 0,
                    shadowOffsetY: 0,
                    textStyle: {
                        color: "#fff"
                    }
                },
                emphasis: {
                    textStyle: {}
                }
            },
            label: {
                show: !0,
                distance: 0,
                padding: 5,
                position: "inside",
                color: "#fff",
                ellipsis: !0
            },
            upperLabel: {
                show: !1,
                position: [0, "50%"],
                height: 20,
                color: "#fff",
                ellipsis: !0,
                verticalAlign: "middle"
            },
            itemStyle: {
                color: null,
                colorAlpha: null,
                colorSaturation: null,
                borderWidth: 0,
                gapWidth: 0,
                borderColor: "#fff",
                borderColorSaturation: null
            },
            emphasis: {
                upperLabel: {
                    show: !0,
                    position: [0, "50%"],
                    color: "#fff",
                    ellipsis: !0,
                    verticalAlign: "middle"
                }
            },
            visualDimension: 0,
            visualMin: null,
            visualMax: null,
            color: [],
            colorAlpha: null,
            colorSaturation: null,
            colorMappingBy: "index",
            visibleMin: 10,
            childrenVisibleMin: null,
            levels: []
        },
        getInitialData: function(t, e) {
            var i = {
                name: t.name,
                children: t.data
            };
            od(i);
            var n = t.levels || [];
            n = t.levels = ad(n, e);
            var o = {};
            return o.levels = n,
            kc.createTree(i, this, o).data
        },
        optionUpdated: function() {
            this.resetViewRoot()
        },
        formatTooltip: function(t) {
            var e = this.getData(),
            i = this.getRawValue(t),
            n = Qo(y(i) ? i[0] : i);
            return $o(e.getName(t) + ": " + n)
        },
        getDataParams: function(t) {
            var e = OI.prototype.getDataParams.apply(this, arguments),
            i = this.getData().tree.getNodeByDataIndex(t);
            return e.treePathInfo = nd(i, this),
            e
        },
        setLayoutInfo: function(t) {
            this.layoutInfo = this.layoutInfo || {},
            a(this.layoutInfo, t)
        },
        mapIdToIndex: function(t) {
            var e = this._idIndexMap;
            e || (e = this._idIndexMap = E(), this._idIndexMapCount = 0);
            var i = e.get(t);
            return null == i && e.set(t, i = this._idIndexMapCount++),
            i
        },
        getViewRoot: function() {
            return this._viewRoot
        },
        resetViewRoot: function(t) {
            t ? this._viewRoot = t: t = this._viewRoot;
            var e = this.getRawData().tree.root;
            t && (t === e || e.contains(t)) || (this._viewRoot = e)
        }
    });
    var DC = 5;
    rd.prototype = {
        constructor: rd,
        render: function(t, e, i, n) {
            var o = t.getModel("breadcrumb"),
            a = this.group;
            if (a.removeAll(), o.get("show") && i) {
                var r = o.getModel("itemStyle"),
                s = r.getModel("textStyle"),
                l = {
                    pos: {
                        left: o.get("left"),
                        right: o.get("right"),
                        top: o.get("top"),
                        bottom: o.get("bottom")
                    },
                    box: {
                        width: e.getWidth(),
                        height: e.getHeight()
                    },
                    emptyItemWidth: o.get("emptyItemWidth"),
                    totalWidth: 0,
                    renderList: []
                };
                this._prepare(i, l, s),
                this._renderContent(t, l, r, s, n),
                ua(a, l.pos, l.box)
            }
        },
        _prepare: function(t, e, i) {
            for (var n = t; n; n = n.parentNode) {
                var o = n.getModel().get("name"),
                a = i.getTextRect(o),
                r = Math.max(a.width + 16, e.emptyItemWidth);
                e.totalWidth += r + 8,
                e.renderList.push({
                    node: n,
                    text: o,
                    width: r
                })
            }
        },
        _renderContent: function(t, e, i, n, o) {
            for (var a = 0,
            s = e.emptyItemWidth,
            l = t.get("breadcrumb.height"), u = sa(e.pos, e.box), h = e.totalWidth, c = e.renderList, d = c.length - 1; d >= 0; d--) {
                var f = c[d],
                p = f.node,
                g = f.width,
                m = f.text;
                h > u.width && (h -= g - s, g = s, m = null);
                var y = new nM({
                    shape: {
                        points: sd(a, 0, g, l, d === c.length - 1, 0 === d)
                    },
                    style: r(i.getItemStyle(), {
                        lineJoin: "bevel",
                        text: m,
                        textFill: n.getTextColor(),
                        textFont: n.getFont()
                    }),
                    z: 10,
                    onclick: v(o, p)
                });
                this.group.add(y),
                ld(y, t, p),
                a += g + 8
            }
        },
        remove: function() {
            this.group.removeAll()
        }
    };
    var CC = m,
    LC = Zw,
    kC = aM,
    PC = d,
    NC = ["label"],
    OC = ["emphasis", "label"],
    zC = ["upperLabel"],
    EC = ["emphasis", "upperLabel"],
    RC = 10,
    BC = 1,
    VC = 2,
    FC = Wb([["fill", "color"], ["stroke", "strokeColor"], ["lineWidth", "strokeWidth"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]),
    GC = function(t) {
        var e = FC(t);
        return e.stroke = e.fill = e.lineWidth = null,
        e
    };
    Gs({
        type: "treemap",
        init: function(t, e) {
            this._containerGroup,
            this._storage = {
                nodeGroup: [],
                background: [],
                content: []
            },
            this._oldTree,
            this._breadcrumb,
            this._controller,
            this._state = "ready"
        },
        render: function(t, e, i, n) {
            if (! (l(e.findComponents({
                mainType: "series",
                subType: "treemap",
                query: n
            }), t) < 0)) {
                this.seriesModel = t,
                this.api = i,
                this.ecModel = e;
                var o = td(n, ["treemapZoomToNode", "treemapRootToNode"], t),
                a = n && n.type,
                r = t.layoutInfo,
                s = !this._oldTree,
                u = this._storage,
                h = "treemapRootToNode" === a && o && u ? {
                    rootNodeGroup: u.nodeGroup[o.node.getRawIndex()],
                    direction: n.direction
                }: null,
                c = this._giveContainerGroup(r),
                d = this._doRender(c, t, h);
                s || a && "treemapZoomToNode" !== a && "treemapRootToNode" !== a ? d.renderFinally() : this._doAnimation(c, d, t, h),
                this._resetController(i),
                this._renderBreadcrumb(t, i, o)
            }
        },
        _giveContainerGroup: function(t) {
            var e = this._containerGroup;
            return e || (e = this._containerGroup = new LC, this._initEvents(e), this.group.add(e)),
            e.attr("position", [t.x, t.y]),
            e
        },
        _doRender: function(t, e, i) {
            function n(t, e, i, o, a) {
                function r(t) {
                    return t.getId()
                }
                function s(r, s) {
                    var l = null != r ? t[r] : null,
                    u = null != s ? e[s] : null,
                    c = h(l, u, i, a);
                    c && n(l && l.viewChildren || [], u && u.viewChildren || [], c, o, a + 1)
                }
                o ? (e = t, PC(t,
                function(t, e) { ! t.isRemoved() && s(e, e)
                })) : new Hs(e, t, r, r).add(s).update(s).remove(v(s, null)).execute()
            }
            var o = e.getData().tree,
            a = this._oldTree,
            r = {
                nodeGroup: [],
                background: [],
                content: []
            },
            s = {
                nodeGroup: [],
                background: [],
                content: []
            },
            l = this._storage,
            u = [],
            h = v(hd, e, s, l, i, r, u);
            n(o.root ? [o.root] : [], a && a.root ? [a.root] : [], t, o === a || !a, 0);
            var c = function(t) {
                var e = {
                    nodeGroup: [],
                    background: [],
                    content: []
                };
                return t && PC(t,
                function(t, i) {
                    var n = e[i];
                    PC(t,
                    function(t) {
                        t && (n.push(t), t.__tmWillDelete = 1)
                    })
                }),
                e
            } (l);
            return this._oldTree = o,
            this._storage = s,
            {
                lastsForAnimation: r,
                willDeleteEls: c,
                renderFinally: function() {
                    PC(c,
                    function(t) {
                        PC(t,
                        function(t) {
                            t.parent && t.parent.remove(t)
                        })
                    }),
                    PC(u,
                    function(t) {
                        t.invisible = !0,
                        t.dirty()
                    })
                }
            }
        },
        _doAnimation: function(t, e, i, n) {
            if (i.get("animation")) {
                var o = i.get("animationDurationUpdate"),
                r = i.get("animationEasing"),
                s = ud();
                PC(e.willDeleteEls,
                function(t, e) {
                    PC(t,
                    function(t, i) {
                        if (!t.invisible) {
                            var a, l = t.parent;
                            if (n && "drillDown" === n.direction) a = l === n.rootNodeGroup ? {
                                shape: {
                                    x: 0,
                                    y: 0,
                                    width: l.__tmNodeWidth,
                                    height: l.__tmNodeHeight
                                },
                                style: {
                                    opacity: 0
                                }
                            }: {
                                style: {
                                    opacity: 0
                                }
                            };
                            else {
                                var u = 0,
                                h = 0;
                                l.__tmWillDelete || (u = l.__tmNodeWidth / 2, h = l.__tmNodeHeight / 2),
                                a = "nodeGroup" === e ? {
                                    position: [u, h],
                                    style: {
                                        opacity: 0
                                    }
                                }: {
                                    shape: {
                                        x: u,
                                        y: h,
                                        width: 0,
                                        height: 0
                                    },
                                    style: {
                                        opacity: 0
                                    }
                                }
                            }
                            a && s.add(t, a, o, r)
                        }
                    })
                }),
                PC(this._storage,
                function(t, i) {
                    PC(t,
                    function(t, n) {
                        var l = e.lastsForAnimation[i][n],
                        u = {};
                        l && ("nodeGroup" === i ? l.old && (u.position = t.position.slice(), t.attr("position", l.old)) : (l.old && (u.shape = a({},
                        t.shape), t.setShape(l.old)), l.fadein ? (t.setStyle("opacity", 0), u.style = {
                            opacity: 1
                        }) : 1 !== t.style.opacity && (u.style = {
                            opacity: 1
                        })), s.add(t, u, o, r))
                    })
                },
                this),
                this._state = "animating",
                s.done(CC(function() {
                    this._state = "ready",
                    e.renderFinally()
                },
                this)).start()
            }
        },
        _resetController: function(t) {
            var e = this._controller;
            e || ((e = this._controller = new ac(t.getZr())).enable(this.seriesModel.get("roam")), e.on("pan", CC(this._onPan, this)), e.on("zoom", CC(this._onZoom, this)));
            var i = new ue(0, 0, t.getWidth(), t.getHeight());
            e.setPointerChecker(function(t, e, n) {
                return i.contain(e, n)
            })
        },
        _clearController: function() {
            var t = this._controller;
            t && (t.dispose(), t = null)
        },
        _onPan: function(t) {
            if ("animating" !== this._state && (Math.abs(t.dx) > 3 || Math.abs(t.dy) > 3)) {
                var e = this.seriesModel.getData().tree.root;
                if (!e) return;
                var i = e.getLayout();
                if (!i) return;
                this.api.dispatchAction({
                    type: "treemapMove",
                    from: this.uid,
                    seriesId: this.seriesModel.id,
                    rootRect: {
                        x: i.x + t.dx,
                        y: i.y + t.dy,
                        width: i.width,
                        height: i.height
                    }
                })
            }
        },
        _onZoom: function(t) {
            var e = t.originX,
            i = t.originY;
            if ("animating" !== this._state) {
                var n = this.seriesModel.getData().tree.root;
                if (!n) return;
                var o = n.getLayout();
                if (!o) return;
                var a = new ue(o.x, o.y, o.width, o.height),
                r = this.seriesModel.layoutInfo;
                e -= r.x,
                i -= r.y;
                var s = mt();
                _t(s, s, [ - e, -i]),
                bt(s, s, [t.scale, t.scale]),
                _t(s, s, [e, i]),
                a.applyTransform(s),
                this.api.dispatchAction({
                    type: "treemapRender",
                    from: this.uid,
                    seriesId: this.seriesModel.id,
                    rootRect: {
                        x: a.x,
                        y: a.y,
                        width: a.width,
                        height: a.height
                    }
                })
            }
        },
        _initEvents: function(t) {
            t.on("click",
            function(t) {
                if ("ready" === this._state) {
                    var e = this.seriesModel.get("nodeClick", !0);
                    if (e) {
                        var i = this.findTarget(t.offsetX, t.offsetY);
                        if (i) {
                            var n = i.node;
                            if (n.getLayout().isLeafRoot) this._rootToNode(i);
                            else if ("zoomToNode" === e) this._zoomToNode(i);
                            else if ("link" === e) {
                                var o = n.hostTree.data.getItemModel(n.dataIndex),
                                a = o.get("link", !0),
                                r = o.get("target", !0) || "blank";
                                a && window.open(a, r)
                            }
                        }
                    }
                }
            },
            this)
        },
        _renderBreadcrumb: function(t, e, i) {
            i || (i = null != t.get("leafDepth", !0) ? {
                node: t.getViewRoot()
            }: this.findTarget(e.getWidth() / 2, e.getHeight() / 2)) || (i = {
                node: t.getData().tree.root
            }),
            (this._breadcrumb || (this._breadcrumb = new rd(this.group))).render(t, e, i.node, CC(function(e) {
                "animating" !== this._state && (id(t.getViewRoot(), e) ? this._rootToNode({
                    node: e
                }) : this._zoomToNode({
                    node: e
                }))
            },
            this))
        },
        remove: function() {
            this._clearController(),
            this._containerGroup && this._containerGroup.removeAll(),
            this._storage = {
                nodeGroup: [],
                background: [],
                content: []
            },
            this._state = "ready",
            this._breadcrumb && this._breadcrumb.remove()
        },
        dispose: function() {
            this._clearController()
        },
        _zoomToNode: function(t) {
            this.api.dispatchAction({
                type: "treemapZoomToNode",
                from: this.uid,
                seriesId: this.seriesModel.id,
                targetNode: t.node
            })
        },
        _rootToNode: function(t) {
            this.api.dispatchAction({
                type: "treemapRootToNode",
                from: this.uid,
                seriesId: this.seriesModel.id,
                targetNode: t.node
            })
        },
        findTarget: function(t, e) {
            var i;
            return this.seriesModel.getViewRoot().eachNode({
                attr: "viewChildren",
                order: "preorder"
            },
            function(n) {
                var o = this._storage.background[n.getRawIndex()];
                if (o) {
                    var a = o.transformCoordToLocal(t, e),
                    r = o.shape;
                    if (! (r.x <= a[0] && a[0] <= r.x + r.width && r.y <= a[1] && a[1] <= r.y + r.height)) return ! 1;
                    i = {
                        node: n,
                        offsetX: a[0],
                        offsetY: a[1]
                    }
                }
            },
            this),
            i
        }
    });
    for (var WC = ["treemapZoomToNode", "treemapRender", "treemapMove"], HC = 0; HC < WC.length; HC++) Ps({
        type: WC[HC],
        update: "updateView"
    },
    function() {});
    Ps({
        type: "treemapRootToNode",
        update: "updateView"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "treemap",
            query: t
        },
        function(e, i) {
            var n = td(t, ["treemapZoomToNode", "treemapRootToNode"], e);
            if (n) {
                var o = e.getViewRoot();
                o && (t.direction = id(o, n.node) ? "rollUp": "drillDown"),
                e.resetViewRoot(n.node)
            }
        })
    });
    var ZC = d,
    jC = w,
    YC = -1,
    UC = function(t) {
        var e = t.mappingMethod,
        n = t.type,
        o = this.option = i(t);
        this.type = n,
        this.mappingMethod = e,
        this._normalizeData = qC[e];
        var a = XC[n];
        this.applyVisual = a.applyVisual,
        this.getColorMapper = a.getColorMapper,
        this._doMap = a._doMap[e],
        "piecewise" === e ? (pd(o), dd(o)) : "category" === e ? o.categories ? fd(o) : pd(o, !0) : (k("linear" !== e || o.dataExtent), pd(o))
    };
    UC.prototype = {
        constructor: UC,
        mapValueToVisual: function(t) {
            var e = this._normalizeData(t);
            return this._doMap(e, t)
        },
        getNormalizer: function() {
            return m(this._normalizeData, this)
        }
    };
    var XC = UC.visualHandlers = {
        color: {
            applyVisual: vd("color"),
            getColorMapper: function() {
                var t = this.option;
                return m("category" === t.mappingMethod ?
                function(t, e) {
                    return ! e && (t = this._normalizeData(t)),
                    yd.call(this, t)
                }: function(e, i, n) {
                    var o = !!n;
                    return ! i && (e = this._normalizeData(e)),
                    n = Wt(e, t.parsedVisual, n),
                    o ? n: Yt(n, "rgba")
                },
                this)
            },
            _doMap: {
                linear: function(t) {
                    return Yt(Wt(t, this.option.parsedVisual), "rgba")
                },
                category: yd,
                piecewise: function(t, e) {
                    var i = wd.call(this, e);
                    return null == i && (i = Yt(Wt(t, this.option.parsedVisual), "rgba")),
                    i
                },
                fixed: xd
            }
        },
        colorHue: gd(function(t, e) {
            return Zt(t, e)
        }),
        colorSaturation: gd(function(t, e) {
            return Zt(t, null, e)
        }),
        colorLightness: gd(function(t, e) {
            return Zt(t, null, null, e)
        }),
        colorAlpha: gd(function(t, e) {
            return jt(t, e)
        }),
        opacity: {
            applyVisual: vd("opacity"),
            _doMap: _d([0, 1])
        },
        liftZ: {
            applyVisual: vd("liftZ"),
            _doMap: {
                linear: xd,
                category: xd,
                piecewise: xd,
                fixed: xd
            }
        },
        symbol: {
            applyVisual: function(t, e, i) {
                var n = this.mapValueToVisual(t);
                if (_(n)) i("symbol", n);
                else if (jC(n)) for (var o in n) n.hasOwnProperty(o) && i(o, n[o])
            },
            _doMap: {
                linear: md,
                category: yd,
                piecewise: function(t, e) {
                    var i = wd.call(this, e);
                    return null == i && (i = md.call(this, t)),
                    i
                },
                fixed: xd
            }
        },
        symbolSize: {
            applyVisual: vd("symbolSize"),
            _doMap: _d([0, 1])
        }
    },
    qC = {
        linear: function(t) {
            return zo(t, this.option.dataExtent, [0, 1], !0)
        },
        piecewise: function(t) {
            var e = this.option.pieceList,
            i = UC.findPieceIndex(t, e, !0);
            if (null != i) return zo(i, [0, e.length - 1], [0, 1], !0)
        },
        category: function(t) {
            var e = this.option.categories ? this.option.categoryMap[t] : t;
            return null == e ? YC: e
        },
        fixed: B
    };
    UC.listVisualTypes = function() {
        var t = [];
        return d(XC,
        function(e, i) {
            t.push(i)
        }),
        t
    },
    UC.addVisualHandler = function(t, e) {
        XC[t] = e
    },
    UC.isValidType = function(t) {
        return XC.hasOwnProperty(t)
    },
    UC.eachVisual = function(t, e, i) {
        w(t) ? d(t, e, i) : e.call(i, t)
    },
    UC.mapVisual = function(t, e, i) {
        var n, o = y(t) ? [] : w(t) ? {}: (n = !0, null);
        return UC.eachVisual(t,
        function(t, a) {
            var r = e.call(i, t, a);
            n ? o = r: o[a] = r
        }),
        o
    },
    UC.retrieveVisuals = function(t) {
        var e, i = {};
        return t && ZC(XC,
        function(n, o) {
            t.hasOwnProperty(o) && (i[o] = t[o], e = !0)
        }),
        e ? i: null
    },
    UC.prepareVisualTypes = function(t) {
        if (jC(t)) {
            var e = [];
            ZC(t,
            function(t, i) {
                e.push(i)
            }),
            t = e
        } else {
            if (!y(t)) return [];
            t = t.slice()
        }
        return t.sort(function(t, e) {
            return "color" === e && "color" !== t && 0 === t.indexOf("color") ? 1 : -1
        }),
        t
    },
    UC.dependsOn = function(t, e) {
        return "color" === e ? !(!t || 0 !== t.indexOf(e)) : t === e
    },
    UC.findPieceIndex = function(t, e, i) {
        function n(e, i) {
            var n = Math.abs(e - t);
            n < a && (a = n, o = i)
        }
        for (var o, a = 1 / 0,
        r = 0,
        s = e.length; r < s; r++) {
            var l = e[r].value;
            if (null != l) {
                if (l === t || "string" == typeof l && l === t + "") return r;
                i && n(l, r)
            }
        }
        for (var r = 0,
        s = e.length; r < s; r++) {
            var u = e[r],
            h = u.interval,
            c = u.close;
            if (h) {
                if (h[0] === -1 / 0) {
                    if (Sd(c[1], t, h[1])) return r
                } else if (h[1] === 1 / 0) {
                    if (Sd(c[0], h[0], t)) return r
                } else if (Sd(c[0], h[0], t) && Sd(c[1], t, h[1])) return r;
                i && n(h[0], r),
                i && n(h[1], r)
            }
        }
        if (i) return t === 1 / 0 ? e.length - 1 : t === -1 / 0 ? 0 : o
    };
    var KC = y,
    QC = "itemStyle",
    JC = {
        seriesType: "treemap",
        reset: function(t, e, i, n) {
            var o = t.getData().tree,
            a = o.root,
            r = t.getModel(QC);
            a.isRemoved() || Md(a, {},
            f(o.levelModels,
            function(t) {
                return t ? t.get(QC) : null
            }), r, t.getViewRoot().getAncestors(), t)
        }
    },
    $C = Math.max,
    tL = Math.min,
    eL = T,
    iL = d,
    nL = ["itemStyle", "borderWidth"],
    oL = ["itemStyle", "gapWidth"],
    aL = ["upperLabel", "show"],
    rL = ["upperLabel", "height"],
    sL = {
        seriesType: "treemap",
        reset: function(t, e, i, n) {
            var o = i.getWidth(),
            r = i.getHeight(),
            s = t.option,
            l = la(t.getBoxLayoutParams(), {
                width: i.getWidth(),
                height: i.getHeight()
            }),
            u = s.size || [],
            h = Eo(eL(l.width, u[0]), o),
            c = Eo(eL(l.height, u[1]), r),
            d = n && n.type,
            f = td(n, ["treemapZoomToNode", "treemapRootToNode"], t),
            p = "treemapRender" === d || "treemapMove" === d ? n.rootRect: null,
            g = t.getViewRoot(),
            m = ed(g);
            if ("treemapMove" !== d) {
                var v = "treemapZoomToNode" === d ? Vd(t, f, g, h, c) : p ? [p.width, p.height] : [h, c],
                y = s.sort;
                y && "asc" !== y && "desc" !== y && (y = "desc");
                var x = {
                    squareRatio: s.squareRatio,
                    sort: y,
                    leafDepth: s.leafDepth
                };
                g.hostTree.clearLayouts(),
                _ = {
                    x: 0,
                    y: 0,
                    width: v[0],
                    height: v[1],
                    area: v[0] * v[1]
                },
                g.setLayout(_),
                Pd(g, x, !1, 0);
                var _ = g.getLayout();
                iL(m,
                function(t, e) {
                    var i = (m[e + 1] || g).getValue();
                    t.setLayout(a({
                        dataExtent: [i, i],
                        borderWidth: 0,
                        upperHeight: 0
                    },
                    _))
                })
            }
            var w = t.getData().tree.root;
            w.setLayout(Fd(l, p, f), !0),
            t.setLayoutInfo(l),
            Gd(w, new ue( - l.x, -l.y, o, r), m, g, 0)
        }
    };
    zs(JC),
    Os(sL);
    var lL = function(t) {
        this._directed = t || !1,
        this.nodes = [],
        this.edges = [],
        this._nodesMap = {},
        this._edgesMap = {},
        this.data,
        this.edgeData
    },
    uL = lL.prototype;
    uL.type = "graph",
    uL.isDirected = function() {
        return this._directed
    },
    uL.addNode = function(t, e) {
        t = t || "" + e;
        var i = this._nodesMap;
        if (!i[Hd(t)]) {
            var n = new Zd(t, e);
            return n.hostGraph = this,
            this.nodes.push(n),
            i[Hd(t)] = n,
            n
        }
    },
    uL.getNodeByIndex = function(t) {
        var e = this.data.getRawIndex(t);
        return this.nodes[e]
    },
    uL.getNodeById = function(t) {
        return this._nodesMap[Hd(t)]
    },
    uL.addEdge = function(t, e, i) {
        var n = this._nodesMap,
        o = this._edgesMap;
        if ("number" == typeof t && (t = this.nodes[t]), "number" == typeof e && (e = this.nodes[e]), Zd.isInstance(t) || (t = n[Hd(t)]), Zd.isInstance(e) || (e = n[Hd(e)]), t && e) {
            var a = t.id + "-" + e.id;
            if (!o[a]) {
                var r = new jd(t, e, i);
                return r.hostGraph = this,
                this._directed && (t.outEdges.push(r), e.inEdges.push(r)),
                t.edges.push(r),
                t !== e && e.edges.push(r),
                this.edges.push(r),
                o[a] = r,
                r
            }
        }
    },
    uL.getEdgeByIndex = function(t) {
        var e = this.edgeData.getRawIndex(t);
        return this.edges[e]
    },
    uL.getEdge = function(t, e) {
        Zd.isInstance(t) && (t = t.id),
        Zd.isInstance(e) && (e = e.id);
        var i = this._edgesMap;
        return this._directed ? i[t + "-" + e] : i[t + "-" + e] || i[e + "-" + t]
    },
    uL.eachNode = function(t, e) {
        for (var i = this.nodes,
        n = i.length,
        o = 0; o < n; o++) i[o].dataIndex >= 0 && t.call(e, i[o], o)
    },
    uL.eachEdge = function(t, e) {
        for (var i = this.edges,
        n = i.length,
        o = 0; o < n; o++) i[o].dataIndex >= 0 && i[o].node1.dataIndex >= 0 && i[o].node2.dataIndex >= 0 && t.call(e, i[o], o)
    },
    uL.breadthFirstTraverse = function(t, e, i, n) {
        if (Zd.isInstance(e) || (e = this._nodesMap[Hd(e)]), e) {
            for (var o = "out" === i ? "outEdges": "in" === i ? "inEdges": "edges", a = 0; a < this.nodes.length; a++) this.nodes[a].__visited = !1;
            if (!t.call(n, e, null)) for (var r = [e]; r.length;) for (var s = r.shift(), l = s[o], a = 0; a < l.length; a++) {
                var u = l[a],
                h = u.node1 === s ? u.node2: u.node1;
                if (!h.__visited) {
                    if (t.call(n, h, s)) return;
                    r.push(h),
                    h.__visited = !0
                }
            }
        }
    },
    uL.update = function() {
        for (var t = this.data,
        e = this.edgeData,
        i = this.nodes,
        n = this.edges,
        o = 0,
        a = i.length; o < a; o++) i[o].dataIndex = -1;
        for (var o = 0,
        a = t.count(); o < a; o++) i[t.getRawIndex(o)].dataIndex = o;
        e.filterSelf(function(t) {
            var i = n[e.getRawIndex(t)];
            return i.node1.dataIndex >= 0 && i.node2.dataIndex >= 0
        });
        for (var o = 0,
        a = n.length; o < a; o++) n[o].dataIndex = -1;
        for (var o = 0,
        a = e.count(); o < a; o++) n[e.getRawIndex(o)].dataIndex = o
    },
    uL.clone = function() {
        for (var t = new lL(this._directed), e = this.nodes, i = this.edges, n = 0; n < e.length; n++) t.addNode(e[n].id, e[n].dataIndex);
        for (n = 0; n < i.length; n++) {
            var o = i[n];
            t.addEdge(o.node1.id, o.node2.id, o.dataIndex)
        }
        return t
    },
    Zd.prototype = {
        constructor: Zd,
        degree: function() {
            return this.edges.length
        },
        inDegree: function() {
            return this.inEdges.length
        },
        outDegree: function() {
            return this.outEdges.length
        },
        getModel: function(t) {
            if (! (this.dataIndex < 0)) return this.hostGraph.data.getItemModel(this.dataIndex).getModel(t)
        }
    },
    jd.prototype.getModel = function(t) {
        if (! (this.dataIndex < 0)) return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(t)
    };
    var hL = function(t, e) {
        return {
            getValue: function(i) {
                var n = this[t][e];
                return n.get(n.getDimension(i || "value"), this.dataIndex)
            },
            setVisual: function(i, n) {
                this.dataIndex >= 0 && this[t][e].setItemVisual(this.dataIndex, i, n)
            },
            getVisual: function(i, n) {
                return this[t][e].getItemVisual(this.dataIndex, i, n)
            },
            setLayout: function(i, n) {
                this.dataIndex >= 0 && this[t][e].setItemLayout(this.dataIndex, i, n)
            },
            getLayout: function() {
                return this[t][e].getItemLayout(this.dataIndex)
            },
            getGraphicEl: function() {
                return this[t][e].getItemGraphicEl(this.dataIndex)
            },
            getRawIndex: function() {
                return this[t][e].getRawIndex(this.dataIndex)
            }
        }
    };
    h(Zd, hL("hostGraph", "data")),
    h(jd, hL("hostGraph", "edgeData")),
    lL.Node = Zd,
    lL.Edge = jd,
    Ui(Zd),
    Ui(jd);
    var cL = function(t, e, i, n, o) {
        for (var a = new lL(n), r = 0; r < t.length; r++) a.addNode(T(t[r].id, t[r].name, r), r);
        for (var s = [], u = [], h = 0, r = 0; r < e.length; r++) {
            var c = e[r],
            d = c.source,
            f = c.target;
            a.addEdge(d, f, h) && (u.push(c), s.push(T(c.id, d + " > " + f)), h++)
        }
        var p, g = i.get("coordinateSystem");
        if ("cartesian2d" === g || "polar" === g) p = dl(t, i);
        else {
            var m = Ba.get(g),
            v = m && "view" !== m.type ? m.dimensions || [] : [];
            l(v, "value") < 0 && v.concat(["value"]);
            var y = oA(t, {
                coordDimensions: v
            }); (p = new eA(y, i)).initData(t)
        }
        var x = new eA(["value"], i);
        return x.initData(u, s),
        o && o(p, x),
        Sc({
            mainData: p,
            struct: a,
            structAttr: "graph",
            datas: {
                node: p,
                edge: x
            },
            datasAttr: {
                node: "data",
                edge: "edgeData"
            }
        }),
        a.update(),
        a
    },
    dL = Fs({
        type: "series.graph",
        init: function(t) {
            dL.superApply(this, "init", arguments),
            this.legendDataProvider = function() {
                return this._categoriesData
            },
            this.fillDataTextStyle(t.edges || t.links),
            this._updateCategoriesData()
        },
        mergeOption: function(t) {
            dL.superApply(this, "mergeOption", arguments),
            this.fillDataTextStyle(t.edges || t.links),
            this._updateCategoriesData()
        },
        mergeDefaultAndTheme: function(t) {
            dL.superApply(this, "mergeDefaultAndTheme", arguments),
            Ci(t, ["edgeLabel"], ["show"])
        },
        getInitialData: function(t, e) {
            var i = t.edges || t.links || [],
            n = t.data || t.nodes || [],
            o = this;
            if (n && i) return cL(n, i, this, !0,
            function(t, i) {
                function n(t) {
                    return (t = this.parsePath(t)) && "label" === t[0] ? r: t && "emphasis" === t[0] && "label" === t[1] ? l: this.parentModel
                }
                t.wrapMethod("getItemModel",
                function(t) {
                    var e = o._categoriesModels[t.getShallow("category")];
                    return e && (e.parentModel = t.parentModel, t.parentModel = e),
                    t
                });
                var a = o.getModel("edgeLabel"),
                r = new Lo({
                    label: a.option
                },
                a.parentModel, e),
                s = o.getModel("emphasis.edgeLabel"),
                l = new Lo({
                    emphasis: {
                        label: s.option
                    }
                },
                s.parentModel, e);
                i.wrapMethod("getItemModel",
                function(t) {
                    return t.customizeGetParent(n),
                    t
                })
            }).data
        },
        getGraph: function() {
            return this.getData().graph
        },
        getEdgeData: function() {
            return this.getGraph().edgeData
        },
        getCategoriesData: function() {
            return this._categoriesData
        },
        formatTooltip: function(t, e, i) {
            if ("edge" === i) {
                var n = this.getData(),
                o = this.getDataParams(t, i),
                a = n.graph.getEdgeByIndex(t),
                r = n.getName(a.node1.dataIndex),
                s = n.getName(a.node2.dataIndex),
                l = [];
                return null != r && l.push(r),
                null != s && l.push(s),
                l = $o(l.join(" > ")),
                o.value && (l += " : " + $o(o.value)),
                l
            }
            return dL.superApply(this, "formatTooltip", arguments)
        },
        _updateCategoriesData: function() {
            var t = f(this.option.categories || [],
            function(t) {
                return null != t.value ? t: a({
                    value: 0
                },
                t)
            }),
            e = new eA(["value"], this);
            e.initData(t),
            this._categoriesData = e,
            this._categoriesModels = e.mapArray(function(t) {
                return e.getItemModel(t, !0)
            })
        },
        setZoom: function(t) {
            this.option.zoom = t
        },
        setCenter: function(t) {
            this.option.center = t
        },
        isAnimationEnabled: function() {
            return dL.superCall(this, "isAnimationEnabled") && !("force" === this.get("layout") && this.get("force.layoutAnimation"))
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "view",
            legendHoverLink: !0,
            hoverAnimation: !0,
            layout: null,
            focusNodeAdjacency: !1,
            circular: {
                rotateLabel: !1
            },
            force: {
                initLayout: null,
                repulsion: [0, 50],
                gravity: .1,
                edgeLength: 30,
                layoutAnimation: !0
            },
            left: "center",
            top: "center",
            symbol: "circle",
            symbolSize: 10,
            edgeSymbol: ["none", "none"],
            edgeSymbolSize: 10,
            edgeLabel: {
                position: "middle"
            },
            draggable: !1,
            roam: !1,
            center: null,
            zoom: 1,
            nodeScaleRatio: .6,
            label: {
                show: !1,
                formatter: "{b}"
            },
            itemStyle: {},
            lineStyle: {
                color: "#aaa",
                width: 1,
                curveness: 0,
                opacity: .5
            },
            emphasis: {
                label: {
                    show: !0
                }
            }
        }
    }),
    fL = rM.prototype,
    pL = lM.prototype,
    gL = Gn({
        type: "ec-line",
        style: {
            stroke: "#000",
            fill: null
        },
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            percent: 1,
            cpx1: null,
            cpy1: null
        },
        buildPath: function(t, e) { (Yd(e) ? fL: pL).buildPath(t, e)
        },
        pointAt: function(t) {
            return Yd(this.shape) ? fL.pointAt.call(this, t) : pL.pointAt.call(this, t)
        },
        tangentAt: function(t) {
            var e = this.shape,
            i = Yd(e) ? [e.x2 - e.x1, e.y2 - e.y1] : pL.tangentAt.call(this, t);
            return q(i, i)
        }
    }),
    mL = ["fromSymbol", "toSymbol"],
    vL = Qd.prototype;
    vL.beforeUpdate = function() {
        var t = this,
        e = t.childOfName("fromSymbol"),
        i = t.childOfName("toSymbol"),
        n = t.childOfName("label");
        if (e || i || !n.ignore) {
            for (var o = 1,
            a = this.parent; a;) a.scale && (o /= a.scale[0]),
            a = a.parent;
            var r = t.childOfName("line");
            if (this.__dirty || r.__dirty) {
                var s = r.shape.percent,
                l = r.pointAt(0),
                u = r.pointAt(s),
                h = j([], u, l);
                if (q(h, h), e && (e.attr("position", l), c = r.tangentAt(0), e.attr("rotation", Math.PI / 2 - Math.atan2(c[1], c[0])), e.attr("scale", [o * s, o * s])), i) {
                    i.attr("position", u);
                    var c = r.tangentAt(1);
                    i.attr("rotation", -Math.PI / 2 - Math.atan2(c[1], c[0])),
                    i.attr("scale", [o * s, o * s])
                }
                if (!n.ignore) {
                    n.attr("position", u);
                    var d, f, p, g = 5 * o;
                    if ("end" === n.__position) d = [h[0] * g + u[0], h[1] * g + u[1]],
                    f = h[0] > .8 ? "left": h[0] < -.8 ? "right": "center",
                    p = h[1] > .8 ? "top": h[1] < -.8 ? "bottom": "middle";
                    else if ("middle" === n.__position) {
                        var m = s / 2,
                        v = [(c = r.tangentAt(m))[1], -c[0]],
                        y = r.pointAt(m);
                        v[1] > 0 && (v[0] = -v[0], v[1] = -v[1]),
                        d = [y[0] + v[0] * g, y[1] + v[1] * g],
                        f = "center",
                        p = "bottom";
                        var x = -Math.atan2(c[1], c[0]);
                        u[0] < l[0] && (x = Math.PI + x),
                        n.attr("rotation", x)
                    } else d = [ - h[0] * g + l[0], -h[1] * g + l[1]],
                    f = h[0] > .8 ? "right": h[0] < -.8 ? "left": "center",
                    p = h[1] > .8 ? "bottom": h[1] < -.8 ? "top": "middle";
                    n.attr({
                        style: {
                            textVerticalAlign: n.__verticalAlign || p,
                            textAlign: n.__textAlign || f
                        },
                        position: d,
                        scale: [o, o]
                    })
                }
            }
        }
    },
    vL._createLine = function(t, e, i) {
        var n = t.hostModel,
        o = qd(t.getItemLayout(e));
        o.shape.percent = 0,
        So(o, {
            shape: {
                percent: 1
            }
        },
        n, e),
        this.add(o);
        var a = new qS({
            name: "label"
        });
        this.add(a),
        d(mL,
        function(i) {
            var n = Xd(i, t, e);
            this.add(n),
            this[Ud(i)] = t.getItemVisual(e, i)
        },
        this),
        this._updateCommonStl(t, e, i)
    },
    vL.updateData = function(t, e, i) {
        var n = t.hostModel,
        o = this.childOfName("line"),
        a = t.getItemLayout(e),
        r = {
            shape: {}
        };
        Kd(r.shape, a),
        bo(o, r, n, e),
        d(mL,
        function(i) {
            var n = t.getItemVisual(e, i),
            o = Ud(i);
            if (this[o] !== n) {
                this.remove(this.childOfName(i));
                var a = Xd(i, t, e);
                this.add(a)
            }
            this[o] = n
        },
        this),
        this._updateCommonStl(t, e, i)
    },
    vL._updateCommonStl = function(t, e, i) {
        var n = t.hostModel,
        o = this.childOfName("line"),
        a = i && i.lineStyle,
        s = i && i.hoverLineStyle,
        l = i && i.labelModel,
        u = i && i.hoverLabelModel;
        if (!i || t.hasItemOption) {
            var h = t.getItemModel(e);
            a = h.getModel("lineStyle").getLineStyle(),
            s = h.getModel("emphasis.lineStyle").getLineStyle(),
            l = h.getModel("label"),
            u = h.getModel("emphasis.label")
        }
        var c = t.getItemVisual(e, "color"),
        f = D(t.getItemVisual(e, "opacity"), a.opacity, 1);
        o.useStyle(r({
            strokeNoScale: !0,
            fill: "none",
            stroke: c,
            opacity: f
        },
        a)),
        o.hoverStyle = s,
        d(mL,
        function(t) {
            var e = this.childOfName(t);
            e && (e.setColor(c), e.setStyle({
                opacity: f
            }))
        },
        this);
        var p, g, m = l.getShallow("show"),
        v = u.getShallow("show"),
        y = this.childOfName("label");
        if ((m || v) && (p = c || "#000", null == (g = n.getFormattedLabel(e, "normal", t.dataType)))) {
            var x = n.getRawValue(e);
            g = null == x ? t.getName(e) : isFinite(x) ? Ro(x) : x
        }
        var _ = m ? g: null,
        w = v ? A(n.getFormattedLabel(e, "emphasis", t.dataType), g) : null,
        b = y.style;
        null == _ && null == w || (fo(y.style, l, {
            text: _
        },
        {
            autoColor: p
        }), y.__textAlign = b.textAlign, y.__verticalAlign = b.textVerticalAlign, y.__position = l.get("position") || "middle"),
        y.hoverStyle = null != w ? {
            text: w,
            textFill: u.getTextColor(!0),
            fontStyle: u.getShallow("fontStyle"),
            fontWeight: u.getShallow("fontWeight"),
            fontSize: u.getShallow("fontSize"),
            fontFamily: u.getShallow("fontFamily")
        }: {
            text: null
        },
        y.ignore = !m && !v,
        uo(this)
    },
    vL.highlight = function() {
        this.trigger("emphasis")
    },
    vL.downplay = function() {
        this.trigger("normal")
    },
    vL.updateLayout = function(t, e) {
        this.setLinePoints(t.getItemLayout(e))
    },
    vL.setLinePoints = function(t) {
        var e = this.childOfName("line");
        Kd(e.shape, t),
        e.dirty()
    },
    u(Qd, Zw);
    var yL = Jd.prototype;
    yL.isPersistent = function() {
        return ! 0
    },
    yL.updateData = function(t) {
        var e = this,
        i = e.group,
        n = e._lineData;
        e._lineData = t,
        n || i.removeAll();
        var o = ef(t);
        t.diff(n).add(function(i) {
            $d(e, t, i, o)
        }).update(function(i, a) {
            tf(e, n, t, a, i, o)
        }).remove(function(t) {
            i.remove(n.getItemGraphicEl(t))
        }).execute()
    },
    yL.updateLayout = function() {
        var t = this._lineData;
        t && t.eachItemGraphicEl(function(e, i) {
            e.updateLayout(t, i)
        },
        this)
    },
    yL.incrementalPrepareUpdate = function(t) {
        this._seriesScope = ef(t),
        this._lineData = null,
        this.group.removeAll()
    },
    yL.incrementalUpdate = function(t, e) {
        for (var i = t.start; i < t.end; i++) if (of(e.getItemLayout(i))) {
            var n = new this._ctor(e, i, this._seriesScope);
            n.traverse(function(t) {
                t.isGroup || (t.incremental = t.useHoverLayer = !0)
            }),
            this.group.add(n),
            e.setItemGraphicEl(i, n)
        }
    },
    yL.remove = function() {
        this._clearIncremental(),
        this._incremental = null,
        this.group.removeAll()
    },
    yL._clearIncremental = function() {
        var t = this._incremental;
        t && t.clearDisplaybles()
    };
    var xL = [],
    _L = [],
    wL = [],
    bL = rn,
    SL = iw,
    ML = Math.abs,
    IL = function(t, e) {
        function i(t) {
            var e = t.getVisual("symbolSize");
            return e instanceof Array && (e = (e[0] + e[1]) / 2),
            e
        }
        var n = [],
        o = hn,
        a = [[], [], []],
        r = [[], []],
        s = [];
        e /= 2,
        t.eachEdge(function(t, l) {
            var u = t.getLayout(),
            h = t.getVisual("fromSymbol"),
            c = t.getVisual("toSymbol");
            u.__original || (u.__original = [G(u[0]), G(u[1])], u[2] && u.__original.push(G(u[2])));
            var d = u.__original;
            if (null != u[2]) {
                if (F(a[0], d[0]), F(a[1], d[2]), F(a[2], d[1]), h && "none" !== h) {
                    var f = i(t.node1),
                    p = af(a, d[0], f * e);
                    o(a[0][0], a[1][0], a[2][0], p, n),
                    a[0][0] = n[3],
                    a[1][0] = n[4],
                    o(a[0][1], a[1][1], a[2][1], p, n),
                    a[0][1] = n[3],
                    a[1][1] = n[4]
                }
                if (c && "none" !== c) {
                    var f = i(t.node2),
                    p = af(a, d[1], f * e);
                    o(a[0][0], a[1][0], a[2][0], p, n),
                    a[1][0] = n[1],
                    a[2][0] = n[2],
                    o(a[0][1], a[1][1], a[2][1], p, n),
                    a[1][1] = n[1],
                    a[2][1] = n[2]
                }
                F(u[0], a[0]),
                F(u[1], a[2]),
                F(u[2], a[1])
            } else F(r[0], d[0]),
            F(r[1], d[1]),
            j(s, r[1], r[0]),
            q(s, s),
            h && "none" !== h && (f = i(t.node1), Z(r[0], r[0], s, f * e)),
            c && "none" !== c && (f = i(t.node2), Z(r[1], r[1], s, -f * e)),
            F(u[0], r[0]),
            F(u[1], r[1])
        })
    },
    TL = ["itemStyle", "opacity"],
    AL = ["lineStyle", "opacity"];
    Gs({
        type: "graph",
        init: function(t, e) {
            var i = new Su,
            n = new Jd,
            o = this.group;
            this._controller = new ac(e.getZr()),
            this._controllerHost = {
                target: o
            },
            o.add(i.group),
            o.add(n.group),
            this._symbolDraw = i,
            this._lineDraw = n,
            this._firstRender = !0
        },
        render: function(t, e, i) {
            var n = t.coordinateSystem;
            this._model = t,
            this._nodeScaleRatio = t.get("nodeScaleRatio");
            var o = this._symbolDraw,
            a = this._lineDraw,
            r = this.group;
            if ("view" === n.type) {
                var s = {
                    position: n.position,
                    scale: n.scale
                };
                this._firstRender ? r.attr(s) : bo(r, s, t)
            }
            IL(t.getGraph(), this._getNodeGlobalScale(t));
            var l = t.getData();
            o.updateData(l);
            var u = t.getEdgeData();
            a.updateData(u),
            this._updateNodeAndLinkScale(),
            this._updateController(t, e, i),
            clearTimeout(this._layoutTimeout);
            var h = t.forceLayout,
            c = t.get("force.layoutAnimation");
            h && this._startForceLayoutIteration(h, c),
            l.eachItemGraphicEl(function(e, n) {
                var o = l.getItemModel(n);
                e.off("drag").off("dragend");
                var a = o.get("draggable");
                a && e.on("drag",
                function() {
                    h && (h.warmUp(), !this._layouting && this._startForceLayoutIteration(h, c), h.setFixed(n), l.setItemLayout(n, e.position))
                },
                this).on("dragend",
                function() {
                    h && h.setUnfixed(n)
                },
                this),
                e.setDraggable(a && h),
                e.off("mouseover", e.__focusNodeAdjacency),
                e.off("mouseout", e.__unfocusNodeAdjacency),
                o.get("focusNodeAdjacency") && (e.on("mouseover", e.__focusNodeAdjacency = function() {
                    i.dispatchAction({
                        type: "focusNodeAdjacency",
                        seriesId: t.id,
                        dataIndex: e.dataIndex
                    })
                }), e.on("mouseout", e.__unfocusNodeAdjacency = function() {
                    i.dispatchAction({
                        type: "unfocusNodeAdjacency",
                        seriesId: t.id
                    })
                }))
            },
            this),
            l.graph.eachEdge(function(e) {
                var n = e.getGraphicEl();
                n.off("mouseover", n.__focusNodeAdjacency),
                n.off("mouseout", n.__unfocusNodeAdjacency),
                e.getModel().get("focusNodeAdjacency") && (n.on("mouseover", n.__focusNodeAdjacency = function() {
                    i.dispatchAction({
                        type: "focusNodeAdjacency",
                        seriesId: t.id,
                        edgeDataIndex: e.dataIndex
                    })
                }), n.on("mouseout", n.__unfocusNodeAdjacency = function() {
                    i.dispatchAction({
                        type: "unfocusNodeAdjacency",
                        seriesId: t.id
                    })
                }))
            });
            var d = "circular" === t.get("layout") && t.get("circular.rotateLabel"),
            f = l.getLayout("cx"),
            p = l.getLayout("cy");
            l.eachItemGraphicEl(function(t, e) {
                var i = t.getSymbolPath();
                if (d) {
                    var n = l.getItemLayout(e),
                    o = Math.atan2(n[1] - p, n[0] - f);
                    o < 0 && (o = 2 * Math.PI + o);
                    var a = n[0] < f;
                    a && (o -= Math.PI);
                    var r = a ? "left": "right";
                    i.setStyle({
                        textRotation: -o,
                        textPosition: r,
                        textOrigin: "center"
                    }),
                    i.hoverStyle && (i.hoverStyle.textPosition = r)
                } else i.setStyle({
                    textRotation: 0
                })
            }),
            this._firstRender = !1
        },
        dispose: function() {
            this._controller && this._controller.dispose(),
            this._controllerHost = {}
        },
        focusNodeAdjacency: function(t, e, i, n) {
            var o = this._model.getData().graph,
            a = n.dataIndex,
            r = n.edgeDataIndex,
            s = o.getNodeByIndex(a),
            l = o.getEdgeByIndex(r); (s || l) && (o.eachNode(function(t) {
                sf(t, TL, .1)
            }), o.eachEdge(function(t) {
                sf(t, AL, .1)
            }), s && (lf(s, TL), d(s.edges,
            function(t) {
                t.dataIndex < 0 || (lf(t, AL), lf(t.node1, TL), lf(t.node2, TL))
            })), l && (lf(l, AL), lf(l.node1, TL), lf(l.node2, TL)))
        },
        unfocusNodeAdjacency: function(t, e, i, n) {
            var o = this._model.getData().graph;
            o.eachNode(function(t) {
                sf(t, TL)
            }),
            o.eachEdge(function(t) {
                sf(t, AL)
            })
        },
        _startForceLayoutIteration: function(t, e) {
            var i = this; !
            function n() {
                t.step(function(t) {
                    i.updateLayout(i._model),
                    (i._layouting = !t) && (e ? i._layoutTimeout = setTimeout(n, 16) : n())
                })
            } ()
        },
        _updateController: function(t, e, i) {
            var n = this._controller,
            o = this._controllerHost,
            a = this.group;
            n.setPointerChecker(function(e, n, o) {
                var r = a.getBoundingRect();
                return r.applyTransform(a.transform),
                r.contain(n, o) && !mc(e, i, t)
            }),
            "view" === t.coordinateSystem.type ? (n.enable(t.get("roam")), o.zoomLimit = t.get("scaleLimit"), o.zoom = t.coordinateSystem.getZoom(), n.off("pan").off("zoom").on("pan",
            function(e) {
                pc(o, e.dx, e.dy),
                i.dispatchAction({
                    seriesId: t.id,
                    type: "graphRoam",
                    dx: e.dx,
                    dy: e.dy
                })
            }).on("zoom",
            function(e) {
                gc(o, e.scale, e.originX, e.originY),
                i.dispatchAction({
                    seriesId: t.id,
                    type: "graphRoam",
                    zoom: e.scale,
                    originX: e.originX,
                    originY: e.originY
                }),
                this._updateNodeAndLinkScale(),
                IL(t.getGraph(), this._getNodeGlobalScale(t)),
                this._lineDraw.updateLayout()
            },
            this)) : n.disable()
        },
        _updateNodeAndLinkScale: function() {
            var t = this._model,
            e = t.getData(),
            i = this._getNodeGlobalScale(t),
            n = [i, i];
            e.eachItemGraphicEl(function(t, e) {
                t.attr("scale", n)
            })
        },
        _getNodeGlobalScale: function(t) {
            var e = t.coordinateSystem;
            if ("view" !== e.type) return 1;
            var i = this._nodeScaleRatio,
            n = e.scale,
            o = n && n[0] || 1;
            return ((e.getZoom() - 1) * i + 1) / o
        },
        updateLayout: function(t) {
            IL(t.getGraph(), this._getNodeGlobalScale(t)),
            this._symbolDraw.updateLayout(),
            this._lineDraw.updateLayout()
        },
        remove: function(t, e) {
            this._symbolDraw && this._symbolDraw.remove(),
            this._lineDraw && this._lineDraw.remove()
        }
    }),
    Ps({
        type: "focusNodeAdjacency",
        event: "focusNodeAdjacency",
        update: "series:focusNodeAdjacency"
    },
    function() {}),
    Ps({
        type: "unfocusNodeAdjacency",
        event: "unfocusNodeAdjacency",
        update: "series:unfocusNodeAdjacency"
    },
    function() {}),
    Ps({
        type: "graphRoam",
        event: "graphRoam",
        update: "none"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            query: t
        },
        function(e) {
            var i = wc(e.coordinateSystem, t);
            e.setCenter && e.setCenter(i.center),
            e.setZoom && e.setZoom(i.zoom)
        })
    });
    var DL = Z;
    ks(function(t) {
        var e = t.findComponents({
            mainType: "legend"
        });
        e && e.length && t.eachSeriesByType("graph",
        function(t) {
            var i = t.getCategoriesData(),
            n = t.getGraph().data,
            o = i.mapArray(i.getName);
            n.filterSelf(function(t) {
                var i = n.getItemModel(t).getShallow("category");
                if (null != i) {
                    "number" == typeof i && (i = o[i]);
                    for (var a = 0; a < e.length; a++) if (!e[a].isSelected(i)) return ! 1
                }
                return ! 0
            })
        },
        this)
    }),
    zs(hD("graph", "circle", null)),
    zs(function(t) {
        var e = {};
        t.eachSeriesByType("graph",
        function(t) {
            var i = t.getCategoriesData(),
            n = t.getData(),
            o = {};
            i.each(function(n) {
                var a = i.getName(n);
                o["ec-" + a] = n;
                var r = i.getItemModel(n).get("itemStyle.color") || t.getColorFromPalette(a, e);
                i.setItemVisual(n, "color", r)
            }),
            i.count() && n.each(function(t) {
                var e = n.getItemModel(t).getShallow("category");
                null != e && ("string" == typeof e && (e = o["ec-" + e]), n.getItemVisual(t, "color", !0) || n.setItemVisual(t, "color", i.getItemVisual(e, "color")))
            })
        })
    }),
    zs(function(t) {
        t.eachSeriesByType("graph",
        function(t) {
            var e = t.getGraph(),
            i = t.getEdgeData(),
            n = uf(t.get("edgeSymbol")),
            o = uf(t.get("edgeSymbolSize")),
            a = "lineStyle.color".split("."),
            r = "lineStyle.opacity".split(".");
            i.setVisual("fromSymbol", n && n[0]),
            i.setVisual("toSymbol", n && n[1]),
            i.setVisual("fromSymbolSize", o && o[0]),
            i.setVisual("toSymbolSize", o && o[1]),
            i.setVisual("color", t.get(a)),
            i.setVisual("opacity", t.get(r)),
            i.each(function(t) {
                var n = i.getItemModel(t),
                o = e.getEdgeByIndex(t),
                s = uf(n.getShallow("symbol", !0)),
                l = uf(n.getShallow("symbolSize", !0)),
                u = n.get(a),
                h = n.get(r);
                switch (u) {
                case "source":
                    u = o.node1.getVisual("color");
                    break;
                case "target":
                    u = o.node2.getVisual("color")
                }
                s[0] && o.setVisual("fromSymbol", s[0]),
                s[1] && o.setVisual("toSymbol", s[1]),
                l[0] && o.setVisual("fromSymbolSize", l[0]),
                l[1] && o.setVisual("toSymbolSize", l[1]),
                o.setVisual("color", u),
                o.setVisual("opacity", h)
            })
        })
    }),
    Os(function(t, e) {
        t.eachSeriesByType("graph",
        function(t) {
            var e = t.get("layout"),
            i = t.coordinateSystem;
            if (i && "view" !== i.type) {
                var n = t.getData(),
                o = [];
                d(i.dimensions,
                function(t) {
                    o = o.concat(n.mapDimension(t, !0))
                });
                for (var a = 0; a < n.count(); a++) {
                    for (var r = [], s = !1, l = 0; l < o.length; l++) {
                        var u = n.get(o[l], a);
                        isNaN(u) || (s = !0),
                        r.push(u)
                    }
                    s ? n.setItemLayout(a, i.dataToPoint(r)) : n.setItemLayout(a, [NaN, NaN])
                }
                cf(n.graph)
            } else e && "none" !== e || hf(t)
        })
    }),
    Os(function(t) {
        t.eachSeriesByType("graph",
        function(t) {
            "circular" === t.get("layout") && df(t)
        })
    }),
    Os(function(t) {
        t.eachSeriesByType("graph",
        function(t) {
            var e = t.coordinateSystem;
            if (!e || "view" === e.type) if ("force" === t.get("layout")) {
                var i = t.preservedPoints || {},
                n = t.getGraph(),
                o = n.data,
                a = n.edgeData,
                r = t.getModel("force"),
                s = r.get("initLayout");
                t.preservedPoints ? o.each(function(t) {
                    var e = o.getId(t);
                    o.setItemLayout(t, i[e] || [NaN, NaN])
                }) : s && "none" !== s ? "circular" === s && df(t) : hf(t);
                var l = o.getDataExtent("value"),
                u = a.getDataExtent("value"),
                h = r.get("repulsion"),
                c = r.get("edgeLength");
                y(h) || (h = [h, h]),
                y(c) || (c = [c, c]),
                c = [c[1], c[0]];
                var d = o.mapArray("value",
                function(t, e) {
                    var i = o.getItemLayout(e),
                    n = zo(t, l, h);
                    return isNaN(n) && (n = (h[0] + h[1]) / 2),
                    {
                        w: n,
                        rep: n,
                        fixed: o.getItemModel(e).get("fixed"),
                        p: !i || isNaN(i[0]) || isNaN(i[1]) ? null: i
                    }
                }),
                f = a.mapArray("value",
                function(t, e) {
                    var i = n.getEdgeByIndex(e),
                    o = zo(t, u, c);
                    return isNaN(o) && (o = (c[0] + c[1]) / 2),
                    {
                        n1: d[i.node1.dataIndex],
                        n2: d[i.node2.dataIndex],
                        d: o,
                        curveness: i.getModel().get("lineStyle.curveness") || 0
                    }
                }),
                p = (e = t.coordinateSystem).getBoundingRect(),
                g = ff(d, f, {
                    rect: p,
                    gravity: r.get("gravity")
                }),
                m = g.step;
                g.step = function(t) {
                    for (var e = 0,
                    a = d.length; e < a; e++) d[e].fixed && F(d[e].p, n.getNodeByIndex(e).getLayout());
                    m(function(e, a, r) {
                        for (var s = 0,
                        l = e.length; s < l; s++) e[s].fixed || n.getNodeByIndex(s).setLayout(e[s].p),
                        i[o.getId(s)] = e[s].p;
                        for (var s = 0,
                        l = a.length; s < l; s++) {
                            var u = a[s],
                            h = n.getEdgeByIndex(s),
                            c = u.n1.p,
                            d = u.n2.p,
                            f = h.getLayout(); (f = f ? f.slice() : [])[0] = f[0] || [],
                            f[1] = f[1] || [],
                            F(f[0], c),
                            F(f[1], d),
                            +u.curveness && (f[2] = [(c[0] + d[0]) / 2 - (c[1] - d[1]) * u.curveness, (c[1] + d[1]) / 2 - (d[0] - c[0]) * u.curveness]),
                            h.setLayout(f)
                        }
                        t && t(r)
                    })
                },
                t.forceLayout = g,
                t.preservedPoints = i,
                g.step()
            } else t.forceLayout = null
        })
    }),
    Ns("graphView", {
        create: function(t, e) {
            var i = [];
            return t.eachSeriesByType("graph",
            function(t) {
                var n = t.get("coordinateSystem");
                if (!n || "view" === n) {
                    var o = t.getData(),
                    a = [],
                    r = [];
                    dn(o.mapArray(function(t) {
                        var e = o.getItemModel(t);
                        return [ + e.get("x"), +e.get("y")]
                    }), a, r),
                    r[0] - a[0] == 0 && (r[0] += 1, a[0] -= 1),
                    r[1] - a[1] == 0 && (r[1] += 1, a[1] -= 1);
                    var s = (r[0] - a[0]) / (r[1] - a[1]),
                    l = pf(t, e, s);
                    isNaN(s) && (a = [l.x, l.y], r = [l.x + l.width, l.y + l.height]);
                    var u = r[0] - a[0],
                    h = r[1] - a[1],
                    c = l.width,
                    d = l.height,
                    f = t.coordinateSystem = new jh;
                    f.zoomLimit = t.get("scaleLimit"),
                    f.setBoundingRect(a[0], a[1], u, h),
                    f.setViewRect(l.x, l.y, c, d),
                    f.setCenter(t.get("center")),
                    f.setZoom(t.get("zoom")),
                    i.push(f)
                }
            }),
            i
        }
    }),
    OI.extend({
        type: "series.gauge",
        getInitialData: function(t, e) {
            var i = t.data || [];
            return y(i) || (i = [i]),
            t.data = i,
            WD(this, ["value"])
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            center: ["50%", "50%"],
            legendHoverLink: !0,
            radius: "75%",
            startAngle: 225,
            endAngle: -45,
            clockwise: !0,
            min: 0,
            max: 100,
            splitNumber: 10,
            axisLine: {
                show: !0,
                lineStyle: {
                    color: [[.2, "#91c7ae"], [.8, "#63869e"], [1, "#c23531"]],
                    width: 30
                }
            },
            splitLine: {
                show: !0,
                length: 30,
                lineStyle: {
                    color: "#eee",
                    width: 2,
                    type: "solid"
                }
            },
            axisTick: {
                show: !0,
                splitNumber: 5,
                length: 8,
                lineStyle: {
                    color: "#eee",
                    width: 1,
                    type: "solid"
                }
            },
            axisLabel: {
                show: !0,
                distance: 5,
                color: "auto"
            },
            pointer: {
                show: !0,
                length: "80%",
                width: 8
            },
            itemStyle: {
                color: "auto"
            },
            title: {
                show: !0,
                offsetCenter: [0, "-40%"],
                color: "#333",
                fontSize: 15
            },
            detail: {
                show: !0,
                backgroundColor: "rgba(0,0,0,0)",
                borderWidth: 0,
                borderColor: "#ccc",
                width: 100,
                height: null,
                padding: [5, 10],
                offsetCenter: [0, "40%"],
                color: "auto",
                fontSize: 30
            }
        }
    });
    var CL = kn.extend({
        type: "echartsGaugePointer",
        shape: {
            angle: 0,
            width: 10,
            r: 10,
            x: 0,
            y: 0
        },
        buildPath: function(t, e) {
            var i = Math.cos,
            n = Math.sin,
            o = e.r,
            a = e.width,
            r = e.angle,
            s = e.x - i(r) * a * (a >= o / 3 ? 1 : 2),
            l = e.y - n(r) * a * (a >= o / 3 ? 1 : 2);
            r = e.angle - Math.PI / 2,
            t.moveTo(s, l),
            t.lineTo(e.x + i(r) * a, e.y + n(r) * a),
            t.lineTo(e.x + i(e.angle) * o, e.y + n(e.angle) * o),
            t.lineTo(e.x - i(r) * a, e.y - n(r) * a),
            t.lineTo(s, l)
        }
    }),
    LL = 2 * Math.PI,
    kL = (Mr.extend({
        type: "gauge",
        render: function(t, e, i) {
            this.group.removeAll();
            var n = t.get("axisLine.lineStyle.color"),
            o = gf(t, i);
            this._renderMain(t, e, i, n, o)
        },
        dispose: function() {},
        _renderMain: function(t, e, i, n, o) {
            for (var a = this.group,
            r = t.getModel("axisLine").getModel("lineStyle"), s = t.get("clockwise"), l = -t.get("startAngle") / 180 * Math.PI, u = -t.get("endAngle") / 180 * Math.PI, h = (u - l) % LL, c = l, d = r.get("width"), f = 0; f < n.length; f++) {
                var p = Math.min(Math.max(n[f][0], 0), 1),
                g = new $S({
                    shape: {
                        startAngle: c,
                        endAngle: u = l + h * p,
                        cx: o.cx,
                        cy: o.cy,
                        clockwise: s,
                        r0: o.r - d,
                        r: o.r
                    },
                    silent: !0
                });
                g.setStyle({
                    fill: n[f][1]
                }),
                g.setStyle(r.getLineStyle(["color", "borderWidth", "borderColor"])),
                a.add(g),
                c = u
            }
            var m = function(t) {
                if (t <= 0) return n[0][1];
                for (var e = 0; e < n.length; e++) if (n[e][0] >= t && (0 === e ? 0 : n[e - 1][0]) < t) return n[e][1];
                return n[e - 1][1]
            };
            if (!s) {
                var v = l;
                l = u,
                u = v
            }
            this._renderTicks(t, e, i, m, o, l, u, s),
            this._renderPointer(t, e, i, m, o, l, u, s),
            this._renderTitle(t, e, i, m, o),
            this._renderDetail(t, e, i, m, o)
        },
        _renderTicks: function(t, e, i, n, o, a, r, s) {
            for (var l = this.group,
            u = o.cx,
            h = o.cy,
            c = o.r,
            d = +t.get("min"), f = +t.get("max"), p = t.getModel("splitLine"), g = t.getModel("axisTick"), m = t.getModel("axisLabel"), v = t.get("splitNumber"), y = g.get("splitNumber"), x = Eo(p.get("length"), c), _ = Eo(g.get("length"), c), w = a, b = (r - a) / v, S = b / y, M = p.getModel("lineStyle").getLineStyle(), I = g.getModel("lineStyle").getLineStyle(), T = 0; T <= v; T++) {
                var A = Math.cos(w),
                D = Math.sin(w);
                if (p.get("show")) {
                    var C = new rM({
                        shape: {
                            x1: A * c + u,
                            y1: D * c + h,
                            x2: A * (c - x) + u,
                            y2: D * (c - x) + h
                        },
                        style: M,
                        silent: !0
                    });
                    "auto" === M.stroke && C.setStyle({
                        stroke: n(T / v)
                    }),
                    l.add(C)
                }
                if (m.get("show")) {
                    var L = mf(Ro(T / v * (f - d) + d), m.get("formatter")),
                    k = m.get("distance"),
                    P = n(T / v);
                    l.add(new qS({
                        style: fo({},
                        m, {
                            text: L,
                            x: A * (c - x - k) + u,
                            y: D * (c - x - k) + h,
                            textVerticalAlign: D < -.4 ? "top": D > .4 ? "bottom": "middle",
                            textAlign: A < -.4 ? "left": A > .4 ? "right": "center"
                        },
                        {
                            autoColor: P
                        }),
                        silent: !0
                    }))
                }
                if (g.get("show") && T !== v) {
                    for (var N = 0; N <= y; N++) {
                        var A = Math.cos(w),
                        D = Math.sin(w),
                        O = new rM({
                            shape: {
                                x1: A * c + u,
                                y1: D * c + h,
                                x2: A * (c - _) + u,
                                y2: D * (c - _) + h
                            },
                            silent: !0,
                            style: I
                        });
                        "auto" === I.stroke && O.setStyle({
                            stroke: n((T + N / y) / v)
                        }),
                        l.add(O),
                        w += S
                    }
                    w -= S
                } else w += b
            }
        },
        _renderPointer: function(t, e, i, n, o, a, r, s) {
            var l = this.group,
            u = this._data;
            if (t.get("pointer.show")) {
                var h = [ + t.get("min"), +t.get("max")],
                c = [a, r],
                d = t.getData(),
                f = d.mapDimension("value");
                d.diff(u).add(function(e) {
                    var i = new CL({
                        shape: {
                            angle: a
                        }
                    });
                    So(i, {
                        shape: {
                            angle: zo(d.get(f, e), h, c, !0)
                        }
                    },
                    t),
                    l.add(i),
                    d.setItemGraphicEl(e, i)
                }).update(function(e, i) {
                    var n = u.getItemGraphicEl(i);
                    bo(n, {
                        shape: {
                            angle: zo(d.get(f, e), h, c, !0)
                        }
                    },
                    t),
                    l.add(n),
                    d.setItemGraphicEl(e, n)
                }).remove(function(t) {
                    var e = u.getItemGraphicEl(t);
                    l.remove(e)
                }).execute(),
                d.eachItemGraphicEl(function(t, e) {
                    var i = d.getItemModel(e),
                    a = i.getModel("pointer");
                    t.setShape({
                        x: o.cx,
                        y: o.cy,
                        width: Eo(a.get("width"), o.r),
                        r: Eo(a.get("length"), o.r)
                    }),
                    t.useStyle(i.getModel("itemStyle").getItemStyle()),
                    "auto" === t.style.fill && t.setStyle("fill", n(zo(d.get(f, e), h, [0, 1], !0))),
                    uo(t, i.getModel("emphasis.itemStyle").getItemStyle())
                }),
                this._data = d
            } else u && u.eachItemGraphicEl(function(t) {
                l.remove(t)
            })
        },
        _renderTitle: function(t, e, i, n, o) {
            var a = t.getData(),
            r = a.mapDimension("value"),
            s = t.getModel("title");
            if (s.get("show")) {
                var l = s.get("offsetCenter"),
                u = o.cx + Eo(l[0], o.r),
                h = o.cy + Eo(l[1], o.r),
                c = +t.get("min"),
                d = +t.get("max"),
                f = n(zo(t.getData().get(r, 0), [c, d], [0, 1], !0));
                this.group.add(new qS({
                    silent: !0,
                    style: fo({},
                    s, {
                        x: u,
                        y: h,
                        text: a.getName(0),
                        textAlign: "center",
                        textVerticalAlign: "middle"
                    },
                    {
                        autoColor: f,
                        forceRich: !0
                    })
                }))
            }
        },
        _renderDetail: function(t, e, i, n, o) {
            var a = t.getModel("detail"),
            r = +t.get("min"),
            s = +t.get("max");
            if (a.get("show")) {
                var l = a.get("offsetCenter"),
                u = o.cx + Eo(l[0], o.r),
                h = o.cy + Eo(l[1], o.r),
                c = Eo(a.get("width"), o.r),
                d = Eo(a.get("height"), o.r),
                f = t.getData(),
                p = f.get(f.mapDimension("value"), 0),
                g = n(zo(p, [r, s], [0, 1], !0));
                this.group.add(new qS({
                    silent: !0,
                    style: fo({},
                    a, {
                        x: u,
                        y: h,
                        text: mf(p, a.get("formatter")),
                        textWidth: isNaN(c) ? null: c,
                        textHeight: isNaN(d) ? null: d,
                        textAlign: "center",
                        textVerticalAlign: "middle"
                    },
                    {
                        autoColor: g,
                        forceRich: !0
                    })
                }))
            }
        }
    }), Fs({
        type: "series.funnel",
        init: function(t) {
            kL.superApply(this, "init", arguments),
            this.legendDataProvider = function() {
                return this.getRawData()
            },
            this._defaultLabelLine(t)
        },
        getInitialData: function(t, e) {
            return WD(this, ["value"])
        },
        _defaultLabelLine: function(t) {
            Ci(t, "labelLine", ["show"]);
            var e = t.labelLine,
            i = t.emphasis.labelLine;
            e.show = e.show && t.label.show,
            i.show = i.show && t.emphasis.label.show
        },
        getDataParams: function(t) {
            var e = this.getData(),
            i = kL.superCall(this, "getDataParams", t),
            n = e.mapDimension("value"),
            o = e.getSum(n);
            return i.percent = o ? +(e.get(n, t) / o * 100).toFixed(2) : 0,
            i.$vars.push("percent"),
            i
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            left: 80,
            top: 60,
            right: 80,
            bottom: 60,
            minSize: "0%",
            maxSize: "100%",
            sort: "descending",
            gap: 0,
            funnelAlign: "center",
            label: {
                show: !0,
                position: "outer"
            },
            labelLine: {
                show: !0,
                length: 20,
                lineStyle: {
                    width: 1,
                    type: "solid"
                }
            },
            itemStyle: {
                borderColor: "#fff",
                borderWidth: 1
            },
            emphasis: {
                label: {
                    show: !0
                }
            }
        }
    })),
    PL = vf.prototype,
    NL = ["itemStyle", "opacity"];
    PL.updateData = function(t, e, i) {
        var n = this.childAt(0),
        o = t.hostModel,
        a = t.getItemModel(e),
        s = t.getItemLayout(e),
        l = t.getItemModel(e).get(NL);
        l = null == l ? 1 : l,
        n.useStyle({}),
        i ? (n.setShape({
            points: s.points
        }), n.setStyle({
            opacity: 0
        }), So(n, {
            style: {
                opacity: l
            }
        },
        o, e)) : bo(n, {
            style: {
                opacity: l
            },
            shape: {
                points: s.points
            }
        },
        o, e);
        var u = a.getModel("itemStyle"),
        h = t.getItemVisual(e, "color");
        n.setStyle(r({
            lineJoin: "round",
            fill: h
        },
        u.getItemStyle(["opacity"]))),
        n.hoverStyle = u.getModel("emphasis").getItemStyle(),
        this._updateLabel(t, e),
        uo(this)
    },
    PL._updateLabel = function(t, e) {
        var i = this.childAt(1),
        n = this.childAt(2),
        o = t.hostModel,
        a = t.getItemModel(e),
        r = t.getItemLayout(e).label,
        s = t.getItemVisual(e, "color");
        bo(i, {
            shape: {
                points: r.linePoints || r.linePoints
            }
        },
        o, e),
        bo(n, {
            style: {
                x: r.x,
                y: r.y
            }
        },
        o, e),
        n.attr({
            rotation: r.rotation,
            origin: [r.x, r.y],
            z2: 10
        });
        var l = a.getModel("label"),
        u = a.getModel("emphasis.label"),
        h = a.getModel("labelLine"),
        c = a.getModel("emphasis.labelLine"),
        s = t.getItemVisual(e, "color");
        co(n.style, n.hoverStyle = {},
        l, u, {
            labelFetcher: t.hostModel,
            labelDataIndex: e,
            defaultText: t.getName(e),
            autoColor: s,
            useInsideStyle: !!r.inside
        },
        {
            textAlign: r.textAlign,
            textVerticalAlign: r.verticalAlign
        }),
        n.ignore = n.normalIgnore = !l.get("show"),
        n.hoverIgnore = !u.get("show"),
        i.ignore = i.normalIgnore = !h.get("show"),
        i.hoverIgnore = !c.get("show"),
        i.setStyle({
            stroke: s
        }),
        i.setStyle(h.getModel("lineStyle").getLineStyle()),
        i.hoverStyle = c.getModel("lineStyle").getLineStyle()
    },
    u(vf, Zw),
    Mr.extend({
        type: "funnel",
        render: function(t, e, i) {
            var n = t.getData(),
            o = this._data,
            a = this.group;
            n.diff(o).add(function(t) {
                var e = new vf(n, t);
                n.setItemGraphicEl(t, e),
                a.add(e)
            }).update(function(t, e) {
                var i = o.getItemGraphicEl(e);
                i.updateData(n, t),
                a.add(i),
                n.setItemGraphicEl(t, i)
            }).remove(function(t) {
                var e = o.getItemGraphicEl(t);
                a.remove(e)
            }).execute(),
            this._data = n
        },
        remove: function() {
            this.group.removeAll(),
            this._data = null
        },
        dispose: function() {}
    }),
    zs(UD("funnel")),
    Os(function(t, e, i) {
        t.eachSeriesByType("funnel",
        function(t) {
            var i = t.getData(),
            n = i.mapDimension("value"),
            o = t.get("sort"),
            a = yf(t, e),
            r = xf(i, o),
            s = [Eo(t.get("minSize"), a.width), Eo(t.get("maxSize"), a.width)],
            l = i.getDataExtent(n),
            u = t.get("min"),
            h = t.get("max");
            null == u && (u = Math.min(l[0], 0)),
            null == h && (h = l[1]);
            var c = t.get("funnelAlign"),
            d = t.get("gap"),
            f = (a.height - d * (i.count() - 1)) / i.count(),
            p = a.y,
            g = function(t, e) {
                var o, r = zo(i.get(n, t) || 0, [u, h], s, !0);
                switch (c) {
                case "left":
                    o = a.x;
                    break;
                case "center":
                    o = a.x + (a.width - r) / 2;
                    break;
                case "right":
                    o = a.x + a.width - r
                }
                return [[o, e], [o + r, e]]
            };
            "ascending" === o && (f = -f, d = -d, p += a.height, r = r.reverse());
            for (var m = 0; m < r.length; m++) {
                var v = r[m],
                y = r[m + 1],
                x = i.getItemModel(v).get("itemStyle.height");
                null == x ? x = f: (x = Eo(x, a.height), "ascending" === o && (x = -x));
                var _ = g(v, p),
                w = g(y, p + x);
                p += x + d,
                i.setItemLayout(v, {
                    points: _.concat(w.slice().reverse())
                })
            }
            _f(i)
        })
    }),
    ks(QD("funnel"));
    var OL = function(t, e, i, n, o) {
        HA.call(this, t, e, i),
        this.type = n || "value",
        this.axisIndex = o
    };
    OL.prototype = {
        constructor: OL,
        model: null,
        isHorizontal: function() {
            return "horizontal" !== this.coordinateSystem.getModel().get("layout")
        }
    },
    u(OL, HA);
    var zL = function(t, e, i, n, o, a) {
        e[0] = Mf(e[0], i),
        e[1] = Mf(e[1], i),
        t = t || 0;
        var r = i[1] - i[0];
        null != o && (o = Mf(o, [0, r])),
        null != a && (a = Math.max(a, null != o ? o: 0)),
        "all" === n && (o = a = Math.abs(e[1] - e[0]), n = 0);
        var s = Sf(e, n);
        e[n] += t;
        var l = o || 0,
        u = i.slice();
        s.sign < 0 ? u[0] += l: u[1] -= l,
        e[n] = Mf(e[n], u),
        h = Sf(e, n),
        null != o && (h.sign !== s.sign || h.span < o) && (e[1 - n] = e[n] + s.sign * o);
        var h = Sf(e, n);
        return null != a && h.span > a && (e[1 - n] = e[n] + h.sign * a),
        e
    },
    EL = d,
    RL = Math.min,
    BL = Math.max,
    VL = Math.floor,
    FL = Math.ceil,
    GL = Ro,
    WL = Math.PI;
    If.prototype = {
        type: "parallel",
        constructor: If,
        _init: function(t, e, i) {
            var n = t.dimensions,
            o = t.parallelAxisIndex;
            EL(n,
            function(t, i) {
                var n = o[i],
                a = e.getComponent("parallelAxis", n),
                r = this._axesMap.set(t, new OL(t, Vl(a), [0, 0], a.get("type"), n)),
                s = "category" === r.type;
                r.onBand = s && a.get("boundaryGap"),
                r.inverse = a.get("inverse"),
                a.axis = r,
                r.model = a,
                r.coordinateSystem = a.coordinateSystem = this
            },
            this)
        },
        update: function(t, e) {
            this._updateAxesFromSeries(this._model, t)
        },
        containPoint: function(t) {
            var e = this._makeLayoutInfo(),
            i = e.axisBase,
            n = e.layoutBase,
            o = e.pixelDimIndex,
            a = t[1 - o],
            r = t[o];
            return a >= i && a <= i + e.axisLength && r >= n && r <= n + e.layoutLength
        },
        getModel: function() {
            return this._model
        },
        _updateAxesFromSeries: function(t, e) {
            e.eachSeries(function(i) {
                if (t.contains(i, e)) {
                    var n = i.getData();
                    EL(this.dimensions,
                    function(t) {
                        var e = this._axesMap.get(t);
                        e.scale.unionExtentFromData(n, n.mapDimension(t)),
                        Bl(e.scale, e.model)
                    },
                    this)
                }
            },
            this)
        },
        resize: function(t, e) {
            this._rect = la(t.getBoxLayoutParams(), {
                width: e.getWidth(),
                height: e.getHeight()
            }),
            this._layoutAxes()
        },
        getRect: function() {
            return this._rect
        },
        _makeLayoutInfo: function() {
            var t, e = this._model,
            i = this._rect,
            n = ["x", "y"],
            o = ["width", "height"],
            a = e.get("layout"),
            r = "horizontal" === a ? 0 : 1,
            s = i[o[r]],
            l = [0, s],
            u = this.dimensions.length,
            h = Tf(e.get("axisExpandWidth"), l),
            c = Tf(e.get("axisExpandCount") || 0, [0, u]),
            d = e.get("axisExpandable") && u > 3 && u > c && c > 1 && h > 0 && s > 0,
            f = e.get("axisExpandWindow");
            f ? (t = Tf(f[1] - f[0], l), f[1] = f[0] + t) : (t = Tf(h * (c - 1), l), (f = [h * (e.get("axisExpandCenter") || VL(u / 2)) - t / 2])[1] = f[0] + t);
            var p = (s - t) / (u - c);
            p < 3 && (p = 0);
            var g = [VL(GL(f[0] / h, 1)) + 1, FL(GL(f[1] / h, 1)) - 1],
            m = p / h * f[0];
            return {
                layout: a,
                pixelDimIndex: r,
                layoutBase: i[n[r]],
                layoutLength: s,
                axisBase: i[n[1 - r]],
                axisLength: i[o[1 - r]],
                axisExpandable: d,
                axisExpandWidth: h,
                axisCollapseWidth: p,
                axisExpandWindow: f,
                axisCount: u,
                winInnerIndices: g,
                axisExpandWindow0Pos: m
            }
        },
        _layoutAxes: function() {
            var t = this._rect,
            e = this._axesMap,
            i = this.dimensions,
            n = this._makeLayoutInfo(),
            o = n.layout;
            e.each(function(t) {
                var e = [0, n.axisLength],
                i = t.inverse ? 1 : 0;
                t.setExtent(e[i], e[1 - i])
            }),
            EL(i,
            function(e, i) {
                var a = (n.axisExpandable ? Df: Af)(i, n),
                r = {
                    horizontal: {
                        x: a.position,
                        y: n.axisLength
                    },
                    vertical: {
                        x: 0,
                        y: a.position
                    }
                },
                s = {
                    horizontal: WL / 2,
                    vertical: 0
                },
                l = [r[o].x + t.x, r[o].y + t.y],
                u = s[o],
                h = mt();
                wt(h, h, u),
                _t(h, h, l),
                this._axesLayout[e] = {
                    position: l,
                    rotation: u,
                    transform: h,
                    axisNameAvailableWidth: a.axisNameAvailableWidth,
                    axisLabelShow: a.axisLabelShow,
                    nameTruncateMaxWidth: a.nameTruncateMaxWidth,
                    tickDirection: 1,
                    labelDirection: 1
                }
            },
            this)
        },
        getAxis: function(t) {
            return this._axesMap.get(t)
        },
        dataToPoint: function(t, e) {
            return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t), e)
        },
        eachActiveState: function(t, e, i, n) {
            null == i && (i = 0),
            null == n && (n = t.count());
            var o = this._axesMap,
            a = this.dimensions,
            r = [],
            s = [];
            d(a,
            function(e) {
                r.push(t.mapDimension(e)),
                s.push(o.get(e).model)
            });
            for (var l = this.hasAxisBrushed(), u = i; u < n; u++) {
                var h;
                if (l) {
                    h = "active";
                    for (var c = t.getValues(r, u), f = 0, p = a.length; f < p; f++) if ("inactive" === s[f].getActiveState(c[f])) {
                        h = "inactive";
                        break
                    }
                } else h = "normal";
                e(h, u)
            }
        },
        hasAxisBrushed: function() {
            for (var t = this.dimensions,
            e = this._axesMap,
            i = !1,
            n = 0,
            o = t.length; n < o; n++)"normal" !== e.get(t[n]).model.getActiveState() && (i = !0);
            return i
        },
        axisCoordToPoint: function(t, e) {
            return Io([t, 0], this._axesLayout[e].transform)
        },
        getAxisLayout: function(t) {
            return i(this._axesLayout[t])
        },
        getSlidedAxisExpandWindow: function(t) {
            var e = this._makeLayoutInfo(),
            i = e.pixelDimIndex,
            n = e.axisExpandWindow.slice(),
            o = n[1] - n[0],
            a = [0, e.axisExpandWidth * (e.axisCount - 1)];
            if (!this.containPoint(t)) return {
                behavior: "none",
                axisExpandWindow: n
            };
            var r, s = t[i] - e.layoutBase - e.axisExpandWindow0Pos,
            l = "slide",
            u = e.axisCollapseWidth,
            h = this._model.get("axisExpandSlideTriggerArea"),
            c = null != h[0];
            return u ? (c && u && s < o * h[0] ? (l = "jump", r = s - o * h[2]) : c && u && s > o * (1 - h[0]) ? (l = "jump", r = s - o * (1 - h[2])) : (r = s - o * h[1]) >= 0 && (r = s - o * (1 - h[1])) <= 0 && (r = 0), (r *= e.axisExpandWidth / u) ? zL(r, n, a, "all") : l = "none") : (o = n[1] - n[0], (n = [BL(0, a[1] * s / o - o / 2)])[1] = RL(a[1], n[0] + o), n[0] = n[1] - o),
            {
                axisExpandWindow: n,
                behavior: l
            }
        }
    },
    Ba.register("parallel", {
        create: function(t, e) {
            var i = [];
            return t.eachComponent("parallel",
            function(n, o) {
                var a = new If(n, t, e);
                a.name = "parallel_" + o,
                a.resize(n, e),
                n.coordinateSystem = a,
                a.model = n,
                i.push(a)
            }),
            t.eachSeries(function(e) {
                if ("parallel" === e.get("coordinateSystem")) {
                    var i = t.queryComponents({
                        mainType: "parallel",
                        index: e.get("parallelIndex"),
                        id: e.get("parallelId")
                    })[0];
                    e.coordinateSystem = i.coordinateSystem
                }
            }),
            i
        }
    });
    var HL = XM.extend({
        type: "baseParallelAxis",
        axis: null,
        activeIntervals: [],
        getAreaSelectStyle: function() {
            return Wb([["fill", "color"], ["lineWidth", "borderWidth"], ["stroke", "borderColor"], ["width", "width"], ["opacity", "opacity"]])(this.getModel("areaSelectStyle"))
        },
        setActiveIntervals: function(t) {
            var e = this.activeIntervals = i(t);
            if (e) for (var n = e.length - 1; n >= 0; n--) Bo(e[n])
        },
        getActiveState: function(t) {
            var e = this.activeIntervals;
            if (!e.length) return "normal";
            if (null == t || isNaN(t)) return "inactive";
            if (1 === e.length) {
                var i = e[0];
                if (i[0] <= t && t <= i[1]) return "active"
            } else for (var n = 0,
            o = e.length; n < o; n++) if (e[n][0] <= t && t <= e[n][1]) return "active";
            return "inactive"
        }
    }),
    ZL = {
        type: "value",
        dim: null,
        areaSelectStyle: {
            width: 20,
            borderWidth: 1,
            borderColor: "rgba(160,197,232)",
            color: "rgba(160,197,232)",
            opacity: .3
        },
        realtime: !0,
        z: 10
    };
    n(HL.prototype, CA),
    xD("parallel", HL,
    function(t, e) {
        return e.type || (e.data ? "category": "value")
    },
    ZL),
    XM.extend({
        type: "parallel",
        dependencies: ["parallelAxis"],
        coordinateSystem: null,
        dimensions: null,
        parallelAxisIndex: null,
        layoutMode: "box",
        defaultOption: {
            zlevel: 0,
            z: 0,
            left: 80,
            top: 60,
            right: 80,
            bottom: 60,
            layout: "horizontal",
            axisExpandable: !1,
            axisExpandCenter: null,
            axisExpandCount: 0,
            axisExpandWidth: 50,
            axisExpandRate: 17,
            axisExpandDebounce: 50,
            axisExpandSlideTriggerArea: [ - .15, .05, .4],
            axisExpandTriggerOn: "click",
            parallelAxisDefault: null
        },
        init: function() {
            XM.prototype.init.apply(this, arguments),
            this.mergeOption({})
        },
        mergeOption: function(t) {
            var e = this.option;
            t && n(e, t, !0),
            this._initDimensions()
        },
        contains: function(t, e) {
            var i = t.get("parallelIndex");
            return null != i && e.getComponent("parallel", i) === this
        },
        setAxisExpand: function(t) {
            d(["axisExpandable", "axisExpandCenter", "axisExpandCount", "axisExpandWidth", "axisExpandWindow"],
            function(e) {
                t.hasOwnProperty(e) && (this.option[e] = t[e])
            },
            this)
        },
        _initDimensions: function() {
            var t = this.dimensions = [],
            e = this.parallelAxisIndex = [];
            d(g(this.dependentModels.parallelAxis,
            function(t) {
                return (t.get("parallelIndex") || 0) === this.componentIndex
            },
            this),
            function(i) {
                t.push("dim" + i.get("dim")),
                e.push(i.componentIndex)
            })
        }
    }),
    Ps({
        type: "axisAreaSelect",
        event: "axisAreaSelected"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "parallelAxis",
            query: t
        },
        function(e) {
            e.axis.model.setActiveIntervals(t.intervals)
        })
    }),
    Ps("parallelAxisExpand",
    function(t, e) {
        e.eachComponent({
            mainType: "parallel",
            query: t
        },
        function(e) {
            e.setAxisExpand(t)
        })
    });
    var jL = v,
    YL = d,
    UL = f,
    XL = Math.min,
    qL = Math.max,
    KL = Math.pow,
    QL = 1e4,
    JL = 6,
    $L = 6,
    tk = "globalPan",
    ek = {
        w: [0, 0],
        e: [0, 1],
        n: [1, 0],
        s: [1, 1]
    },
    ik = {
        w: "ew",
        e: "ew",
        n: "ns",
        s: "ns",
        ne: "nesw",
        sw: "nesw",
        nw: "nwse",
        se: "nwse"
    },
    nk = {
        brushStyle: {
            lineWidth: 2,
            stroke: "rgba(0,0,0,0.3)",
            fill: "rgba(0,0,0,0.1)"
        },
        transformable: !0,
        brushMode: "single",
        removeOnClick: !1
    },
    ok = 0;
    Cf.prototype = {
        constructor: Cf,
        enableBrush: function(t) {
            return this._brushType && kf(this),
            t.brushType && Lf(this, t),
            this
        },
        setPanels: function(t) {
            if (t && t.length) {
                var e = this._panels = {};
                d(t,
                function(t) {
                    e[t.panelId] = i(t)
                })
            } else this._panels = null;
            return this
        },
        mount: function(t) {
            t = t || {},
            this._enableGlobalPan = t.enableGlobalPan;
            var e = this.group;
            return this._zr.add(e),
            e.attr({
                position: t.position || [0, 0],
                rotation: t.rotation || 0,
                scale: t.scale || [1, 1]
            }),
            this._transform = e.getLocalTransform(),
            this
        },
        eachCover: function(t, e) {
            YL(this._covers, t, e)
        },
        updateCovers: function(t) {
            function e(t, e) {
                return (null != t.id ? t.id: a + e) + "-" + t.brushType
            }
            function o(e, i) {
                var n = t[e];
                if (null != i && r[i] === u) s[e] = r[i];
                else {
                    var o = s[e] = null != i ? (r[i].__brushOption = n, r[i]) : Nf(l, Pf(l, n));
                    Ef(l, o)
                }
            }
            t = f(t,
            function(t) {
                return n(i(nk), t, !0)
            });
            var a = "\0-brush-index-",
            r = this._covers,
            s = this._covers = [],
            l = this,
            u = this._creatingCover;
            return new Hs(r, t,
            function(t, i) {
                return e(t.__brushOption, i)
            },
            e).add(o).update(o).remove(function(t) {
                r[t] !== u && l.group.remove(r[t])
            }).execute(),
            this
        },
        unmount: function() {
            return this.enableBrush(!1),
            Ff(this),
            this._zr.remove(this.group),
            this
        },
        dispose: function() {
            this.unmount(),
            this.off()
        }
    },
    h(Cf, aw);
    var ak = {
        mousedown: function(t) {
            if (this._dragging) lp.call(this, t);
            else if (!t.target || !t.target.draggable) {
                op(t);
                var e = this.group.transformCoordToLocal(t.offsetX, t.offsetY);
                this._creatingCover = null,
                (this._creatingPanel = Bf(this, t, e)) && (this._dragging = !0, this._track = [e.slice()])
            }
        },
        mousemove: function(t) {
            var e = this.group.transformCoordToLocal(t.offsetX, t.offsetY);
            if (np(this, t, e), this._dragging) {
                op(t);
                var i = rp(this, t, e, !1);
                i && Gf(this, i)
            }
        },
        mouseup: lp
    },
    rk = {
        lineX: up(0),
        lineY: up(1),
        rect: {
            createCover: function(t, e) {
                return Zf(jL(Jf,
                function(t) {
                    return t
                },
                function(t) {
                    return t
                }), t, e, ["w", "e", "n", "s", "se", "sw", "ne", "nw"])
            },
            getCreatingRange: function(t) {
                var e = Hf(t);
                return qf(e[1][0], e[1][1], e[0][0], e[0][1])
            },
            updateCoverShape: function(t, e, i, n) {
                jf(t, e, i, n)
            },
            updateCommon: Yf,
            contain: ap
        },
        polygon: {
            createCover: function(t, e) {
                var i = new Zw;
                return i.add(new oM({
                    name: "main",
                    style: Xf(e),
                    silent: !0
                })),
                i
            },
            getCreatingRange: function(t) {
                return t
            },
            endCreating: function(t, e) {
                e.remove(e.childAt(0)),
                e.add(new nM({
                    name: "main",
                    draggable: !0,
                    drift: jL($f, t, e),
                    ondragend: jL(Gf, t, {
                        isEnd: !0
                    })
                }))
            },
            updateCoverShape: function(t, e, i, n) {
                e.childAt(0).setShape({
                    points: ep(t, e, i)
                })
            },
            updateCommon: Yf,
            contain: ap
        }
    },
    sk = ["axisLine", "axisTickLabel", "axisName"],
    lk = Vs({
        type: "parallelAxis",
        init: function(t, e) {
            lk.superApply(this, "init", arguments),
            (this._brushController = new Cf(e.getZr())).on("brush", m(this._onBrush, this))
        },
        render: function(t, e, i, n) {
            if (!pp(t, e, n)) {
                this.axisModel = t,
                this.api = i,
                this.group.removeAll();
                var o = this._axisGroup;
                if (this._axisGroup = new Zw, this.group.add(this._axisGroup), t.get("show")) {
                    var r = mp(t, e),
                    s = r.coordinateSystem,
                    l = t.getAreaSelectStyle(),
                    u = l.width,
                    h = t.axis.dim,
                    c = a({
                        strokeContainThreshold: u
                    },
                    s.getAxisLayout(h)),
                    f = new ID(t, c);
                    d(sk, f.add, f),
                    this._axisGroup.add(f.getGroup()),
                    this._refreshBrushController(c, l, t, r, u, i);
                    var p = n && !1 === n.animation ? null: t;
                    Ao(o, this._axisGroup, p)
                }
            }
        },
        _refreshBrushController: function(t, e, i, n, o, a) {
            var r = i.axis.getExtent(),
            s = r[1] - r[0],
            l = Math.min(30, .1 * Math.abs(s)),
            u = ue.create({
                x: r[0],
                y: -o / 2,
                width: s,
                height: o
            });
            u.x -= l,
            u.width += 2 * l,
            this._brushController.mount({
                enableGlobalPan: !0,
                rotation: t.rotation,
                position: t.position
            }).setPanels([{
                panelId: "pl",
                clipPath: hp(u),
                isTargetByCursor: dp(u, a, n),
                getLinearBrushOtherExtent: cp(u, 0)
            }]).enableBrush({
                brushType: "lineX",
                brushStyle: e,
                removeOnClick: !0
            }).updateCovers(gp(i))
        },
        _onBrush: function(t, e) {
            var i = this.axisModel,
            n = i.axis,
            o = f(t,
            function(t) {
                return [n.coordToData(t.range[0], !0), n.coordToData(t.range[1], !0)]
            }); (!i.option.realtime === e.isEnd || e.removeOnClick) && this.api.dispatchAction({
                type: "axisAreaSelect",
                parallelAxisId: i.id,
                intervals: o
            })
        },
        dispose: function() {
            this._brushController.dispose()
        }
    });
    Vs({
        type: "parallel",
        render: function(t, e, i) {
            this._model = t,
            this._api = i,
            this._handlers || (this._handlers = {},
            d(uk,
            function(t, e) {
                i.getZr().on(e, this._handlers[e] = m(t, this))
            },
            this)),
            Lr(this, "_throttledDispatchExpand", t.get("axisExpandRate"), "fixRate")
        },
        dispose: function(t, e) {
            d(this._handlers,
            function(t, i) {
                e.getZr().off(i, t)
            }),
            this._handlers = null
        },
        _throttledDispatchExpand: function(t) {
            this._dispatchExpand(t)
        },
        _dispatchExpand: function(t) {
            t && this._api.dispatchAction(a({
                type: "parallelAxisExpand"
            },
            t))
        }
    });
    var uk = {
        mousedown: function(t) {
            vp(this, "click") && (this._mouseDownPoint = [t.offsetX, t.offsetY])
        },
        mouseup: function(t) {
            var e = this._mouseDownPoint;
            if (vp(this, "click") && e) {
                var i = [t.offsetX, t.offsetY];
                if (Math.pow(e[0] - i[0], 2) + Math.pow(e[1] - i[1], 2) > 5) return;
                var n = this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]);
                "none" !== n.behavior && this._dispatchExpand({
                    axisExpandWindow: n.axisExpandWindow
                })
            }
            this._mouseDownPoint = null
        },
        mousemove: function(t) {
            if (!this._mouseDownPoint && vp(this, "mousemove")) {
                var e = this._model,
                i = e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]),
                n = i.behavior;
                "jump" === n && this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),
                this._throttledDispatchExpand("none" === n ? null: {
                    axisExpandWindow: i.axisExpandWindow,
                    animation: "jump" === n && null
                })
            }
        }
    };
    Ls(function(t) {
        wf(t),
        bf(t)
    }),
    OI.extend({
        type: "series.parallel",
        dependencies: ["parallel"],
        visualColorAccessPath: "lineStyle.color",
        getInitialData: function(t, e) {
            var i = this.getSource();
            return yp(i, this),
            dl(i, this)
        },
        getRawIndicesByActiveState: function(t) {
            var e = this.coordinateSystem,
            i = this.getData(),
            n = [];
            return e.eachActiveState(i,
            function(e, o) {
                t === e && n.push(i.getRawIndex(o))
            }),
            n
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "parallel",
            parallelIndex: 0,
            label: {
                show: !1
            },
            inactiveOpacity: .05,
            activeOpacity: 1,
            lineStyle: {
                width: 1,
                opacity: .45,
                type: "solid"
            },
            emphasis: {
                label: {
                    show: !1
                }
            },
            progressive: 500,
            smooth: !1,
            animationEasing: "linear"
        }
    });
    var hk = .3,
    ck = (Mr.extend({
        type: "parallel",
        init: function() {
            this._dataGroup = new Zw,
            this.group.add(this._dataGroup),
            this._data,
            this._initialized
        },
        render: function(t, e, i, n) {
            var o = this._dataGroup,
            a = t.getData(),
            r = this._data,
            s = t.coordinateSystem,
            l = s.dimensions,
            u = Sp(t);
            if (a.diff(r).add(function(t) {
                Mp(bp(a, o, t, l, s), a, t, u)
            }).update(function(e, i) {
                var o = r.getItemGraphicEl(i),
                h = wp(a, e, l, s);
                a.setItemGraphicEl(e, o),
                bo(o, {
                    shape: {
                        points: h
                    }
                },
                n && !1 === n.animation ? null: t, e),
                Mp(o, a, e, u)
            }).remove(function(t) {
                var e = r.getItemGraphicEl(t);
                o.remove(e)
            }).execute(), !this._initialized) {
                this._initialized = !0;
                var h = _p(s, t,
                function() {
                    setTimeout(function() {
                        o.removeClipPath()
                    })
                });
                o.setClipPath(h)
            }
            this._data = a
        },
        incrementalPrepareRender: function(t, e, i) {
            this._initialized = !0,
            this._data = null,
            this._dataGroup.removeAll()
        },
        incrementalRender: function(t, e, i) {
            for (var n = e.getData(), o = e.coordinateSystem, a = o.dimensions, r = Sp(e), s = t.start; s < t.end; s++) {
                var l = bp(n, this._dataGroup, s, a, o);
                l.incremental = !0,
                Mp(l, n, s, r)
            }
        },
        dispose: function() {},
        remove: function() {
            this._dataGroup && this._dataGroup.removeAll(),
            this._data = null
        }
    }), ["lineStyle", "normal", "opacity"]);
    zs({
        seriesType: "parallel",
        reset: function(t, e, i) {
            var n = t.getModel("itemStyle"),
            o = t.getModel("lineStyle"),
            a = e.get("color"),
            r = o.get("color") || n.get("color") || a[t.seriesIndex % a.length],
            s = t.get("inactiveOpacity"),
            l = t.get("activeOpacity"),
            u = t.getModel("lineStyle").getLineStyle(),
            h = t.coordinateSystem,
            c = t.getData(),
            d = {
                normal: u.opacity,
                active: l,
                inactive: s
            };
            return c.setVisual("color", r),
            {
                progress: function(t, e) {
                    h.eachActiveState(e,
                    function(t, i) {
                        var n = d[t];
                        if ("normal" === t && e.hasItemOption) {
                            var o = e.getItemModel(i).get(ck, !0);
                            null != o && (n = o)
                        }
                        e.setItemVisual(i, "opacity", n)
                    },
                    t.start, t.end)
                }
            }
        }
    });
    var dk = OI.extend({
        type: "series.sankey",
        layoutInfo: null,
        getInitialData: function(t) {
            var e = t.edges || t.links,
            i = t.data || t.nodes;
            if (i && e) return cL(i, e, this, !0).data
        },
        setNodePosition: function(t, e) {
            var i = this.option.data[t];
            i.localX = e[0],
            i.localY = e[1]
        },
        getGraph: function() {
            return this.getData().graph
        },
        getEdgeData: function() {
            return this.getGraph().edgeData
        },
        formatTooltip: function(t, e, i) {
            if ("edge" === i) {
                var n = this.getDataParams(t, i),
                o = n.data,
                a = o.source + " -- " + o.target;
                return n.value && (a += " : " + n.value),
                $o(a)
            }
            return dk.superCall(this, "formatTooltip", t, e)
        },
        optionUpdated: function() {
            var t = this.option; ! 0 === t.focusNodeAdjacency && (t.focusNodeAdjacency = "allEdges")
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "view",
            layout: null,
            left: "5%",
            top: "5%",
            right: "20%",
            bottom: "5%",
            orient: "horizontal",
            nodeWidth: 20,
            nodeGap: 8,
            draggable: !0,
            focusNodeAdjacency: !1,
            layoutIterations: 32,
            label: {
                show: !0,
                position: "right",
                color: "#000",
                fontSize: 12
            },
            itemStyle: {
                borderWidth: 1,
                borderColor: "#333"
            },
            lineStyle: {
                color: "#314656",
                opacity: .2,
                curveness: .5
            },
            emphasis: {
                label: {
                    show: !0
                },
                lineStyle: {
                    opacity: .6
                }
            },
            animationEasing: "linear",
            animationDuration: 1e3
        }
    }),
    fk = ["itemStyle", "opacity"],
    pk = ["lineStyle", "opacity"],
    gk = Gn({
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            cpx1: 0,
            cpy1: 0,
            cpx2: 0,
            cpy2: 0,
            extent: 0,
            orient: ""
        },
        buildPath: function(t, e) {
            var i = e.extent;
            "vertical" === e.orient ? (t.moveTo(e.x1, e.y1), t.bezierCurveTo(e.cpx1, e.cpy1, e.cpx2, e.cpy2, e.x2, e.y2), t.lineTo(e.x2 + i, e.y2), t.bezierCurveTo(e.cpx2 + i, e.cpy2, e.cpx1 + i, e.cpy1, e.x1 + i, e.y1)) : (t.moveTo(e.x1, e.y1), t.bezierCurveTo(e.cpx1, e.cpy1, e.cpx2, e.cpy2, e.x2, e.y2), t.lineTo(e.x2, e.y2 + i), t.bezierCurveTo(e.cpx2, e.cpy2 + i, e.cpx1, e.cpy1 + i, e.x1, e.y1 + i)),
            t.closePath()
        }
    });
    Gs({
        type: "sankey",
        _model: null,
        _focusAdjacencyDisabled: !1,
        render: function(t, e, i) {
            var n = this,
            o = t.getGraph(),
            a = this.group,
            r = t.layoutInfo,
            s = r.width,
            l = r.height,
            u = t.getData(),
            h = t.getData("edge"),
            c = t.get("orient");
            this._model = t,
            a.removeAll(),
            a.attr("position", [r.x, r.y]),
            o.eachEdge(function(e) {
                var i = new gk;
                i.dataIndex = e.dataIndex,
                i.seriesIndex = t.seriesIndex,
                i.dataType = "edge";
                var n, o, r, u, d, f, p, g, m = e.getModel("lineStyle"),
                v = m.get("curveness"),
                y = e.node1.getLayout(),
                x = e.node1.getModel(),
                _ = x.get("localX"),
                w = x.get("localY"),
                b = e.node2.getLayout(),
                S = e.node2.getModel(),
                M = S.get("localX"),
                I = S.get("localY"),
                T = e.getLayout();
                switch (i.shape.extent = Math.max(1, T.dy), i.shape.orient = c, "vertical" === c ? (n = (null != _ ? _ * s: y.x) + T.sy, o = (null != w ? w * l: y.y) + y.dy, r = (null != M ? M * s: b.x) + T.ty, d = n, f = o * (1 - v) + (u = null != I ? I * l: b.y) * v, p = r, g = o * v + u * (1 - v)) : (n = (null != _ ? _ * s: y.x) + y.dx, o = (null != w ? w * l: y.y) + T.sy, d = n * (1 - v) + (r = null != M ? M * s: b.x) * v, f = o, p = n * v + r * (1 - v), g = u = (null != I ? I * l: b.y) + T.ty), i.setShape({
                    x1: n,
                    y1: o,
                    x2: r,
                    y2: u,
                    cpx1: d,
                    cpy1: f,
                    cpx2: p,
                    cpy2: g
                }), i.setStyle(m.getItemStyle()), i.style.fill) {
                case "source":
                    i.style.fill = e.node1.getVisual("color");
                    break;
                case "target":
                    i.style.fill = e.node2.getVisual("color")
                }
                uo(i, e.getModel("emphasis.lineStyle").getItemStyle()),
                a.add(i),
                h.setItemGraphicEl(e.dataIndex, i)
            }),
            o.eachNode(function(e) {
                var i = e.getLayout(),
                n = e.getModel(),
                o = n.get("localX"),
                r = n.get("localY"),
                h = n.getModel("label"),
                c = n.getModel("emphasis.label"),
                d = new aM({
                    shape: {
                        x: null != o ? o * s: i.x,
                        y: null != r ? r * l: i.y,
                        width: i.dx,
                        height: i.dy
                    },
                    style: n.getModel("itemStyle").getItemStyle()
                }),
                f = e.getModel("emphasis.itemStyle").getItemStyle();
                co(d.style, f, h, c, {
                    labelFetcher: t,
                    labelDataIndex: e.dataIndex,
                    defaultText: e.id,
                    isRectText: !0
                }),
                d.setStyle("fill", e.getVisual("color")),
                uo(d, f),
                a.add(d),
                u.setItemGraphicEl(e.dataIndex, d),
                d.dataType = "node"
            }),
            u.eachItemGraphicEl(function(e, o) {
                var a = u.getItemModel(o);
                a.get("draggable") && (e.drift = function(e, a) {
                    n._focusAdjacencyDisabled = !0,
                    this.shape.x += e,
                    this.shape.y += a,
                    this.dirty(),
                    i.dispatchAction({
                        type: "dragNode",
                        seriesId: t.id,
                        dataIndex: u.getRawIndex(o),
                        localX: this.shape.x / s,
                        localY: this.shape.y / l
                    })
                },
                e.ondragend = function() {
                    n._focusAdjacencyDisabled = !1
                },
                e.draggable = !0, e.cursor = "move"),
                a.get("focusNodeAdjacency") && (e.off("mouseover").on("mouseover",
                function() {
                    n._focusAdjacencyDisabled || i.dispatchAction({
                        type: "focusNodeAdjacency",
                        seriesId: t.id,
                        dataIndex: e.dataIndex
                    })
                }), e.off("mouseout").on("mouseout",
                function() {
                    n._focusAdjacencyDisabled || i.dispatchAction({
                        type: "unfocusNodeAdjacency",
                        seriesId: t.id
                    })
                }))
            }),
            h.eachItemGraphicEl(function(e, o) {
                h.getItemModel(o).get("focusNodeAdjacency") && (e.off("mouseover").on("mouseover",
                function() {
                    n._focusAdjacencyDisabled || i.dispatchAction({
                        type: "focusNodeAdjacency",
                        seriesId: t.id,
                        edgeDataIndex: e.dataIndex
                    })
                }), e.off("mouseout").on("mouseout",
                function() {
                    n._focusAdjacencyDisabled || i.dispatchAction({
                        type: "unfocusNodeAdjacency",
                        seriesId: t.id
                    })
                }))
            }),
            !this._data && t.get("animation") && a.setClipPath(Cp(a.getBoundingRect(), t,
            function() {
                a.removeClipPath()
            })),
            this._data = t.getData()
        },
        dispose: function() {},
        focusNodeAdjacency: function(t, e, i, n) {
            var o = this._model.getData(),
            a = o.graph,
            r = n.dataIndex,
            s = o.getItemModel(r),
            l = n.edgeDataIndex;
            if (null != r || null != l) {
                var u = a.getNodeByIndex(r),
                h = a.getEdgeByIndex(l);
                if (a.eachNode(function(t) {
                    Ap(t, fk, .1)
                }), a.eachEdge(function(t) {
                    Ap(t, pk, .1)
                }), u) {
                    Dp(u, fk);
                    var c = s.get("focusNodeAdjacency");
                    "outEdges" === c ? d(u.outEdges,
                    function(t) {
                        t.dataIndex < 0 || (Dp(t, pk), Dp(t.node2, fk))
                    }) : "inEdges" === c ? d(u.inEdges,
                    function(t) {
                        t.dataIndex < 0 || (Dp(t, pk), Dp(t.node1, fk))
                    }) : "allEdges" === c && d(u.edges,
                    function(t) {
                        t.dataIndex < 0 || (Dp(t, pk), Dp(t.node1, fk), Dp(t.node2, fk))
                    })
                }
                h && (Dp(h, pk), Dp(h.node1, fk), Dp(h.node2, fk))
            }
        },
        unfocusNodeAdjacency: function(t, e, i, n) {
            var o = this._model.getGraph();
            o.eachNode(function(t) {
                Ap(t, fk)
            }),
            o.eachEdge(function(t) {
                Ap(t, pk)
            })
        }
    }),
    Ps({
        type: "dragNode",
        event: "dragNode",
        update: "update"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "sankey",
            query: t
        },
        function(e) {
            e.setNodePosition(t.dataIndex, [t.localX, t.localY])
        })
    }),
    Os(function(t, e, i) {
        t.eachSeriesByType("sankey",
        function(t) {
            var i = t.get("nodeWidth"),
            n = t.get("nodeGap"),
            o = kp(t, e);
            t.layoutInfo = o;
            var a = o.width,
            r = o.height,
            s = t.getGraph(),
            l = s.nodes,
            u = s.edges;
            Np(l),
            Pp(l, u, i, n, a, r, 0 !== g(l,
            function(t) {
                return 0 === t.getLayout().value
            }).length ? 0 : t.get("layoutIterations"), t.get("orient"))
        })
    }),
    zs(function(t, e) {
        t.eachSeriesByType("sankey",
        function(t) {
            var e = t.getGraph().nodes;
            if (e.length) {
                var i = 1 / 0,
                n = -1 / 0;
                d(e,
                function(t) {
                    var e = t.getLayout().value;
                    e < i && (i = e),
                    e > n && (n = e)
                }),
                d(e,
                function(e) {
                    var o = new UC({
                        type: "color",
                        mappingMethod: "linear",
                        dataExtent: [i, n],
                        visual: t.get("color")
                    }).mapValueToVisual(e.getLayout().value);
                    e.setVisual("color", o);
                    var a = e.getModel().get("itemStyle.color");
                    null != a && e.setVisual("color", a)
                })
            }
        })
    });
    var mk = {
        _baseAxisDim: null,
        getInitialData: function(t, e) {
            var i, n, o = e.getComponent("xAxis", this.get("xAxisIndex")),
            a = e.getComponent("yAxis", this.get("yAxisIndex")),
            r = o.get("type"),
            s = a.get("type");
            "category" === r ? (t.layout = "horizontal", i = o.getOrdinalMeta(), n = !0) : "category" === s ? (t.layout = "vertical", i = a.getOrdinalMeta(), n = !0) : t.layout = t.layout || "horizontal";
            var l = ["x", "y"],
            u = "horizontal" === t.layout ? 0 : 1,
            h = this._baseAxisDim = l[u],
            c = l[1 - u],
            f = [o, a],
            p = f[u].get("type"),
            g = f[1 - u].get("type"),
            m = t.data;
            if (m && n) {
                var v = [];
                d(m,
                function(t, e) {
                    var i;
                    t.value && y(t.value) ? (i = t.value.slice(), t.value.unshift(e)) : y(t) ? (i = t.slice(), t.unshift(e)) : i = t,
                    v.push(i)
                }),
                t.data = v
            }
            var x = this.defaultValueDimensions;
            return WD(this, {
                coordDimensions: [{
                    name: h,
                    type: Ys(p),
                    ordinalMeta: i,
                    otherDims: {
                        tooltip: !1,
                        itemName: 0
                    },
                    dimsDef: ["base"]
                },
                {
                    name: c,
                    type: Ys(g),
                    dimsDef: x.slice()
                }],
                dimensionsCount: x.length + 1
            })
        },
        getBaseAxis: function() {
            var t = this._baseAxisDim;
            return this.ecModel.getComponent(t + "Axis", this.get(t + "AxisIndex")).axis
        }
    };
    h(OI.extend({
        type: "series.boxplot",
        dependencies: ["xAxis", "yAxis", "grid"],
        defaultValueDimensions: [{
            name: "min",
            defaultTooltip: !0
        },
        {
            name: "Q1",
            defaultTooltip: !0
        },
        {
            name: "median",
            defaultTooltip: !0
        },
        {
            name: "Q3",
            defaultTooltip: !0
        },
        {
            name: "max",
            defaultTooltip: !0
        }],
        dimensions: null,
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: !0,
            hoverAnimation: !0,
            layout: null,
            boxWidth: [7, 50],
            itemStyle: {
                color: "#fff",
                borderWidth: 1
            },
            emphasis: {
                itemStyle: {
                    borderWidth: 2,
                    shadowBlur: 5,
                    shadowOffsetX: 2,
                    shadowOffsetY: 2,
                    shadowColor: "rgba(0,0,0,0.4)"
                }
            },
            animationEasing: "elasticOut",
            animationDuration: 800
        }
    }), mk, !0);
    var vk = ["itemStyle"],
    yk = ["emphasis", "itemStyle"],
    xk = (Mr.extend({
        type: "boxplot",
        render: function(t, e, i) {
            var n = t.getData(),
            o = this.group,
            a = this._data;
            this._data || o.removeAll();
            var r = "horizontal" === t.get("layout") ? 1 : 0;
            n.diff(a).add(function(t) {
                if (n.hasValue(t)) {
                    var e = qp(n.getItemLayout(t), n, t, r, !0);
                    n.setItemGraphicEl(t, e),
                    o.add(e)
                }
            }).update(function(t, e) {
                var i = a.getItemGraphicEl(e);
                if (n.hasValue(t)) {
                    var s = n.getItemLayout(t);
                    i ? Kp(s, i, n, t) : i = qp(s, n, t, r),
                    o.add(i),
                    n.setItemGraphicEl(t, i)
                } else o.remove(i)
            }).remove(function(t) {
                var e = a.getItemGraphicEl(t);
                e && o.remove(e)
            }).execute(),
            this._data = n
        },
        remove: function(t) {
            var e = this.group,
            i = this._data;
            this._data = null,
            i && i.eachItemGraphicEl(function(t) {
                t && e.remove(t)
            })
        },
        dispose: B
    }), kn.extend({
        type: "boxplotBoxPath",
        shape: {},
        buildPath: function(t, e) {
            var i = e.points,
            n = 0;
            for (t.moveTo(i[n][0], i[n][1]), n++; n < 4; n++) t.lineTo(i[n][0], i[n][1]);
            for (t.closePath(); n < i.length; n++) t.moveTo(i[n][0], i[n][1]),
            n++,
            t.lineTo(i[n][0], i[n][1])
        }
    })),
    _k = ["itemStyle", "borderColor"],
    wk = d;
    zs(function(t, e) {
        var i = t.get("color");
        t.eachRawSeriesByType("boxplot",
        function(e) {
            var n = i[e.seriesIndex % i.length],
            o = e.getData();
            o.setVisual({
                legendSymbol: "roundRect",
                color: e.get(_k) || n
            }),
            t.isSeriesFiltered(e) || o.each(function(t) {
                var e = o.getItemModel(t);
                o.setItemVisual(t, {
                    color: e.get(_k, !0)
                })
            })
        })
    }),
    Os(function(t) {
        var e = Jp(t);
        wk(e,
        function(t) {
            var e = t.seriesModels;
            e.length && ($p(t), wk(e,
            function(e, i) {
                tg(e, t.boxOffsetList[i], t.boxWidthList[i])
            }))
        })
    }),
    h(OI.extend({
        type: "series.candlestick",
        dependencies: ["xAxis", "yAxis", "grid"],
        defaultValueDimensions: [{
            name: "open",
            defaultTooltip: !0
        },
        {
            name: "close",
            defaultTooltip: !0
        },
        {
            name: "lowest",
            defaultTooltip: !0
        },
        {
            name: "highest",
            defaultTooltip: !0
        }],
        dimensions: null,
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: !0,
            hoverAnimation: !0,
            layout: null,
            itemStyle: {
                color: "#c23531",
                color0: "#314656",
                borderWidth: 1,
                borderColor: "#c23531",
                borderColor0: "#314656"
            },
            emphasis: {
                itemStyle: {
                    borderWidth: 2
                }
            },
            barMaxWidth: null,
            barMinWidth: null,
            barWidth: null,
            large: !0,
            largeThreshold: 600,
            progressive: 3e3,
            progressiveThreshold: 1e4,
            progressiveChunkMode: "mod",
            animationUpdate: !1,
            animationEasing: "linear",
            animationDuration: 300
        },
        getShadowDim: function() {
            return "open"
        },
        brushSelector: function(t, e, i) {
            var n = e.getItemLayout(t);
            return n && i.rect(n.brushRect)
        }
    }), mk, !0);
    var bk = ["itemStyle"],
    Sk = ["emphasis", "itemStyle"],
    Mk = ["color", "color0", "borderColor", "borderColor0"],
    Ik = (Mr.extend({
        type: "candlestick",
        render: function(t, e, i) {
            this._updateDrawMode(t),
            this._isLargeDraw ? this._renderLarge(t) : this._renderNormal(t)
        },
        incrementalPrepareRender: function(t, e, i) {
            this._clear(),
            this._updateDrawMode(t)
        },
        incrementalRender: function(t, e, i, n) {
            this._isLargeDraw ? this._incrementalRenderLarge(t, e) : this._incrementalRenderNormal(t, e)
        },
        _updateDrawMode: function(t) {
            var e = t.pipelineContext.large; (null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear())
        },
        _renderNormal: function(t) {
            var e = t.getData(),
            i = this._data,
            n = this.group,
            o = e.getLayout("isSimpleBox");
            this._data || n.removeAll(),
            e.diff(i).add(function(i) {
                if (e.hasValue(i)) {
                    var a, r = e.getItemLayout(i);
                    So(a = eg(r, 0, !0), {
                        shape: {
                            points: r.ends
                        }
                    },
                    t, i),
                    ig(a, e, i, o),
                    n.add(a),
                    e.setItemGraphicEl(i, a)
                }
            }).update(function(a, r) {
                var s = i.getItemGraphicEl(r);
                if (e.hasValue(a)) {
                    var l = e.getItemLayout(a);
                    s ? bo(s, {
                        shape: {
                            points: l.ends
                        }
                    },
                    t, a) : s = eg(l),
                    ig(s, e, a, o),
                    n.add(s),
                    e.setItemGraphicEl(a, s)
                } else n.remove(s)
            }).remove(function(t) {
                var e = i.getItemGraphicEl(t);
                e && n.remove(e)
            }).execute(),
            this._data = e
        },
        _renderLarge: function(t) {
            this._clear(),
            og(t, this.group)
        },
        _incrementalRenderNormal: function(t, e) {
            for (var i, n = e.getData(), o = n.getLayout("isSimpleBox"); null != (i = t.next());) {
                var a;
                ig(a = eg(n.getItemLayout(i)), n, i, o),
                a.incremental = !0,
                this.group.add(a)
            }
        },
        _incrementalRenderLarge: function(t, e) {
            og(e, this.group, !0)
        },
        remove: function(t) {
            this._clear()
        },
        _clear: function() {
            this.group.removeAll(),
            this._data = null
        },
        dispose: B
    }), kn.extend({
        type: "normalCandlestickBox",
        shape: {},
        buildPath: function(t, e) {
            var i = e.points;
            this.__simpleBox ? (t.moveTo(i[4][0], i[4][1]), t.lineTo(i[6][0], i[6][1])) : (t.moveTo(i[0][0], i[0][1]), t.lineTo(i[1][0], i[1][1]), t.lineTo(i[2][0], i[2][1]), t.lineTo(i[3][0], i[3][1]), t.closePath(), t.moveTo(i[4][0], i[4][1]), t.lineTo(i[5][0], i[5][1]), t.moveTo(i[6][0], i[6][1]), t.lineTo(i[7][0], i[7][1]))
        }
    })),
    Tk = kn.extend({
        type: "largeCandlestickBox",
        shape: {},
        buildPath: function(t, e) {
            for (var i = e.points,
            n = 0; n < i.length;) if (this.__sign === i[n++]) {
                var o = i[n++];
                t.moveTo(o, i[n++]),
                t.lineTo(o, i[n++])
            } else n += 3
        }
    }),
    Ak = ["itemStyle", "borderColor"],
    Dk = ["itemStyle", "borderColor0"],
    Ck = ["itemStyle", "color"],
    Lk = ["itemStyle", "color0"],
    kk = {
        seriesType: "candlestick",
        plan: RI(),
        performRawSeries: !0,
        reset: function(t, e) {
            function i(t, e) {
                return e.get(t > 0 ? Ck: Lk)
            }
            function n(t, e) {
                return e.get(t > 0 ? Ak: Dk)
            }
            var o = t.getData(),
            a = t.pipelineContext.large;
            if (o.setVisual({
                legendSymbol: "roundRect",
                colorP: i(1, t),
                colorN: i( - 1, t),
                borderColorP: n(1, t),
                borderColorN: n( - 1, t)
            }), !e.isSeriesFiltered(t)) return ! a && {
                progress: function(t, e) {
                    for (var o; null != (o = t.next());) {
                        var a = e.getItemModel(o),
                        r = e.getItemLayout(o).sign;
                        e.setItemVisual(o, {
                            color: i(r, a),
                            borderColor: n(r, a)
                        })
                    }
                }
            }
        }
    },
    Pk = "undefined" != typeof Float32Array ? Float32Array: Array,
    Nk = {
        seriesType: "candlestick",
        plan: RI(),
        reset: function(t) {
            var e = t.coordinateSystem,
            i = t.getData(),
            n = sg(t, i),
            o = 0,
            a = 1,
            r = ["x", "y"],
            s = i.mapDimension(r[o]),
            l = i.mapDimension(r[a], !0),
            u = l[0],
            h = l[1],
            c = l[2],
            d = l[3];
            if (i.setLayout({
                candleWidth: n,
                isSimpleBox: n <= 1.3
            }), !(null == s || l.length < 4)) return {
                progress: t.pipelineContext.large ?
                function(t, i) {
                    for (var n, r, l = new Pk(5 * t.count), f = 0, p = [], g = []; null != (r = t.next());) {
                        var m = i.get(s, r),
                        v = i.get(u, r),
                        y = i.get(h, r),
                        x = i.get(c, r),
                        _ = i.get(d, r);
                        isNaN(m) || isNaN(x) || isNaN(_) ? (l[f++] = NaN, f += 4) : (l[f++] = rg(i, r, v, y, h), p[o] = m, p[a] = x, n = e.dataToPoint(p, null, g), l[f++] = n ? n[0] : NaN, l[f++] = n ? n[1] : NaN, p[a] = _, n = e.dataToPoint(p, null, g), l[f++] = n ? n[1] : NaN)
                    }
                    i.setLayout("largePoints", l)
                }: function(t, i) {
                    function r(t, i) {
                        var n = [];
                        return n[o] = i,
                        n[a] = t,
                        isNaN(i) || isNaN(t) ? [NaN, NaN] : e.dataToPoint(n)
                    }
                    function l(t, e, i) {
                        var a = e.slice(),
                        r = e.slice();
                        a[o] = Xn(a[o] + n / 2, 1, !1),
                        r[o] = Xn(r[o] - n / 2, 1, !0),
                        i ? t.push(a, r) : t.push(r, a)
                    }
                    function f(t) {
                        return t[o] = Xn(t[o], 1),
                        t
                    }
                    for (var p; null != (p = t.next());) {
                        var g = i.get(s, p),
                        m = i.get(u, p),
                        v = i.get(h, p),
                        y = i.get(c, p),
                        x = i.get(d, p),
                        _ = Math.min(m, v),
                        w = Math.max(m, v),
                        b = r(_, g),
                        S = r(w, g),
                        M = r(y, g),
                        I = r(x, g),
                        T = [];
                        l(T, S, 0),
                        l(T, b, 1),
                        T.push(f(I), f(S), f(M), f(b)),
                        i.setItemLayout(p, {
                            sign: rg(i, p, m, v, h),
                            initBaseline: m > v ? S[a] : b[a],
                            ends: T,
                            brushRect: function(t, e, i) {
                                var s = r(t, i),
                                l = r(e, i);
                                return s[o] -= n / 2,
                                l[o] -= n / 2,
                                {
                                    x: s[0],
                                    y: s[1],
                                    width: a ? n: l[0] - s[0],
                                    height: a ? l[1] - s[1] : n
                                }
                            } (y, x, g)
                        })
                    }
                }
            }
        }
    };
    Ls(function(t) {
        t && y(t.series) && d(t.series,
        function(t) {
            w(t) && "k" === t.type && (t.type = "candlestick")
        })
    }),
    zs(kk),
    Os(Nk),
    OI.extend({
        type: "series.effectScatter",
        dependencies: ["grid", "polar"],
        getInitialData: function(t, e) {
            return dl(this.getSource(), this)
        },
        brushSelector: "point",
        defaultOption: {
            coordinateSystem: "cartesian2d",
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            effectType: "ripple",
            progressive: 0,
            showEffectOn: "render",
            rippleEffect: {
                period: 4,
                scale: 2.5,
                brushType: "fill"
            },
            symbolSize: 10
        }
    });
    var Ok = hg.prototype;
    Ok.stopEffectAnimation = function() {
        this.childAt(1).removeAll()
    },
    Ok.startEffectAnimation = function(t) {
        for (var e = t.symbolType,
        i = t.color,
        n = this.childAt(1), o = 0; o < 3; o++) {
            var a = Yl(e, -1, -1, 2, 2, i);
            a.attr({
                style: {
                    strokeNoScale: !0
                },
                z2: 99,
                silent: !0,
                scale: [.5, .5]
            });
            var r = -o / 3 * t.period + t.effectOffset;
            a.animate("", !0).when(t.period, {
                scale: [t.rippleScale / 2, t.rippleScale / 2]
            }).delay(r).start(),
            a.animateStyle(!0).when(t.period, {
                opacity: 0
            }).delay(r).start(),
            n.add(a)
        }
        ug(n, t)
    },
    Ok.updateEffectAnimation = function(t) {
        for (var e = this._effectCfg,
        i = this.childAt(1), n = ["symbolType", "period", "rippleScale"], o = 0; o < n.length; o++) {
            var a = n[o];
            if (e[a] !== t[a]) return this.stopEffectAnimation(),
            void this.startEffectAnimation(t)
        }
        ug(i, t)
    },
    Ok.highlight = function() {
        this.trigger("emphasis")
    },
    Ok.downplay = function() {
        this.trigger("normal")
    },
    Ok.updateData = function(t, e) {
        var i = t.hostModel;
        this.childAt(0).updateData(t, e);
        var n = this.childAt(1),
        o = t.getItemModel(e),
        a = t.getItemVisual(e, "symbol"),
        r = lg(t.getItemVisual(e, "symbolSize")),
        s = t.getItemVisual(e, "color");
        n.attr("scale", r),
        n.traverse(function(t) {
            t.attr({
                fill: s
            })
        });
        var l = o.getShallow("symbolOffset");
        if (l) {
            var u = n.position;
            u[0] = Eo(l[0], r[0]),
            u[1] = Eo(l[1], r[1])
        }
        n.rotation = (o.getShallow("symbolRotate") || 0) * Math.PI / 180 || 0;
        var h = {};
        if (h.showEffectOn = i.get("showEffectOn"), h.rippleScale = o.get("rippleEffect.scale"), h.brushType = o.get("rippleEffect.brushType"), h.period = 1e3 * o.get("rippleEffect.period"), h.effectOffset = e / t.count(), h.z = o.getShallow("z") || 0, h.zlevel = o.getShallow("zlevel") || 0, h.symbolType = a, h.color = s, this.off("mouseover").off("mouseout").off("emphasis").off("normal"), "render" === h.showEffectOn) this._effectCfg ? this.updateEffectAnimation(h) : this.startEffectAnimation(h),
        this._effectCfg = h;
        else {
            this._effectCfg = null,
            this.stopEffectAnimation();
            var c = this.childAt(0),
            d = function() {
                c.highlight(),
                "render" !== h.showEffectOn && this.startEffectAnimation(h)
            },
            f = function() {
                c.downplay(),
                "render" !== h.showEffectOn && this.stopEffectAnimation()
            };
            this.on("mouseover", d, this).on("mouseout", f, this).on("emphasis", d, this).on("normal", f, this)
        }
        this._effectCfg = h
    },
    Ok.fadeOut = function(t) {
        this.off("mouseover").off("mouseout").off("emphasis").off("normal"),
        t && t()
    },
    u(hg, Zw),
    Gs({
        type: "effectScatter",
        init: function() {
            this._symbolDraw = new Su(hg)
        },
        render: function(t, e, i) {
            var n = t.getData(),
            o = this._symbolDraw;
            o.updateData(n),
            this.group.add(o.group)
        },
        updateTransform: function(t, e, i) {
            var n = t.getData();
            this.group.dirty();
            var o = cD().reset(t);
            o.progress && o.progress({
                start: 0,
                end: n.count()
            },
            n),
            this._symbolDraw.updateLayout(n)
        },
        _updateGroupTransform: function(t) {
            var e = t.coordinateSystem;
            e && e.getRoamTransform && (this.group.transform = Mt(e.getRoamTransform()), this.group.decomposeTransform())
        },
        remove: function(t, e) {
            this._symbolDraw && this._symbolDraw.remove(e)
        },
        dispose: function() {}
    }),
    zs(hD("effectScatter", "circle")),
    Os(cD("effectScatter"));
    var zk = "undefined" == typeof Uint32Array ? Array: Uint32Array,
    Ek = "undefined" == typeof Float64Array ? Array: Float64Array,
    Rk = OI.extend({
        type: "series.lines",
        dependencies: ["grid", "polar"],
        visualColorAccessPath: "lineStyle.color",
        init: function(t) {
            t.data = t.data || [],
            cg(t);
            var e = this._processFlatCoordsArray(t.data);
            this._flatCoords = e.flatCoords,
            this._flatCoordsOffset = e.flatCoordsOffset,
            e.flatCoords && (t.data = new Float32Array(e.count)),
            Rk.superApply(this, "init", arguments)
        },
        mergeOption: function(t) {
            if (t.data = t.data || [], cg(t), t.data) {
                var e = this._processFlatCoordsArray(t.data);
                this._flatCoords = e.flatCoords,
                this._flatCoordsOffset = e.flatCoordsOffset,
                e.flatCoords && (t.data = new Float32Array(e.count))
            }
            Rk.superApply(this, "mergeOption", arguments)
        },
        appendData: function(t) {
            var e = this._processFlatCoordsArray(t.data);
            e.flatCoords && (this._flatCoords ? (this._flatCoords = R(this._flatCoords, e.flatCoords), this._flatCoordsOffset = R(this._flatCoordsOffset, e.flatCoordsOffset)) : (this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset), t.data = new Float32Array(e.count)),
            this.getRawData().appendData(t.data)
        },
        _getCoordsFromItemModel: function(t) {
            var e = this.getData().getItemModel(t);
            return e.option instanceof Array ? e.option: e.getShallow("coords")
        },
        getLineCoordsCount: function(t) {
            return this._flatCoordsOffset ? this._flatCoordsOffset[2 * t + 1] : this._getCoordsFromItemModel(t).length
        },
        getLineCoords: function(t, e) {
            if (this._flatCoordsOffset) {
                for (var i = this._flatCoordsOffset[2 * t], n = this._flatCoordsOffset[2 * t + 1], o = 0; o < n; o++) e[o] = e[o] || [],
                e[o][0] = this._flatCoords[i + 2 * o],
                e[o][1] = this._flatCoords[i + 2 * o + 1];
                return n
            }
            for (var a = this._getCoordsFromItemModel(t), o = 0; o < a.length; o++) e[o] = e[o] || [],
            e[o][0] = a[o][0],
            e[o][1] = a[o][1];
            return a.length
        },
        _processFlatCoordsArray: function(t) {
            var e = 0;
            if (this._flatCoords && (e = this._flatCoords.length), "number" == typeof t[0]) {
                for (var i = t.length,
                n = new zk(i), o = new Ek(i), a = 0, r = 0, s = 0, l = 0; l < i;) {
                    s++;
                    var u = t[l++];
                    n[r++] = a + e,
                    n[r++] = u;
                    for (var h = 0; h < u; h++) {
                        var c = t[l++],
                        d = t[l++];
                        o[a++] = c,
                        o[a++] = d
                    }
                }
                return {
                    flatCoordsOffset: new Uint32Array(n.buffer, 0, r),
                    flatCoords: o,
                    count: s
                }
            }
            return {
                flatCoordsOffset: null,
                flatCoords: null,
                count: t.length
            }
        },
        getInitialData: function(t, e) {
            var i = new eA(["value"], this);
            return i.hasItemOption = !1,
            i.initData(t.data, [],
            function(t, e, n, o) {
                if (t instanceof Array) return NaN;
                i.hasItemOption = !0;
                var a = t.value;
                return null != a ? a instanceof Array ? a[o] : a: void 0
            }),
            i
        },
        formatTooltip: function(t) {
            var e = this.getData().getItemModel(t),
            i = e.get("name");
            if (i) return i;
            var n = e.get("fromName"),
            o = e.get("toName"),
            a = [];
            return null != n && a.push(n),
            null != o && a.push(o),
            $o(a.join(" > "))
        },
        preventIncremental: function() {
            return !! this.get("effect.show")
        },
        getProgressive: function() {
            var t = this.option.progressive;
            return null == t ? this.option.large ? 1e4: this.get("progressive") : t
        },
        getProgressiveThreshold: function() {
            var t = this.option.progressiveThreshold;
            return null == t ? this.option.large ? 2e4: this.get("progressiveThreshold") : t
        },
        defaultOption: {
            coordinateSystem: "geo",
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            hoverAnimation: !0,
            xAxisIndex: 0,
            yAxisIndex: 0,
            symbol: ["none", "none"],
            symbolSize: [10, 10],
            geoIndex: 0,
            effect: {
                show: !1,
                period: 4,
                constantSpeed: 0,
                symbol: "circle",
                symbolSize: 3,
                loop: !0,
                trailLength: .2
            },
            large: !1,
            largeThreshold: 2e3,
            polyline: !1,
            label: {
                show: !1,
                position: "end"
            },
            lineStyle: {
                opacity: .5
            }
        }
    }),
    Bk = dg.prototype;
    Bk.createLine = function(t, e, i) {
        return new Qd(t, e, i)
    },
    Bk._updateEffectSymbol = function(t, e) {
        var i = t.getItemModel(e).getModel("effect"),
        n = i.get("symbolSize"),
        o = i.get("symbol");
        y(n) || (n = [n, n]);
        var a = i.get("color") || t.getItemVisual(e, "color"),
        r = this.childAt(1);
        this._symbolType !== o && (this.remove(r), (r = Yl(o, -.5, -.5, 1, 1, a)).z2 = 100, r.culling = !0, this.add(r)),
        r && (r.setStyle("shadowColor", a), r.setStyle(i.getItemStyle(["color"])), r.attr("scale", n), r.setColor(a), r.attr("scale", n), this._symbolType = o, this._updateEffectAnimation(t, i, e))
    },
    Bk._updateEffectAnimation = function(t, e, i) {
        var n = this.childAt(1);
        if (n) {
            var o = this,
            a = t.getItemLayout(i),
            r = 1e3 * e.get("period"),
            s = e.get("loop"),
            l = e.get("constantSpeed"),
            u = T(e.get("delay"),
            function(e) {
                return e / t.count() * r / 3
            }),
            h = "function" == typeof u;
            if (n.ignore = !0, this.updateAnimationPoints(n, a), l > 0 && (r = this.getLineLength(n) / l * 1e3), r !== this._period || s !== this._loop) {
                n.stopAnimation();
                var c = u;
                h && (c = u(i)),
                n.__t > 0 && (c = -r * n.__t),
                n.__t = 0;
                var d = n.animate("", s).when(r, {
                    __t: 1
                }).delay(c).during(function() {
                    o.updateSymbolPosition(n)
                });
                s || d.done(function() {
                    o.remove(n)
                }),
                d.start()
            }
            this._period = r,
            this._loop = s
        }
    },
    Bk.getLineLength = function(t) {
        return ew(t.__p1, t.__cp1) + ew(t.__cp1, t.__p2)
    },
    Bk.updateAnimationPoints = function(t, e) {
        t.__p1 = e[0],
        t.__p2 = e[1],
        t.__cp1 = e[2] || [(e[0][0] + e[1][0]) / 2, (e[0][1] + e[1][1]) / 2]
    },
    Bk.updateData = function(t, e, i) {
        this.childAt(0).updateData(t, e, i),
        this._updateEffectSymbol(t, e)
    },
    Bk.updateSymbolPosition = function(t) {
        var e = t.__p1,
        i = t.__p2,
        n = t.__cp1,
        o = t.__t,
        a = t.position,
        r = rn,
        s = sn;
        a[0] = r(e[0], n[0], i[0], o),
        a[1] = r(e[1], n[1], i[1], o);
        var l = s(e[0], n[0], i[0], o),
        u = s(e[1], n[1], i[1], o);
        t.rotation = -Math.atan2(u, l) - Math.PI / 2,
        t.ignore = !1
    },
    Bk.updateLayout = function(t, e) {
        this.childAt(0).updateLayout(t, e);
        var i = t.getItemModel(e).getModel("effect");
        this._updateEffectAnimation(t, i, e)
    },
    u(dg, Zw);
    var Vk = fg.prototype;
    Vk._createPolyline = function(t, e, i) {
        var n = t.getItemLayout(e),
        o = new oM({
            shape: {
                points: n
            }
        });
        this.add(o),
        this._updateCommonStl(t, e, i)
    },
    Vk.updateData = function(t, e, i) {
        var n = t.hostModel;
        bo(this.childAt(0), {
            shape: {
                points: t.getItemLayout(e)
            }
        },
        n, e),
        this._updateCommonStl(t, e, i)
    },
    Vk._updateCommonStl = function(t, e, i) {
        var n = this.childAt(0),
        o = t.getItemModel(e),
        a = t.getItemVisual(e, "color"),
        s = i && i.lineStyle,
        l = i && i.hoverLineStyle;
        i && !t.hasItemOption || (s = o.getModel("lineStyle").getLineStyle(), l = o.getModel("emphasis.lineStyle").getLineStyle()),
        n.useStyle(r({
            strokeNoScale: !0,
            fill: "none",
            stroke: a
        },
        s)),
        n.hoverStyle = l,
        uo(this)
    },
    Vk.updateLayout = function(t, e) {
        this.childAt(0).setShape("points", t.getItemLayout(e))
    },
    u(fg, Zw);
    var Fk = pg.prototype;
    Fk.createLine = function(t, e, i) {
        return new fg(t, e, i)
    },
    Fk.updateAnimationPoints = function(t, e) {
        this._points = e;
        for (var i = [0], n = 0, o = 1; o < e.length; o++) {
            var a = e[o - 1],
            r = e[o];
            n += ew(a, r),
            i.push(n)
        }
        if (0 !== n) {
            for (o = 0; o < i.length; o++) i[o] /= n;
            this._offsets = i,
            this._length = n
        }
    },
    Fk.getLineLength = function(t) {
        return this._length
    },
    Fk.updateSymbolPosition = function(t) {
        var e = t.__t,
        i = this._points,
        n = this._offsets,
        o = i.length;
        if (n) {
            var a = this._lastFrame;
            if (e < this._lastFramePercent) {
                for (r = Math.min(a + 1, o - 1); r >= 0 && !(n[r] <= e); r--);
                r = Math.min(r, o - 2)
            } else {
                for (var r = a; r < o && !(n[r] > e); r++);
                r = Math.min(r - 1, o - 2)
            }
            J(t.position, i[r], i[r + 1], (e - n[r]) / (n[r + 1] - n[r]));
            var s = i[r + 1][0] - i[r][0],
            l = i[r + 1][1] - i[r][1];
            t.rotation = -Math.atan2(l, s) - Math.PI / 2,
            this._lastFrame = r,
            this._lastFramePercent = e,
            t.ignore = !1
        }
    },
    u(pg, dg);
    var Gk = Gn({
        shape: {
            polyline: !1,
            curveness: 0,
            segs: []
        },
        buildPath: function(t, e) {
            var i = e.segs,
            n = e.curveness;
            if (e.polyline) for (r = 0; r < i.length;) {
                var o = i[r++];
                if (o > 0) {
                    t.moveTo(i[r++], i[r++]);
                    for (var a = 1; a < o; a++) t.lineTo(i[r++], i[r++])
                }
            } else for (var r = 0; r < i.length;) {
                var s = i[r++],
                l = i[r++],
                u = i[r++],
                h = i[r++];
                if (t.moveTo(s, l), n > 0) {
                    var c = (s + u) / 2 - (l - h) * n,
                    d = (l + h) / 2 - (u - s) * n;
                    t.quadraticCurveTo(c, d, u, h)
                } else t.lineTo(u, h)
            }
        },
        findDataIndex: function(t, e) {
            var i = this.shape,
            n = i.segs,
            o = i.curveness;
            if (i.polyline) for (var a = 0,
            r = 0; r < n.length;) {
                var s = n[r++];
                if (s > 0) for (var l = n[r++], u = n[r++], h = 1; h < s; h++) if (vn(l, u, c = n[r++], d = n[r++])) return a;
                a++
            } else for (var a = 0,
            r = 0; r < n.length;) {
                var l = n[r++],
                u = n[r++],
                c = n[r++],
                d = n[r++];
                if (o > 0) {
                    if (xn(l, u, (l + c) / 2 - (u - d) * o, (u + d) / 2 - (c - l) * o, c, d)) return a
                } else if (vn(l, u, c, d)) return a;
                a++
            }
            return - 1
        }
    }),
    Wk = gg.prototype;
    Wk.isPersistent = function() {
        return ! this._incremental
    },
    Wk.updateData = function(t) {
        this.group.removeAll();
        var e = new Gk({
            rectHover: !0,
            cursor: "default"
        });
        e.setShape({
            segs: t.getLayout("linesPoints")
        }),
        this._setCommon(e, t),
        this.group.add(e),
        this._incremental = null
    },
    Wk.incrementalPrepareUpdate = function(t) {
        this.group.removeAll(),
        this._clearIncremental(),
        t.count() > 5e5 ? (this._incremental || (this._incremental = new Fn({
            silent: !0
        })), this.group.add(this._incremental)) : this._incremental = null
    },
    Wk.incrementalUpdate = function(t, e) {
        var i = new Gk;
        i.setShape({
            segs: e.getLayout("linesPoints")
        }),
        this._setCommon(i, e, !!this._incremental),
        this._incremental ? this._incremental.addDisplayable(i, !0) : (i.rectHover = !0, i.cursor = "default", i.__startIndex = t.start, this.group.add(i))
    },
    Wk.remove = function() {
        this._clearIncremental(),
        this._incremental = null,
        this.group.removeAll()
    },
    Wk._setCommon = function(t, e, i) {
        var n = e.hostModel;
        t.setShape({
            polyline: n.get("polyline"),
            curveness: n.get("lineStyle.curveness")
        }),
        t.useStyle(n.getModel("lineStyle").getLineStyle()),
        t.style.strokeNoScale = !0;
        var o = e.getVisual("color");
        o && t.setStyle("stroke", o),
        t.setStyle("fill"),
        i || (t.seriesIndex = n.seriesIndex, t.on("mousemove",
        function(e) {
            t.dataIndex = null;
            var i = t.findDataIndex(e.offsetX, e.offsetY);
            i > 0 && (t.dataIndex = i + t.__startIndex)
        }))
    },
    Wk._clearIncremental = function() {
        var t = this._incremental;
        t && t.clearDisplaybles()
    };
    var Hk = {
        seriesType: "lines",
        plan: RI(),
        reset: function(t) {
            var e = t.coordinateSystem,
            i = t.get("polyline"),
            n = t.pipelineContext.large;
            return {
                progress: function(o, a) {
                    var r = [];
                    if (n) {
                        var s, l = o.end - o.start;
                        if (i) {
                            for (var u = 0,
                            h = o.start; h < o.end; h++) u += t.getLineCoordsCount(h);
                            s = new Float32Array(l + 2 * u)
                        } else s = new Float32Array(4 * l);
                        for (var c = 0,
                        d = [], h = o.start; h < o.end; h++) {
                            g = t.getLineCoords(h, r),
                            i && (s[c++] = g);
                            for (var f = 0; f < g; f++) d = e.dataToPoint(r[f], !1, d),
                            s[c++] = d[0],
                            s[c++] = d[1]
                        }
                        a.setLayout("linesPoints", s)
                    } else for (h = o.start; h < o.end; h++) {
                        var p = a.getItemModel(h),
                        g = t.getLineCoords(h, r),
                        m = [];
                        if (i) for (var v = 0; v < g; v++) m.push(e.dataToPoint(r[v]));
                        else {
                            m[0] = e.dataToPoint(r[0]),
                            m[1] = e.dataToPoint(r[1]);
                            var y = p.get("lineStyle.curveness"); + y && (m[2] = [(m[0][0] + m[1][0]) / 2 - (m[0][1] - m[1][1]) * y, (m[0][1] + m[1][1]) / 2 - (m[1][0] - m[0][0]) * y])
                        }
                        a.setItemLayout(h, m)
                    }
                }
            }
        }
    };
    Gs({
        type: "lines",
        init: function() {},
        render: function(t, e, i) {
            var n = t.getData(),
            o = this._updateLineDraw(n, t),
            a = t.get("zlevel"),
            r = t.get("effect.trailLength"),
            s = i.getZr(),
            l = "svg" === s.painter.getType();
            l || s.painter.getLayer(a).clear(!0),
            null == this._lastZlevel || l || s.configLayer(this._lastZlevel, {
                motionBlur: !1
            }),
            this._showEffect(t) && r && (l || s.configLayer(a, {
                motionBlur: !0,
                lastFrameAlpha: Math.max(Math.min(r / 10 + .9, 1), 0)
            })),
            o.updateData(n),
            this._lastZlevel = a,
            this._finished = !0
        },
        incrementalPrepareRender: function(t, e, i) {
            var n = t.getData();
            this._updateLineDraw(n, t).incrementalPrepareUpdate(n),
            this._clearLayer(i),
            this._finished = !1
        },
        incrementalRender: function(t, e, i) {
            this._lineDraw.incrementalUpdate(t, e.getData()),
            this._finished = t.end === e.getData().count()
        },
        updateTransform: function(t, e, i) {
            var n = t.getData(),
            o = t.pipelineContext;
            if (!this._finished || o.large || o.progressiveRender) return {
                update: !0
            };
            var a = Hk.reset(t);
            a.progress && a.progress({
                start: 0,
                end: n.count()
            },
            n),
            this._lineDraw.updateLayout(),
            this._clearLayer(i)
        },
        _updateLineDraw: function(t, e) {
            var i = this._lineDraw,
            n = this._showEffect(e),
            o = !!e.get("polyline"),
            a = e.pipelineContext.large;
            return i && n === this._hasEffet && o === this._isPolyline && a === this._isLargeDraw || (i && i.remove(), i = this._lineDraw = a ? new gg: new Jd(o ? n ? pg: fg: n ? dg: Qd), this._hasEffet = n, this._isPolyline = o, this._isLargeDraw = a, this.group.removeAll()),
            this.group.add(i.group),
            i
        },
        _showEffect: function(t) {
            return !! t.get("effect.show")
        },
        _clearLayer: function(t) {
            var e = t.getZr();
            "svg" === e.painter.getType() || null == this._lastZlevel || e.painter.getLayer(this._lastZlevel).clear(!0)
        },
        remove: function(t, e) {
            this._lineDraw && this._lineDraw.remove(),
            this._lineDraw = null,
            this._clearLayer(e)
        },
        dispose: function() {}
    });
    var Zk = "lineStyle.opacity".split("."),
    jk = {
        seriesType: "lines",
        reset: function(t, e, i) {
            var n = mg(t.get("symbol")),
            o = mg(t.get("symbolSize")),
            a = t.getData();
            return a.setVisual("fromSymbol", n && n[0]),
            a.setVisual("toSymbol", n && n[1]),
            a.setVisual("fromSymbolSize", o && o[0]),
            a.setVisual("toSymbolSize", o && o[1]),
            a.setVisual("opacity", t.get(Zk)),
            {
                dataEach: a.hasItemOption ?
                function(t, e) {
                    var i = t.getItemModel(e),
                    n = mg(i.getShallow("symbol", !0)),
                    o = mg(i.getShallow("symbolSize", !0)),
                    a = i.get(Zk);
                    n[0] && t.setItemVisual(e, "fromSymbol", n[0]),
                    n[1] && t.setItemVisual(e, "toSymbol", n[1]),
                    o[0] && t.setItemVisual(e, "fromSymbolSize", o[0]),
                    o[1] && t.setItemVisual(e, "toSymbolSize", o[1]),
                    t.setItemVisual(e, "opacity", a)
                }: null
            }
        }
    };
    Os(Hk),
    zs(jk),
    OI.extend({
        type: "series.heatmap",
        getInitialData: function(t, e) {
            return dl(this.getSource(), this, {
                generateCoord: "value"
            })
        },
        preventIncremental: function() {
            var t = Ba.get(this.get("coordinateSystem"));
            if (t && t.dimensions) return "lng" === t.dimensions[0] && "lat" === t.dimensions[1]
        },
        defaultOption: {
            coordinateSystem: "cartesian2d",
            zlevel: 0,
            z: 2,
            geoIndex: 0,
            blurSize: 30,
            pointSize: 20,
            maxOpacity: 1,
            minOpacity: 0
        }
    }),
    vg.prototype = {
        update: function(t, e, i, n, o, a) {
            var r = this._getBrush(),
            s = this._getGradient(t, o, "inRange"),
            l = this._getGradient(t, o, "outOfRange"),
            u = this.pointSize + this.blurSize,
            h = this.canvas,
            c = h.getContext("2d"),
            d = t.length;
            h.width = e,
            h.height = i;
            for (var f = 0; f < d; ++f) {
                var p = t[f],
                g = p[0],
                m = p[1],
                v = n(p[2]);
                c.globalAlpha = v,
                c.drawImage(r, g - u, m - u)
            }
            if (!h.width || !h.height) return h;
            for (var y = c.getImageData(0, 0, h.width, h.height), x = y.data, _ = 0, w = x.length, b = this.minOpacity, S = this.maxOpacity - b; _ < w;) {
                var v = x[_ + 3] / 256,
                M = 4 * Math.floor(255 * v);
                if (v > 0) {
                    var I = a(v) ? s: l;
                    v > 0 && (v = v * S + b),
                    x[_++] = I[M],
                    x[_++] = I[M + 1],
                    x[_++] = I[M + 2],
                    x[_++] = I[M + 3] * v * 256
                } else _ += 4
            }
            return c.putImageData(y, 0, 0),
            h
        },
        _getBrush: function() {
            var t = this._brushCanvas || (this._brushCanvas = X_()),
            e = this.pointSize + this.blurSize,
            i = 2 * e;
            t.width = i,
            t.height = i;
            var n = t.getContext("2d");
            return n.clearRect(0, 0, i, i),
            n.shadowOffsetX = i,
            n.shadowBlur = this.blurSize,
            n.shadowColor = "#000",
            n.beginPath(),
            n.arc( - e, e, this.pointSize, 0, 2 * Math.PI, !0),
            n.closePath(),
            n.fill(),
            t
        },
        _getGradient: function(t, e, i) {
            for (var n = this._gradientPixels,
            o = n[i] || (n[i] = new Uint8ClampedArray(1024)), a = [0, 0, 0, 0], r = 0, s = 0; s < 256; s++) e[i](s / 255, !0, a),
            o[r++] = a[0],
            o[r++] = a[1],
            o[r++] = a[2],
            o[r++] = a[3];
            return o
        }
    },
    Gs({
        type: "heatmap",
        render: function(t, e, i) {
            var n;
            e.eachComponent("visualMap",
            function(e) {
                e.eachTargetSeries(function(i) {
                    i === t && (n = e)
                })
            }),
            this.group.removeAll(),
            this._incrementalDisplayable = null;
            var o = t.coordinateSystem;
            "cartesian2d" === o.type || "calendar" === o.type ? this._renderOnCartesianAndCalendar(t, i, 0, t.getData().count()) : _g(o) && this._renderOnGeo(o, t, n, i)
        },
        incrementalPrepareRender: function(t, e, i) {
            this.group.removeAll()
        },
        incrementalRender: function(t, e, i, n) {
            e.coordinateSystem && this._renderOnCartesianAndCalendar(e, n, t.start, t.end, !0)
        },
        _renderOnCartesianAndCalendar: function(t, e, i, n, o) {
            var r, s, l = t.coordinateSystem;
            if ("cartesian2d" === l.type) {
                var u = l.getAxis("x"),
                h = l.getAxis("y");
                r = u.getBandWidth(),
                s = h.getBandWidth()
            }
            for (var c = this.group,
            d = t.getData(), f = t.getModel("itemStyle").getItemStyle(["color"]), p = t.getModel("emphasis.itemStyle").getItemStyle(), g = t.getModel("label"), m = t.getModel("emphasis.label"), v = l.type, y = "cartesian2d" === v ? [d.mapDimension("x"), d.mapDimension("y"), d.mapDimension("value")] : [d.mapDimension("time"), d.mapDimension("value")], x = i; x < n; x++) {
                var _;
                if ("cartesian2d" === v) {
                    if (isNaN(d.get(y[2], x))) continue;
                    var w = l.dataToPoint([d.get(y[0], x), d.get(y[1], x)]);
                    _ = new aM({
                        shape: {
                            x: w[0] - r / 2,
                            y: w[1] - s / 2,
                            width: r,
                            height: s
                        },
                        style: {
                            fill: d.getItemVisual(x, "color"),
                            opacity: d.getItemVisual(x, "opacity")
                        }
                    })
                } else {
                    if (isNaN(d.get(y[1], x))) continue;
                    _ = new aM({
                        z2: 1,
                        shape: l.dataToRect([d.get(y[0], x)]).contentShape,
                        style: {
                            fill: d.getItemVisual(x, "color"),
                            opacity: d.getItemVisual(x, "opacity")
                        }
                    })
                }
                var b = d.getItemModel(x);
                d.hasItemOption && (f = b.getModel("itemStyle").getItemStyle(["color"]), p = b.getModel("emphasis.itemStyle").getItemStyle(), g = b.getModel("label"), m = b.getModel("emphasis.label"));
                var S = t.getRawValue(x),
                M = "-";
                S && null != S[2] && (M = S[2]),
                co(f, p, g, m, {
                    labelFetcher: t,
                    labelDataIndex: x,
                    defaultText: M,
                    isRectText: !0
                }),
                _.setStyle(f),
                uo(_, d.hasItemOption ? p: a({},
                p)),
                _.incremental = o,
                o && (_.useHoverLayer = !0),
                c.add(_),
                d.setItemGraphicEl(x, _)
            }
        },
        _renderOnGeo: function(t, e, i, n) {
            var o = i.targetVisuals.inRange,
            a = i.targetVisuals.outOfRange,
            r = e.getData(),
            s = this._hmLayer || this._hmLayer || new vg;
            s.blurSize = e.get("blurSize"),
            s.pointSize = e.get("pointSize"),
            s.minOpacity = e.get("minOpacity"),
            s.maxOpacity = e.get("maxOpacity");
            var l = t.getViewRect().clone(),
            u = t.getRoamTransform();
            l.applyTransform(u);
            var h = Math.max(l.x, 0),
            c = Math.max(l.y, 0),
            d = Math.min(l.width + l.x, n.getWidth()),
            f = Math.min(l.height + l.y, n.getHeight()),
            p = d - h,
            g = f - c,
            m = [r.mapDimension("lng"), r.mapDimension("lat"), r.mapDimension("value")],
            v = r.mapArray(m,
            function(e, i, n) {
                var o = t.dataToPoint([e, i]);
                return o[0] -= h,
                o[1] -= c,
                o.push(n),
                o
            }),
            y = i.getExtent(),
            x = "visualMap.continuous" === i.type ? xg(y, i.option.range) : yg(y, i.getPieceList(), i.option.selected);
            s.update(v, p, g, o.color.getNormalizer(), {
                inRange: o.color.getColorMapper(),
                outOfRange: a.color.getColorMapper()
            },
            x);
            var _ = new hi({
                style: {
                    width: p,
                    height: g,
                    x: h,
                    y: c,
                    image: s.canvas
                },
                silent: !0
            });
            this.group.add(_)
        },
        dispose: function() {}
    });
    var Yk = zD.extend({
        type: "series.pictorialBar",
        dependencies: ["grid"],
        defaultOption: {
            symbol: "circle",
            symbolSize: null,
            symbolRotate: null,
            symbolPosition: null,
            symbolOffset: null,
            symbolMargin: null,
            symbolRepeat: !1,
            symbolRepeatDirection: "end",
            symbolClip: !1,
            symbolBoundingData: null,
            symbolPatternSize: 400,
            barGap: "-100%",
            progressive: 0,
            hoverAnimation: !1
        },
        getInitialData: function(t) {
            return t.stack = null,
            Yk.superApply(this, "getInitialData", arguments)
        }
    }),
    Uk = ["itemStyle", "borderWidth"],
    Xk = [{
        xy: "x",
        wh: "width",
        index: 0,
        posDesc: ["left", "right"]
    },
    {
        xy: "y",
        wh: "height",
        index: 1,
        posDesc: ["top", "bottom"]
    }],
    qk = new KS;
    Gs({
        type: "pictorialBar",
        render: function(t, e, i) {
            var n = this.group,
            o = t.getData(),
            a = this._data,
            r = t.coordinateSystem,
            s = !!r.getBaseAxis().isHorizontal(),
            l = r.grid.getRect(),
            u = {
                ecSize: {
                    width: i.getWidth(),
                    height: i.getHeight()
                },
                seriesModel: t,
                coordSys: r,
                coordSysExtent: [[l.x, l.x + l.width], [l.y, l.y + l.height]],
                isHorizontal: s,
                valueDim: Xk[ + s],
                categoryDim: Xk[1 - s]
            };
            return o.diff(a).add(function(t) {
                if (o.hasValue(t)) {
                    var e = Pg(o, t),
                    i = wg(o, t, e, u),
                    a = Eg(o, u, i);
                    o.setItemGraphicEl(t, a),
                    n.add(a),
                    Wg(a, u, i)
                }
            }).update(function(t, e) {
                var i = a.getItemGraphicEl(e);
                if (o.hasValue(t)) {
                    var r = Pg(o, t),
                    s = wg(o, t, r, u),
                    l = Vg(o, s);
                    i && l !== i.__pictorialShapeStr && (n.remove(i), o.setItemGraphicEl(t, null), i = null),
                    i ? Rg(i, u, s) : i = Eg(o, u, s, !0),
                    o.setItemGraphicEl(t, i),
                    i.__pictorialSymbolMeta = s,
                    n.add(i),
                    Wg(i, u, s)
                } else n.remove(i)
            }).remove(function(t) {
                var e = a.getItemGraphicEl(t);
                e && Bg(a, t, e.__pictorialSymbolMeta.animationModel, e)
            }).execute(),
            this._data = o,
            this.group
        },
        dispose: B,
        remove: function(t, e) {
            var i = this.group,
            n = this._data;
            t.get("animation") ? n && n.eachItemGraphicEl(function(e) {
                Bg(n, e.dataIndex, t, e)
            }) : i.removeAll()
        }
    }),
    Os(v(kl, "pictorialBar")),
    zs(hD("pictorialBar", "roundRect"));
    var Kk = function(t, e, i, n, o) {
        HA.call(this, t, e, i),
        this.type = n || "value",
        this.position = o || "bottom",
        this.orient = null
    };
    Kk.prototype = {
        constructor: Kk,
        model: null,
        isHorizontal: function() {
            var t = this.position;
            return "top" === t || "bottom" === t
        },
        pointToData: function(t, e) {
            return this.coordinateSystem.pointToData(t, e)[0]
        },
        toGlobalCoord: null,
        toLocalCoord: null
    },
    u(Kk, HA),
    Zg.prototype = {
        type: "singleAxis",
        axisPointerEnabled: !0,
        constructor: Zg,
        _init: function(t, e, i) {
            var n = this.dimension,
            o = new Kk(n, Vl(t), [0, 0], t.get("type"), t.get("position")),
            a = "category" === o.type;
            o.onBand = a && t.get("boundaryGap"),
            o.inverse = t.get("inverse"),
            o.orient = t.get("orient"),
            t.axis = o,
            o.model = t,
            o.coordinateSystem = this,
            this._axis = o
        },
        update: function(t, e) {
            t.eachSeries(function(t) {
                if (t.coordinateSystem === this) {
                    var e = t.getData();
                    d(e.mapDimension(this.dimension, !0),
                    function(t) {
                        this._axis.scale.unionExtentFromData(e, t)
                    },
                    this),
                    Bl(this._axis.scale, this._axis.model)
                }
            },
            this)
        },
        resize: function(t, e) {
            this._rect = la({
                left: t.get("left"),
                top: t.get("top"),
                right: t.get("right"),
                bottom: t.get("bottom"),
                width: t.get("width"),
                height: t.get("height")
            },
            {
                width: e.getWidth(),
                height: e.getHeight()
            }),
            this._adjustAxis()
        },
        getRect: function() {
            return this._rect
        },
        _adjustAxis: function() {
            var t = this._rect,
            e = this._axis,
            i = e.isHorizontal(),
            n = i ? [0, t.width] : [0, t.height],
            o = e.reverse ? 1 : 0;
            e.setExtent(n[o], n[1 - o]),
            this._updateAxisTransform(e, i ? t.x: t.y)
        },
        _updateAxisTransform: function(t, e) {
            var i = t.getExtent(),
            n = i[0] + i[1],
            o = t.isHorizontal();
            t.toGlobalCoord = o ?
            function(t) {
                return t + e
            }: function(t) {
                return n - t + e
            },
            t.toLocalCoord = o ?
            function(t) {
                return t - e
            }: function(t) {
                return n - t + e
            }
        },
        getAxis: function() {
            return this._axis
        },
        getBaseAxis: function() {
            return this._axis
        },
        getAxes: function() {
            return [this._axis]
        },
        getTooltipAxes: function() {
            return {
                baseAxes: [this.getAxis()]
            }
        },
        containPoint: function(t) {
            var e = this.getRect(),
            i = this.getAxis();
            return "horizontal" === i.orient ? i.contain(i.toLocalCoord(t[0])) && t[1] >= e.y && t[1] <= e.y + e.height: i.contain(i.toLocalCoord(t[1])) && t[0] >= e.y && t[0] <= e.y + e.height
        },
        pointToData: function(t) {
            var e = this.getAxis();
            return [e.coordToData(e.toLocalCoord(t["horizontal" === e.orient ? 0 : 1]))]
        },
        dataToPoint: function(t) {
            var e = this.getAxis(),
            i = this.getRect(),
            n = [],
            o = "horizontal" === e.orient ? 0 : 1;
            return t instanceof Array && (t = t[0]),
            n[o] = e.toGlobalCoord(e.dataToCoord( + t)),
            n[1 - o] = 0 === o ? i.y + i.height / 2 : i.x + i.width / 2,
            n
        }
    },
    Ba.register("single", {
        create: function(t, e) {
            var i = [];
            return t.eachComponent("singleAxis",
            function(n, o) {
                var a = new Zg(n, t, e);
                a.name = "single_" + o,
                a.resize(n, e),
                n.coordinateSystem = a,
                i.push(a)
            }),
            t.eachSeries(function(e) {
                if ("singleAxis" === e.get("coordinateSystem")) {
                    var i = t.queryComponents({
                        mainType: "singleAxis",
                        index: e.get("singleAxisIndex"),
                        id: e.get("singleAxisId")
                    })[0];
                    e.coordinateSystem = i && i.coordinateSystem
                }
            }),
            i
        },
        dimensions: Zg.prototype.dimensions
    });
    var Qk = ["axisLine", "axisTickLabel", "axisName"],
    Jk = LD.extend({
        type: "singleAxis",
        axisPointerClass: "SingleAxisPointer",
        render: function(t, e, i, n) {
            var o = this.group;
            o.removeAll();
            var a = jg(t),
            r = new ID(t, a);
            d(Qk, r.add, r),
            o.add(r.getGroup()),
            t.get("splitLine.show") && this._splitLine(t),
            Jk.superCall(this, "render", t, e, i, n)
        },
        _splitLine: function(t) {
            var e = t.axis;
            if (!e.scale.isBlank()) {
                var i = t.getModel("splitLine"),
                n = i.getModel("lineStyle"),
                o = n.get("width"),
                a = n.get("color");
                a = a instanceof Array ? a: [a];
                for (var r = t.coordinateSystem.getRect(), s = e.isHorizontal(), l = [], u = 0, h = e.getTicksCoords({
                    tickModel: i
                }), c = [], d = [], f = 0; f < h.length; ++f) {
                    var p = e.toGlobalCoord(h[f].coord);
                    s ? (c[0] = p, c[1] = r.y, d[0] = p, d[1] = r.y + r.height) : (c[0] = r.x, c[1] = p, d[0] = r.x + r.width, d[1] = p);
                    var g = u++%a.length;
                    l[g] = l[g] || [],
                    l[g].push(new rM(Yn({
                        shape: {
                            x1: c[0],
                            y1: c[1],
                            x2: d[0],
                            y2: d[1]
                        },
                        style: {
                            lineWidth: o
                        },
                        silent: !0
                    })))
                }
                for (f = 0; f < l.length; ++f) this.group.add(xM(l[f], {
                    style: {
                        stroke: a[f % a.length],
                        lineDash: n.getLineDash(o),
                        lineWidth: o
                    },
                    silent: !0
                }))
            }
        }
    }),
    $k = XM.extend({
        type: "singleAxis",
        layoutMode: "box",
        axis: null,
        coordinateSystem: null,
        getCoordSysModel: function() {
            return this
        }
    }),
    tP = {
        left: "5%",
        top: "5%",
        right: "5%",
        bottom: "5%",
        type: "value",
        position: "bottom",
        orient: "horizontal",
        axisLine: {
            show: !0,
            lineStyle: {
                width: 2,
                type: "solid"
            }
        },
        tooltip: {
            show: !0
        },
        axisTick: {
            show: !0,
            length: 6,
            lineStyle: {
                width: 2
            }
        },
        axisLabel: {
            show: !0,
            interval: "auto"
        },
        splitLine: {
            show: !0,
            lineStyle: {
                type: "dashed",
                opacity: .2
            }
        }
    };
    n($k.prototype, CA),
    xD("single", $k,
    function(t, e) {
        return e.type || (e.data ? "category": "value")
    },
    tP);
    var eP = function(t, e) {
        var i, n = [],
        o = t.seriesIndex;
        if (null == o || !(i = e.getSeriesByIndex(o))) return {
            point: []
        };
        var a = i.getData(),
        r = Ri(a, t);
        if (null == r || r < 0 || y(r)) return {
            point: []
        };
        var s = a.getItemGraphicEl(r),
        l = i.coordinateSystem;
        if (i.getTooltipPosition) n = i.getTooltipPosition(r) || [];
        else if (l && l.dataToPoint) n = l.dataToPoint(a.getValues(f(l.dimensions,
        function(t) {
            return a.mapDimension(t)
        }), r, !0)) || [];
        else if (s) {
            var u = s.getBoundingRect().clone();
            u.applyTransform(s.transform),
            n = [u.x + u.width / 2, u.y + u.height / 2]
        }
        return {
            point: n,
            el: s
        }
    },
    iP = d,
    nP = v,
    oP = Bi(),
    aP = (Bs({
        type: "axisPointer",
        coordSysAxesInfo: null,
        defaultOption: {
            show: "auto",
            triggerOn: null,
            zlevel: 0,
            z: 50,
            type: "line",
            snap: !1,
            triggerTooltip: !0,
            value: null,
            status: null,
            link: [],
            animation: null,
            animationDurationUpdate: 200,
            lineStyle: {
                color: "#aaa",
                width: 1,
                type: "solid"
            },
            shadowStyle: {
                color: "rgba(150,150,150,0.3)"
            },
            label: {
                show: !0,
                formatter: null,
                precision: "auto",
                margin: 3,
                color: "#fff",
                padding: [5, 7, 5, 7],
                backgroundColor: "auto",
                borderColor: null,
                borderWidth: 0,
                shadowBlur: 3,
                shadowColor: "#aaa"
            },
            handle: {
                show: !1,
                icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
                size: 45,
                margin: 50,
                color: "#333",
                shadowBlur: 3,
                shadowColor: "#aaa",
                shadowOffsetX: 0,
                shadowOffsetY: 2,
                throttle: 40
            }
        }
    }), Bi()),
    rP = d,
    sP = Vs({
        type: "axisPointer",
        render: function(t, e, i) {
            var n = e.getComponent("tooltip"),
            o = t.get("triggerOn") || n && n.get("triggerOn") || "mousemove|click";
            im("axisPointer", i,
            function(t, e, i) {
                "none" !== o && ("leave" === t || o.indexOf(t) >= 0) && i({
                    type: "updateAxisPointer",
                    currTrigger: t,
                    x: e && e.offsetX,
                    y: e && e.offsetY
                })
            })
        },
        remove: function(t, e) {
            lm(e.getZr(), "axisPointer"),
            sP.superApply(this._model, "remove", arguments)
        },
        dispose: function(t, e) {
            lm("axisPointer", e),
            sP.superApply(this._model, "dispose", arguments)
        }
    }),
    lP = Bi(),
    uP = i,
    hP = m; (um.prototype = {
        _group: null,
        _lastGraphicKey: null,
        _handle: null,
        _dragging: !1,
        _lastValue: null,
        _lastStatus: null,
        _payloadInfo: null,
        animationThreshold: 15,
        render: function(t, e, i, n) {
            var o = e.get("value"),
            a = e.get("status");
            if (this._axisModel = t, this._axisPointerModel = e, this._api = i, n || this._lastValue !== o || this._lastStatus !== a) {
                this._lastValue = o,
                this._lastStatus = a;
                var r = this._group,
                s = this._handle;
                if (!a || "hide" === a) return r && r.hide(),
                void(s && s.hide());
                r && r.show(),
                s && s.show();
                var l = {};
                this.makeElOption(l, o, t, e, i);
                var u = l.graphicKey;
                u !== this._lastGraphicKey && this.clear(i),
                this._lastGraphicKey = u;
                var h = this._moveAnimation = this.determineAnimation(t, e);
                if (r) {
                    var c = v(hm, e, h);
                    this.updatePointerEl(r, l, c, e),
                    this.updateLabelEl(r, l, c, e)
                } else r = this._group = new Zw,
                this.createPointerEl(r, l, t, e),
                this.createLabelEl(r, l, t, e),
                i.getZr().add(r);
                pm(r, e, !0),
                this._renderHandle(o)
            }
        },
        remove: function(t) {
            this.clear(t)
        },
        dispose: function(t) {
            this.clear(t)
        },
        determineAnimation: function(t, e) {
            var i = e.get("animation"),
            n = t.axis,
            o = "category" === n.type,
            a = e.get("snap");
            if (!a && !o) return ! 1;
            if ("auto" === i || null == i) {
                var r = this.animationThreshold;
                if (o && n.getBandWidth() > r) return ! 0;
                if (a) {
                    var s = xh(t).seriesDataCount,
                    l = n.getExtent();
                    return Math.abs(l[0] - l[1]) / s > r
                }
                return ! 1
            }
            return ! 0 === i
        },
        makeElOption: function(t, e, i, n, o) {},
        createPointerEl: function(t, e, i, n) {
            var o = e.pointer;
            if (o) {
                var a = lP(t).pointerEl = new bM[o.type](uP(e.pointer));
                t.add(a)
            }
        },
        createLabelEl: function(t, e, i, n) {
            if (e.label) {
                var o = lP(t).labelEl = new aM(uP(e.label));
                t.add(o),
                dm(o, n)
            }
        },
        updatePointerEl: function(t, e, i) {
            var n = lP(t).pointerEl;
            n && (n.setStyle(e.pointer.style), i(n, {
                shape: e.pointer.shape
            }))
        },
        updateLabelEl: function(t, e, i, n) {
            var o = lP(t).labelEl;
            o && (o.setStyle(e.label.style), i(o, {
                shape: e.label.shape,
                position: e.label.position
            }), dm(o, n))
        },
        _renderHandle: function(t) {
            if (!this._dragging && this.updateHandleTransform) {
                var e = this._axisPointerModel,
                i = this._api.getZr(),
                n = this._handle,
                o = e.getModel("handle"),
                a = e.get("status");
                if (!o.get("show") || !a || "hide" === a) return n && i.remove(n),
                void(this._handle = null);
                var r;
                this._handle || (r = !0, n = this._handle = Co(o.get("icon"), {
                    cursor: "move",
                    draggable: !0,
                    onmousemove: function(t) {
                        lw(t.event)
                    },
                    onmousedown: hP(this._onHandleDragMove, this, 0, 0),
                    drift: hP(this._onHandleDragMove, this),
                    ondragend: hP(this._onHandleDragEnd, this)
                }), i.add(n)),
                pm(n, e, !1);
                var s = ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY"];
                n.setStyle(o.getItemStyle(null, s));
                var l = o.get("size");
                y(l) || (l = [l, l]),
                n.attr("scale", [l[0] / 2, l[1] / 2]),
                Lr(this, "_doDispatchAxisPointer", o.get("throttle") || 0, "fixRate"),
                this._moveHandleToValue(t, r)
            }
        },
        _moveHandleToValue: function(t, e) {
            hm(this._axisPointerModel, !e && this._moveAnimation, this._handle, fm(this.getHandleTransform(t, this._axisModel, this._axisPointerModel)))
        },
        _onHandleDragMove: function(t, e) {
            var i = this._handle;
            if (i) {
                this._dragging = !0;
                var n = this.updateHandleTransform(fm(i), [t, e], this._axisModel, this._axisPointerModel);
                this._payloadInfo = n,
                i.stopAnimation(),
                i.attr(fm(n)),
                lP(i).lastProp = null,
                this._doDispatchAxisPointer()
            }
        },
        _doDispatchAxisPointer: function() {
            if (this._handle) {
                var t = this._payloadInfo,
                e = this._axisModel;
                this._api.dispatchAction({
                    type: "updateAxisPointer",
                    x: t.cursorPoint[0],
                    y: t.cursorPoint[1],
                    tooltipOption: t.tooltipOption,
                    axesInfo: [{
                        axisDim: e.axis.dim,
                        axisIndex: e.componentIndex
                    }]
                })
            }
        },
        _onHandleDragEnd: function(t) {
            if (this._dragging = !1, this._handle) {
                var e = this._axisPointerModel.get("value");
                this._moveHandleToValue(e),
                this._api.dispatchAction({
                    type: "hideTip"
                })
            }
        },
        getHandleTransform: null,
        updateHandleTransform: null,
        clear: function(t) {
            this._lastValue = null,
            this._lastStatus = null;
            var e = t.getZr(),
            i = this._group,
            n = this._handle;
            e && i && (this._lastGraphicKey = null, i && e.remove(i), n && e.remove(n), this._group = null, this._handle = null, this._payloadInfo = null)
        },
        doClear: function() {},
        buildLabel: function(t, e, i) {
            return i = i || 0,
            {
                x: t[i],
                y: t[1 - i],
                width: e[i],
                height: e[1 - i]
            }
        }
    }).constructor = um,
    Yi(um);
    var cP = um.extend({
        makeElOption: function(t, e, i, n, o) {
            var a = i.axis,
            r = a.grid,
            s = n.get("type"),
            l = Mm(r, a).getOtherAxis(a).getGlobalExtent(),
            u = a.toGlobalCoord(a.dataToCoord(e, !0));
            if (s && "none" !== s) {
                var h = gm(n),
                c = dP[s](a, u, l, h);
                c.style = h,
                t.graphicKey = c.type,
                t.pointer = c
            }
            _m(e, t, Ih(r.model, i), i, n, o)
        },
        getHandleTransform: function(t, e, i) {
            var n = Ih(e.axis.grid.model, e, {
                labelInside: !1
            });
            return n.labelMargin = i.get("handle.margin"),
            {
                position: xm(e.axis, t, n),
                rotation: n.rotation + (n.labelDirection < 0 ? Math.PI: 0)
            }
        },
        updateHandleTransform: function(t, e, i, n) {
            var o = i.axis,
            a = o.grid,
            r = o.getGlobalExtent(!0),
            s = Mm(a, o).getOtherAxis(o).getGlobalExtent(),
            l = "x" === o.dim ? 0 : 1,
            u = t.position;
            u[l] += e[l],
            u[l] = Math.min(r[1], u[l]),
            u[l] = Math.max(r[0], u[l]);
            var h = (s[1] + s[0]) / 2,
            c = [h, h];
            c[l] = u[l];
            var d = [{
                verticalAlign: "middle"
            },
            {
                align: "center"
            }];
            return {
                position: u,
                rotation: t.rotation,
                cursorPoint: c,
                tooltipOption: d[l]
            }
        }
    }),
    dP = {
        line: function(t, e, i, n) {
            var o = wm([e, i[0]], [e, i[1]], Im(t));
            return Yn({
                shape: o,
                style: n
            }),
            {
                type: "Line",
                shape: o
            }
        },
        shadow: function(t, e, i, n) {
            var o = Math.max(1, t.getBandWidth()),
            a = i[1] - i[0];
            return {
                type: "Rect",
                shape: bm([e - o / 2, i[0]], [o, a], Im(t))
            }
        }
    };
    LD.registerAxisPointerClass("CartesianAxisPointer", cP),
    Ls(function(t) {
        if (t) { (!t.axisPointer || 0 === t.axisPointer.length) && (t.axisPointer = {});
            var e = t.axisPointer.link;
            e && !y(e) && (t.axisPointer.link = [e])
        }
    }),
    ks(IT.PROCESSOR.STATISTIC,
    function(t, e) {
        t.getComponent("axisPointer").coordSysAxesInfo = dh(t, e)
    }),
    Ps({
        type: "updateAxisPointer",
        event: "updateAxisPointer",
        update: ":updateAxisPointer"
    },
    function(t, e, i) {
        var n = t.currTrigger,
        o = [t.x, t.y],
        a = t,
        r = t.dispatchAction || m(i.dispatchAction, i),
        s = e.getComponent("axisPointer").coordSysAxesInfo;
        if (s) {
            em(o) && (o = eP({
                seriesIndex: a.seriesIndex,
                dataIndex: a.dataIndex
            },
            e).point);
            var l = em(o),
            u = a.axesInfo,
            h = s.axesInfo,
            c = "leave" === n || em(o),
            d = {},
            f = {},
            p = {
                list: [],
                map: {}
            },
            g = {
                showPointer: nP(Xg, f),
                showTooltip: nP(qg, p)
            };
            iP(s.coordSysMap,
            function(t, e) {
                var i = l || t.containPoint(o);
                iP(s.coordSysAxesInfo[e],
                function(t, e) {
                    var n = t.axis,
                    a = $g(u, t);
                    if (!c && i && (!u || a)) {
                        var r = a && a.value;
                        null != r || l || (r = n.pointToData(o)),
                        null != r && Yg(t, r, g, !1, d)
                    }
                })
            });
            var v = {};
            return iP(h,
            function(t, e) {
                var i = t.linkGroup;
                i && !f[e] && iP(i.axesInfo,
                function(e, n) {
                    var o = f[n];
                    if (e !== t && o) {
                        var a = o.value;
                        i.mapper && (a = t.axis.scale.parse(i.mapper(a, tm(e), tm(t)))),
                        v[t.key] = a
                    }
                })
            }),
            iP(v,
            function(t, e) {
                Yg(h[e], t, g, !0, d)
            }),
            Kg(f, h, d),
            Qg(p, o, t, r),
            Jg(h, 0, i),
            d
        }
    });
    var fP = ["x", "y"],
    pP = ["width", "height"],
    gP = um.extend({
        makeElOption: function(t, e, i, n, o) {
            var a = i.axis,
            r = a.coordinateSystem,
            s = Am(r, 1 - Tm(a)),
            l = r.dataToPoint(e)[0],
            u = n.get("type");
            if (u && "none" !== u) {
                var h = gm(n),
                c = mP[u](a, l, s, h);
                c.style = h,
                t.graphicKey = c.type,
                t.pointer = c
            }
            _m(e, t, jg(i), i, n, o)
        },
        getHandleTransform: function(t, e, i) {
            var n = jg(e, {
                labelInside: !1
            });
            return n.labelMargin = i.get("handle.margin"),
            {
                position: xm(e.axis, t, n),
                rotation: n.rotation + (n.labelDirection < 0 ? Math.PI: 0)
            }
        },
        updateHandleTransform: function(t, e, i, n) {
            var o = i.axis,
            a = o.coordinateSystem,
            r = Tm(o),
            s = Am(a, r),
            l = t.position;
            l[r] += e[r],
            l[r] = Math.min(s[1], l[r]),
            l[r] = Math.max(s[0], l[r]);
            var u = Am(a, 1 - r),
            h = (u[1] + u[0]) / 2,
            c = [h, h];
            return c[r] = l[r],
            {
                position: l,
                rotation: t.rotation,
                cursorPoint: c,
                tooltipOption: {
                    verticalAlign: "middle"
                }
            }
        }
    }),
    mP = {
        line: function(t, e, i, n) {
            var o = wm([e, i[0]], [e, i[1]], Tm(t));
            return Yn({
                shape: o,
                style: n
            }),
            {
                type: "Line",
                shape: o
            }
        },
        shadow: function(t, e, i, n) {
            var o = t.getBandWidth(),
            a = i[1] - i[0];
            return {
                type: "Rect",
                shape: bm([e - o / 2, i[0]], [o, a], Tm(t))
            }
        }
    };
    LD.registerAxisPointerClass("SingleAxisPointer", gP),
    Vs({
        type: "single"
    });
    var vP = OI.extend({
        type: "series.themeRiver",
        dependencies: ["singleAxis"],
        nameMap: null,
        init: function(t) {
            vP.superApply(this, "init", arguments),
            this.legendDataProvider = function() {
                return this.getRawData()
            }
        },
        fixData: function(t) {
            for (var e = t.length,
            i = f(Lp().key(function(t) {
                return t[2]
            }).entries(t),
            function(t) {
                return {
                    name: t.key,
                    dataList: t.values
                }
            }), n = i.length, o = -1, a = -1, r = 0; r < n; ++r) {
                var s = i[r].dataList.length;
                s > o && (o = s, a = r)
            }
            for (var l = 0; l < n; ++l) if (l !== a) for (var u = i[l].name, h = 0; h < o; ++h) {
                for (var c = i[a].dataList[h][0], d = i[l].dataList.length, p = -1, g = 0; g < d; ++g) if (i[l].dataList[g][0] === c) {
                    p = g;
                    break
                } - 1 === p && (t[e] = [], t[e][0] = c, t[e][1] = 0, t[e][2] = u, e++)
            }
            return t
        },
        getInitialData: function(t, e) {
            for (var i = e.queryComponents({
                mainType: "singleAxis",
                index: this.get("singleAxisIndex"),
                id: this.get("singleAxisId")
            })[0].get("type"), n = g(t.data,
            function(t) {
                return void 0 !== t[2]
            }), o = this.fixData(n || []), a = [], r = this.nameMap = E(), s = 0, l = 0; l < o.length; ++l) a.push(o[l][2]),
            r.get(o[l][2]) || (r.set(o[l][2], s), s++);
            var u = oA(o, {
                coordDimensions: ["single"],
                dimensionsDefine: [{
                    name: "time",
                    type: Ys(i)
                },
                {
                    name: "value",
                    type: "float"
                },
                {
                    name: "name",
                    type: "ordinal"
                }],
                encodeDefine: {
                    single: 0,
                    value: 1,
                    itemName: 2
                }
            }),
            h = new eA(u, this);
            return h.initData(o),
            h
        },
        getLayerSeries: function() {
            for (var t = this.getData(), e = t.count(), i = [], n = 0; n < e; ++n) i[n] = n;
            for (var o = f(Lp().key(function(e) {
                return t.get("name", e)
            }).entries(i),
            function(t) {
                return {
                    name: t.key,
                    indices: t.values
                }
            }), a = t.mapDimension("single"), r = 0; r < o.length; ++r) o[r].indices.sort(function(e, i) {
                return t.get(a, e) - t.get(a, i)
            });
            return o
        },
        getAxisTooltipData: function(t, e, i) {
            y(t) || (t = t ? [t] : []);
            for (var n, o = this.getData(), a = this.getLayerSeries(), r = [], s = a.length, l = 0; l < s; ++l) {
                for (var u = Number.MAX_VALUE,
                h = -1,
                c = a[l].indices.length, d = 0; d < c; ++d) {
                    var f = o.get(t[0], a[l].indices[d]),
                    p = Math.abs(f - e);
                    p <= u && (n = f, u = p, h = a[l].indices[d])
                }
                r.push(h)
            }
            return {
                dataIndices: r,
                nestestValue: n
            }
        },
        formatTooltip: function(t) {
            var e = this.getData(),
            i = e.getName(t),
            n = e.get(e.mapDimension("value"), t);
            return (isNaN(n) || null == n) && (n = "-"),
            $o(i + " : " + n)
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "singleAxis",
            boundaryGap: ["10%", "10%"],
            singleAxisIndex: 0,
            animationEasing: "linear",
            label: {
                margin: 4,
                show: !0,
                position: "left",
                color: "#000",
                fontSize: 11
            },
            emphasis: {
                label: {
                    show: !0
                }
            }
        }
    });
    Gs({
        type: "themeRiver",
        init: function() {
            this._layers = []
        },
        render: function(t, e, i) {
            function n(t) {
                return t.name
            }
            function o(e, i, n) {
                var o = this._layers;
                if ("remove" !== e) {
                    for (var u, h = [], c = [], f = l[i].indices, p = 0; p < f.length; p++) {
                        var g = r.getItemLayout(f[p]),
                        m = g.x,
                        v = g.y0,
                        y = g.y;
                        h.push([m, v]),
                        c.push([m, v + y]),
                        u = r.getItemVisual(f[p], "color")
                    }
                    var x, _, w = r.getItemLayout(f[0]),
                    b = r.getItemModel(f[p - 1]),
                    S = b.getModel("label"),
                    M = S.get("margin");
                    if ("add" === e) I = d[i] = new Zw,
                    x = new uD({
                        shape: {
                            points: h,
                            stackedOnPoints: c,
                            smooth: .4,
                            stackedOnSmooth: .4,
                            smoothConstraint: !1
                        },
                        z2: 0
                    }),
                    _ = new qS({
                        style: {
                            x: w.x - M,
                            y: w.y0 + w.y / 2
                        }
                    }),
                    I.add(x),
                    I.add(_),
                    s.add(I),
                    x.setClipPath(Dm(x.getBoundingRect(), t,
                    function() {
                        x.removeClipPath()
                    }));
                    else {
                        var I = o[n];
                        x = I.childAt(0),
                        _ = I.childAt(1),
                        s.add(I),
                        d[i] = I,
                        bo(x, {
                            shape: {
                                points: h,
                                stackedOnPoints: c
                            }
                        },
                        t),
                        bo(_, {
                            style: {
                                x: w.x - M,
                                y: w.y0 + w.y / 2
                            }
                        },
                        t)
                    }
                    var T = b.getModel("emphasis.itemStyle"),
                    A = b.getModel("itemStyle");
                    fo(_.style, S, {
                        text: S.get("show") ? t.getFormattedLabel(f[p - 1], "normal") || r.getName(f[p - 1]) : null,
                        textVerticalAlign: "middle"
                    }),
                    x.setStyle(a({
                        fill: u
                    },
                    A.getItemStyle(["color"]))),
                    uo(x, T.getItemStyle())
                } else s.remove(o[i])
            }
            var r = t.getData(),
            s = this.group,
            l = t.getLayerSeries(),
            u = r.getLayout("layoutInfo"),
            h = u.rect,
            c = u.boundaryGap;
            s.attr("position", [0, h.y + c[0]]);
            var d = {};
            new Hs(this._layersSeries || [], l, n, n).add(m(o, this, "add")).update(m(o, this, "update")).remove(m(o, this, "remove")).execute(),
            this._layersSeries = l,
            this._layers = d
        },
        dispose: function() {}
    }),
    Os(function(t, e) {
        t.eachSeriesByType("themeRiver",
        function(t) {
            var e = t.getData(),
            i = t.coordinateSystem,
            n = {},
            o = i.getRect();
            n.rect = o;
            var a = t.get("boundaryGap"),
            r = i.getAxis();
            n.boundaryGap = a,
            "horizontal" === r.orient ? (a[0] = Eo(a[0], o.height), a[1] = Eo(a[1], o.height), Cm(e, t, o.height - a[0] - a[1])) : (a[0] = Eo(a[0], o.width), a[1] = Eo(a[1], o.width), Cm(e, t, o.width - a[0] - a[1])),
            e.setLayout("layoutInfo", n)
        })
    }),
    zs(function(t) {
        t.eachSeriesByType("themeRiver",
        function(t) {
            var e = t.getData(),
            i = t.getRawData(),
            n = t.get("color"),
            o = E();
            e.each(function(t) {
                o.set(e.getRawIndex(t), t)
            }),
            i.each(function(a) {
                var r = i.getName(a),
                s = n[(t.nameMap.get(r) - 1) % n.length];
                i.setItemVisual(a, "color", s);
                var l = o.get(a);
                null != l && e.setItemVisual(l, "color", s)
            })
        })
    }),
    ks(QD("themeRiver")),
    OI.extend({
        type: "series.sunburst",
        _viewRoot: null,
        getInitialData: function(t, e) {
            var i = {
                name: t.name,
                children: t.data
            };
            km(i);
            var n = t.levels || [],
            o = {};
            return o.levels = n,
            kc.createTree(i, this, o).data
        },
        optionUpdated: function() {
            this.resetViewRoot()
        },
        getDataParams: function(t) {
            var e = OI.prototype.getDataParams.apply(this, arguments),
            i = this.getData().tree.getNodeByDataIndex(t);
            return e.treePathInfo = nd(i, this),
            e
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            center: ["50%", "50%"],
            radius: [0, "75%"],
            clockwise: !0,
            startAngle: 90,
            minAngle: 0,
            percentPrecision: 2,
            stillShowZeroSum: !0,
            highlightPolicy: "descendant",
            nodeClick: "rootToNode",
            renderLabelForZeroData: !1,
            label: {
                rotate: "radial",
                show: !0,
                opacity: 1,
                align: "center",
                position: "inside",
                distance: 5,
                silent: !0,
                emphasis: {}
            },
            itemStyle: {
                borderWidth: 1,
                borderColor: "white",
                borderType: "solid",
                shadowBlur: 0,
                shadowColor: "rgba(0, 0, 0, 0.2)",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                opacity: 1,
                emphasis: {},
                highlight: {
                    opacity: 1
                },
                downplay: {
                    opacity: .9
                }
            },
            animationType: "expansion",
            animationDuration: 1e3,
            animationDurationUpdate: 500,
            animationEasing: "cubicOut",
            data: [],
            levels: [],
            sort: "desc"
        },
        getViewRoot: function() {
            return this._viewRoot
        },
        resetViewRoot: function(t) {
            t ? this._viewRoot = t: t = this._viewRoot;
            var e = this.getRawData().tree.root;
            t && (t === e || e.contains(t)) || (this._viewRoot = e)
        }
    });
    var yP = {
        NONE: "none",
        DESCENDANT: "descendant",
        ANCESTOR: "ancestor",
        SELF: "self"
    },
    xP = 2,
    _P = 4,
    wP = Pm.prototype;
    wP.updateData = function(t, e, i, o, s) {
        this.node = e,
        e.piece = this,
        o = o || this._seriesModel,
        s = s || this._ecModel;
        var l = this.childAt(0);
        l.dataIndex = e.dataIndex;
        var u = e.getModel(),
        h = e.getLayout();
        h || console.log(e.getLayout());
        var c = a({},
        h);
        c.label = null;
        var d, f = Nm(e, 0, s),
        p = u.getModel("itemStyle").getItemStyle();
        d = r({
            lineJoin: "bevel",
            fill: (d = "normal" === i ? p: n(u.getModel(i + ".itemStyle").getItemStyle(), p)).fill || f
        },
        d),
        t ? (l.setShape(c), l.shape.r = h.r0, bo(l, {
            shape: {
                r: h.r
            }
        },
        o, e.dataIndex), l.useStyle(d)) : "object" == typeof d.fill && d.fill.type || "object" == typeof l.style.fill && l.style.fill.type ? (bo(l, {
            shape: c
        },
        o), l.useStyle(d)) : bo(l, {
            shape: c,
            style: d
        },
        o),
        this._updateLabel(o, f, i);
        var g = u.getShallow("cursor");
        if (g && l.attr("cursor", g), t) {
            var m = o.getShallow("highlightPolicy");
            this._initEvents(l, e, o, m)
        }
        this._seriesModel = o || this._seriesModel,
        this._ecModel = s || this._ecModel
    },
    wP.onEmphasis = function(t) {
        var e = this;
        this.node.hostTree.root.eachNode(function(i) {
            i.piece && (e.node === i ? i.piece.updateData(!1, i, "emphasis") : zm(i, e.node, t) ? i.piece.childAt(0).trigger("highlight") : t !== yP.NONE && i.piece.childAt(0).trigger("downplay"))
        })
    },
    wP.onNormal = function() {
        this.node.hostTree.root.eachNode(function(t) {
            t.piece && t.piece.updateData(!1, t, "normal")
        })
    },
    wP.onHighlight = function() {
        this.updateData(!1, this.node, "highlight")
    },
    wP.onDownplay = function() {
        this.updateData(!1, this.node, "downplay")
    },
    wP._updateLabel = function(t, e, i) {
        function n(t) {
            var e = r.get(t);
            return null == e ? a.get(t) : e
        }
        var o = this.node.getModel(),
        a = o.getModel("label"),
        r = "normal" === i || "emphasis" === i ? a: o.getModel(i + ".label"),
        s = o.getModel("emphasis.label"),
        l = T(t.getFormattedLabel(this.node.dataIndex, "normal", null, null, "label"), this.node.name); ! 1 === n("show") && (l = "");
        var u = this.node.getLayout(),
        h = r.get("minAngle");
        null == h && (h = a.get("minAngle")),
        h = h / 180 * Math.PI;
        var c = u.endAngle - u.startAngle;
        null != h && Math.abs(c) < h && (l = "");
        var d = this.childAt(1);
        co(d.style, d.hoverStyle || {},
        a, s, {
            defaultText: r.getShallow("show") ? l: null,
            autoColor: e,
            useInsideStyle: !0
        });
        var f, p = (u.startAngle + u.endAngle) / 2,
        g = Math.cos(p),
        m = Math.sin(p),
        v = n("position"),
        y = n("distance") || 0,
        x = n("align");
        "outside" === v ? (f = u.r + y, x = p > Math.PI / 2 ? "right": "left") : x && "center" !== x ? "left" === x ? (f = u.r0 + y, p > Math.PI / 2 && (x = "right")) : "right" === x && (f = u.r - y, p > Math.PI / 2 && (x = "left")) : (f = (u.r + u.r0) / 2, x = "center"),
        d.attr("style", {
            text: l,
            textAlign: x,
            textVerticalAlign: n("verticalAlign") || "middle",
            opacity: n("opacity")
        });
        var _ = f * g + u.cx,
        w = f * m + u.cy;
        d.attr("position", [_, w]);
        var b = n("rotate"),
        S = 0;
        "radial" === b ? (S = -p) < -Math.PI / 2 && (S += Math.PI) : "tangential" === b ? (S = Math.PI / 2 - p) > Math.PI / 2 ? S -= Math.PI: S < -Math.PI / 2 && (S += Math.PI) : "number" == typeof b && (S = b * Math.PI / 180),
        d.attr("rotation", S)
    },
    wP._initEvents = function(t, e, i, n) {
        t.off("mouseover").off("mouseout").off("emphasis").off("normal");
        var o = this,
        a = function() {
            o.onEmphasis(n)
        },
        r = function() {
            o.onNormal()
        };
        i.isAnimationEnabled() && t.on("mouseover", a).on("mouseout", r).on("emphasis", a).on("normal", r).on("downplay",
        function() {
            o.onDownplay()
        }).on("highlight",
        function() {
            o.onHighlight()
        })
    },
    u(Pm, Zw),
    Mr.extend({
        type: "sunburst",
        init: function() {},
        render: function(t, e, i, n) {
            function o(i, n) {
                if (c || !i || i.getValue() || (i = null), i !== l && n !== l) if (n && n.piece) i ? (n.piece.updateData(!1, i, "normal", t, e), s.setItemGraphicEl(i.dataIndex, n.piece)) : a(n);
                else if (i) {
                    var o = new Pm(i, t, e);
                    h.add(o),
                    s.setItemGraphicEl(i.dataIndex, o)
                }
            }
            function a(t) {
                t && t.piece && (h.remove(t.piece), t.piece = null)
            }
            var r = this;
            this.seriesModel = t,
            this.api = i,
            this.ecModel = e;
            var s = t.getData(),
            l = s.tree.root,
            u = t.getViewRoot(),
            h = this.group,
            c = t.get("renderLabelForZeroData"),
            d = [];
            u.eachNode(function(t) {
                d.push(t)
            });
            var f = this._oldChildren || [];
            if (function(t, e) {
                function i(t) {
                    return t.getId()
                }
                function n(i, n) {
                    o(null == i ? null: t[i], null == n ? null: e[n])
                }
                0 === t.length && 0 === e.length || new Hs(e, t, i, i).add(n).update(n).remove(v(n, null)).execute()
            } (d, f),
            function(i, n) {
                if (n.depth > 0) {
                    r.virtualPiece ? r.virtualPiece.updateData(!1, i, "normal", t, e) : (r.virtualPiece = new Pm(i, t, e), h.add(r.virtualPiece)),
                    n.piece._onclickEvent && n.piece.off("click", n.piece._onclickEvent);
                    var o = function(t) {
                        r._rootToNode(n.parentNode)
                    };
                    n.piece._onclickEvent = o,
                    r.virtualPiece.on("click", o)
                } else r.virtualPiece && (h.remove(r.virtualPiece), r.virtualPiece = null)
            } (l, u), n && n.highlight && n.highlight.piece) {
                var p = t.getShallow("highlightPolicy");
                n.highlight.piece.onEmphasis(p)
            } else if (n && n.unhighlight) {
                var g = this.virtualPiece; ! g && l.children.length && (g = l.children[0].piece),
                g && g.onNormal()
            }
            this._initEvents(),
            this._oldChildren = d
        },
        dispose: function() {},
        _initEvents: function() {
            var t = this,
            e = function(e) {
                var i = !1;
                t.seriesModel.getViewRoot().eachNode(function(n) {
                    if (!i && n.piece && n.piece.childAt(0) === e.target) {
                        var o = n.getModel().get("nodeClick");
                        if ("rootToNode" === o) t._rootToNode(n);
                        else if ("link" === o) {
                            var a = n.getModel(),
                            r = a.get("link");
                            if (r) {
                                var s = a.get("target", !0) || "_blank";
                                window.open(r, s)
                            }
                        }
                        i = !0
                    }
                })
            };
            this.group._onclickEvent && this.group.off("click", this.group._onclickEvent),
            this.group.on("click", e),
            this.group._onclickEvent = e
        },
        _rootToNode: function(t) {
            t !== this.seriesModel.getViewRoot() && this.api.dispatchAction({
                type: "sunburstRootToNode",
                from: this.uid,
                seriesId: this.seriesModel.id,
                targetNode: t
            })
        },
        containPoint: function(t, e) {
            var i = e.getData().getItemLayout(0);
            if (i) {
                var n = t[0] - i.cx,
                o = t[1] - i.cy,
                a = Math.sqrt(n * n + o * o);
                return a <= i.r && a >= i.r0
            }
        }
    });
    var bP = "sunburstRootToNode";
    Ps({
        type: bP,
        update: "updateView"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "sunburst",
            query: t
        },
        function(e, i) {
            var n = td(t, [bP], e);
            if (n) {
                var o = e.getViewRoot();
                o && (t.direction = id(o, n.node) ? "rollUp": "drillDown"),
                e.resetViewRoot(n.node)
            }
        })
    });
    var SP = "sunburstHighlight";
    Ps({
        type: SP,
        update: "updateView"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "sunburst",
            query: t
        },
        function(e, i) {
            var n = td(t, [SP], e);
            n && (t.highlight = n.node)
        })
    }),
    Ps({
        type: "sunburstUnhighlight",
        update: "updateView"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "series",
            subType: "sunburst",
            query: t
        },
        function(e, i) {
            t.unhighlight = !0
        })
    });
    var MP = Math.PI / 180;
    zs(v(UD, "sunburst")),
    Os(v(function(t, e, i, n) {
        e.eachSeriesByType(t,
        function(t) {
            var e = t.get("center"),
            n = t.get("radius");
            y(n) || (n = [0, n]),
            y(e) || (e = [e, e]);
            var o = i.getWidth(),
            a = i.getHeight(),
            r = Math.min(o, a),
            s = Eo(e[0], o),
            l = Eo(e[1], a),
            u = Eo(n[0], r / 2),
            h = Eo(n[1], r / 2),
            c = -t.get("startAngle") * MP,
            f = t.get("minAngle") * MP,
            p = t.getData().tree.root,
            g = t.getViewRoot(),
            m = g.depth,
            v = t.get("sort");
            null != v && Em(g, v);
            var x = 0;
            d(g.children,
            function(t) { ! isNaN(t.getValue()) && x++
            });
            var _ = g.getValue(),
            w = Math.PI / (_ || x) * 2,
            b = g.depth > 0,
            S = g.height - (b ? -1 : 1),
            M = (h - u) / (S || 1),
            I = t.get("clockwise"),
            T = t.get("stillShowZeroSum"),
            A = I ? 1 : -1,
            D = function(t, e) {
                if (t) {
                    var i = e;
                    if (t !== p) {
                        var n = t.getValue(),
                        o = 0 === _ && T ? w: n * w;
                        o < f && (o = f),
                        i = e + A * o;
                        var a = t.depth - m - (b ? -1 : 1),
                        h = u + M * a,
                        c = u + M * (a + 1),
                        g = t.getModel();
                        null != g.get("r0") && (h = Eo(g.get("r0"), r / 2)),
                        null != g.get("r") && (c = Eo(g.get("r"), r / 2)),
                        t.setLayout({
                            angle: o,
                            startAngle: e,
                            endAngle: i,
                            clockwise: I,
                            cx: s,
                            cy: l,
                            r0: h,
                            r: c
                        })
                    }
                    if (t.children && t.children.length) {
                        var v = 0;
                        d(t.children,
                        function(t) {
                            v += D(t, e + v)
                        })
                    }
                    return i - e
                }
            };
            if (b) {
                var C = u,
                L = u + M,
                k = 2 * Math.PI;
                p.setLayout({
                    angle: k,
                    startAngle: c,
                    endAngle: c + k,
                    clockwise: I,
                    cx: s,
                    cy: l,
                    r0: C,
                    r: L
                })
            }
            D(g, c)
        })
    },
    "sunburst")),
    ks(v(QD, "sunburst"));
    var IP = ["itemStyle"],
    TP = ["emphasis", "itemStyle"],
    AP = ["label"],
    DP = ["emphasis", "label"],
    CP = "e\0\0",
    LP = {
        cartesian2d: function(t) {
            var e = t.grid.getRect();
            return {
                coordSys: {
                    type: "cartesian2d",
                    x: e.x,
                    y: e.y,
                    width: e.width,
                    height: e.height
                },
                api: {
                    coord: function(e) {
                        return t.dataToPoint(e)
                    },
                    size: m(Bm, t)
                }
            }
        },
        geo: function(t) {
            var e = t.getBoundingRect();
            return {
                coordSys: {
                    type: "geo",
                    x: e.x,
                    y: e.y,
                    width: e.width,
                    height: e.height,
                    zoom: t.getZoom()
                },
                api: {
                    coord: function(e) {
                        return t.dataToPoint(e)
                    },
                    size: m(Vm, t)
                }
            }
        },
        singleAxis: function(t) {
            var e = t.getRect();
            return {
                coordSys: {
                    type: "singleAxis",
                    x: e.x,
                    y: e.y,
                    width: e.width,
                    height: e.height
                },
                api: {
                    coord: function(e) {
                        return t.dataToPoint(e)
                    },
                    size: m(Fm, t)
                }
            }
        },
        polar: function(t) {
            var e = t.getRadiusAxis(),
            i = t.getAngleAxis(),
            n = e.getExtent();
            return n[0] > n[1] && n.reverse(),
            {
                coordSys: {
                    type: "polar",
                    cx: t.cx,
                    cy: t.cy,
                    r: n[1],
                    r0: n[0]
                },
                api: {
                    coord: m(function(n) {
                        var o = e.dataToRadius(n[0]),
                        a = i.dataToAngle(n[1]),
                        r = t.coordToPoint([o, a]);
                        return r.push(o, a * Math.PI / 180),
                        r
                    }),
                    size: m(Gm, t)
                }
            }
        },
        calendar: function(t) {
            var e = t.getRect(),
            i = t.getRangeInfo();
            return {
                coordSys: {
                    type: "calendar",
                    x: e.x,
                    y: e.y,
                    width: e.width,
                    height: e.height,
                    cellWidth: t.getCellWidth(),
                    cellHeight: t.getCellHeight(),
                    rangeInfo: {
                        start: i.start,
                        end: i.end,
                        weeks: i.weeks,
                        dayCount: i.allDay
                    }
                },
                api: {
                    coord: function(e, i) {
                        return t.dataToPoint(e, i)
                    }
                }
            }
        }
    };
    OI.extend({
        type: "series.custom",
        dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"],
        defaultOption: {
            coordinateSystem: "cartesian2d",
            zlevel: 0,
            z: 2,
            legendHoverLink: !0,
            useTransform: !0
        },
        getInitialData: function(t, e) {
            return dl(this.getSource(), this)
        },
        getDataParams: function(t, e, i) {
            var n = OI.prototype.getDataParams.apply(this, arguments);
            return i && (n.info = i.info),
            n
        }
    }),
    Mr.extend({
        type: "custom",
        _data: null,
        render: function(t, e, i, n) {
            var o = this._data,
            a = t.getData(),
            r = this.group,
            s = jm(t, a, e, i);
            a.diff(o).add(function(e) {
                Um(null, e, s(e, n), t, r, a)
            }).update(function(e, i) {
                Um(o.getItemGraphicEl(i), e, s(e, n), t, r, a)
            }).remove(function(t) {
                var e = o.getItemGraphicEl(t);
                e && r.remove(e)
            }).execute(),
            this._data = a
        },
        incrementalPrepareRender: function(t, e, i) {
            this.group.removeAll(),
            this._data = null
        },
        incrementalRender: function(t, e, i, n, o) {
            for (var a = e.getData(), r = jm(e, a, i, n), s = t.start; s < t.end; s++) Um(null, s, r(s, o), e, this.group, a).traverse(function(t) {
                t.isGroup || (t.incremental = !0, t.useHoverLayer = !0)
            })
        },
        dispose: B,
        filterForExposedEvent: function(t, e, i, n) {
            var o = e.element;
            if (null == o || i.name === o) return ! 0;
            for (; (i = i.parent) && i !== this.group;) if (i.name === o) return ! 0;
            return ! 1
        }
    }),
    Ls(function(t) {
        var e = t.graphic;
        y(e) ? e[0] && e[0].elements ? t.graphic = [t.graphic[0]] : t.graphic = [{
            elements: e
        }] : e && !e.elements && (t.graphic = [{
            elements: [e]
        }])
    });
    var kP = Bs({
        type: "graphic",
        defaultOption: {
            elements: [],
            parentId: null
        },
        _elOptionsToUpdate: null,
        mergeOption: function(t) {
            var e = this.option.elements;
            this.option.elements = null,
            kP.superApply(this, "mergeOption", arguments),
            this.option.elements = e
        },
        optionUpdated: function(t, e) {
            var i = this.option,
            n = (e ? i: t).elements,
            o = i.elements = e ? [] : i.elements,
            a = [];
            this._flatten(n, a);
            var r = Pi(o, a);
            Ni(r);
            var s = this._elOptionsToUpdate = [];
            d(r,
            function(t, e) {
                var i = t.option;
                i && (s.push(i), sv(t, i), lv(o, e, i), uv(o[e], i))
            },
            this);
            for (var l = o.length - 1; l >= 0; l--) null == o[l] ? o.splice(l, 1) : delete o[l].$action
        },
        _flatten: function(t, e, i) {
            d(t,
            function(t) {
                if (t) {
                    i && (t.parentOption = i),
                    e.push(t);
                    var n = t.children;
                    "group" === t.type && n && this._flatten(n, e, t),
                    delete t.children
                }
            },
            this)
        },
        useElOptionsToUpdate: function() {
            var t = this._elOptionsToUpdate;
            return this._elOptionsToUpdate = null,
            t
        }
    });
    Vs({
        type: "graphic",
        init: function(t, e) {
            this._elMap = E(),
            this._lastGraphicModel
        },
        render: function(t, e, i) {
            t !== this._lastGraphicModel && this._clear(),
            this._lastGraphicModel = t,
            this._updateElements(t),
            this._relocate(t, i)
        },
        _updateElements: function(t) {
            var e = t.useElOptionsToUpdate();
            if (e) {
                var i = this._elMap,
                n = this.group;
                d(e,
                function(e) {
                    var o = e.$action,
                    a = e.id,
                    r = i.get(a),
                    s = e.parentId,
                    l = null != s ? i.get(s) : n,
                    u = e.style;
                    "text" === e.type && u && (e.hv && e.hv[1] && (u.textVerticalAlign = u.textBaseline = null), !u.hasOwnProperty("textFill") && u.fill && (u.textFill = u.fill), !u.hasOwnProperty("textStroke") && u.stroke && (u.textStroke = u.stroke));
                    var h = av(e);
                    o && "merge" !== o ? "replace" === o ? (ov(r, i), nv(a, l, h, i)) : "remove" === o && ov(r, i) : r ? r.attr(h) : nv(a, l, h, i);
                    var c = i.get(a);
                    c && (c.__ecGraphicWidth = e.width, c.__ecGraphicHeight = e.height, hv(c, t))
                })
            }
        },
        _relocate: function(t, e) {
            for (var i = t.option.elements,
            n = this.group,
            o = this._elMap,
            a = i.length - 1; a >= 0; a--) {
                var r = i[a],
                s = o.get(r.id);
                if (s) {
                    var l = s.parent;
                    ua(s, r, l === n ? {
                        width: e.getWidth(),
                        height: e.getHeight()
                    }: {
                        width: l.__ecGraphicWidth || 0,
                        height: l.__ecGraphicHeight || 0
                    },
                    null, {
                        hv: r.hv,
                        boundingMode: r.bounding
                    })
                }
            }
        },
        _clear: function() {
            var t = this._elMap;
            t.each(function(e) {
                ov(e, t)
            }),
            this._elMap = E()
        },
        dispose: function() {
            this._clear()
        }
    });
    var PP = Bs({
        type: "legend.plain",
        dependencies: ["series"],
        layoutMode: {
            type: "box",
            ignoreSize: !0
        },
        init: function(t, e, i) {
            this.mergeDefaultAndTheme(t, i),
            t.selected = t.selected || {}
        },
        mergeOption: function(t) {
            PP.superCall(this, "mergeOption", t)
        },
        optionUpdated: function() {
            this._updateData(this.ecModel);
            var t = this._data;
            if (t[0] && "single" === this.get("selectedMode")) {
                for (var e = !1,
                i = 0; i < t.length; i++) {
                    var n = t[i].get("name");
                    if (this.isSelected(n)) {
                        this.select(n),
                        e = !0;
                        break
                    }
                } ! e && this.select(t[0].get("name"))
            }
        },
        _updateData: function(t) {
            var e = [],
            i = [];
            t.eachRawSeries(function(n) {
                var o = n.name;
                i.push(o);
                var a;
                if (n.legendDataProvider) {
                    var r = n.legendDataProvider(),
                    s = r.mapArray(r.getName);
                    t.isSeriesFiltered(n) || (i = i.concat(s)),
                    s.length ? e = e.concat(s) : a = !0
                } else a = !0;
                a && Oi(n) && e.push(n.name)
            }),
            this._availableNames = i;
            var n = f(this.get("data") || e,
            function(t) {
                return "string" != typeof t && "number" != typeof t || (t = {
                    name: t
                }),
                new Lo(t, this, this.ecModel)
            },
            this);
            this._data = n
        },
        getData: function() {
            return this._data
        },
        select: function(t) {
            var e = this.option.selected;
            "single" === this.get("selectedMode") && d(this._data,
            function(t) {
                e[t.get("name")] = !1
            }),
            e[t] = !0
        },
        unSelect: function(t) {
            "single" !== this.get("selectedMode") && (this.option.selected[t] = !1)
        },
        toggleSelected: function(t) {
            var e = this.option.selected;
            e.hasOwnProperty(t) || (e[t] = !0),
            this[e[t] ? "unSelect": "select"](t)
        },
        isSelected: function(t) {
            var e = this.option.selected;
            return ! (e.hasOwnProperty(t) && !e[t]) && l(this._availableNames, t) >= 0
        },
        defaultOption: {
            zlevel: 0,
            z: 4,
            show: !0,
            orient: "horizontal",
            left: "center",
            top: 0,
            align: "auto",
            backgroundColor: "rgba(0,0,0,0)",
            borderColor: "#ccc",
            borderRadius: 0,
            borderWidth: 0,
            padding: 5,
            itemGap: 10,
            itemWidth: 25,
            itemHeight: 14,
            inactiveColor: "#ccc",
            textStyle: {
                color: "#333"
            },
            selectedMode: !0,
            tooltip: {
                show: !1
            }
        }
    });
    Ps("legendToggleSelect", "legendselectchanged", v(cv, "toggleSelected")),
    Ps("legendSelect", "legendselected", v(cv, "select")),
    Ps("legendUnSelect", "legendunselected", v(cv, "unSelect"));
    var NP = v,
    OP = d,
    zP = Zw,
    EP = Vs({
        type: "legend.plain",
        newlineDisabled: !1,
        init: function() {
            this.group.add(this._contentGroup = new zP),
            this._backgroundEl
        },
        getContentGroup: function() {
            return this._contentGroup
        },
        render: function(t, e, i) {
            if (this.resetInner(), t.get("show", !0)) {
                var n = t.get("align");
                n && "auto" !== n || (n = "right" === t.get("left") && "vertical" === t.get("orient") ? "right": "left"),
                this.renderInner(n, t, e, i);
                var o = t.getBoxLayoutParams(),
                a = {
                    width: i.getWidth(),
                    height: i.getHeight()
                },
                s = t.get("padding"),
                l = la(o, a, s),
                u = this.layoutInner(t, n, l),
                h = la(r({
                    width: u.width,
                    height: u.height
                },
                o), a, s);
                this.group.attr("position", [h.x - u.x, h.y - u.y]),
                this.group.add(this._backgroundEl = fv(u, t))
            }
        },
        resetInner: function() {
            this.getContentGroup().removeAll(),
            this._backgroundEl && this.group.remove(this._backgroundEl)
        },
        renderInner: function(t, e, i, n) {
            var o = this.getContentGroup(),
            a = E(),
            r = e.get("selectedMode"),
            s = [];
            i.eachRawSeries(function(t) { ! t.get("legendHoverLink") && s.push(t.id)
            }),
            OP(e.getData(),
            function(l, u) {
                var h = l.get("name");
                if (this.newlineDisabled || "" !== h && "\n" !== h) {
                    var c = i.getSeriesByName(h)[0];
                    if (!a.get(h)) if (c) {
                        var d = c.getData(),
                        f = d.getVisual("color");
                        "function" == typeof f && (f = f(c.getDataParams(0)));
                        var p = d.getVisual("legendSymbol") || "roundRect",
                        g = d.getVisual("symbol");
                        this._createItem(h, u, l, e, p, g, t, f, r).on("click", NP(pv, h, n)).on("mouseover", NP(gv, c.name, null, n, s)).on("mouseout", NP(mv, c.name, null, n, s)),
                        a.set(h, !0)
                    } else i.eachRawSeries(function(i) {
                        if (!a.get(h) && i.legendDataProvider) {
                            var o = i.legendDataProvider(),
                            c = o.indexOfName(h);
                            if (c < 0) return;
                            var d = o.getItemVisual(c, "color");
                            this._createItem(h, u, l, e, "roundRect", null, t, d, r).on("click", NP(pv, h, n)).on("mouseover", NP(gv, null, h, n, s)).on("mouseout", NP(mv, null, h, n, s)),
                            a.set(h, !0)
                        }
                    },
                    this)
                } else o.add(new zP({
                    newline: !0
                }))
            },
            this)
        },
        _createItem: function(t, e, i, n, o, r, s, l, u) {
            var h = n.get("itemWidth"),
            c = n.get("itemHeight"),
            d = n.get("inactiveColor"),
            f = n.get("symbolKeepAspect"),
            p = n.isSelected(t),
            g = new zP,
            m = i.getModel("textStyle"),
            v = i.get("icon"),
            y = i.getModel("tooltip"),
            x = y.parentModel;
            if (o = v || o, g.add(Yl(o, 0, 0, h, c, p ? l: d, null == f || f)), !v && r && (r !== o || "none" === r)) {
                var _ = .8 * c;
                "none" === r && (r = "circle"),
                g.add(Yl(r, (h - _) / 2, (c - _) / 2, _, _, p ? l: d, null == f || f))
            }
            var w = "left" === s ? h + 5 : -5,
            b = s,
            S = n.get("formatter"),
            M = t;
            "string" == typeof S && S ? M = S.replace("{name}", null != t ? t: "") : "function" == typeof S && (M = S(t)),
            g.add(new qS({
                style: fo({},
                m, {
                    text: M,
                    x: w,
                    y: c / 2,
                    textFill: p ? m.getTextColor() : d,
                    textAlign: b,
                    textVerticalAlign: "middle"
                })
            }));
            var I = new aM({
                shape: g.getBoundingRect(),
                invisible: !0,
                tooltip: y.get("show") ? a({
                    content: t,
                    formatter: x.get("formatter", !0) ||
                    function() {
                        return t
                    },
                    formatterParams: {
                        componentType: "legend",
                        legendIndex: n.componentIndex,
                        name: t,
                        $vars: ["name"]
                    }
                },
                y.option) : null
            });
            return g.add(I),
            g.eachChild(function(t) {
                t.silent = !0
            }),
            I.silent = !u,
            this.getContentGroup().add(g),
            uo(g),
            g.__legendDataIndex = e,
            g
        },
        layoutInner: function(t, e, i) {
            var n = this.getContentGroup();
            jM(t.get("orient"), n, t.get("itemGap"), i.width, i.height);
            var o = n.getBoundingRect();
            return n.attr("position", [ - o.x, -o.y]),
            this.group.getBoundingRect()
        }
    });
    ks(function(t) {
        var e = t.findComponents({
            mainType: "legend"
        });
        e && e.length && t.filterSeries(function(t) {
            for (var i = 0; i < e.length; i++) if (!e[i].isSelected(t.name)) return ! 1;
            return ! 0
        })
    }),
    XM.registerSubTypeDefaulter("legend",
    function() {
        return "plain"
    });
    var RP = PP.extend({
        type: "legend.scroll",
        setScrollDataIndex: function(t) {
            this.option.scrollDataIndex = t
        },
        defaultOption: {
            scrollDataIndex: 0,
            pageButtonItemGap: 5,
            pageButtonGap: null,
            pageButtonPosition: "end",
            pageFormatter: "{current}/{total}",
            pageIcons: {
                horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"],
                vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"]
            },
            pageIconColor: "#2f4554",
            pageIconInactiveColor: "#aaa",
            pageIconSize: 15,
            pageTextStyle: {
                color: "#333"
            },
            animationDurationUpdate: 800
        },
        init: function(t, e, i, n) {
            var o = da(t);
            RP.superCall(this, "init", t, e, i, n),
            vv(this, t, o)
        },
        mergeOption: function(t, e) {
            RP.superCall(this, "mergeOption", t, e),
            vv(this, this.option, t)
        },
        getOrient: function() {
            return "vertical" === this.get("orient") ? {
                index: 1,
                name: "vertical"
            }: {
                index: 0,
                name: "horizontal"
            }
        }
    }),
    BP = Zw,
    VP = ["width", "height"],
    FP = ["x", "y"],
    GP = EP.extend({
        type: "legend.scroll",
        newlineDisabled: !0,
        init: function() {
            GP.superCall(this, "init"),
            this._currentIndex = 0,
            this.group.add(this._containerGroup = new BP),
            this._containerGroup.add(this.getContentGroup()),
            this.group.add(this._controllerGroup = new BP),
            this._showController
        },
        resetInner: function() {
            GP.superCall(this, "resetInner"),
            this._controllerGroup.removeAll(),
            this._containerGroup.removeClipPath(),
            this._containerGroup.__rectSize = null
        },
        renderInner: function(t, e, i, n) {
            function o(t, i) {
                var o = t + "DataIndex",
                l = Co(e.get("pageIcons", !0)[e.getOrient().name][i], {
                    onclick: m(a._pageGo, a, o, e, n)
                },
                {
                    x: -s[0] / 2,
                    y: -s[1] / 2,
                    width: s[0],
                    height: s[1]
                });
                l.name = t,
                r.add(l)
            }
            var a = this;
            GP.superCall(this, "renderInner", t, e, i, n);
            var r = this._controllerGroup,
            s = e.get("pageIconSize", !0);
            y(s) || (s = [s, s]),
            o("pagePrev", 0);
            var l = e.getModel("pageTextStyle");
            r.add(new qS({
                name: "pageText",
                style: {
                    textFill: l.getTextColor(),
                    font: l.getFont(),
                    textVerticalAlign: "middle",
                    textAlign: "center"
                },
                silent: !0
            })),
            o("pageNext", 1)
        },
        layoutInner: function(t, e, i) {
            var n = this.getContentGroup(),
            o = this._containerGroup,
            a = this._controllerGroup,
            r = t.getOrient().index,
            s = VP[r],
            l = VP[1 - r],
            u = FP[1 - r];
            jM(t.get("orient"), n, t.get("itemGap"), r ? i.width: null, r ? null: i.height),
            jM("horizontal", a, t.get("pageButtonItemGap", !0));
            var h = n.getBoundingRect(),
            c = a.getBoundingRect(),
            d = this._showController = h[s] > i[s],
            f = [ - h.x, -h.y];
            f[r] = n.position[r];
            var p = [0, 0],
            g = [ - c.x, -c.y],
            m = A(t.get("pageButtonGap", !0), t.get("itemGap", !0));
            d && ("end" === t.get("pageButtonPosition", !0) ? g[r] += i[s] - c[s] : p[r] += c[s] + m),
            g[1 - r] += h[l] / 2 - c[l] / 2,
            n.attr("position", f),
            o.attr("position", p),
            a.attr("position", g);
            var v = this.group.getBoundingRect();
            if ((v = {
                x: 0,
                y: 0
            })[s] = d ? i[s] : h[s], v[l] = Math.max(h[l], c[l]), v[u] = Math.min(0, c[u] + g[1 - r]), o.__rectSize = i[s], d) {
                var y = {
                    x: 0,
                    y: 0
                };
                y[s] = Math.max(i[s] - c[s] - m, 0),
                y[l] = v[l],
                o.setClipPath(new aM({
                    shape: y
                })),
                o.__rectSize = y[s]
            } else a.eachChild(function(t) {
                t.attr({
                    invisible: !0,
                    silent: !0
                })
            });
            var x = this._getPageInfo(t);
            return null != x.pageIndex && bo(n, {
                position: x.contentPosition
            },
            !!d && t),
            this._updatePageInfoView(t, x),
            v
        },
        _pageGo: function(t, e, i) {
            var n = this._getPageInfo(e)[t];
            null != n && i.dispatchAction({
                type: "legendScroll",
                scrollDataIndex: n,
                legendId: e.id
            })
        },
        _updatePageInfoView: function(t, e) {
            var i = this._controllerGroup;
            d(["pagePrev", "pageNext"],
            function(n) {
                var o = null != e[n + "DataIndex"],
                a = i.childOfName(n);
                a && (a.setStyle("fill", o ? t.get("pageIconColor", !0) : t.get("pageIconInactiveColor", !0)), a.cursor = o ? "pointer": "default")
            });
            var n = i.childOfName("pageText"),
            o = t.get("pageFormatter"),
            a = e.pageIndex,
            r = null != a ? a + 1 : 0,
            s = e.pageCount;
            n && o && n.setStyle("text", _(o) ? o.replace("{current}", r).replace("{total}", s) : o({
                current: r,
                total: s
            }))
        },
        _getPageInfo: function(t) {
            function e(t) {
                var e = t.getBoundingRect().clone();
                return e[f] += t.position[h],
                e
            }
            var i, n, o, a, r = t.get("scrollDataIndex", !0),
            s = this.getContentGroup(),
            l = s.getBoundingRect(),
            u = this._containerGroup.__rectSize,
            h = t.getOrient().index,
            c = VP[h],
            d = VP[1 - h],
            f = FP[h],
            p = s.position.slice();
            this._showController ? s.eachChild(function(t) {
                t.__legendDataIndex === r && (a = t)
            }) : a = s.childAt(0);
            var g = u ? Math.ceil(l[c] / u) : 0;
            if (a) {
                var m = a.getBoundingRect(),
                v = a.position[h] + m[f];
                p[h] = -v - l[f],
                i = Math.floor(g * (v + m[f] + u / 2) / l[c]),
                i = l[c] && g ? Math.max(0, Math.min(g - 1, i)) : -1;
                var y = {
                    x: 0,
                    y: 0
                };
                y[c] = u,
                y[d] = l[d],
                y[f] = -p[h] - l[f];
                var x, _ = s.children();
                if (s.eachChild(function(t, i) {
                    var n = e(t);
                    n.intersect(y) && (null == x && (x = i), o = t.__legendDataIndex),
                    i === _.length - 1 && n[f] + n[c] <= y[f] + y[c] && (o = null)
                }), null != x) {
                    var w = e(_[x]);
                    if (y[f] = w[f] + w[c] - y[c], x <= 0 && w[f] >= y[f]) n = null;
                    else {
                        for (; x > 0 && e(_[x - 1]).intersect(y);) x--;
                        n = _[x].__legendDataIndex
                    }
                }
            }
            return {
                contentPosition: p,
                pageIndex: i,
                pageCount: g,
                pagePrevDataIndex: n,
                pageNextDataIndex: o
            }
        }
    });
    Ps("legendScroll", "legendscroll",
    function(t, e) {
        var i = t.scrollDataIndex;
        null != i && e.eachComponent({
            mainType: "legend",
            subType: "scroll",
            query: t
        },
        function(t) {
            t.setScrollDataIndex(i)
        })
    }),
    Bs({
        type: "tooltip",
        dependencies: ["axisPointer"],
        defaultOption: {
            zlevel: 0,
            z: 60,
            show: !0,
            showContent: !0,
            trigger: "item",
            triggerOn: "mousemove|click",
            alwaysShowContent: !1,
            displayMode: "single",
            renderMode: "auto",
            confine: !1,
            showDelay: 0,
            hideDelay: 100,
            transitionDuration: .4,
            enterable: !1,
            backgroundColor: "rgba(50,50,50,0.7)",
            borderColor: "#333",
            borderRadius: 4,
            borderWidth: 0,
            padding: 5,
            extraCssText: "",
            axisPointer: {
                type: "line",
                axis: "auto",
                animation: "auto",
                animationDurationUpdate: 200,
                animationEasingUpdate: "exponentialOut",
                crossStyle: {
                    color: "#999",
                    width: 1,
                    type: "dashed",
                    textStyle: {}
                }
            },
            textStyle: {
                color: "#fff",
                fontSize: 14
            }
        }
    });
    var WP = d,
    HP = Jo,
    ZP = ["", "-webkit-", "-moz-", "-o-"];
    wv.prototype = {
        constructor: wv,
        _enterable: !0,
        update: function() {
            var t = this._container,
            e = t.currentStyle || document.defaultView.getComputedStyle(t),
            i = t.style;
            "absolute" !== i.position && "absolute" !== e.position && (i.position = "relative")
        },
        show: function(t) {
            clearTimeout(this._hideTimeout);
            var e = this.el;
            e.style.cssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + _v(t) + ";left:" + this._x + "px;top:" + this._y + "px;" + (t.get("extraCssText") || ""),
            e.style.display = e.innerHTML ? "block": "none",
            e.style.pointerEvents = this._enterable ? "auto": "none",
            this._show = !0
        },
        setContent: function(t) {
            this.el.innerHTML = null == t ? "": t
        },
        setEnterable: function(t) {
            this._enterable = t
        },
        getSize: function() {
            var t = this.el;
            return [t.clientWidth, t.clientHeight]
        },
        moveTo: function(t, e) {
            var i, n = this._zr;
            n && n.painter && (i = n.painter.getViewportRootOffset()) && (t += i.offsetLeft, e += i.offsetTop);
            var o = this.el.style;
            o.left = t + "px",
            o.top = e + "px",
            this._x = t,
            this._y = e
        },
        hide: function() {
            this.el.style.display = "none",
            this._show = !1
        },
        hideLater: function(t) { ! this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(m(this.hide, this), t)) : this.hide())
        },
        isShow: function() {
            return this._show
        },
        getOuterSize: function() {
            var t = this.el.clientWidth,
            e = this.el.clientHeight;
            if (document.defaultView && document.defaultView.getComputedStyle) {
                var i = document.defaultView.getComputedStyle(this.el);
                i && (t += parseInt(i.paddingLeft, 10) + parseInt(i.paddingRight, 10) + parseInt(i.borderLeftWidth, 10) + parseInt(i.borderRightWidth, 10), e += parseInt(i.paddingTop, 10) + parseInt(i.paddingBottom, 10) + parseInt(i.borderTopWidth, 10) + parseInt(i.borderBottomWidth, 10))
            }
            return {
                width: t,
                height: e
            }
        }
    },
    bv.prototype = {
        constructor: bv,
        _enterable: !0,
        update: function() {},
        show: function(t) {
            this._hideTimeout && clearTimeout(this._hideTimeout),
            this.el.attr("show", !0),
            this._show = !0
        },
        setContent: function(t, e, i) {
            this.el && this._zr.remove(this.el);
            for (var n = {},
            o = t,
            a = o.indexOf("{marker"); a >= 0;) {
                var r = o.indexOf("|}"),
                s = o.substr(a + "{marker".length, r - a - "{marker".length);
                s.indexOf("sub") > -1 ? n["marker" + s] = {
                    textWidth: 4,
                    textHeight: 4,
                    textBorderRadius: 2,
                    textBackgroundColor: e[s],
                    textOffset: [3, 0]
                }: n["marker" + s] = {
                    textWidth: 10,
                    textHeight: 10,
                    textBorderRadius: 5,
                    textBackgroundColor: e[s]
                },
                a = (o = o.substr(r + 1)).indexOf("{marker")
            }
            this.el = new qS({
                style: {
                    rich: n,
                    text: t,
                    textLineHeight: 20,
                    textBackgroundColor: i.get("backgroundColor"),
                    textBorderRadius: i.get("borderRadius"),
                    textFill: i.get("textStyle.color"),
                    textPadding: i.get("padding")
                },
                z: i.get("z")
            }),
            this._zr.add(this.el);
            var l = this;
            this.el.on("mouseover",
            function() {
                l._enterable && (clearTimeout(l._hideTimeout), l._show = !0),
                l._inContent = !0
            }),
            this.el.on("mouseout",
            function() {
                l._enterable && l._show && l.hideLater(l._hideDelay),
                l._inContent = !1
            })
        },
        setEnterable: function(t) {
            this._enterable = t
        },
        getSize: function() {
            var t = this.el.getBoundingRect();
            return [t.width, t.height]
        },
        moveTo: function(t, e) {
            this.el && this.el.attr("position", [t, e])
        },
        hide: function() {
            this.el.hide(),
            this._show = !1
        },
        hideLater: function(t) { ! this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(m(this.hide, this), t)) : this.hide())
        },
        isShow: function() {
            return this._show
        },
        getOuterSize: function() {
            return this.getSize()
        }
    };
    var jP = m,
    YP = d,
    UP = Eo,
    XP = new aM({
        shape: {
            x: -1,
            y: -1,
            width: 2,
            height: 2
        }
    });
    Vs({
        type: "tooltip",
        init: function(t, e) {
            if (!R_.node) {
                var i = t.getComponent("tooltip").get("renderMode");
                this._renderMode = Hi(i);
                var n;
                "html" === this._renderMode ? (n = new wv(e.getDom(), e), this._newLine = "<br/>") : (n = new bv(e), this._newLine = "\n"),
                this._tooltipContent = n
            }
        },
        render: function(t, e, i) {
            if (!R_.node) {
                this.group.removeAll(),
                this._tooltipModel = t,
                this._ecModel = e,
                this._api = i,
                this._lastDataByCoordSys = null,
                this._alwaysShowContent = t.get("alwaysShowContent");
                var n = this._tooltipContent;
                n.update(),
                n.setEnterable(t.get("enterable")),
                this._initGlobalListener(),
                this._keepShow()
            }
        },
        _initGlobalListener: function() {
            var t = this._tooltipModel.get("triggerOn");
            im("itemTooltip", this._api, jP(function(e, i, n) {
                "none" !== t && (t.indexOf(e) >= 0 ? this._tryShow(i, n) : "leave" === e && this._hide(n))
            },
            this))
        },
        _keepShow: function() {
            var t = this._tooltipModel,
            e = this._ecModel,
            i = this._api;
            if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) {
                var n = this;
                clearTimeout(this._refreshUpdateTimeout),
                this._refreshUpdateTimeout = setTimeout(function() {
                    n.manuallyShowTip(t, e, i, {
                        x: n._lastX,
                        y: n._lastY
                    })
                })
            }
        },
        manuallyShowTip: function(t, e, i, n) {
            if (n.from !== this.uid && !R_.node) {
                var o = Mv(n, i);
                this._ticket = "";
                var a = n.dataByCoordSys;
                if (n.tooltip && null != n.x && null != n.y) {
                    var r = XP;
                    r.position = [n.x, n.y],
                    r.update(),
                    r.tooltip = n.tooltip,
                    this._tryShow({
                        offsetX: n.x,
                        offsetY: n.y,
                        target: r
                    },
                    o)
                } else if (a) this._tryShow({
                    offsetX: n.x,
                    offsetY: n.y,
                    position: n.position,
                    event: {},
                    dataByCoordSys: n.dataByCoordSys,
                    tooltipOption: n.tooltipOption
                },
                o);
                else if (null != n.seriesIndex) {
                    if (this._manuallyAxisShowTip(t, e, i, n)) return;
                    var s = eP(n, e),
                    l = s.point[0],
                    u = s.point[1];
                    null != l && null != u && this._tryShow({
                        offsetX: l,
                        offsetY: u,
                        position: n.position,
                        target: s.el,
                        event: {}
                    },
                    o)
                } else null != n.x && null != n.y && (i.dispatchAction({
                    type: "updateAxisPointer",
                    x: n.x,
                    y: n.y
                }), this._tryShow({
                    offsetX: n.x,
                    offsetY: n.y,
                    position: n.position,
                    target: i.getZr().findHover(n.x, n.y).target,
                    event: {}
                },
                o))
            }
        },
        manuallyHideTip: function(t, e, i, n) {
            var o = this._tooltipContent; ! this._alwaysShowContent && this._tooltipModel && o.hideLater(this._tooltipModel.get("hideDelay")),
            this._lastX = this._lastY = null,
            n.from !== this.uid && this._hide(Mv(n, i))
        },
        _manuallyAxisShowTip: function(t, e, i, n) {
            var o = n.seriesIndex,
            a = n.dataIndex,
            r = e.getComponent("axisPointer").coordSysAxesInfo;
            if (null != o && null != a && null != r) {
                var s = e.getSeriesByIndex(o);
                if (s && "axis" === (t = Sv([s.getData().getItemModel(a), s, (s.coordinateSystem || {}).model, t])).get("trigger")) return i.dispatchAction({
                    type: "updateAxisPointer",
                    seriesIndex: o,
                    dataIndex: a,
                    position: n.position
                }),
                !0
            }
        },
        _tryShow: function(t, e) {
            var i = t.target;
            if (this._tooltipModel) {
                this._lastX = t.offsetX,
                this._lastY = t.offsetY;
                var n = t.dataByCoordSys;
                n && n.length ? this._showAxisTooltip(n, t) : i && null != i.dataIndex ? (this._lastDataByCoordSys = null, this._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e))
            }
        },
        _showOrMove: function(t, e) {
            var i = t.get("showDelay");
            e = m(e, this),
            clearTimeout(this._showTimout),
            i > 0 ? this._showTimout = setTimeout(e, i) : e()
        },
        _showAxisTooltip: function(t, e) {
            var i = this._ecModel,
            o = this._tooltipModel,
            a = [e.offsetX, e.offsetY],
            r = [],
            s = [],
            l = Sv([e.tooltipOption, o]),
            u = this._renderMode,
            h = this._newLine,
            c = {};
            YP(t,
            function(t) {
                YP(t.dataByAxis,
                function(t) {
                    var e = i.getComponent(t.axisDim + "Axis", t.axisIndex),
                    o = t.value,
                    a = [];
                    if (e && null != o) {
                        var l = ym(o, e.axis, i, t.seriesDataIndices, t.valueLabelOpt);
                        d(t.seriesDataIndices,
                        function(r) {
                            var h = i.getSeriesByIndex(r.seriesIndex),
                            d = r.dataIndexInside,
                            f = h && h.getDataParams(d);
                            if (f.axisDim = t.axisDim, f.axisIndex = t.axisIndex, f.axisType = t.axisType, f.axisId = t.axisId, f.axisValue = Wl(e.axis, o), f.axisValueLabel = l, f) {
                                s.push(f);
                                var p, g = h.formatTooltip(d, !0, null, u);
                                if (w(g)) {
                                    p = g.html;
                                    var m = g.markers;
                                    n(c, m)
                                } else p = g;
                                a.push(p)
                            }
                        });
                        var f = l;
                        "html" !== u ? r.push(a.join(h)) : r.push((f ? $o(f) + h: "") + a.join(h))
                    }
                })
            },
            this),
            r.reverse(),
            r = r.join(this._newLine + this._newLine);
            var f = e.position;
            this._showOrMove(l,
            function() {
                this._updateContentNotChangedOnAxis(t) ? this._updatePosition(l, f, a[0], a[1], this._tooltipContent, s) : this._showTooltipContent(l, r, s, Math.random(), a[0], a[1], f, void 0, c)
            })
        },
        _showSeriesItemTooltip: function(t, e, i) {
            var n = this._ecModel,
            o = e.seriesIndex,
            a = n.getSeriesByIndex(o),
            r = e.dataModel || a,
            s = e.dataIndex,
            l = e.dataType,
            u = r.getData(),
            h = Sv([u.getItemModel(s), r, a && (a.coordinateSystem || {}).model, this._tooltipModel]),
            c = h.get("trigger");
            if (null == c || "item" === c) {
                var d, f, p = r.getDataParams(s, l),
                g = r.formatTooltip(s, !1, l, this._renderMode);
                w(g) ? (d = g.html, f = g.markers) : (d = g, f = null);
                var m = "item_" + r.name + "_" + s;
                this._showOrMove(h,
                function() {
                    this._showTooltipContent(h, d, p, m, t.offsetX, t.offsetY, t.position, t.target, f)
                }),
                i({
                    type: "showTip",
                    dataIndexInside: s,
                    dataIndex: u.getRawIndex(s),
                    seriesIndex: o,
                    from: this.uid
                })
            }
        },
        _showComponentItemTooltip: function(t, e, i) {
            var n = e.tooltip;
            if ("string" == typeof n) {
                var o = n;
                n = {
                    content: o,
                    formatter: o
                }
            }
            var a = new Lo(n, this._tooltipModel, this._ecModel),
            r = a.get("content"),
            s = Math.random();
            this._showOrMove(a,
            function() {
                this._showTooltipContent(a, r, a.get("formatterParams") || {},
                s, t.offsetX, t.offsetY, t.position, e)
            }),
            i({
                type: "showTip",
                from: this.uid
            })
        },
        _showTooltipContent: function(t, e, i, n, o, a, r, s, l) {
            if (this._ticket = "", t.get("showContent") && t.get("show")) {
                var u = this._tooltipContent,
                h = t.get("formatter");
                r = r || t.get("position");
                var c = e;
                if (h && "string" == typeof h) c = ta(h, i, !0);
                else if ("function" == typeof h) {
                    var d = jP(function(e, n) {
                        e === this._ticket && (u.setContent(n, l, t), this._updatePosition(t, r, o, a, u, i, s))
                    },
                    this);
                    this._ticket = n,
                    c = h(i, n, d)
                }
                u.setContent(c, l, t),
                u.show(t),
                this._updatePosition(t, r, o, a, u, i, s)
            }
        },
        _updatePosition: function(t, e, i, n, o, a, r) {
            var s = this._api.getWidth(),
            l = this._api.getHeight();
            e = e || t.get("position");
            var u = o.getSize(),
            h = t.get("align"),
            c = t.get("verticalAlign"),
            d = r && r.getBoundingRect().clone();
            if (r && d.applyTransform(r.transform), "function" == typeof e && (e = e([i, n], a, o.el, d, {
                viewSize: [s, l],
                contentSize: u.slice()
            })), y(e)) i = UP(e[0], s),
            n = UP(e[1], l);
            else if (w(e)) {
                e.width = u[0],
                e.height = u[1];
                var f = la(e, {
                    width: s,
                    height: l
                });
                i = f.x,
                n = f.y,
                h = null,
                c = null
            } else "string" == typeof e && r ? (i = (p = Av(e, d, u))[0], n = p[1]) : (i = (p = Iv(i, n, o, s, l, h ? null: 20, c ? null: 20))[0], n = p[1]);
            if (h && (i -= Dv(h) ? u[0] / 2 : "right" === h ? u[0] : 0), c && (n -= Dv(c) ? u[1] / 2 : "bottom" === c ? u[1] : 0), t.get("confine")) {
                var p = Tv(i, n, o, s, l);
                i = p[0],
                n = p[1]
            }
            o.moveTo(i, n)
        },
        _updateContentNotChangedOnAxis: function(t) {
            var e = this._lastDataByCoordSys,
            i = !!e && e.length === t.length;
            return i && YP(e,
            function(e, n) {
                var o = e.dataByAxis || {},
                a = (t[n] || {}).dataByAxis || []; (i &= o.length === a.length) && YP(o,
                function(t, e) {
                    var n = a[e] || {},
                    o = t.seriesDataIndices || [],
                    r = n.seriesDataIndices || []; (i &= t.value === n.value && t.axisType === n.axisType && t.axisId === n.axisId && o.length === r.length) && YP(o,
                    function(t, e) {
                        var n = r[e];
                        i &= t.seriesIndex === n.seriesIndex && t.dataIndex === n.dataIndex
                    })
                })
            }),
            this._lastDataByCoordSys = t,
            !!i
        },
        _hide: function(t) {
            this._lastDataByCoordSys = null,
            t({
                type: "hideTip",
                from: this.uid
            })
        },
        dispose: function(t, e) {
            R_.node || (this._tooltipContent.hide(), lm("itemTooltip", e))
        }
    }),
    Ps({
        type: "showTip",
        event: "showTip",
        update: "tooltip:manuallyShowTip"
    },
    function() {}),
    Ps({
        type: "hideTip",
        event: "hideTip",
        update: "tooltip:manuallyHideTip"
    },
    function() {}),
    Pv.prototype = {
        constructor: Pv,
        pointToData: function(t, e) {
            return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1]
        },
        dataToRadius: HA.prototype.dataToCoord,
        radiusToData: HA.prototype.coordToData
    },
    u(Pv, HA);
    var qP = Bi();
    Nv.prototype = {
        constructor: Nv,
        pointToData: function(t, e) {
            return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1]
        },
        dataToAngle: HA.prototype.dataToCoord,
        angleToData: HA.prototype.coordToData,
        calculateCategoryInterval: function() {
            var t = this,
            e = t.getLabelModel(),
            i = t.scale,
            n = i.getExtent(),
            o = i.count();
            if (n[1] - n[0] < 1) return 0;
            var a = n[0],
            r = t.dataToCoord(a + 1) - t.dataToCoord(a),
            s = Math.abs(r),
            l = De(a, e.getFont(), "center", "top"),
            u = Math.max(l.height, 7) / s;
            isNaN(u) && (u = 1 / 0);
            var h = Math.max(0, Math.floor(u)),
            c = qP(t.model),
            d = c.lastAutoInterval,
            f = c.lastTickCount;
            return null != d && null != f && Math.abs(d - h) <= 1 && Math.abs(f - o) <= 1 && d > h ? h = d: (c.lastTickCount = o, c.lastAutoInterval = h),
            h
        }
    },
    u(Nv, HA);
    var KP = function(t) {
        this.name = t || "",
        this.cx = 0,
        this.cy = 0,
        this._radiusAxis = new Pv,
        this._angleAxis = new Nv,
        this._radiusAxis.polar = this._angleAxis.polar = this
    };
    KP.prototype = {
        type: "polar",
        axisPointerEnabled: !0,
        constructor: KP,
        dimensions: ["radius", "angle"],
        model: null,
        containPoint: function(t) {
            var e = this.pointToCoord(t);
            return this._radiusAxis.contain(e[0]) && this._angleAxis.contain(e[1])
        },
        containData: function(t) {
            return this._radiusAxis.containData(t[0]) && this._angleAxis.containData(t[1])
        },
        getAxis: function(t) {
            return this["_" + t + "Axis"]
        },
        getAxes: function() {
            return [this._radiusAxis, this._angleAxis]
        },
        getAxesByScale: function(t) {
            var e = [],
            i = this._angleAxis,
            n = this._radiusAxis;
            return i.scale.type === t && e.push(i),
            n.scale.type === t && e.push(n),
            e
        },
        getAngleAxis: function() {
            return this._angleAxis
        },
        getRadiusAxis: function() {
            return this._radiusAxis
        },
        getOtherAxis: function(t) {
            var e = this._angleAxis;
            return t === e ? this._radiusAxis: e
        },
        getBaseAxis: function() {
            return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAngleAxis()
        },
        getTooltipAxes: function(t) {
            var e = null != t && "auto" !== t ? this.getAxis(t) : this.getBaseAxis();
            return {
                baseAxes: [e],
                otherAxes: [this.getOtherAxis(e)]
            }
        },
        dataToPoint: function(t, e) {
            return this.coordToPoint([this._radiusAxis.dataToRadius(t[0], e), this._angleAxis.dataToAngle(t[1], e)])
        },
        pointToData: function(t, e) {
            var i = this.pointToCoord(t);
            return [this._radiusAxis.radiusToData(i[0], e), this._angleAxis.angleToData(i[1], e)]
        },
        pointToCoord: function(t) {
            var e = t[0] - this.cx,
            i = t[1] - this.cy,
            n = this.getAngleAxis(),
            o = n.getExtent(),
            a = Math.min(o[0], o[1]),
            r = Math.max(o[0], o[1]);
            n.inverse ? a = r - 360 : r = a + 360;
            var s = Math.sqrt(e * e + i * i);
            e /= s,
            i /= s;
            for (var l = Math.atan2( - i, e) / Math.PI * 180, u = l < a ? 1 : -1; l < a || l > r;) l += 360 * u;
            return [s, l]
        },
        coordToPoint: function(t) {
            var e = t[0],
            i = t[1] / 180 * Math.PI;
            return [Math.cos(i) * e + this.cx, -Math.sin(i) * e + this.cy]
        }
    };
    var QP = XM.extend({
        type: "polarAxis",
        axis: null,
        getCoordSysModel: function() {
            return this.ecModel.queryComponents({
                mainType: "polar",
                index: this.option.polarIndex,
                id: this.option.polarId
            })[0]
        }
    });
    n(QP.prototype, CA);
    var JP = {
        angle: {
            startAngle: 90,
            clockwise: !0,
            splitNumber: 12,
            axisLabel: {
                rotate: !1
            }
        },
        radius: {
            splitNumber: 5
        }
    };
    xD("angle", QP, Ov, JP.angle),
    xD("radius", QP, Ov, JP.radius),
    Bs({
        type: "polar",
        dependencies: ["polarAxis", "angleAxis"],
        coordinateSystem: null,
        findAxisModel: function(t) {
            var e;
            return this.ecModel.eachComponent(t,
            function(t) {
                t.getCoordSysModel() === this && (e = t)
            },
            this),
            e
        },
        defaultOption: {
            zlevel: 0,
            z: 0,
            center: ["50%", "50%"],
            radius: "80%"
        }
    });
    var $P = {
        dimensions: KP.prototype.dimensions,
        create: function(t, e) {
            var i = [];
            return t.eachComponent("polar",
            function(t, n) {
                var o = new KP(n);
                o.update = Ev;
                var a = o.getRadiusAxis(),
                r = o.getAngleAxis(),
                s = t.findAxisModel("radiusAxis"),
                l = t.findAxisModel("angleAxis");
                Rv(a, s),
                Rv(r, l),
                zv(o, t, e),
                i.push(o),
                t.coordinateSystem = o,
                o.model = t
            }),
            t.eachSeries(function(e) {
                if ("polar" === e.get("coordinateSystem")) {
                    var i = t.queryComponents({
                        mainType: "polar",
                        index: e.get("polarIndex"),
                        id: e.get("polarId")
                    })[0];
                    e.coordinateSystem = i.coordinateSystem
                }
            }),
            i
        }
    };
    Ba.register("polar", $P);
    var tN = ["axisLine", "axisLabel", "axisTick", "splitLine", "splitArea"];
    LD.extend({
        type: "angleAxis",
        axisPointerClass: "PolarAxisPointer",
        render: function(t, e) {
            if (this.group.removeAll(), t.get("show")) {
                var n = t.axis,
                o = n.polar,
                a = o.getRadiusAxis().getExtent(),
                r = n.getTicksCoords(),
                s = f(n.getViewLabels(),
                function(t) {
                    return (t = i(t)).coord = n.dataToCoord(t.tickValue),
                    t
                });
                Fv(s),
                Fv(r),
                d(tN,
                function(e) { ! t.get(e + ".show") || n.scale.isBlank() && "axisLine" !== e || this["_" + e](t, o, r, a, s)
                },
                this)
            }
        },
        _axisLine: function(t, e, i, n) {
            var o = t.getModel("axisLine.lineStyle"),
            a = new KS({
                shape: {
                    cx: e.cx,
                    cy: e.cy,
                    r: n[Vv(e)]
                },
                style: o.getLineStyle(),
                z2: 1,
                silent: !0
            });
            a.style.fill = null,
            this.group.add(a)
        },
        _axisTick: function(t, e, i, n) {
            var o = t.getModel("axisTick"),
            a = (o.get("inside") ? -1 : 1) * o.get("length"),
            s = n[Vv(e)],
            l = f(i,
            function(t) {
                return new rM({
                    shape: Bv(e, [s, s + a], t.coord)
                })
            });
            this.group.add(xM(l, {
                style: r(o.getModel("lineStyle").getLineStyle(), {
                    stroke: t.get("axisLine.lineStyle.color")
                })
            }))
        },
        _axisLabel: function(t, e, i, n, o) {
            var a = t.getCategories(!0),
            r = t.getModel("axisLabel"),
            s = r.get("margin");
            d(o,
            function(i, o) {
                var l = r,
                u = i.tickValue,
                h = n[Vv(e)],
                c = e.coordToPoint([h + s, i.coord]),
                d = e.cx,
                f = e.cy,
                p = Math.abs(c[0] - d) / h < .3 ? "center": c[0] > d ? "left": "right",
                g = Math.abs(c[1] - f) / h < .3 ? "middle": c[1] > f ? "top": "bottom";
                a && a[u] && a[u].textStyle && (l = new Lo(a[u].textStyle, r, r.ecModel));
                var m = new qS({
                    silent: !0
                });
                this.group.add(m),
                fo(m.style, l, {
                    x: c[0],
                    y: c[1],
                    textFill: l.getTextColor() || t.get("axisLine.lineStyle.color"),
                    text: i.formattedLabel,
                    textAlign: p,
                    textVerticalAlign: g
                })
            },
            this)
        },
        _splitLine: function(t, e, i, n) {
            var o = t.getModel("splitLine").getModel("lineStyle"),
            a = o.get("color"),
            s = 0;
            a = a instanceof Array ? a: [a];
            for (var l = [], u = 0; u < i.length; u++) {
                var h = s++%a.length;
                l[h] = l[h] || [],
                l[h].push(new rM({
                    shape: Bv(e, n, i[u].coord)
                }))
            }
            for (u = 0; u < l.length; u++) this.group.add(xM(l[u], {
                style: r({
                    stroke: a[u % a.length]
                },
                o.getLineStyle()),
                silent: !0,
                z: t.get("z")
            }))
        },
        _splitArea: function(t, e, i, n) {
            if (i.length) {
                var o = t.getModel("splitArea").getModel("areaStyle"),
                a = o.get("color"),
                s = 0;
                a = a instanceof Array ? a: [a];
                for (var l = [], u = Math.PI / 180, h = -i[0].coord * u, c = Math.min(n[0], n[1]), d = Math.max(n[0], n[1]), f = t.get("clockwise"), p = 1; p < i.length; p++) {
                    var g = s++%a.length;
                    l[g] = l[g] || [],
                    l[g].push(new $S({
                        shape: {
                            cx: e.cx,
                            cy: e.cy,
                            r0: c,
                            r: d,
                            startAngle: h,
                            endAngle: -i[p].coord * u,
                            clockwise: f
                        },
                        silent: !0
                    })),
                    h = -i[p].coord * u
                }
                for (p = 0; p < l.length; p++) this.group.add(xM(l[p], {
                    style: r({
                        fill: a[p % a.length]
                    },
                    o.getAreaStyle()),
                    silent: !0
                }))
            }
        }
    });
    var eN = ["axisLine", "axisTickLabel", "axisName"],
    iN = ["splitLine", "splitArea"];
    LD.extend({
        type: "radiusAxis",
        axisPointerClass: "PolarAxisPointer",
        render: function(t, e) {
            if (this.group.removeAll(), t.get("show")) {
                var i = t.axis,
                n = i.polar,
                o = n.getAngleAxis(),
                a = i.getTicksCoords(),
                r = o.getExtent()[0],
                s = i.getExtent(),
                l = Gv(n, t, r),
                u = new ID(t, l);
                d(eN, u.add, u),
                this.group.add(u.getGroup()),
                d(iN,
                function(e) {
                    t.get(e + ".show") && !i.scale.isBlank() && this["_" + e](t, n, r, s, a)
                },
                this)
            }
        },
        _splitLine: function(t, e, i, n, o) {
            var a = t.getModel("splitLine").getModel("lineStyle"),
            s = a.get("color"),
            l = 0;
            s = s instanceof Array ? s: [s];
            for (var u = [], h = 0; h < o.length; h++) {
                var c = l++%s.length;
                u[c] = u[c] || [],
                u[c].push(new KS({
                    shape: {
                        cx: e.cx,
                        cy: e.cy,
                        r: o[h].coord
                    },
                    silent: !0
                }))
            }
            for (h = 0; h < u.length; h++) this.group.add(xM(u[h], {
                style: r({
                    stroke: s[h % s.length],
                    fill: null
                },
                a.getLineStyle()),
                silent: !0
            }))
        },
        _splitArea: function(t, e, i, n, o) {
            if (o.length) {
                var a = t.getModel("splitArea").getModel("areaStyle"),
                s = a.get("color"),
                l = 0;
                s = s instanceof Array ? s: [s];
                for (var u = [], h = o[0].coord, c = 1; c < o.length; c++) {
                    var d = l++%s.length;
                    u[d] = u[d] || [],
                    u[d].push(new $S({
                        shape: {
                            cx: e.cx,
                            cy: e.cy,
                            r0: h,
                            r: o[c].coord,
                            startAngle: 0,
                            endAngle: 2 * Math.PI
                        },
                        silent: !0
                    })),
                    h = o[c].coord
                }
                for (c = 0; c < u.length; c++) this.group.add(xM(u[c], {
                    style: r({
                        fill: s[c % s.length]
                    },
                    a.getAreaStyle()),
                    silent: !0
                }))
            }
        }
    });
    var nN = um.extend({
        makeElOption: function(t, e, i, n, o) {
            var a = i.axis;
            "angle" === a.dim && (this.animationThreshold = Math.PI / 18);
            var r, s = a.polar,
            l = s.getOtherAxis(a).getExtent();
            r = a["dataTo" + aa(a.dim)](e);
            var u = n.get("type");
            if (u && "none" !== u) {
                var h = gm(n),
                c = oN[u](a, s, r, l, h);
                c.style = h,
                t.graphicKey = c.type,
                t.pointer = c
            }
            mm(t, i, n, o, Wv(e, i, 0, s, n.get("label.margin")))
        }
    }),
    oN = {
        line: function(t, e, i, n, o) {
            return "angle" === t.dim ? {
                type: "Line",
                shape: wm(e.coordToPoint([n[0], i]), e.coordToPoint([n[1], i]))
            }: {
                type: "Circle",
                shape: {
                    cx: e.cx,
                    cy: e.cy,
                    r: i
                }
            }
        },
        shadow: function(t, e, i, n, o) {
            var a = Math.max(1, t.getBandWidth()),
            r = Math.PI / 180;
            return "angle" === t.dim ? {
                type: "Sector",
                shape: Sm(e.cx, e.cy, n[0], n[1], ( - i - a / 2) * r, (a / 2 - i) * r)
            }: {
                type: "Sector",
                shape: Sm(e.cx, e.cy, i - a / 2, i + a / 2, 0, 2 * Math.PI)
            }
        }
    };
    LD.registerAxisPointerClass("PolarAxisPointer", nN),
    Os(v(function(t, e, i) {
        i.getWidth(),
        i.getHeight();
        var n = {},
        o = kv(g(e.getSeriesByType(t),
        function(t) {
            return ! e.isSeriesFiltered(t) && t.coordinateSystem && "polar" === t.coordinateSystem.type
        }));
        e.eachSeriesByType(t,
        function(t) {
            if ("polar" === t.coordinateSystem.type) {
                var e = t.getData(),
                i = t.coordinateSystem,
                a = i.getBaseAxis(),
                r = Cv(t),
                s = o[Lv(a)][r],
                l = s.offset,
                u = s.width,
                h = i.getOtherAxis(a),
                c = t.coordinateSystem.cx,
                d = t.coordinateSystem.cy,
                f = t.get("barMinHeight") || 0,
                p = t.get("barMinAngle") || 0;
                n[r] = n[r] || [];
                for (var g = e.mapDimension(h.dim), m = e.mapDimension(a.dim), v = hl(e, g), y = h.getExtent()[0], x = 0, _ = e.count(); x < _; x++) {
                    var w = e.get(g, x),
                    b = e.get(m, x);
                    if (!isNaN(w)) {
                        var S = w >= 0 ? "p": "n",
                        M = y;
                        v && (n[r][b] || (n[r][b] = {
                            p: y,
                            n: y
                        }), M = n[r][b][S]);
                        var I, T, A, D;
                        if ("radius" === h.dim) {
                            var C = h.dataToRadius(w) - y,
                            L = a.dataToAngle(b);
                            Math.abs(C) < f && (C = (C < 0 ? -1 : 1) * f),
                            I = M,
                            T = M + C,
                            D = (A = L - l) - u,
                            v && (n[r][b][S] = T)
                        } else {
                            var k = h.dataToAngle(w, !0) - y,
                            P = a.dataToRadius(b);
                            Math.abs(k) < p && (k = (k < 0 ? -1 : 1) * p),
                            T = (I = P + l) + u,
                            A = M,
                            D = M + k,
                            v && (n[r][b][S] = D)
                        }
                        e.setItemLayout(x, {
                            cx: c,
                            cy: d,
                            r0: I,
                            r: T,
                            startAngle: -A * Math.PI / 180,
                            endAngle: -D * Math.PI / 180
                        })
                    }
                }
            }
        },
        this)
    },
    "bar")),
    Vs({
        type: "polar"
    }),
    h(XM.extend({
        type: "geo",
        coordinateSystem: null,
        layoutMode: "box",
        init: function(t) {
            XM.prototype.init.apply(this, arguments),
            Ci(t, "label", ["show"])
        },
        optionUpdated: function() {
            var t = this.option,
            e = this;
            t.regions = _C.getFilledRegions(t.regions, t.map, t.nameMap),
            this._optionModelMap = p(t.regions || [],
            function(t, i) {
                return i.name && t.set(i.name, new Lo(i, e)),
                t
            },
            E()),
            this.updateSelectedMap(t.regions)
        },
        defaultOption: {
            zlevel: 0,
            z: 0,
            show: !0,
            left: "center",
            top: "center",
            aspectScale: null,
            silent: !1,
            map: "",
            boundingCoords: null,
            center: null,
            zoom: 1,
            scaleLimit: null,
            label: {
                show: !1,
                color: "#000"
            },
            itemStyle: {
                borderWidth: .5,
                borderColor: "#444",
                color: "#eee"
            },
            emphasis: {
                label: {
                    show: !0,
                    color: "rgb(100,0,0)"
                },
                itemStyle: {
                    color: "rgba(255,215,0,0.8)"
                }
            },
            regions: []
        },
        getRegionModel: function(t) {
            return this._optionModelMap.get(t) || new Lo(null, this, this.ecModel)
        },
        getFormattedLabel: function(t, e) {
            var i = this.getRegionModel(t).get("label." + e + ".formatter"),
            n = {
                name: t
            };
            return "function" == typeof i ? (n.status = e, i(n)) : "string" == typeof i ? i.replace("{a}", null != t ? t: "") : void 0
        },
        setZoom: function(t) {
            this.option.zoom = t
        },
        setCenter: function(t) {
            this.option.center = t
        }
    }), HD),
    Vs({
        type: "geo",
        init: function(t, e) {
            var i = new _c(e, !0);
            this._mapDraw = i,
            this.group.add(i.group)
        },
        render: function(t, e, i, n) {
            if (!n || "geoToggleSelect" !== n.type || n.from !== this.uid) {
                var o = this._mapDraw;
                t.get("show") ? o.draw(t, e, i, this, n) : this._mapDraw.group.removeAll(),
                this.group.silent = t.get("silent")
            }
        },
        dispose: function() {
            this._mapDraw && this._mapDraw.remove()
        }
    }),
    Hv("toggleSelected", {
        type: "geoToggleSelect",
        event: "geoselectchanged"
    }),
    Hv("select", {
        type: "geoSelect",
        event: "geoselected"
    }),
    Hv("unSelect", {
        type: "geoUnSelect",
        event: "geounselected"
    });
    var aN = ["rect", "polygon", "keep", "clear"],
    rN = d,
    sN = {
        lineX: Kv(0),
        lineY: Kv(1),
        rect: {
            point: function(t, e, i) {
                return t && i.boundingRect.contain(t[0], t[1])
            },
            rect: function(t, e, i) {
                return t && i.boundingRect.intersect(t)
            }
        },
        polygon: {
            point: function(t, e, i) {
                return t && i.boundingRect.contain(t[0], t[1]) && Xl(i.range, t[0], t[1])
            },
            rect: function(t, e, i) {
                var n = i.range;
                if (!t || n.length <= 1) return ! 1;
                var o = t.x,
                a = t.y,
                r = t.width,
                s = t.height,
                l = n[0];
                return !! (Xl(n, o, a) || Xl(n, o + r, a) || Xl(n, o, a + s) || Xl(n, o + r, a + s) || ue.create(t).contain(l[0], l[1]) || Jv(o, a, o + r, a, n) || Jv(o, a, o, a + s, n) || Jv(o + r, a, o + r, a + s, n) || Jv(o, a + s, o + r, a + s, n)) || void 0
            }
        }
    },
    lN = d,
    uN = l,
    hN = v,
    cN = ["dataToPoint", "pointToData"],
    dN = ["grid", "xAxis", "yAxis", "geo", "graph", "polar", "radiusAxis", "angleAxis", "bmap"],
    fN = iy.prototype;
    fN.setOutputRanges = function(t, e) {
        this.matchOutputRanges(t, e,
        function(t, e, i) {
            if ((t.coordRanges || (t.coordRanges = [])).push(e), !t.coordRange) {
                t.coordRange = e;
                var n = vN[t.brushType](0, i, e);
                t.__rangeOffset = {
                    offset: yN[t.brushType](n.values, t.range, [1, 1]),
                    xyMinMax: n.xyMinMax
                }
            }
        })
    },
    fN.matchOutputRanges = function(t, e, i) {
        lN(t,
        function(t) {
            var n = this.findTargetInfo(t, e);
            n && !0 !== n && d(n.coordSyses,
            function(n) {
                var o = vN[t.brushType](1, n, t.range);
                i(t, o.values, n, e)
            })
        },
        this)
    },
    fN.setInputRanges = function(t, e) {
        lN(t,
        function(t) {
            var i = this.findTargetInfo(t, e);
            if (t.range = t.range || [], i && !0 !== i) {
                t.panelId = i.panelId;
                var n = vN[t.brushType](0, i.coordSys, t.coordRange),
                o = t.__rangeOffset;
                t.range = o ? yN[t.brushType](n.values, o.offset, sy(n.xyMinMax, o.xyMinMax)) : n.values
            }
        },
        this)
    },
    fN.makePanelOpts = function(t, e) {
        return f(this._targetInfoList,
        function(i) {
            var n = i.getPanelRect();
            return {
                panelId: i.panelId,
                defaultBrushType: e && e(i),
                clipPath: hp(n),
                isTargetByCursor: dp(n, t, i.coordSysModel),
                getLinearBrushOtherExtent: cp(n)
            }
        })
    },
    fN.controlSeries = function(t, e, i) {
        var n = this.findTargetInfo(t, i);
        return ! 0 === n || n && uN(n.coordSyses, e.coordinateSystem) >= 0
    },
    fN.findTargetInfo = function(t, e) {
        for (var i = this._targetInfoList,
        n = oy(e, t), o = 0; o < i.length; o++) {
            var a = i[o],
            r = t.panelId;
            if (r) {
                if (a.panelId === r) return a
            } else for (o = 0; o < gN.length; o++) if (gN[o](n, a)) return a
        }
        return ! 0
    };
    var pN = {
        grid: function(t, e) {
            var i = t.xAxisModels,
            n = t.yAxisModels,
            o = t.gridModels,
            a = E(),
            r = {},
            s = {}; (i || n || o) && (lN(i,
            function(t) {
                var e = t.axis.grid.model;
                a.set(e.id, e),
                r[e.id] = !0
            }), lN(n,
            function(t) {
                var e = t.axis.grid.model;
                a.set(e.id, e),
                s[e.id] = !0
            }), lN(o,
            function(t) {
                a.set(t.id, t),
                r[t.id] = !0,
                s[t.id] = !0
            }), a.each(function(t) {
                var o = t.coordinateSystem,
                a = [];
                lN(o.getCartesians(),
                function(t, e) { (uN(i, t.getAxis("x").model) >= 0 || uN(n, t.getAxis("y").model) >= 0) && a.push(t)
                }),
                e.push({
                    panelId: "grid--" + t.id,
                    gridModel: t,
                    coordSysModel: t,
                    coordSys: a[0],
                    coordSyses: a,
                    getPanelRect: mN.grid,
                    xAxisDeclared: r[t.id],
                    yAxisDeclared: s[t.id]
                })
            }))
        },
        geo: function(t, e) {
            lN(t.geoModels,
            function(t) {
                var i = t.coordinateSystem;
                e.push({
                    panelId: "geo--" + t.id,
                    geoModel: t,
                    coordSysModel: t,
                    coordSys: i,
                    coordSyses: [i],
                    getPanelRect: mN.geo
                })
            })
        }
    },
    gN = [function(t, e) {
        var i = t.xAxisModel,
        n = t.yAxisModel,
        o = t.gridModel;
        return ! o && i && (o = i.axis.grid.model),
        !o && n && (o = n.axis.grid.model),
        o && o === e.gridModel
    },
    function(t, e) {
        var i = t.geoModel;
        return i && i === e.geoModel
    }],
    mN = {
        grid: function() {
            return this.coordSys.grid.getRect().clone()
        },
        geo: function() {
            var t = this.coordSys,
            e = t.getBoundingRect().clone();
            return e.applyTransform(Mo(t)),
            e
        }
    },
    vN = {
        lineX: hN(ay, 0),
        lineY: hN(ay, 1),
        rect: function(t, e, i) {
            var n = e[cN[t]]([i[0][0], i[1][0]]),
            o = e[cN[t]]([i[0][1], i[1][1]]),
            a = [ny([n[0], o[0]]), ny([n[1], o[1]])];
            return {
                values: a,
                xyMinMax: a
            }
        },
        polygon: function(t, e, i) {
            var n = [[1 / 0, -1 / 0], [1 / 0, -1 / 0]];
            return {
                values: f(i,
                function(i) {
                    var o = e[cN[t]](i);
                    return n[0][0] = Math.min(n[0][0], o[0]),
                    n[1][0] = Math.min(n[1][0], o[1]),
                    n[0][1] = Math.max(n[0][1], o[0]),
                    n[1][1] = Math.max(n[1][1], o[1]),
                    o
                }),
                xyMinMax: n
            }
        }
    },
    yN = {
        lineX: hN(ry, 0),
        lineY: hN(ry, 1),
        rect: function(t, e, i) {
            return [[t[0][0] - i[0] * e[0][0], t[0][1] - i[0] * e[0][1]], [t[1][0] - i[1] * e[1][0], t[1][1] - i[1] * e[1][1]]]
        },
        polygon: function(t, e, i) {
            return f(t,
            function(t, n) {
                return [t[0] - i[0] * e[n][0], t[1] - i[1] * e[n][1]]
            })
        }
    },
    xN = ["inBrush", "outOfBrush"],
    _N = "__ecBrushSelect",
    wN = "__ecInBrushSelectEvent",
    bN = IT.VISUAL.BRUSH;
    Os(bN,
    function(t, e, i) {
        t.eachComponent({
            mainType: "brush"
        },
        function(e) {
            i && "takeGlobalCursor" === i.type && e.setBrushOption("brush" === i.key ? i.brushOption: {
                brushType: !1
            }),
            (e.brushTargetManager = new iy(e.option, t)).setInputRanges(e.areas, t)
        })
    }),
    zs(bN,
    function(t, e, n) {
        var o, a, s = [];
        t.eachComponent({
            mainType: "brush"
        },
        function(e, n) {
            function l(t) {
                return "all" === m || v[t]
            }
            function u(t) {
                return !! t.length
            }
            function h(t, e) {
                var i = t.coordinateSystem;
                w |= i.hasAxisBrushed(),
                l(e) && i.eachActiveState(t.getData(),
                function(t, e) {
                    "active" === t && (x[e] = 1)
                })
            }
            function c(i, n, o) {
                var a = dy(i);
                if (a && !fy(e, n) && (d(b,
                function(n) {
                    a[n.brushType] && e.brushTargetManager.controlSeries(n, i, t) && o.push(n),
                    w |= u(o)
                }), l(n) && u(o))) {
                    var r = i.getData();
                    r.each(function(t) {
                        cy(a, o, r, t) && (x[t] = 1)
                    })
                }
            }
            var p = {
                brushId: e.id,
                brushIndex: n,
                brushName: e.name,
                areas: i(e.areas),
                selected: []
            };
            s.push(p);
            var g = e.option,
            m = g.brushLink,
            v = [],
            x = [],
            _ = [],
            w = 0;
            n || (o = g.throttleType, a = g.throttleDelay);
            var b = f(e.areas,
            function(t) {
                return py(r({
                    boundingRect: SN[t.brushType](t)
                },
                t))
            }),
            S = Yv(e.option, xN,
            function(t) {
                t.mappingMethod = "fixed"
            });
            y(m) && d(m,
            function(t) {
                v[t] = 1
            }),
            t.eachSeries(function(t, e) {
                var i = _[e] = [];
                "parallel" === t.subType ? h(t, e) : c(t, e, i)
            }),
            t.eachSeries(function(t, e) {
                var i = {
                    seriesId: t.id,
                    seriesIndex: e,
                    seriesName: t.name,
                    dataIndex: []
                };
                p.selected.push(i);
                var n = dy(t),
                o = _[e],
                a = t.getData(),
                r = l(e) ?
                function(t) {
                    return x[t] ? (i.dataIndex.push(a.getRawIndex(t)), "inBrush") : "outOfBrush"
                }: function(t) {
                    return cy(n, o, a, t) ? (i.dataIndex.push(a.getRawIndex(t)), "inBrush") : "outOfBrush"
                }; (l(e) ? w: u(o)) && Xv(xN, S, a, r)
            })
        }),
        uy(e, o, a, s, n)
    });
    var SN = {
        lineX: B,
        lineY: B,
        rect: function(t) {
            return gy(t.range)
        },
        polygon: function(t) {
            for (var e, i = t.range,
            n = 0,
            o = i.length; n < o; n++) {
                e = e || [[1 / 0, -1 / 0], [1 / 0, -1 / 0]];
                var a = i[n];
                a[0] < e[0][0] && (e[0][0] = a[0]),
                a[0] > e[0][1] && (e[0][1] = a[0]),
                a[1] < e[1][0] && (e[1][0] = a[1]),
                a[1] > e[1][1] && (e[1][1] = a[1])
            }
            return e && gy(e)
        }
    },
    MN = ["#ddd"];
    Bs({
        type: "brush",
        dependencies: ["geo", "grid", "xAxis", "yAxis", "parallel", "series"],
        defaultOption: {
            toolbox: null,
            brushLink: null,
            seriesIndex: "all",
            geoIndex: null,
            xAxisIndex: null,
            yAxisIndex: null,
            brushType: "rect",
            brushMode: "single",
            transformable: !0,
            brushStyle: {
                borderWidth: 1,
                color: "rgba(120,140,180,0.3)",
                borderColor: "rgba(120,140,180,0.8)"
            },
            throttleType: "fixRate",
            throttleDelay: 0,
            removeOnClick: !0,
            z: 1e4
        },
        areas: [],
        brushType: null,
        brushOption: {},
        coordInfoList: [],
        optionUpdated: function(t, e) {
            var i = this.option; ! e && Uv(i, t, ["inBrush", "outOfBrush"]);
            var n = i.inBrush = i.inBrush || {};
            i.outOfBrush = i.outOfBrush || {
                color: MN
            },
            n.hasOwnProperty("liftZ") || (n.liftZ = 5)
        },
        setAreas: function(t) {
            t && (this.areas = f(t,
            function(t) {
                return my(this.option, t)
            },
            this))
        },
        setBrushOption: function(t) {
            this.brushOption = my(this.option, t),
            this.brushType = this.brushOption.brushType
        }
    }),
    Vs({
        type: "brush",
        init: function(t, e) {
            this.ecModel = t,
            this.api = e,
            this.model,
            (this._brushController = new Cf(e.getZr())).on("brush", m(this._onBrush, this)).mount()
        },
        render: function(t) {
            return this.model = t,
            vy.apply(this, arguments)
        },
        updateTransform: vy,
        updateView: vy,
        dispose: function() {
            this._brushController.dispose()
        },
        _onBrush: function(t, e) {
            var n = this.model.id;
            this.model.brushTargetManager.setOutputRanges(t, this.ecModel),
            (!e.isEnd || e.removeOnClick) && this.api.dispatchAction({
                type: "brush",
                brushId: n,
                areas: i(t),
                $from: n
            })
        }
    }),
    Ps({
        type: "brush",
        event: "brush"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "brush",
            query: t
        },
        function(e) {
            e.setAreas(t.areas)
        })
    }),
    Ps({
        type: "brushSelect",
        event: "brushSelected",
        update: "none"
    },
    function() {});
    var IN = {},
    TN = YI.toolbox.brush;
    _y.defaultOption = {
        show: !0,
        type: ["rect", "polygon", "lineX", "lineY", "keep", "clear"],
        icon: {
            rect: "M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",
            polygon: "M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",
            lineX: "M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",
            lineY: "M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",
            keep: "M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",
            clear: "M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"
        },
        title: i(TN.title)
    };
    var AN = _y.prototype;
    AN.render = AN.updateView = function(t, e, i) {
        var n, o, a;
        e.eachComponent({
            mainType: "brush"
        },
        function(t) {
            n = t.brushType,
            o = t.brushOption.brushMode || "single",
            a |= t.areas.length
        }),
        this._brushType = n,
        this._brushMode = o,
        d(t.get("type", !0),
        function(e) {
            t.setIconStatus(e, ("keep" === e ? "multiple" === o: "clear" === e ? a: e === n) ? "emphasis": "normal")
        })
    },
    AN.getIcons = function() {
        var t = this.model,
        e = t.get("icon", !0),
        i = {};
        return d(t.get("type", !0),
        function(t) {
            e[t] && (i[t] = e[t])
        }),
        i
    },
    AN.onclick = function(t, e, i) {
        var n = this._brushType,
        o = this._brushMode;
        "clear" === i ? (e.dispatchAction({
            type: "axisAreaSelect",
            intervals: []
        }), e.dispatchAction({
            type: "brush",
            command: "clear",
            areas: []
        })) : e.dispatchAction({
            type: "takeGlobalCursor",
            key: "brush",
            brushOption: {
                brushType: "keep" === i ? n: n !== i && i,
                brushMode: "keep" === i ? "multiple" === o ? "single": "multiple": o
            }
        })
    },
    yy("brush", _y),
    Ls(function(t, e) {
        var i = t && t.brush;
        if (y(i) || (i = i ? [i] : []), i.length) {
            var n = [];
            d(i,
            function(t) {
                var e = t.hasOwnProperty("toolbox") ? t.toolbox: [];
                e instanceof Array && (n = n.concat(e))
            });
            var o = t && t.toolbox;
            y(o) && (o = o[0]),
            o || (o = {
                feature: {}
            },
            t.toolbox = [o]);
            var a = o.feature || (o.feature = {}),
            r = a.brush || (a.brush = {}),
            s = r.type || (r.type = []);
            s.push.apply(s, n),
            Zv(s),
            e && !s.length && s.push.apply(s, aN)
        }
    }),
    wy.prototype = {
        constructor: wy,
        type: "calendar",
        dimensions: ["time", "value"],
        getDimensionsInfo: function() {
            return [{
                name: "time",
                type: "time"
            },
            "value"]
        },
        getRangeInfo: function() {
            return this._rangeInfo
        },
        getModel: function() {
            return this._model
        },
        getRect: function() {
            return this._rect
        },
        getCellWidth: function() {
            return this._sw
        },
        getCellHeight: function() {
            return this._sh
        },
        getOrient: function() {
            return this._orient
        },
        getFirstDayOfWeek: function() {
            return this._firstDayOfWeek
        },
        getDateInfo: function(t) {
            var e = (t = jo(t)).getFullYear(),
            i = t.getMonth() + 1;
            i = i < 10 ? "0" + i: i;
            var n = t.getDate();
            n = n < 10 ? "0" + n: n;
            var o = t.getDay();
            return o = Math.abs((o + 7 - this.getFirstDayOfWeek()) % 7),
            {
                y: e,
                m: i,
                d: n,
                day: o,
                time: t.getTime(),
                formatedDate: e + "-" + i + "-" + n,
                date: t
            }
        },
        getNextNDay: function(t, e) {
            return 0 === (e = e || 0) ? this.getDateInfo(t) : ((t = new Date(this.getDateInfo(t).time)).setDate(t.getDate() + e), this.getDateInfo(t))
        },
        update: function(t, e) {
            function i(t, e) {
                return null != t[e] && "auto" !== t[e]
            }
            this._firstDayOfWeek = +this._model.getModel("dayLabel").get("firstDay"),
            this._orient = this._model.get("orient"),
            this._lineWidth = this._model.getModel("itemStyle").getItemStyle().lineWidth || 0,
            this._rangeInfo = this._getRangeInfo(this._initRangeOption());
            var n = this._rangeInfo.weeks || 1,
            o = ["width", "height"],
            a = this._model.get("cellSize").slice(),
            r = this._model.getBoxLayoutParams(),
            s = "horizontal" === this._orient ? [n, 7] : [7, n];
            d([0, 1],
            function(t) {
                i(a, t) && (r[o[t]] = a[t] * s[t])
            });
            var l = {
                width: e.getWidth(),
                height: e.getHeight()
            },
            u = this._rect = la(r, l);
            d([0, 1],
            function(t) {
                i(a, t) || (a[t] = u[o[t]] / s[t])
            }),
            this._sw = a[0],
            this._sh = a[1]
        },
        dataToPoint: function(t, e) {
            y(t) && (t = t[0]),
            null == e && (e = !0);
            var i = this.getDateInfo(t),
            n = this._rangeInfo,
            o = i.formatedDate;
            if (e && !(i.time >= n.start.time && i.time < n.end.time + 864e5)) return [NaN, NaN];
            var a = i.day,
            r = this._getRangeInfo([n.start.time, o]).nthWeek;
            return "vertical" === this._orient ? [this._rect.x + a * this._sw + this._sw / 2, this._rect.y + r * this._sh + this._sh / 2] : [this._rect.x + r * this._sw + this._sw / 2, this._rect.y + a * this._sh + this._sh / 2]
        },
        pointToData: function(t) {
            var e = this.pointToDate(t);
            return e && e.time
        },
        dataToRect: function(t, e) {
            var i = this.dataToPoint(t, e);
            return {
                contentShape: {
                    x: i[0] - (this._sw - this._lineWidth) / 2,
                    y: i[1] - (this._sh - this._lineWidth) / 2,
                    width: this._sw - this._lineWidth,
                    height: this._sh - this._lineWidth
                },
                center: i,
                tl: [i[0] - this._sw / 2, i[1] - this._sh / 2],
                tr: [i[0] + this._sw / 2, i[1] - this._sh / 2],
                br: [i[0] + this._sw / 2, i[1] + this._sh / 2],
                bl: [i[0] - this._sw / 2, i[1] + this._sh / 2]
            }
        },
        pointToDate: function(t) {
            var e = Math.floor((t[0] - this._rect.x) / this._sw) + 1,
            i = Math.floor((t[1] - this._rect.y) / this._sh) + 1,
            n = this._rangeInfo.range;
            return "vertical" === this._orient ? this._getDateByWeeksAndDay(i, e - 1, n) : this._getDateByWeeksAndDay(e, i - 1, n)
        },
        convertToPixel: v(by, "dataToPoint"),
        convertFromPixel: v(by, "pointToData"),
        _initRangeOption: function() {
            var t = this._model.get("range"),
            e = t;
            if (y(e) && 1 === e.length && (e = e[0]), /^\d{4}$/.test(e) && (t = [e + "-01-01", e + "-12-31"]), /^\d{4}[\/|-]\d{1,2}$/.test(e)) {
                var i = this.getDateInfo(e),
                n = i.date;
                n.setMonth(n.getMonth() + 1);
                var o = this.getNextNDay(n, -1);
                t = [i.formatedDate, o.formatedDate]
            }
            /^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(e) && (t = [e, e]);
            var a = this._getRangeInfo(t);
            return a.start.time > a.end.time && t.reverse(),
            t
        },
        _getRangeInfo: function(t) {
            var e; (t = [this.getDateInfo(t[0]), this.getDateInfo(t[1])])[0].time > t[1].time && (e = !0, t.reverse());
            var i = Math.floor(t[1].time / 864e5) - Math.floor(t[0].time / 864e5) + 1,
            n = new Date(t[0].time),
            o = n.getDate(),
            a = t[1].date.getDate();
            if (n.setDate(o + i - 1), n.getDate() !== a) for (var r = n.getTime() - t[1].time > 0 ? 1 : -1; n.getDate() !== a && (n.getTime() - t[1].time) * r > 0;) i -= r,
            n.setDate(o + i - 1);
            var s = Math.floor((i + t[0].day + 6) / 7),
            l = e ? 1 - s: s - 1;
            return e && t.reverse(),
            {
                range: [t[0].formatedDate, t[1].formatedDate],
                start: t[0],
                end: t[1],
                allDay: i,
                weeks: s,
                nthWeek: l,
                fweek: t[0].day,
                lweek: t[1].day
            }
        },
        _getDateByWeeksAndDay: function(t, e, i) {
            var n = this._getRangeInfo(i);
            if (t > n.weeks || 0 === t && e < n.fweek || t === n.weeks && e > n.lweek) return ! 1;
            var o = 7 * (t - 1) - n.fweek + e,
            a = new Date(n.start.time);
            return a.setDate(n.start.d + o),
            this.getDateInfo(a)
        }
    },
    wy.dimensions = wy.prototype.dimensions,
    wy.getDimensionsInfo = wy.prototype.getDimensionsInfo,
    wy.create = function(t, e) {
        var i = [];
        return t.eachComponent("calendar",
        function(n) {
            var o = new wy(n, t, e);
            i.push(o),
            n.coordinateSystem = o
        }),
        t.eachSeries(function(t) {
            "calendar" === t.get("coordinateSystem") && (t.coordinateSystem = i[t.get("calendarIndex") || 0])
        }),
        i
    },
    Ba.register("calendar", wy);
    var DN = XM.extend({
        type: "calendar",
        coordinateSystem: null,
        defaultOption: {
            zlevel: 0,
            z: 2,
            left: 80,
            top: 60,
            cellSize: 20,
            orient: "horizontal",
            splitLine: {
                show: !0,
                lineStyle: {
                    color: "#000",
                    width: 1,
                    type: "solid"
                }
            },
            itemStyle: {
                color: "#fff",
                borderWidth: 1,
                borderColor: "#ccc"
            },
            dayLabel: {
                show: !0,
                firstDay: 0,
                position: "start",
                margin: "50%",
                nameMap: "en",
                color: "#000"
            },
            monthLabel: {
                show: !0,
                position: "start",
                margin: 5,
                align: "center",
                nameMap: "en",
                formatter: null,
                color: "#000"
            },
            yearLabel: {
                show: !0,
                position: null,
                margin: 30,
                formatter: null,
                color: "#ccc",
                fontFamily: "sans-serif",
                fontWeight: "bolder",
                fontSize: 20
            }
        },
        init: function(t, e, i, n) {
            var o = da(t);
            DN.superApply(this, "init", arguments),
            Sy(t, o)
        },
        mergeOption: function(t, e) {
            DN.superApply(this, "mergeOption", arguments),
            Sy(this.option, t)
        }
    }),
    CN = {
        EN: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        CN: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
    },
    LN = {
        EN: ["S", "M", "T", "W", "T", "F", "S"],
        CN: ["日", "一", "二", "三", "四", "五", "六"]
    };
    Vs({
        type: "calendar",
        _tlpoints: null,
        _blpoints: null,
        _firstDayOfMonth: null,
        _firstDayPoints: null,
        render: function(t, e, i) {
            var n = this.group;
            n.removeAll();
            var o = t.coordinateSystem,
            a = o.getRangeInfo(),
            r = o.getOrient();
            this._renderDayRect(t, a, n),
            this._renderLines(t, a, r, n),
            this._renderYearText(t, a, r, n),
            this._renderMonthText(t, r, n),
            this._renderWeekText(t, a, r, n)
        },
        _renderDayRect: function(t, e, i) {
            for (var n = t.coordinateSystem,
            o = t.getModel("itemStyle").getItemStyle(), a = n.getCellWidth(), r = n.getCellHeight(), s = e.start.time; s <= e.end.time; s = n.getNextNDay(s, 1).time) {
                var l = n.dataToRect([s], !1).tl,
                u = new aM({
                    shape: {
                        x: l[0],
                        y: l[1],
                        width: a,
                        height: r
                    },
                    cursor: "default",
                    style: o
                });
                i.add(u)
            }
        },
        _renderLines: function(t, e, i, n) {
            function o(e) {
                a._firstDayOfMonth.push(r.getDateInfo(e)),
                a._firstDayPoints.push(r.dataToRect([e], !1).tl);
                var o = a._getLinePointsOfOneWeek(t, e, i);
                a._tlpoints.push(o[0]),
                a._blpoints.push(o[o.length - 1]),
                l && a._drawSplitline(o, s, n)
            }
            var a = this,
            r = t.coordinateSystem,
            s = t.getModel("splitLine.lineStyle").getLineStyle(),
            l = t.get("splitLine.show"),
            u = s.lineWidth;
            this._tlpoints = [],
            this._blpoints = [],
            this._firstDayOfMonth = [],
            this._firstDayPoints = [];
            for (var h = e.start,
            c = 0; h.time <= e.end.time; c++) {
                o(h.formatedDate),
                0 === c && (h = r.getDateInfo(e.start.y + "-" + e.start.m));
                var d = h.date;
                d.setMonth(d.getMonth() + 1),
                h = r.getDateInfo(d)
            }
            o(r.getNextNDay(e.end.time, 1).formatedDate),
            l && this._drawSplitline(a._getEdgesPoints(a._tlpoints, u, i), s, n),
            l && this._drawSplitline(a._getEdgesPoints(a._blpoints, u, i), s, n)
        },
        _getEdgesPoints: function(t, e, i) {
            var n = [t[0].slice(), t[t.length - 1].slice()],
            o = "horizontal" === i ? 0 : 1;
            return n[0][o] = n[0][o] - e / 2,
            n[1][o] = n[1][o] + e / 2,
            n
        },
        _drawSplitline: function(t, e, i) {
            var n = new oM({
                z2: 20,
                shape: {
                    points: t
                },
                style: e
            });
            i.add(n)
        },
        _getLinePointsOfOneWeek: function(t, e, i) {
            var n = t.coordinateSystem;
            e = n.getDateInfo(e);
            for (var o = [], a = 0; a < 7; a++) {
                var r = n.getNextNDay(e.time, a),
                s = n.dataToRect([r.time], !1);
                o[2 * r.day] = s.tl,
                o[2 * r.day + 1] = s["horizontal" === i ? "bl": "tr"]
            }
            return o
        },
        _formatterLabel: function(t, e) {
            return "string" == typeof t && t ? ea(t, e) : "function" == typeof t ? t(e) : e.nameMap
        },
        _yearTextPositionControl: function(t, e, i, n, o) {
            e = e.slice();
            var a = ["center", "bottom"];
            "bottom" === n ? (e[1] += o, a = ["center", "top"]) : "left" === n ? e[0] -= o: "right" === n ? (e[0] += o, a = ["center", "top"]) : e[1] -= o;
            var r = 0;
            return "left" !== n && "right" !== n || (r = Math.PI / 2),
            {
                rotation: r,
                position: e,
                style: {
                    textAlign: a[0],
                    textVerticalAlign: a[1]
                }
            }
        },
        _renderYearText: function(t, e, i, n) {
            var o = t.getModel("yearLabel");
            if (o.get("show")) {
                var a = o.get("margin"),
                r = o.get("position");
                r || (r = "horizontal" !== i ? "top": "left");
                var s = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]],
                l = (s[0][0] + s[1][0]) / 2,
                u = (s[0][1] + s[1][1]) / 2,
                h = "horizontal" === i ? 0 : 1,
                c = {
                    top: [l, s[h][1]],
                    bottom: [l, s[1 - h][1]],
                    left: [s[1 - h][0], u],
                    right: [s[h][0], u]
                },
                d = e.start.y; + e.end.y > +e.start.y && (d = d + "-" + e.end.y);
                var f = o.get("formatter"),
                p = {
                    start: e.start.y,
                    end: e.end.y,
                    nameMap: d
                },
                g = this._formatterLabel(f, p),
                m = new qS({
                    z2: 30
                });
                fo(m.style, o, {
                    text: g
                }),
                m.attr(this._yearTextPositionControl(m, c[r], i, r, a)),
                n.add(m)
            }
        },
        _monthTextPositionControl: function(t, e, i, n, o) {
            var a = "left",
            r = "top",
            s = t[0],
            l = t[1];
            return "horizontal" === i ? (l += o, e && (a = "center"), "start" === n && (r = "bottom")) : (s += o, e && (r = "middle"), "start" === n && (a = "right")),
            {
                x: s,
                y: l,
                textAlign: a,
                textVerticalAlign: r
            }
        },
        _renderMonthText: function(t, e, i) {
            var n = t.getModel("monthLabel");
            if (n.get("show")) {
                var o = n.get("nameMap"),
                r = n.get("margin"),
                s = n.get("position"),
                l = n.get("align"),
                u = [this._tlpoints, this._blpoints];
                _(o) && (o = CN[o.toUpperCase()] || []);
                var h = "start" === s ? 0 : 1,
                c = "horizontal" === e ? 0 : 1;
                r = "start" === s ? -r: r;
                for (var d = "center" === l,
                f = 0; f < u[h].length - 1; f++) {
                    var p = u[h][f].slice(),
                    g = this._firstDayOfMonth[f];
                    if (d) {
                        var m = this._firstDayPoints[f];
                        p[c] = (m[c] + u[0][f + 1][c]) / 2
                    }
                    var v = n.get("formatter"),
                    y = o[ + g.m - 1],
                    x = {
                        yyyy: g.y,
                        yy: (g.y + "").slice(2),
                        MM: g.m,
                        M: +g.m,
                        nameMap: y
                    },
                    w = this._formatterLabel(v, x),
                    b = new qS({
                        z2: 30
                    });
                    a(fo(b.style, n, {
                        text: w
                    }), this._monthTextPositionControl(p, d, e, s, r)),
                    i.add(b)
                }
            }
        },
        _weekTextPositionControl: function(t, e, i, n, o) {
            var a = "center",
            r = "middle",
            s = t[0],
            l = t[1],
            u = "start" === i;
            return "horizontal" === e ? (s = s + n + (u ? 1 : -1) * o[0] / 2, a = u ? "right": "left") : (l = l + n + (u ? 1 : -1) * o[1] / 2, r = u ? "bottom": "top"),
            {
                x: s,
                y: l,
                textAlign: a,
                textVerticalAlign: r
            }
        },
        _renderWeekText: function(t, e, i, n) {
            var o = t.getModel("dayLabel");
            if (o.get("show")) {
                var r = t.coordinateSystem,
                s = o.get("position"),
                l = o.get("nameMap"),
                u = o.get("margin"),
                h = r.getFirstDayOfWeek();
                _(l) && (l = LN[l.toUpperCase()] || []);
                var c = r.getNextNDay(e.end.time, 7 - e.lweek).time,
                d = [r.getCellWidth(), r.getCellHeight()];
                u = Eo(u, d["horizontal" === i ? 0 : 1]),
                "start" === s && (c = r.getNextNDay(e.start.time, -(7 + e.fweek)).time, u = -u);
                for (var f = 0; f < 7; f++) {
                    var p = r.getNextNDay(c, f),
                    g = r.dataToRect([p.time], !1).center,
                    m = f;
                    m = Math.abs((f + h) % 7);
                    var v = new qS({
                        z2: 30
                    });
                    a(fo(v.style, o, {
                        text: l[m]
                    }), this._weekTextPositionControl(g, i, s, u, d)),
                    n.add(v)
                }
            }
        }
    }),
    Bs({
        type: "title",
        layoutMode: {
            type: "box",
            ignoreSize: !0
        },
        defaultOption: {
            zlevel: 0,
            z: 6,
            show: !0,
            text: "",
            target: "blank",
            subtext: "",
            subtarget: "blank",
            left: 0,
            top: 0,
            backgroundColor: "rgba(0,0,0,0)",
            borderColor: "#ccc",
            borderWidth: 0,
            padding: 5,
            itemGap: 10,
            textStyle: {
                fontSize: 18,
                fontWeight: "bolder",
                color: "#333"
            },
            subtextStyle: {
                color: "#aaa"
            }
        }
    }),
    Vs({
        type: "title",
        render: function(t, e, i) {
            if (this.group.removeAll(), t.get("show")) {
                var n = this.group,
                o = t.getModel("textStyle"),
                a = t.getModel("subtextStyle"),
                r = t.get("textAlign"),
                s = t.get("textBaseline"),
                l = new qS({
                    style: fo({},
                    o, {
                        text: t.get("text"),
                        textFill: o.getTextColor()
                    },
                    {
                        disableBox: !0
                    }),
                    z2: 10
                }),
                u = l.getBoundingRect(),
                h = t.get("subtext"),
                c = new qS({
                    style: fo({},
                    a, {
                        text: h,
                        textFill: a.getTextColor(),
                        y: u.height + t.get("itemGap"),
                        textVerticalAlign: "top"
                    },
                    {
                        disableBox: !0
                    }),
                    z2: 10
                }),
                d = t.get("link"),
                f = t.get("sublink"),
                p = t.get("triggerEvent", !0);
                l.silent = !d && !p,
                c.silent = !f && !p,
                d && l.on("click",
                function() {
                    window.open(d, "_" + t.get("target"))
                }),
                f && c.on("click",
                function() {
                    window.open(f, "_" + t.get("subtarget"))
                }),
                l.eventData = c.eventData = p ? {
                    componentType: "title",
                    componentIndex: t.componentIndex
                }: null,
                n.add(l),
                h && n.add(c);
                var g = n.getBoundingRect(),
                m = t.getBoxLayoutParams();
                m.width = g.width,
                m.height = g.height;
                var v = la(m, {
                    width: i.getWidth(),
                    height: i.getHeight()
                },
                t.get("padding"));
                r || ("middle" === (r = t.get("left") || t.get("right")) && (r = "center"), "right" === r ? v.x += v.width: "center" === r && (v.x += v.width / 2)),
                s || ("center" === (s = t.get("top") || t.get("bottom")) && (s = "middle"), "bottom" === s ? v.y += v.height: "middle" === s && (v.y += v.height / 2), s = s || "top"),
                n.attr("position", [v.x, v.y]);
                var y = {
                    textAlign: r,
                    textVerticalAlign: s
                };
                l.setStyle(y),
                c.setStyle(y),
                g = n.getBoundingRect();
                var x = v.margin,
                _ = t.getItemStyle(["color", "opacity"]);
                _.fill = t.get("backgroundColor");
                var w = new aM({
                    shape: {
                        x: g.x - x[3],
                        y: g.y - x[0],
                        width: g.width + x[1] + x[3],
                        height: g.height + x[0] + x[2],
                        r: t.get("borderRadius")
                    },
                    style: _,
                    silent: !0
                });
                Un(w),
                n.add(w)
            }
        }
    }),
    XM.registerSubTypeDefaulter("dataZoom",
    function() {
        return "slider"
    });
    var kN = ["cartesian2d", "polar", "singleAxis"],
    PN = function(t, e) {
        var i = f(t = t.slice(), aa),
        n = f(e = (e || []).slice(), aa);
        return function(o, a) {
            d(t,
            function(t, r) {
                for (var s = {
                    name: t,
                    capital: i[r]
                },
                l = 0; l < e.length; l++) s[e[l]] = t + n[l];
                o.call(a, s)
            })
        }
    } (["x", "y", "z", "radius", "angle", "single"], ["axisIndex", "axis", "index", "id"]),
    NN = d,
    ON = Bo,
    zN = function(t, e, i, n) {
        this._dimName = t,
        this._axisIndex = e,
        this._valueWindow,
        this._percentWindow,
        this._dataExtent,
        this._minMaxSpan,
        this.ecModel = n,
        this._dataZoomModel = i
    };
    zN.prototype = {
        constructor: zN,
        hostedBy: function(t) {
            return this._dataZoomModel === t
        },
        getDataValueWindow: function() {
            return this._valueWindow.slice()
        },
        getDataPercentWindow: function() {
            return this._percentWindow.slice()
        },
        getTargetSeriesModels: function() {
            var t = [],
            e = this.ecModel;
            return e.eachSeries(function(i) {
                if (My(i.get("coordinateSystem"))) {
                    var n = this._dimName,
                    o = e.queryComponents({
                        mainType: n + "Axis",
                        index: i.get(n + "AxisIndex"),
                        id: i.get(n + "AxisId")
                    })[0];
                    this._axisIndex === (o && o.componentIndex) && t.push(i)
                }
            },
            this),
            t
        },
        getAxisModel: function() {
            return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex)
        },
        getOtherAxisModel: function() {
            var t, e, i = this._dimName,
            n = this.ecModel,
            o = this.getAxisModel();
            "x" === i || "y" === i ? (e = "gridIndex", t = "x" === i ? "y": "x") : (e = "polarIndex", t = "angle" === i ? "radius": "angle");
            var a;
            return n.eachComponent(t + "Axis",
            function(t) { (t.get(e) || 0) === (o.get(e) || 0) && (a = t)
            }),
            a
        },
        getMinMaxSpan: function() {
            return i(this._minMaxSpan)
        },
        calculateDataWindow: function(t) {
            var e = this._dataExtent,
            i = this.getAxisModel().axis.scale,
            n = this._dataZoomModel.getRangePropMode(),
            o = [0, 100],
            a = [t.start, t.end],
            r = [];
            return NN(["startValue", "endValue"],
            function(e) {
                r.push(null != t[e] ? i.parse(t[e]) : null)
            }),
            NN([0, 1],
            function(t) {
                var s = r[t],
                l = a[t];
                "percent" === n[t] ? (null == l && (l = o[t]), s = i.parse(zo(l, o, e, !0))) : l = zo(s, e, o, !0),
                r[t] = s,
                a[t] = l
            }),
            {
                valueWindow: ON(r),
                percentWindow: ON(a)
            }
        },
        reset: function(t) {
            if (t === this._dataZoomModel) {
                var e = this.getTargetSeriesModels();
                this._dataExtent = Ty(this, this._dimName, e);
                var i = this.calculateDataWindow(t.option);
                this._valueWindow = i.valueWindow,
                this._percentWindow = i.percentWindow,
                Cy(this),
                Dy(this)
            }
        },
        restore: function(t) {
            t === this._dataZoomModel && (this._valueWindow = this._percentWindow = null, Dy(this, !0))
        },
        filterData: function(t, e) {
            function i(t) {
                return t >= r[0] && t <= r[1]
            }
            if (t === this._dataZoomModel) {
                var n = this._dimName,
                o = this.getTargetSeriesModels(),
                a = t.get("filterMode"),
                r = this._valueWindow;
                "none" !== a && NN(o,
                function(t) {
                    var e = t.getData(),
                    o = e.mapDimension(n, !0);
                    o.length && ("weakFilter" === a ? e.filterSelf(function(t) {
                        for (var i, n, a, s = 0; s < o.length; s++) {
                            var l = e.get(o[s], t),
                            u = !isNaN(l),
                            h = l < r[0],
                            c = l > r[1];
                            if (u && !h && !c) return ! 0;
                            u && (a = !0),
                            h && (i = !0),
                            c && (n = !0)
                        }
                        return a && i && n
                    }) : NN(o,
                    function(n) {
                        if ("empty" === a) t.setData(e.map(n,
                        function(t) {
                            return i(t) ? t: NaN
                        }));
                        else {
                            var o = {};
                            o[n] = r,
                            e.selectRange(o)
                        }
                    }), NN(o,
                    function(t) {
                        e.setApproximateExtent(r, t)
                    }))
                })
            }
        }
    };
    var EN = d,
    RN = PN,
    BN = Bs({
        type: "dataZoom",
        dependencies: ["xAxis", "yAxis", "zAxis", "radiusAxis", "angleAxis", "singleAxis", "series"],
        defaultOption: {
            zlevel: 0,
            z: 4,
            orient: null,
            xAxisIndex: null,
            yAxisIndex: null,
            filterMode: "filter",
            throttle: null,
            start: 0,
            end: 100,
            startValue: null,
            endValue: null,
            minSpan: null,
            maxSpan: null,
            minValueSpan: null,
            maxValueSpan: null,
            rangeMode: null
        },
        init: function(t, e, i) {
            this._dataIntervalByAxis = {},
            this._dataInfo = {},
            this._axisProxies = {},
            this.textStyleModel,
            this._autoThrottle = !0,
            this._rangePropMode = ["percent", "percent"];
            var n = Ly(t);
            this.mergeDefaultAndTheme(t, i),
            this.doInit(n)
        },
        mergeOption: function(t) {
            var e = Ly(t);
            n(this.option, t, !0),
            this.doInit(e)
        },
        doInit: function(t) {
            var e = this.option;
            R_.canvasSupported || (e.realtime = !1),
            this._setDefaultThrottle(t),
            ky(this, t),
            EN([["start", "startValue"], ["end", "endValue"]],
            function(t, i) {
                "value" === this._rangePropMode[i] && (e[t[0]] = null)
            },
            this),
            this.textStyleModel = this.getModel("textStyle"),
            this._resetTarget(),
            this._giveAxisProxies()
        },
        _giveAxisProxies: function() {
            var t = this._axisProxies;
            this.eachTargetAxis(function(e, i, n, o) {
                var a = this.dependentModels[e.axis][i],
                r = a.__dzAxisProxy || (a.__dzAxisProxy = new zN(e.name, i, this, o));
                t[e.name + "_" + i] = r
            },
            this)
        },
        _resetTarget: function() {
            var t = this.option,
            e = this._judgeAutoMode();
            RN(function(e) {
                var i = e.axisIndex;
                t[i] = Di(t[i])
            },
            this),
            "axisIndex" === e ? this._autoSetAxisIndex() : "orient" === e && this._autoSetOrient()
        },
        _judgeAutoMode: function() {
            var t = this.option,
            e = !1;
            RN(function(i) {
                null != t[i.axisIndex] && (e = !0)
            },
            this);
            var i = t.orient;
            return null == i && e ? "orient": e ? void 0 : (null == i && (t.orient = "horizontal"), "axisIndex")
        },
        _autoSetAxisIndex: function() {
            var t = !0,
            e = this.get("orient", !0),
            i = this.option,
            n = this.dependentModels;
            if (t) {
                var o = "vertical" === e ? "y": "x";
                n[o + "Axis"].length ? (i[o + "AxisIndex"] = [0], t = !1) : EN(n.singleAxis,
                function(n) {
                    t && n.get("orient", !0) === e && (i.singleAxisIndex = [n.componentIndex], t = !1)
                })
            }
            t && RN(function(e) {
                if (t) {
                    var n = [],
                    o = this.dependentModels[e.axis];
                    if (o.length && !n.length) for (var a = 0,
                    r = o.length; a < r; a++)"category" === o[a].get("type") && n.push(a);
                    i[e.axisIndex] = n,
                    n.length && (t = !1)
                }
            },
            this),
            t && this.ecModel.eachSeries(function(t) {
                this._isSeriesHasAllAxesTypeOf(t, "value") && RN(function(e) {
                    var n = i[e.axisIndex],
                    o = t.get(e.axisIndex),
                    a = t.get(e.axisId);
                    l(n, o = t.ecModel.queryComponents({
                        mainType: e.axis,
                        index: o,
                        id: a
                    })[0].componentIndex) < 0 && n.push(o)
                })
            },
            this)
        },
        _autoSetOrient: function() {
            var t;
            this.eachTargetAxis(function(e) { ! t && (t = e.name)
            },
            this),
            this.option.orient = "y" === t ? "vertical": "horizontal"
        },
        _isSeriesHasAllAxesTypeOf: function(t, e) {
            var i = !0;
            return RN(function(n) {
                var o = t.get(n.axisIndex),
                a = this.dependentModels[n.axis][o];
                a && a.get("type") === e || (i = !1)
            },
            this),
            i
        },
        _setDefaultThrottle: function(t) {
            if (t.hasOwnProperty("throttle") && (this._autoThrottle = !1), this._autoThrottle) {
                var e = this.ecModel.option;
                this.option.throttle = e.animation && e.animationDurationUpdate > 0 ? 100 : 20
            }
        },
        getFirstTargetAxisModel: function() {
            var t;
            return RN(function(e) {
                if (null == t) {
                    var i = this.get(e.axisIndex);
                    i.length && (t = this.dependentModels[e.axis][i[0]])
                }
            },
            this),
            t
        },
        eachTargetAxis: function(t, e) {
            var i = this.ecModel;
            RN(function(n) {
                EN(this.get(n.axisIndex),
                function(o) {
                    t.call(e, n, o, this, i)
                },
                this)
            },
            this)
        },
        getAxisProxy: function(t, e) {
            return this._axisProxies[t + "_" + e]
        },
        getAxisModel: function(t, e) {
            var i = this.getAxisProxy(t, e);
            return i && i.getAxisModel()
        },
        setRawRange: function(t, e) {
            var i = this.option;
            EN([["start", "startValue"], ["end", "endValue"]],
            function(e) {
                null == t[e[0]] && null == t[e[1]] || (i[e[0]] = t[e[0]], i[e[1]] = t[e[1]])
            },
            this),
            !e && ky(this, t)
        },
        getPercentRange: function() {
            var t = this.findRepresentativeAxisProxy();
            if (t) return t.getDataPercentWindow()
        },
        getValueRange: function(t, e) {
            if (null != t || null != e) return this.getAxisProxy(t, e).getDataValueWindow();
            var i = this.findRepresentativeAxisProxy();
            return i ? i.getDataValueWindow() : void 0
        },
        findRepresentativeAxisProxy: function(t) {
            if (t) return t.__dzAxisProxy;
            var e = this._axisProxies;
            for (var i in e) if (e.hasOwnProperty(i) && e[i].hostedBy(this)) return e[i];
            for (var i in e) if (e.hasOwnProperty(i) && !e[i].hostedBy(this)) return e[i]
        },
        getRangePropMode: function() {
            return this._rangePropMode.slice()
        }
    }),
    VN = zI.extend({
        type: "dataZoom",
        render: function(t, e, i, n) {
            this.dataZoomModel = t,
            this.ecModel = e,
            this.api = i
        },
        getTargetCoordInfo: function() {
            function t(t, e, i, n) {
                for (var o, a = 0; a < i.length; a++) if (i[a].model === t) {
                    o = i[a];
                    break
                }
                o || i.push(o = {
                    model: t,
                    axisModels: [],
                    coordIndex: n
                }),
                o.axisModels.push(e)
            }
            var e = this.dataZoomModel,
            i = this.ecModel,
            n = {};
            return e.eachTargetAxis(function(e, o) {
                var a = i.getComponent(e.axis, o);
                if (a) {
                    var r = a.getCoordSysModel();
                    r && t(r, a, n[r.mainType] || (n[r.mainType] = []), r.componentIndex)
                }
            },
            this),
            n
        }
    }),
    FN = (BN.extend({
        type: "dataZoom.slider",
        layoutMode: "box",
        defaultOption: {
            show: !0,
            right: "ph",
            top: "ph",
            width: "ph",
            height: "ph",
            left: null,
            bottom: null,
            backgroundColor: "rgba(47,69,84,0)",
            dataBackground: {
                lineStyle: {
                    color: "#2f4554",
                    width: .5,
                    opacity: .3
                },
                areaStyle: {
                    color: "rgba(47,69,84,0.3)",
                    opacity: .3
                }
            },
            borderColor: "#ddd",
            fillerColor: "rgba(167,183,204,0.4)",
            handleIcon: "M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",
            handleSize: "100%",
            handleStyle: {
                color: "#a7b7cc"
            },
            labelPrecision: null,
            labelFormatter: null,
            showDetail: !0,
            showDataShadow: "auto",
            realtime: !0,
            zoomLock: !1,
            textStyle: {
                color: "#333"
            }
        }
    }), aM),
    GN = zo,
    WN = Bo,
    HN = m,
    ZN = d,
    jN = "horizontal",
    YN = 5,
    UN = ["line", "bar", "candlestick", "scatter"],
    XN = VN.extend({
        type: "dataZoom.slider",
        init: function(t, e) {
            this._displayables = {},
            this._orient,
            this._range,
            this._handleEnds,
            this._size,
            this._handleWidth,
            this._handleHeight,
            this._location,
            this._dragging,
            this._dataShadowInfo,
            this.api = e
        },
        render: function(t, e, i, n) {
            XN.superApply(this, "render", arguments),
            Lr(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"), "fixRate"),
            this._orient = t.get("orient"),
            !1 !== this.dataZoomModel.get("show") ? (n && "dataZoom" === n.type && n.from === this.uid || this._buildView(), this._updateView()) : this.group.removeAll()
        },
        remove: function() {
            XN.superApply(this, "remove", arguments),
            kr(this, "_dispatchZoomAction")
        },
        dispose: function() {
            XN.superApply(this, "dispose", arguments),
            kr(this, "_dispatchZoomAction")
        },
        _buildView: function() {
            var t = this.group;
            t.removeAll(),
            this._resetLocation(),
            this._resetInterval();
            var e = this._displayables.barGroup = new Zw;
            this._renderBackground(),
            this._renderHandle(),
            this._renderDataShadow(),
            t.add(e),
            this._positionGroup()
        },
        _resetLocation: function() {
            var t = this.dataZoomModel,
            e = this.api,
            i = this._findCoordRect(),
            n = {
                width: e.getWidth(),
                height: e.getHeight()
            },
            o = this._orient === jN ? {
                right: n.width - i.x - i.width,
                top: n.height - 30 - 7,
                width: i.width,
                height: 30
            }: {
                right: 7,
                top: i.y,
                width: 30,
                height: i.height
            },
            a = da(t.option);
            d(["right", "top", "width", "height"],
            function(t) {
                "ph" === a[t] && (a[t] = o[t])
            });
            var r = la(a, n, t.padding);
            this._location = {
                x: r.x,
                y: r.y
            },
            this._size = [r.width, r.height],
            "vertical" === this._orient && this._size.reverse()
        },
        _positionGroup: function() {
            var t = this.group,
            e = this._location,
            i = this._orient,
            n = this.dataZoomModel.getFirstTargetAxisModel(),
            o = n && n.get("inverse"),
            a = this._displayables.barGroup,
            r = (this._dataShadowInfo || {}).otherAxisInverse;
            a.attr(i !== jN || o ? i === jN && o ? {
                scale: r ? [ - 1, 1] : [ - 1, -1]
            }: "vertical" !== i || o ? {
                scale: r ? [ - 1, -1] : [ - 1, 1],
                rotation: Math.PI / 2
            }: {
                scale: r ? [1, -1] : [1, 1],
                rotation: Math.PI / 2
            }: {
                scale: r ? [1, 1] : [1, -1]
            });
            var s = t.getBoundingRect([a]);
            t.attr("position", [e.x - s.x, e.y - s.y])
        },
        _getViewExtent: function() {
            return [0, this._size[0]]
        },
        _renderBackground: function() {
            var t = this.dataZoomModel,
            e = this._size,
            i = this._displayables.barGroup;
            i.add(new FN({
                silent: !0,
                shape: {
                    x: 0,
                    y: 0,
                    width: e[0],
                    height: e[1]
                },
                style: {
                    fill: t.get("backgroundColor")
                },
                z2: -40
            })),
            i.add(new FN({
                shape: {
                    x: 0,
                    y: 0,
                    width: e[0],
                    height: e[1]
                },
                style: {
                    fill: "transparent"
                },
                z2: 0,
                onclick: m(this._onClickPanelClick, this)
            }))
        },
        _renderDataShadow: function() {
            var t = this._dataShadowInfo = this._prepareDataShadowInfo();
            if (t) {
                var e = this._size,
                i = t.series,
                n = i.getRawData(),
                o = i.getShadowDim ? i.getShadowDim() : t.otherDim;
                if (null != o) {
                    var a = n.getDataExtent(o),
                    s = .3 * (a[1] - a[0]);
                    a = [a[0] - s, a[1] + s];
                    var l, u = [0, e[1]],
                    h = [0, e[0]],
                    c = [[e[0], 0], [0, 0]],
                    d = [],
                    f = h[1] / (n.count() - 1),
                    p = 0,
                    g = Math.round(n.count() / e[0]);
                    n.each([o],
                    function(t, e) {
                        if (g > 0 && e % g) p += f;
                        else {
                            var i = null == t || isNaN(t) || "" === t,
                            n = i ? 0 : GN(t, a, u, !0);
                            i && !l && e ? (c.push([c[c.length - 1][0], 0]), d.push([d[d.length - 1][0], 0])) : !i && l && (c.push([p, 0]), d.push([p, 0])),
                            c.push([p, n]),
                            d.push([p, n]),
                            p += f,
                            l = i
                        }
                    });
                    var m = this.dataZoomModel;
                    this._displayables.barGroup.add(new nM({
                        shape: {
                            points: c
                        },
                        style: r({
                            fill: m.get("dataBackgroundColor")
                        },
                        m.getModel("dataBackground.areaStyle").getAreaStyle()),
                        silent: !0,
                        z2: -20
                    })),
                    this._displayables.barGroup.add(new oM({
                        shape: {
                            points: d
                        },
                        style: m.getModel("dataBackground.lineStyle").getLineStyle(),
                        silent: !0,
                        z2: -19
                    }))
                }
            }
        },
        _prepareDataShadowInfo: function() {
            var t = this.dataZoomModel,
            e = t.get("showDataShadow");
            if (!1 !== e) {
                var i, n = this.ecModel;
                return t.eachTargetAxis(function(o, a) {
                    d(t.getAxisProxy(o.name, a).getTargetSeriesModels(),
                    function(t) {
                        if (! (i || !0 !== e && l(UN, t.get("type")) < 0)) {
                            var r, s = n.getComponent(o.axis, a).axis,
                            u = Py(o.name),
                            h = t.coordinateSystem;
                            null != u && h.getOtherAxis && (r = h.getOtherAxis(s).inverse),
                            u = t.getData().mapDimension(u),
                            i = {
                                thisAxis: s,
                                series: t,
                                thisDim: o.name,
                                otherDim: u,
                                otherAxisInverse: r
                            }
                        }
                    },
                    this)
                },
                this),
                i
            }
        },
        _renderHandle: function() {
            var t = this._displayables,
            e = t.handles = [],
            i = t.handleLabels = [],
            n = this._displayables.barGroup,
            o = this._size,
            a = this.dataZoomModel;
            n.add(t.filler = new FN({
                draggable: !0,
                cursor: Ny(this._orient),
                drift: HN(this._onDragMove, this, "all"),
                onmousemove: function(t) {
                    lw(t.event)
                },
                ondragstart: HN(this._showDataInfo, this, !0),
                ondragend: HN(this._onDragEnd, this),
                onmouseover: HN(this._showDataInfo, this, !0),
                onmouseout: HN(this._showDataInfo, this, !1),
                style: {
                    fill: a.get("fillerColor"),
                    textPosition: "inside"
                }
            })),
            n.add(new FN(Un({
                silent: !0,
                shape: {
                    x: 0,
                    y: 0,
                    width: o[0],
                    height: o[1]
                },
                style: {
                    stroke: a.get("dataBackgroundColor") || a.get("borderColor"),
                    lineWidth: 1,
                    fill: "rgba(0,0,0,0)"
                }
            }))),
            ZN([0, 1],
            function(t) {
                var o = Co(a.get("handleIcon"), {
                    cursor: Ny(this._orient),
                    draggable: !0,
                    drift: HN(this._onDragMove, this, t),
                    onmousemove: function(t) {
                        lw(t.event)
                    },
                    ondragend: HN(this._onDragEnd, this),
                    onmouseover: HN(this._showDataInfo, this, !0),
                    onmouseout: HN(this._showDataInfo, this, !1)
                },
                {
                    x: -1,
                    y: 0,
                    width: 2,
                    height: 2
                }),
                r = o.getBoundingRect();
                this._handleHeight = Eo(a.get("handleSize"), this._size[1]),
                this._handleWidth = r.width / r.height * this._handleHeight,
                o.setStyle(a.getModel("handleStyle").getItemStyle());
                var s = a.get("handleColor");
                null != s && (o.style.fill = s),
                n.add(e[t] = o);
                var l = a.textStyleModel;
                this.group.add(i[t] = new qS({
                    silent: !0,
                    invisible: !0,
                    style: {
                        x: 0,
                        y: 0,
                        text: "",
                        textVerticalAlign: "middle",
                        textAlign: "center",
                        textFill: l.getTextColor(),
                        textFont: l.getFont()
                    },
                    z2: 10
                }))
            },
            this)
        },
        _resetInterval: function() {
            var t = this._range = this.dataZoomModel.getPercentRange(),
            e = this._getViewExtent();
            this._handleEnds = [GN(t[0], [0, 100], e, !0), GN(t[1], [0, 100], e, !0)]
        },
        _updateInterval: function(t, e) {
            var i = this.dataZoomModel,
            n = this._handleEnds,
            o = this._getViewExtent(),
            a = i.findRepresentativeAxisProxy().getMinMaxSpan(),
            r = [0, 100];
            zL(e, n, o, i.get("zoomLock") ? "all": t, null != a.minSpan ? GN(a.minSpan, r, o, !0) : null, null != a.maxSpan ? GN(a.maxSpan, r, o, !0) : null);
            var s = this._range,
            l = this._range = WN([GN(n[0], o, r, !0), GN(n[1], o, r, !0)]);
            return ! s || s[0] !== l[0] || s[1] !== l[1]
        },
        _updateView: function(t) {
            var e = this._displayables,
            i = this._handleEnds,
            n = WN(i.slice()),
            o = this._size;
            ZN([0, 1],
            function(t) {
                var n = e.handles[t],
                a = this._handleHeight;
                n.attr({
                    scale: [a / 2, a / 2],
                    position: [i[t], o[1] / 2 - a / 2]
                })
            },
            this),
            e.filler.setShape({
                x: n[0],
                y: 0,
                width: n[1] - n[0],
                height: o[1]
            }),
            this._updateDataInfo(t)
        },
        _updateDataInfo: function(t) {
            function e(t) {
                var e = Mo(n.handles[t].parent, this.group),
                i = To(0 === t ? "right": "left", e),
                s = this._handleWidth / 2 + YN,
                l = Io([c[t] + (0 === t ? -s: s), this._size[1] / 2], e);
                o[t].setStyle({
                    x: l[0],
                    y: l[1],
                    textVerticalAlign: a === jN ? "middle": i,
                    textAlign: a === jN ? i: "center",
                    text: r[t]
                })
            }
            var i = this.dataZoomModel,
            n = this._displayables,
            o = n.handleLabels,
            a = this._orient,
            r = ["", ""];
            if (i.get("showDetail")) {
                var s = i.findRepresentativeAxisProxy();
                if (s) {
                    var l = s.getAxisModel().axis,
                    u = this._range,
                    h = t ? s.calculateDataWindow({
                        start: u[0],
                        end: u[1]
                    }).valueWindow: s.getDataValueWindow();
                    r = [this._formatLabel(h[0], l), this._formatLabel(h[1], l)]
                }
            }
            var c = WN(this._handleEnds.slice());
            e.call(this, 0),
            e.call(this, 1)
        },
        _formatLabel: function(t, e) {
            var i = this.dataZoomModel,
            n = i.get("labelFormatter"),
            o = i.get("labelPrecision");
            null != o && "auto" !== o || (o = e.getPixelPrecision());
            var a = null == t || isNaN(t) ? "": "category" === e.type || "time" === e.type ? e.scale.getLabel(Math.round(t)) : t.toFixed(Math.min(o, 20));
            return x(n) ? n(t, a) : _(n) ? n.replace("{value}", a) : a
        },
        _showDataInfo: function(t) {
            t = this._dragging || t;
            var e = this._displayables.handleLabels;
            e[0].attr("invisible", !t),
            e[1].attr("invisible", !t)
        },
        _onDragMove: function(t, e, i) {
            this._dragging = !0;
            var n = Io([e, i], this._displayables.barGroup.getLocalTransform(), !0),
            o = this._updateInterval(t, n[0]),
            a = this.dataZoomModel.get("realtime");
            this._updateView(!a),
            o && a && this._dispatchZoomAction()
        },
        _onDragEnd: function() {
            this._dragging = !1,
            this._showDataInfo(!1),
            !this.dataZoomModel.get("realtime") && this._dispatchZoomAction()
        },
        _onClickPanelClick: function(t) {
            var e = this._size,
            i = this._displayables.barGroup.transformCoordToLocal(t.offsetX, t.offsetY);
            if (! (i[0] < 0 || i[0] > e[0] || i[1] < 0 || i[1] > e[1])) {
                var n = this._handleEnds,
                o = (n[0] + n[1]) / 2,
                a = this._updateInterval("all", i[0] - o);
                this._updateView(),
                a && this._dispatchZoomAction()
            }
        },
        _dispatchZoomAction: function() {
            var t = this._range;
            this.api.dispatchAction({
                type: "dataZoom",
                from: this.uid,
                dataZoomId: this.dataZoomModel.id,
                start: t[0],
                end: t[1]
            })
        },
        _findCoordRect: function() {
            var t;
            if (ZN(this.getTargetCoordInfo(),
            function(e) {
                if (!t && e.length) {
                    var i = e[0].model.coordinateSystem;
                    t = i.getRect && i.getRect()
                }
            }), !t) {
                var e = this.api.getWidth(),
                i = this.api.getHeight();
                t = {
                    x: .2 * e,
                    y: .2 * i,
                    width: .6 * e,
                    height: .6 * i
                }
            }
            return t
        }
    });
    BN.extend({
        type: "dataZoom.inside",
        defaultOption: {
            disabled: !1,
            zoomLock: !1,
            zoomOnMouseWheel: !0,
            moveOnMouseMove: !0,
            moveOnMouseWheel: !1,
            preventDefaultMouseMove: !0
        }
    });
    var qN = "\0_ec_dataZoom_roams",
    KN = m,
    QN = VN.extend({
        type: "dataZoom.inside",
        init: function(t, e) {
            this._range
        },
        render: function(t, e, i, n) {
            QN.superApply(this, "render", arguments),
            this._range = t.getPercentRange(),
            d(this.getTargetCoordInfo(),
            function(e, n) {
                var o = f(e,
                function(t) {
                    return Ey(t.model)
                });
                d(e,
                function(e) {
                    var a = e.model,
                    r = {};
                    d(["pan", "zoom", "scrollMove"],
                    function(t) {
                        r[t] = KN(JN[t], this, e, n)
                    },
                    this),
                    Oy(i, {
                        coordId: Ey(a),
                        allCoordIds: o,
                        containsPoint: function(t, e, i) {
                            return a.coordinateSystem.containPoint([e, i])
                        },
                        dataZoomId: t.id,
                        dataZoomModel: t,
                        getRange: r
                    })
                },
                this)
            },
            this)
        },
        dispose: function() {
            zy(this.api, this.dataZoomModel.id),
            QN.superApply(this, "dispose", arguments),
            this._range = null
        }
    }),
    JN = {
        zoom: function(t, e, i, n) {
            var o = this._range,
            a = o.slice(),
            r = t.axisModels[0];
            if (r) {
                var s = $N[e](null, [n.originX, n.originY], r, i, t),
                l = (s.signal > 0 ? s.pixelStart + s.pixelLength - s.pixel: s.pixel - s.pixelStart) / s.pixelLength * (a[1] - a[0]) + a[0],
                u = Math.max(1 / n.scale, 0);
                a[0] = (a[0] - l) * u + l,
                a[1] = (a[1] - l) * u + l;
                var h = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
                return zL(0, a, [0, 100], 0, h.minSpan, h.maxSpan),
                this._range = a,
                o[0] !== a[0] || o[1] !== a[1] ? a: void 0
            }
        },
        pan: Wy(function(t, e, i, n, o, a) {
            var r = $N[n]([a.oldX, a.oldY], [a.newX, a.newY], e, o, i);
            return r.signal * (t[1] - t[0]) * r.pixel / r.pixelLength
        }),
        scrollMove: Wy(function(t, e, i, n, o, a) {
            return $N[n]([0, 0], [a.scrollDelta, a.scrollDelta], e, o, i).signal * (t[1] - t[0]) * a.scrollDelta
        })
    },
    $N = {
        grid: function(t, e, i, n, o) {
            var a = i.axis,
            r = {},
            s = o.model.coordinateSystem.getRect();
            return t = t || [0, 0],
            "x" === a.dim ? (r.pixel = e[0] - t[0], r.pixelLength = s.width, r.pixelStart = s.x, r.signal = a.inverse ? 1 : -1) : (r.pixel = e[1] - t[1], r.pixelLength = s.height, r.pixelStart = s.y, r.signal = a.inverse ? -1 : 1),
            r
        },
        polar: function(t, e, i, n, o) {
            var a = i.axis,
            r = {},
            s = o.model.coordinateSystem,
            l = s.getRadiusAxis().getExtent(),
            u = s.getAngleAxis().getExtent();
            return t = t ? s.pointToCoord(t) : [0, 0],
            e = s.pointToCoord(e),
            "radiusAxis" === i.mainType ? (r.pixel = e[0] - t[0], r.pixelLength = l[1] - l[0], r.pixelStart = l[0], r.signal = a.inverse ? 1 : -1) : (r.pixel = e[1] - t[1], r.pixelLength = u[1] - u[0], r.pixelStart = u[0], r.signal = a.inverse ? -1 : 1),
            r
        },
        singleAxis: function(t, e, i, n, o) {
            var a = i.axis,
            r = o.model.coordinateSystem.getRect(),
            s = {};
            return t = t || [0, 0],
            "horizontal" === a.orient ? (s.pixel = e[0] - t[0], s.pixelLength = r.width, s.pixelStart = r.x, s.signal = a.inverse ? 1 : -1) : (s.pixel = e[1] - t[1], s.pixelLength = r.height, s.pixelStart = r.y, s.signal = a.inverse ? -1 : 1),
            s
        }
    };
    ks({
        getTargetSeries: function(t) {
            var e = E();
            return t.eachComponent("dataZoom",
            function(t) {
                t.eachTargetAxis(function(t, i, n) {
                    d(n.getAxisProxy(t.name, i).getTargetSeriesModels(),
                    function(t) {
                        e.set(t.uid, t)
                    })
                })
            }),
            e
        },
        modifyOutputEnd: !0,
        overallReset: function(t, e) {
            t.eachComponent("dataZoom",
            function(t) {
                t.eachTargetAxis(function(t, i, n) {
                    n.getAxisProxy(t.name, i).reset(n, e)
                }),
                t.eachTargetAxis(function(t, i, n) {
                    n.getAxisProxy(t.name, i).filterData(n, e)
                })
            }),
            t.eachComponent("dataZoom",
            function(t) {
                var e = t.findRepresentativeAxisProxy(),
                i = e.getDataPercentWindow(),
                n = e.getDataValueWindow();
                t.setRawRange({
                    start: i[0],
                    end: i[1],
                    startValue: n[0],
                    endValue: n[1]
                },
                !0)
            })
        }
    }),
    Ps("dataZoom",
    function(t, e) {
        var i = Iy(m(e.eachComponent, e, "dataZoom"), PN,
        function(t, e) {
            return t.get(e.axisIndex)
        }),
        n = [];
        e.eachComponent({
            mainType: "dataZoom",
            query: t
        },
        function(t, e) {
            n.push.apply(n, i(t).nodes)
        }),
        d(n,
        function(e, i) {
            e.setRawRange({
                start: t.start,
                end: t.end,
                startValue: t.startValue,
                endValue: t.endValue
            })
        })
    });
    var tO = d,
    eO = function(t) {
        var e = t && t.visualMap;
        y(e) || (e = e ? [e] : []),
        tO(e,
        function(t) {
            if (t) {
                Hy(t, "splitList") && !Hy(t, "pieces") && (t.pieces = t.splitList, delete t.splitList);
                var e = t.pieces;
                e && y(e) && tO(e,
                function(t) {
                    w(t) && (Hy(t, "start") && !Hy(t, "min") && (t.min = t.start), Hy(t, "end") && !Hy(t, "max") && (t.max = t.end))
                })
            }
        })
    };
    XM.registerSubTypeDefaulter("visualMap",
    function(t) {
        return t.categories || (t.pieces ? t.pieces.length > 0 : t.splitNumber > 0) && !t.calculable ? "piecewise": "continuous"
    });
    var iO = IT.VISUAL.COMPONENT;
    zs(iO, {
        createOnAllSeries: !0,
        reset: function(t, e) {
            var i = [];
            return e.eachComponent("visualMap",
            function(e) {
                var n = t.pipelineContext; ! e.isTargetSeries(t) || n && n.large || i.push(qv(e.stateList, e.targetVisuals, m(e.getValueState, e), e.getDataDimension(t.getData())))
            }),
            i
        }
    }),
    zs(iO, {
        createOnAllSeries: !0,
        reset: function(t, e) {
            var i = t.getData(),
            n = [];
            e.eachComponent("visualMap",
            function(e) {
                if (e.isTargetSeries(t)) {
                    var o = e.getVisualMeta(m(Zy, null, t, e)) || {
                        stops: [],
                        outerColors: []
                    },
                    a = e.getDataDimension(i),
                    r = i.getDimensionInfo(a);
                    null != r && (o.dimension = r.index, n.push(o))
                }
            }),
            t.getData().setVisual("visualMeta", n)
        }
    });
    var nO = {
        get: function(t, e, n) {
            var o = i((oO[t] || {})[e]);
            return n && y(o) ? o[o.length - 1] : o
        }
    },
    oO = {
        color: {
            active: ["#006edd", "#e0ffff"],
            inactive: ["rgba(0,0,0,0)"]
        },
        colorHue: {
            active: [0, 360],
            inactive: [0, 0]
        },
        colorSaturation: {
            active: [.3, 1],
            inactive: [0, 0]
        },
        colorLightness: {
            active: [.9, .5],
            inactive: [0, 0]
        },
        colorAlpha: {
            active: [.3, 1],
            inactive: [0, 0]
        },
        opacity: {
            active: [.3, 1],
            inactive: [0, 0]
        },
        symbol: {
            active: ["circle", "roundRect", "diamond"],
            inactive: ["none"]
        },
        symbolSize: {
            active: [10, 50],
            inactive: [0, 0]
        }
    },
    aO = UC.mapVisual,
    rO = UC.eachVisual,
    sO = y,
    lO = d,
    uO = Bo,
    hO = zo,
    cO = B,
    dO = Bs({
        type: "visualMap",
        dependencies: ["series"],
        stateList: ["inRange", "outOfRange"],
        replacableOptionKeys: ["inRange", "outOfRange", "target", "controller", "color"],
        dataBound: [ - 1 / 0, 1 / 0],
        layoutMode: {
            type: "box",
            ignoreSize: !0
        },
        defaultOption: {
            show: !0,
            zlevel: 0,
            z: 4,
            seriesIndex: "all",
            min: 0,
            max: 200,
            dimension: null,
            inRange: null,
            outOfRange: null,
            left: 0,
            right: null,
            top: null,
            bottom: 0,
            itemWidth: null,
            itemHeight: null,
            inverse: !1,
            orient: "vertical",
            backgroundColor: "rgba(0,0,0,0)",
            borderColor: "#ccc",
            contentColor: "#5793f3",
            inactiveColor: "#aaa",
            borderWidth: 0,
            padding: 5,
            textGap: 10,
            precision: 0,
            color: null,
            formatter: null,
            text: null,
            textStyle: {
                color: "#333"
            }
        },
        init: function(t, e, i) {
            this._dataExtent,
            this.targetVisuals = {},
            this.controllerVisuals = {},
            this.textStyleModel,
            this.itemSize,
            this.mergeDefaultAndTheme(t, i)
        },
        optionUpdated: function(t, e) {
            var i = this.option;
            R_.canvasSupported || (i.realtime = !1),
            !e && Uv(i, t, this.replacableOptionKeys),
            this.textStyleModel = this.getModel("textStyle"),
            this.resetItemSize(),
            this.completeVisualOption()
        },
        resetVisual: function(t) {
            var e = this.stateList;
            t = m(t, this),
            this.controllerVisuals = Yv(this.option.controller, e, t),
            this.targetVisuals = Yv(this.option.target, e, t)
        },
        getTargetSeriesIndices: function() {
            var t = this.option.seriesIndex,
            e = [];
            return null == t || "all" === t ? this.ecModel.eachSeries(function(t, i) {
                e.push(i)
            }) : e = Di(t),
            e
        },
        eachTargetSeries: function(t, e) {
            d(this.getTargetSeriesIndices(),
            function(i) {
                t.call(e, this.ecModel.getSeriesByIndex(i))
            },
            this)
        },
        isTargetSeries: function(t) {
            var e = !1;
            return this.eachTargetSeries(function(i) {
                i === t && (e = !0)
            }),
            e
        },
        formatValueText: function(t, e, i) {
            function n(t) {
                return t === l[0] ? "min": t === l[1] ? "max": ( + t).toFixed(Math.min(s, 20))
            }
            var o, a, r = this.option,
            s = r.precision,
            l = this.dataBound,
            u = r.formatter;
            return i = i || ["<", ">"],
            y(t) && (t = t.slice(), o = !0),
            a = e ? t: o ? [n(t[0]), n(t[1])] : n(t),
            _(u) ? u.replace("{value}", o ? a[0] : a).replace("{value2}", o ? a[1] : a) : x(u) ? o ? u(t[0], t[1]) : u(t) : o ? t[0] === l[0] ? i[0] + " " + a[1] : t[1] === l[1] ? i[1] + " " + a[0] : a[0] + " - " + a[1] : a
        },
        resetExtent: function() {
            var t = this.option,
            e = uO([t.min, t.max]);
            this._dataExtent = e
        },
        getDataDimension: function(t) {
            var e = this.option.dimension,
            i = t.dimensions;
            if (null != e || i.length) {
                if (null != e) return t.getDimension(e);
                for (var n = t.dimensions,
                o = n.length - 1; o >= 0; o--) {
                    var a = n[o];
                    if (!t.getDimensionInfo(a).isCalculationCoord) return a
                }
            }
        },
        getExtent: function() {
            return this._dataExtent.slice()
        },
        completeVisualOption: function() {
            function t(t) {
                sO(o.color) && !t.inRange && (t.inRange = {
                    color: o.color.slice().reverse()
                }),
                t.inRange = t.inRange || {
                    color: e.get("gradientColor")
                },
                lO(this.stateList,
                function(e) {
                    var i = t[e];
                    if (_(i)) {
                        var n = nO.get(i, "active", l);
                        n ? (t[e] = {},
                        t[e][i] = n) : delete t[e]
                    }
                },
                this)
            }
            var e = this.ecModel,
            o = this.option,
            a = {
                inRange: o.inRange,
                outOfRange: o.outOfRange
            },
            r = o.target || (o.target = {}),
            s = o.controller || (o.controller = {});
            n(r, a),
            n(s, a);
            var l = this.isCategory();
            t.call(this, r),
            t.call(this, s),
            function(t, e, i) {
                var n = t[e],
                o = t[i];
                n && !o && (o = t[i] = {},
                lO(n,
                function(t, e) {
                    if (UC.isValidType(e)) {
                        var i = nO.get(e, "inactive", l);
                        null != i && (o[e] = i, "color" !== e || o.hasOwnProperty("opacity") || o.hasOwnProperty("colorAlpha") || (o.opacity = [0, 0]))
                    }
                }))
            }.call(this, r, "inRange", "outOfRange"),
            function(t) {
                var e = (t.inRange || {}).symbol || (t.outOfRange || {}).symbol,
                n = (t.inRange || {}).symbolSize || (t.outOfRange || {}).symbolSize,
                o = this.get("inactiveColor");
                lO(this.stateList,
                function(a) {
                    var r = this.itemSize,
                    s = t[a];
                    s || (s = t[a] = {
                        color: l ? o: [o]
                    }),
                    null == s.symbol && (s.symbol = e && i(e) || (l ? "roundRect": ["roundRect"])),
                    null == s.symbolSize && (s.symbolSize = n && i(n) || (l ? r[0] : [r[0], r[0]])),
                    s.symbol = aO(s.symbol,
                    function(t) {
                        return "none" === t || "square" === t ? "roundRect": t
                    });
                    var u = s.symbolSize;
                    if (null != u) {
                        var h = -1 / 0;
                        rO(u,
                        function(t) {
                            t > h && (h = t)
                        }),
                        s.symbolSize = aO(u,
                        function(t) {
                            return hO(t, [0, h], [0, r[0]], !0)
                        })
                    }
                },
                this)
            }.call(this, s)
        },
        resetItemSize: function() {
            this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))]
        },
        isCategory: function() {
            return !! this.option.categories
        },
        setSelected: cO,
        getValueState: cO,
        getVisualMeta: cO
    }),
    fO = [20, 140],
    pO = dO.extend({
        type: "visualMap.continuous",
        defaultOption: {
            align: "auto",
            calculable: !1,
            range: null,
            realtime: !0,
            itemHeight: null,
            itemWidth: null,
            hoverLink: !0,
            hoverLinkDataSize: null,
            hoverLinkOnHandle: null
        },
        optionUpdated: function(t, e) {
            pO.superApply(this, "optionUpdated", arguments),
            this.resetExtent(),
            this.resetVisual(function(t) {
                t.mappingMethod = "linear",
                t.dataExtent = this.getExtent()
            }),
            this._resetRange()
        },
        resetItemSize: function() {
            pO.superApply(this, "resetItemSize", arguments);
            var t = this.itemSize;
            "horizontal" === this._orient && t.reverse(),
            (null == t[0] || isNaN(t[0])) && (t[0] = fO[0]),
            (null == t[1] || isNaN(t[1])) && (t[1] = fO[1])
        },
        _resetRange: function() {
            var t = this.getExtent(),
            e = this.option.range; ! e || e.auto ? (t.auto = 1, this.option.range = t) : y(e) && (e[0] > e[1] && e.reverse(), e[0] = Math.max(e[0], t[0]), e[1] = Math.min(e[1], t[1]))
        },
        completeVisualOption: function() {
            dO.prototype.completeVisualOption.apply(this, arguments),
            d(this.stateList,
            function(t) {
                var e = this.option.controller[t].symbolSize;
                e && e[0] !== e[1] && (e[0] = 0)
            },
            this)
        },
        setSelected: function(t) {
            this.option.range = t.slice(),
            this._resetRange()
        },
        getSelected: function() {
            var t = this.getExtent(),
            e = Bo((this.get("range") || []).slice());
            return e[0] > t[1] && (e[0] = t[1]),
            e[1] > t[1] && (e[1] = t[1]),
            e[0] < t[0] && (e[0] = t[0]),
            e[1] < t[0] && (e[1] = t[0]),
            e
        },
        getValueState: function(t) {
            var e = this.option.range,
            i = this.getExtent();
            return (e[0] <= i[0] || e[0] <= t) && (e[1] >= i[1] || t <= e[1]) ? "inRange": "outOfRange"
        },
        findTargetDataIndices: function(t) {
            var e = [];
            return this.eachTargetSeries(function(i) {
                var n = [],
                o = i.getData();
                o.each(this.getDataDimension(o),
                function(e, i) {
                    t[0] <= e && e <= t[1] && n.push(i)
                },
                this),
                e.push({
                    seriesId: i.id,
                    dataIndex: n
                })
            },
            this),
            e
        },
        getVisualMeta: function(t) {
            function e(e, i) {
                o.push({
                    value: e,
                    color: t(e, i)
                })
            }
            for (var i = jy(0, 0, this.getExtent()), n = jy(0, 0, this.option.range.slice()), o = [], a = 0, r = 0, s = n.length, l = i.length; r < l && (!n.length || i[r] <= n[0]); r++) i[r] < n[a] && e(i[r], "outOfRange");
            for (u = 1; a < s; a++, u = 0) u && o.length && e(n[a], "outOfRange"),
            e(n[a], "inRange");
            for (var u = 1; r < l; r++)(!n.length || n[n.length - 1] < i[r]) && (u && (o.length && e(o[o.length - 1].value, "outOfRange"), u = 0), e(i[r], "outOfRange"));
            var h = o.length;
            return {
                stops: o,
                outerColors: [h ? o[0].color: "transparent", h ? o[h - 1].color: "transparent"]
            }
        }
    }),
    gO = Vs({
        type: "visualMap",
        autoPositionValues: {
            left: 1,
            right: 1,
            top: 1,
            bottom: 1
        },
        init: function(t, e) {
            this.ecModel = t,
            this.api = e,
            this.visualMapModel
        },
        render: function(t, e, i, n) {
            this.visualMapModel = t,
            !1 !== t.get("show") ? this.doRender.apply(this, arguments) : this.group.removeAll()
        },
        renderBackground: function(t) {
            var e = this.visualMapModel,
            i = OM(e.get("padding") || 0),
            n = t.getBoundingRect();
            t.add(new aM({
                z2: -1,
                silent: !0,
                shape: {
                    x: n.x - i[3],
                    y: n.y - i[0],
                    width: n.width + i[3] + i[1],
                    height: n.height + i[0] + i[2]
                },
                style: {
                    fill: e.get("backgroundColor"),
                    stroke: e.get("borderColor"),
                    lineWidth: e.get("borderWidth")
                }
            }))
        },
        getControllerVisual: function(t, e, i) {
            function n(t) {
                return s[t]
            }
            function o(t, e) {
                s[t] = e
            }
            var a = (i = i || {}).forceState,
            r = this.visualMapModel,
            s = {};
            if ("symbol" === e && (s.symbol = r.get("itemSymbol")), "color" === e) {
                var l = r.get("contentColor");
                s.color = l
            }
            var u = r.controllerVisuals[a || r.getValueState(t)];
            return d(UC.prepareVisualTypes(u),
            function(a) {
                var r = u[a];
                i.convertOpacityToAlpha && "opacity" === a && (a = "colorAlpha", r = u.__alphaForOpacity),
                UC.dependsOn(a, e) && r && r.applyVisual(t, n, o)
            }),
            s[e]
        },
        positionGroup: function(t) {
            var e = this.visualMapModel,
            i = this.api;
            ua(t, e.getBoxLayoutParams(), {
                width: i.getWidth(),
                height: i.getHeight()
            })
        },
        doRender: B
    }),
    mO = zo,
    vO = d,
    yO = Math.min,
    xO = Math.max,
    _O = 12,
    wO = 6,
    bO = gO.extend({
        type: "visualMap.continuous",
        init: function() {
            bO.superApply(this, "init", arguments),
            this._shapes = {},
            this._dataInterval = [],
            this._handleEnds = [],
            this._orient,
            this._useHandle,
            this._hoverLinkDataIndices = [],
            this._dragging,
            this._hovering
        },
        doRender: function(t, e, i, n) {
            n && "selectDataRange" === n.type && n.from === this.uid || this._buildView()
        },
        _buildView: function() {
            this.group.removeAll();
            var t = this.visualMapModel,
            e = this.group;
            this._orient = t.get("orient"),
            this._useHandle = t.get("calculable"),
            this._resetInterval(),
            this._renderBar(e);
            var i = t.get("text");
            this._renderEndsText(e, i, 0),
            this._renderEndsText(e, i, 1),
            this._updateView(!0),
            this.renderBackground(e),
            this._updateView(),
            this._enableHoverLinkToSeries(),
            this._enableHoverLinkFromSeries(),
            this.positionGroup(e)
        },
        _renderEndsText: function(t, e, i) {
            if (e) {
                var n = e[1 - i];
                n = null != n ? n + "": "";
                var o = this.visualMapModel,
                a = o.get("textGap"),
                r = o.itemSize,
                s = this._shapes.barGroup,
                l = this._applyTransform([r[0] / 2, 0 === i ? -a: r[1] + a], s),
                u = this._applyTransform(0 === i ? "bottom": "top", s),
                h = this._orient,
                c = this.visualMapModel.textStyleModel;
                this.group.add(new qS({
                    style: {
                        x: l[0],
                        y: l[1],
                        textVerticalAlign: "horizontal" === h ? "middle": u,
                        textAlign: "horizontal" === h ? u: "center",
                        text: n,
                        textFont: c.getFont(),
                        textFill: c.getTextColor()
                    }
                }))
            }
        },
        _renderBar: function(t) {
            var e = this.visualMapModel,
            i = this._shapes,
            n = e.itemSize,
            o = this._orient,
            a = this._useHandle,
            r = Yy(e, this.api, n),
            s = i.barGroup = this._createBarGroup(r);
            s.add(i.outOfRange = Xy()),
            s.add(i.inRange = Xy(null, a ? $y(this._orient) : null, m(this._dragHandle, this, "all", !1), m(this._dragHandle, this, "all", !0)));
            var l = e.textStyleModel.getTextRect("国"),
            u = xO(l.width, l.height);
            a && (i.handleThumbs = [], i.handleLabels = [], i.handleLabelPoints = [], this._createHandle(s, 0, n, u, o, r), this._createHandle(s, 1, n, u, o, r)),
            this._createIndicator(s, n, u, o),
            t.add(s)
        },
        _createHandle: function(t, e, i, n, o) {
            var a = m(this._dragHandle, this, e, !1),
            r = m(this._dragHandle, this, e, !0),
            s = Xy(qy(e, n), $y(this._orient), a, r);
            s.position[0] = i[0],
            t.add(s);
            var l = this.visualMapModel.textStyleModel,
            u = new qS({
                draggable: !0,
                drift: a,
                onmousemove: function(t) {
                    lw(t.event)
                },
                ondragend: r,
                style: {
                    x: 0,
                    y: 0,
                    text: "",
                    textFont: l.getFont(),
                    textFill: l.getTextColor()
                }
            });
            this.group.add(u);
            var h = ["horizontal" === o ? n / 2 : 1.5 * n, "horizontal" === o ? 0 === e ? -1.5 * n: 1.5 * n: 0 === e ? -n / 2 : n / 2],
            c = this._shapes;
            c.handleThumbs[e] = s,
            c.handleLabelPoints[e] = h,
            c.handleLabels[e] = u
        },
        _createIndicator: function(t, e, i, n) {
            var o = Xy([[0, 0]], "move");
            o.position[0] = e[0],
            o.attr({
                invisible: !0,
                silent: !0
            }),
            t.add(o);
            var a = this.visualMapModel.textStyleModel,
            r = new qS({
                silent: !0,
                invisible: !0,
                style: {
                    x: 0,
                    y: 0,
                    text: "",
                    textFont: a.getFont(),
                    textFill: a.getTextColor()
                }
            });
            this.group.add(r);
            var s = ["horizontal" === n ? i / 2 : wO + 3, 0],
            l = this._shapes;
            l.indicator = o,
            l.indicatorLabel = r,
            l.indicatorLabelPoint = s
        },
        _dragHandle: function(t, e, i, n) {
            if (this._useHandle) {
                if (this._dragging = !e, !e) {
                    var o = this._applyTransform([i, n], this._shapes.barGroup, !0);
                    this._updateInterval(t, o[1]),
                    this._updateView()
                }
                e === !this.visualMapModel.get("realtime") && this.api.dispatchAction({
                    type: "selectDataRange",
                    from: this.uid,
                    visualMapId: this.visualMapModel.id,
                    selected: this._dataInterval.slice()
                }),
                e ? !this._hovering && this._clearHoverLinkToSeries() : Jy(this.visualMapModel) && this._doHoverLinkToSeries(this._handleEnds[t], !1)
            }
        },
        _resetInterval: function() {
            var t = this.visualMapModel,
            e = this._dataInterval = t.getSelected(),
            i = t.getExtent(),
            n = [0, t.itemSize[1]];
            this._handleEnds = [mO(e[0], i, n, !0), mO(e[1], i, n, !0)]
        },
        _updateInterval: function(t, e) {
            e = e || 0;
            var i = this.visualMapModel,
            n = this._handleEnds,
            o = [0, i.itemSize[1]];
            zL(e, n, o, t, 0);
            var a = i.getExtent();
            this._dataInterval = [mO(n[0], o, a, !0), mO(n[1], o, a, !0)]
        },
        _updateView: function(t) {
            var e = this.visualMapModel,
            i = e.getExtent(),
            n = this._shapes,
            o = [0, e.itemSize[1]],
            a = t ? o: this._handleEnds,
            r = this._createBarVisual(this._dataInterval, i, a, "inRange"),
            s = this._createBarVisual(i, i, o, "outOfRange");
            n.inRange.setStyle({
                fill: r.barColor,
                opacity: r.opacity
            }).setShape("points", r.barPoints),
            n.outOfRange.setStyle({
                fill: s.barColor,
                opacity: s.opacity
            }).setShape("points", s.barPoints),
            this._updateHandle(a, r)
        },
        _createBarVisual: function(t, e, i, n) {
            var o = {
                forceState: n,
                convertOpacityToAlpha: !0
            },
            a = this._makeColorGradient(t, o),
            r = [this.getControllerVisual(t[0], "symbolSize", o), this.getControllerVisual(t[1], "symbolSize", o)],
            s = this._createBarPoints(i, r);
            return {
                barColor: new dM(0, 0, 0, 1, a),
                barPoints: s,
                handlesColor: [a[0].color, a[a.length - 1].color]
            }
        },
        _makeColorGradient: function(t, e) {
            var i = [],
            n = (t[1] - t[0]) / 100;
            i.push({
                color: this.getControllerVisual(t[0], "color", e),
                offset: 0
            });
            for (var o = 1; o < 100; o++) {
                var a = t[0] + n * o;
                if (a > t[1]) break;
                i.push({
                    color: this.getControllerVisual(a, "color", e),
                    offset: o / 100
                })
            }
            return i.push({
                color: this.getControllerVisual(t[1], "color", e),
                offset: 1
            }),
            i
        },
        _createBarPoints: function(t, e) {
            var i = this.visualMapModel.itemSize;
            return [[i[0] - e[0], t[0]], [i[0], t[0]], [i[0], t[1]], [i[0] - e[1], t[1]]]
        },
        _createBarGroup: function(t) {
            var e = this._orient,
            i = this.visualMapModel.get("inverse");
            return new Zw("horizontal" !== e || i ? "horizontal" === e && i ? {
                scale: "bottom" === t ? [ - 1, 1] : [1, 1],
                rotation: -Math.PI / 2
            }: "vertical" !== e || i ? {
                scale: "left" === t ? [1, 1] : [ - 1, 1]
            }: {
                scale: "left" === t ? [1, -1] : [ - 1, -1]
            }: {
                scale: "bottom" === t ? [1, 1] : [ - 1, 1],
                rotation: Math.PI / 2
            })
        },
        _updateHandle: function(t, e) {
            if (this._useHandle) {
                var i = this._shapes,
                n = this.visualMapModel,
                o = i.handleThumbs,
                a = i.handleLabels;
                vO([0, 1],
                function(r) {
                    var s = o[r];
                    s.setStyle("fill", e.handlesColor[r]),
                    s.position[1] = t[r];
                    var l = Io(i.handleLabelPoints[r], Mo(s, this.group));
                    a[r].setStyle({
                        x: l[0],
                        y: l[1],
                        text: n.formatValueText(this._dataInterval[r]),
                        textVerticalAlign: "middle",
                        textAlign: this._applyTransform("horizontal" === this._orient ? 0 === r ? "bottom": "top": "left", i.barGroup)
                    })
                },
                this)
            }
        },
        _showIndicator: function(t, e, i, n) {
            var o = this.visualMapModel,
            a = o.getExtent(),
            r = o.itemSize,
            s = [0, r[1]],
            l = mO(t, a, s, !0),
            u = this._shapes,
            h = u.indicator;
            if (h) {
                h.position[1] = l,
                h.attr("invisible", !1),
                h.setShape("points", Ky( !! i, n, l, r[1]));
                var c = {
                    convertOpacityToAlpha: !0
                },
                d = this.getControllerVisual(t, "color", c);
                h.setStyle("fill", d);
                var f = Io(u.indicatorLabelPoint, Mo(h, this.group)),
                p = u.indicatorLabel;
                p.attr("invisible", !1);
                var g = this._applyTransform("left", u.barGroup),
                m = this._orient;
                p.setStyle({
                    text: (i || "") + o.formatValueText(e),
                    textVerticalAlign: "horizontal" === m ? g: "middle",
                    textAlign: "horizontal" === m ? "center": g,
                    x: f[0],
                    y: f[1]
                })
            }
        },
        _enableHoverLinkToSeries: function() {
            var t = this;
            this._shapes.barGroup.on("mousemove",
            function(e) {
                if (t._hovering = !0, !t._dragging) {
                    var i = t.visualMapModel.itemSize,
                    n = t._applyTransform([e.offsetX, e.offsetY], t._shapes.barGroup, !0, !0);
                    n[1] = yO(xO(0, n[1]), i[1]),
                    t._doHoverLinkToSeries(n[1], 0 <= n[0] && n[0] <= i[0])
                }
            }).on("mouseout",
            function() {
                t._hovering = !1,
                !t._dragging && t._clearHoverLinkToSeries()
            })
        },
        _enableHoverLinkFromSeries: function() {
            var t = this.api.getZr();
            this.visualMapModel.option.hoverLink ? (t.on("mouseover", this._hoverLinkFromSeriesMouseOver, this), t.on("mouseout", this._hideIndicator, this)) : this._clearHoverLinkFromSeries()
        },
        _doHoverLinkToSeries: function(t, e) {
            var i = this.visualMapModel,
            n = i.itemSize;
            if (i.option.hoverLink) {
                var o = [0, n[1]],
                a = i.getExtent();
                t = yO(xO(o[0], t), o[1]);
                var r = Qy(i, a, o),
                s = [t - r, t + r],
                l = mO(t, o, a, !0),
                u = [mO(s[0], o, a, !0), mO(s[1], o, a, !0)];
                s[0] < o[0] && (u[0] = -1 / 0),
                s[1] > o[1] && (u[1] = 1 / 0),
                e && (u[0] === -1 / 0 ? this._showIndicator(l, u[1], "< ", r) : u[1] === 1 / 0 ? this._showIndicator(l, u[0], "> ", r) : this._showIndicator(l, l, "≈ ", r));
                var h = this._hoverLinkDataIndices,
                c = []; (e || Jy(i)) && (c = this._hoverLinkDataIndices = i.findTargetDataIndices(u));
                var d = Ei(h, c);
                this._dispatchHighDown("downplay", Uy(d[0])),
                this._dispatchHighDown("highlight", Uy(d[1]))
            }
        },
        _hoverLinkFromSeriesMouseOver: function(t) {
            var e = t.target,
            i = this.visualMapModel;
            if (e && null != e.dataIndex) {
                var n = this.ecModel.getSeriesByIndex(e.seriesIndex);
                if (i.isTargetSeries(n)) {
                    var o = n.getData(e.dataType),
                    a = o.get(i.getDataDimension(o), e.dataIndex, !0);
                    isNaN(a) || this._showIndicator(a, a)
                }
            }
        },
        _hideIndicator: function() {
            var t = this._shapes;
            t.indicator && t.indicator.attr("invisible", !0),
            t.indicatorLabel && t.indicatorLabel.attr("invisible", !0)
        },
        _clearHoverLinkToSeries: function() {
            this._hideIndicator();
            var t = this._hoverLinkDataIndices;
            this._dispatchHighDown("downplay", Uy(t)),
            t.length = 0
        },
        _clearHoverLinkFromSeries: function() {
            this._hideIndicator();
            var t = this.api.getZr();
            t.off("mouseover", this._hoverLinkFromSeriesMouseOver),
            t.off("mouseout", this._hideIndicator)
        },
        _applyTransform: function(t, e, i, n) {
            var o = Mo(e, n ? null: this.group);
            return bM[y(t) ? "applyTransform": "transformDirection"](t, o, i)
        },
        _dispatchHighDown: function(t, e) {
            e && e.length && this.api.dispatchAction({
                type: t,
                batch: e
            })
        },
        dispose: function() {
            this._clearHoverLinkFromSeries(),
            this._clearHoverLinkToSeries()
        },
        remove: function() {
            this._clearHoverLinkFromSeries(),
            this._clearHoverLinkToSeries()
        }
    });
    Ps({
        type: "selectDataRange",
        event: "dataRangeSelected",
        update: "update"
    },
    function(t, e) {
        e.eachComponent({
            mainType: "visualMap",
            query: t
        },
        function(e) {
            e.setSelected(t.selected)
        })
    }),
    Ls(eO);
    var SO = dO.extend({
        type: "visualMap.piecewise",
        defaultOption: {
            selected: null,
            minOpen: !1,
            maxOpen: !1,
            align: "auto",
            itemWidth: 20,
            itemHeight: 14,
            itemSymbol: "roundRect",
            pieceList: null,
            categories: null,
            splitNumber: 5,
            selectedMode: "multiple",
            itemGap: 10,
            hoverLink: !0,
            showLabel: null
        },
        optionUpdated: function(t, e) {
            SO.superApply(this, "optionUpdated", arguments),
            this._pieceList = [],
            this.resetExtent();
            var n = this._mode = this._determineMode();
            MO[this._mode].call(this),
            this._resetSelected(t, e);
            var o = this.option.categories;
            this.resetVisual(function(t, e) {
                "categories" === n ? (t.mappingMethod = "category", t.categories = i(o)) : (t.dataExtent = this.getExtent(), t.mappingMethod = "piecewise", t.pieceList = f(this._pieceList,
                function(t) {
                    var t = i(t);
                    return "inRange" !== e && (t.visual = null),
                    t
                }))
            })
        },
        completeVisualOption: function() {
            function t(t, e, i) {
                return t && t[e] && (w(t[e]) ? t[e].hasOwnProperty(i) : t[e] === i)
            }
            var e = this.option,
            i = {},
            n = UC.listVisualTypes(),
            o = this.isCategory();
            d(e.pieces,
            function(t) {
                d(n,
                function(e) {
                    t.hasOwnProperty(e) && (i[e] = 1)
                })
            }),
            d(i,
            function(i, n) {
                var a = 0;
                d(this.stateList,
                function(i) {
                    a |= t(e, i, n) || t(e.target, i, n)
                },
                this),
                !a && d(this.stateList,
                function(t) { (e[t] || (e[t] = {}))[n] = nO.get(n, "inRange" === t ? "active": "inactive", o)
                })
            },
            this),
            dO.prototype.completeVisualOption.apply(this, arguments)
        },
        _resetSelected: function(t, e) {
            var i = this.option,
            n = this._pieceList,
            o = (e ? i: t).selected || {};
            if (i.selected = o, d(n,
            function(t, e) {
                var i = this.getSelectedMapKey(t);
                o.hasOwnProperty(i) || (o[i] = !0)
            },
            this), "single" === i.selectedMode) {
                var a = !1;
                d(n,
                function(t, e) {
                    var i = this.getSelectedMapKey(t);
                    o[i] && (a ? o[i] = !1 : a = !0)
                },
                this)
            }
        },
        getSelectedMapKey: function(t) {
            return "categories" === this._mode ? t.value + "": t.index + ""
        },
        getPieceList: function() {
            return this._pieceList
        },
        _determineMode: function() {
            var t = this.option;
            return t.pieces && t.pieces.length > 0 ? "pieces": this.option.categories ? "categories": "splitNumber"
        },
        setSelected: function(t) {
            this.option.selected = i(t)
        },
        getValueState: function(t) {
            var e = UC.findPieceIndex(t, this._pieceList);
            return null != e && this.option.selected[this.getSelectedMapKey(this._pieceList[e])] ? "inRange": "outOfRange"
        },
        findTargetDataIndices: function(t) {
            var e = [];
            return this.eachTargetSeries(function(i) {
                var n = [],
                o = i.getData();
                o.each(this.getDataDimension(o),
                function(e, i) {
                    UC.findPieceIndex(e, this._pieceList) === t && n.push(i)
                },
                this),
                e.push({
                    seriesId: i.id,
                    dataIndex: n
                })
            },
            this),
            e
        },
        getRepresentValue: function(t) {
            var e;
            if (this.isCategory()) e = t.value;
            else if (null != t.value) e = t.value;
            else {
                var i = t.interval || [];
                e = i[0] === -1 / 0 && i[1] === 1 / 0 ? 0 : (i[0] + i[1]) / 2
            }
            return e
        },
        getVisualMeta: function(t) {
            function e(e, a) {
                var r = o.getRepresentValue({
                    interval: e
                });
                a || (a = o.getValueState(r));
                var s = t(r, a);
                e[0] === -1 / 0 ? n[0] = s: e[1] === 1 / 0 ? n[1] = s: i.push({
                    value: e[0],
                    color: s
                },
                {
                    value: e[1],
                    color: s
                })
            }
            if (!this.isCategory()) {
                var i = [],
                n = [],
                o = this,
                a = this._pieceList.slice();
                if (a.length) {
                    var r = a[0].interval[0];
                    r !== -1 / 0 && a.unshift({
                        interval: [ - 1 / 0, r]
                    }),
                    (r = a[a.length - 1].interval[1]) !== 1 / 0 && a.push({
                        interval: [r, 1 / 0]
                    })
                } else a.push({
                    interval: [ - 1 / 0, 1 / 0]
                });
                var s = -1 / 0;
                return d(a,
                function(t) {
                    var i = t.interval;
                    i && (i[0] > s && e([s, i[0]], "outOfRange"), e(i.slice()), s = i[1])
                },
                this),
                {
                    stops: i,
                    outerColors: n
                }
            }
        }
    }),
    MO = {
        splitNumber: function() {
            var t = this.option,
            e = this._pieceList,
            i = Math.min(t.precision, 20),
            n = this.getExtent(),
            o = t.splitNumber;
            o = Math.max(parseInt(o, 10), 1),
            t.splitNumber = o;
            for (var a = (n[1] - n[0]) / o; + a.toFixed(i) !== a && i < 5;) i++;
            t.precision = i,
            a = +a.toFixed(i);
            var r = 0;
            t.minOpen && e.push({
                index: r++,
                interval: [ - 1 / 0, n[0]],
                close: [0, 0]
            });
            for (var s = n[0], l = r + o; r < l; s += a) {
                var u = r === o - 1 ? n[1] : s + a;
                e.push({
                    index: r++,
                    interval: [s, u],
                    close: [1, 1]
                })
            }
            t.maxOpen && e.push({
                index: r++,
                interval: [n[1], 1 / 0],
                close: [0, 0]
            }),
            qo(e),
            d(e,
            function(t) {
                t.text = this.formatValueText(t.interval)
            },
            this)
        },
        categories: function() {
            var t = this.option;
            d(t.categories,
            function(t) {
                this._pieceList.push({
                    text: this.formatValueText(t, !0),
                    value: t
                })
            },
            this),
            tx(t, this._pieceList)
        },
        pieces: function() {
            var t = this.option,
            e = this._pieceList;
            d(t.pieces,
            function(t, i) {
                w(t) || (t = {
                    value: t
                });
                var n = {
                    text: "",
                    index: i
                };
                if (null != t.label && (n.text = t.label), t.hasOwnProperty("value")) {
                    var o = n.value = t.value;
                    n.interval = [o, o],
                    n.close = [1, 1]
                } else {
                    for (var a = n.interval = [], r = n.close = [0, 0], s = [1, 0, 1], l = [ - 1 / 0, 1 / 0], u = [], h = 0; h < 2; h++) {
                        for (var c = [["gte", "gt", "min"], ["lte", "lt", "max"]][h], d = 0; d < 3 && null == a[h]; d++) a[h] = t[c[d]],
                        r[h] = s[d],
                        u[h] = 2 === d;
                        null == a[h] && (a[h] = l[h])
                    }
                    u[0] && a[1] === 1 / 0 && (r[0] = 0),
                    u[1] && a[0] === -1 / 0 && (r[1] = 0),
                    a[0] === a[1] && r[0] && r[1] && (n.value = a[0])
                }
                n.visual = UC.retrieveVisuals(t),
                e.push(n)
            },
            this),
            tx(t, e),
            qo(e),
            d(e,
            function(t) {
                var e = t.close,
                i = [["<", "≤"][e[1]], [">", "≥"][e[0]]];
                t.text = t.text || this.formatValueText(null != t.value ? t.value: t.interval, !1, i)
            },
            this)
        }
    };
    gO.extend({
        type: "visualMap.piecewise",
        doRender: function() {
            var t = this.group;
            t.removeAll();
            var e = this.visualMapModel,
            i = e.get("textGap"),
            n = e.textStyleModel,
            o = n.getFont(),
            a = n.getTextColor(),
            r = this._getItemAlign(),
            s = e.itemSize,
            l = this._getViewData(),
            u = l.endsText,
            h = T(e.get("showLabel", !0), !u);
            u && this._renderEndsText(t, u[0], s, h, r),
            d(l.viewPieceList,
            function(n) {
                var l = n.piece,
                u = new Zw;
                u.onclick = m(this._onItemClick, this, l),
                this._enableHoverLink(u, n.indexInModelPieceList);
                var c = e.getRepresentValue(l);
                if (this._createItemSymbol(u, c, [0, 0, s[0], s[1]]), h) {
                    var d = this.visualMapModel.getValueState(c);
                    u.add(new qS({
                        style: {
                            x: "right" === r ? -i: s[0] + i,
                            y: s[1] / 2,
                            text: l.text,
                            textVerticalAlign: "middle",
                            textAlign: r,
                            textFont: o,
                            textFill: a,
                            opacity: "outOfRange" === d ? .5 : 1
                        }
                    }))
                }
                t.add(u)
            },
            this),
            u && this._renderEndsText(t, u[1], s, h, r),
            jM(e.get("orient"), t, e.get("itemGap")),
            this.renderBackground(t),
            this.positionGroup(t)
        },
        _enableHoverLink: function(t, e) {
            function i(t) {
                var i = this.visualMapModel;
                i.option.hoverLink && this.api.dispatchAction({
                    type: t,
                    batch: Uy(i.findTargetDataIndices(e))
                })
            }
            t.on("mouseover", m(i, this, "highlight")).on("mouseout", m(i, this, "downplay"))
        },
        _getItemAlign: function() {
            var t = this.visualMapModel,
            e = t.option;
            if ("vertical" === e.orient) return Yy(t, this.api, t.itemSize);
            var i = e.align;
            return i && "auto" !== i || (i = "left"),
            i
        },
        _renderEndsText: function(t, e, i, n, o) {
            if (e) {
                var a = new Zw,
                r = this.visualMapModel.textStyleModel;
                a.add(new qS({
                    style: {
                        x: n ? "right" === o ? i[0] : 0 : i[0] / 2,
                        y: i[1] / 2,
                        textVerticalAlign: "middle",
                        textAlign: n ? o: "center",
                        text: e,
                        textFont: r.getFont(),
                        textFill: r.getTextColor()
                    }
                })),
                t.add(a)
            }
        },
        _getViewData: function() {
            var t = this.visualMapModel,
            e = f(t.getPieceList(),
            function(t, e) {
                return {
                    piece: t,
                    indexInModelPieceList: e
                }
            }),
            i = t.get("text"),
            n = t.get("orient"),
            o = t.get("inverse");
            return ("horizontal" === n ? o: !o) ? e.reverse() : i && (i = i.slice().reverse()),
            {
                viewPieceList: e,
                endsText: i
            }
        },
        _createItemSymbol: function(t, e, i) {
            t.add(Yl(this.getControllerVisual(e, "symbol"), i[0], i[1], i[2], i[3], this.getControllerVisual(e, "color")))
        },
        _onItemClick: function(t) {
            var e = this.visualMapModel,
            n = e.option,
            o = i(n.selected),
            a = e.getSelectedMapKey(t);
            "single" === n.selectedMode ? (o[a] = !0, d(o,
            function(t, e) {
                o[e] = e === a
            })) : o[a] = !o[a],
            this.api.dispatchAction({
                type: "selectDataRange",
                from: this.uid,
                visualMapId: this.visualMapModel.id,
                selected: o
            })
        }
    }),
    Ls(eO);
    var IO = Qo,
    TO = $o,
    AO = Bs({
        type: "marker",
        dependencies: ["series", "grid", "polar", "geo"],
        init: function(t, e, i, n) {
            this.mergeDefaultAndTheme(t, i),
            this.mergeOption(t, i, n.createdBySelf, !0)
        },
        isAnimationEnabled: function() {
            if (R_.node) return ! 1;
            var t = this.__hostSeries;
            return this.getShallow("animation") && t && t.isAnimationEnabled()
        },
        mergeOption: function(t, e, i, n) {
            var o = this.constructor,
            r = this.mainType + "Model";
            i || e.eachSeries(function(t) {
                var i = t.get(this.mainType, !0),
                s = t[r];
                i && i.data ? (s ? s.mergeOption(i, e, !0) : (n && ex(i), d(i.data,
                function(t) {
                    t instanceof Array ? (ex(t[0]), ex(t[1])) : ex(t)
                }), a(s = new o(i, this, e), {
                    mainType: this.mainType,
                    seriesIndex: t.seriesIndex,
                    name: t.name,
                    createdBySelf: !0
                }), s.__hostSeries = t), t[r] = s) : t[r] = null
            },
            this)
        },
        formatTooltip: function(t) {
            var e = this.getData(),
            i = this.getRawValue(t),
            n = y(i) ? f(i, IO).join(", ") : IO(i),
            o = e.getName(t),
            a = TO(this.name);
            return (null != i || o) && (a += "<br />"),
            o && (a += TO(o), null != i && (a += " : ")),
            null != i && (a += TO(n)),
            a
        },
        getData: function() {
            return this._data
        },
        setData: function(t) {
            this._data = t
        }
    });
    h(AO, LI),
    AO.extend({
        type: "markPoint",
        defaultOption: {
            zlevel: 0,
            z: 5,
            symbol: "pin",
            symbolSize: 50,
            tooltip: {
                trigger: "item"
            },
            label: {
                show: !0,
                position: "inside"
            },
            itemStyle: {
                borderWidth: 2
            },
            emphasis: {
                label: {
                    show: !0
                }
            }
        }
    });
    var DO = l,
    CO = v,
    LO = {
        min: CO(ox, "min"),
        max: CO(ox, "max"),
        average: CO(ox, "average")
    },
    kO = Vs({
        type: "marker",
        init: function() {
            this.markerGroupMap = E()
        },
        render: function(t, e, i) {
            var n = this.markerGroupMap;
            n.each(function(t) {
                t.__keep = !1
            });
            var o = this.type + "Model";
            e.eachSeries(function(t) {
                var n = t[o];
                n && this.renderSeries(t, n, e, i)
            },
            this),
            n.each(function(t) { ! t.__keep && this.group.remove(t.group)
            },
            this)
        },
        renderSeries: function() {}
    });
    kO.extend({
        type: "markPoint",
        updateTransform: function(t, e, i) {
            e.eachSeries(function(t) {
                var e = t.markPointModel;
                e && (cx(e.getData(), t, i), this.markerGroupMap.get(t.id).updateLayout(e))
            },
            this)
        },
        renderSeries: function(t, e, i, n) {
            var o = t.coordinateSystem,
            a = t.id,
            r = t.getData(),
            s = this.markerGroupMap,
            l = s.get(a) || s.set(a, new Su),
            u = dx(o, t, e);
            e.setData(u),
            cx(e.getData(), t, n),
            u.each(function(t) {
                var i = u.getItemModel(t),
                n = i.getShallow("symbolSize");
                "function" == typeof n && (n = n(e.getRawValue(t), e.getDataParams(t))),
                u.setItemVisual(t, {
                    symbolSize: n,
                    color: i.get("itemStyle.color") || r.getVisual("color"),
                    symbol: i.getShallow("symbol")
                })
            }),
            l.updateData(u),
            this.group.add(l.group),
            u.eachItemGraphicEl(function(t) {
                t.traverse(function(t) {
                    t.dataModel = e
                })
            }),
            l.__keep = !0,
            l.group.silent = e.get("silent") || t.get("silent")
        }
    }),
    Ls(function(t) {
        t.markPoint = t.markPoint || {}
    }),
    AO.extend({
        type: "markLine",
        defaultOption: {
            zlevel: 0,
            z: 5,
            symbol: ["circle", "arrow"],
            symbolSize: [8, 16],
            precision: 2,
            tooltip: {
                trigger: "item"
            },
            label: {
                show: !0,
                position: "end"
            },
            lineStyle: {
                type: "dashed"
            },
            emphasis: {
                label: {
                    show: !0
                },
                lineStyle: {
                    width: 3
                }
            },
            animationEasing: "linear"
        }
    });
    var PO = function(t, e, o, r) {
        var s = t.getData(),
        l = r.type;
        if (!y(r) && ("min" === l || "max" === l || "average" === l || "median" === l || null != r.xAxis || null != r.yAxis)) {
            var u, h;
            if (null != r.yAxis || null != r.xAxis) u = null != r.yAxis ? "y": "x",
            e.getAxis(u),
            h = T(r.yAxis, r.xAxis);
            else {
                var c = rx(r, s, e, t);
                u = c.valueDataDim,
                c.valueAxis,
                h = hx(s, u, l)
            }
            var d = "x" === u ? 0 : 1,
            f = 1 - d,
            p = i(r),
            g = {};
            p.type = null,
            p.coord = [],
            g.coord = [],
            p.coord[f] = -1 / 0,
            g.coord[f] = 1 / 0;
            var m = o.get("precision");
            m >= 0 && "number" == typeof h && (h = +h.toFixed(Math.min(m, 20))),
            p.coord[d] = g.coord[d] = h,
            r = [p, g, {
                type: l,
                valueIndex: r.valueIndex,
                value: h
            }]
        }
        return r = [ax(t, r[0]), ax(t, r[1]), a({},
        r[2])],
        r[2].type = r[2].type || "",
        n(r[2], r[0]),
        n(r[2], r[1]),
        r
    };
    kO.extend({
        type: "markLine",
        updateTransform: function(t, e, i) {
            e.eachSeries(function(t) {
                var e = t.markLineModel;
                if (e) {
                    var n = e.getData(),
                    o = e.__from,
                    a = e.__to;
                    o.each(function(e) {
                        mx(o, e, !0, t, i),
                        mx(a, e, !1, t, i)
                    }),
                    n.each(function(t) {
                        n.setItemLayout(t, [o.getItemLayout(t), a.getItemLayout(t)])
                    }),
                    this.markerGroupMap.get(t.id).updateLayout()
                }
            },
            this)
        },
        renderSeries: function(t, e, i, n) {
            function o(e, i, o) {
                var a = e.getItemModel(i);
                mx(e, i, o, t, n),
                e.setItemVisual(i, {
                    symbolSize: a.get("symbolSize") || g[o ? 0 : 1],
                    symbol: a.get("symbol", !0) || p[o ? 0 : 1],
                    color: a.get("itemStyle.color") || s.getVisual("color")
                })
            }
            var a = t.coordinateSystem,
            r = t.id,
            s = t.getData(),
            l = this.markerGroupMap,
            u = l.get(r) || l.set(r, new Jd);
            this.group.add(u.group);
            var h = vx(a, t, e),
            c = h.from,
            d = h.to,
            f = h.line;
            e.__from = c,
            e.__to = d,
            e.setData(f);
            var p = e.get("symbol"),
            g = e.get("symbolSize");
            y(p) || (p = [p, p]),
            "number" == typeof g && (g = [g, g]),
            h.from.each(function(t) {
                o(c, t, !0),
                o(d, t, !1)
            }),
            f.each(function(t) {
                var e = f.getItemModel(t).get("lineStyle.color");
                f.setItemVisual(t, {
                    color: e || c.getItemVisual(t, "color")
                }),
                f.setItemLayout(t, [c.getItemLayout(t), d.getItemLayout(t)]),
                f.setItemVisual(t, {
                    fromSymbolSize: c.getItemVisual(t, "symbolSize"),
                    fromSymbol: c.getItemVisual(t, "symbol"),
                    toSymbolSize: d.getItemVisual(t, "symbolSize"),
                    toSymbol: d.getItemVisual(t, "symbol")
                })
            }),
            u.updateData(f),
            h.line.eachItemGraphicEl(function(t, i) {
                t.traverse(function(t) {
                    t.dataModel = e
                })
            }),
            u.__keep = !0,
            u.group.silent = e.get("silent") || t.get("silent")
        }
    }),
    Ls(function(t) {
        t.markLine = t.markLine || {}
    }),
    AO.extend({
        type: "markArea",
        defaultOption: {
            zlevel: 0,
            z: 1,
            tooltip: {
                trigger: "item"
            },
            animation: !1,
            label: {
                show: !0,
                position: "top"
            },
            itemStyle: {
                borderWidth: 0
            },
            emphasis: {
                label: {
                    show: !0,
                    position: "top"
                }
            }
        }
    });
    var NO = function(t, e, i, n) {
        var a = ax(t, n[0]),
        r = ax(t, n[1]),
        s = T,
        l = a.coord,
        u = r.coord;
        l[0] = s(l[0], -1 / 0),
        l[1] = s(l[1], -1 / 0),
        u[0] = s(u[0], 1 / 0),
        u[1] = s(u[1], 1 / 0);
        var h = o([{},
        a, r]);
        return h.coord = [a.coord, r.coord],
        h.x0 = a.x,
        h.y0 = a.y,
        h.x1 = r.x,
        h.y1 = r.y,
        h
    },
    OO = [["x0", "y0"], ["x1", "y0"], ["x1", "y1"], ["x0", "y1"]];
    kO.extend({
        type: "markArea",
        updateTransform: function(t, e, i) {
            e.eachSeries(function(t) {
                var e = t.markAreaModel;
                if (e) {
                    var n = e.getData();
                    n.each(function(e) {
                        var o = f(OO,
                        function(o) {
                            return bx(n, e, o, t, i)
                        });
                        n.setItemLayout(e, o),
                        n.getItemGraphicEl(e).setShape("points", o)
                    })
                }
            },
            this)
        },
        renderSeries: function(t, e, i, n) {
            var o = t.coordinateSystem,
            a = t.id,
            s = t.getData(),
            l = this.markerGroupMap,
            u = l.get(a) || l.set(a, {
                group: new Zw
            });
            this.group.add(u.group),
            u.__keep = !0;
            var h = Sx(o, t, e);
            e.setData(h),
            h.each(function(e) {
                h.setItemLayout(e, f(OO,
                function(i) {
                    return bx(h, e, i, t, n)
                })),
                h.setItemVisual(e, {
                    color: s.getVisual("color")
                })
            }),
            h.diff(u.__data).add(function(t) {
                var e = new nM({
                    shape: {
                        points: h.getItemLayout(t)
                    }
                });
                h.setItemGraphicEl(t, e),
                u.group.add(e)
            }).update(function(t, i) {
                var n = u.__data.getItemGraphicEl(i);
                bo(n, {
                    shape: {
                        points: h.getItemLayout(t)
                    }
                },
                e, t),
                u.group.add(n),
                h.setItemGraphicEl(t, n)
            }).remove(function(t) {
                var e = u.__data.getItemGraphicEl(t);
                u.group.remove(e)
            }).execute(),
            h.eachItemGraphicEl(function(t, i) {
                var n = h.getItemModel(i),
                o = n.getModel("label"),
                a = n.getModel("emphasis.label"),
                s = h.getItemVisual(i, "color");
                t.useStyle(r(n.getModel("itemStyle").getItemStyle(), {
                    fill: jt(s, .4),
                    stroke: s
                })),
                t.hoverStyle = n.getModel("emphasis.itemStyle").getItemStyle(),
                co(t.style, t.hoverStyle, o, a, {
                    labelFetcher: e,
                    labelDataIndex: i,
                    defaultText: h.getName(i) || "",
                    isRectText: !0,
                    autoColor: s
                }),
                uo(t, {}),
                t.dataModel = e
            }),
            u.__data = h,
            u.group.silent = e.get("silent") || t.get("silent")
        }
    }),
    Ls(function(t) {
        t.markArea = t.markArea || {}
    }),
    XM.registerSubTypeDefaulter("timeline",
    function() {
        return "slider"
    }),
    Ps({
        type: "timelineChange",
        event: "timelineChanged",
        update: "prepareAndUpdate"
    },
    function(t, e) {
        var i = e.getComponent("timeline");
        return i && null != t.currentIndex && (i.setCurrentIndex(t.currentIndex), !i.get("loop", !0) && i.isIndexMax() && i.setPlayState(!1)),
        e.resetOption("timeline"),
        r({
            currentIndex: i.option.currentIndex
        },
        t)
    }),
    Ps({
        type: "timelinePlayChange",
        event: "timelinePlayChanged",
        update: "update"
    },
    function(t, e) {
        var i = e.getComponent("timeline");
        i && null != t.playState && i.setPlayState(t.playState)
    });
    var zO = XM.extend({
        type: "timeline",
        layoutMode: "box",
        defaultOption: {
            zlevel: 0,
            z: 4,
            show: !0,
            axisType: "time",
            realtime: !0,
            left: "20%",
            top: null,
            right: "20%",
            bottom: 0,
            width: null,
            height: 40,
            padding: 5,
            controlPosition: "left",
            autoPlay: !1,
            rewind: !1,
            loop: !0,
            playInterval: 2e3,
            currentIndex: 0,
            itemStyle: {},
            label: {
                color: "#000"
            },
            data: []
        },
        init: function(t, e, i) {
            this._data,
            this._names,
            this.mergeDefaultAndTheme(t, i),
            this._initData()
        },
        mergeOption: function(t) {
            zO.superApply(this, "mergeOption", arguments),
            this._initData()
        },
        setCurrentIndex: function(t) {
            null == t && (t = this.option.currentIndex);
            var e = this._data.count();
            this.option.loop ? t = (t % e + e) % e: (t >= e && (t = e - 1), t < 0 && (t = 0)),
            this.option.currentIndex = t
        },
        getCurrentIndex: function() {
            return this.option.currentIndex
        },
        isIndexMax: function() {
            return this.getCurrentIndex() >= this._data.count() - 1
        },
        setPlayState: function(t) {
            this.option.autoPlay = !!t
        },
        getPlayState: function() {
            return !! this.option.autoPlay
        },
        _initData: function() {
            var t = this.option,
            e = t.data || [],
            n = t.axisType,
            o = this._names = [];
            if ("category" === n) {
                var a = [];
                d(e,
                function(t, e) {
                    var n, r = Li(t);
                    w(t) ? (n = i(t)).value = e: n = e,
                    a.push(n),
                    _(r) || null != r && !isNaN(r) || (r = ""),
                    o.push(r + "")
                }),
                e = a
            }
            var r = {
                category: "ordinal",
                time: "time"
            } [n] || "number"; (this._data = new eA([{
                name: "value",
                type: r
            }], this)).initData(e, o)
        },
        getData: function() {
            return this._data
        },
        getCategories: function() {
            if ("category" === this.get("axisType")) return this._names.slice()
        }
    });
    h(zO.extend({
        type: "timeline.slider",
        defaultOption: {
            backgroundColor: "rgba(0,0,0,0)",
            borderColor: "#ccc",
            borderWidth: 0,
            orient: "horizontal",
            inverse: !1,
            tooltip: {
                trigger: "item"
            },
            symbol: "emptyCircle",
            symbolSize: 10,
            lineStyle: {
                show: !0,
                width: 2,
                color: "#304654"
            },
            label: {
                position: "auto",
                show: !0,
                interval: "auto",
                rotate: 0,
                color: "#304654"
            },
            itemStyle: {
                color: "#304654",
                borderWidth: 1
            },
            checkpointStyle: {
                symbol: "circle",
                symbolSize: 13,
                color: "#c23531",
                borderWidth: 5,
                borderColor: "rgba(194,53,49, 0.5)",
                animation: !0,
                animationDuration: 300,
                animationEasing: "quinticInOut"
            },
            controlStyle: {
                show: !0,
                showPlayBtn: !0,
                showPrevBtn: !0,
                showNextBtn: !0,
                itemSize: 22,
                itemGap: 12,
                position: "left",
                playIcon: "path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",
                stopIcon: "path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",
                nextIcon: "path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",
                prevIcon: "path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",
                color: "#304654",
                borderColor: "#304654",
                borderWidth: 1
            },
            emphasis: {
                label: {
                    show: !0,
                    color: "#c23531"
                },
                itemStyle: {
                    color: "#c23531"
                },
                controlStyle: {
                    color: "#c23531",
                    borderColor: "#c23531",
                    borderWidth: 2
                }
            },
            data: []
        }
    }), LI);
    var EO = zI.extend({
        type: "timeline"
    }),
    RO = function(t, e, i, n) {
        HA.call(this, t, e, i),
        this.type = n || "value",
        this.model = null
    };
    RO.prototype = {
        constructor: RO,
        getLabelModel: function() {
            return this.model.getModel("label")
        },
        isHorizontal: function() {
            return "horizontal" === this.model.get("orient")
        }
    },
    u(RO, HA);
    var BO = m,
    VO = d,
    FO = Math.PI;
    EO.extend({
        type: "timeline.slider",
        init: function(t, e) {
            this.api = e,
            this._axis,
            this._viewRect,
            this._timer,
            this._currentPointer,
            this._mainGroup,
            this._labelGroup
        },
        render: function(t, e, i, n) {
            if (this.model = t, this.api = i, this.ecModel = e, this.group.removeAll(), t.get("show", !0)) {
                var o = this._layout(t, i),
                a = this._createGroup("mainGroup"),
                r = this._createGroup("labelGroup"),
                s = this._axis = this._createAxis(o, t);
                t.formatTooltip = function(t) {
                    return $o(s.scale.getLabel(t))
                },
                VO(["AxisLine", "AxisTick", "Control", "CurrentPointer"],
                function(e) {
                    this["_render" + e](o, a, s, t)
                },
                this),
                this._renderAxisLabel(o, r, s, t),
                this._position(o, t)
            }
            this._doPlayStop()
        },
        remove: function() {
            this._clearTimer(),
            this.group.removeAll()
        },
        dispose: function() {
            this._clearTimer()
        },
        _layout: function(t, e) {
            var i = t.get("label.position"),
            n = t.get("orient"),
            o = Ax(t, e);
            null == i || "auto" === i ? i = "horizontal" === n ? o.y + o.height / 2 < e.getHeight() / 2 ? "-": "+": o.x + o.width / 2 < e.getWidth() / 2 ? "+": "-": isNaN(i) && (i = {
                horizontal: {
                    top: "-",
                    bottom: "+"
                },
                vertical: {
                    left: "-",
                    right: "+"
                }
            } [n][i]);
            var a = {
                horizontal: "center",
                vertical: i >= 0 || "+" === i ? "left": "right"
            },
            r = {
                horizontal: i >= 0 || "+" === i ? "top": "bottom",
                vertical: "middle"
            },
            s = {
                horizontal: 0,
                vertical: FO / 2
            },
            l = "vertical" === n ? o.height: o.width,
            u = t.getModel("controlStyle"),
            h = u.get("show", !0),
            c = h ? u.get("itemSize") : 0,
            d = h ? u.get("itemGap") : 0,
            f = c + d,
            p = t.get("label.rotate") || 0;
            p = p * FO / 180;
            var g, m, v, y, x = u.get("position", !0),
            _ = h && u.get("showPlayBtn", !0),
            w = h && u.get("showPrevBtn", !0),
            b = h && u.get("showNextBtn", !0),
            S = 0,
            M = l;
            return "left" === x || "bottom" === x ? (_ && (g = [0, 0], S += f), w && (m = [S, 0], S += f), b && (v = [M - c, 0], M -= f)) : (_ && (g = [M - c, 0], M -= f), w && (m = [0, 0], S += f), b && (v = [M - c, 0], M -= f)),
            y = [S, M],
            t.get("inverse") && y.reverse(),
            {
                viewRect: o,
                mainLength: l,
                orient: n,
                rotation: s[n],
                labelRotation: p,
                labelPosOpt: i,
                labelAlign: t.get("label.align") || a[n],
                labelBaseline: t.get("label.verticalAlign") || t.get("label.baseline") || r[n],
                playPosition: g,
                prevBtnPosition: m,
                nextBtnPosition: v,
                axisExtent: y,
                controlSize: c,
                controlGap: d
            }
        },
        _position: function(t, e) {
            function i(t) {
                var e = t.position;
                t.origin = [c[0][0] - e[0], c[1][0] - e[1]]
            }
            function n(t) {
                return [[t.x, t.x + t.width], [t.y, t.y + t.height]]
            }
            function o(t, e, i, n, o) {
                t[n] += i[n][o] - e[n][o]
            }
            var a = this._mainGroup,
            r = this._labelGroup,
            s = t.viewRect;
            if ("vertical" === t.orient) {
                var l = mt(),
                u = s.x,
                h = s.y + s.height;
                _t(l, l, [ - u, -h]),
                wt(l, l, -FO / 2),
                _t(l, l, [u, h]),
                (s = s.clone()).applyTransform(l)
            }
            var c = n(s),
            d = n(a.getBoundingRect()),
            f = n(r.getBoundingRect()),
            p = a.position,
            g = r.position;
            g[0] = p[0] = c[0][0];
            var m = t.labelPosOpt;
            if (isNaN(m)) o(p, d, c, 1, v = "+" === m ? 0 : 1),
            o(g, f, c, 1, 1 - v);
            else {
                var v = m >= 0 ? 0 : 1;
                o(p, d, c, 1, v),
                g[1] = p[1] + m
            }
            a.attr("position", p),
            r.attr("position", g),
            a.rotation = r.rotation = t.rotation,
            i(a),
            i(r)
        },
        _createAxis: function(t, e) {
            var i = e.getData(),
            n = e.get("axisType"),
            o = Vl(e, n);
            o.getTicks = function() {
                return i.mapArray(["value"],
                function(t) {
                    return t
                })
            };
            var a = i.getDataExtent("value");
            o.setExtent(a[0], a[1]),
            o.niceTicks();
            var r = new RO("value", o, t.axisExtent, n);
            return r.model = e,
            r
        },
        _createGroup: function(t) {
            var e = this["_" + t] = new Zw;
            return this.group.add(e),
            e
        },
        _renderAxisLine: function(t, e, i, n) {
            var o = i.getExtent();
            n.get("lineStyle.show") && e.add(new rM({
                shape: {
                    x1: o[0],
                    y1: 0,
                    x2: o[1],
                    y2: 0
                },
                style: a({
                    lineCap: "round"
                },
                n.getModel("lineStyle").getLineStyle()),
                silent: !0,
                z2: 1
            }))
        },
        _renderAxisTick: function(t, e, i, n) {
            var o = n.getData(),
            a = i.scale.getTicks();
            VO(a,
            function(t) {
                var a = i.dataToCoord(t),
                r = o.getItemModel(t),
                s = r.getModel("itemStyle"),
                l = r.getModel("emphasis.itemStyle"),
                u = {
                    position: [a, 0],
                    onclick: BO(this._changeTimeline, this, t)
                },
                h = Cx(r, s, e, u);
                uo(h, l.getItemStyle()),
                r.get("tooltip") ? (h.dataIndex = t, h.dataModel = n) : h.dataIndex = h.dataModel = null
            },
            this)
        },
        _renderAxisLabel: function(t, e, i, n) {
            if (i.getLabelModel().get("show")) {
                var o = n.getData(),
                a = i.getViewLabels();
                VO(a,
                function(n) {
                    var a = n.tickValue,
                    r = o.getItemModel(a),
                    s = r.getModel("label"),
                    l = r.getModel("emphasis.label"),
                    u = i.dataToCoord(n.tickValue),
                    h = new qS({
                        position: [u, 0],
                        rotation: t.labelRotation - t.rotation,
                        onclick: BO(this._changeTimeline, this, a),
                        silent: !1
                    });
                    fo(h.style, s, {
                        text: n.formattedLabel,
                        textAlign: t.labelAlign,
                        textVerticalAlign: t.labelBaseline
                    }),
                    e.add(h),
                    uo(h, fo({},
                    l))
                },
                this)
            }
        },
        _renderControl: function(t, e, i, n) {
            function o(t, i, o, h) {
                if (t) {
                    var c = Dx(n, i, u, {
                        position: t,
                        origin: [a / 2, 0],
                        rotation: h ? -r: 0,
                        rectHover: !0,
                        style: s,
                        onclick: o
                    });
                    e.add(c),
                    uo(c, l)
                }
            }
            var a = t.controlSize,
            r = t.rotation,
            s = n.getModel("controlStyle").getItemStyle(),
            l = n.getModel("emphasis.controlStyle").getItemStyle(),
            u = [0, -a / 2, a, a],
            h = n.getPlayState(),
            c = n.get("inverse", !0);
            o(t.nextBtnPosition, "controlStyle.nextIcon", BO(this._changeTimeline, this, c ? "-": "+")),
            o(t.prevBtnPosition, "controlStyle.prevIcon", BO(this._changeTimeline, this, c ? "+": "-")),
            o(t.playPosition, "controlStyle." + (h ? "stopIcon": "playIcon"), BO(this._handlePlayClick, this, !h), !0)
        },
        _renderCurrentPointer: function(t, e, i, n) {
            var o = n.getData(),
            a = n.getCurrentIndex(),
            r = o.getItemModel(a).getModel("checkpointStyle"),
            s = this,
            l = {
                onCreate: function(t) {
                    t.draggable = !0,
                    t.drift = BO(s._handlePointerDrag, s),
                    t.ondragend = BO(s._handlePointerDragend, s),
                    Lx(t, a, i, n, !0)
                },
                onUpdate: function(t) {
                    Lx(t, a, i, n)
                }
            };
            this._currentPointer = Cx(r, r, this._mainGroup, {},
            this._currentPointer, l)
        },
        _handlePlayClick: function(t) {
            this._clearTimer(),
            this.api.dispatchAction({
                type: "timelinePlayChange",
                playState: t,
                from: this.uid
            })
        },
        _handlePointerDrag: function(t, e, i) {
            this._clearTimer(),
            this._pointerChangeTimeline([i.offsetX, i.offsetY])
        },
        _handlePointerDragend: function(t) {
            this._pointerChangeTimeline([t.offsetX, t.offsetY], !0)
        },
        _pointerChangeTimeline: function(t, e) {
            var i = this._toAxisCoord(t)[0],
            n = Bo(this._axis.getExtent().slice());
            i > n[1] && (i = n[1]),
            i < n[0] && (i = n[0]),
            this._currentPointer.position[0] = i,
            this._currentPointer.dirty();
            var o = this._findNearestTick(i),
            a = this.model; (e || o !== a.getCurrentIndex() && a.get("realtime")) && this._changeTimeline(o)
        },
        _doPlayStop: function() {
            this._clearTimer(),
            this.model.getPlayState() && (this._timer = setTimeout(BO(function() {
                var t = this.model;
                this._changeTimeline(t.getCurrentIndex() + (t.get("rewind", !0) ? -1 : 1))
            },
            this), this.model.get("playInterval")))
        },
        _toAxisCoord: function(t) {
            return Io(t, this._mainGroup.getLocalTransform(), !0)
        },
        _findNearestTick: function(t) {
            var e, i = this.model.getData(),
            n = 1 / 0,
            o = this._axis;
            return i.each(["value"],
            function(i, a) {
                var r = o.dataToCoord(i),
                s = Math.abs(r - t);
                s < n && (n = s, e = a)
            }),
            e
        },
        _clearTimer: function() {
            this._timer && (clearTimeout(this._timer), this._timer = null)
        },
        _changeTimeline: function(t) {
            var e = this.model.getCurrentIndex();
            "+" === t ? t = e + 1 : "-" === t && (t = e - 1),
            this.api.dispatchAction({
                type: "timelineChange",
                currentIndex: t,
                from: this.uid
            })
        }
    }),
    Ls(function(t) {
        var e = t && t.timeline;
        y(e) || (e = e ? [e] : []),
        d(e,
        function(t) {
            t && Mx(t)
        })
    });
    var GO = Bs({
        type: "toolbox",
        layoutMode: {
            type: "box",
            ignoreSize: !0
        },
        optionUpdated: function() {
            GO.superApply(this, "optionUpdated", arguments),
            d(this.option.feature,
            function(t, e) {
                var i = xy(e);
                i && n(t, i.defaultOption)
            })
        },
        defaultOption: {
            show: !0,
            z: 6,
            zlevel: 0,
            orient: "horizontal",
            left: "right",
            top: "top",
            backgroundColor: "transparent",
            borderColor: "#ccc",
            borderRadius: 0,
            borderWidth: 0,
            padding: 5,
            itemSize: 15,
            itemGap: 8,
            showTitle: !0,
            iconStyle: {
                borderColor: "#666",
                color: "none"
            },
            emphasis: {
                iconStyle: {
                    borderColor: "#3E98C5"
                }
            }
        }
    });
    Vs({
        type: "toolbox",
        render: function(t, e, i, n) {
            function o(o, r) {
                var s, c = h[o],
                d = h[r],
                f = new Lo(l[c], t, t.ecModel);
                if (c && !d) {
                    if (kx(c)) s = {
                        model: f,
                        onclick: f.option.onclick,
                        featureName: c
                    };
                    else {
                        var p = xy(c);
                        if (!p) return;
                        s = new p(f, e, i)
                    }
                    u[c] = s
                } else {
                    if (! (s = u[d])) return;
                    s.model = f,
                    s.ecModel = e,
                    s.api = i
                }
                c || !d ? f.get("show") && !s.unusable ? (a(f, s, c), f.setIconStatus = function(t, e) {
                    var i = this.option,
                    n = this.iconPaths;
                    i.iconStatus = i.iconStatus || {},
                    i.iconStatus[t] = e,
                    n[t] && n[t].trigger(e)
                },
                s.render && s.render(f, e, i, n)) : s.remove && s.remove(e, i) : s.dispose && s.dispose(e, i)
            }
            function a(n, o, a) {
                var l = n.getModel("iconStyle"),
                u = n.getModel("emphasis.iconStyle"),
                h = o.getIcons ? o.getIcons() : n.get("icon"),
                c = n.get("title") || {};
                if ("string" == typeof h) {
                    var f = h,
                    p = c;
                    c = {},
                    (h = {})[a] = f,
                    c[a] = p
                }
                var g = n.iconPaths = {};
                d(h,
                function(a, h) {
                    var d = Co(a, {},
                    {
                        x: -s / 2,
                        y: -s / 2,
                        width: s,
                        height: s
                    });
                    d.setStyle(l.getItemStyle()),
                    d.hoverStyle = u.getItemStyle(),
                    uo(d),
                    t.get("showTitle") && (d.__title = c[h], d.on("mouseover",
                    function() {
                        var t = u.getItemStyle();
                        d.setStyle({
                            text: c[h],
                            textPosition: t.textPosition || "bottom",
                            textFill: t.fill || t.stroke || "#000",
                            textAlign: t.textAlign || "center"
                        })
                    }).on("mouseout",
                    function() {
                        d.setStyle({
                            textFill: null
                        })
                    })),
                    d.trigger(n.get("iconStatus." + h) || "normal"),
                    r.add(d),
                    d.on("click", m(o.onclick, o, e, i, h)),
                    g[h] = d
                })
            }
            var r = this.group;
            if (r.removeAll(), t.get("show")) {
                var s = +t.get("itemSize"),
                l = t.get("feature") || {},
                u = this._features || (this._features = {}),
                h = [];
                d(l,
                function(t, e) {
                    h.push(e)
                }),
                new Hs(this._featureNames || [], h).add(o).update(o).remove(v(o, null)).execute(),
                this._featureNames = h,
                dv(r, t, i),
                r.add(fv(r.getBoundingRect(), t)),
                r.eachChild(function(t) {
                    var e = t.__title,
                    n = t.hoverStyle;
                    if (n && e) {
                        var o = De(e, He(n)),
                        a = t.position[0] + r.position[0],
                        l = !1;
                        t.position[1] + r.position[1] + s + o.height > i.getHeight() && (n.textPosition = "top", l = !0);
                        var u = l ? -5 - o.height: s + 8;
                        a + o.width / 2 > i.getWidth() ? (n.textPosition = ["100%", u], n.textAlign = "right") : a - o.width / 2 < 0 && (n.textPosition = [0, u], n.textAlign = "left")
                    }
                })
            }
        },
        updateView: function(t, e, i, n) {
            d(this._features,
            function(t) {
                t.updateView && t.updateView(t.model, e, i, n)
            })
        },
        remove: function(t, e) {
            d(this._features,
            function(i) {
                i.remove && i.remove(t, e)
            }),
            this.group.removeAll()
        },
        dispose: function(t, e) {
            d(this._features,
            function(i) {
                i.dispose && i.dispose(t, e)
            })
        }
    });
    var WO = YI.toolbox.saveAsImage;
    Px.defaultOption = {
        show: !0,
        icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",
        title: WO.title,
        type: "png",
        name: "",
        excludeComponents: ["toolbox"],
        pixelRatio: 1,
        lang: WO.lang.slice()
    },
    Px.prototype.unusable = !R_.canvasSupported,
    Px.prototype.onclick = function(t, e) {
        var i = this.model,
        n = i.get("name") || t.get("title.0.text") || "echarts",
        o = document.createElement("a"),
        a = i.get("type", !0) || "png";
        o.download = n + "." + a,
        o.target = "_blank";
        var r = e.getConnectedDataURL({
            type: a,
            backgroundColor: i.get("backgroundColor", !0) || t.get("backgroundColor") || "#fff",
            excludeComponents: i.get("excludeComponents"),
            pixelRatio: i.get("pixelRatio")
        });
        if (o.href = r, "function" != typeof MouseEvent || R_.browser.ie || R_.browser.edge) if (window.navigator.msSaveOrOpenBlob) {
            for (var s = atob(r.split(",")[1]), l = s.length, u = new Uint8Array(l); l--;) u[l] = s.charCodeAt(l);
            var h = new Blob([u]);
            window.navigator.msSaveOrOpenBlob(h, n + "." + a)
        } else {
            var c = i.get("lang"),
            d = '<body style="margin:0;"><img src="' + r + '" style="max-width:100%;" title="' + (c && c[0] || "") + '" /></body>';
            window.open().document.write(d)
        } else {
            var f = new MouseEvent("click", {
                view: window,
                bubbles: !0,
                cancelable: !1
            });
            o.dispatchEvent(f)
        }
    },
    yy("saveAsImage", Px);
    var HO = YI.toolbox.magicType;
    Nx.defaultOption = {
        show: !0,
        type: [],
        icon: {
            line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",
            bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",
            stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",
            tiled: "M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"
        },
        title: i(HO.title),
        option: {},
        seriesIndex: {}
    };
    var ZO = Nx.prototype;
    ZO.getIcons = function() {
        var t = this.model,
        e = t.get("icon"),
        i = {};
        return d(t.get("type"),
        function(t) {
            e[t] && (i[t] = e[t])
        }),
        i
    };
    var jO = {
        line: function(t, e, i, o) {
            if ("bar" === t) return n({
                id: e,
                type: "line",
                data: i.get("data"),
                stack: i.get("stack"),
                markPoint: i.get("markPoint"),
                markLine: i.get("markLine")
            },
            o.get("option.line") || {},
            !0)
        },
        bar: function(t, e, i, o) {
            if ("line" === t) return n({
                id: e,
                type: "bar",
                data: i.get("data"),
                stack: i.get("stack"),
                markPoint: i.get("markPoint"),
                markLine: i.get("markLine")
            },
            o.get("option.bar") || {},
            !0)
        },
        stack: function(t, e, i, o) {
            if ("line" === t || "bar" === t) return n({
                id: e,
                stack: "__ec_magicType_stack__"
            },
            o.get("option.stack") || {},
            !0)
        },
        tiled: function(t, e, i, o) {
            if ("line" === t || "bar" === t) return n({
                id: e,
                stack: ""
            },
            o.get("option.tiled") || {},
            !0)
        }
    },
    YO = [["line", "bar"], ["stack", "tiled"]];
    ZO.onclick = function(t, e, i) {
        var n = this.model,
        o = n.get("seriesIndex." + i);
        if (jO[i]) {
            var a = {
                series: []
            };
            d(YO,
            function(t) {
                l(t, i) >= 0 && d(t,
                function(t) {
                    n.setIconStatus(t, "normal")
                })
            }),
            n.setIconStatus(i, "emphasis"),
            t.eachComponent({
                mainType: "series",
                query: null == o ? null: {
                    seriesIndex: o
                }
            },
            function(e) {
                var o = e.subType,
                s = e.id,
                l = jO[i](o, s, e, n);
                l && (r(l, e.option), a.series.push(l));
                var u = e.coordinateSystem;
                if (u && "cartesian2d" === u.type && ("line" === i || "bar" === i)) {
                    var h = u.getAxesByScale("ordinal")[0];
                    if (h) {
                        var c = h.dim + "Axis",
                        d = t.queryComponents({
                            mainType: c,
                            index: e.get(name + "Index"),
                            id: e.get(name + "Id")
                        })[0].componentIndex;
                        a[c] = a[c] || [];
                        for (var f = 0; f <= d; f++) a[c][d] = a[c][d] || {};
                        a[c][d].boundaryGap = "bar" === i
                    }
                }
            }),
            e.dispatchAction({
                type: "changeMagicType",
                currentType: i,
                newOption: a
            })
        }
    },
    Ps({
        type: "changeMagicType",
        event: "magicTypeChanged",
        update: "prepareAndUpdate"
    },
    function(t, e) {
        e.mergeOption(t.newOption)
    }),
    yy("magicType", Nx);
    var UO = YI.toolbox.dataView,
    XO = new Array(60).join("-"),
    qO = "\t",
    KO = new RegExp("[" + qO + "]+", "g");
    Hx.defaultOption = {
        show: !0,
        readOnly: !1,
        optionToContent: null,
        contentToOption: null,
        icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",
        title: i(UO.title),
        lang: i(UO.lang),
        backgroundColor: "#fff",
        textColor: "#000",
        textareaColor: "#fff",
        textareaBorderColor: "#333",
        buttonColor: "#c23531",
        buttonTextColor: "#fff"
    },
    Hx.prototype.onclick = function(t, e) {
        function i() {
            n.removeChild(a),
            x._dom = null
        }
        var n = e.getDom(),
        o = this.model;
        this._dom && n.removeChild(this._dom);
        var a = document.createElement("div");
        a.style.cssText = "position:absolute;left:5px;top:5px;bottom:5px;right:5px;",
        a.style.backgroundColor = o.get("backgroundColor") || "#fff";
        var r = document.createElement("h4"),
        s = o.get("lang") || [];
        r.innerHTML = s[0] || o.get("title"),
        r.style.cssText = "margin: 10px 20px;",
        r.style.color = o.get("textColor");
        var l = document.createElement("div"),
        u = document.createElement("textarea");
        l.style.cssText = "display:block;width:100%;overflow:auto;";
        var h = o.get("optionToContent"),
        c = o.get("contentToOption"),
        d = Rx(t);
        if ("function" == typeof h) {
            var f = h(e.getOption());
            "string" == typeof f ? l.innerHTML = f: M(f) && l.appendChild(f)
        } else l.appendChild(u),
        u.readOnly = o.get("readOnly"),
        u.style.cssText = "width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",
        u.style.color = o.get("textColor"),
        u.style.borderColor = o.get("textareaBorderColor"),
        u.style.backgroundColor = o.get("textareaColor"),
        u.value = d.value;
        var p = d.meta,
        g = document.createElement("div");
        g.style.cssText = "position:absolute;bottom:0;left:0;right:0;";
        var m = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",
        v = document.createElement("div"),
        y = document.createElement("div");
        m += ";background-color:" + o.get("buttonColor"),
        m += ";color:" + o.get("buttonTextColor");
        var x = this;
        ut(v, "click", i),
        ut(y, "click",
        function() {
            var t;
            try {
                t = "function" == typeof c ? c(l, e.getOption()) : Wx(u.value, p)
            } catch(t) {
                throw i(),
                new Error("Data view format error " + t)
            }
            t && e.dispatchAction({
                type: "changeDataView",
                newOption: t
            }),
            i()
        }),
        v.innerHTML = s[1],
        y.innerHTML = s[2],
        y.style.cssText = m,
        v.style.cssText = m,
        !o.get("readOnly") && g.appendChild(y),
        g.appendChild(v),
        ut(u, "keydown",
        function(t) {
            if (9 === (t.keyCode || t.which)) {
                var e = this.value,
                i = this.selectionStart,
                n = this.selectionEnd;
                this.value = e.substring(0, i) + qO + e.substring(n),
                this.selectionStart = this.selectionEnd = i + 1,
                lw(t)
            }
        }),
        a.appendChild(r),
        a.appendChild(l),
        a.appendChild(g),
        l.style.height = n.clientHeight - 80 + "px",
        n.appendChild(a),
        this._dom = a
    },
    Hx.prototype.remove = function(t, e) {
        this._dom && e.getDom().removeChild(this._dom)
    },
    Hx.prototype.dispose = function(t, e) {
        this.remove(t, e)
    },
    yy("dataView", Hx),
    Ps({
        type: "changeDataView",
        event: "dataViewChanged",
        update: "prepareAndUpdate"
    },
    function(t, e) {
        var i = [];
        d(t.newOption.series,
        function(t) {
            var n = e.getSeriesByName(t.name)[0];
            if (n) {
                var o = n.get("data");
                i.push({
                    name: t.name,
                    data: Zx(t.data, o)
                })
            } else i.push(a({
                type: "scatter"
            },
            t))
        }),
        e.mergeOption(r({
            series: i
        },
        t.newOption))
    });
    var QO = d,
    JO = "\0_ec_hist_store";
    BN.extend({
        type: "dataZoom.select"
    }),
    VN.extend({
        type: "dataZoom.select"
    });
    var $O = YI.toolbox.dataZoom,
    tz = d,
    ez = "\0_ec_\0toolbox-dataZoom_";
    Kx.defaultOption = {
        show: !0,
        icon: {
            zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",
            back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"
        },
        title: i($O.title)
    };
    var iz = Kx.prototype;
    iz.render = function(t, e, i, n) {
        this.model = t,
        this.ecModel = e,
        this.api = i,
        $x(t, e, this, n, i),
        Jx(t, e)
    },
    iz.onclick = function(t, e, i) {
        nz[i].call(this)
    },
    iz.remove = function(t, e) {
        this._brushController.unmount()
    },
    iz.dispose = function(t, e) {
        this._brushController.dispose()
    };
    var nz = {
        zoom: function() {
            var t = !this._isZoomActive;
            this.api.dispatchAction({
                type: "takeGlobalCursor",
                key: "dataZoomSelect",
                dataZoomSelectActive: t
            })
        },
        back: function() {
            this._dispatchZoomAction(Yx(this.ecModel))
        }
    };
    iz._onBrush = function(t, e) {
        function i(t, e, i) {
            var r = e.getAxis(t),
            s = r.model,
            l = n(t, s, a),
            u = l.findRepresentativeAxisProxy(s).getMinMaxSpan();
            null == u.minValueSpan && null == u.maxValueSpan || (i = zL(0, i.slice(), r.scale.getExtent(), 0, u.minValueSpan, u.maxValueSpan)),
            l && (o[l.id] = {
                dataZoomId: l.id,
                startValue: i[0],
                endValue: i[1]
            })
        }
        function n(t, e, i) {
            var n;
            return i.eachComponent({
                mainType: "dataZoom",
                subType: "select"
            },
            function(i) {
                i.getAxisModel(t, e.componentIndex) && (n = i)
            }),
            n
        }
        if (e.isEnd && t.length) {
            var o = {},
            a = this.ecModel;
            this._brushController.updateCovers([]),
            new iy(Qx(this.model.option), a, {
                include: ["grid"]
            }).matchOutputRanges(t, a,
            function(t, e, n) {
                if ("cartesian2d" === n.type) {
                    var o = t.brushType;
                    "rect" === o ? (i("x", n, e[0]), i("y", n, e[1])) : i({
                        lineX: "x",
                        lineY: "y"
                    } [o], n, e)
                }
            }),
            jx(a, o),
            this._dispatchZoomAction(o)
        }
    },
    iz._dispatchZoomAction = function(t) {
        var e = [];
        tz(t,
        function(t, n) {
            e.push(i(t))
        }),
        e.length && this.api.dispatchAction({
            type: "dataZoom",
            from: this.uid,
            batch: e
        })
    },
    yy("dataZoom", Kx),
    Ls(function(t) {
        function e(t, e) {
            if (e) {
                var o = t + "Index",
                a = e[o];
                null == a || "all" === a || y(a) || (a = !1 === a || "none" === a ? [] : [a]),
                i(t,
                function(e, i) {
                    if (null == a || "all" === a || -1 !== l(a, i)) {
                        var r = {
                            type: "select",
                            $fromToolbox: !0,
                            id: ez + t + i
                        };
                        r[o] = i,
                        n.push(r)
                    }
                })
            }
        }
        function i(e, i) {
            var n = t[e];
            y(n) || (n = n ? [n] : []),
            tz(n, i)
        }
        if (t) {
            var n = t.dataZoom || (t.dataZoom = []);
            y(n) || (t.dataZoom = n = [n]);
            var o = t.toolbox;
            if (o && (y(o) && (o = o[0]), o && o.feature)) {
                var a = o.feature.dataZoom;
                e("xAxis", a),
                e("yAxis", a)
            }
        }
    });
    var oz = YI.toolbox.restore;
    t_.defaultOption = {
        show: !0,
        icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",
        title: oz.title
    },
    t_.prototype.onclick = function(t, e, i) {
        Ux(t),
        e.dispatchAction({
            type: "restore",
            from: this.uid
        })
    },
    yy("restore", t_),
    Ps({
        type: "restore",
        event: "restore",
        update: "prepareAndUpdate"
    },
    function(t, e) {
        e.resetOption("recreate")
    });
    var az, rz = "urn:schemas-microsoft-com:vml",
    sz = "undefined" == typeof window ? null: window,
    lz = !1,
    uz = sz && sz.document;
    if (uz && !R_.canvasSupported) try { ! uz.namespaces.zrvml && uz.namespaces.add("zrvml", rz),
        az = function(t) {
            return uz.createElement("<zrvml:" + t + ' class="zrvml">')
        }
    } catch(t) {
        az = function(t) {
            return uz.createElement("<" + t + ' xmlns="' + rz + '" class="zrvml">')
        }
    }
    var hz = MS.CMD,
    cz = Math.round,
    dz = Math.sqrt,
    fz = Math.abs,
    pz = Math.cos,
    gz = Math.sin,
    mz = Math.max;
    if (!R_.canvasSupported) {
        var vz = 21600,
        yz = vz / 2,
        xz = function(t) {
            t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;",
            t.coordsize = vz + "," + vz,
            t.coordorigin = "0,0"
        },
        _z = function(t) {
            return String(t).replace(/&/g, "&amp;").replace(/"/g, "&quot;")
        },
        wz = function(t, e, i) {
            return "rgb(" + [t, e, i].join(",") + ")"
        },
        bz = function(t, e) {
            e && t && e.parentNode !== t && t.appendChild(e)
        },
        Sz = function(t, e) {
            e && t && e.parentNode === t && t.removeChild(e)
        },
        Mz = function(t, e, i) {
            return 1e5 * (parseFloat(t) || 0) + 1e3 * (parseFloat(e) || 0) + i
        },
        Iz = function(t, e) {
            return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e: parseFloat(t) : t
        },
        Tz = function(t, e, i) {
            var n = Rt(e);
            i = +i,
            isNaN(i) && (i = 1),
            n && (t.color = wz(n[0], n[1], n[2]), t.opacity = i * n[3])
        },
        Az = function(t) {
            var e = Rt(t);
            return [wz(e[0], e[1], e[2]), e[3]]
        },
        Dz = function(t, e, i) {
            var n = e.fill;
            if (null != n) if (n instanceof cM) {
                var o, a = 0,
                r = [0, 0],
                s = 0,
                l = 1,
                u = i.getBoundingRect(),
                h = u.width,
                c = u.height;
                if ("linear" === n.type) {
                    o = "gradient";
                    var d = i.transform,
                    f = [n.x * h, n.y * c],
                    p = [n.x2 * h, n.y2 * c];
                    d && ($(f, f, d), $(p, p, d));
                    var g = p[0] - f[0],
                    m = p[1] - f[1]; (a = 180 * Math.atan2(g, m) / Math.PI) < 0 && (a += 360),
                    a < 1e-6 && (a = 0)
                } else {
                    o = "gradientradial";
                    var f = [n.x * h, n.y * c],
                    d = i.transform,
                    v = i.scale,
                    y = h,
                    x = c;
                    r = [(f[0] - u.x) / y, (f[1] - u.y) / x],
                    d && $(f, f, d),
                    y /= v[0] * vz,
                    x /= v[1] * vz;
                    var _ = mz(y, x);
                    s = 0 / _,
                    l = 2 * n.r / _ - s
                }
                var w = n.colorStops.slice();
                w.sort(function(t, e) {
                    return t.offset - e.offset
                });
                for (var b = w.length,
                S = [], M = [], I = 0; I < b; I++) {
                    var T = w[I],
                    A = Az(T.color);
                    M.push(T.offset * l + s + " " + A[0]),
                    0 !== I && I !== b - 1 || S.push(A)
                }
                if (b >= 2) {
                    var D = S[0][0],
                    C = S[1][0],
                    L = S[0][1] * e.opacity,
                    k = S[1][1] * e.opacity;
                    t.type = o,
                    t.method = "none",
                    t.focus = "100%",
                    t.angle = a,
                    t.color = D,
                    t.color2 = C,
                    t.colors = M.join(","),
                    t.opacity = k,
                    t.opacity2 = L
                }
                "radial" === o && (t.focusposition = r.join(","))
            } else Tz(t, n, e.opacity)
        },
        Cz = function(t, e) {
            null != e.lineDash && (t.dashstyle = e.lineDash.join(" ")),
            null == e.stroke || e.stroke instanceof cM || Tz(t, e.stroke, e.opacity)
        },
        Lz = function(t, e, i, n) {
            var o = "fill" == e,
            a = t.getElementsByTagName(e)[0];
            null != i[e] && "none" !== i[e] && (o || !o && i.lineWidth) ? (t[o ? "filled": "stroked"] = "true", i[e] instanceof cM && Sz(t, a), a || (a = e_(e)), o ? Dz(a, i, n) : Cz(a, i), bz(t, a)) : (t[o ? "filled": "stroked"] = "false", Sz(t, a))
        },
        kz = [[], [], []],
        Pz = function(t, e) {
            var i, n, o, a, r, s, l = hz.M,
            u = hz.C,
            h = hz.L,
            c = hz.A,
            d = hz.Q,
            f = [],
            p = t.data,
            g = t.len();
            for (a = 0; a < g;) {
                switch (o = p[a++], n = "", i = 0, o) {
                case l:
                    n = " m ",
                    i = 1,
                    r = p[a++],
                    s = p[a++],
                    kz[0][0] = r,
                    kz[0][1] = s;
                    break;
                case h:
                    n = " l ",
                    i = 1,
                    r = p[a++],
                    s = p[a++],
                    kz[0][0] = r,
                    kz[0][1] = s;
                    break;
                case d:
                case u:
                    n = " c ",
                    i = 3;
                    var m, v, y = p[a++],
                    x = p[a++],
                    _ = p[a++],
                    w = p[a++];
                    o === d ? (m = _, v = w, _ = (_ + 2 * y) / 3, w = (w + 2 * x) / 3, y = (r + 2 * y) / 3, x = (s + 2 * x) / 3) : (m = p[a++], v = p[a++]),
                    kz[0][0] = y,
                    kz[0][1] = x,
                    kz[1][0] = _,
                    kz[1][1] = w,
                    kz[2][0] = m,
                    kz[2][1] = v,
                    r = m,
                    s = v;
                    break;
                case c:
                    var b = 0,
                    S = 0,
                    M = 1,
                    I = 1,
                    T = 0;
                    e && (b = e[4], S = e[5], M = dz(e[0] * e[0] + e[1] * e[1]), I = dz(e[2] * e[2] + e[3] * e[3]), T = Math.atan2( - e[1] / I, e[0] / M));
                    var A = p[a++],
                    D = p[a++],
                    C = p[a++],
                    L = p[a++],
                    k = p[a++] + T,
                    P = p[a++] + k + T;
                    a++;
                    var N = p[a++],
                    O = A + pz(k) * C,
                    z = D + gz(k) * L,
                    y = A + pz(P) * C,
                    x = D + gz(P) * L,
                    E = N ? " wa ": " at ";
                    Math.abs(O - y) < 1e-4 && (Math.abs(P - k) > .01 ? N && (O += .0125) : Math.abs(z - D) < 1e-4 ? N && O < A || !N && O > A ? x -= .0125 : x += .0125 : N && z < D || !N && z > D ? y += .0125 : y -= .0125),
                    f.push(E, cz(((A - C) * M + b) * vz - yz), ",", cz(((D - L) * I + S) * vz - yz), ",", cz(((A + C) * M + b) * vz - yz), ",", cz(((D + L) * I + S) * vz - yz), ",", cz((O * M + b) * vz - yz), ",", cz((z * I + S) * vz - yz), ",", cz((y * M + b) * vz - yz), ",", cz((x * I + S) * vz - yz)),
                    r = y,
                    s = x;
                    break;
                case hz.R:
                    var R = kz[0],
                    B = kz[1];
                    R[0] = p[a++],
                    R[1] = p[a++],
                    B[0] = R[0] + p[a++],
                    B[1] = R[1] + p[a++],
                    e && ($(R, R, e), $(B, B, e)),
                    R[0] = cz(R[0] * vz - yz),
                    B[0] = cz(B[0] * vz - yz),
                    R[1] = cz(R[1] * vz - yz),
                    B[1] = cz(B[1] * vz - yz),
                    f.push(" m ", R[0], ",", R[1], " l ", B[0], ",", R[1], " l ", B[0], ",", B[1], " l ", R[0], ",", B[1]);
                    break;
                case hz.Z:
                    f.push(" x ")
                }
                if (i > 0) {
                    f.push(n);
                    for (var V = 0; V < i; V++) {
                        var F = kz[V];
                        e && $(F, F, e),
                        f.push(cz(F[0] * vz - yz), ",", cz(F[1] * vz - yz), V < i - 1 ? ",": "")
                    }
                }
            }
            return f.join("")
        };
        kn.prototype.brushVML = function(t) {
            var e = this.style,
            i = this._vmlEl;
            i || (i = e_("shape"), xz(i), this._vmlEl = i),
            Lz(i, "fill", e, this),
            Lz(i, "stroke", e, this);
            var n = this.transform,
            o = null != n,
            a = i.getElementsByTagName("stroke")[0];
            if (a) {
                var r = e.lineWidth;
                if (o && !e.strokeNoScale) {
                    var s = n[0] * n[3] - n[1] * n[2];
                    r *= dz(fz(s))
                }
                a.weight = r + "px"
            }
            var l = this.path || (this.path = new MS);
            this.__dirtyPath && (l.beginPath(), this.buildPath(l, this.shape), l.toStatic(), this.__dirtyPath = !1),
            i.path = Pz(l, this.transform),
            i.style.zIndex = Mz(this.zlevel, this.z, this.z2),
            bz(t, i),
            null != e.text ? this.drawRectText(t, this.getBoundingRect()) : this.removeRectText(t)
        },
        kn.prototype.onRemove = function(t) {
            Sz(t, this._vmlEl),
            this.removeRectText(t)
        },
        kn.prototype.onAdd = function(t) {
            bz(t, this._vmlEl),
            this.appendRectText(t)
        };
        var Nz = function(t) {
            return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase()
        };
        hi.prototype.brushVML = function(t) {
            var e, i, n = this.style,
            o = n.image;
            if (Nz(o)) {
                var a = o.src;
                if (a === this._imageSrc) e = this._imageWidth,
                i = this._imageHeight;
                else {
                    var r = o.runtimeStyle,
                    s = r.width,
                    l = r.height;
                    r.width = "auto",
                    r.height = "auto",
                    e = o.width,
                    i = o.height,
                    r.width = s,
                    r.height = l,
                    this._imageSrc = a,
                    this._imageWidth = e,
                    this._imageHeight = i
                }
                o = a
            } else o === this._imageSrc && (e = this._imageWidth, i = this._imageHeight);
            if (o) {
                var u = n.x || 0,
                h = n.y || 0,
                c = n.width,
                d = n.height,
                f = n.sWidth,
                p = n.sHeight,
                g = n.sx || 0,
                m = n.sy || 0,
                v = f && p,
                y = this._vmlEl;
                y || (y = uz.createElement("div"), xz(y), this._vmlEl = y);
                var x, _ = y.style,
                w = !1,
                b = 1,
                S = 1;
                if (this.transform && (x = this.transform, b = dz(x[0] * x[0] + x[1] * x[1]), S = dz(x[2] * x[2] + x[3] * x[3]), w = x[1] || x[2]), w) {
                    var M = [u, h],
                    I = [u + c, h],
                    T = [u, h + d],
                    A = [u + c, h + d];
                    $(M, M, x),
                    $(I, I, x),
                    $(T, T, x),
                    $(A, A, x);
                    var D = mz(M[0], I[0], T[0], A[0]),
                    C = mz(M[1], I[1], T[1], A[1]),
                    L = [];
                    L.push("M11=", x[0] / b, ",", "M12=", x[2] / S, ",", "M21=", x[1] / b, ",", "M22=", x[3] / S, ",", "Dx=", cz(u * b + x[4]), ",", "Dy=", cz(h * S + x[5])),
                    _.padding = "0 " + cz(D) + "px " + cz(C) + "px 0",
                    _.filter = "progid:DXImageTransform.Microsoft.Matrix(" + L.join("") + ", SizingMethod=clip)"
                } else x && (u = u * b + x[4], h = h * S + x[5]),
                _.filter = "",
                _.left = cz(u) + "px",
                _.top = cz(h) + "px";
                var k = this._imageEl,
                P = this._cropEl;
                k || (k = uz.createElement("div"), this._imageEl = k);
                var N = k.style;
                if (v) {
                    if (e && i) N.width = cz(b * e * c / f) + "px",
                    N.height = cz(S * i * d / p) + "px";
                    else {
                        var O = new Image,
                        z = this;
                        O.onload = function() {
                            O.onload = null,
                            e = O.width,
                            i = O.height,
                            N.width = cz(b * e * c / f) + "px",
                            N.height = cz(S * i * d / p) + "px",
                            z._imageWidth = e,
                            z._imageHeight = i,
                            z._imageSrc = o
                        },
                        O.src = o
                    }
                    P || ((P = uz.createElement("div")).style.overflow = "hidden", this._cropEl = P);
                    var E = P.style;
                    E.width = cz((c + g * c / f) * b),
                    E.height = cz((d + m * d / p) * S),
                    E.filter = "progid:DXImageTransform.Microsoft.Matrix(Dx=" + -g * c / f * b + ",Dy=" + -m * d / p * S + ")",
                    P.parentNode || y.appendChild(P),
                    k.parentNode != P && P.appendChild(k)
                } else N.width = cz(b * c) + "px",
                N.height = cz(S * d) + "px",
                y.appendChild(k),
                P && P.parentNode && (y.removeChild(P), this._cropEl = null);
                var R = "",
                B = n.opacity;
                B < 1 && (R += ".Alpha(opacity=" + cz(100 * B) + ") "),
                R += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + o + ", SizingMethod=scale)",
                N.filter = R,
                y.style.zIndex = Mz(this.zlevel, this.z, this.z2),
                bz(t, y),
                null != n.text && this.drawRectText(t, this.getBoundingRect())
            }
        },
        hi.prototype.onRemove = function(t) {
            Sz(t, this._vmlEl),
            this._vmlEl = null,
            this._cropEl = null,
            this._imageEl = null,
            this.removeRectText(t)
        },
        hi.prototype.onAdd = function(t) {
            bz(t, this._vmlEl),
            this.appendRectText(t)
        };
        var Oz, zz = {},
        Ez = 0,
        Rz = document.createElement("div"),
        Bz = function(t) {
            var e = zz[t];
            if (!e) {
                Ez > 100 && (Ez = 0, zz = {});
                var i, n = Rz.style;
                try {
                    n.font = t,
                    i = n.fontFamily.split(",")[0]
                } catch(t) {}
                e = {
                    style: n.fontStyle || "normal",
                    variant: n.fontVariant || "normal",
                    weight: n.fontWeight || "normal",
                    size: 0 | parseFloat(n.fontSize || 12),
                    family: i || "Microsoft YaHei"
                },
                zz[t] = e,
                Ez++
            }
            return e
        }; !
        function(t, e) {
            hb.measureText = e
        } (0,
        function(t, e) {
            var i = uz;
            Oz || ((Oz = i.createElement("div")).style.cssText = "position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;", uz.body.appendChild(Oz));
            try {
                Oz.style.font = e
            } catch(t) {}
            return Oz.innerHTML = "",
            Oz.appendChild(i.createTextNode(t)),
            {
                width: Oz.offsetWidth
            }
        });
        for (var Vz = new ue,
        Fz = [gb, ui, hi, kn, qS], Gz = 0; Gz < Fz.length; Gz++) {
            var Wz = Fz[Gz].prototype;
            Wz.drawRectText = function(t, e, i, n) {
                var o = this.style;
                this.__dirty && je(o);
                var a = o.text;
                if (null != a && (a += ""), a) {
                    if (o.rich) {
                        var r = Ge(a, o);
                        a = [];
                        for (var s = 0; s < r.lines.length; s++) {
                            for (var l = r.lines[s].tokens, u = [], h = 0; h < l.length; h++) u.push(l[h].text);
                            a.push(u.join(""))
                        }
                        a = a.join("\n")
                    }
                    var c, d, f = o.textAlign,
                    p = o.textVerticalAlign,
                    g = Bz(o.font),
                    m = g.style + " " + g.variant + " " + g.weight + " " + g.size + 'px "' + g.family + '"';
                    i = i || De(a, m, f, p);
                    var v = this.transform;
                    if (v && !n && (Vz.copy(e), Vz.applyTransform(v), e = Vz), n) c = e.x,
                    d = e.y;
                    else {
                        var y = o.textPosition,
                        x = o.textDistance;
                        if (y instanceof Array) c = e.x + Iz(y[0], e.width),
                        d = e.y + Iz(y[1], e.height),
                        f = f || "left";
                        else {
                            var _ = Ne(y, e, x);
                            c = _.x,
                            d = _.y,
                            f = f || _.textAlign,
                            p = p || _.textVerticalAlign
                        }
                    }
                    c = ke(c, i.width, f),
                    d = Pe(d, i.height, p),
                    d += i.height / 2;
                    var w, b, S, M = e_,
                    I = this._textVmlEl;
                    I ? b = (w = (S = I.firstChild).nextSibling).nextSibling: (I = M("line"), w = M("path"), b = M("textpath"), S = M("skew"), b.style["v-text-align"] = "left", xz(I), w.textpathok = !0, b.on = !0, I.from = "0 0", I.to = "1000 0.05", bz(I, S), bz(I, w), bz(I, b), this._textVmlEl = I);
                    var T = [c, d],
                    A = I.style;
                    v && n ? ($(T, T, v), S.on = !0, S.matrix = v[0].toFixed(3) + "," + v[2].toFixed(3) + "," + v[1].toFixed(3) + "," + v[3].toFixed(3) + ",0,0", S.offset = (cz(T[0]) || 0) + "," + (cz(T[1]) || 0), S.origin = "0 0", A.left = "0px", A.top = "0px") : (S.on = !1, A.left = cz(c) + "px", A.top = cz(d) + "px"),
                    b.string = _z(a);
                    try {
                        b.style.font = m
                    } catch(t) {}
                    Lz(I, "fill", {
                        fill: o.textFill,
                        opacity: o.opacity
                    },
                    this),
                    Lz(I, "stroke", {
                        stroke: o.textStroke,
                        opacity: o.opacity,
                        lineDash: o.lineDash
                    },
                    this),
                    I.style.zIndex = Mz(this.zlevel, this.z, this.z2),
                    bz(t, I)
                }
            },
            Wz.removeRectText = function(t) {
                Sz(t, this._textVmlEl),
                this._textVmlEl = null
            },
            Wz.appendRectText = function(t) {
                bz(t, this._textVmlEl)
            }
        }
        qS.prototype.brushVML = function(t) {
            var e = this.style;
            null != e.text ? this.drawRectText(t, {
                x: e.x || 0,
                y: e.y || 0,
                width: 0,
                height: 0
            },
            this.getBoundingRect(), !0) : this.removeRectText(t)
        },
        qS.prototype.onRemove = function(t) {
            this.removeRectText(t)
        },
        qS.prototype.onAdd = function(t) {
            this.appendRectText(t)
        }
    }
    o_.prototype = {
        constructor: o_,
        getType: function() {
            return "vml"
        },
        getViewportRoot: function() {
            return this._vmlViewport
        },
        getViewportRootOffset: function() {
            var t = this.getViewportRoot();
            if (t) return {
                offsetLeft: t.offsetLeft || 0,
                offsetTop: t.offsetTop || 0
            }
        },
        refresh: function() {
            var t = this.storage.getDisplayList(!0, !0);
            this._paintList(t)
        },
        _paintList: function(t) {
            for (var e = this._vmlRoot,
            i = 0; i < t.length; i++) {
                var n = t[i];
                n.invisible || n.ignore ? (n.__alreadyNotVisible || n.onRemove(e), n.__alreadyNotVisible = !0) : (n.__alreadyNotVisible && n.onAdd(e), n.__alreadyNotVisible = !1, n.__dirty && (n.beforeBrush && n.beforeBrush(), (n.brushVML || n.brush).call(n, e), n.afterBrush && n.afterBrush())),
                n.__dirty = !1
            }
            this._firstPaint && (this._vmlViewport.appendChild(e), this._firstPaint = !1)
        },
        resize: function(t, e) {
            var t = null == t ? this._getWidth() : t,
            e = null == e ? this._getHeight() : e;
            if (this._width != t || this._height != e) {
                this._width = t,
                this._height = e;
                var i = this._vmlViewport.style;
                i.width = t + "px",
                i.height = e + "px"
            }
        },
        dispose: function() {
            this.root.innerHTML = "",
            this._vmlRoot = this._vmlViewport = this.storage = null
        },
        getWidth: function() {
            return this._width
        },
        getHeight: function() {
            return this._height
        },
        clear: function() {
            this._vmlViewport && this.root.removeChild(this._vmlViewport)
        },
        _getWidth: function() {
            var t = this.root,
            e = t.currentStyle;
            return (t.clientWidth || n_(e.width)) - n_(e.paddingLeft) - n_(e.paddingRight) | 0
        },
        _getHeight: function() {
            var t = this.root,
            e = t.currentStyle;
            return (t.clientHeight || n_(e.height)) - n_(e.paddingTop) - n_(e.paddingBottom) | 0
        }
    },
    d(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"],
    function(t) {
        o_.prototype[t] = a_(t)
    }),
    Ti("vml", o_);
    var Hz = "http://www.w3.org/2000/svg",
    Zz = MS.CMD,
    jz = Array.prototype.join,
    Yz = "none",
    Uz = Math.round,
    Xz = Math.sin,
    qz = Math.cos,
    Kz = Math.PI,
    Qz = 2 * Math.PI,
    Jz = 180 / Kz,
    $z = 1e-4,
    tE = {};
    tE.brush = function(t) {
        var e = t.style,
        i = t.__svgEl;
        i || (i = r_("path"), t.__svgEl = i),
        t.path || t.createPathProxy();
        var n = t.path;
        if (t.__dirtyPath) {
            n.beginPath(),
            t.buildPath(n, t.shape),
            t.__dirtyPath = !1;
            var o = g_(n);
            o.indexOf("NaN") < 0 && d_(i, "d", o)
        }
        p_(i, e, !1, t),
        c_(i, t.transform),
        null != e.text && oE(t, t.getBoundingRect())
    };
    var eE = {};
    eE.brush = function(t) {
        var e = t.style,
        i = e.image;
        if (i instanceof HTMLImageElement && (i = i.src), i) {
            var n = e.x || 0,
            o = e.y || 0,
            a = e.width,
            r = e.height,
            s = t.__svgEl;
            s || (s = r_("image"), t.__svgEl = s),
            i !== t.__imageSrc && (f_(s, "href", i), t.__imageSrc = i),
            d_(s, "width", a),
            d_(s, "height", r),
            d_(s, "x", n),
            d_(s, "y", o),
            c_(s, t.transform),
            null != e.text && oE(t, t.getBoundingRect())
        }
    };
    var iE = {},
    nE = new ue,
    oE = function(t, e, i) {
        var n = t.style;
        t.__dirty && je(n);
        var o = n.text;
        if (null != o) {
            o += "";
            var a = t.__textSvgEl;
            a || (a = r_("text"), t.__textSvgEl = a);
            var r, s, l = n.textPosition,
            u = n.textDistance,
            h = n.textAlign || "left";
            "number" == typeof n.fontSize && (n.fontSize += "px");
            var c = n.font || [n.fontStyle || "", n.fontWeight || "", n.fontSize || "", n.fontFamily || ""].join(" ") || ub,
            d = m_(n.textVerticalAlign),
            f = (i = De(o, c, h, d)).lineHeight;
            if (l instanceof Array) r = e.x + l[0],
            s = e.y + l[1];
            else {
                var p = Ne(l, e, u);
                r = p.x,
                s = p.y,
                d = m_(p.textVerticalAlign),
                h = p.textAlign
            }
            d_(a, "alignment-baseline", d),
            c && (a.style.font = c);
            var g = n.textPadding;
            if (d_(a, "x", r), d_(a, "y", s), p_(a, n, !0, t), t instanceof qS || t.style.transformText) c_(a, t.transform);
            else {
                if (t.transform) nE.copy(e),
                nE.applyTransform(t.transform),
                e = nE;
                else {
                    var m = t.transformCoordToGlobal(e.x, e.y);
                    e.x = m[0],
                    e.y = m[1],
                    t.transform = vt(mt())
                }
                var v = n.textOrigin;
                "center" === v ? (r = i.width / 2 + r, s = i.height / 2 + s) : v && (r = v[0] + r, s = v[1] + s);
                var y = -n.textRotation || 0,
                x = mt();
                wt(x, x, y),
                _t(x, x, m = [t.transform[4], t.transform[5]]),
                c_(a, x)
            }
            var _ = o.split("\n"),
            w = _.length,
            b = h;
            "left" === b ? (b = "start", g && (r += g[3])) : "right" === b ? (b = "end", g && (r -= g[1])) : "center" === b && (b = "middle", g && (r += (g[3] - g[1]) / 2));
            var S = 0;
            if ("after-edge" === d ? (S = -i.height + f, g && (S -= g[2])) : "middle" === d ? (S = ( - i.height + f) / 2, g && (s += (g[0] - g[2]) / 2)) : g && (S += g[0]), t.__text !== o || t.__textFont !== c) {
                var M = t.__tspanList || [];
                for (t.__tspanList = M, T = 0; T < w; T++)(A = M[T]) ? A.innerHTML = "": (A = M[T] = r_("tspan"), a.appendChild(A), d_(A, "alignment-baseline", d), d_(A, "text-anchor", b)),
                d_(A, "x", r),
                d_(A, "y", s + T * f + S),
                A.appendChild(document.createTextNode(_[T]));
                for (; T < M.length; T++) a.removeChild(M[T]);
                M.length = w,
                t.__text = o,
                t.__textFont = c
            } else if (t.__tspanList.length) for (var I = t.__tspanList.length,
            T = 0; T < I; ++T) {
                var A = t.__tspanList[T];
                A && (d_(A, "x", r), d_(A, "y", s + T * f + S))
            }
        }
    };
    iE.drawRectText = oE,
    iE.brush = function(t) {
        var e = t.style;
        null != e.text && (e.textPosition = [0, 0], oE(t, {
            x: e.x || 0,
            y: e.y || 0,
            width: 0,
            height: 0
        },
        t.getBoundingRect()))
    },
    v_.prototype = {
        diff: function(t, e, i) {
            i || (i = function(t, e) {
                return t === e
            }),
            this.equals = i;
            var n = this;
            t = t.slice();
            var o = (e = e.slice()).length,
            a = t.length,
            r = 1,
            s = o + a,
            l = [{
                newPos: -1,
                components: []
            }],
            u = this.extractCommon(l[0], e, t, 0);
            if (l[0].newPos + 1 >= o && u + 1 >= a) {
                for (var h = [], c = 0; c < e.length; c++) h.push(c);
                return [{
                    indices: h,
                    count: e.length
                }]
            }
            for (; r <= s;) {
                var d = function() {
                    for (var i = -1 * r; i <= r; i += 2) {
                        var s, u = l[i - 1],
                        h = l[i + 1],
                        c = (h ? h.newPos: 0) - i;
                        u && (l[i - 1] = void 0);
                        var d = u && u.newPos + 1 < o,
                        f = h && 0 <= c && c < a;
                        if (d || f) {
                            if (!d || f && u.newPos < h.newPos ? (s = x_(h), n.pushComponent(s.components, void 0, !0)) : ((s = u).newPos++, n.pushComponent(s.components, !0, void 0)), c = n.extractCommon(s, e, t, i), s.newPos + 1 >= o && c + 1 >= a) return y_(0, s.components);
                            l[i] = s
                        } else l[i] = void 0
                    }
                    r++
                } ();
                if (d) return d
            }
        },
        pushComponent: function(t, e, i) {
            var n = t[t.length - 1];
            n && n.added === e && n.removed === i ? t[t.length - 1] = {
                count: n.count + 1,
                added: e,
                removed: i
            }: t.push({
                count: 1,
                added: e,
                removed: i
            })
        },
        extractCommon: function(t, e, i, n) {
            for (var o = e.length,
            a = i.length,
            r = t.newPos,
            s = r - n,
            l = 0; r + 1 < o && s + 1 < a && this.equals(e[r + 1], i[s + 1]);) r++,
            s++,
            l++;
            return l && t.components.push({
                count: l
            }),
            t.newPos = r,
            s
        },
        tokenize: function(t) {
            return t.slice()
        },
        join: function(t) {
            return t.slice()
        }
    };
    var aE = new v_,
    rE = function(t, e, i) {
        return aE.diff(t, e, i)
    };
    __.prototype.createElement = r_,
    __.prototype.getDefs = function(t) {
        var e = this._svgRoot,
        i = this._svgRoot.getElementsByTagName("defs");
        return 0 === i.length ? t ? ((i = e.insertBefore(this.createElement("defs"), e.firstChild)).contains || (i.contains = function(t) {
            var e = i.children;
            if (!e) return ! 1;
            for (var n = e.length - 1; n >= 0; --n) if (e[n] === t) return ! 0;
            return ! 1
        }), i) : null: i[0]
    },
    __.prototype.update = function(t, e) {
        if (t) {
            var i = this.getDefs(!1);
            if (t[this._domName] && i.contains(t[this._domName]))"function" == typeof e && e(t);
            else {
                var n = this.add(t);
                n && (t[this._domName] = n)
            }
        }
    },
    __.prototype.addDom = function(t) {
        this.getDefs(!0).appendChild(t)
    },
    __.prototype.removeDom = function(t) {
        var e = this.getDefs(!1);
        e && t[this._domName] && (e.removeChild(t[this._domName]), t[this._domName] = null)
    },
    __.prototype.getDoms = function() {
        var t = this.getDefs(!1);
        if (!t) return [];
        var e = [];
        return d(this._tagNames,
        function(i) {
            var n = t.getElementsByTagName(i);
            e = e.concat([].slice.call(n))
        }),
        e
    },
    __.prototype.markAllUnused = function() {
        var t = this;
        d(this.getDoms(),
        function(e) {
            e[t._markLabel] = "0"
        })
    },
    __.prototype.markUsed = function(t) {
        t && (t[this._markLabel] = "1")
    },
    __.prototype.removeUnused = function() {
        var t = this.getDefs(!1);
        if (t) {
            var e = this;
            d(this.getDoms(),
            function(i) {
                "1" !== i[e._markLabel] && t.removeChild(i)
            })
        }
    },
    __.prototype.getSvgProxy = function(t) {
        return t instanceof kn ? tE: t instanceof hi ? eE: t instanceof qS ? iE: tE
    },
    __.prototype.getTextSvgElement = function(t) {
        return t.__textSvgEl
    },
    __.prototype.getSvgElement = function(t) {
        return t.__svgEl
    },
    u(w_, __),
    w_.prototype.addWithoutUpdate = function(t, e) {
        if (e && e.style) {
            var i = this;
            d(["fill", "stroke"],
            function(n) {
                if (e.style[n] && ("linear" === e.style[n].type || "radial" === e.style[n].type)) {
                    var o, a = e.style[n],
                    r = i.getDefs(!0);
                    a._dom ? (o = a._dom, r.contains(a._dom) || i.addDom(o)) : o = i.add(a),
                    i.markUsed(e);
                    var s = o.getAttribute("id");
                    t.setAttribute(n, "url(#" + s + ")")
                }
            })
        }
    },
    w_.prototype.add = function(t) {
        var e;
        if ("linear" === t.type) e = this.createElement("linearGradient");
        else {
            if ("radial" !== t.type) return Bw("Illegal gradient type."),
            null;
            e = this.createElement("radialGradient")
        }
        return t.id = t.id || this.nextId++,
        e.setAttribute("id", "zr" + this._zrId + "-gradient-" + t.id),
        this.updateDom(t, e),
        this.addDom(e),
        e
    },
    w_.prototype.update = function(t) {
        var e = this;
        __.prototype.update.call(this, t,
        function() {
            var i = t.type,
            n = t._dom.tagName;
            "linear" === i && "linearGradient" === n || "radial" === i && "radialGradient" === n ? e.updateDom(t, t._dom) : (e.removeDom(t), e.add(t))
        })
    },
    w_.prototype.updateDom = function(t, e) {
        if ("linear" === t.type) e.setAttribute("x1", t.x),
        e.setAttribute("y1", t.y),
        e.setAttribute("x2", t.x2),
        e.setAttribute("y2", t.y2);
        else {
            if ("radial" !== t.type) return void Bw("Illegal gradient type.");
            e.setAttribute("cx", t.x),
            e.setAttribute("cy", t.y),
            e.setAttribute("r", t.r)
        }
        t.global ? e.setAttribute("gradientUnits", "userSpaceOnUse") : e.setAttribute("gradientUnits", "objectBoundingBox"),
        e.innerHTML = "";
        for (var i = t.colorStops,
        n = 0,
        o = i.length; n < o; ++n) {
            var a = this.createElement("stop");
            a.setAttribute("offset", 100 * i[n].offset + "%"),
            a.setAttribute("stop-color", i[n].color),
            e.appendChild(a)
        }
        t._dom = e
    },
    w_.prototype.markUsed = function(t) {
        if (t.style) {
            var e = t.style.fill;
            e && e._dom && __.prototype.markUsed.call(this, e._dom),
            (e = t.style.stroke) && e._dom && __.prototype.markUsed.call(this, e._dom)
        }
    },
    u(b_, __),
    b_.prototype.update = function(t) {
        var e = this.getSvgElement(t);
        e && this.updateDom(e, t.__clipPaths, !1);
        var i = this.getTextSvgElement(t);
        i && this.updateDom(i, t.__clipPaths, !0),
        this.markUsed(t)
    },
    b_.prototype.updateDom = function(t, e, i) {
        if (e && e.length > 0) {
            var n, o, a = this.getDefs(!0),
            r = e[0],
            s = i ? "_textDom": "_dom";
            r[s] ? (o = r[s].getAttribute("id"), n = r[s], a.contains(n) || a.appendChild(n)) : (o = "zr" + this._zrId + "-clip-" + this.nextId, ++this.nextId, (n = this.createElement("clipPath")).setAttribute("id", o), a.appendChild(n), r[s] = n);
            var l = this.getSvgProxy(r);
            if (r.transform && r.parent.invTransform && !i) {
                var u = Array.prototype.slice.call(r.transform);
                xt(r.transform, r.parent.invTransform, r.transform),
                l.brush(r),
                r.transform = u
            } else l.brush(r);
            var h = this.getSvgElement(r);
            n.innerHTML = "",
            n.appendChild(h.cloneNode()),
            t.setAttribute("clip-path", "url(#" + o + ")"),
            e.length > 1 && this.updateDom(n, e.slice(1), i)
        } else t && t.setAttribute("clip-path", "none")
    },
    b_.prototype.markUsed = function(t) {
        var e = this;
        t.__clipPaths && t.__clipPaths.length > 0 && d(t.__clipPaths,
        function(t) {
            t._dom && __.prototype.markUsed.call(e, t._dom),
            t._textDom && __.prototype.markUsed.call(e, t._textDom)
        })
    },
    u(S_, __),
    S_.prototype.addWithoutUpdate = function(t, e) {
        if (e && M_(e.style)) {
            var i, n = e.style;
            n._shadowDom ? (i = n._shadowDom, this.getDefs(!0).contains(n._shadowDom) || this.addDom(i)) : i = this.add(e),
            this.markUsed(e);
            var o = i.getAttribute("id");
            t.style.filter = "url(#" + o + ")"
        }
    },
    S_.prototype.add = function(t) {
        var e = this.createElement("filter"),
        i = t.style;
        return i._shadowDomId = i._shadowDomId || this.nextId++,
        e.setAttribute("id", "zr" + this._zrId + "-shadow-" + i._shadowDomId),
        this.updateDom(t, e),
        this.addDom(e),
        e
    },
    S_.prototype.update = function(t, e) {
        var i = e.style;
        if (M_(i)) {
            var n = this;
            __.prototype.update.call(this, e,
            function(t) {
                n.updateDom(e, t._shadowDom)
            })
        } else this.remove(t, i)
    },
    S_.prototype.remove = function(t, e) {
        null != e._shadowDomId && (this.removeDom(e), t.style.filter = "")
    },
    S_.prototype.updateDom = function(t, e) {
        var i = e.getElementsByTagName("feDropShadow");
        i = 0 === i.length ? this.createElement("feDropShadow") : i[0];
        var n, o, a, r, s = t.style,
        l = t.scale ? t.scale[0] || 1 : 1,
        u = t.scale ? t.scale[1] || 1 : 1;
        if (s.shadowBlur || s.shadowOffsetX || s.shadowOffsetY) n = s.shadowOffsetX || 0,
        o = s.shadowOffsetY || 0,
        a = s.shadowBlur,
        r = s.shadowColor;
        else {
            if (!s.textShadowBlur) return void this.removeDom(e, s);
            n = s.textShadowOffsetX || 0,
            o = s.textShadowOffsetY || 0,
            a = s.textShadowBlur,
            r = s.textShadowColor
        }
        i.setAttribute("dx", n / l),
        i.setAttribute("dy", o / u),
        i.setAttribute("flood-color", r);
        var h = a / 2 / l + " " + a / 2 / u;
        i.setAttribute("stdDeviation", h),
        e.setAttribute("x", "-100%"),
        e.setAttribute("y", "-100%"),
        e.setAttribute("width", Math.ceil(a / 2 * 200) + "%"),
        e.setAttribute("height", Math.ceil(a / 2 * 200) + "%"),
        e.appendChild(i),
        s._shadowDom = e
    },
    S_.prototype.markUsed = function(t) {
        var e = t.style;
        e && e._shadowDom && __.prototype.markUsed.call(this, e._shadowDom)
    };
    var sE = function(t, e, i, n) {
        this.root = t,
        this.storage = e,
        this._opts = i = a({},
        i || {});
        var o = r_("svg");
        o.setAttribute("xmlns", "http://www.w3.org/2000/svg"),
        o.setAttribute("version", "1.1"),
        o.setAttribute("baseProfile", "full"),
        o.style.cssText = "user-select:none;position:absolute;left:0;top:0;",
        this.gradientManager = new w_(n, o),
        this.clipPathManager = new b_(n, o),
        this.shadowManager = new S_(n, o);
        var r = document.createElement("div");
        r.style.cssText = "overflow:hidden;position:relative",
        this._svgRoot = o,
        this._viewport = r,
        t.appendChild(r),
        r.appendChild(o),
        this.resize(i.width, i.height),
        this._visibleList = []
    };
    sE.prototype = {
        constructor: sE,
        getType: function() {
            return "svg"
        },
        getViewportRoot: function() {
            return this._viewport
        },
        getViewportRootOffset: function() {
            var t = this.getViewportRoot();
            if (t) return {
                offsetLeft: t.offsetLeft || 0,
                offsetTop: t.offsetTop || 0
            }
        },
        refresh: function() {
            var t = this.storage.getDisplayList(!0);
            this._paintList(t)
        },
        setBackgroundColor: function(t) {
            this._viewport.style.background = t
        },
        _paintList: function(t) {
            this.gradientManager.markAllUnused(),
            this.clipPathManager.markAllUnused(),
            this.shadowManager.markAllUnused();
            var e, i = this._svgRoot,
            n = this._visibleList,
            o = t.length,
            a = [];
            for (e = 0; e < o; e++) {
                var r = T_(f = t[e]),
                s = P_(f) || k_(f);
                f.invisible || (f.__dirty && (r && r.brush(f), this.clipPathManager.update(f), f.style && (this.gradientManager.update(f.style.fill), this.gradientManager.update(f.style.stroke), this.shadowManager.update(s, f)), f.__dirty = !1), a.push(f))
            }
            var l, u = rE(n, a);
            for (e = 0; e < u.length; e++) if ((c = u[e]).removed) for (d = 0; d < c.count; d++) {
                var s = P_(f = n[c.indices[d]]),
                h = k_(f);
                L_(i, s),
                L_(i, h)
            }
            for (e = 0; e < u.length; e++) {
                var c = u[e];
                if (c.added) for (d = 0; d < c.count; d++) {
                    var s = P_(f = a[c.indices[d]]),
                    h = k_(f);
                    l ? D_(i, s, l) : C_(i, s),
                    s ? D_(i, h, s) : l ? D_(i, h, l) : C_(i, h),
                    D_(i, h, s),
                    l = h || s || l,
                    this.gradientManager.addWithoutUpdate(s, f),
                    this.shadowManager.addWithoutUpdate(l, f),
                    this.clipPathManager.markUsed(f)
                } else if (!c.removed) for (var d = 0; d < c.count; d++) {
                    var f = a[c.indices[d]];
                    l = s = k_(f) || P_(f) || l,
                    this.gradientManager.markUsed(f),
                    this.gradientManager.addWithoutUpdate(s, f),
                    this.shadowManager.markUsed(f),
                    this.shadowManager.addWithoutUpdate(s, f),
                    this.clipPathManager.markUsed(f)
                }
            }
            this.gradientManager.removeUnused(),
            this.clipPathManager.removeUnused(),
            this.shadowManager.removeUnused(),
            this._visibleList = a
        },
        _getDefs: function(t) {
            var e = this._svgRoot,
            i = this._svgRoot.getElementsByTagName("defs");
            return 0 === i.length ? t ? ((i = e.insertBefore(r_("defs"), e.firstChild)).contains || (i.contains = function(t) {
                var e = i.children;
                if (!e) return ! 1;
                for (var n = e.length - 1; n >= 0; --n) if (e[n] === t) return ! 0;
                return ! 1
            }), i) : null: i[0]
        },
        resize: function(t, e) {
            var i = this._viewport;
            i.style.display = "none";
            var n = this._opts;
            if (null != t && (n.width = t), null != e && (n.height = e), t = this._getSize(0), e = this._getSize(1), i.style.display = "", this._width !== t || this._height !== e) {
                this._width = t,
                this._height = e;
                var o = i.style;
                o.width = t + "px",
                o.height = e + "px";
                var a = this._svgRoot;
                a.setAttribute("width", t),
                a.setAttribute("height", e)
            }
        },
        getWidth: function() {
            return this._width
        },
        getHeight: function() {
            return this._height
        },
        _getSize: function(t) {
            var e = this._opts,
            i = ["width", "height"][t],
            n = ["clientWidth", "clientHeight"][t],
            o = ["paddingLeft", "paddingTop"][t],
            a = ["paddingRight", "paddingBottom"][t];
            if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]);
            var r = this.root,
            s = document.defaultView.getComputedStyle(r);
            return (r[n] || I_(s[i]) || I_(r.style[i])) - (I_(s[o]) || 0) - (I_(s[a]) || 0) | 0
        },
        dispose: function() {
            this.root.innerHTML = "",
            this._svgRoot = this._viewport = this.storage = null
        },
        clear: function() {
            this._viewport && this.root.removeChild(this._viewport)
        },
        pathToDataUrl: function() {
            return this.refresh(),
            "data:image/svg+xml;charset=UTF-8," + this._svgRoot.outerHTML
        }
    },
    d(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"],
    function(t) {
        sE.prototype[t] = N_(t)
    }),
    Ti("svg", sE),
    t.version = "4.2.0",
    t.dependencies = wT,
    t.PRIORITY = IT,
    t.init = function(t, e, i) {
        var n = Ds(t);
        if (n) return n;
        var o = new rs(t, e, i);
        return o.id = "ec_" + WT++,
        FT[o.id] = o,
        Gi(t, ZT, o.id),
        Ts(o),
        o
    },
    t.connect = function(t) {
        if (y(t)) {
            var e = t;
            t = null,
            vT(e,
            function(e) {
                null != e.group && (t = e.group)
            }),
            t = t || "g_" + HT++,
            vT(e,
            function(e) {
                e.group = t
            })
        }
        return GT[t] = !0,
        t
    },
    t.disConnect = As,
    t.disconnect = jT,
    t.dispose = function(t) {
        "string" == typeof t ? t = FT[t] : t instanceof rs || (t = Ds(t)),
        t instanceof rs && !t.isDisposed() && t.dispose()
    },
    t.getInstanceByDom = Ds,
    t.getInstanceById = function(t) {
        return FT[t]
    },
    t.registerTheme = Cs,
    t.registerPreprocessor = Ls,
    t.registerProcessor = ks,
    t.registerPostUpdate = function(t) {
        ET.push(t)
    },
    t.registerAction = Ps,
    t.registerCoordinateSystem = Ns,
    t.getCoordinateSystemDimensions = function(t) {
        var e = Ba.get(t);
        if (e) return e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice()
    },
    t.registerLayout = Os,
    t.registerVisual = zs,
    t.registerLoading = Rs,
    t.extendComponentModel = Bs,
    t.extendComponentView = Vs,
    t.extendSeriesModel = Fs,
    t.extendChartView = Gs,
    t.setCanvasCreator = function(t) {
        e("createCanvas", t)
    },
    t.registerMap = function(t, e, i) {
        pT.registerMap(t, e, i)
    },
    t.getMap = function(t) {
        var e = pT.retrieveMap(t);
        return e && e[0] && {
            geoJson: e[0].geoJSON,
            specialAreas: e[0].specialAreas
        }
    },
    t.dataTool = YT,
    t.zrender = Pb,
    t.number = NM,
    t.format = GM,
    t.throttle = Cr,
    t.helper = BA,
    t.matrix = fw,
    t.vector = nw,
    t.color = Pw,
    t.parseGeoJSON = FA,
    t.parseGeoJson = ZA,
    t.util = jA,
    t.graphic = YA,
    t.List = eA,
    t.Model = Lo,
    t.Axis = HA,
    t.env = R_
}),
function(t, e) {
    "function" == typeof define && define.amd ? define(["exports", "echarts"], e) : "object" == typeof exports && "string" != typeof exports.nodeName ? e(exports, require("echarts")) : e({},
    t.echarts)
} (this,
function(t, e) {
    var i = function(t) {
        "undefined" != typeof console && console && console.error && console.error(t)
    };
    return e ? e.registerMap ? void e.registerMap("china", {
        type: "FeatureCollection",
        features: [{
            id: "710000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@°Ü¯Û"], ["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤǊŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃǋƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ"], ["@@\\p|WoYG¿¥Ij@¢"], ["@@¡@V^RqBbAnTXeRz¤L«³I"], ["@@ÆEEkWqë @"], ["@@fced"]],
                encodeOffsets: [[[122886, 24033]], [[123335, 22980]], [[122375, 24193]], [[122518, 24117]], [[124427, 22618]], [[124862, 26043]]]
            },
            properties: {
                cp: [121.509062, 25.044332],
                name: "台湾",
                childNum: 6
            }
        },


        {
            id: "220100",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [125.330253, 43.822795],
                name: "长春",
                childNum: 3
            }
        },

        {
            id: "210200",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [121.621314, 38.919658],
                name: "大连",
                childNum: 3
            }
        },

        {
            id: "210200",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [113.398916, 22.523334],
                name: "中山",
                childNum: 3
            }
        },

        {
            id: "441300",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [114.422152, 23.117972],
                name: "惠州",
                childNum: 3
            }
        },

        {
            id: "420300",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [110.805406, 32.634872],
                name: "十堰",
                childNum: 3
            }
        },

        {
            id: "320200",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [120.318628,31.497438],
                name: "无锡",
                childNum: 3
            }
        },

        {
            id: "520300",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [107.037932, 27.72829],
                name: "遵义",
                childNum: 3
            }
        },

        {
            id: "520300",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [104.145347, 36.551311],
                name: "白银",
                childNum: 3
            }
        },

        {
            id: "630100",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [101.784562, 36.623236],
                name: "西宁",
                childNum: 3
            }
        },
    
        {
            id: "510600",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [104.40423, 31.133802],
                name: "德阳",
                childNum: 3
            }
        },

        {
            id: "130400",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [114.545794, 36.631466],
                name: "邯郸",
                childNum: 3
            }
        },

        {
            id: "370200",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [120.389104, 36.073007],
                name: "青岛",
                childNum: 3
            }
        },

        {
            id: "320600",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [120.901068, 31.986888],
                name: "南通",
                childNum: 3
            }
        },

        {
            id: "320600",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [120.901068, 31.986888],
                name: "大同",
                childNum: 3
            }
        },

        {
            id: "370481",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [117.172328, 35.119764],
                name: "滕州",
                childNum: 3
            }
        },

        {
            id: "130700",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [114.892465, 40.774726],
                name: "张家口",
                childNum: 3
            }
        },

        {
            id: "131000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [117.172328, 35.119764],
                name: "廊坊",
                childNum: 3
            }
        },

        {
            id: "441900",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [113.758184, 23.027314],
                name: "东莞",
                childNum: 3
            }
        },

        {
            id: "150200",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [109.960154, 40.627791],
                name: "包头",
                childNum: 3
            }
        },

        {
            id: "131100",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [115.6754, 37.745691],
                name: "衡水",
                childNum: 3
            }
        },

        {
            id: "370300",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [118.06151, 36.819783],
                name: "淄博",
                childNum: 3
            }
        },

        {
            id: "320500",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [120.591682, 31.305976],
                name: "苏州",
                childNum: 3
            }
        },

        {
            id: "130000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@o~Z]ªrºc_ħ²G¼s`jÎŸnüsÂłNX_M`Ç½ÓnUKĜēs¤­©yrý§uģcJe"], ["@@U`Ts¿mÂ"], ["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒ­QgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ ǆiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°N«úmH¯âDùyŜŲIÄuĐ¨D¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu{Z}Ö@U´ʚLg®¯Oı°Ãw ^VbÉsmAê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅn­a@³@ďyÃ½IĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«PËµEFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅ­aVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MÃ°oťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœK­UFyƝīÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥Ípǅ¡KąÅkĝęěhq}HyÃ]¹ǧ£Í÷¿qáµ§g¤o^á¾ZE¤i`ĳ{nOl»WÝĔįhgF[¿¡ßkOüš_ūiǱàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],
                encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
            },
            properties: {
                cp: [114.5625, 38.048608],
                name: "石家庄",
                childNum: 3
            }
        },
        {
            id: "140000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTSË¹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PG­ąSM­EÅruµéYÓŌ_dĒCo­Èµ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]­±cÝ¯ÑÃmQÍ~_apm~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötÎ½î¼ĨXh|ªM¤Ðz"],
                encodeOffsets: [[116874, 41716]]
            },
            properties: {
                cp: [112.559558, 37.844555],
                name: "太原",
                childNum: 1
            }
        },
        {
            id: "150000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@Č^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛMĀ[bÓEn}¶Vcês¯PqFB|S³C|kñHdiÄ¥sŉÅPóÑÑE^ÅPpy_YtShQ·aHwsOnŉÃs©iqjUSiº]ïW«gW¡ARëśĳĘů`çõh]y»ǃǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧż؜Ġu¦ö"], ["@@sKCGS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdŉ_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋǅFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İÐ¢æ^Ŋ ĲȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©­ȇÍq¯½YÃÔŉÉNÑÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌŉŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ç¼ȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘǊ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKǳͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞǆŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦĀ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°ǆdÀÉ_ĸdîàŎjÊêTĞªŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\T×ªV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀĎ°P|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£ç­kX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬qehqsuH{¸kH¡ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ż؛Ç@Vu»Aylßí¹ĵêÝlISò³C¹Ìâ²i¶Ìoú^H²CǜңǄ z¼g^èöŰ_Ĳĕê}gÁnUI«m]jvV¼euhwqAaW_µj»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkÅ¹£k|e]olkVÍ¼ÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉ³MEĸÅĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐç¦«SÒ¥¸ëBX½HáÅµÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·­ząÒot×¶CLƗi¯¤mƎHǊ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjbÂ£ĦS_éQZ_lwgOiýe`YYLq§IÁǳ£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQ­ōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}×Wu©ÅaųĳƳhB{·TQqÙIķËZđ©Yc|M¡LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}wVaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėǅjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšǅ_ÃĀɗ±ąĳĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µ"]],
                encodeOffsets: [[[127444, 52594]], [[113793, 40312]]]
            },
            properties: {
                cp: [111.705883, 40.843637],
                name: "内蒙古",
                childNum: 2
            }
        },
        {
            id: "210000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@L@@sa"], ["@@MnNm"], ["@@dc"], ["@@eÀC@b"], ["@@fXwkbrÄ`qg"], ["@@^jtWQ"], ["@@~ Y]c"], ["@@G`ĔN^_¿ZÃM"], ["@@iX¶BY"], ["@@YZ"], ["@@L_{Epf"], ["@@^WqCT\\"], ["@@\\[§t|¤_"], ["@@m`n_"], ["@@Ïxǌ{q_×^Giip"], ["@@@é^BntaÊU]x ¯ÄPĲ­°hʙK³VÕ@Y~|EvĹsÇ¦­L^pÃ²ŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSČ¦ªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁH­kçvV[ĳ¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľãÂ¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXm­ÛÝºGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţÃ«V·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćOk^ģÁFıĉĥM­oEqqZûěŉ³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ŉVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSh­a[¦´ÂghwmBÐ¨źhI|VV|p] Â¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlĳ¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA"]],
                encodeOffsets: [[[123686, 41445]], [[126019, 40435]], [[124393, 40128]], [[126117, 39963]], [[125322, 40140]], [[126686, 40700]], [[126041, 40374]], [[125584, 40168]], [[125453, 40165]], [[125362, 40214]], [[125280, 40291]], [[125774, 39997]], [[125976, 40496]], [[125822, 39993]], [[125509, 40217]], [[122731, 40949]]]
            },
            properties: {
                cp: [123.429096, 41.796767],
                name: "辽宁",
                childNum: 16
            }
        },
        {
            id: "220000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@pä³PClFbbÍzwBGĭZÅi»lY­ċ²SgkÇ£^Sqd¯R©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£R}oªU­FuuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀ­XXÈ±AeyYw¬dvõ´KÊ£\\rµÄlidā]|î©¾DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð¼¤ N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨­JYlďQ[ ÏYëÐ§TGztnß¡gFkMāGÁ¤ia ÉÈ¹`\\xs¬dĆkNnuNUuP@vRY¾\\¢GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽŉíëǉ£ƍG£nj°KƘµDsØÑpyĆ¸®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±­HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TÑ¬è¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZÐ²CH AxiukdGgetqmcÛ£Ozy¥cE}|¾cZk¿uŐã[oxGikfeäT@SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚĳ¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌǲÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀÄ¾{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎs­lyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`­©GMehccďÏd©ÑW_ÏYƅ»é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_Ã½L¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~YÇG"],
                encodeOffsets: [[130196, 42528]]
            },
            properties: {
                cp: [125.3245, 43.886841],
                name: "吉林",
                childNum: 1
            }
        },
        {
            id: "230000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@ƨĶTLÇyqpÇÛqe{~oyen}s`qiXGù]Ëp½©lÉÁp]Þñ´FĂ^fäîºkàz¼BUvÈ@"], ["@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝǱÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűÑ±ĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tŽ¸ĻN_yX`biNKuP£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇµf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ćUÕ@Áĳſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒǄàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËÜ˛ɶ­GxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±Ǆ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNÍ½ƎÁ§čŐAēeL³àydl¦ĘVçŁpśǆĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr­°oú¬ĦŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E å¯°WKÉ±_d_}}vyõu¬ï¹ÓU±½@gÏ¿rÃ½DgCdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭǊË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYRŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]"]],
                encodeOffsets: [[[127123, 51780]], [[134456, 44547]]]
            },
            properties: {
                cp: [126.642464, 45.756967],
                name: "黑龙江",
                childNum: 2
            }
        },
        {
            id: "320000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D­¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtĲyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfåqm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıǅ_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK¤½phMü`oæŀ"],
                encodeOffsets: [[121740, 32276]]
            },
            properties: {
                cp: [119.999263, 31.817636],
                name: "江苏",
                childNum: 1
            }
        },
        {
            id: "330000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@E^dQ]K"], ["@@jX^j"], ["@@sfbU"], ["@@qP\\xz[ck"], ["@@R¢FX}°[s_"], ["@@Cb\\}"], ["@@e|v\\la{u"], ["@@v~u}"], ["@@QxÂF¯}"], ["@@¹nvÞs¯o"], ["@@rSkUEj"], ["@@bi­ZP"], ["@@p[}INf"], ["@@À¿"], ["@@¹dnb"], ["@@rSBnR"], ["@@g~h}"], ["@@FlEk"], ["@@OdPc"], ["@@v[u\\"], ["@@FjâL~wyoo~sµL\\"], ["@@¬e¹aN"], ["@@\\nÔ¡q]L³ë\\ÿ®QÖ"], ["@@ÊA­©[¬"], ["@@Kxv­"], ["@@@hlIk]"], ["@@pW{o||j"], ["@@Md|_mC"], ["@@¢X£ÏylD¼XtH"], ["@@hlÜ[LykAvyfw^E¤"], ["@@fp¤MusR"], ["@@®_ma~LÁ¬Z"], ["@@iMxZ"], ["@@ZcYd"], ["@@Z~dOSo|A¿qZv"], ["@@@`EN¡v"], ["@@|TY{"], ["@@@n@m"], ["@@XWkCT\\"], ["@@ºwZRkĕWO¢"], ["@@X®±GrÆª\\ÔáXq{"], ["@@ůTG°ĄLHm°UC"], ["@@¤aÜx~}dtüGæţŎíĔcŖpMËÐjē¢·ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗŉåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯QªmĉÅdMgÇjcº«ę¬­K­´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹­ģSĜkáƉÔ­ĈZB{aMµfzŉfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®\\ßðChiqªĭiAuA­µ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×­­\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@PúØz©Pî¢£CÈÚĒ±hŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxØ¨IÈhhst"], ["@@o\\VzRZ}y"], ["@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr"]],
                encodeOffsets: [[[125592, 31553]], [[125785, 31436]], [[125729, 31431]], [[125513, 31380]], [[125223, 30438]], [[125115, 30114]], [[124815, 29155]], [[124419, 28746]], [[124095, 28635]], [[124005, 28609]], [[125e3, 30713]], [[125111, 30698]], [[125078, 30682]], [[125150, 30684]], [[124014, 28103]], [[125008, 31331]], [[125411, 31468]], [[125329, 31479]], [[125626, 30916]], [[125417, 30956]], [[125254, 30976]], [[125199, 30997]], [[125095, 31058]], [[125083, 30915]], [[124885, 31015]], [[125218, 30798]], [[124867, 30838]], [[124755, 30788]], [[124802, 30809]], [[125267, 30657]], [[125218, 30578]], [[125200, 30562]], [[124968, 30474]], [[125167, 30396]], [[124955, 29879]], [[124714, 29781]], [[124762, 29462]], [[124325, 28754]], [[123990, 28459]], [[125366, 31477]], [[125115, 30363]], [[125369, 31139]], [[122495, 31878]], [[125329, 30690]], [[125192, 30787]]]
            },
            properties: {
                cp: [120.153576, 30.287459],
                name: "浙江",
                childNum: 45
            }
        },
        {
            id: "340000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@^iuLX^"], ["@@e©Ehl"], ["@@°ZÆëĎµmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxĲkq^³³GšµbíZ¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjChß¸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜÆ¶ĊJhpc¹O]iŠ]¥ jtsggJÇ§w×jÉ©±EFË­KiÛÃÕYvsm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mwRIÞfßoG³¾©uyHį{Ɓħ¯AFnuPÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEÐ·ÖdÖsƘÑ¨[Û^Xr¢¼§xvÄÆµ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔēßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴĖ¶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³]u}fïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųÆ©Þ¤OÈm°K´"]],
                encodeOffsets: [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]]
            },
            properties: {
                cp: [117.283042, 31.86119],
                name: "安徽",
                childNum: 3
            }
        },
        {
            id: "350000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@zht´]"], ["@@aj^~ĆG©O"], ["@@ed¨C}}i"], ["@@@vPGsQ"], ["@@sBzddW]Q"], ["@@S¨Q{"], ["@@NVucW"], ["@@qptBAq"], ["@@¸[mu"], ["@@Q\\pD]_"], ["@@jSwUadpF"], ["@@eXª~"], ["@@AjvFso"], ["@@fT_Çí\\v|ba¦jZÆy°"], ["@@IjJi"], ["@@wJIx«¼AoNe{M­"], ["@@K±¡ÓČäeZ"], ["@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢QqÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBycpě¼³Ăp·¤¥ohqqÚ¡ŅLs^Ã¡§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcÝ§SùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņĲg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶĲHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AÎ¦ĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡­«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F¼ÍË»ğV`«Ip}ccÅĥZEãoP´B@D¸m±z«Ƴ¿å³BRØ¶Wlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLŉËĥW[ÂGIÂNxĳ¤D¢îĎÎB§°_JGs¥E@¤ućPåcuMuw¢BI¿]zG¹guĮck\\_"]],
                encodeOffsets: [[[123250, 27563]], [[122541, 27268]], [[123020, 27189]], [[122916, 27125]], [[122887, 26845]], [[122808, 26762]], [[122568, 25912]], [[122778, 26197]], [[122515, 26757]], [[122816, 26587]], [[123388, 27005]], [[122450, 26243]], [[122578, 25962]], [[121255, 25103]], [[120987, 24903]], [[122339, 25802]], [[121042, 25093]], [[122439, 26024]]]
            },
            properties: {
                cp: [119.306239, 26.075302],
                name: "福建",
                childNum: 18
            }
        },
        {
            id: "360000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZØ¨zdÒa¶lÒJìõ`oz÷@¤uŞ¸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U  ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjt­ĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®QgÄWiØPÞìºr¤ǆNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬^DhÆyøJhØxĢĀLÊƠPżċĄwȠĚ¦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀW­EµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQYBąrwģcÍ¥B­ŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluīBÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJh­ŅıNȩĕB¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤­¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~­`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²"],
                encodeOffsets: [[116689, 26234]]
            },
            properties: {
                cp: [115.892151, 28.676493],
                name: "江西",
                childNum: 1
            }
        },
        {
            id: "370000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@Xjd]{K"], ["@@itbFHy"], ["@@HlGk"], ["@@TGy"], ["@@K¬U"], ["@@WdXc"], ["@@PtOs"], ["@@LnXhc"], ["@@ppVu]Or"], ["@@cdzAUa"], ["@@udRhnCI"], ["@@oIpR"], ["@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆǆ¢Îo¦cvKbgr°WhmZp L]LºcUÆ­nżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐĖ¹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéÃµė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lCMrDÇ­]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïWuøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxÃ£Č×GDyÃ¤ÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶G­Y§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGuIZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸YI] PumŝrƿIā[xeÇ³L¯v¯s¬ÁY~}ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM­³FÛWp["]],
                encodeOffsets: [[[123806, 39303]], [[123821, 39266]], [[123742, 39256]], [[123702, 39203]], [[123649, 39066]], [[123847, 38933]], [[123580, 38839]], [[123894, 37288]], [[123043, 36624]], [[123344, 38676]], [[123522, 38857]], [[123628, 38858]], [[118260, 36742]]]
            },
            properties: {
                cp: [118.335115, 35.074713],
                name: "临沂",
                childNum: 13
            }
        },
        {
            id: "410000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØxÂ¶@«ŕŕQGYfa[şußǩđš_X³ĳÕčC]kbc¥CS¯ëÍB©÷³­Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏ­ľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@­C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr|­J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQĹ¤]MÛfaQpě±ǽ¾]u­Fu÷nčÄ¯ADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íÄ³gfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvÆ¶N¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsǲßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"],
                encodeOffsets: [[118256, 37017]]
            },
            properties: {
                cp: [113.689608, 34.824767],
                name: "郑州",
                childNum: 1
            }
        },

        {
            id: "412901",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØxÂ¶@«ŕŕQGYfa[şußǩđš_X³ĳÕčC]kbc¥CS¯ëÍB©÷³­Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏ­ľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@­C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr|­J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQĹ¤]MÛfaQpě±ǽ¾]u­Fu÷nčÄ¯ADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íÄ³gfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvÆ¶N¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsǲßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"],
                encodeOffsets: [[112256, 30017]]
            },
            properties: {
                cp: [112.530947, 33.003187],
                name: "南阳",
                childNum: 1
            }
        },
        {
            id: "420601",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØxÂ¶@«ŕŕQGYfa[şußǩđš_X³ĳÕčC]kbc¥CS¯ëÍB©÷³­Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏ­ľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@­C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr|­J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQĹ¤]MÛfaQpě±ǽ¾]u­Fu÷nčÄ¯ADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íÄ³gfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvÆ¶N¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsǲßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"],
                encodeOffsets: [[112256, 30017]]
            },
            properties: {
                cp: [112.137513, 32.076922],
                name: "襄阳",
                childNum: 1
            }
        },
        {
            id: "420000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@AB"], ["@@lskt"], ["@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPLÂ¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēĲ}Z³½Mŧïeyp·uk³DsÑ¨L¶_ÅuÃ¨w»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bp­rf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ Ñb­ŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹­[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fćQÑÀQ{°fLÔ~wXgītêÝ¾ĺHd³fJd]HJ²EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆĢ¶ÛodĔňÐ¢JqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²­h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdÊ§ĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"]],
                encodeOffsets: [[[113712, 34e3]], [[115612, 30507]], [[113649, 34054]]]
            },
            properties: {
                cp: [111.30467, 30.706219],
                name: "宜昌",
                childNum: 3
            }
        },
            {
                id: "420101",
                type: "Feature",
                geometry: {
                    type: "MultiPolygon",
                    coordinates: [["@@AB"], ["@@lskt"], ["@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPLÂ¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēĲ}Z³½Mŧïeyp·uk³DsÑ¨L¶_ÅuÃ¨w»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bp­rf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ Ñb­ŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹­[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fćQÑÀQ{°fLÔ~wXgītêÝ¾ĺHd³fJd]HJ²EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆĢ¶ÛodĔňÐ¢JqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²­h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdÊ§ĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"]],
                    encodeOffsets: [[[113712, 34e3]], [[115612, 30507]], [[113649, 34054]]]
                },
                properties: {
                    cp: [114.297867, 30.584436],
                    name: "武汉",
                    childNum: 3
                }
            },
        {
            id: "430000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@nFTs"], ["@@ßÅÆá½ÔXrCOËRïÿĩ­TooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚĳ¥ÏĢ¾edÄ©ĸGàGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"], ["@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylXHËÑ±H«C^õľAÅ§¤É¥ïyuǙuA¢^{ÌC´­¦ŷJ£^[ª¿ĕ~ƇN skóā¹¿ï]ă~÷O§­@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ ĲĪ²SÊǄŶ¨ƚCÖŎªQØ¼rŭ­«}NÏürÊ¬mjr@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`PDiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZaZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶DôK|^ª°LX¾ŴäPĪ±£EXd^¶ĲÞÜ~u¸ǔMRhsRe`ÄofIÔ\\Ø  ićymnú¨cj ¢»GČìƊÿÐ¨XeĈĀ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnÐºG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőĞ¤ùTz²CȆȸǎŪƑÐc°dPÎğË¶[È½u¯½WM¡­ÉB·rínZÒ `¨GA¾\\pēXhÃRC­üWGġuTé§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõó·³vŝ£ø@pyö_ëIkÑµbcÑ§y×dYØªiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ"]],
                encodeOffsets: [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]]
            },
            properties: {
                cp: [112.982279, 28.19409],
                name: "湖南",
                childNum: 3
            }
        },
        {
            id: "440000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@QdAua"], ["@@lxDLo"], ["@@sbhNLo"], ["@@Ă ā"], ["@@WltO[["], ["@@Kr]S"], ["@@eI]y"], ["@@I|Mym"], ["@@Û³LS¼Y"], ["@@nvºBëui©`¾"], ["@@zdÛJw®"], ["@@°¯"], ["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"], ["@@sŗÃÔėAƁZÄ ~°ČPäh"], ["@@¶ÝÌvmĞh­ıQ"], ["@@HdSjĒ¢D}waru«ZqadYM"], ["@@el\\LqqU"], ["@@~rMo\\"], ["@@f^C"], ["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"], ["@@gÇƳo[~tly"], ["@@EÆC¿"], ["@@OP"], ["@@wđógĝ[³¡VÙæÅöMÌ³¹pÁaËýý©D©ÜJŹƕģGą¤{ÙūÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}ŭĲWÈCőâUâǙIğŉ©IĳE×Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊÌ²iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\¤]ŸI®¥D³|Ë]CöAŤ¦æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xNË²@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIÇª`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCIözx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧÎ¡ÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUÃ¯mRCºĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªŉOeÚtĐ«zđ¹TāúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀǇğ·¿ÃOj YÇ÷Qěi"]],
                encodeOffsets: [[[117381, 22988]], [[116552, 22934]], [[116790, 22617]], [[116973, 22545]], [[116444, 22536]], [[116931, 22515]], [[116496, 22490]], [[116453, 22449]], [[113301, 21439]], [[118726, 21604]], [[118709, 21486]], [[113210, 20816]], [[115482, 22082]], [[113171, 21585]], [[113199, 21590]], [[115232, 22102]], [[115739, 22373]], [[115134, 22184]], [[113056, 21175]], [[119573, 21271]], [[119957, 24020]], [[115859, 22356]], [[116561, 22649]], [[116285, 22746]]]
            },
            properties: {
                cp: [113.39466, 23.133205],
                name: "广州",
                childNum: 24
            }
        },
        {
            id: "450000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@H TQ§A"], ["@@ĨÊªLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H­[~|aB£ÖsºdAĐzNÂðsÞÆĤªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºNĳd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZgčP­kini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYĲvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FĻ¼Ĺ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[BÑÏGáşşƇeăYSs­FQ}­BwtYğÃ@~CÍQ ×WjË±rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±dy¹T^dûÅÑŦ·PĻþÙ`K¦¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺĐ¨c}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢Jî¶²"]],
                encodeOffsets: [[[111707, 21520]], [[107619, 25527]]]
            },
            properties: {
                cp: [108.320004, 22.82402],
                name: "广西",
                childNum: 2
            }
        },
        {
            id: "460000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉ­ƅſȓÒË¦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀÐ¾jNðĀÒRZǆzÐŘÎ°H¨Ƣb²_Ġ "],
                encodeOffsets: [[112750, 20508]]
            },
            properties: {
                cp: [110.33119, 20.031971],
                name: "海南",
                childNum: 1
            }
        },
        {
            id: "510000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@LqKr"], ["@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«­T¤JJJyJÈ`Ohß¦¡uËhIyCjmÿwZGTiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhÜ¸ºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO­½a[×]`Ãi­üL¦LabbTÀåc}ÍhÆh®BHî|îºÉk­¤Sy£ia©taį·Ɖ`ō¥UhOĝLk}©Fos´JmµlŁuønÑJWÎªYÀïAetTŅÓGË«bo{ıwodƟ½OġÜÂµxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌÐ§nÇ¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtÇ¤V»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒćhG¬CMõƤąAvüVéŀ_VÌ³ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²ĠþTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§di´ezÝúØã]HqkIþËQÇ¦ÃsÇ¤[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæQPJvÄz^Đ¹Æ¯fLà´GC²dt­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ­]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@­Ŏk\\Ç´£YW}z@Z}Ã¶oû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖÉªXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkĳnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFÎ¤¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xÃ¤JÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEbee_v¡}ìęǊē}qÉåT¯µRs¡M@}ůaa­¯wvƉåZw\\Z{åû^"]],
                encodeOffsets: [[[108815, 30935]], [[110617, 31811]]]
            },
            properties: {
                cp: [103.879313, 30.697256],
                name: "成都 ",
                childNum: 2
            }
        },
        {
            id: "510000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@LqKr"], ["@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«­T¤JJJyJÈ`Ohß¦¡uËhIyCjmÿwZGTiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhÜ¸ºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO­½a[×]`Ãi­üL¦LabbTÀåc}ÍhÆh®BHî|îºÉk­¤Sy£ia©taį·Ɖ`ō¥UhOĝLk}©Fos´JmµlŁuønÑJWÎªYÀïAetTŅÓGË«bo{ıwodƟ½OġÜÂµxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌÐ§nÇ¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtÇ¤V»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒćhG¬CMõƤąAvüVéŀ_VÌ³ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²ĠþTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§di´ezÝúØã]HqkIþËQÇ¦ÃsÇ¤[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæQPJvÄz^Đ¹Æ¯fLà´GC²dt­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ­]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@­Ŏk\\Ç´£YW}z@Z}Ã¶oû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖÉªXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkĳnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFÎ¤¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xÃ¤JÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEbee_v¡}ìęǊē}qÉåT¯µRs¡M@}ůaa­¯wvƉåZw\\Z{åû^"]],
                encodeOffsets: [[[108815, 30935]], [[110617, 31811]]]
            },
            properties: {
                cp: [104.080352, 30.665708],
                name: "成都",
                childNum: 2
            }
        },
        {
            id: "520000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@G\\lY£in"], ["@@q|mc¯tÏVSÎ"], ["@@hÑ£IsNgßHHªķÃh_¹¡ĝÄ§ń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaDK°ºâ_£ùbµmÁÛĹM[q|hlaªāI}Ñµ@swtwm^oµDéĽŠyVky°ÉûÛR³e¥]RÕěħ[ƅåÛDpJiVÂF²I»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáGçş§ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[KvJPhèhCrĂĚÂ^Êƌ wZL­Ġ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾Eì¬¬ôxÌO¢ K³ŀºäYPVgŎ¦ŊmŞ¼VZwVlz¤£Tl®ctĽÚó{G­AÇge~Îd¿æaSba¥KKûj®_Ä^\\Ø¾bP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢ÆÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Áëº°rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_ÃftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ĳ­½"]],
                encodeOffsets: [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]]
            },
            properties: {
                cp: [106.686249, 26.572065],
                name: "贵阳",
                childNum: 3
            }
        },
        {
            id: "530000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅ­F¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hW­æßUËs¡¦}teèÆ¶StÇÇ}Fd£jĈZĆÆ¤Tč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ  ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈ­AÎô¶RäQ^Øu¬°_Èôc´¹ò¨PÎ¢hlĎ¦´ĦÆ´sâÇŲPnÊD^¯°Upv}®BPÌªjǬxSöwlfòªvqĸ|`H­viļndĜ­Ćhňem·FyÞqóSį¯³X_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CD­hMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VØ¸E^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fÇ¸Yi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\Ī¼Ä£UsÈ¯LbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcĲx|apÌ¬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿SrEFsÕūkóVǥŉiTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^É±ćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏÉ¸½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HAàÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹ÅË^»f³ø}Q¡ÖË³gÍ±^Ç\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªĳ¶ŉÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`"],
                encodeOffsets: [[104636, 22969]]
            },
            properties: {
                cp: [102.712251, 25.040609],
                name: "云南",
                childNum: 1
            }
        },
        {
            id: "540000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ£ZUDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖk­uRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾÆºcxwf]Y´¦|QLn°adĊ\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|Ł¦Av¦w`ăaÝaa­¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´­xA sÂtŎKzó´ÇĊµ¢r^nĊ­Æ¬×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±Hãd«g[Ø¼ēÀcīľġ¬cJµÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIĳÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k­´ÓH@Â¹TZ¥¢į·ÌAÐ§®Zcv½Z­¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉTå»£TđWxq¹Zobs[×¯cĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`Ü³ç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSÄ³Yo|Ç[Ç¾µMW¢ĭiÕØ¿@MhpÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸cbU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®ó­L·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kné§żćĆKĒ°¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴÀBon|H@Êx¦BpŰŌ¿fµƌA¾zǈRx¶FkĄźRzŀ~¶[´HnªVƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxǆBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"],
                encodeOffsets: [[90849, 37210]]
            },
            properties: {
                cp: [91.132212, 29.660361],
                name: "西藏",
                childNum: 1
            }
        },
            {
                id: "612101",
                type: "Feature",
                geometry: {
                    type: "Polygon",
                    coordinates: ["@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌǆ¬stRÆdĠİwÜ¸ôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTÎ¨ÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sŉǷY¹W@µ÷Kãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅY¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuĳ|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DØ¯C´ŉƒópģ}ċcEËFéGU¥×K§­¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQOÿEËßŚĤNĔwƇÄńwĪ­o[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇÏ³­ħZ«mJ×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡­°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OĻ¹S|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬­F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi^MicĎ°Â[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^­ŵMThĠÜ¤ko¼Ŏìąǜh`[tRd²Ĳ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpĲÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"],
                    encodeOffsets: [[110234, 38774]]
                },
                properties: {
                    cp: [109.501561, 34.519081],
                    name: "渭南",
                    childNum: 1
                }
            },
        {
            id: "610000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌǆ¬stRÆdĠİwÜ¸ôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTÎ¨ÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sŉǷY¹W@µ÷Kãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅY¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuĳ|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DØ¯C´ŉƒópģ}ċcEËFéGU¥×K§­¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQOÿEËßŚĤNĔwƇÄńwĪ­o[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇÏ³­ħZ«mJ×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡­°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OĻ¹S|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬­F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi^MicĎ°Â[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^­ŵMThĠÜ¤ko¼Ŏìąǜh`[tRd²Ĳ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpĲÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"],
                encodeOffsets: [[110234, 38774]]
            },
            properties: {
                cp: [108.96103, 34.201164],
                name: "西安",
                childNum: 1
            }
        },
            {
                id: "110000",
                type: "Feature",
                geometry: {
                    type: "Polygon",
                    coordinates: ["@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹­{bwYr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßcÂ±x¯oœRcfe£o§ËgToÛJíĔóu|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwŚ¨Ud®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏÑ¨j¯X\\¯MKpA³[Hīu}}"],
                    encodeOffsets: [[120023, 41045]]
                },
                properties: {
                    cp: [116.405285, 39.904989],
                    name: "北京",
                    childNum: 1
                }
            },

        {
            id: "620000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@VuUv"], ["@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NĂ¬HUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZsKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©Ĳ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IŉÈīoıÓÑAçÑ|«LÝcspīðÍgtë_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋIaBD­R¹ȥr¯GºßK¨jWkɱOqWĳ\\a­Q\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğĳ@ ©O{¤ĸm¢E·®«|@Xwg]Aģ±¯XǁÑǳªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×ǌ~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSfB¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®RÊº¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|Ì°ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ Îİ¤NpÀA¾Ĕ¼bð÷®üszMzÖĖQdȨýv§Tè|ªHÃ¾a¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØEÂ«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ŉĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦΋ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µ­ÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eı­Uĥ¼ªI{Î§DÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńÇ¾V¬ufÓÉCtÓ̻¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂ­Kq´ï¦ºĒǲņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|Ǆ֦ज़ȗǉ̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏĳëCȚDŲyê×Ŗyò¯ļcÂßYtÁƤyAã˾J@ǝrý@¤rz¸oP¹ɐÚyáHĀ[JwcVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaÉ²áo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK"]],
                encodeOffsets: [[[108619, 36299]], [[108589, 36341]]]
            },
            properties: {
                cp: [103.821344, 36.065281],
                name: "兰州",
                childNum: 2
            }
        },
            {
                id: "630000",
                type: "Feature",
                geometry: {
                    type: "MultiPolygon",
                    coordinates: [["@@InJm"], ["@@CÆ½OŃĦsΰ~Ē³¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VĲ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wàx\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJðÌ¬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRÑ±§Ģ£^ÂyèçěM³Ƃę{[¸¿uºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéÄ½G©ã¤GuȧþRcÕĕNyyût­øï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIÃ¡I`ks£CG­ěUy×Cy@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa­OÇðñęNwœľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉĳ¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į­´FRåd­ČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūÐ©ÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³­ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ­¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@×œÊăxÇN©©T±ª£Ĳ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃĲc·ÛLO½sç¥Ts{ă\\_»kÏ±q©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿÎ§p[ĉc¯bKmR¥{³Ze^wx¹dƽÅ½ôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ĳŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňbĚ°ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõFÎ·¤»Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌĪ¶ƶlðļATUvdTGº̼ÔsÊDÔveOg"]],
                    encodeOffsets: [[[105308, 37219]], [[95370, 40081]]]
                },
                properties: {
                    cp: [101.778916, 36.623178],
                    name: "青海",
                    childNum: 2
                }
            },

        {
            id: "640000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@KëÀęĞ«Oęȿȕı]ŉ¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûcÙß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B­¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤­ĢÝsuBLùtYdmVtNmtOPhRw~bd¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyE­K­zuÔ¡qQ¤xZÑ¢^ļöÜ¾Ep±âbÊÑÆ^fk¬NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZÄ¾r°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀĖ¾iİbjÕ"], ["@@mfwěwMrŢªv@G"]],
                encodeOffsets: [[[109366, 40242]], [[108600, 36303]]]
            },
            properties: {
                cp: [106.278179, 38.46637],
                name: "宁夏",
                childNum: 2
            }
        },
        {
            id: "650000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@QØĔ²X¨~ǘBºjʐßØvKƔX¨vĊOÃ·¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuXêÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]­Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO¦E}`cȺrĦáŖuÒª«ĲπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝǈì¥Βba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝčË¾ăCćāƿÝɽ©ǱŅ¹đ¥³ðLrÁ®ɱĕģŉǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭÇ³LŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůŉT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹ÆÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KÏ½ĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³h­gËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc¤³Xù]ǅA¿w͉ì¥wÇN·ÂËnƾƍdÇ§đ®ƝvUm©³G\\}µĿQyŹlăµEwǇQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AĳŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁč|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAÐ¹n~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZËºóYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷AÃª[ÄäIÂ®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉviǳHQµâFù­Âœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍEË¨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØ­ø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|ĲXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJÂ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð­`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàĲaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐ­ĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ"],
                encodeOffsets: [[88824, 50096]]
            },
            properties: {
                cp: [111.705883,40.843637],
                name: "乌鲁木齐",
                childNum: 1
            }
        },
       
        {
            id: "120000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@ŬgX§Ü«E¶FÌ¬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógcĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"],
                encodeOffsets: [[120237, 41215]]
            },
            properties: {
                cp: [117.190182, 39.125596],
                name: "天津",
                childNum: 1
            }
        },
        {
            id: "310000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@ɧư¬EpƸÁxc"], ["@@©ª"], ["@@MA"], ["@@QpİE§ÉC¾"], ["@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó"], ["@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@Ĳ`gQÚhr|ǀ^MĲvtbe´R¯Ô¬¨Yô¤r]ìƬį"]],
                encodeOffsets: [[[124702, 32062]], [[124547, 32200]], [[124808, 31991]], [[124726, 32110]], [[124903, 32376]], [[124438, 32149]]]
            },
            properties: {
                cp: [121.472644, 31.231706],
                name: "上海",
                childNum: 6
            }
        },
        {
            id: "500000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p\\_ æüY|[YxƊæu°xb®Űb@~¢NQt°¶Sæ Ê~rǉĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈÃ¼D|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqŉ÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓe­XsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»­ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©ÞÅ±ā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝMwå}]|FmÏCawu_p¯sfÙgYDHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LYFDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬ØsÎ¼£N"], ["@@ifjN@s"]],
                encodeOffsets: [[[109628, 30765]], [[111725, 31320]]]
            },
            properties: {
                cp: [106.540048, 29.576421],
                name: "重庆 ",
                childNum: 2
            }
        },
        {
            id: "500000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p\\_ æüY|[YxƊæu°xb®Űb@~¢NQt°¶Sæ Ê~rǉĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈÃ¼D|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqŉ÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓe­XsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»­ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©ÞÅ±ā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝMwå}]|FmÏCawu_p¯sfÙgYDHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LYFDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬ØsÎ¼£N"], ["@@ifjN@s"]],
                encodeOffsets: [[[109628, 30765]], [[111725, 31320]]]
            },
            properties: {
                cp: [106.540048, 29.576421],
                name: "重庆",
                childNum: 2
            }
        },
        {
            id: "810000",
            type: "Feature",
            geometry: {
                type: "MultiPolygon",
                coordinates: [["@@AlBk"], ["@@mn"], ["@@EpFo"], ["@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX´AI¹[yDU]W`çwZkmcMpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"], ["@@rMUwAS®e"]],
                encodeOffsets: [[[117111, 23002]], [[117072, 22876]], [[117045, 22887]], [[116975, 23082]], [[116882, 22747]]]
            },
            properties: {
                cp: [114.173355, 22.320048],
                name: "香港",
                childNum: 5
            }
        },
        {
            id: "820000",
            type: "Feature",
            geometry: {
                type: "Polygon",
                coordinates: ["@@kÊd°å§s"],
                encodeOffsets: [[116279, 22639]]
            },
            properties: {
                cp: [113.54909, 22.198951],
                name: "澳门",
                childNum: 1
            }
        }],
        UTF8Encoding: !0
    }) : void i("ECharts Map is not loaded") : void i("ECharts is not Loaded")
}),
$(function() {
    var t = {
        "西安": [108.961734, 34.201185],
        "北京": [116.400164, 39.925755],
        "重庆 ": [106.540048, 29.576421],
        "重庆": [106.540048, 29.576421],
        "乌鲁木齐": [87.36, 43.45],
        "内蒙古": [111.705883, 40.843637],
        "济南": [117.1261607200, 36.6747843500],
        "驻马店": [114.0294345600, 33.0176598200],
        "南京": [118.8029140200, 32.0647517200],
        "石家庄": [114.5625, 38.048608],
        "长春": [125.330253, 43.822795],
        "大连": [121.621314, 38.919658],
        "惠州": [114.422152, 23.117972],
        "中山": [113.398916, 22.523334],
        "十堰": [110.805406, 32.634872],
        "无锡": [120.318628, 31.497438],
        "遵义": [107.037932, 27.72829],
        "白银": [104.145347, 36.551311],
        "西宁": [101.784562, 36.623236],
        "德阳": [104.40423, 31.133802],
        "邯郸": [114.545794, 36.631466],
        "青岛": [120.389104, 36.073007],
        "南通": [120.901068, 31.986888],
        "大同": [120.901068, 31.986888],
        "张家口": [114.892465, 40.774726],
        "滕州": [117.172328, 35.119764],
        "廊坊": [117.172328, 35.119764],
        "东莞": [113.758184, 23.027314],
        "包头": [109.960154, 40.627791],
        "衡水": [115.6754, 37.745691],
        "淄博": [118.06151, 36.819783],
        "苏州": [120.591682, 31.305976],



        "福建": [119.330221107, 26.0471254966],
        "广州": [113.39466, 23.133205],
        "海南": [110.330801848, 20.022071277],

        "贵阳": [106.686249, 26.572065],
        "成都 ": [102.87189, 30.792458],
        "成都": [104.080352, 30.665708],

        "宜昌": [111.30467, 30.706219],
        "武汉": [114.297867, 30.584436],
        "郑州": [113.689608, 34.824767],
        "南阳": [112.530947, 33.003187],
        "襄阳": [112.137513, 32.076922],
        "太原": [112.559558, 37.844555],
        "兰州": [103.821344, 36.065281],
        "江西": [115.893527546, 28.6895780001],

        getCoord: function(t) {
            var e = Object.keys(this).find(function(e) {
                return t.indexOf(e) >= 0
            });
            return e ? this[e] : []
        }
    },
    e = [
          [{
        name: "西安"
    },
    {
        name: "重庆 ",
        // value: []
    }], [{
        name: "西安"
    },
    {
        name: "重庆",
        // value: []
    }], [{
        name: "西安"
    },
    {
        name: "西安", 
    }], [{
        name: "西安"
    },
    {
        name: "乌鲁木齐", 
    }],   [{
        name: "西安"
    },
    {
        name: "内蒙古", 
    }],
    [{
        name: "西安"
    },
    {
        name: "济南",

    }],
    [{
        name: "西安"
    },
    {
        name: "驻马店",

    }],
    [{
        name: "西安"
    },
    {
        name: "南京",

    }],


   [{
        name: "西安"
    },
    {
        name: "石家庄",
        // value: ["秦皇岛", "唐山", "廊坊", "保定", "沧州", "衡水", "邢台", "石家庄"]
    }], 
    [{
        name: "西安"
    },
    {
        name: "长春",
    }], 
    [{
        name: "西安"
    },
    {
        name: "大连",
    }],
    [{
        name: "西安"
    },
    {
        name: "中山",
    }],
    [{
        name: "西安"
    },
    {
        name: "惠州",
    }],
    [{
        name: "西安"
    },
    {
        name: "十堰",
    }],
    [{
        name: "西安"
    },
    {
        name: "无锡",
    }],
    [{
        name: "西安"
    },
    {
        name: "遵义",
    }],
    [{
        name: "西安"
    },
    {
        name: "白银",
    }], 
    [{
        name: "西安"
    },
    {
        name: "西宁",
    }],

    [{
        name: "西安"
    },
    {
        name: "德阳",
    }],

    [{
        name: "西安"
    },
    {
        name: "邯郸",
    }],

    [{
        name: "西安"
    },
    {
        name: "青岛",
    }],

    [{
        name: "西安"
    },
    {
        name: "南通",
    }],

    [{
        name: "西安"
    },
    {
        name: "大同",
    }],

    [{
        name: "西安"
    },
    {
        name: "滕州",
    }],

    [{
        name: "西安"
    },
    {
        name: "廊坊",
    }],

    [{
        name: "西安"
    },
    {
        name: "张家口",
    }],

    [{
        name: "西安"
    },
    {
        name: "东莞",
    }],

    [{
        name: "西安"
    },
    {
        name: "包头",
    }],

    [{
        name: "西安"
    },
    {
        name: "衡水",
    }],

    [{
        name: "西安"
    },
    {
        name: "淄博",
    }],

    [{
        name: "西安"
    },
    {
        name: "福建",
        // value: ["福州", "泉州", "厦门"]
    }]
        , [{
        name: "西安"
    },
    {
        name: "广州",
        // value: ["惠州", "东莞", "广州", "中山", "佛山", "江门", "深圳", "珠海", "湛江"]
    }], [{
        name: "西安"
    },
    {
        name: "贵阳",
        // value: ["遵义", "凯里"]
    }], [{
        name: "西安"
    },
    {
        name: "成都 ",
        // value: ["德阳", "眉山", "绵阳", "南充", "成都", "泸州"]
    }], 
    [{
        name: "西安"
    },
        {
            name: "成都",
            // value: ["德阳", "眉山", "绵阳", "南充", "成都", "泸州"]
        }],
     [{
        name: "西安"
    },
    {
        name: "宜昌",
        // value: ["襄阳", "宜昌", "武汉"]
    }], [{
        name: "西安"
    },
    {
        name: "武汉",
        // value: ["襄阳", "宜昌", "武汉"]
    }], [{
        name: "西安"
    },
    {
        name: "郑州",
       
    }], [{
        name: "西安"
    },
    {
        name: "南阳",
    
    }], [{
        name: "西安"
    },
    {
        name: "襄阳",

    }], [{
        name: "西安"
    },
    {
        name: "太原",
        // value: ["太原", "临汾"]
    }], [{
        name: "西安"
    },
    {
        name: "西安",
        // value: ["宝鸡", "西安"]
    }], [{
        name: "西安"
    },
    {
        name: "兰州",
        // value: ["兰州", "临夏"]
    }],  [{
        name: "西安"
    },
    {
        name: "江西",
        // value: ["南昌", "宜春", "吉安", "赣州"]
    }]],
    i = e.length > 0 ? e.reduce(function(t, e) {
        return e[1].from = e[0].name,
        0 === t ? e: t.concat(e)
    },
    0).reduce(function(t, e) {
        var i = t.findIndex(function(t) {
            return t.name === e.name
        });
        return i >= 0 ? (e.value && (t[i].values || (t[i].values = []), t[i].value = e.value, t[i].values.push(e)), t) : (e.value && (e.values = [], e.values.push(JSON.parse(JSON.stringify(e)))), t.push(e), t)
    },
    []) : [],
    n = {
        backgroundColor: "#fff",
        legend: {
            show: !1,
            orient: "vertical",
            top: "bottom",
            left: "right",
            data: ["地点", "线路"],
            textStyle: {
                color: "#fff"
            }
        },
        tooltip: {
            trigger: "item",
            backgroundColor: "rgba(0,167,240,0.7)",
            padding: [5, 10],
            textStyle: {
                fontSize: 12
            },
            formatter: function(t) {
                var e = t.value[2];
                if (isArrayFn(e) && e.length > 0) {
                    for (var i = arrChunk(e, 3), n = "", o = 0; o < i.length; o++) n += i[o].join("、"),
                    o < i.length - 1 && (n += "</br>");
                    return n
                }
                return ""
            }
        },
        geo: {
            map: "china",
            zoom: 1.2,
            label: {
                emphasis: {
                    show: !1
                }
            },
            roam: !1,
            itemStyle: {
                normal: {
                    areaColor: "#f2f2f2",
                    borderColor: "#c4c4c4"
                },
                emphasis: {
                    areaColor: "#da251c"
                }
            }
        },
        series: [{
            name: "地点",
            type: "effectScatter",
            coordinateSystem: "geo",
            zlevel: 2,
            rippleEffect: {
                brushType: "stroke"
            },
            symbolSize: 8,
            showEffectOn: "render",
            itemStyle: {
                normal: {
                    color: "#9da8ba"
                }
            },
            data: i.map(function(e) {
                var i = {
                    name: e.name,
                    symbolSize: 8,
                    value: t.getCoord(e.name).concat([e.value]),
                    values: e.values,
                    label: {
                        normal: {
                            show: !0,
                            fontSize: 11,
                            position: "right",
                            formatter: "{b}"
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: "#9da8ba"
                        }
                    }
                };
                return "西安" == e.name && (i.symbolSize = 10, i.itemStyle.normal.color = "#da251c", i.label.normal.fontSize = 12, i.label.normal.position = [ - 9, -15]),
                i
            })
        },
        {
            name: "线路",
            type: "lines",
            coordinateSystem: "geo",
            zlevel: 1,
            large: !0,
            effect: {
                show: !0,
                constantSpeed: 30,
                symbol: "pin",
                symbolSize: 3,
                trailLength: .1,
                 color: "#ccc"
            },
            lineStyle: {
                normal: {
                    color: function(t) {
                        var e = t.data.coords[0][0] - t.data.coords[1][0] > 0,
                        i = t.data.coords[0][1] - t.data.coords[1][1] > 0;
                        return {
                            type: "linear",
                            x: e ? 1 : 0,
                            y: i ? 0 : 1,
                            x2: e ? 0 : 1,
                            y2: i ? 1 : 0,
                            colorStops: [{
                                offset: 0,
                                color: "#c3c3c6"
                            },
                            {
                                offset: 1,
                                color: "#ccc"
                            }],
                            globalCoord: !1
                        }
                    },
                    width: .2,
                    opacity: .3,
                    curveness: .1
                }
            },
            data: function(e) {
                for (var i = [], n = 0; n < e.length; n += 1) {
                    var o = e[n],
                    a = t.getCoord(o[0].name),
                    r = t.getCoord(o[1].name);
                    a && r && i.push({
                        fromName: o[0].name,
                        toName: o[1].name,
                        coords: [a, r],
                        value: o[1].value
                    })
                }
                return i
            } (e)
        }]
    },
    o = echarts.init(document.getElementById("xiangyun-map"));
    o.setOption(n),
    window.onresize = function() {
        o.resize()
    }
});