!function(n, t) {
    "use strict";
    "object" == typeof module && "object" == typeof module.exports ? module.exports = n.document ? t(n, !0) : function(n) {
        if (!n.document)
            throw new Error("jQuery requires a window with a document");
        return t(n)
    }
    : t(n)
}("undefined" != typeof window ? window : this, function(n, t) {
    "use strict";
    function ir(n, t) {
        t = t || u;
        var i = t.createElement("script");
        i.text = n;
        t.head.appendChild(i).parentNode.removeChild(i)
    }
    function fi(n) {
        var t = !!n && "length"in n && n.length
          , r = i.type(n);
        return "function" !== r && !i.isWindow(n) && ("array" === r || 0 === t || "number" == typeof t && t > 0 && t - 1 in n)
    }
    function l(n, t) {
        return n.nodeName && n.nodeName.toLowerCase() === t.toLowerCase()
    }
    function oi(n, t, r) {
        return i.isFunction(t) ? i.grep(n, function(n, i) {
            return !!t.call(n, i, n) !== r
        }) : t.nodeType ? i.grep(n, function(n) {
            return n === t !== r
        }) : "string" != typeof t ? i.grep(n, function(n) {
            return ot.call(t, n) > -1 !== r
        }) : er.test(t) ? i.filter(t, n, r) : (t = i.filter(t, n),
        i.grep(n, function(n) {
            return ot.call(t, n) > -1 !== r && 1 === n.nodeType
        }))
    }
    function ar(n, t) {
        while ((n = n[t]) && 1 !== n.nodeType)
            ;
        return n
    }
    function ne(n) {
        var t = {};
        return i.each(n.match(h) || [], function(n, i) {
            t[i] = !0
        }),
        t
    }
    function nt(n) {
        return n
    }
    function pt(n) {
        throw n;
    }
    function vr(n, t, r, u) {
        var f;
        try {
            n && i.isFunction(f = n.promise) ? f.call(n).done(t).fail(r) : n && i.isFunction(f = n.then) ? f.call(n, t, r) : t.apply(void 0, [n].slice(u))
        } catch (n) {
            r.apply(void 0, [n])
        }
    }
    function bt() {
        u.removeEventListener("DOMContentLoaded", bt);
        n.removeEventListener("load", bt);
        i.ready()
    }
    function ht() {
        this.expando = i.expando + ht.uid++
    }
    function re(n) {
        return "true" === n || "false" !== n && ("null" === n ? null : n === +n + "" ? +n : te.test(n) ? JSON.parse(n) : n)
    }
    function pr(n, t, i) {
        var r;
        if (void 0 === i && 1 === n.nodeType)
            if (r = "data-" + t.replace(ie, "-$&").toLowerCase(),
            i = n.getAttribute(r),
            "string" == typeof i) {
                try {
                    i = re(i)
                } catch (u) {}
                e.set(n, t, i)
            } else
                i = void 0;
        return i
    }
    function kr(n, t, r, u) {
        var h, e = 1, l = 20, c = u ? function() {
            return u.cur()
        }
        : function() {
            return i.css(n, t, "")
        }
        , s = c(), o = r && r[3] || (i.cssNumber[t] ? "" : "px"), f = (i.cssNumber[t] || "px" !== o && +s) && ct.exec(i.css(n, t));
        if (f && f[3] !== o) {
            o = o || f[3];
            r = r || [];
            f = +s || 1;
            do
                e = e || ".5",
                f /= e,
                i.style(n, t, f + o);
            while (e !== (e = c() / s) && 1 !== e && --l)
        }
        return r && (f = +f || +s || 0,
        h = r[1] ? f + (r[1] + 1) * r[2] : +r[2],
        u && (u.unit = o,
        u.start = f,
        u.end = h)),
        h
    }
    function ue(n) {
        var r, f = n.ownerDocument, u = n.nodeName, t = si[u];
        return t ? t : (r = f.body.appendChild(f.createElement(u)),
        t = i.css(r, "display"),
        r.parentNode.removeChild(r),
        "none" === t && (t = "block"),
        si[u] = t,
        t)
    }
    function tt(n, t) {
        for (var e, u, f = [], i = 0, o = n.length; i < o; i++)
            u = n[i],
            u.style && (e = u.style.display,
            t ? ("none" === e && (f[i] = r.get(u, "display") || null,
            f[i] || (u.style.display = "")),
            "" === u.style.display && kt(u) && (f[i] = ue(u))) : "none" !== e && (f[i] = "none",
            r.set(u, "display", e)));
        for (i = 0; i < o; i++)
            null != f[i] && (n[i].style.display = f[i]);
        return n
    }
    function o(n, t) {
        var r;
        return r = "undefined" != typeof n.getElementsByTagName ? n.getElementsByTagName(t || "*") : "undefined" != typeof n.querySelectorAll ? n.querySelectorAll(t || "*") : [],
        void 0 === t || t && l(n, t) ? i.merge([n], r) : r
    }
    function hi(n, t) {
        for (var i = 0, u = n.length; i < u; i++)
            r.set(n[i], "globalEval", !t || r.get(t[i], "globalEval"))
    }
    function iu(n, t, r, u, f) {
        for (var e, s, p, a, w, v, h = t.createDocumentFragment(), y = [], l = 0, b = n.length; l < b; l++)
            if (e = n[l],
            e || 0 === e)
                if ("object" === i.type(e))
                    i.merge(y, e.nodeType ? [e] : e);
                else if (tu.test(e)) {
                    for (s = s || h.appendChild(t.createElement("div")),
                    p = (gr.exec(e) || ["", ""])[1].toLowerCase(),
                    a = c[p] || c._default,
                    s.innerHTML = a[1] + i.htmlPrefilter(e) + a[2],
                    v = a[0]; v--; )
                        s = s.lastChild;
                    i.merge(y, s.childNodes);
                    s = h.firstChild;
                    s.textContent = ""
                } else
                    y.push(t.createTextNode(e));
        for (h.textContent = "",
        l = 0; e = y[l++]; )
            if (u && i.inArray(e, u) > -1)
                f && f.push(e);
            else if (w = i.contains(e.ownerDocument, e),
            s = o(h.appendChild(e), "script"),
            w && hi(s),
            r)
                for (v = 0; e = s[v++]; )
                    nu.test(e.type || "") && r.push(e);
        return h
    }
    function gt() {
        return !0
    }
    function it() {
        return !1
    }
    function uu() {
        try {
            return u.activeElement
        } catch (n) {}
    }
    function ci(n, t, r, u, f, e) {
        var o, s;
        if ("object" == typeof t) {
            "string" != typeof r && (u = u || r,
            r = void 0);
            for (s in t)
                ci(n, s, r, u, t[s], e);
            return n
        }
        if (null == u && null == f ? (f = r,
        u = r = void 0) : null == f && ("string" == typeof r ? (f = u,
        u = void 0) : (f = u,
        u = r,
        r = void 0)),
        f === !1)
            f = it;
        else if (!f)
            return n;
        return 1 === e && (o = f,
        f = function(n) {
            return i().off(n),
            o.apply(this, arguments)
        }
        ,
        f.guid = o.guid || (o.guid = i.guid++)),
        n.each(function() {
            i.event.add(this, t, f, u, r)
        })
    }
    function fu(n, t) {
        return l(n, "table") && l(11 !== t.nodeType ? t : t.firstChild, "tr") ? i(">tbody", n)[0] || n : n
    }
    function ae(n) {
        return n.type = (null !== n.getAttribute("type")) + "/" + n.type,
        n
    }
    function ve(n) {
        var t = ce.exec(n.type);
        return t ? n.type = t[1] : n.removeAttribute("type"),
        n
    }
    function eu(n, t) {
        var u, c, f, s, h, l, a, o;
        if (1 === t.nodeType) {
            if (r.hasData(n) && (s = r.access(n),
            h = r.set(t, s),
            o = s.events)) {
                delete h.handle;
                h.events = {};
                for (f in o)
                    for (u = 0,
                    c = o[f].length; u < c; u++)
                        i.event.add(t, f, o[f][u])
            }
            e.hasData(n) && (l = e.access(n),
            a = i.extend({}, l),
            e.set(t, a))
        }
    }
    function ye(n, t) {
        var i = t.nodeName.toLowerCase();
        "input" === i && dr.test(n.type) ? t.checked = n.checked : "input" !== i && "textarea" !== i || (t.defaultValue = n.defaultValue)
    }
    function rt(n, t, u, e) {
        t = gi.apply([], t);
        var l, p, c, a, s, w, h = 0, v = n.length, k = v - 1, y = t[0], b = i.isFunction(y);
        if (b || v > 1 && "string" == typeof y && !f.checkClone && he.test(y))
            return n.each(function(i) {
                var r = n.eq(i);
                b && (t[0] = y.call(this, i, r.html()));
                rt(r, t, u, e)
            });
        if (v && (l = iu(t, n[0].ownerDocument, !1, n, e),
        p = l.firstChild,
        1 === l.childNodes.length && (l = p),
        p || e)) {
            for (c = i.map(o(l, "script"), ae),
            a = c.length; h < v; h++)
                s = l,
                h !== k && (s = i.clone(s, !0, !0),
                a && i.merge(c, o(s, "script"))),
                u.call(n[h], s, h);
            if (a)
                for (w = c[c.length - 1].ownerDocument,
                i.map(c, ve),
                h = 0; h < a; h++)
                    s = c[h],
                    nu.test(s.type || "") && !r.access(s, "globalEval") && i.contains(w, s) && (s.src ? i._evalUrl && i._evalUrl(s.src) : ir(s.textContent.replace(le, ""), w))
        }
        return n
    }
    function ou(n, t, r) {
        for (var u, e = t ? i.filter(t, n) : n, f = 0; null != (u = e[f]); f++)
            r || 1 !== u.nodeType || i.cleanData(o(u)),
            u.parentNode && (r && i.contains(u.ownerDocument, u) && hi(o(u, "script")),
            u.parentNode.removeChild(u));
        return n
    }
    function lt(n, t, r) {
        var o, s, h, u, e = n.style;
        return r = r || ni(n),
        r && (u = r.getPropertyValue(t) || r[t],
        "" !== u || i.contains(n.ownerDocument, n) || (u = i.style(n, t)),
        !f.pixelMarginRight() && li.test(u) && su.test(t) && (o = e.width,
        s = e.minWidth,
        h = e.maxWidth,
        e.minWidth = e.maxWidth = e.width = u,
        u = r.width,
        e.width = o,
        e.minWidth = s,
        e.maxWidth = h)),
        void 0 !== u ? u + "" : u
    }
    function hu(n, t) {
        return {
            get: function() {
                return n() ? void delete this.get : (this.get = t).apply(this, arguments)
            }
        }
    }
    function be(n) {
        if (n in vu)
            return n;
        for (var i = n[0].toUpperCase() + n.slice(1), t = au.length; t--; )
            if (n = au[t] + i,
            n in vu)
                return n
    }
    function yu(n) {
        var t = i.cssProps[n];
        return t || (t = i.cssProps[n] = be(n) || n),
        t
    }
    function pu(n, t, i) {
        var r = ct.exec(t);
        return r ? Math.max(0, r[2] - (i || 0)) + (r[3] || "px") : t
    }
    function wu(n, t, r, u, f) {
        for (var o = 0, e = r === (u ? "border" : "content") ? 4 : "width" === t ? 1 : 0; e < 4; e += 2)
            "margin" === r && (o += i.css(n, r + b[e], !0, f)),
            u ? ("content" === r && (o -= i.css(n, "padding" + b[e], !0, f)),
            "margin" !== r && (o -= i.css(n, "border" + b[e] + "Width", !0, f))) : (o += i.css(n, "padding" + b[e], !0, f),
            "padding" !== r && (o += i.css(n, "border" + b[e] + "Width", !0, f)));
        return o
    }
    function bu(n, t, r) {
        var o, e = ni(n), u = lt(n, t, e), s = "border-box" === i.css(n, "boxSizing", !1, e);
        return li.test(u) ? u : (o = s && (f.boxSizingReliable() || u === n.style[t]),
        "auto" === u && (u = n["offset" + t[0].toUpperCase() + t.slice(1)]),
        u = parseFloat(u) || 0,
        u + wu(n, t, r || (s ? "border" : "content"), o, e) + "px")
    }
    function s(n, t, i, r, u) {
        return new s.prototype.init(n,t,i,r,u)
    }
    function ai() {
        ti && (u.hidden === !1 && n.requestAnimationFrame ? n.requestAnimationFrame(ai) : n.setTimeout(ai, i.fx.interval),
        i.fx.tick())
    }
    function gu() {
        return n.setTimeout(function() {
            ut = void 0
        }),
        ut = i.now()
    }
    function ii(n, t) {
        var r, u = 0, i = {
            height: n
        };
        for (t = t ? 1 : 0; u < 4; u += 2 - t)
            r = b[u],
            i["margin" + r] = i["padding" + r] = n;
        return t && (i.opacity = i.width = n),
        i
    }
    function nf(n, t, i) {
        for (var u, f = (a.tweeners[t] || []).concat(a.tweeners["*"]), r = 0, e = f.length; r < e; r++)
            if (u = f[r].call(i, t, n))
                return u
    }
    function ke(n, t, u) {
        var f, y, w, c, b, s, o, l, k = "width"in t || "height"in t, v = this, p = {}, h = n.style, a = n.nodeType && kt(n), e = r.get(n, "fxshow");
        u.queue || (c = i._queueHooks(n, "fx"),
        null == c.unqueued && (c.unqueued = 0,
        b = c.empty.fire,
        c.empty.fire = function() {
            c.unqueued || b()
        }
        ),
        c.unqueued++,
        v.always(function() {
            v.always(function() {
                c.unqueued--;
                i.queue(n, "fx").length || c.empty.fire()
            })
        }));
        for (f in t)
            if (y = t[f],
            ku.test(y)) {
                if (delete t[f],
                w = w || "toggle" === y,
                y === (a ? "hide" : "show")) {
                    if ("show" !== y || !e || void 0 === e[f])
                        continue;
                    a = !0
                }
                p[f] = e && e[f] || i.style(n, f)
            }
        if (s = !i.isEmptyObject(t),
        s || !i.isEmptyObject(p)) {
            k && 1 === n.nodeType && (u.overflow = [h.overflow, h.overflowX, h.overflowY],
            o = e && e.display,
            null == o && (o = r.get(n, "display")),
            l = i.css(n, "display"),
            "none" === l && (o ? l = o : (tt([n], !0),
            o = n.style.display || o,
            l = i.css(n, "display"),
            tt([n]))),
            ("inline" === l || "inline-block" === l && null != o) && "none" === i.css(n, "float") && (s || (v.done(function() {
                h.display = o
            }),
            null == o && (l = h.display,
            o = "none" === l ? "" : l)),
            h.display = "inline-block"));
            u.overflow && (h.overflow = "hidden",
            v.always(function() {
                h.overflow = u.overflow[0];
                h.overflowX = u.overflow[1];
                h.overflowY = u.overflow[2]
            }));
            s = !1;
            for (f in p)
                s || (e ? "hidden"in e && (a = e.hidden) : e = r.access(n, "fxshow", {
                    display: o
                }),
                w && (e.hidden = !a),
                a && tt([n], !0),
                v.done(function() {
                    a || tt([n]);
                    r.remove(n, "fxshow");
                    for (f in p)
                        i.style(n, f, p[f])
                })),
                s = nf(a ? e[f] : 0, f, v),
                f in e || (e[f] = s.start,
                a && (s.end = s.start,
                s.start = 0))
        }
    }
    function de(n, t) {
        var r, f, e, u, o;
        for (r in n)
            if (f = i.camelCase(r),
            e = t[f],
            u = n[r],
            Array.isArray(u) && (e = u[1],
            u = n[r] = u[0]),
            r !== f && (n[f] = u,
            delete n[r]),
            o = i.cssHooks[f],
            o && "expand"in o) {
                u = o.expand(u);
                delete n[f];
                for (r in u)
                    r in n || (n[r] = u[r],
                    t[r] = e)
            } else
                t[f] = e
    }
    function a(n, t, r) {
        var e, o, s = 0, l = a.prefilters.length, f = i.Deferred().always(function() {
            delete c.elem
        }), c = function() {
            if (o)
                return !1;
            for (var s = ut || gu(), t = Math.max(0, u.startTime + u.duration - s), h = t / u.duration || 0, i = 1 - h, r = 0, e = u.tweens.length; r < e; r++)
                u.tweens[r].run(i);
            return f.notifyWith(n, [u, i, t]),
            i < 1 && e ? t : (e || f.notifyWith(n, [u, 1, 0]),
            f.resolveWith(n, [u]),
            !1)
        }, u = f.promise({
            elem: n,
            props: i.extend({}, t),
            opts: i.extend(!0, {
                specialEasing: {},
                easing: i.easing._default
            }, r),
            originalProperties: t,
            originalOptions: r,
            startTime: ut || gu(),
            duration: r.duration,
            tweens: [],
            createTween: function(t, r) {
                var f = i.Tween(n, u.opts, t, r, u.opts.specialEasing[t] || u.opts.easing);
                return u.tweens.push(f),
                f
            },
            stop: function(t) {
                var i = 0
                  , r = t ? u.tweens.length : 0;
                if (o)
                    return this;
                for (o = !0; i < r; i++)
                    u.tweens[i].run(1);
                return t ? (f.notifyWith(n, [u, 1, 0]),
                f.resolveWith(n, [u, t])) : f.rejectWith(n, [u, t]),
                this
            }
        }), h = u.props;
        for (de(h, u.opts.specialEasing); s < l; s++)
            if (e = a.prefilters[s].call(u, n, h, u.opts))
                return i.isFunction(e.stop) && (i._queueHooks(u.elem, u.opts.queue).stop = i.proxy(e.stop, e)),
                e;
        return i.map(h, nf, u),
        i.isFunction(u.opts.start) && u.opts.start.call(n, u),
        u.progress(u.opts.progress).done(u.opts.done, u.opts.complete).fail(u.opts.fail).always(u.opts.always),
        i.fx.timer(i.extend(c, {
            elem: n,
            anim: u,
            queue: u.opts.queue
        })),
        u
    }
    function k(n) {
        var t = n.match(h) || [];
        return t.join(" ")
    }
    function d(n) {
        return n.getAttribute && n.getAttribute("class") || ""
    }
    function pi(n, t, r, u) {
        var f;
        if (Array.isArray(t))
            i.each(t, function(t, i) {
                r || ge.test(n) ? u(n, i) : pi(n + "[" + ("object" == typeof i && null != i ? t : "") + "]", i, r, u)
            });
        else if (r || "object" !== i.type(t))
            u(n, t);
        else
            for (f in t)
                pi(n + "[" + f + "]", t[f], r, u)
    }
    function cf(n) {
        return function(t, r) {
            "string" != typeof t && (r = t,
            t = "*");
            var u, f = 0, e = t.toLowerCase().match(h) || [];
            if (i.isFunction(r))
                while (u = e[f++])
                    "+" === u[0] ? (u = u.slice(1) || "*",
                    (n[u] = n[u] || []).unshift(r)) : (n[u] = n[u] || []).push(r)
        }
    }
    function lf(n, t, r, u) {
        function e(s) {
            var h;
            return f[s] = !0,
            i.each(n[s] || [], function(n, i) {
                var s = i(t, r, u);
                return "string" != typeof s || o || f[s] ? o ? !(h = s) : void 0 : (t.dataTypes.unshift(s),
                e(s),
                !1)
            }),
            h
        }
        var f = {}
          , o = n === wi;
        return e(t.dataTypes[0]) || !f["*"] && e("*")
    }
    function ki(n, t) {
        var r, u, f = i.ajaxSettings.flatOptions || {};
        for (r in t)
            void 0 !== t[r] && ((f[r] ? n : u || (u = {}))[r] = t[r]);
        return u && i.extend(!0, n, u),
        n
    }
    function so(n, t, i) {
        for (var e, u, f, o, s = n.contents, r = n.dataTypes; "*" === r[0]; )
            r.shift(),
            void 0 === e && (e = n.mimeType || t.getResponseHeader("Content-Type"));
        if (e)
            for (u in s)
                if (s[u] && s[u].test(e)) {
                    r.unshift(u);
                    break
                }
        if (r[0]in i)
            f = r[0];
        else {
            for (u in i) {
                if (!r[0] || n.converters[u + " " + r[0]]) {
                    f = u;
                    break
                }
                o || (o = u)
            }
            f = f || o
        }
        if (f)
            return f !== r[0] && r.unshift(f),
            i[f]
    }
    function ho(n, t, i, r) {
        var h, u, f, s, e, o = {}, c = n.dataTypes.slice();
        if (c[1])
            for (f in n.converters)
                o[f.toLowerCase()] = n.converters[f];
        for (u = c.shift(); u; )
            if (n.responseFields[u] && (i[n.responseFields[u]] = t),
            !e && r && n.dataFilter && (t = n.dataFilter(t, n.dataType)),
            e = u,
            u = c.shift())
                if ("*" === u)
                    u = e;
                else if ("*" !== e && e !== u) {
                    if (f = o[e + " " + u] || o["* " + u],
                    !f)
                        for (h in o)
                            if (s = h.split(" "),
                            s[1] === u && (f = o[e + " " + s[0]] || o["* " + s[0]])) {
                                f === !0 ? f = o[h] : o[h] !== !0 && (u = s[0],
                                c.unshift(s[1]));
                                break
                            }
                    if (f !== !0)
                        if (f && n.throws)
                            t = f(t);
                        else
                            try {
                                t = f(t)
                            } catch (l) {
                                return {
                                    state: "parsererror",
                                    error: f ? l : "No conversion from " + e + " to " + u
                                }
                            }
                }
        return {
            state: "success",
            data: t
        }
    }
    var p = [], u = n.document, pf = Object.getPrototypeOf, w = p.slice, gi = p.concat, ui = p.push, ot = p.indexOf, vt = {}, nr = vt.toString, yt = vt.hasOwnProperty, tr = yt.toString, wf = tr.call(Object), f = {}, rr = "3.2.1", i = function(n, t) {
        return new i.fn.init(n,t)
    }, bf = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, kf = /^-ms-/, df = /-([a-z])/g, gf = function(n, t) {
        return t.toUpperCase()
    }, y, ei, er, or, sr, hr, cr, lr, h, yr, wt, v, st, si, tu, ut, ti, ku, du, tf, ft, rf, uf, ff, vi, af, et, di, ri, vf, yf;
    i.fn = i.prototype = {
        jquery: rr,
        constructor: i,
        length: 0,
        toArray: function() {
            return w.call(this)
        },
        get: function(n) {
            return null == n ? w.call(this) : n < 0 ? this[n + this.length] : this[n]
        },
        pushStack: function(n) {
            var t = i.merge(this.constructor(), n);
            return t.prevObject = this,
            t
        },
        each: function(n) {
            return i.each(this, n)
        },
        map: function(n) {
            return this.pushStack(i.map(this, function(t, i) {
                return n.call(t, i, t)
            }))
        },
        slice: function() {
            return this.pushStack(w.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq(-1)
        },
        eq: function(n) {
            var i = this.length
              , t = +n + (n < 0 ? i : 0);
            return this.pushStack(t >= 0 && t < i ? [this[t]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor()
        },
        push: ui,
        sort: p.sort,
        splice: p.splice
    };
    i.extend = i.fn.extend = function() {
        var e, f, r, t, o, s, n = arguments[0] || {}, u = 1, c = arguments.length, h = !1;
        for ("boolean" == typeof n && (h = n,
        n = arguments[u] || {},
        u++),
        "object" == typeof n || i.isFunction(n) || (n = {}),
        u === c && (n = this,
        u--); u < c; u++)
            if (null != (e = arguments[u]))
                for (f in e)
                    r = n[f],
                    t = e[f],
                    n !== t && (h && t && (i.isPlainObject(t) || (o = Array.isArray(t))) ? (o ? (o = !1,
                    s = r && Array.isArray(r) ? r : []) : s = r && i.isPlainObject(r) ? r : {},
                    n[f] = i.extend(h, s, t)) : void 0 !== t && (n[f] = t));
        return n
    }
    ;
    i.extend({
        expando: "jQuery" + (rr + Math.random()).replace(/\D/g, ""),
        isReady: !0,
        error: function(n) {
            throw new Error(n);
        },
        noop: function() {},
        isFunction: function(n) {
            return "function" === i.type(n)
        },
        isWindow: function(n) {
            return null != n && n === n.window
        },
        isNumeric: function(n) {
            var t = i.type(n);
            return ("number" === t || "string" === t) && !isNaN(n - parseFloat(n))
        },
        isPlainObject: function(n) {
            var t, i;
            return !(!n || "[object Object]" !== nr.call(n)) && (!(t = pf(n)) || (i = yt.call(t, "constructor") && t.constructor,
            "function" == typeof i && tr.call(i) === wf))
        },
        isEmptyObject: function(n) {
            for (var t in n)
                return !1;
            return !0
        },
        type: function(n) {
            return null == n ? n + "" : "object" == typeof n || "function" == typeof n ? vt[nr.call(n)] || "object" : typeof n
        },
        globalEval: function(n) {
            ir(n)
        },
        camelCase: function(n) {
            return n.replace(kf, "ms-").replace(df, gf)
        },
        each: function(n, t) {
            var r, i = 0;
            if (fi(n)) {
                for (r = n.length; i < r; i++)
                    if (t.call(n[i], i, n[i]) === !1)
                        break
            } else
                for (i in n)
                    if (t.call(n[i], i, n[i]) === !1)
                        break;
            return n
        },
        trim: function(n) {
            return null == n ? "" : (n + "").replace(bf, "")
        },
        makeArray: function(n, t) {
            var r = t || [];
            return null != n && (fi(Object(n)) ? i.merge(r, "string" == typeof n ? [n] : n) : ui.call(r, n)),
            r
        },
        inArray: function(n, t, i) {
            return null == t ? -1 : ot.call(t, n, i)
        },
        merge: function(n, t) {
            for (var u = +t.length, i = 0, r = n.length; i < u; i++)
                n[r++] = t[i];
            return n.length = r,
            n
        },
        grep: function(n, t, i) {
            for (var u, f = [], r = 0, e = n.length, o = !i; r < e; r++)
                u = !t(n[r], r),
                u !== o && f.push(n[r]);
            return f
        },
        map: function(n, t, i) {
            var e, u, r = 0, f = [];
            if (fi(n))
                for (e = n.length; r < e; r++)
                    u = t(n[r], r, i),
                    null != u && f.push(u);
            else
                for (r in n)
                    u = t(n[r], r, i),
                    null != u && f.push(u);
            return gi.apply([], f)
        },
        guid: 1,
        proxy: function(n, t) {
            var u, f, r;
            if ("string" == typeof t && (u = n[t],
            t = n,
            n = u),
            i.isFunction(n))
                return f = w.call(arguments, 2),
                r = function() {
                    return n.apply(t || this, f.concat(w.call(arguments)))
                }
                ,
                r.guid = n.guid = n.guid || i.guid++,
                r
        },
        now: Date.now,
        support: f
    });
    "function" == typeof Symbol && (i.fn[Symbol.iterator] = p[Symbol.iterator]);
    i.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(n, t) {
        vt["[object " + t + "]"] = t.toLowerCase()
    });
    y = function(n) {
        function u(n, t, r, u) {
            var s, w, l, a, d, y, g, p = t && t.ownerDocument, v = t ? t.nodeType : 9;
            if (r = r || [],
            "string" != typeof n || !n || 1 !== v && 9 !== v && 11 !== v)
                return r;
            if (!u && ((t ? t.ownerDocument || t : c) !== i && b(t),
            t = t || i,
            h)) {
                if (11 !== v && (d = cr.exec(n)))
                    if (s = d[1]) {
                        if (9 === v) {
                            if (!(l = t.getElementById(s)))
                                return r;
                            if (l.id === s)
                                return r.push(l),
                                r
                        } else if (p && (l = p.getElementById(s)) && et(t, l) && l.id === s)
                            return r.push(l),
                            r
                    } else {
                        if (d[2])
                            return k.apply(r, t.getElementsByTagName(n)),
                            r;
                        if ((s = d[3]) && e.getElementsByClassName && t.getElementsByClassName)
                            return k.apply(r, t.getElementsByClassName(s)),
                            r
                    }
                if (e.qsa && !lt[n + " "] && (!o || !o.test(n))) {
                    if (1 !== v)
                        p = t,
                        g = n;
                    else if ("object" !== t.nodeName.toLowerCase()) {
                        for ((a = t.getAttribute("id")) ? a = a.replace(vi, yi) : t.setAttribute("id", a = f),
                        y = ft(n),
                        w = y.length; w--; )
                            y[w] = "#" + a + " " + yt(y[w]);
                        g = y.join(",");
                        p = ni.test(n) && ri(t.parentNode) || t
                    }
                    if (g)
                        try {
                            return k.apply(r, p.querySelectorAll(g)),
                            r
                        } catch (nt) {} finally {
                            a === f && t.removeAttribute("id")
                        }
                }
            }
            return si(n.replace(at, "$1"), t, r, u)
        }
        function ti() {
            function n(r, u) {
                return i.push(r + " ") > t.cacheLength && delete n[i.shift()],
                n[r + " "] = u
            }
            var i = [];
            return n
        }
        function l(n) {
            return n[f] = !0,
            n
        }
        function a(n) {
            var t = i.createElement("fieldset");
            try {
                return !!n(t)
            } catch (r) {
                return !1
            } finally {
                t.parentNode && t.parentNode.removeChild(t);
                t = null
            }
        }
        function ii(n, i) {
            for (var r = n.split("|"), u = r.length; u--; )
                t.attrHandle[r[u]] = i
        }
        function wi(n, t) {
            var i = t && n
              , r = i && 1 === n.nodeType && 1 === t.nodeType && n.sourceIndex - t.sourceIndex;
            if (r)
                return r;
            if (i)
                while (i = i.nextSibling)
                    if (i === t)
                        return -1;
            return n ? 1 : -1
        }
        function ar(n) {
            return function(t) {
                var i = t.nodeName.toLowerCase();
                return "input" === i && t.type === n
            }
        }
        function vr(n) {
            return function(t) {
                var i = t.nodeName.toLowerCase();
                return ("input" === i || "button" === i) && t.type === n
            }
        }
        function bi(n) {
            return function(t) {
                return "form"in t ? t.parentNode && t.disabled === !1 ? "label"in t ? "label"in t.parentNode ? t.parentNode.disabled === n : t.disabled === n : t.isDisabled === n || t.isDisabled !== !n && lr(t) === n : t.disabled === n : "label"in t && t.disabled === n
            }
        }
        function it(n) {
            return l(function(t) {
                return t = +t,
                l(function(i, r) {
                    for (var u, f = n([], i.length, t), e = f.length; e--; )
                        i[u = f[e]] && (i[u] = !(r[u] = i[u]))
                })
            })
        }
        function ri(n) {
            return n && "undefined" != typeof n.getElementsByTagName && n
        }
        function ki() {}
        function yt(n) {
            for (var t = 0, r = n.length, i = ""; t < r; t++)
                i += n[t].value;
            return i
        }
        function pt(n, t, i) {
            var r = t.dir
              , u = t.next
              , e = u || r
              , o = i && "parentNode" === e
              , s = di++;
            return t.first ? function(t, i, u) {
                while (t = t[r])
                    if (1 === t.nodeType || o)
                        return n(t, i, u);
                return !1
            }
            : function(t, i, h) {
                var c, l, a, y = [v, s];
                if (h) {
                    while (t = t[r])
                        if ((1 === t.nodeType || o) && n(t, i, h))
                            return !0
                } else
                    while (t = t[r])
                        if (1 === t.nodeType || o)
                            if (a = t[f] || (t[f] = {}),
                            l = a[t.uniqueID] || (a[t.uniqueID] = {}),
                            u && u === t.nodeName.toLowerCase())
                                t = t[r] || t;
                            else {
                                if ((c = l[e]) && c[0] === v && c[1] === s)
                                    return y[2] = c[2];
                                if (l[e] = y,
                                y[2] = n(t, i, h))
                                    return !0
                            }
                return !1
            }
        }
        function ui(n) {
            return n.length > 1 ? function(t, i, r) {
                for (var u = n.length; u--; )
                    if (!n[u](t, i, r))
                        return !1;
                return !0
            }
            : n[0]
        }
        function yr(n, t, i) {
            for (var r = 0, f = t.length; r < f; r++)
                u(n, t[r], i);
            return i
        }
        function wt(n, t, i, r, u) {
            for (var e, o = [], f = 0, s = n.length, h = null != t; f < s; f++)
                (e = n[f]) && (i && !i(e, r, u) || (o.push(e),
                h && t.push(f)));
            return o
        }
        function fi(n, t, i, r, u, e) {
            return r && !r[f] && (r = fi(r)),
            u && !u[f] && (u = fi(u, e)),
            l(function(f, e, o, s) {
                var l, c, a, p = [], y = [], w = e.length, b = f || yr(t || "*", o.nodeType ? [o] : o, []), v = !n || !f && t ? b : wt(b, p, n, o, s), h = i ? u || (f ? n : w || r) ? [] : e : v;
                if (i && i(v, h, o, s),
                r)
                    for (l = wt(h, y),
                    r(l, [], o, s),
                    c = l.length; c--; )
                        (a = l[c]) && (h[y[c]] = !(v[y[c]] = a));
                if (f) {
                    if (u || n) {
                        if (u) {
                            for (l = [],
                            c = h.length; c--; )
                                (a = h[c]) && l.push(v[c] = a);
                            u(null, h = [], l, s)
                        }
                        for (c = h.length; c--; )
                            (a = h[c]) && (l = u ? nt(f, a) : p[c]) > -1 && (f[l] = !(e[l] = a))
                    }
                } else
                    h = wt(h === e ? h.splice(w, h.length) : h),
                    u ? u(null, e, h, s) : k.apply(e, h)
            })
        }
        function ei(n) {
            for (var o, u, r, s = n.length, h = t.relative[n[0].type], c = h || t.relative[" "], i = h ? 1 : 0, l = pt(function(n) {
                return n === o
            }, c, !0), a = pt(function(n) {
                return nt(o, n) > -1
            }, c, !0), e = [function(n, t, i) {
                var r = !h && (i || t !== ht) || ((o = t).nodeType ? l(n, t, i) : a(n, t, i));
                return o = null,
                r
            }
            ]; i < s; i++)
                if (u = t.relative[n[i].type])
                    e = [pt(ui(e), u)];
                else {
                    if (u = t.filter[n[i].type].apply(null, n[i].matches),
                    u[f]) {
                        for (r = ++i; r < s; r++)
                            if (t.relative[n[r].type])
                                break;
                        return fi(i > 1 && ui(e), i > 1 && yt(n.slice(0, i - 1).concat({
                            value: " " === n[i - 2].type ? "*" : ""
                        })).replace(at, "$1"), u, i < r && ei(n.slice(i, r)), r < s && ei(n = n.slice(r)), r < s && yt(n))
                    }
                    e.push(u)
                }
            return ui(e)
        }
        function pr(n, r) {
            var f = r.length > 0
              , e = n.length > 0
              , o = function(o, s, c, l, a) {
                var y, nt, d, g = 0, p = "0", tt = o && [], w = [], it = ht, rt = o || e && t.find.TAG("*", a), ut = v += null == it ? 1 : Math.random() || .1, ft = rt.length;
                for (a && (ht = s === i || s || a); p !== ft && null != (y = rt[p]); p++) {
                    if (e && y) {
                        for (nt = 0,
                        s || y.ownerDocument === i || (b(y),
                        c = !h); d = n[nt++]; )
                            if (d(y, s || i, c)) {
                                l.push(y);
                                break
                            }
                        a && (v = ut)
                    }
                    f && ((y = !d && y) && g--,
                    o && tt.push(y))
                }
                if (g += p,
                f && p !== g) {
                    for (nt = 0; d = r[nt++]; )
                        d(tt, w, s, c);
                    if (o) {
                        if (g > 0)
                            while (p--)
                                tt[p] || w[p] || (w[p] = nr.call(l));
                        w = wt(w)
                    }
                    k.apply(l, w);
                    a && !o && w.length > 0 && g + r.length > 1 && u.uniqueSort(l)
                }
                return a && (v = ut,
                ht = it),
                tt
            };
            return f ? l(o) : o
        }
        var rt, e, t, st, oi, ft, bt, si, ht, w, ut, b, i, s, h, o, d, ct, et, f = "sizzle" + 1 * new Date, c = n.document, v = 0, di = 0, hi = ti(), ci = ti(), lt = ti(), kt = function(n, t) {
            return n === t && (ut = !0),
            0
        }, gi = {}.hasOwnProperty, g = [], nr = g.pop, tr = g.push, k = g.push, li = g.slice, nt = function(n, t) {
            for (var i = 0, r = n.length; i < r; i++)
                if (n[i] === t)
                    return i;
            return -1
        }, dt = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", r = "[\\x20\\t\\r\\n\\f]", tt = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", ai = "\\[" + r + "*(" + tt + ")(?:" + r + "*([*^$|!~]?=)" + r + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + tt + "))|)" + r + "*\\]", gt = ":(" + tt + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ai + ")*)|.*)\\)|)", ir = new RegExp(r + "+","g"), at = new RegExp("^" + r + "+|((?:^|[^\\\\])(?:\\\\.)*)" + r + "+$","g"), rr = new RegExp("^" + r + "*," + r + "*"), ur = new RegExp("^" + r + "*([>+~]|" + r + ")" + r + "*"), fr = new RegExp("=" + r + "*([^\\]'\"]*?)" + r + "*\\]","g"), er = new RegExp(gt), or = new RegExp("^" + tt + "$"), vt = {
            ID: new RegExp("^#(" + tt + ")"),
            CLASS: new RegExp("^\\.(" + tt + ")"),
            TAG: new RegExp("^(" + tt + "|[*])"),
            ATTR: new RegExp("^" + ai),
            PSEUDO: new RegExp("^" + gt),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + r + "*(even|odd|(([+-]|)(\\d*)n|)" + r + "*(?:([+-]|)" + r + "*(\\d+)|))" + r + "*\\)|)","i"),
            bool: new RegExp("^(?:" + dt + ")$","i"),
            needsContext: new RegExp("^" + r + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + r + "*((?:-\\d)?\\d*)" + r + "*\\)|)(?=[^-]|$)","i")
        }, sr = /^(?:input|select|textarea|button)$/i, hr = /^h\d$/i, ot = /^[^{]+\{\s*\[native \w/, cr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ni = /[+~]/, y = new RegExp("\\\\([\\da-f]{1,6}" + r + "?|(" + r + ")|.)","ig"), p = function(n, t, i) {
            var r = "0x" + t - 65536;
            return r !== r || i ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
        }, vi = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, yi = function(n, t) {
            return t ? "\0" === n ? "?" : n.slice(0, -1) + "\\" + n.charCodeAt(n.length - 1).toString(16) + " " : "\\" + n
        }, pi = function() {
            b()
        }, lr = pt(function(n) {
            return n.disabled === !0 && ("form"in n || "label"in n)
        }, {
            dir: "parentNode",
            next: "legend"
        });
        try {
            k.apply(g = li.call(c.childNodes), c.childNodes);
            g[c.childNodes.length].nodeType
        } catch (wr) {
            k = {
                apply: g.length ? function(n, t) {
                    tr.apply(n, li.call(t))
                }
                : function(n, t) {
                    for (var i = n.length, r = 0; n[i++] = t[r++]; )
                        ;
                    n.length = i - 1
                }
            }
        }
        e = u.support = {};
        oi = u.isXML = function(n) {
            var t = n && (n.ownerDocument || n).documentElement;
            return !!t && "HTML" !== t.nodeName
        }
        ;
        b = u.setDocument = function(n) {
            var v, u, l = n ? n.ownerDocument || n : c;
            return l !== i && 9 === l.nodeType && l.documentElement ? (i = l,
            s = i.documentElement,
            h = !oi(i),
            c !== i && (u = i.defaultView) && u.top !== u && (u.addEventListener ? u.addEventListener("unload", pi, !1) : u.attachEvent && u.attachEvent("onunload", pi)),
            e.attributes = a(function(n) {
                return n.className = "i",
                !n.getAttribute("className")
            }),
            e.getElementsByTagName = a(function(n) {
                return n.appendChild(i.createComment("")),
                !n.getElementsByTagName("*").length
            }),
            e.getElementsByClassName = ot.test(i.getElementsByClassName),
            e.getById = a(function(n) {
                return s.appendChild(n).id = f,
                !i.getElementsByName || !i.getElementsByName(f).length
            }),
            e.getById ? (t.filter.ID = function(n) {
                var t = n.replace(y, p);
                return function(n) {
                    return n.getAttribute("id") === t
                }
            }
            ,
            t.find.ID = function(n, t) {
                if ("undefined" != typeof t.getElementById && h) {
                    var i = t.getElementById(n);
                    return i ? [i] : []
                }
            }
            ) : (t.filter.ID = function(n) {
                var t = n.replace(y, p);
                return function(n) {
                    var i = "undefined" != typeof n.getAttributeNode && n.getAttributeNode("id");
                    return i && i.value === t
                }
            }
            ,
            t.find.ID = function(n, t) {
                if ("undefined" != typeof t.getElementById && h) {
                    var i, u, f, r = t.getElementById(n);
                    if (r) {
                        if (i = r.getAttributeNode("id"),
                        i && i.value === n)
                            return [r];
                        for (f = t.getElementsByName(n),
                        u = 0; r = f[u++]; )
                            if (i = r.getAttributeNode("id"),
                            i && i.value === n)
                                return [r]
                    }
                    return []
                }
            }
            ),
            t.find.TAG = e.getElementsByTagName ? function(n, t) {
                return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(n) : e.qsa ? t.querySelectorAll(n) : void 0
            }
            : function(n, t) {
                var i, r = [], f = 0, u = t.getElementsByTagName(n);
                if ("*" === n) {
                    while (i = u[f++])
                        1 === i.nodeType && r.push(i);
                    return r
                }
                return u
            }
            ,
            t.find.CLASS = e.getElementsByClassName && function(n, t) {
                if ("undefined" != typeof t.getElementsByClassName && h)
                    return t.getElementsByClassName(n)
            }
            ,
            d = [],
            o = [],
            (e.qsa = ot.test(i.querySelectorAll)) && (a(function(n) {
                s.appendChild(n).innerHTML = "<a id='" + f + "'><\/a><select id='" + f + "-\r\\' msallowcapture=''><option selected=''><\/option><\/select>";
                n.querySelectorAll("[msallowcapture^='']").length && o.push("[*^$]=" + r + "*(?:''|\"\")");
                n.querySelectorAll("[selected]").length || o.push("\\[" + r + "*(?:value|" + dt + ")");
                n.querySelectorAll("[id~=" + f + "-]").length || o.push("~=");
                n.querySelectorAll(":checked").length || o.push(":checked");
                n.querySelectorAll("a#" + f + "+*").length || o.push(".#.+[+~]")
            }),
            a(function(n) {
                n.innerHTML = "<a href='' disabled='disabled'><\/a><select disabled='disabled'><option/><\/select>";
                var t = i.createElement("input");
                t.setAttribute("type", "hidden");
                n.appendChild(t).setAttribute("name", "D");
                n.querySelectorAll("[name=d]").length && o.push("name" + r + "*[*^$|!~]?=");
                2 !== n.querySelectorAll(":enabled").length && o.push(":enabled", ":disabled");
                s.appendChild(n).disabled = !0;
                2 !== n.querySelectorAll(":disabled").length && o.push(":enabled", ":disabled");
                n.querySelectorAll("*,:x");
                o.push(",.*:")
            })),
            (e.matchesSelector = ot.test(ct = s.matches || s.webkitMatchesSelector || s.mozMatchesSelector || s.oMatchesSelector || s.msMatchesSelector)) && a(function(n) {
                e.disconnectedMatch = ct.call(n, "*");
                ct.call(n, "[s!='']:x");
                d.push("!=", gt)
            }),
            o = o.length && new RegExp(o.join("|")),
            d = d.length && new RegExp(d.join("|")),
            v = ot.test(s.compareDocumentPosition),
            et = v || ot.test(s.contains) ? function(n, t) {
                var r = 9 === n.nodeType ? n.documentElement : n
                  , i = t && t.parentNode;
                return n === i || !(!i || 1 !== i.nodeType || !(r.contains ? r.contains(i) : n.compareDocumentPosition && 16 & n.compareDocumentPosition(i)))
            }
            : function(n, t) {
                if (t)
                    while (t = t.parentNode)
                        if (t === n)
                            return !0;
                return !1
            }
            ,
            kt = v ? function(n, t) {
                if (n === t)
                    return ut = !0,
                    0;
                var r = !n.compareDocumentPosition - !t.compareDocumentPosition;
                return r ? r : (r = (n.ownerDocument || n) === (t.ownerDocument || t) ? n.compareDocumentPosition(t) : 1,
                1 & r || !e.sortDetached && t.compareDocumentPosition(n) === r ? n === i || n.ownerDocument === c && et(c, n) ? -1 : t === i || t.ownerDocument === c && et(c, t) ? 1 : w ? nt(w, n) - nt(w, t) : 0 : 4 & r ? -1 : 1)
            }
            : function(n, t) {
                if (n === t)
                    return ut = !0,
                    0;
                var r, u = 0, o = n.parentNode, s = t.parentNode, f = [n], e = [t];
                if (!o || !s)
                    return n === i ? -1 : t === i ? 1 : o ? -1 : s ? 1 : w ? nt(w, n) - nt(w, t) : 0;
                if (o === s)
                    return wi(n, t);
                for (r = n; r = r.parentNode; )
                    f.unshift(r);
                for (r = t; r = r.parentNode; )
                    e.unshift(r);
                while (f[u] === e[u])
                    u++;
                return u ? wi(f[u], e[u]) : f[u] === c ? -1 : e[u] === c ? 1 : 0
            }
            ,
            i) : i
        }
        ;
        u.matches = function(n, t) {
            return u(n, null, null, t)
        }
        ;
        u.matchesSelector = function(n, t) {
            if ((n.ownerDocument || n) !== i && b(n),
            t = t.replace(fr, "='$1']"),
            e.matchesSelector && h && !lt[t + " "] && (!d || !d.test(t)) && (!o || !o.test(t)))
                try {
                    var r = ct.call(n, t);
                    if (r || e.disconnectedMatch || n.document && 11 !== n.document.nodeType)
                        return r
                } catch (f) {}
            return u(t, i, null, [n]).length > 0
        }
        ;
        u.contains = function(n, t) {
            return (n.ownerDocument || n) !== i && b(n),
            et(n, t)
        }
        ;
        u.attr = function(n, r) {
            (n.ownerDocument || n) !== i && b(n);
            var f = t.attrHandle[r.toLowerCase()]
              , u = f && gi.call(t.attrHandle, r.toLowerCase()) ? f(n, r, !h) : void 0;
            return void 0 !== u ? u : e.attributes || !h ? n.getAttribute(r) : (u = n.getAttributeNode(r)) && u.specified ? u.value : null
        }
        ;
        u.escape = function(n) {
            return (n + "").replace(vi, yi)
        }
        ;
        u.error = function(n) {
            throw new Error("Syntax error, unrecognized expression: " + n);
        }
        ;
        u.uniqueSort = function(n) {
            var r, u = [], t = 0, i = 0;
            if (ut = !e.detectDuplicates,
            w = !e.sortStable && n.slice(0),
            n.sort(kt),
            ut) {
                while (r = n[i++])
                    r === n[i] && (t = u.push(i));
                while (t--)
                    n.splice(u[t], 1)
            }
            return w = null,
            n
        }
        ;
        st = u.getText = function(n) {
            var r, i = "", u = 0, t = n.nodeType;
            if (t) {
                if (1 === t || 9 === t || 11 === t) {
                    if ("string" == typeof n.textContent)
                        return n.textContent;
                    for (n = n.firstChild; n; n = n.nextSibling)
                        i += st(n)
                } else if (3 === t || 4 === t)
                    return n.nodeValue
            } else
                while (r = n[u++])
                    i += st(r);
            return i
        }
        ;
        t = u.selectors = {
            cacheLength: 50,
            createPseudo: l,
            match: vt,
            attrHandle: {},
            find: {},
            relative: {
                ">": {
                    dir: "parentNode",
                    first: !0
                },
                " ": {
                    dir: "parentNode"
                },
                "+": {
                    dir: "previousSibling",
                    first: !0
                },
                "~": {
                    dir: "previousSibling"
                }
            },
            preFilter: {
                ATTR: function(n) {
                    return n[1] = n[1].replace(y, p),
                    n[3] = (n[3] || n[4] || n[5] || "").replace(y, p),
                    "~=" === n[2] && (n[3] = " " + n[3] + " "),
                    n.slice(0, 4)
                },
                CHILD: function(n) {
                    return n[1] = n[1].toLowerCase(),
                    "nth" === n[1].slice(0, 3) ? (n[3] || u.error(n[0]),
                    n[4] = +(n[4] ? n[5] + (n[6] || 1) : 2 * ("even" === n[3] || "odd" === n[3])),
                    n[5] = +(n[7] + n[8] || "odd" === n[3])) : n[3] && u.error(n[0]),
                    n
                },
                PSEUDO: function(n) {
                    var i, t = !n[6] && n[2];
                    return vt.CHILD.test(n[0]) ? null : (n[3] ? n[2] = n[4] || n[5] || "" : t && er.test(t) && (i = ft(t, !0)) && (i = t.indexOf(")", t.length - i) - t.length) && (n[0] = n[0].slice(0, i),
                    n[2] = t.slice(0, i)),
                    n.slice(0, 3))
                }
            },
            filter: {
                TAG: function(n) {
                    var t = n.replace(y, p).toLowerCase();
                    return "*" === n ? function() {
                        return !0
                    }
                    : function(n) {
                        return n.nodeName && n.nodeName.toLowerCase() === t
                    }
                },
                CLASS: function(n) {
                    var t = hi[n + " "];
                    return t || (t = new RegExp("(^|" + r + ")" + n + "(" + r + "|$)")) && hi(n, function(n) {
                        return t.test("string" == typeof n.className && n.className || "undefined" != typeof n.getAttribute && n.getAttribute("class") || "")
                    })
                },
                ATTR: function(n, t, i) {
                    return function(r) {
                        var f = u.attr(r, n);
                        return null == f ? "!=" === t : !t || (f += "",
                        "=" === t ? f === i : "!=" === t ? f !== i : "^=" === t ? i && 0 === f.indexOf(i) : "*=" === t ? i && f.indexOf(i) > -1 : "$=" === t ? i && f.slice(-i.length) === i : "~=" === t ? (" " + f.replace(ir, " ") + " ").indexOf(i) > -1 : "|=" === t && (f === i || f.slice(0, i.length + 1) === i + "-"))
                    }
                },
                CHILD: function(n, t, i, r, u) {
                    var s = "nth" !== n.slice(0, 3)
                      , o = "last" !== n.slice(-4)
                      , e = "of-type" === t;
                    return 1 === r && 0 === u ? function(n) {
                        return !!n.parentNode
                    }
                    : function(t, i, h) {
                        var p, w, y, c, a, b, k = s !== o ? "nextSibling" : "previousSibling", d = t.parentNode, nt = e && t.nodeName.toLowerCase(), g = !h && !e, l = !1;
                        if (d) {
                            if (s) {
                                while (k) {
                                    for (c = t; c = c[k]; )
                                        if (e ? c.nodeName.toLowerCase() === nt : 1 === c.nodeType)
                                            return !1;
                                    b = k = "only" === n && !b && "nextSibling"
                                }
                                return !0
                            }
                            if (b = [o ? d.firstChild : d.lastChild],
                            o && g) {
                                for (c = d,
                                y = c[f] || (c[f] = {}),
                                w = y[c.uniqueID] || (y[c.uniqueID] = {}),
                                p = w[n] || [],
                                a = p[0] === v && p[1],
                                l = a && p[2],
                                c = a && d.childNodes[a]; c = ++a && c && c[k] || (l = a = 0) || b.pop(); )
                                    if (1 === c.nodeType && ++l && c === t) {
                                        w[n] = [v, a, l];
                                        break
                                    }
                            } else if (g && (c = t,
                            y = c[f] || (c[f] = {}),
                            w = y[c.uniqueID] || (y[c.uniqueID] = {}),
                            p = w[n] || [],
                            a = p[0] === v && p[1],
                            l = a),
                            l === !1)
                                while (c = ++a && c && c[k] || (l = a = 0) || b.pop())
                                    if ((e ? c.nodeName.toLowerCase() === nt : 1 === c.nodeType) && ++l && (g && (y = c[f] || (c[f] = {}),
                                    w = y[c.uniqueID] || (y[c.uniqueID] = {}),
                                    w[n] = [v, l]),
                                    c === t))
                                        break;
                            return l -= u,
                            l === r || l % r == 0 && l / r >= 0
                        }
                    }
                },
                PSEUDO: function(n, i) {
                    var e, r = t.pseudos[n] || t.setFilters[n.toLowerCase()] || u.error("unsupported pseudo: " + n);
                    return r[f] ? r(i) : r.length > 1 ? (e = [n, n, "", i],
                    t.setFilters.hasOwnProperty(n.toLowerCase()) ? l(function(n, t) {
                        for (var u, f = r(n, i), e = f.length; e--; )
                            u = nt(n, f[e]),
                            n[u] = !(t[u] = f[e])
                    }) : function(n) {
                        return r(n, 0, e)
                    }
                    ) : r
                }
            },
            pseudos: {
                not: l(function(n) {
                    var t = []
                      , r = []
                      , i = bt(n.replace(at, "$1"));
                    return i[f] ? l(function(n, t, r, u) {
                        for (var e, o = i(n, null, u, []), f = n.length; f--; )
                            (e = o[f]) && (n[f] = !(t[f] = e))
                    }) : function(n, u, f) {
                        return t[0] = n,
                        i(t, null, f, r),
                        t[0] = null,
                        !r.pop()
                    }
                }),
                has: l(function(n) {
                    return function(t) {
                        return u(n, t).length > 0
                    }
                }),
                contains: l(function(n) {
                    return n = n.replace(y, p),
                    function(t) {
                        return (t.textContent || t.innerText || st(t)).indexOf(n) > -1
                    }
                }),
                lang: l(function(n) {
                    return or.test(n || "") || u.error("unsupported lang: " + n),
                    n = n.replace(y, p).toLowerCase(),
                    function(t) {
                        var i;
                        do
                            if (i = h ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))
                                return i = i.toLowerCase(),
                                i === n || 0 === i.indexOf(n + "-");
                        while ((t = t.parentNode) && 1 === t.nodeType);
                        return !1
                    }
                }),
                target: function(t) {
                    var i = n.location && n.location.hash;
                    return i && i.slice(1) === t.id
                },
                root: function(n) {
                    return n === s
                },
                focus: function(n) {
                    return n === i.activeElement && (!i.hasFocus || i.hasFocus()) && !!(n.type || n.href || ~n.tabIndex)
                },
                enabled: bi(!1),
                disabled: bi(!0),
                checked: function(n) {
                    var t = n.nodeName.toLowerCase();
                    return "input" === t && !!n.checked || "option" === t && !!n.selected
                },
                selected: function(n) {
                    return n.parentNode && n.parentNode.selectedIndex,
                    n.selected === !0
                },
                empty: function(n) {
                    for (n = n.firstChild; n; n = n.nextSibling)
                        if (n.nodeType < 6)
                            return !1;
                    return !0
                },
                parent: function(n) {
                    return !t.pseudos.empty(n)
                },
                header: function(n) {
                    return hr.test(n.nodeName)
                },
                input: function(n) {
                    return sr.test(n.nodeName)
                },
                button: function(n) {
                    var t = n.nodeName.toLowerCase();
                    return "input" === t && "button" === n.type || "button" === t
                },
                text: function(n) {
                    var t;
                    return "input" === n.nodeName.toLowerCase() && "text" === n.type && (null == (t = n.getAttribute("type")) || "text" === t.toLowerCase())
                },
                first: it(function() {
                    return [0]
                }),
                last: it(function(n, t) {
                    return [t - 1]
                }),
                eq: it(function(n, t, i) {
                    return [i < 0 ? i + t : i]
                }),
                even: it(function(n, t) {
                    for (var i = 0; i < t; i += 2)
                        n.push(i);
                    return n
                }),
                odd: it(function(n, t) {
                    for (var i = 1; i < t; i += 2)
                        n.push(i);
                    return n
                }),
                lt: it(function(n, t, i) {
                    for (var r = i < 0 ? i + t : i; --r >= 0; )
                        n.push(r);
                    return n
                }),
                gt: it(function(n, t, i) {
                    for (var r = i < 0 ? i + t : i; ++r < t; )
                        n.push(r);
                    return n
                })
            }
        };
        t.pseudos.nth = t.pseudos.eq;
        for (rt in {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        })
            t.pseudos[rt] = ar(rt);
        for (rt in {
            submit: !0,
            reset: !0
        })
            t.pseudos[rt] = vr(rt);
        return ki.prototype = t.filters = t.pseudos,
        t.setFilters = new ki,
        ft = u.tokenize = function(n, i) {
            var e, f, s, o, r, h, c, l = ci[n + " "];
            if (l)
                return i ? 0 : l.slice(0);
            for (r = n,
            h = [],
            c = t.preFilter; r; ) {
                (!e || (f = rr.exec(r))) && (f && (r = r.slice(f[0].length) || r),
                h.push(s = []));
                e = !1;
                (f = ur.exec(r)) && (e = f.shift(),
                s.push({
                    value: e,
                    type: f[0].replace(at, " ")
                }),
                r = r.slice(e.length));
                for (o in t.filter)
                    (f = vt[o].exec(r)) && (!c[o] || (f = c[o](f))) && (e = f.shift(),
                    s.push({
                        value: e,
                        type: o,
                        matches: f
                    }),
                    r = r.slice(e.length));
                if (!e)
                    break
            }
            return i ? r.length : r ? u.error(n) : ci(n, h).slice(0)
        }
        ,
        bt = u.compile = function(n, t) {
            var r, u = [], e = [], i = lt[n + " "];
            if (!i) {
                for (t || (t = ft(n)),
                r = t.length; r--; )
                    i = ei(t[r]),
                    i[f] ? u.push(i) : e.push(i);
                i = lt(n, pr(e, u));
                i.selector = n
            }
            return i
        }
        ,
        si = u.select = function(n, i, r, u) {
            var o, f, e, l, a, c = "function" == typeof n && n, s = !u && ft(n = c.selector || n);
            if (r = r || [],
            1 === s.length) {
                if (f = s[0] = s[0].slice(0),
                f.length > 2 && "ID" === (e = f[0]).type && 9 === i.nodeType && h && t.relative[f[1].type]) {
                    if (i = (t.find.ID(e.matches[0].replace(y, p), i) || [])[0],
                    !i)
                        return r;
                    c && (i = i.parentNode);
                    n = n.slice(f.shift().value.length)
                }
                for (o = vt.needsContext.test(n) ? 0 : f.length; o--; ) {
                    if (e = f[o],
                    t.relative[l = e.type])
                        break;
                    if ((a = t.find[l]) && (u = a(e.matches[0].replace(y, p), ni.test(f[0].type) && ri(i.parentNode) || i))) {
                        if (f.splice(o, 1),
                        n = u.length && yt(f),
                        !n)
                            return k.apply(r, u),
                            r;
                        break
                    }
                }
            }
            return (c || bt(n, s))(u, i, !h, r, !i || ni.test(n) && ri(i.parentNode) || i),
            r
        }
        ,
        e.sortStable = f.split("").sort(kt).join("") === f,
        e.detectDuplicates = !!ut,
        b(),
        e.sortDetached = a(function(n) {
            return 1 & n.compareDocumentPosition(i.createElement("fieldset"))
        }),
        a(function(n) {
            return n.innerHTML = "<a href='#'><\/a>",
            "#" === n.firstChild.getAttribute("href")
        }) || ii("type|href|height|width", function(n, t, i) {
            if (!i)
                return n.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
        }),
        e.attributes && a(function(n) {
            return n.innerHTML = "<input/>",
            n.firstChild.setAttribute("value", ""),
            "" === n.firstChild.getAttribute("value")
        }) || ii("value", function(n, t, i) {
            if (!i && "input" === n.nodeName.toLowerCase())
                return n.defaultValue
        }),
        a(function(n) {
            return null == n.getAttribute("disabled")
        }) || ii(dt, function(n, t, i) {
            var r;
            if (!i)
                return n[t] === !0 ? t.toLowerCase() : (r = n.getAttributeNode(t)) && r.specified ? r.value : null
        }),
        u
    }(n);
    i.find = y;
    i.expr = y.selectors;
    i.expr[":"] = i.expr.pseudos;
    i.uniqueSort = i.unique = y.uniqueSort;
    i.text = y.getText;
    i.isXMLDoc = y.isXML;
    i.contains = y.contains;
    i.escapeSelector = y.escape;
    var g = function(n, t, r) {
        for (var u = [], f = void 0 !== r; (n = n[t]) && 9 !== n.nodeType; )
            if (1 === n.nodeType) {
                if (f && i(n).is(r))
                    break;
                u.push(n)
            }
        return u
    }
      , ur = function(n, t) {
        for (var i = []; n; n = n.nextSibling)
            1 === n.nodeType && n !== t && i.push(n);
        return i
    }
      , fr = i.expr.match.needsContext;
    ei = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
    er = /^.[^:#\[\.,]*$/;
    i.filter = function(n, t, r) {
        var u = t[0];
        return r && (n = ":not(" + n + ")"),
        1 === t.length && 1 === u.nodeType ? i.find.matchesSelector(u, n) ? [u] : [] : i.find.matches(n, i.grep(t, function(n) {
            return 1 === n.nodeType
        }))
    }
    ;
    i.fn.extend({
        find: function(n) {
            var t, r, u = this.length, f = this;
            if ("string" != typeof n)
                return this.pushStack(i(n).filter(function() {
                    for (t = 0; t < u; t++)
                        if (i.contains(f[t], this))
                            return !0
                }));
            for (r = this.pushStack([]),
            t = 0; t < u; t++)
                i.find(n, f[t], r);
            return u > 1 ? i.uniqueSort(r) : r
        },
        filter: function(n) {
            return this.pushStack(oi(this, n || [], !1))
        },
        not: function(n) {
            return this.pushStack(oi(this, n || [], !0))
        },
        is: function(n) {
            return !!oi(this, "string" == typeof n && fr.test(n) ? i(n) : n || [], !1).length
        }
    });
    sr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
    hr = i.fn.init = function(n, t, r) {
        var f, e;
        if (!n)
            return this;
        if (r = r || or,
        "string" == typeof n) {
            if (f = "<" === n[0] && ">" === n[n.length - 1] && n.length >= 3 ? [null, n, null] : sr.exec(n),
            !f || !f[1] && t)
                return !t || t.jquery ? (t || r).find(n) : this.constructor(t).find(n);
            if (f[1]) {
                if (t = t instanceof i ? t[0] : t,
                i.merge(this, i.parseHTML(f[1], t && t.nodeType ? t.ownerDocument || t : u, !0)),
                ei.test(f[1]) && i.isPlainObject(t))
                    for (f in t)
                        i.isFunction(this[f]) ? this[f](t[f]) : this.attr(f, t[f]);
                return this
            }
            return e = u.getElementById(f[2]),
            e && (this[0] = e,
            this.length = 1),
            this
        }
        return n.nodeType ? (this[0] = n,
        this.length = 1,
        this) : i.isFunction(n) ? void 0 !== r.ready ? r.ready(n) : n(i) : i.makeArray(n, this)
    }
    ;
    hr.prototype = i.fn;
    or = i(u);
    cr = /^(?:parents|prev(?:Until|All))/;
    lr = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    i.fn.extend({
        has: function(n) {
            var t = i(n, this)
              , r = t.length;
            return this.filter(function() {
                for (var n = 0; n < r; n++)
                    if (i.contains(this, t[n]))
                        return !0
            })
        },
        closest: function(n, t) {
            var r, f = 0, o = this.length, u = [], e = "string" != typeof n && i(n);
            if (!fr.test(n))
                for (; f < o; f++)
                    for (r = this[f]; r && r !== t; r = r.parentNode)
                        if (r.nodeType < 11 && (e ? e.index(r) > -1 : 1 === r.nodeType && i.find.matchesSelector(r, n))) {
                            u.push(r);
                            break
                        }
            return this.pushStack(u.length > 1 ? i.uniqueSort(u) : u)
        },
        index: function(n) {
            return n ? "string" == typeof n ? ot.call(i(n), this[0]) : ot.call(this, n.jquery ? n[0] : n) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
        },
        add: function(n, t) {
            return this.pushStack(i.uniqueSort(i.merge(this.get(), i(n, t))))
        },
        addBack: function(n) {
            return this.add(null == n ? this.prevObject : this.prevObject.filter(n))
        }
    });
    i.each({
        parent: function(n) {
            var t = n.parentNode;
            return t && 11 !== t.nodeType ? t : null
        },
        parents: function(n) {
            return g(n, "parentNode")
        },
        parentsUntil: function(n, t, i) {
            return g(n, "parentNode", i)
        },
        next: function(n) {
            return ar(n, "nextSibling")
        },
        prev: function(n) {
            return ar(n, "previousSibling")
        },
        nextAll: function(n) {
            return g(n, "nextSibling")
        },
        prevAll: function(n) {
            return g(n, "previousSibling")
        },
        nextUntil: function(n, t, i) {
            return g(n, "nextSibling", i)
        },
        prevUntil: function(n, t, i) {
            return g(n, "previousSibling", i)
        },
        siblings: function(n) {
            return ur((n.parentNode || {}).firstChild, n)
        },
        children: function(n) {
            return ur(n.firstChild)
        },
        contents: function(n) {
            return l(n, "iframe") ? n.contentDocument : (l(n, "template") && (n = n.content || n),
            i.merge([], n.childNodes))
        }
    }, function(n, t) {
        i.fn[n] = function(r, u) {
            var f = i.map(this, t, r);
            return "Until" !== n.slice(-5) && (u = r),
            u && "string" == typeof u && (f = i.filter(u, f)),
            this.length > 1 && (lr[n] || i.uniqueSort(f),
            cr.test(n) && f.reverse()),
            this.pushStack(f)
        }
    });
    h = /[^\x20\t\r\n\f]+/g;
    i.Callbacks = function(n) {
        n = "string" == typeof n ? ne(n) : i.extend({}, n);
        var e, r, h, u, t = [], o = [], f = -1, c = function() {
            for (u = u || n.once,
            h = e = !0; o.length; f = -1)
                for (r = o.shift(); ++f < t.length; )
                    t[f].apply(r[0], r[1]) === !1 && n.stopOnFalse && (f = t.length,
                    r = !1);
            n.memory || (r = !1);
            e = !1;
            u && (t = r ? [] : "")
        }, s = {
            add: function() {
                return t && (r && !e && (f = t.length - 1,
                o.push(r)),
                function u(r) {
                    i.each(r, function(r, f) {
                        i.isFunction(f) ? n.unique && s.has(f) || t.push(f) : f && f.length && "string" !== i.type(f) && u(f)
                    })
                }(arguments),
                r && !e && c()),
                this
            },
            remove: function() {
                return i.each(arguments, function(n, r) {
                    for (var u; (u = i.inArray(r, t, u)) > -1; )
                        t.splice(u, 1),
                        u <= f && f--
                }),
                this
            },
            has: function(n) {
                return n ? i.inArray(n, t) > -1 : t.length > 0
            },
            empty: function() {
                return t && (t = []),
                this
            },
            disable: function() {
                return u = o = [],
                t = r = "",
                this
            },
            disabled: function() {
                return !t
            },
            lock: function() {
                return u = o = [],
                r || e || (t = r = ""),
                this
            },
            locked: function() {
                return !!u
            },
            fireWith: function(n, t) {
                return u || (t = t || [],
                t = [n, t.slice ? t.slice() : t],
                o.push(t),
                e || c()),
                this
            },
            fire: function() {
                return s.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !!h
            }
        };
        return s
    }
    ;
    i.extend({
        Deferred: function(t) {
            var u = [["notify", "progress", i.Callbacks("memory"), i.Callbacks("memory"), 2], ["resolve", "done", i.Callbacks("once memory"), i.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", i.Callbacks("once memory"), i.Callbacks("once memory"), 1, "rejected"]]
              , e = "pending"
              , f = {
                state: function() {
                    return e
                },
                always: function() {
                    return r.done(arguments).fail(arguments),
                    this
                },
                "catch": function(n) {
                    return f.then(null, n)
                },
                pipe: function() {
                    var n = arguments;
                    return i.Deferred(function(t) {
                        i.each(u, function(u, f) {
                            var e = i.isFunction(n[f[4]]) && n[f[4]];
                            r[f[1]](function() {
                                var n = e && e.apply(this, arguments);
                                n && i.isFunction(n.promise) ? n.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[f[0] + "With"](this, e ? [n] : arguments)
                            })
                        });
                        n = null
                    }).promise()
                },
                then: function(t, r, f) {
                    function o(t, r, u, f) {
                        return function() {
                            var s = this
                              , h = arguments
                              , l = function() {
                                var n, c;
                                if (!(t < e)) {
                                    if (n = u.apply(s, h),
                                    n === r.promise())
                                        throw new TypeError("Thenable self-resolution");
                                    c = n && ("object" == typeof n || "function" == typeof n) && n.then;
                                    i.isFunction(c) ? f ? c.call(n, o(e, r, nt, f), o(e, r, pt, f)) : (e++,
                                    c.call(n, o(e, r, nt, f), o(e, r, pt, f), o(e, r, nt, r.notifyWith))) : (u !== nt && (s = void 0,
                                    h = [n]),
                                    (f || r.resolveWith)(s, h))
                                }
                            }
                              , c = f ? l : function() {
                                try {
                                    l()
                                } catch (n) {
                                    i.Deferred.exceptionHook && i.Deferred.exceptionHook(n, c.stackTrace);
                                    t + 1 >= e && (u !== pt && (s = void 0,
                                    h = [n]),
                                    r.rejectWith(s, h))
                                }
                            }
                            ;
                            t ? c() : (i.Deferred.getStackHook && (c.stackTrace = i.Deferred.getStackHook()),
                            n.setTimeout(c))
                        }
                    }
                    var e = 0;
                    return i.Deferred(function(n) {
                        u[0][3].add(o(0, n, i.isFunction(f) ? f : nt, n.notifyWith));
                        u[1][3].add(o(0, n, i.isFunction(t) ? t : nt));
                        u[2][3].add(o(0, n, i.isFunction(r) ? r : pt))
                    }).promise()
                },
                promise: function(n) {
                    return null != n ? i.extend(n, f) : f
                }
            }
              , r = {};
            return i.each(u, function(n, t) {
                var i = t[2]
                  , o = t[5];
                f[t[1]] = i.add;
                o && i.add(function() {
                    e = o
                }, u[3 - n][2].disable, u[0][2].lock);
                i.add(t[3].fire);
                r[t[0]] = function() {
                    return r[t[0] + "With"](this === r ? void 0 : this, arguments),
                    this
                }
                ;
                r[t[0] + "With"] = i.fireWith
            }),
            f.promise(r),
            t && t.call(r, r),
            r
        },
        when: function(n) {
            var f = arguments.length
              , t = f
              , e = Array(t)
              , u = w.call(arguments)
              , r = i.Deferred()
              , o = function(n) {
                return function(t) {
                    e[n] = this;
                    u[n] = arguments.length > 1 ? w.call(arguments) : t;
                    --f || r.resolveWith(e, u)
                }
            };
            if (f <= 1 && (vr(n, r.done(o(t)).resolve, r.reject, !f),
            "pending" === r.state() || i.isFunction(u[t] && u[t].then)))
                return r.then();
            while (t--)
                vr(u[t], o(t), r.reject);
            return r.promise()
        }
    });
    yr = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
    i.Deferred.exceptionHook = function(t, i) {
        n.console && n.console.warn && t && yr.test(t.name) && n.console.warn("jQuery.Deferred exception: " + t.message, t.stack, i)
    }
    ;
    i.readyException = function(t) {
        n.setTimeout(function() {
            throw t;
        })
    }
    ;
    wt = i.Deferred();
    i.fn.ready = function(n) {
        return wt.then(n)["catch"](function(n) {
            i.readyException(n)
        }),
        this
    }
    ;
    i.extend({
        isReady: !1,
        readyWait: 1,
        ready: function(n) {
            (n === !0 ? --i.readyWait : i.isReady) || (i.isReady = !0,
            n !== !0 && --i.readyWait > 0 || wt.resolveWith(u, [i]))
        }
    });
    i.ready.then = wt.then;
    "complete" === u.readyState || "loading" !== u.readyState && !u.documentElement.doScroll ? n.setTimeout(i.ready) : (u.addEventListener("DOMContentLoaded", bt),
    n.addEventListener("load", bt));
    v = function(n, t, r, u, f, e, o) {
        var s = 0
          , c = n.length
          , h = null == r;
        if ("object" === i.type(r)) {
            f = !0;
            for (s in r)
                v(n, t, s, r[s], !0, e, o)
        } else if (void 0 !== u && (f = !0,
        i.isFunction(u) || (o = !0),
        h && (o ? (t.call(n, u),
        t = null) : (h = t,
        t = function(n, t, r) {
            return h.call(i(n), r)
        }
        )),
        t))
            for (; s < c; s++)
                t(n[s], r, o ? u : u.call(n[s], s, t(n[s], r)));
        return f ? n : h ? t.call(n) : c ? t(n[0], r) : e
    }
    ;
    st = function(n) {
        return 1 === n.nodeType || 9 === n.nodeType || !+n.nodeType
    }
    ;
    ht.uid = 1;
    ht.prototype = {
        cache: function(n) {
            var t = n[this.expando];
            return t || (t = {},
            st(n) && (n.nodeType ? n[this.expando] = t : Object.defineProperty(n, this.expando, {
                value: t,
                configurable: !0
            }))),
            t
        },
        set: function(n, t, r) {
            var u, f = this.cache(n);
            if ("string" == typeof t)
                f[i.camelCase(t)] = r;
            else
                for (u in t)
                    f[i.camelCase(u)] = t[u];
            return f
        },
        get: function(n, t) {
            return void 0 === t ? this.cache(n) : n[this.expando] && n[this.expando][i.camelCase(t)]
        },
        access: function(n, t, i) {
            return void 0 === t || t && "string" == typeof t && void 0 === i ? this.get(n, t) : (this.set(n, t, i),
            void 0 !== i ? i : t)
        },
        remove: function(n, t) {
            var u, r = n[this.expando];
            if (void 0 !== r) {
                if (void 0 !== t)
                    for (Array.isArray(t) ? t = t.map(i.camelCase) : (t = i.camelCase(t),
                    t = (t in r) ? [t] : t.match(h) || []),
                    u = t.length; u--; )
                        delete r[t[u]];
                (void 0 === t || i.isEmptyObject(r)) && (n.nodeType ? n[this.expando] = void 0 : delete n[this.expando])
            }
        },
        hasData: function(n) {
            var t = n[this.expando];
            return void 0 !== t && !i.isEmptyObject(t)
        }
    };
    var r = new ht
      , e = new ht
      , te = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/
      , ie = /[A-Z]/g;
    i.extend({
        hasData: function(n) {
            return e.hasData(n) || r.hasData(n)
        },
        data: function(n, t, i) {
            return e.access(n, t, i)
        },
        removeData: function(n, t) {
            e.remove(n, t)
        },
        _data: function(n, t, i) {
            return r.access(n, t, i)
        },
        _removeData: function(n, t) {
            r.remove(n, t)
        }
    });
    i.fn.extend({
        data: function(n, t) {
            var o, f, s, u = this[0], h = u && u.attributes;
            if (void 0 === n) {
                if (this.length && (s = e.get(u),
                1 === u.nodeType && !r.get(u, "hasDataAttrs"))) {
                    for (o = h.length; o--; )
                        h[o] && (f = h[o].name,
                        0 === f.indexOf("data-") && (f = i.camelCase(f.slice(5)),
                        pr(u, f, s[f])));
                    r.set(u, "hasDataAttrs", !0)
                }
                return s
            }
            return "object" == typeof n ? this.each(function() {
                e.set(this, n)
            }) : v(this, function(t) {
                var i;
                if (u && void 0 === t) {
                    if ((i = e.get(u, n),
                    void 0 !== i) || (i = pr(u, n),
                    void 0 !== i))
                        return i
                } else
                    this.each(function() {
                        e.set(this, n, t)
                    })
            }, null, t, arguments.length > 1, null, !0)
        },
        removeData: function(n) {
            return this.each(function() {
                e.remove(this, n)
            })
        }
    });
    i.extend({
        queue: function(n, t, u) {
            var f;
            if (n)
                return t = (t || "fx") + "queue",
                f = r.get(n, t),
                u && (!f || Array.isArray(u) ? f = r.access(n, t, i.makeArray(u)) : f.push(u)),
                f || []
        },
        dequeue: function(n, t) {
            t = t || "fx";
            var r = i.queue(n, t)
              , e = r.length
              , u = r.shift()
              , f = i._queueHooks(n, t)
              , o = function() {
                i.dequeue(n, t)
            };
            "inprogress" === u && (u = r.shift(),
            e--);
            u && ("fx" === t && r.unshift("inprogress"),
            delete f.stop,
            u.call(n, o, f));
            !e && f && f.empty.fire()
        },
        _queueHooks: function(n, t) {
            var u = t + "queueHooks";
            return r.get(n, u) || r.access(n, u, {
                empty: i.Callbacks("once memory").add(function() {
                    r.remove(n, [t + "queue", u])
                })
            })
        }
    });
    i.fn.extend({
        queue: function(n, t) {
            var r = 2;
            return "string" != typeof n && (t = n,
            n = "fx",
            r--),
            arguments.length < r ? i.queue(this[0], n) : void 0 === t ? this : this.each(function() {
                var r = i.queue(this, n, t);
                i._queueHooks(this, n);
                "fx" === n && "inprogress" !== r[0] && i.dequeue(this, n)
            })
        },
        dequeue: function(n) {
            return this.each(function() {
                i.dequeue(this, n)
            })
        },
        clearQueue: function(n) {
            return this.queue(n || "fx", [])
        },
        promise: function(n, t) {
            var u, e = 1, o = i.Deferred(), f = this, s = this.length, h = function() {
                --e || o.resolveWith(f, [f])
            };
            for ("string" != typeof n && (t = n,
            n = void 0),
            n = n || "fx"; s--; )
                u = r.get(f[s], n + "queueHooks"),
                u && u.empty && (e++,
                u.empty.add(h));
            return h(),
            o.promise(t)
        }
    });
    var wr = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source
      , ct = new RegExp("^(?:([+-])=|)(" + wr + ")([a-z%]*)$","i")
      , b = ["Top", "Right", "Bottom", "Left"]
      , kt = function(n, t) {
        return n = t || n,
        "none" === n.style.display || "" === n.style.display && i.contains(n.ownerDocument, n) && "none" === i.css(n, "display")
    }
      , br = function(n, t, i, r) {
        var f, u, e = {};
        for (u in t)
            e[u] = n.style[u],
            n.style[u] = t[u];
        f = i.apply(n, r || []);
        for (u in t)
            n.style[u] = e[u];
        return f
    };
    si = {};
    i.fn.extend({
        show: function() {
            return tt(this, !0)
        },
        hide: function() {
            return tt(this)
        },
        toggle: function(n) {
            return "boolean" == typeof n ? n ? this.show() : this.hide() : this.each(function() {
                kt(this) ? i(this).show() : i(this).hide()
            })
        }
    });
    var dr = /^(?:checkbox|radio)$/i
      , gr = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i
      , nu = /^$|\/(?:java|ecma)script/i
      , c = {
        option: [1, "<select multiple='multiple'>", "<\/select>"],
        thead: [1, "<table>", "<\/table>"],
        col: [2, "<table><colgroup>", "<\/colgroup><\/table>"],
        tr: [2, "<table><tbody>", "<\/tbody><\/table>"],
        td: [3, "<table><tbody><tr>", "<\/tr><\/tbody><\/table>"],
        _default: [0, "", ""]
    };
    c.optgroup = c.option;
    c.tbody = c.tfoot = c.colgroup = c.caption = c.thead;
    c.th = c.td;
    tu = /<|&#?\w+;/;
    !function() {
        var i = u.createDocumentFragment()
          , n = i.appendChild(u.createElement("div"))
          , t = u.createElement("input");
        t.setAttribute("type", "radio");
        t.setAttribute("checked", "checked");
        t.setAttribute("name", "t");
        n.appendChild(t);
        f.checkClone = n.cloneNode(!0).cloneNode(!0).lastChild.checked;
        n.innerHTML = "<textarea>x<\/textarea>";
        f.noCloneChecked = !!n.cloneNode(!0).lastChild.defaultValue
    }();
    var dt = u.documentElement
      , fe = /^key/
      , ee = /^(?:mouse|pointer|contextmenu|drag|drop)|click/
      , ru = /^([^.]*)(?:\.(.+)|)/;
    i.event = {
        global: {},
        add: function(n, t, u, f, e) {
            var v, y, w, p, b, c, s, l, o, k, d, a = r.get(n);
            if (a)
                for (u.handler && (v = u,
                u = v.handler,
                e = v.selector),
                e && i.find.matchesSelector(dt, e),
                u.guid || (u.guid = i.guid++),
                (p = a.events) || (p = a.events = {}),
                (y = a.handle) || (y = a.handle = function(t) {
                    if ("undefined" != typeof i && i.event.triggered !== t.type)
                        return i.event.dispatch.apply(n, arguments)
                }
                ),
                t = (t || "").match(h) || [""],
                b = t.length; b--; )
                    w = ru.exec(t[b]) || [],
                    o = d = w[1],
                    k = (w[2] || "").split(".").sort(),
                    o && (s = i.event.special[o] || {},
                    o = (e ? s.delegateType : s.bindType) || o,
                    s = i.event.special[o] || {},
                    c = i.extend({
                        type: o,
                        origType: d,
                        data: f,
                        handler: u,
                        guid: u.guid,
                        selector: e,
                        needsContext: e && i.expr.match.needsContext.test(e),
                        namespace: k.join(".")
                    }, v),
                    (l = p[o]) || (l = p[o] = [],
                    l.delegateCount = 0,
                    s.setup && s.setup.call(n, f, k, y) !== !1 || n.addEventListener && n.addEventListener(o, y)),
                    s.add && (s.add.call(n, c),
                    c.handler.guid || (c.handler.guid = u.guid)),
                    e ? l.splice(l.delegateCount++, 0, c) : l.push(c),
                    i.event.global[o] = !0)
        },
        remove: function(n, t, u, f, e) {
            var y, k, c, v, p, s, l, a, o, b, d, w = r.hasData(n) && r.get(n);
            if (w && (v = w.events)) {
                for (t = (t || "").match(h) || [""],
                p = t.length; p--; )
                    if (c = ru.exec(t[p]) || [],
                    o = d = c[1],
                    b = (c[2] || "").split(".").sort(),
                    o) {
                        for (l = i.event.special[o] || {},
                        o = (f ? l.delegateType : l.bindType) || o,
                        a = v[o] || [],
                        c = c[2] && new RegExp("(^|\\.)" + b.join("\\.(?:.*\\.|)") + "(\\.|$)"),
                        k = y = a.length; y--; )
                            s = a[y],
                            !e && d !== s.origType || u && u.guid !== s.guid || c && !c.test(s.namespace) || f && f !== s.selector && ("**" !== f || !s.selector) || (a.splice(y, 1),
                            s.selector && a.delegateCount--,
                            l.remove && l.remove.call(n, s));
                        k && !a.length && (l.teardown && l.teardown.call(n, b, w.handle) !== !1 || i.removeEvent(n, o, w.handle),
                        delete v[o])
                    } else
                        for (o in v)
                            i.event.remove(n, o + t[p], u, f, !0);
                i.isEmptyObject(v) && r.remove(n, "handle events")
            }
        },
        dispatch: function(n) {
            var t = i.event.fix(n), u, c, s, e, f, l, h = new Array(arguments.length), a = (r.get(this, "events") || {})[t.type] || [], o = i.event.special[t.type] || {};
            for (h[0] = t,
            u = 1; u < arguments.length; u++)
                h[u] = arguments[u];
            if (t.delegateTarget = this,
            !o.preDispatch || o.preDispatch.call(this, t) !== !1) {
                for (l = i.event.handlers.call(this, t, a),
                u = 0; (e = l[u++]) && !t.isPropagationStopped(); )
                    for (t.currentTarget = e.elem,
                    c = 0; (f = e.handlers[c++]) && !t.isImmediatePropagationStopped(); )
                        t.rnamespace && !t.rnamespace.test(f.namespace) || (t.handleObj = f,
                        t.data = f.data,
                        s = ((i.event.special[f.origType] || {}).handle || f.handler).apply(e.elem, h),
                        void 0 !== s && (t.result = s) === !1 && (t.preventDefault(),
                        t.stopPropagation()));
                return o.postDispatch && o.postDispatch.call(this, t),
                t.result
            }
        },
        handlers: function(n, t) {
            var f, e, u, o, s, c = [], h = t.delegateCount, r = n.target;
            if (h && r.nodeType && !("click" === n.type && n.button >= 1))
                for (; r !== this; r = r.parentNode || this)
                    if (1 === r.nodeType && ("click" !== n.type || r.disabled !== !0)) {
                        for (o = [],
                        s = {},
                        f = 0; f < h; f++)
                            e = t[f],
                            u = e.selector + " ",
                            void 0 === s[u] && (s[u] = e.needsContext ? i(u, this).index(r) > -1 : i.find(u, this, null, [r]).length),
                            s[u] && o.push(e);
                        o.length && c.push({
                            elem: r,
                            handlers: o
                        })
                    }
            return r = this,
            h < t.length && c.push({
                elem: r,
                handlers: t.slice(h)
            }),
            c
        },
        addProp: function(n, t) {
            Object.defineProperty(i.Event.prototype, n, {
                enumerable: !0,
                configurable: !0,
                get: i.isFunction(t) ? function() {
                    if (this.originalEvent)
                        return t(this.originalEvent)
                }
                : function() {
                    if (this.originalEvent)
                        return this.originalEvent[n]
                }
                ,
                set: function(t) {
                    Object.defineProperty(this, n, {
                        enumerable: !0,
                        configurable: !0,
                        writable: !0,
                        value: t
                    })
                }
            })
        },
        fix: function(n) {
            return n[i.expando] ? n : new i.Event(n)
        },
        special: {
            load: {
                noBubble: !0
            },
            focus: {
                trigger: function() {
                    if (this !== uu() && this.focus)
                        return this.focus(),
                        !1
                },
                delegateType: "focusin"
            },
            blur: {
                trigger: function() {
                    if (this === uu() && this.blur)
                        return this.blur(),
                        !1
                },
                delegateType: "focusout"
            },
            click: {
                trigger: function() {
                    if ("checkbox" === this.type && this.click && l(this, "input"))
                        return this.click(),
                        !1
                },
                _default: function(n) {
                    return l(n.target, "a")
                }
            },
            beforeunload: {
                postDispatch: function(n) {
                    void 0 !== n.result && n.originalEvent && (n.originalEvent.returnValue = n.result)
                }
            }
        }
    };
    i.removeEvent = function(n, t, i) {
        n.removeEventListener && n.removeEventListener(t, i)
    }
    ;
    i.Event = function(n, t) {
        return this instanceof i.Event ? (n && n.type ? (this.originalEvent = n,
        this.type = n.type,
        this.isDefaultPrevented = n.defaultPrevented || void 0 === n.defaultPrevented && n.returnValue === !1 ? gt : it,
        this.target = n.target && 3 === n.target.nodeType ? n.target.parentNode : n.target,
        this.currentTarget = n.currentTarget,
        this.relatedTarget = n.relatedTarget) : this.type = n,
        t && i.extend(this, t),
        this.timeStamp = n && n.timeStamp || i.now(),
        void (this[i.expando] = !0)) : new i.Event(n,t)
    }
    ;
    i.Event.prototype = {
        constructor: i.Event,
        isDefaultPrevented: it,
        isPropagationStopped: it,
        isImmediatePropagationStopped: it,
        isSimulated: !1,
        preventDefault: function() {
            var n = this.originalEvent;
            this.isDefaultPrevented = gt;
            n && !this.isSimulated && n.preventDefault()
        },
        stopPropagation: function() {
            var n = this.originalEvent;
            this.isPropagationStopped = gt;
            n && !this.isSimulated && n.stopPropagation()
        },
        stopImmediatePropagation: function() {
            var n = this.originalEvent;
            this.isImmediatePropagationStopped = gt;
            n && !this.isSimulated && n.stopImmediatePropagation();
            this.stopPropagation()
        }
    };
    i.each({
        altKey: !0,
        bubbles: !0,
        cancelable: !0,
        changedTouches: !0,
        ctrlKey: !0,
        detail: !0,
        eventPhase: !0,
        metaKey: !0,
        pageX: !0,
        pageY: !0,
        shiftKey: !0,
        view: !0,
        char: !0,
        charCode: !0,
        key: !0,
        keyCode: !0,
        button: !0,
        buttons: !0,
        clientX: !0,
        clientY: !0,
        offsetX: !0,
        offsetY: !0,
        pointerId: !0,
        pointerType: !0,
        screenX: !0,
        screenY: !0,
        targetTouches: !0,
        toElement: !0,
        touches: !0,
        which: function(n) {
            var t = n.button;
            return null == n.which && fe.test(n.type) ? null != n.charCode ? n.charCode : n.keyCode : !n.which && void 0 !== t && ee.test(n.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : n.which
        }
    }, i.event.addProp);
    i.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
        pointerleave: "pointerout"
    }, function(n, t) {
        i.event.special[n] = {
            delegateType: t,
            bindType: t,
            handle: function(n) {
                var u, f = this, r = n.relatedTarget, e = n.handleObj;
                return r && (r === f || i.contains(f, r)) || (n.type = e.origType,
                u = e.handler.apply(this, arguments),
                n.type = t),
                u
            }
        }
    });
    i.fn.extend({
        on: function(n, t, i, r) {
            return ci(this, n, t, i, r)
        },
        one: function(n, t, i, r) {
            return ci(this, n, t, i, r, 1)
        },
        off: function(n, t, r) {
            var u, f;
            if (n && n.preventDefault && n.handleObj)
                return u = n.handleObj,
                i(n.delegateTarget).off(u.namespace ? u.origType + "." + u.namespace : u.origType, u.selector, u.handler),
                this;
            if ("object" == typeof n) {
                for (f in n)
                    this.off(f, t, n[f]);
                return this
            }
            return t !== !1 && "function" != typeof t || (r = t,
            t = void 0),
            r === !1 && (r = it),
            this.each(function() {
                i.event.remove(this, n, r, t)
            })
        }
    });
    var oe = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi
      , se = /<script|<style|<link/i
      , he = /checked\s*(?:[^=]|=\s*.checked.)/i
      , ce = /^true\/(.*)/
      , le = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
    i.extend({
        htmlPrefilter: function(n) {
            return n.replace(oe, "<$1><\/$2>")
        },
        clone: function(n, t, r) {
            var u, c, s, e, h = n.cloneNode(!0), l = i.contains(n.ownerDocument, n);
            if (!(f.noCloneChecked || 1 !== n.nodeType && 11 !== n.nodeType || i.isXMLDoc(n)))
                for (e = o(h),
                s = o(n),
                u = 0,
                c = s.length; u < c; u++)
                    ye(s[u], e[u]);
            if (t)
                if (r)
                    for (s = s || o(n),
                    e = e || o(h),
                    u = 0,
                    c = s.length; u < c; u++)
                        eu(s[u], e[u]);
                else
                    eu(n, h);
            return e = o(h, "script"),
            e.length > 0 && hi(e, !l && o(n, "script")),
            h
        },
        cleanData: function(n) {
            for (var u, t, f, s = i.event.special, o = 0; void 0 !== (t = n[o]); o++)
                if (st(t)) {
                    if (u = t[r.expando]) {
                        if (u.events)
                            for (f in u.events)
                                s[f] ? i.event.remove(t, f) : i.removeEvent(t, f, u.handle);
                        t[r.expando] = void 0
                    }
                    t[e.expando] && (t[e.expando] = void 0)
                }
        }
    });
    i.fn.extend({
        detach: function(n) {
            return ou(this, n, !0)
        },
        remove: function(n) {
            return ou(this, n)
        },
        text: function(n) {
            return v(this, function(n) {
                return void 0 === n ? i.text(this) : this.empty().each(function() {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = n)
                })
            }, null, n, arguments.length)
        },
        append: function() {
            return rt(this, arguments, function(n) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var t = fu(this, n);
                    t.appendChild(n)
                }
            })
        },
        prepend: function() {
            return rt(this, arguments, function(n) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var t = fu(this, n);
                    t.insertBefore(n, t.firstChild)
                }
            })
        },
        before: function() {
            return rt(this, arguments, function(n) {
                this.parentNode && this.parentNode.insertBefore(n, this)
            })
        },
        after: function() {
            return rt(this, arguments, function(n) {
                this.parentNode && this.parentNode.insertBefore(n, this.nextSibling)
            })
        },
        empty: function() {
            for (var n, t = 0; null != (n = this[t]); t++)
                1 === n.nodeType && (i.cleanData(o(n, !1)),
                n.textContent = "");
            return this
        },
        clone: function(n, t) {
            return n = null != n && n,
            t = null == t ? n : t,
            this.map(function() {
                return i.clone(this, n, t)
            })
        },
        html: function(n) {
            return v(this, function(n) {
                var t = this[0] || {}
                  , r = 0
                  , u = this.length;
                if (void 0 === n && 1 === t.nodeType)
                    return t.innerHTML;
                if ("string" == typeof n && !se.test(n) && !c[(gr.exec(n) || ["", ""])[1].toLowerCase()]) {
                    n = i.htmlPrefilter(n);
                    try {
                        for (; r < u; r++)
                            t = this[r] || {},
                            1 === t.nodeType && (i.cleanData(o(t, !1)),
                            t.innerHTML = n);
                        t = 0
                    } catch (f) {}
                }
                t && this.empty().append(n)
            }, null, n, arguments.length)
        },
        replaceWith: function() {
            var n = [];
            return rt(this, arguments, function(t) {
                var r = this.parentNode;
                i.inArray(this, n) < 0 && (i.cleanData(o(this)),
                r && r.replaceChild(t, this))
            }, n)
        }
    });
    i.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function(n, t) {
        i.fn[n] = function(n) {
            for (var u, f = [], e = i(n), o = e.length - 1, r = 0; r <= o; r++)
                u = r === o ? this : this.clone(!0),
                i(e[r])[t](u),
                ui.apply(f, u.get());
            return this.pushStack(f)
        }
    });
    var su = /^margin/
      , li = new RegExp("^(" + wr + ")(?!px)[a-z%]+$","i")
      , ni = function(t) {
        var i = t.ownerDocument.defaultView;
        return i && i.opener || (i = n),
        i.getComputedStyle(t)
    };
    !function() {
        function r() {
            if (t) {
                t.style.cssText = "box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%";
                t.innerHTML = "";
                dt.appendChild(e);
                var i = n.getComputedStyle(t);
                o = "1%" !== i.top;
                c = "2px" === i.marginLeft;
                s = "4px" === i.width;
                t.style.marginRight = "50%";
                h = "4px" === i.marginRight;
                dt.removeChild(e);
                t = null
            }
        }
        var o, s, h, c, e = u.createElement("div"), t = u.createElement("div");
        t.style && (t.style.backgroundClip = "content-box",
        t.cloneNode(!0).style.backgroundClip = "",
        f.clearCloneStyle = "content-box" === t.style.backgroundClip,
        e.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",
        e.appendChild(t),
        i.extend(f, {
            pixelPosition: function() {
                return r(),
                o
            },
            boxSizingReliable: function() {
                return r(),
                s
            },
            pixelMarginRight: function() {
                return r(),
                h
            },
            reliableMarginLeft: function() {
                return r(),
                c
            }
        }))
    }();
    var pe = /^(none|table(?!-c[ea]).+)/
      , cu = /^--/
      , we = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    }
      , lu = {
        letterSpacing: "0",
        fontWeight: "400"
    }
      , au = ["Webkit", "Moz", "ms"]
      , vu = u.createElement("div").style;
    i.extend({
        cssHooks: {
            opacity: {
                get: function(n, t) {
                    if (t) {
                        var i = lt(n, "opacity");
                        return "" === i ? "1" : i
                    }
                }
            }
        },
        cssNumber: {
            animationIterationCount: !0,
            columnCount: !0,
            fillOpacity: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            float: "cssFloat"
        },
        style: function(n, t, r, u) {
            if (n && 3 !== n.nodeType && 8 !== n.nodeType && n.style) {
                var e, s, o, c = i.camelCase(t), l = cu.test(t), h = n.style;
                return l || (t = yu(c)),
                o = i.cssHooks[t] || i.cssHooks[c],
                void 0 === r ? o && "get"in o && void 0 !== (e = o.get(n, !1, u)) ? e : h[t] : (s = typeof r,
                "string" === s && (e = ct.exec(r)) && e[1] && (r = kr(n, t, e),
                s = "number"),
                null != r && r === r && ("number" === s && (r += e && e[3] || (i.cssNumber[c] ? "" : "px")),
                f.clearCloneStyle || "" !== r || 0 !== t.indexOf("background") || (h[t] = "inherit"),
                o && "set"in o && void 0 === (r = o.set(n, r, u)) || (l ? h.setProperty(t, r) : h[t] = r)),
                void 0)
            }
        },
        css: function(n, t, r, u) {
            var f, o, e, s = i.camelCase(t), h = cu.test(t);
            return h || (t = yu(s)),
            e = i.cssHooks[t] || i.cssHooks[s],
            e && "get"in e && (f = e.get(n, !0, r)),
            void 0 === f && (f = lt(n, t, u)),
            "normal" === f && t in lu && (f = lu[t]),
            "" === r || r ? (o = parseFloat(f),
            r === !0 || isFinite(o) ? o || 0 : f) : f
        }
    });
    i.each(["height", "width"], function(n, t) {
        i.cssHooks[t] = {
            get: function(n, r, u) {
                if (r)
                    return !pe.test(i.css(n, "display")) || n.getClientRects().length && n.getBoundingClientRect().width ? bu(n, t, u) : br(n, we, function() {
                        return bu(n, t, u)
                    })
            },
            set: function(n, r, u) {
                var f, e = u && ni(n), o = u && wu(n, t, u, "border-box" === i.css(n, "boxSizing", !1, e), e);
                return o && (f = ct.exec(r)) && "px" !== (f[3] || "px") && (n.style[t] = r,
                r = i.css(n, t)),
                pu(n, r, o)
            }
        }
    });
    i.cssHooks.marginLeft = hu(f.reliableMarginLeft, function(n, t) {
        if (t)
            return (parseFloat(lt(n, "marginLeft")) || n.getBoundingClientRect().left - br(n, {
                marginLeft: 0
            }, function() {
                return n.getBoundingClientRect().left
            })) + "px"
    });
    i.each({
        margin: "",
        padding: "",
        border: "Width"
    }, function(n, t) {
        i.cssHooks[n + t] = {
            expand: function(i) {
                for (var r = 0, f = {}, u = "string" == typeof i ? i.split(" ") : [i]; r < 4; r++)
                    f[n + b[r] + t] = u[r] || u[r - 2] || u[0];
                return f
            }
        };
        su.test(n) || (i.cssHooks[n + t].set = pu)
    });
    i.fn.extend({
        css: function(n, t) {
            return v(this, function(n, t, r) {
                var f, e, o = {}, u = 0;
                if (Array.isArray(t)) {
                    for (f = ni(n),
                    e = t.length; u < e; u++)
                        o[t[u]] = i.css(n, t[u], !1, f);
                    return o
                }
                return void 0 !== r ? i.style(n, t, r) : i.css(n, t)
            }, n, t, arguments.length > 1)
        }
    });
    i.Tween = s;
    s.prototype = {
        constructor: s,
        init: function(n, t, r, u, f, e) {
            this.elem = n;
            this.prop = r;
            this.easing = f || i.easing._default;
            this.options = t;
            this.start = this.now = this.cur();
            this.end = u;
            this.unit = e || (i.cssNumber[r] ? "" : "px")
        },
        cur: function() {
            var n = s.propHooks[this.prop];
            return n && n.get ? n.get(this) : s.propHooks._default.get(this)
        },
        run: function(n) {
            var t, r = s.propHooks[this.prop];
            return this.pos = this.options.duration ? t = i.easing[this.easing](n, this.options.duration * n, 0, 1, this.options.duration) : t = n,
            this.now = (this.end - this.start) * t + this.start,
            this.options.step && this.options.step.call(this.elem, this.now, this),
            r && r.set ? r.set(this) : s.propHooks._default.set(this),
            this
        }
    };
    s.prototype.init.prototype = s.prototype;
    s.propHooks = {
        _default: {
            get: function(n) {
                var t;
                return 1 !== n.elem.nodeType || null != n.elem[n.prop] && null == n.elem.style[n.prop] ? n.elem[n.prop] : (t = i.css(n.elem, n.prop, ""),
                t && "auto" !== t ? t : 0)
            },
            set: function(n) {
                i.fx.step[n.prop] ? i.fx.step[n.prop](n) : 1 !== n.elem.nodeType || null == n.elem.style[i.cssProps[n.prop]] && !i.cssHooks[n.prop] ? n.elem[n.prop] = n.now : i.style(n.elem, n.prop, n.now + n.unit)
            }
        }
    };
    s.propHooks.scrollTop = s.propHooks.scrollLeft = {
        set: function(n) {
            n.elem.nodeType && n.elem.parentNode && (n.elem[n.prop] = n.now)
        }
    };
    i.easing = {
        linear: function(n) {
            return n
        },
        swing: function(n) {
            return .5 - Math.cos(n * Math.PI) / 2
        },
        _default: "swing"
    };
    i.fx = s.prototype.init;
    i.fx.step = {};
    ku = /^(?:toggle|show|hide)$/;
    du = /queueHooks$/;
    i.Animation = i.extend(a, {
        tweeners: {
            "*": [function(n, t) {
                var i = this.createTween(n, t);
                return kr(i.elem, n, ct.exec(t), i),
                i
            }
            ]
        },
        tweener: function(n, t) {
            i.isFunction(n) ? (t = n,
            n = ["*"]) : n = n.match(h);
            for (var r, u = 0, f = n.length; u < f; u++)
                r = n[u],
                a.tweeners[r] = a.tweeners[r] || [],
                a.tweeners[r].unshift(t)
        },
        prefilters: [ke],
        prefilter: function(n, t) {
            t ? a.prefilters.unshift(n) : a.prefilters.push(n)
        }
    });
    i.speed = function(n, t, r) {
        var u = n && "object" == typeof n ? i.extend({}, n) : {
            complete: r || !r && t || i.isFunction(n) && n,
            duration: n,
            easing: r && t || t && !i.isFunction(t) && t
        };
        return i.fx.off ? u.duration = 0 : "number" != typeof u.duration && (u.duration = u.duration in i.fx.speeds ? i.fx.speeds[u.duration] : i.fx.speeds._default),
        null != u.queue && u.queue !== !0 || (u.queue = "fx"),
        u.old = u.complete,
        u.complete = function() {
            i.isFunction(u.old) && u.old.call(this);
            u.queue && i.dequeue(this, u.queue)
        }
        ,
        u
    }
    ;
    i.fn.extend({
        fadeTo: function(n, t, i, r) {
            return this.filter(kt).css("opacity", 0).show().end().animate({
                opacity: t
            }, n, i, r)
        },
        animate: function(n, t, u, f) {
            var s = i.isEmptyObject(n)
              , o = i.speed(t, u, f)
              , e = function() {
                var t = a(this, i.extend({}, n), o);
                (s || r.get(this, "finish")) && t.stop(!0)
            };
            return e.finish = e,
            s || o.queue === !1 ? this.each(e) : this.queue(o.queue, e)
        },
        stop: function(n, t, u) {
            var f = function(n) {
                var t = n.stop;
                delete n.stop;
                t(u)
            };
            return "string" != typeof n && (u = t,
            t = n,
            n = void 0),
            t && n !== !1 && this.queue(n || "fx", []),
            this.each(function() {
                var s = !0
                  , t = null != n && n + "queueHooks"
                  , o = i.timers
                  , e = r.get(this);
                if (t)
                    e[t] && e[t].stop && f(e[t]);
                else
                    for (t in e)
                        e[t] && e[t].stop && du.test(t) && f(e[t]);
                for (t = o.length; t--; )
                    o[t].elem !== this || null != n && o[t].queue !== n || (o[t].anim.stop(u),
                    s = !1,
                    o.splice(t, 1));
                !s && u || i.dequeue(this, n)
            })
        },
        finish: function(n) {
            return n !== !1 && (n = n || "fx"),
            this.each(function() {
                var t, e = r.get(this), u = e[n + "queue"], o = e[n + "queueHooks"], f = i.timers, s = u ? u.length : 0;
                for (e.finish = !0,
                i.queue(this, n, []),
                o && o.stop && o.stop.call(this, !0),
                t = f.length; t--; )
                    f[t].elem === this && f[t].queue === n && (f[t].anim.stop(!0),
                    f.splice(t, 1));
                for (t = 0; t < s; t++)
                    u[t] && u[t].finish && u[t].finish.call(this);
                delete e.finish
            })
        }
    });
    i.each(["toggle", "show", "hide"], function(n, t) {
        var r = i.fn[t];
        i.fn[t] = function(n, i, u) {
            return null == n || "boolean" == typeof n ? r.apply(this, arguments) : this.animate(ii(t, !0), n, i, u)
        }
    });
    i.each({
        slideDown: ii("show"),
        slideUp: ii("hide"),
        slideToggle: ii("toggle"),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    }, function(n, t) {
        i.fn[n] = function(n, i, r) {
            return this.animate(t, n, i, r)
        }
    });
    i.timers = [];
    i.fx.tick = function() {
        var r, n = 0, t = i.timers;
        for (ut = i.now(); n < t.length; n++)
            r = t[n],
            r() || t[n] !== r || t.splice(n--, 1);
        t.length || i.fx.stop();
        ut = void 0
    }
    ;
    i.fx.timer = function(n) {
        i.timers.push(n);
        i.fx.start()
    }
    ;
    i.fx.interval = 13;
    i.fx.start = function() {
        ti || (ti = !0,
        ai())
    }
    ;
    i.fx.stop = function() {
        ti = null
    }
    ;
    i.fx.speeds = {
        slow: 600,
        fast: 200,
        _default: 400
    };
    i.fn.delay = function(t, r) {
        return t = i.fx ? i.fx.speeds[t] || t : t,
        r = r || "fx",
        this.queue(r, function(i, r) {
            var u = n.setTimeout(i, t);
            r.stop = function() {
                n.clearTimeout(u)
            }
        })
    }
    ,
    function() {
        var n = u.createElement("input")
          , t = u.createElement("select")
          , i = t.appendChild(u.createElement("option"));
        n.type = "checkbox";
        f.checkOn = "" !== n.value;
        f.optSelected = i.selected;
        n = u.createElement("input");
        n.value = "t";
        n.type = "radio";
        f.radioValue = "t" === n.value
    }();
    ft = i.expr.attrHandle;
    i.fn.extend({
        attr: function(n, t) {
            return v(this, i.attr, n, t, arguments.length > 1)
        },
        removeAttr: function(n) {
            return this.each(function() {
                i.removeAttr(this, n)
            })
        }
    });
    i.extend({
        attr: function(n, t, r) {
            var u, f, e = n.nodeType;
            if (3 !== e && 8 !== e && 2 !== e)
                return "undefined" == typeof n.getAttribute ? i.prop(n, t, r) : (1 === e && i.isXMLDoc(n) || (f = i.attrHooks[t.toLowerCase()] || (i.expr.match.bool.test(t) ? tf : void 0)),
                void 0 !== r ? null === r ? void i.removeAttr(n, t) : f && "set"in f && void 0 !== (u = f.set(n, r, t)) ? u : (n.setAttribute(t, r + ""),
                r) : f && "get"in f && null !== (u = f.get(n, t)) ? u : (u = i.find.attr(n, t),
                null == u ? void 0 : u))
        },
        attrHooks: {
            type: {
                set: function(n, t) {
                    if (!f.radioValue && "radio" === t && l(n, "input")) {
                        var i = n.value;
                        return n.setAttribute("type", t),
                        i && (n.value = i),
                        t
                    }
                }
            }
        },
        removeAttr: function(n, t) {
            var i, u = 0, r = t && t.match(h);
            if (r && 1 === n.nodeType)
                while (i = r[u++])
                    n.removeAttribute(i)
        }
    });
    tf = {
        set: function(n, t, r) {
            return t === !1 ? i.removeAttr(n, r) : n.setAttribute(r, r),
            r
        }
    };
    i.each(i.expr.match.bool.source.match(/\w+/g), function(n, t) {
        var r = ft[t] || i.find.attr;
        ft[t] = function(n, t, i) {
            var f, e, u = t.toLowerCase();
            return i || (e = ft[u],
            ft[u] = f,
            f = null != r(n, t, i) ? u : null,
            ft[u] = e),
            f
        }
    });
    rf = /^(?:input|select|textarea|button)$/i;
    uf = /^(?:a|area)$/i;
    i.fn.extend({
        prop: function(n, t) {
            return v(this, i.prop, n, t, arguments.length > 1)
        },
        removeProp: function(n) {
            return this.each(function() {
                delete this[i.propFix[n] || n]
            })
        }
    });
    i.extend({
        prop: function(n, t, r) {
            var f, u, e = n.nodeType;
            if (3 !== e && 8 !== e && 2 !== e)
                return 1 === e && i.isXMLDoc(n) || (t = i.propFix[t] || t,
                u = i.propHooks[t]),
                void 0 !== r ? u && "set"in u && void 0 !== (f = u.set(n, r, t)) ? f : n[t] = r : u && "get"in u && null !== (f = u.get(n, t)) ? f : n[t]
        },
        propHooks: {
            tabIndex: {
                get: function(n) {
                    var t = i.find.attr(n, "tabindex");
                    return t ? parseInt(t, 10) : rf.test(n.nodeName) || uf.test(n.nodeName) && n.href ? 0 : -1
                }
            }
        },
        propFix: {
            "for": "htmlFor",
            "class": "className"
        }
    });
    f.optSelected || (i.propHooks.selected = {
        get: function(n) {
            var t = n.parentNode;
            return t && t.parentNode && t.parentNode.selectedIndex,
            null
        },
        set: function(n) {
            var t = n.parentNode;
            t && (t.selectedIndex,
            t.parentNode && t.parentNode.selectedIndex)
        }
    });
    i.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
        i.propFix[this.toLowerCase()] = this
    });
    i.fn.extend({
        addClass: function(n) {
            var o, t, r, u, f, s, e, c = 0;
            if (i.isFunction(n))
                return this.each(function(t) {
                    i(this).addClass(n.call(this, t, d(this)))
                });
            if ("string" == typeof n && n)
                for (o = n.match(h) || []; t = this[c++]; )
                    if (u = d(t),
                    r = 1 === t.nodeType && " " + k(u) + " ") {
                        for (s = 0; f = o[s++]; )
                            r.indexOf(" " + f + " ") < 0 && (r += f + " ");
                        e = k(r);
                        u !== e && t.setAttribute("class", e)
                    }
            return this
        },
        removeClass: function(n) {
            var o, r, t, u, f, s, e, c = 0;
            if (i.isFunction(n))
                return this.each(function(t) {
                    i(this).removeClass(n.call(this, t, d(this)))
                });
            if (!arguments.length)
                return this.attr("class", "");
            if ("string" == typeof n && n)
                for (o = n.match(h) || []; r = this[c++]; )
                    if (u = d(r),
                    t = 1 === r.nodeType && " " + k(u) + " ") {
                        for (s = 0; f = o[s++]; )
                            while (t.indexOf(" " + f + " ") > -1)
                                t = t.replace(" " + f + " ", " ");
                        e = k(t);
                        u !== e && r.setAttribute("class", e)
                    }
            return this
        },
        toggleClass: function(n, t) {
            var u = typeof n;
            return "boolean" == typeof t && "string" === u ? t ? this.addClass(n) : this.removeClass(n) : i.isFunction(n) ? this.each(function(r) {
                i(this).toggleClass(n.call(this, r, d(this), t), t)
            }) : this.each(function() {
                var t, e, f, o;
                if ("string" === u)
                    for (e = 0,
                    f = i(this),
                    o = n.match(h) || []; t = o[e++]; )
                        f.hasClass(t) ? f.removeClass(t) : f.addClass(t);
                else
                    void 0 !== n && "boolean" !== u || (t = d(this),
                    t && r.set(this, "__className__", t),
                    this.setAttribute && this.setAttribute("class", t || n === !1 ? "" : r.get(this, "__className__") || ""))
            })
        },
        hasClass: function(n) {
            for (var t, r = 0, i = " " + n + " "; t = this[r++]; )
                if (1 === t.nodeType && (" " + k(d(t)) + " ").indexOf(i) > -1)
                    return !0;
            return !1
        }
    });
    ff = /\r/g;
    i.fn.extend({
        val: function(n) {
            var t, r, f, u = this[0];
            return arguments.length ? (f = i.isFunction(n),
            this.each(function(r) {
                var u;
                1 === this.nodeType && (u = f ? n.call(this, r, i(this).val()) : n,
                null == u ? u = "" : "number" == typeof u ? u += "" : Array.isArray(u) && (u = i.map(u, function(n) {
                    return null == n ? "" : n + ""
                })),
                t = i.valHooks[this.type] || i.valHooks[this.nodeName.toLowerCase()],
                t && "set"in t && void 0 !== t.set(this, u, "value") || (this.value = u))
            })) : u ? (t = i.valHooks[u.type] || i.valHooks[u.nodeName.toLowerCase()],
            t && "get"in t && void 0 !== (r = t.get(u, "value")) ? r : (r = u.value,
            "string" == typeof r ? r.replace(ff, "") : null == r ? "" : r)) : void 0
        }
    });
    i.extend({
        valHooks: {
            option: {
                get: function(n) {
                    var t = i.find.attr(n, "value");
                    return null != t ? t : k(i.text(n))
                }
            },
            select: {
                get: function(n) {
                    for (var e, t, o = n.options, u = n.selectedIndex, f = "select-one" === n.type, s = f ? null : [], h = f ? u + 1 : o.length, r = u < 0 ? h : f ? u : 0; r < h; r++)
                        if (t = o[r],
                        (t.selected || r === u) && !t.disabled && (!t.parentNode.disabled || !l(t.parentNode, "optgroup"))) {
                            if (e = i(t).val(),
                            f)
                                return e;
                            s.push(e)
                        }
                    return s
                },
                set: function(n, t) {
                    for (var u, r, f = n.options, e = i.makeArray(t), o = f.length; o--; )
                        r = f[o],
                        (r.selected = i.inArray(i.valHooks.option.get(r), e) > -1) && (u = !0);
                    return u || (n.selectedIndex = -1),
                    e
                }
            }
        }
    });
    i.each(["radio", "checkbox"], function() {
        i.valHooks[this] = {
            set: function(n, t) {
                if (Array.isArray(t))
                    return n.checked = i.inArray(i(n).val(), t) > -1
            }
        };
        f.checkOn || (i.valHooks[this].get = function(n) {
            return null === n.getAttribute("value") ? "on" : n.value
        }
        )
    });
    vi = /^(?:focusinfocus|focusoutblur)$/;
    i.extend(i.event, {
        trigger: function(t, f, e, o) {
            var w, s, c, b, a, v, l, p = [e || u], h = yt.call(t, "type") ? t.type : t, y = yt.call(t, "namespace") ? t.namespace.split(".") : [];
            if (s = c = e = e || u,
            3 !== e.nodeType && 8 !== e.nodeType && !vi.test(h + i.event.triggered) && (h.indexOf(".") > -1 && (y = h.split("."),
            h = y.shift(),
            y.sort()),
            a = h.indexOf(":") < 0 && "on" + h,
            t = t[i.expando] ? t : new i.Event(h,"object" == typeof t && t),
            t.isTrigger = o ? 2 : 3,
            t.namespace = y.join("."),
            t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + y.join("\\.(?:.*\\.|)") + "(\\.|$)") : null,
            t.result = void 0,
            t.target || (t.target = e),
            f = null == f ? [t] : i.makeArray(f, [t]),
            l = i.event.special[h] || {},
            o || !l.trigger || l.trigger.apply(e, f) !== !1)) {
                if (!o && !l.noBubble && !i.isWindow(e)) {
                    for (b = l.delegateType || h,
                    vi.test(b + h) || (s = s.parentNode); s; s = s.parentNode)
                        p.push(s),
                        c = s;
                    c === (e.ownerDocument || u) && p.push(c.defaultView || c.parentWindow || n)
                }
                for (w = 0; (s = p[w++]) && !t.isPropagationStopped(); )
                    t.type = w > 1 ? b : l.bindType || h,
                    v = (r.get(s, "events") || {})[t.type] && r.get(s, "handle"),
                    v && v.apply(s, f),
                    v = a && s[a],
                    v && v.apply && st(s) && (t.result = v.apply(s, f),
                    t.result === !1 && t.preventDefault());
                return t.type = h,
                o || t.isDefaultPrevented() || l._default && l._default.apply(p.pop(), f) !== !1 || !st(e) || a && i.isFunction(e[h]) && !i.isWindow(e) && (c = e[a],
                c && (e[a] = null),
                i.event.triggered = h,
                e[h](),
                i.event.triggered = void 0,
                c && (e[a] = c)),
                t.result
            }
        },
        simulate: function(n, t, r) {
            var u = i.extend(new i.Event, r, {
                type: n,
                isSimulated: !0
            });
            i.event.trigger(u, null, t)
        }
    });
    i.fn.extend({
        trigger: function(n, t) {
            return this.each(function() {
                i.event.trigger(n, t, this)
            })
        },
        triggerHandler: function(n, t) {
            var r = this[0];
            if (r)
                return i.event.trigger(n, t, r, !0)
        }
    });
    i.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(n, t) {
        i.fn[t] = function(n, i) {
            return arguments.length > 0 ? this.on(t, null, n, i) : this.trigger(t)
        }
    });
    i.fn.extend({
        hover: function(n, t) {
            return this.mouseenter(n).mouseleave(t || n)
        }
    });
    f.focusin = "onfocusin"in n;
    f.focusin || i.each({
        focus: "focusin",
        blur: "focusout"
    }, function(n, t) {
        var u = function(n) {
            i.event.simulate(t, n.target, i.event.fix(n))
        };
        i.event.special[t] = {
            setup: function() {
                var i = this.ownerDocument || this
                  , f = r.access(i, t);
                f || i.addEventListener(n, u, !0);
                r.access(i, t, (f || 0) + 1)
            },
            teardown: function() {
                var i = this.ownerDocument || this
                  , f = r.access(i, t) - 1;
                f ? r.access(i, t, f) : (i.removeEventListener(n, u, !0),
                r.remove(i, t))
            }
        }
    });
    var at = n.location
      , ef = i.now()
      , yi = /\?/;
    i.parseXML = function(t) {
        var r;
        if (!t || "string" != typeof t)
            return null;
        try {
            r = (new n.DOMParser).parseFromString(t, "text/xml")
        } catch (u) {
            r = void 0
        }
        return r && !r.getElementsByTagName("parsererror").length || i.error("Invalid XML: " + t),
        r
    }
    ;
    var ge = /\[\]$/
      , of = /\r?\n/g
      , no = /^(?:submit|button|image|reset|file)$/i
      , to = /^(?:input|select|textarea|keygen)/i;
    i.param = function(n, t) {
        var r, u = [], f = function(n, t) {
            var r = i.isFunction(t) ? t() : t;
            u[u.length] = encodeURIComponent(n) + "=" + encodeURIComponent(null == r ? "" : r)
        };
        if (Array.isArray(n) || n.jquery && !i.isPlainObject(n))
            i.each(n, function() {
                f(this.name, this.value)
            });
        else
            for (r in n)
                pi(r, n[r], t, f);
        return u.join("&")
    }
    ;
    i.fn.extend({
        serialize: function() {
            return i.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                var n = i.prop(this, "elements");
                return n ? i.makeArray(n) : this
            }).filter(function() {
                var n = this.type;
                return this.name && !i(this).is(":disabled") && to.test(this.nodeName) && !no.test(n) && (this.checked || !dr.test(n))
            }).map(function(n, t) {
                var r = i(this).val();
                return null == r ? null : Array.isArray(r) ? i.map(r, function(n) {
                    return {
                        name: t.name,
                        value: n.replace(of, "\r\n")
                    }
                }) : {
                    name: t.name,
                    value: r.replace(of, "\r\n")
                }
            }).get()
        }
    });
    var io = /%20/g
      , ro = /#.*$/
      , uo = /([?&])_=[^&]*/
      , fo = /^(.*?):[ \t]*([^\r\n]*)$/gm
      , eo = /^(?:GET|HEAD)$/
      , oo = /^\/\//
      , sf = {}
      , wi = {}
      , hf = "*/".concat("*")
      , bi = u.createElement("a");
    return bi.href = at.href,
    i.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: at.href,
            type: "GET",
            isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(at.protocol),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": hf,
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript"
            },
            contents: {
                xml: /\bxml\b/,
                html: /\bhtml/,
                json: /\bjson\b/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText",
                json: "responseJSON"
            },
            converters: {
                "* text": String,
                "text html": !0,
                "text json": JSON.parse,
                "text xml": i.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(n, t) {
            return t ? ki(ki(n, i.ajaxSettings), t) : ki(i.ajaxSettings, n)
        },
        ajaxPrefilter: cf(sf),
        ajaxTransport: cf(wi),
        ajax: function(t, r) {
            function b(t, r, u, h) {
                var y, rt, g, p, b, l = r;
                s || (s = !0,
                d && n.clearTimeout(d),
                a = void 0,
                k = h || "",
                e.readyState = t > 0 ? 4 : 0,
                y = t >= 200 && t < 300 || 304 === t,
                u && (p = so(f, e, u)),
                p = ho(f, p, e, y),
                y ? (f.ifModified && (b = e.getResponseHeader("Last-Modified"),
                b && (i.lastModified[o] = b),
                b = e.getResponseHeader("etag"),
                b && (i.etag[o] = b)),
                204 === t || "HEAD" === f.type ? l = "nocontent" : 304 === t ? l = "notmodified" : (l = p.state,
                rt = p.data,
                g = p.error,
                y = !g)) : (g = l,
                !t && l || (l = "error",
                t < 0 && (t = 0))),
                e.status = t,
                e.statusText = (r || l) + "",
                y ? tt.resolveWith(c, [rt, l, e]) : tt.rejectWith(c, [e, l, g]),
                e.statusCode(w),
                w = void 0,
                v && nt.trigger(y ? "ajaxSuccess" : "ajaxError", [e, f, y ? rt : g]),
                it.fireWith(c, [e, l]),
                v && (nt.trigger("ajaxComplete", [e, f]),
                --i.active || i.event.trigger("ajaxStop")))
            }
            "object" == typeof t && (r = t,
            t = void 0);
            r = r || {};
            var a, o, k, y, d, l, s, v, g, p, f = i.ajaxSetup({}, r), c = f.context || f, nt = f.context && (c.nodeType || c.jquery) ? i(c) : i.event, tt = i.Deferred(), it = i.Callbacks("once memory"), w = f.statusCode || {}, rt = {}, ut = {}, ft = "canceled", e = {
                readyState: 0,
                getResponseHeader: function(n) {
                    var t;
                    if (s) {
                        if (!y)
                            for (y = {}; t = fo.exec(k); )
                                y[t[1].toLowerCase()] = t[2];
                        t = y[n.toLowerCase()]
                    }
                    return null == t ? null : t
                },
                getAllResponseHeaders: function() {
                    return s ? k : null
                },
                setRequestHeader: function(n, t) {
                    return null == s && (n = ut[n.toLowerCase()] = ut[n.toLowerCase()] || n,
                    rt[n] = t),
                    this
                },
                overrideMimeType: function(n) {
                    return null == s && (f.mimeType = n),
                    this
                },
                statusCode: function(n) {
                    var t;
                    if (n)
                        if (s)
                            e.always(n[e.status]);
                        else
                            for (t in n)
                                w[t] = [w[t], n[t]];
                    return this
                },
                abort: function(n) {
                    var t = n || ft;
                    return a && a.abort(t),
                    b(0, t),
                    this
                }
            };
            if (tt.promise(e),
            f.url = ((t || f.url || at.href) + "").replace(oo, at.protocol + "//"),
            f.type = r.method || r.type || f.method || f.type,
            f.dataTypes = (f.dataType || "*").toLowerCase().match(h) || [""],
            null == f.crossDomain) {
                l = u.createElement("a");
                try {
                    l.href = f.url;
                    l.href = l.href;
                    f.crossDomain = bi.protocol + "//" + bi.host != l.protocol + "//" + l.host
                } catch (et) {
                    f.crossDomain = !0
                }
            }
            if (f.data && f.processData && "string" != typeof f.data && (f.data = i.param(f.data, f.traditional)),
            lf(sf, f, r, e),
            s)
                return e;
            v = i.event && f.global;
            v && 0 == i.active++ && i.event.trigger("ajaxStart");
            f.type = f.type.toUpperCase();
            f.hasContent = !eo.test(f.type);
            o = f.url.replace(ro, "");
            f.hasContent ? f.data && f.processData && 0 === (f.contentType || "").indexOf("application/x-www-form-urlencoded") && (f.data = f.data.replace(io, "+")) : (p = f.url.slice(o.length),
            f.data && (o += (yi.test(o) ? "&" : "?") + f.data,
            delete f.data),
            f.cache === !1 && (o = o.replace(uo, "$1"),
            p = (yi.test(o) ? "&" : "?") + "_=" + ef++ + p),
            f.url = o + p);
            f.ifModified && (i.lastModified[o] && e.setRequestHeader("If-Modified-Since", i.lastModified[o]),
            i.etag[o] && e.setRequestHeader("If-None-Match", i.etag[o]));
            (f.data && f.hasContent && f.contentType !== !1 || r.contentType) && e.setRequestHeader("Content-Type", f.contentType);
            e.setRequestHeader("Accept", f.dataTypes[0] && f.accepts[f.dataTypes[0]] ? f.accepts[f.dataTypes[0]] + ("*" !== f.dataTypes[0] ? ", " + hf + "; q=0.01" : "") : f.accepts["*"]);
            for (g in f.headers)
                e.setRequestHeader(g, f.headers[g]);
            if (f.beforeSend && (f.beforeSend.call(c, e, f) === !1 || s))
                return e.abort();
            if (ft = "abort",
            it.add(f.complete),
            e.done(f.success),
            e.fail(f.error),
            a = lf(wi, f, r, e)) {
                if (e.readyState = 1,
                v && nt.trigger("ajaxSend", [e, f]),
                s)
                    return e;
                f.async && f.timeout > 0 && (d = n.setTimeout(function() {
                    e.abort("timeout")
                }, f.timeout));
                try {
                    s = !1;
                    a.send(rt, b)
                } catch (et) {
                    if (s)
                        throw et;
                    b(-1, et)
                }
            } else
                b(-1, "No Transport");
            return e
        },
        getJSON: function(n, t, r) {
            return i.get(n, t, r, "json")
        },
        getScript: function(n, t) {
            return i.get(n, void 0, t, "script")
        }
    }),
    i.each(["get", "post"], function(n, t) {
        i[t] = function(n, r, u, f) {
            return i.isFunction(r) && (f = f || u,
            u = r,
            r = void 0),
            i.ajax(i.extend({
                url: n,
                type: t,
                dataType: f,
                data: r,
                success: u
            }, i.isPlainObject(n) && n))
        }
    }),
    i._evalUrl = function(n) {
        return i.ajax({
            url: n,
            type: "GET",
            dataType: "script",
            cache: !0,
            async: !1,
            global: !1,
            throws: !0
        })
    }
    ,
    i.fn.extend({
        wrapAll: function(n) {
            var t;
            return this[0] && (i.isFunction(n) && (n = n.call(this[0])),
            t = i(n, this[0].ownerDocument).eq(0).clone(!0),
            this[0].parentNode && t.insertBefore(this[0]),
            t.map(function() {
                for (var n = this; n.firstElementChild; )
                    n = n.firstElementChild;
                return n
            }).append(this)),
            this
        },
        wrapInner: function(n) {
            return i.isFunction(n) ? this.each(function(t) {
                i(this).wrapInner(n.call(this, t))
            }) : this.each(function() {
                var t = i(this)
                  , r = t.contents();
                r.length ? r.wrapAll(n) : t.append(n)
            })
        },
        wrap: function(n) {
            var t = i.isFunction(n);
            return this.each(function(r) {
                i(this).wrapAll(t ? n.call(this, r) : n)
            })
        },
        unwrap: function(n) {
            return this.parent(n).not("body").each(function() {
                i(this).replaceWith(this.childNodes)
            }),
            this
        }
    }),
    i.expr.pseudos.hidden = function(n) {
        return !i.expr.pseudos.visible(n)
    }
    ,
    i.expr.pseudos.visible = function(n) {
        return !!(n.offsetWidth || n.offsetHeight || n.getClientRects().length)
    }
    ,
    i.ajaxSettings.xhr = function() {
        try {
            return new n.XMLHttpRequest
        } catch (t) {}
    }
    ,
    af = {
        0: 200,
        1223: 204
    },
    et = i.ajaxSettings.xhr(),
    f.cors = !!et && "withCredentials"in et,
    f.ajax = et = !!et,
    i.ajaxTransport(function(t) {
        var i, r;
        if (f.cors || et && !t.crossDomain)
            return {
                send: function(u, f) {
                    var o, e = t.xhr();
                    if (e.open(t.type, t.url, t.async, t.username, t.password),
                    t.xhrFields)
                        for (o in t.xhrFields)
                            e[o] = t.xhrFields[o];
                    t.mimeType && e.overrideMimeType && e.overrideMimeType(t.mimeType);
                    t.crossDomain || u["X-Requested-With"] || (u["X-Requested-With"] = "XMLHttpRequest");
                    for (o in u)
                        e.setRequestHeader(o, u[o]);
                    i = function(n) {
                        return function() {
                            i && (i = r = e.onload = e.onerror = e.onabort = e.onreadystatechange = null,
                            "abort" === n ? e.abort() : "error" === n ? "number" != typeof e.status ? f(0, "error") : f(e.status, e.statusText) : f(af[e.status] || e.status, e.statusText, "text" !== (e.responseType || "text") || "string" != typeof e.responseText ? {
                                binary: e.response
                            } : {
                                text: e.responseText
                            }, e.getAllResponseHeaders()))
                        }
                    }
                    ;
                    e.onload = i();
                    r = e.onerror = i("error");
                    void 0 !== e.onabort ? e.onabort = r : e.onreadystatechange = function() {
                        4 === e.readyState && n.setTimeout(function() {
                            i && r()
                        })
                    }
                    ;
                    i = i("abort");
                    try {
                        e.send(t.hasContent && t.data || null)
                    } catch (s) {
                        if (i)
                            throw s;
                    }
                },
                abort: function() {
                    i && i()
                }
            }
    }),
    i.ajaxPrefilter(function(n) {
        n.crossDomain && (n.contents.script = !1)
    }),
    i.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /\b(?:java|ecma)script\b/
        },
        converters: {
            "text script": function(n) {
                return i.globalEval(n),
                n
            }
        }
    }),
    i.ajaxPrefilter("script", function(n) {
        void 0 === n.cache && (n.cache = !1);
        n.crossDomain && (n.type = "GET")
    }),
    i.ajaxTransport("script", function(n) {
        if (n.crossDomain) {
            var r, t;
            return {
                send: function(f, e) {
                    r = i("<script>").prop({
                        charset: n.scriptCharset,
                        src: n.url
                    }).on("load error", t = function(n) {
                        r.remove();
                        t = null;
                        n && e("error" === n.type ? 404 : 200, n.type)
                    }
                    );
                    u.head.appendChild(r[0])
                },
                abort: function() {
                    t && t()
                }
            }
        }
    }),
    di = [],
    ri = /(=)\?(?=&|$)|\?\?/,
    i.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var n = di.pop() || i.expando + "_" + ef++;
            return this[n] = !0,
            n
        }
    }),
    i.ajaxPrefilter("json jsonp", function(t, r, u) {
        var f, e, o, s = t.jsonp !== !1 && (ri.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && ri.test(t.data) && "data");
        if (s || "jsonp" === t.dataTypes[0])
            return f = t.jsonpCallback = i.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
            s ? t[s] = t[s].replace(ri, "$1" + f) : t.jsonp !== !1 && (t.url += (yi.test(t.url) ? "&" : "?") + t.jsonp + "=" + f),
            t.converters["script json"] = function() {
                return o || i.error(f + " was not called"),
                o[0]
            }
            ,
            t.dataTypes[0] = "json",
            e = n[f],
            n[f] = function() {
                o = arguments
            }
            ,
            u.always(function() {
                void 0 === e ? i(n).removeProp(f) : n[f] = e;
                t[f] && (t.jsonpCallback = r.jsonpCallback,
                di.push(f));
                o && i.isFunction(e) && e(o[0]);
                o = e = void 0
            }),
            "script"
    }),
    f.createHTMLDocument = function() {
        var n = u.implementation.createHTMLDocument("").body;
        return n.innerHTML = "<form><\/form><form><\/form>",
        2 === n.childNodes.length
    }(),
    i.parseHTML = function(n, t, r) {
        if ("string" != typeof n)
            return [];
        "boolean" == typeof t && (r = t,
        t = !1);
        var s, e, o;
        return t || (f.createHTMLDocument ? (t = u.implementation.createHTMLDocument(""),
        s = t.createElement("base"),
        s.href = u.location.href,
        t.head.appendChild(s)) : t = u),
        e = ei.exec(n),
        o = !r && [],
        e ? [t.createElement(e[1])] : (e = iu([n], t, o),
        o && o.length && i(o).remove(),
        i.merge([], e.childNodes))
    }
    ,
    i.fn.load = function(n, t, r) {
        var u, o, s, f = this, e = n.indexOf(" ");
        return e > -1 && (u = k(n.slice(e)),
        n = n.slice(0, e)),
        i.isFunction(t) ? (r = t,
        t = void 0) : t && "object" == typeof t && (o = "POST"),
        f.length > 0 && i.ajax({
            url: n,
            type: o || "GET",
            dataType: "html",
            data: t
        }).done(function(n) {
            s = arguments;
            f.html(u ? i("<div>").append(i.parseHTML(n)).find(u) : n)
        }).always(r && function(n, t) {
            f.each(function() {
                r.apply(this, s || [n.responseText, t, n])
            })
        }
        ),
        this
    }
    ,
    i.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(n, t) {
        i.fn[t] = function(n) {
            return this.on(t, n)
        }
    }),
    i.expr.pseudos.animated = function(n) {
        return i.grep(i.timers, function(t) {
            return n === t.elem
        }).length
    }
    ,
    i.offset = {
        setOffset: function(n, t, r) {
            var e, o, s, h, u, c, v, l = i.css(n, "position"), a = i(n), f = {};
            "static" === l && (n.style.position = "relative");
            u = a.offset();
            s = i.css(n, "top");
            c = i.css(n, "left");
            v = ("absolute" === l || "fixed" === l) && (s + c).indexOf("auto") > -1;
            v ? (e = a.position(),
            h = e.top,
            o = e.left) : (h = parseFloat(s) || 0,
            o = parseFloat(c) || 0);
            i.isFunction(t) && (t = t.call(n, r, i.extend({}, u)));
            null != t.top && (f.top = t.top - u.top + h);
            null != t.left && (f.left = t.left - u.left + o);
            "using"in t ? t.using.call(n, f) : a.css(f)
        }
    },
    i.fn.extend({
        offset: function(n) {
            if (arguments.length)
                return void 0 === n ? this : this.each(function(t) {
                    i.offset.setOffset(this, n, t)
                });
            var r, u, f, e, t = this[0];
            if (t)
                return t.getClientRects().length ? (f = t.getBoundingClientRect(),
                r = t.ownerDocument,
                u = r.documentElement,
                e = r.defaultView,
                {
                    top: f.top + e.pageYOffset - u.clientTop,
                    left: f.left + e.pageXOffset - u.clientLeft
                }) : {
                    top: 0,
                    left: 0
                }
        },
        position: function() {
            if (this[0]) {
                var t, r, u = this[0], n = {
                    top: 0,
                    left: 0
                };
                return "fixed" === i.css(u, "position") ? r = u.getBoundingClientRect() : (t = this.offsetParent(),
                r = this.offset(),
                l(t[0], "html") || (n = t.offset()),
                n = {
                    top: n.top + i.css(t[0], "borderTopWidth", !0),
                    left: n.left + i.css(t[0], "borderLeftWidth", !0)
                }),
                {
                    top: r.top - n.top - i.css(u, "marginTop", !0),
                    left: r.left - n.left - i.css(u, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var n = this.offsetParent; n && "static" === i.css(n, "position"); )
                    n = n.offsetParent;
                return n || dt
            })
        }
    }),
    i.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    }, function(n, t) {
        var r = "pageYOffset" === t;
        i.fn[n] = function(u) {
            return v(this, function(n, u, f) {
                var e;
                return i.isWindow(n) ? e = n : 9 === n.nodeType && (e = n.defaultView),
                void 0 === f ? e ? e[t] : n[u] : void (e ? e.scrollTo(r ? e.pageXOffset : f, r ? f : e.pageYOffset) : n[u] = f)
            }, n, u, arguments.length)
        }
    }),
    i.each(["top", "left"], function(n, t) {
        i.cssHooks[t] = hu(f.pixelPosition, function(n, r) {
            if (r)
                return r = lt(n, t),
                li.test(r) ? i(n).position()[t] + "px" : r
        })
    }),
    i.each({
        Height: "height",
        Width: "width"
    }, function(n, t) {
        i.each({
            padding: "inner" + n,
            content: t,
            "": "outer" + n
        }, function(r, u) {
            i.fn[u] = function(f, e) {
                var o = arguments.length && (r || "boolean" != typeof f)
                  , s = r || (f === !0 || e === !0 ? "margin" : "border");
                return v(this, function(t, r, f) {
                    var e;
                    return i.isWindow(t) ? 0 === u.indexOf("outer") ? t["inner" + n] : t.document.documentElement["client" + n] : 9 === t.nodeType ? (e = t.documentElement,
                    Math.max(t.body["scroll" + n], e["scroll" + n], t.body["offset" + n], e["offset" + n], e["client" + n])) : void 0 === f ? i.css(t, r, s) : i.style(t, r, f, s)
                }, t, o ? f : void 0, o)
            }
        })
    }),
    i.fn.extend({
        bind: function(n, t, i) {
            return this.on(n, null, t, i)
        },
        unbind: function(n, t) {
            return this.off(n, null, t)
        },
        delegate: function(n, t, i, r) {
            return this.on(t, n, i, r)
        },
        undelegate: function(n, t, i) {
            return 1 === arguments.length ? this.off(n, "**") : this.off(t, n || "**", i)
        }
    }),
    i.holdReady = function(n) {
        n ? i.readyWait++ : i.ready(!0)
    }
    ,
    i.isArray = Array.isArray,
    i.parseJSON = JSON.parse,
    i.nodeName = l,
    "function" == typeof define && define.amd && define("jquery", [], function() {
        return i
    }),
    vf = n.jQuery,
    yf = n.$,
    i.noConflict = function(t) {
        return n.$ === i && (n.$ = yf),
        t && n.jQuery === i && (n.jQuery = vf),
        i
    }
    ,
    t || (n.jQuery = n.$ = i),
    i
}),
function(n) {
    function r() {
        var n = document.createElement("input")
          , t = "onpaste";
        return n.setAttribute(t, ""),
        "function" == typeof n[t] ? "paste" : "input"
    }
    var t, u = r() + ".mask", i = navigator.userAgent, f = /iphone/i.test(i), e = /android/i.test(i);
    n.mask = {
        definitions: {
            9: "[0-9]",
            a: "[A-Za-z]",
            "*": "[A-Za-z0-9]"
        },
        dataName: "rawMaskFn",
        placeholder: "_"
    };
    n.fn.extend({
        caret: function(n, t) {
            var i;
            if (0 !== this.length && !this.is(":hidden"))
                return "number" == typeof n ? (t = "number" == typeof t ? t : n,
                this.each(function() {
                    this.setSelectionRange ? this.setSelectionRange(n, t) : this.createTextRange && (i = this.createTextRange(),
                    i.collapse(!0),
                    i.moveEnd("character", t),
                    i.moveStart("character", n),
                    i.select())
                })) : (this[0].setSelectionRange ? (n = this[0].selectionStart,
                t = this[0].selectionEnd) : document.selection && document.selection.createRange && (i = document.selection.createRange(),
                n = 0 - i.duplicate().moveStart("character", -1e5),
                t = n + i.text.length),
                {
                    begin: n,
                    end: t
                })
        },
        unmask: function() {
            return this.trigger("unmask")
        },
        mask: function(i, r) {
            var a, l, o, h, c, s;
            return !i && this.length > 0 ? (a = n(this[0]),
            a.data(n.mask.dataName)()) : (r = n.extend({
                placeholder: n.mask.placeholder,
                completed: null
            }, r),
            l = n.mask.definitions,
            o = [],
            h = s = i.length,
            c = null,
            n.each(i.split(""), function(n, t) {
                "?" == t ? (s--,
                h = n) : l[t] ? (o.push(RegExp(l[t])),
                null === c && (c = o.length - 1)) : o.push(null)
            }),
            this.trigger("unmask").each(function() {
                function y(n) {
                    for (; s > ++n && !o[n]; )
                        ;
                    return n
                }
                function g(n) {
                    for (; --n >= 0 && !o[n]; )
                        ;
                    return n
                }
                function d(n, t) {
                    var u, i;
                    if (!(0 > n)) {
                        for (u = n,
                        i = y(t); s > u; u++)
                            if (o[u]) {
                                if (!(s > i && o[u].test(v[i])))
                                    break;
                                v[u] = v[i];
                                v[i] = r.placeholder;
                                i = y(i)
                            }
                        p();
                        a.caret(Math.max(c, n))
                    }
                }
                function nt(n) {
                    for (var u, f, t = n, i = r.placeholder; s > t; t++)
                        if (o[t]) {
                            if (u = y(t),
                            f = v[t],
                            v[t] = i,
                            !(s > u && o[u].test(f)))
                                break;
                            i = f
                        }
                }
                function tt(n) {
                    var u, i, t, r = n.which;
                    8 === r || 46 === r || f && 127 === r ? (u = a.caret(),
                    i = u.begin,
                    t = u.end,
                    0 == t - i && (i = 46 !== r ? g(i) : t = y(i - 1),
                    t = 46 === r ? y(t) : t),
                    b(i, t),
                    d(i, t - 1),
                    n.preventDefault()) : 27 == r && (a.val(k),
                    a.caret(0, w()),
                    n.preventDefault())
                }
                function it(t) {
                    var u, h, f, c = t.which, i = a.caret();
                    t.ctrlKey || t.altKey || t.metaKey || 32 > c || c && (0 != i.end - i.begin && (b(i.begin, i.end),
                    d(i.begin, i.end - 1)),
                    u = y(i.begin - 1),
                    s > u && (h = String.fromCharCode(c),
                    o[u].test(h) && (nt(u),
                    v[u] = h,
                    p(),
                    f = y(u),
                    e ? setTimeout(n.proxy(n.fn.caret, a, f), 0) : a.caret(f),
                    r.completed && f >= s && r.completed.call(a))),
                    t.preventDefault())
                }
                function b(n, t) {
                    for (var i = n; t > i && s > i; i++)
                        o[i] && (v[i] = r.placeholder)
                }
                function p() {
                    a.val(v.join(""))
                }
                function w(n) {
                    var t, f, i = a.val(), u = -1;
                    for (t = 0,
                    pos = 0; s > t; t++)
                        if (o[t]) {
                            for (v[t] = r.placeholder; pos++ < i.length; )
                                if (f = i.charAt(pos - 1),
                                o[t].test(f)) {
                                    v[t] = f;
                                    u = t;
                                    break
                                }
                            if (pos > i.length)
                                break
                        } else
                            v[t] === i.charAt(pos) && t !== h && (pos++,
                            u = t);
                    return n ? p() : h > u + 1 ? (a.val(""),
                    b(0, s)) : (p(),
                    a.val(a.val().substring(0, u + 1))),
                    h ? t : c
                }
                var a = n(this)
                  , v = n.map(i.split(""), function(n) {
                    if ("?" != n)
                        return l[n] ? r.placeholder : n
                })
                  , k = a.val();
                a.data(n.mask.dataName, function() {
                    return n.map(v, function(n, t) {
                        return o[t] && n != r.placeholder ? n : null
                    }).join("")
                });
                a.attr("readonly") || a.one("unmask", function() {
                    a.unbind(".mask").removeData(n.mask.dataName)
                }).bind("focus.mask", function() {
                    clearTimeout(t);
                    var n;
                    k = a.val();
                    n = w();
                    t = setTimeout(function() {
                        p();
                        n == i.length ? a.caret(0, n) : a.caret(n)
                    }, 10)
                }).bind("blur.mask", function() {
                    w();
                    a.val() != k && a.change()
                }).bind("keydown.mask", tt).bind("keypress.mask", it).bind(u, function() {
                    setTimeout(function() {
                        var n = w(!0);
                        a.caret(n);
                        r.completed && n == a.val().length && r.completed.call(a)
                    }, 0)
                });
                w()
            }))
        }
    })
}(jQuery)
