diff -urN zabbix-4.0.8.orig/debian/changelog zabbix-4.0.8/debian/changelog
--- zabbix-4.0.8.orig/debian/changelog	2019-05-29 07:19:06.201650499 -0500
+++ zabbix-4.0.8/debian/changelog	2019-05-29 11:35:19.341564443 -0500
@@ -1,3 +1,10 @@
+zabbix (1:4.0.8-2) xenial; urgency=low
+
+  * fix packaging errors regarding fonts location
+  * fix packaging errors related to /usr/share/zabbix/assets perms
+
+ -- Bo Kersey <bo@vircio.com>  Wed, 29 May 2019 07:24:15 -0500
+
 zabbix (1:4.0.8-1+xenial) stable; urgency=low
 
   * update to 4.0.8
diff -urN zabbix-4.0.8.orig/debian/control zabbix-4.0.8/debian/control
--- zabbix-4.0.8.orig/debian/control	2019-05-29 07:19:06.209650533 -0500
+++ zabbix-4.0.8/debian/control	2019-05-29 07:23:58.506864436 -0500
@@ -16,12 +16,12 @@
                libopenipmi-dev,
                libssh2-1-dev (>= 1.0.0),
                unixodbc-dev,
-               java-sdk,
+               default-jdk,
                libxml2-dev,
                libpcre3-dev,
                libevent-dev,
                libssl-dev
-Standards-Version: 3.9.5
+Standards-Version: 3.9.7
 Homepage: http://www.zabbix.com
 
 
diff -urN zabbix-4.0.8.orig/debian/missing-sources/jquery.js zabbix-4.0.8/debian/missing-sources/jquery.js
--- zabbix-4.0.8.orig/debian/missing-sources/jquery.js	1969-12-31 18:00:00.000000000 -0600
+++ zabbix-4.0.8/debian/missing-sources/jquery.js	2019-05-29 08:18:58.979299284 -0500
@@ -0,0 +1,3244 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ ! function(e, t) {
+    "use strict";
+    "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
+        if (!e.document) throw new Error("jQuery requires a window with a document");
+        return t(e)
+    } : t(e)
+}("undefined" != typeof window ? window : this, function(e, t) {
+    "use strict";
+    var n = [],
+        r = e.document,
+        i = Object.getPrototypeOf,
+        o = n.slice,
+        a = n.concat,
+        s = n.push,
+        u = n.indexOf,
+        l = {},
+        c = l.toString,
+        f = l.hasOwnProperty,
+        p = f.toString,
+        d = p.call(Object),
+        h = {},
+        g = function e(t) {
+            return "function" == typeof t && "number" != typeof t.nodeType
+        },
+        y = function e(t) {
+            return null != t && t === t.window
+        },
+        v = {
+            type: !0,
+            src: !0,
+            noModule: !0
+        };
+
+    function m(e, t, n) {
+        var i, o = (t = t || r).createElement("script");
+        if (o.text = e, n)
+            for (i in v) n[i] && (o[i] = n[i]);
+        t.head.appendChild(o).parentNode.removeChild(o)
+    }
+
+    function x(e) {
+        return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? l[c.call(e)] || "object" : typeof e
+    }
+    var b = "3.3.1",
+        w = function(e, t) {
+            return new w.fn.init(e, t)
+        },
+        T = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+    w.fn = w.prototype = {
+        jquery: "3.3.1",
+        constructor: w,
+        length: 0,
+        toArray: function() {
+            return o.call(this)
+        },
+        get: function(e) {
+            return null == e ? o.call(this) : e < 0 ? this[e + this.length] : this[e]
+        },
+        pushStack: function(e) {
+            var t = w.merge(this.constructor(), e);
+            return t.prevObject = this, t
+        },
+        each: function(e) {
+            return w.each(this, e)
+        },
+        map: function(e) {
+            return this.pushStack(w.map(this, function(t, n) {
+                return e.call(t, n, t)
+            }))
+        },
+        slice: function() {
+            return this.pushStack(o.apply(this, arguments))
+        },
+        first: function() {
+            return this.eq(0)
+        },
+        last: function() {
+            return this.eq(-1)
+        },
+        eq: function(e) {
+            var t = this.length,
+                n = +e + (e < 0 ? t : 0);
+            return this.pushStack(n >= 0 && n < t ? [this[n]] : [])
+        },
+        end: function() {
+            return this.prevObject || this.constructor()
+        },
+        push: s,
+        sort: n.sort,
+        splice: n.splice
+    }, w.extend = w.fn.extend = function() {
+        var e, t, n, r, i, o, a = arguments[0] || {},
+            s = 1,
+            u = arguments.length,
+            l = !1;
+        for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || g(a) || (a = {}), s === u && (a = this, s--); s < u; s++)
+            if (null != (e = arguments[s]))
+                for (t in e) n = a[t], a !== (r = e[t]) && (l && r && (w.isPlainObject(r) || (i = Array.isArray(r))) ? (i ? (i = !1, o = n && Array.isArray(n) ? n : []) : o = n && w.isPlainObject(n) ? n : {}, a[t] = w.extend(l, o, r)) : void 0 !== r && (a[t] = r));
+        return a
+    }, w.extend({
+        expando: "jQuery" + ("3.3.1" + Math.random()).replace(/\D/g, ""),
+        isReady: !0,
+        error: function(e) {
+            throw new Error(e)
+        },
+        noop: function() {},
+        isPlainObject: function(e) {
+            var t, n;
+            return !(!e || "[object Object]" !== c.call(e)) && (!(t = i(e)) || "function" == typeof(n = f.call(t, "constructor") && t.constructor) && p.call(n) === d)
+        },
+        isEmptyObject: function(e) {
+            var t;
+            for (t in e) return !1;
+            return !0
+        },
+        globalEval: function(e) {
+            m(e)
+        },
+        each: function(e, t) {
+            var n, r = 0;
+            if (C(e)) {
+                for (n = e.length; r < n; r++)
+                    if (!1 === t.call(e[r], r, e[r])) break
+            } else
+                for (r in e)
+                    if (!1 === t.call(e[r], r, e[r])) break;
+            return e
+        },
+        trim: function(e) {
+            return null == e ? "" : (e + "").replace(T, "")
+        },
+        makeArray: function(e, t) {
+            var n = t || [];
+            return null != e && (C(Object(e)) ? w.merge(n, "string" == typeof e ? [e] : e) : s.call(n, e)), n
+        },
+        inArray: function(e, t, n) {
+            return null == t ? -1 : u.call(t, e, n)
+        },
+        merge: function(e, t) {
+            for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
+            return e.length = i, e
+        },
+        grep: function(e, t, n) {
+            for (var r, i = [], o = 0, a = e.length, s = !n; o < a; o++)(r = !t(e[o], o)) !== s && i.push(e[o]);
+            return i
+        },
+        map: function(e, t, n) {
+            var r, i, o = 0,
+                s = [];
+            if (C(e))
+                for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && s.push(i);
+            else
+                for (o in e) null != (i = t(e[o], o, n)) && s.push(i);
+            return a.apply([], s)
+        },
+        guid: 1,
+        support: h
+    }), "function" == typeof Symbol && (w.fn[Symbol.iterator] = n[Symbol.iterator]), w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) {
+        l["[object " + t + "]"] = t.toLowerCase()
+    });
+
+    function C(e) {
+        var t = !!e && "length" in e && e.length,
+            n = x(e);
+        return !g(e) && !y(e) && ("array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e)
+    }
+    var E = function(e) {
+        var t, n, r, i, o, a, s, u, l, c, f, p, d, h, g, y, v, m, x, b = "sizzle" + 1 * new Date,
+            w = e.document,
+            T = 0,
+            C = 0,
+            E = ae(),
+            k = ae(),
+            S = ae(),
+            D = function(e, t) {
+                return e === t && (f = !0), 0
+            },
+            N = {}.hasOwnProperty,
+            A = [],
+            j = A.pop,
+            q = A.push,
+            L = A.push,
+            H = A.slice,
+            O = function(e, t) {
+                for (var n = 0, r = e.length; n < r; n++)
+                    if (e[n] === t) return n;
+                return -1
+            },
+            P = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+            M = "[\\x20\\t\\r\\n\\f]",
+            R = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+            I = "\\[" + M + "*(" + R + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + R + "))|)" + M + "*\\]",
+            W = ":(" + R + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + I + ")*)|.*)\\)|)",
+            $ = new RegExp(M + "+", "g"),
+            B = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
+            F = new RegExp("^" + M + "*," + M + "*"),
+            _ = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
+            z = new RegExp("=" + M + "*([^\\]'\"]*?)" + M + "*\\]", "g"),
+            X = new RegExp(W),
+            U = new RegExp("^" + R + "$"),
+            V = {
+                ID: new RegExp("^#(" + R + ")"),
+                CLASS: new RegExp("^\\.(" + R + ")"),
+                TAG: new RegExp("^(" + R + "|[*])"),
+                ATTR: new RegExp("^" + I),
+                PSEUDO: new RegExp("^" + W),
+                CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
+                bool: new RegExp("^(?:" + P + ")$", "i"),
+                needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
+            },
+            G = /^(?:input|select|textarea|button)$/i,
+            Y = /^h\d$/i,
+            Q = /^[^{]+\{\s*\[native \w/,
+            J = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+            K = /[+~]/,
+            Z = new RegExp("\\\\([\\da-f]{1,6}" + M + "?|(" + M + ")|.)", "ig"),
+            ee = function(e, t, n) {
+                var r = "0x" + t - 65536;
+                return r !== r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
+            },
+            te = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+            ne = function(e, t) {
+                return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
+            },
+            re = function() {
+                p()
+            },
+            ie = me(function(e) {
+                return !0 === e.disabled && ("form" in e || "label" in e)
+            }, {
+                dir: "parentNode",
+                next: "legend"
+            });
+        try {
+            L.apply(A = H.call(w.childNodes), w.childNodes), A[w.childNodes.length].nodeType
+        } catch (e) {
+            L = {
+                apply: A.length ? function(e, t) {
+                    q.apply(e, H.call(t))
+                } : function(e, t) {
+                    var n = e.length,
+                        r = 0;
+                    while (e[n++] = t[r++]);
+                    e.length = n - 1
+                }
+            }
+        }
+
+        function oe(e, t, r, i) {
+            var o, s, l, c, f, h, v, m = t && t.ownerDocument,
+                T = t ? t.nodeType : 9;
+            if (r = r || [], "string" != typeof e || !e || 1 !== T && 9 !== T && 11 !== T) return r;
+            if (!i && ((t ? t.ownerDocument || t : w) !== d && p(t), t = t || d, g)) {
+                if (11 !== T && (f = J.exec(e)))
+                    if (o = f[1]) {
+                        if (9 === T) {
+                            if (!(l = t.getElementById(o))) return r;
+                            if (l.id === o) return r.push(l), r
+                        } else if (m && (l = m.getElementById(o)) && x(t, l) && l.id === o) return r.push(l), r
+                    } else {
+                        if (f[2]) return L.apply(r, t.getElementsByTagName(e)), r;
+                        if ((o = f[3]) && n.getElementsByClassName && t.getElementsByClassName) return L.apply(r, t.getElementsByClassName(o)), r
+                    } if (n.qsa && !S[e + " "] && (!y || !y.test(e))) {
+                    if (1 !== T) m = t, v = e;
+                    else if ("object" !== t.nodeName.toLowerCase()) {
+                        (c = t.getAttribute("id")) ? c = c.replace(te, ne): t.setAttribute("id", c = b), s = (h = a(e)).length;
+                        while (s--) h[s] = "#" + c + " " + ve(h[s]);
+                        v = h.join(","), m = K.test(e) && ge(t.parentNode) || t
+                    }
+                    if (v) try {
+                        return L.apply(r, m.querySelectorAll(v)), r
+                    } catch (e) {} finally {
+                        c === b && t.removeAttribute("id")
+                    }
+                }
+            }
+            return u(e.replace(B, "$1"), t, r, i)
+        }
+
+        function ae() {
+            var e = [];
+
+            function t(n, i) {
+                return e.push(n + " ") > r.cacheLength && delete t[e.shift()], t[n + " "] = i
+            }
+            return t
+        }
+
+        function se(e) {
+            return e[b] = !0, e
+        }
+
+        function ue(e) {
+            var t = d.createElement("fieldset");
+            try {
+                return !!e(t)
+            } catch (e) {
+                return !1
+            } finally {
+                t.parentNode && t.parentNode.removeChild(t), t = null
+            }
+        }
+
+        function le(e, t) {
+            var n = e.split("|"),
+                i = n.length;
+            while (i--) r.attrHandle[n[i]] = t
+        }
+
+        function ce(e, t) {
+            var n = t && e,
+                r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
+            if (r) return r;
+            if (n)
+                while (n = n.nextSibling)
+                    if (n === t) return -1;
+            return e ? 1 : -1
+        }
+
+        function fe(e) {
+            return function(t) {
+                return "input" === t.nodeName.toLowerCase() && t.type === e
+            }
+        }
+
+        function pe(e) {
+            return function(t) {
+                var n = t.nodeName.toLowerCase();
+                return ("input" === n || "button" === n) && t.type === e
+            }
+        }
+
+        function de(e) {
+            return function(t) {
+                return "form" in t ? t.parentNode && !1 === t.disabled ? "label" in t ? "label" in t.parentNode ? t.parentNode.disabled === e : t.disabled === e : t.isDisabled === e || t.isDisabled !== !e && ie(t) === e : t.disabled === e : "label" in t && t.disabled === e
+            }
+        }
+
+        function he(e) {
+            return se(function(t) {
+                return t = +t, se(function(n, r) {
+                    var i, o = e([], n.length, t),
+                        a = o.length;
+                    while (a--) n[i = o[a]] && (n[i] = !(r[i] = n[i]))
+                })
+            })
+        }
+
+        function ge(e) {
+            return e && "undefined" != typeof e.getElementsByTagName && e
+        }
+        n = oe.support = {}, o = oe.isXML = function(e) {
+            var t = e && (e.ownerDocument || e).documentElement;
+            return !!t && "HTML" !== t.nodeName
+        }, p = oe.setDocument = function(e) {
+            var t, i, a = e ? e.ownerDocument || e : w;
+            return a !== d && 9 === a.nodeType && a.documentElement ? (d = a, h = d.documentElement, g = !o(d), w !== d && (i = d.defaultView) && i.top !== i && (i.addEventListener ? i.addEventListener("unload", re, !1) : i.attachEvent && i.attachEvent("onunload", re)), n.attributes = ue(function(e) {
+                return e.className = "i", !e.getAttribute("className")
+            }), n.getElementsByTagName = ue(function(e) {
+                return e.appendChild(d.createComment("")), !e.getElementsByTagName("*").length
+            }), n.getElementsByClassName = Q.test(d.getElementsByClassName), n.getById = ue(function(e) {
+                return h.appendChild(e).id = b, !d.getElementsByName || !d.getElementsByName(b).length
+            }), n.getById ? (r.filter.ID = function(e) {
+                var t = e.replace(Z, ee);
+                return function(e) {
+                    return e.getAttribute("id") === t
+                }
+            }, r.find.ID = function(e, t) {
+                if ("undefined" != typeof t.getElementById && g) {
+                    var n = t.getElementById(e);
+                    return n ? [n] : []
+                }
+            }) : (r.filter.ID = function(e) {
+                var t = e.replace(Z, ee);
+                return function(e) {
+                    var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
+                    return n && n.value === t
+                }
+            }, r.find.ID = function(e, t) {
+                if ("undefined" != typeof t.getElementById && g) {
+                    var n, r, i, o = t.getElementById(e);
+                    if (o) {
+                        if ((n = o.getAttributeNode("id")) && n.value === e) return [o];
+                        i = t.getElementsByName(e), r = 0;
+                        while (o = i[r++])
+                            if ((n = o.getAttributeNode("id")) && n.value === e) return [o]
+                    }
+                    return []
+                }
+            }), r.find.TAG = n.getElementsByTagName ? function(e, t) {
+                return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : n.qsa ? t.querySelectorAll(e) : void 0
+            } : function(e, t) {
+                var n, r = [],
+                    i = 0,
+                    o = t.getElementsByTagName(e);
+                if ("*" === e) {
+                    while (n = o[i++]) 1 === n.nodeType && r.push(n);
+                    return r
+                }
+                return o
+            }, r.find.CLASS = n.getElementsByClassName && function(e, t) {
+                if ("undefined" != typeof t.getElementsByClassName && g) return t.getElementsByClassName(e)
+            }, v = [], y = [], (n.qsa = Q.test(d.querySelectorAll)) && (ue(function(e) {
+                h.appendChild(e).innerHTML = "<a id='" + b + "'></a><select id='" + b + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && y.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || y.push("\\[" + M + "*(?:value|" + P + ")"), e.querySelectorAll("[id~=" + b + "-]").length || y.push("~="), e.querySelectorAll(":checked").length || y.push(":checked"), e.querySelectorAll("a#" + b + "+*").length || y.push(".#.+[+~]")
+            }), ue(function(e) {
+                e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
+                var t = d.createElement("input");
+                t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && y.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && y.push(":enabled", ":disabled"), h.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && y.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), y.push(",.*:")
+            })), (n.matchesSelector = Q.test(m = h.matches || h.webkitMatchesSelector || h.mozMatchesSelector || h.oMatchesSelector || h.msMatchesSelector)) && ue(function(e) {
+                n.disconnectedMatch = m.call(e, "*"), m.call(e, "[s!='']:x"), v.push("!=", W)
+            }), y = y.length && new RegExp(y.join("|")), v = v.length && new RegExp(v.join("|")), t = Q.test(h.compareDocumentPosition), x = t || Q.test(h.contains) ? function(e, t) {
+                var n = 9 === e.nodeType ? e.documentElement : e,
+                    r = t && t.parentNode;
+                return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
+            } : function(e, t) {
+                if (t)
+                    while (t = t.parentNode)
+                        if (t === e) return !0;
+                return !1
+            }, D = t ? function(e, t) {
+                if (e === t) return f = !0, 0;
+                var r = !e.compareDocumentPosition - !t.compareDocumentPosition;
+                return r || (1 & (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !n.sortDetached && t.compareDocumentPosition(e) === r ? e === d || e.ownerDocument === w && x(w, e) ? -1 : t === d || t.ownerDocument === w && x(w, t) ? 1 : c ? O(c, e) - O(c, t) : 0 : 4 & r ? -1 : 1)
+            } : function(e, t) {
+                if (e === t) return f = !0, 0;
+                var n, r = 0,
+                    i = e.parentNode,
+                    o = t.parentNode,
+                    a = [e],
+                    s = [t];
+                if (!i || !o) return e === d ? -1 : t === d ? 1 : i ? -1 : o ? 1 : c ? O(c, e) - O(c, t) : 0;
+                if (i === o) return ce(e, t);
+                n = e;
+                while (n = n.parentNode) a.unshift(n);
+                n = t;
+                while (n = n.parentNode) s.unshift(n);
+                while (a[r] === s[r]) r++;
+                return r ? ce(a[r], s[r]) : a[r] === w ? -1 : s[r] === w ? 1 : 0
+            }, d) : d
+        }, oe.matches = function(e, t) {
+            return oe(e, null, null, t)
+        }, oe.matchesSelector = function(e, t) {
+            if ((e.ownerDocument || e) !== d && p(e), t = t.replace(z, "='$1']"), n.matchesSelector && g && !S[t + " "] && (!v || !v.test(t)) && (!y || !y.test(t))) try {
+                var r = m.call(e, t);
+                if (r || n.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r
+            } catch (e) {}
+            return oe(t, d, null, [e]).length > 0
+        }, oe.contains = function(e, t) {
+            return (e.ownerDocument || e) !== d && p(e), x(e, t)
+        }, oe.attr = function(e, t) {
+            (e.ownerDocument || e) !== d && p(e);
+            var i = r.attrHandle[t.toLowerCase()],
+                o = i && N.call(r.attrHandle, t.toLowerCase()) ? i(e, t, !g) : void 0;
+            return void 0 !== o ? o : n.attributes || !g ? e.getAttribute(t) : (o = e.getAttributeNode(t)) && o.specified ? o.value : null
+        }, oe.escape = function(e) {
+            return (e + "").replace(te, ne)
+        }, oe.error = function(e) {
+            throw new Error("Syntax error, unrecognized expression: " + e)
+        }, oe.uniqueSort = function(e) {
+            var t, r = [],
+                i = 0,
+                o = 0;
+            if (f = !n.detectDuplicates, c = !n.sortStable && e.slice(0), e.sort(D), f) {
+                while (t = e[o++]) t === e[o] && (i = r.push(o));
+                while (i--) e.splice(r[i], 1)
+            }
+            return c = null, e
+        }, i = oe.getText = function(e) {
+            var t, n = "",
+                r = 0,
+                o = e.nodeType;
+            if (o) {
+                if (1 === o || 9 === o || 11 === o) {
+                    if ("string" == typeof e.textContent) return e.textContent;
+                    for (e = e.firstChild; e; e = e.nextSibling) n += i(e)
+                } else if (3 === o || 4 === o) return e.nodeValue
+            } else
+                while (t = e[r++]) n += i(t);
+            return n
+        }, (r = oe.selectors = {
+            cacheLength: 50,
+            createPseudo: se,
+            match: V,
+            attrHandle: {},
+            find: {},
+            relative: {
+                ">": {
+                    dir: "parentNode",
+                    first: !0
+                },
+                " ": {
+                    dir: "parentNode"
+                },
+                "+": {
+                    dir: "previousSibling",
+                    first: !0
+                },
+                "~": {
+                    dir: "previousSibling"
+                }
+            },
+            preFilter: {
+                ATTR: function(e) {
+                    return e[1] = e[1].replace(Z, ee), e[3] = (e[3] || e[4] || e[5] || "").replace(Z, ee), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
+                },
+                CHILD: function(e) {
+                    return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || oe.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && oe.error(e[0]), e
+                },
+                PSEUDO: function(e) {
+                    var t, n = !e[6] && e[2];
+                    return V.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = a(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
+                }
+            },
+            filter: {
+                TAG: function(e) {
+                    var t = e.replace(Z, ee).toLowerCase();
+                    return "*" === e ? function() {
+                        return !0
+                    } : function(e) {
+                        return e.nodeName && e.nodeName.toLowerCase() === t
+                    }
+                },
+                CLASS: function(e) {
+                    var t = E[e + " "];
+                    return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && E(e, function(e) {
+                        return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
+                    })
+                },
+                ATTR: function(e, t, n) {
+                    return function(r) {
+                        var i = oe.attr(r, e);
+                        return null == i ? "!=" === t : !t || (i += "", "=" === t ? i === n : "!=" === t ? i !== n : "^=" === t ? n && 0 === i.indexOf(n) : "*=" === t ? n && i.indexOf(n) > -1 : "$=" === t ? n && i.slice(-n.length) === n : "~=" === t ? (" " + i.replace($, " ") + " ").indexOf(n) > -1 : "|=" === t && (i === n || i.slice(0, n.length + 1) === n + "-"))
+                    }
+                },
+                CHILD: function(e, t, n, r, i) {
+                    var o = "nth" !== e.slice(0, 3),
+                        a = "last" !== e.slice(-4),
+                        s = "of-type" === t;
+                    return 1 === r && 0 === i ? function(e) {
+                        return !!e.parentNode
+                    } : function(t, n, u) {
+                        var l, c, f, p, d, h, g = o !== a ? "nextSibling" : "previousSibling",
+                            y = t.parentNode,
+                            v = s && t.nodeName.toLowerCase(),
+                            m = !u && !s,
+                            x = !1;
+                        if (y) {
+                            if (o) {
+                                while (g) {
+                                    p = t;
+                                    while (p = p[g])
+                                        if (s ? p.nodeName.toLowerCase() === v : 1 === p.nodeType) return !1;
+                                    h = g = "only" === e && !h && "nextSibling"
+                                }
+                                return !0
+                            }
+                            if (h = [a ? y.firstChild : y.lastChild], a && m) {
+                                x = (d = (l = (c = (f = (p = y)[b] || (p[b] = {}))[p.uniqueID] || (f[p.uniqueID] = {}))[e] || [])[0] === T && l[1]) && l[2], p = d && y.childNodes[d];
+                                while (p = ++d && p && p[g] || (x = d = 0) || h.pop())
+                                    if (1 === p.nodeType && ++x && p === t) {
+                                        c[e] = [T, d, x];
+                                        break
+                                    }
+                            } else if (m && (x = d = (l = (c = (f = (p = t)[b] || (p[b] = {}))[p.uniqueID] || (f[p.uniqueID] = {}))[e] || [])[0] === T && l[1]), !1 === x)
+                                while (p = ++d && p && p[g] || (x = d = 0) || h.pop())
+                                    if ((s ? p.nodeName.toLowerCase() === v : 1 === p.nodeType) && ++x && (m && ((c = (f = p[b] || (p[b] = {}))[p.uniqueID] || (f[p.uniqueID] = {}))[e] = [T, x]), p === t)) break;
+                            return (x -= i) === r || x % r == 0 && x / r >= 0
+                        }
+                    }
+                },
+                PSEUDO: function(e, t) {
+                    var n, i = r.pseudos[e] || r.setFilters[e.toLowerCase()] || oe.error("unsupported pseudo: " + e);
+                    return i[b] ? i(t) : i.length > 1 ? (n = [e, e, "", t], r.setFilters.hasOwnProperty(e.toLowerCase()) ? se(function(e, n) {
+                        var r, o = i(e, t),
+                            a = o.length;
+                        while (a--) e[r = O(e, o[a])] = !(n[r] = o[a])
+                    }) : function(e) {
+                        return i(e, 0, n)
+                    }) : i
+                }
+            },
+            pseudos: {
+                not: se(function(e) {
+                    var t = [],
+                        n = [],
+                        r = s(e.replace(B, "$1"));
+                    return r[b] ? se(function(e, t, n, i) {
+                        var o, a = r(e, null, i, []),
+                            s = e.length;
+                        while (s--)(o = a[s]) && (e[s] = !(t[s] = o))
+                    }) : function(e, i, o) {
+                        return t[0] = e, r(t, null, o, n), t[0] = null, !n.pop()
+                    }
+                }),
+                has: se(function(e) {
+                    return function(t) {
+                        return oe(e, t).length > 0
+                    }
+                }),
+                contains: se(function(e) {
+                    return e = e.replace(Z, ee),
+                        function(t) {
+                            return (t.textContent || t.innerText || i(t)).indexOf(e) > -1
+                        }
+                }),
+                lang: se(function(e) {
+                    return U.test(e || "") || oe.error("unsupported lang: " + e), e = e.replace(Z, ee).toLowerCase(),
+                        function(t) {
+                            var n;
+                            do {
+                                if (n = g ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return (n = n.toLowerCase()) === e || 0 === n.indexOf(e + "-")
+                            } while ((t = t.parentNode) && 1 === t.nodeType);
+                            return !1
+                        }
+                }),
+                target: function(t) {
+                    var n = e.location && e.location.hash;
+                    return n && n.slice(1) === t.id
+                },
+                root: function(e) {
+                    return e === h
+                },
+                focus: function(e) {
+                    return e === d.activeElement && (!d.hasFocus || d.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
+                },
+                enabled: de(!1),
+                disabled: de(!0),
+                checked: function(e) {
+                    var t = e.nodeName.toLowerCase();
+                    return "input" === t && !!e.checked || "option" === t && !!e.selected
+                },
+                selected: function(e) {
+                    return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected
+                },
+                empty: function(e) {
+                    for (e = e.firstChild; e; e = e.nextSibling)
+                        if (e.nodeType < 6) return !1;
+                    return !0
+                },
+                parent: function(e) {
+                    return !r.pseudos.empty(e)
+                },
+                header: function(e) {
+                    return Y.test(e.nodeName)
+                },
+                input: function(e) {
+                    return G.test(e.nodeName)
+                },
+                button: function(e) {
+                    var t = e.nodeName.toLowerCase();
+                    return "input" === t && "button" === e.type || "button" === t
+                },
+                text: function(e) {
+                    var t;
+                    return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
+                },
+                first: he(function() {
+                    return [0]
+                }),
+                last: he(function(e, t) {
+                    return [t - 1]
+                }),
+                eq: he(function(e, t, n) {
+                    return [n < 0 ? n + t : n]
+                }),
+                even: he(function(e, t) {
+                    for (var n = 0; n < t; n += 2) e.push(n);
+                    return e
+                }),
+                odd: he(function(e, t) {
+                    for (var n = 1; n < t; n += 2) e.push(n);
+                    return e
+                }),
+                lt: he(function(e, t, n) {
+                    for (var r = n < 0 ? n + t : n; --r >= 0;) e.push(r);
+                    return e
+                }),
+                gt: he(function(e, t, n) {
+                    for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
+                    return e
+                })
+            }
+        }).pseudos.nth = r.pseudos.eq;
+        for (t in {
+                radio: !0,
+                checkbox: !0,
+                file: !0,
+                password: !0,
+                image: !0
+            }) r.pseudos[t] = fe(t);
+        for (t in {
+                submit: !0,
+                reset: !0
+            }) r.pseudos[t] = pe(t);
+
+        function ye() {}
+        ye.prototype = r.filters = r.pseudos, r.setFilters = new ye, a = oe.tokenize = function(e, t) {
+            var n, i, o, a, s, u, l, c = k[e + " "];
+            if (c) return t ? 0 : c.slice(0);
+            s = e, u = [], l = r.preFilter;
+            while (s) {
+                n && !(i = F.exec(s)) || (i && (s = s.slice(i[0].length) || s), u.push(o = [])), n = !1, (i = _.exec(s)) && (n = i.shift(), o.push({
+                    value: n,
+                    type: i[0].replace(B, " ")
+                }), s = s.slice(n.length));
+                for (a in r.filter) !(i = V[a].exec(s)) || l[a] && !(i = l[a](i)) || (n = i.shift(), o.push({
+                    value: n,
+                    type: a,
+                    matches: i
+                }), s = s.slice(n.length));
+                if (!n) break
+            }
+            return t ? s.length : s ? oe.error(e) : k(e, u).slice(0)
+        };
+
+        function ve(e) {
+            for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
+            return r
+        }
+
+        function me(e, t, n) {
+            var r = t.dir,
+                i = t.next,
+                o = i || r,
+                a = n && "parentNode" === o,
+                s = C++;
+            return t.first ? function(t, n, i) {
+                while (t = t[r])
+                    if (1 === t.nodeType || a) return e(t, n, i);
+                return !1
+            } : function(t, n, u) {
+                var l, c, f, p = [T, s];
+                if (u) {
+                    while (t = t[r])
+                        if ((1 === t.nodeType || a) && e(t, n, u)) return !0
+                } else
+                    while (t = t[r])
+                        if (1 === t.nodeType || a)
+                            if (f = t[b] || (t[b] = {}), c = f[t.uniqueID] || (f[t.uniqueID] = {}), i && i === t.nodeName.toLowerCase()) t = t[r] || t;
+                            else {
+                                if ((l = c[o]) && l[0] === T && l[1] === s) return p[2] = l[2];
+                                if (c[o] = p, p[2] = e(t, n, u)) return !0
+                            } return !1
+            }
+        }
+
+        function xe(e) {
+            return e.length > 1 ? function(t, n, r) {
+                var i = e.length;
+                while (i--)
+                    if (!e[i](t, n, r)) return !1;
+                return !0
+            } : e[0]
+        }
+
+        function be(e, t, n) {
+            for (var r = 0, i = t.length; r < i; r++) oe(e, t[r], n);
+            return n
+        }
+
+        function we(e, t, n, r, i) {
+            for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s)));
+            return a
+        }
+
+        function Te(e, t, n, r, i, o) {
+            return r && !r[b] && (r = Te(r)), i && !i[b] && (i = Te(i, o)), se(function(o, a, s, u) {
+                var l, c, f, p = [],
+                    d = [],
+                    h = a.length,
+                    g = o || be(t || "*", s.nodeType ? [s] : s, []),
+                    y = !e || !o && t ? g : we(g, p, e, s, u),
+                    v = n ? i || (o ? e : h || r) ? [] : a : y;
+                if (n && n(y, v, s, u), r) {
+                    l = we(v, d), r(l, [], s, u), c = l.length;
+                    while (c--)(f = l[c]) && (v[d[c]] = !(y[d[c]] = f))
+                }
+                if (o) {
+                    if (i || e) {
+                        if (i) {
+                            l = [], c = v.length;
+                            while (c--)(f = v[c]) && l.push(y[c] = f);
+                            i(null, v = [], l, u)
+                        }
+                        c = v.length;
+                        while (c--)(f = v[c]) && (l = i ? O(o, f) : p[c]) > -1 && (o[l] = !(a[l] = f))
+                    }
+                } else v = we(v === a ? v.splice(h, v.length) : v), i ? i(null, a, v, u) : L.apply(a, v)
+            })
+        }
+
+        function Ce(e) {
+            for (var t, n, i, o = e.length, a = r.relative[e[0].type], s = a || r.relative[" "], u = a ? 1 : 0, c = me(function(e) {
+                    return e === t
+                }, s, !0), f = me(function(e) {
+                    return O(t, e) > -1
+                }, s, !0), p = [function(e, n, r) {
+                    var i = !a && (r || n !== l) || ((t = n).nodeType ? c(e, n, r) : f(e, n, r));
+                    return t = null, i
+                }]; u < o; u++)
+                if (n = r.relative[e[u].type]) p = [me(xe(p), n)];
+                else {
+                    if ((n = r.filter[e[u].type].apply(null, e[u].matches))[b]) {
+                        for (i = ++u; i < o; i++)
+                            if (r.relative[e[i].type]) break;
+                        return Te(u > 1 && xe(p), u > 1 && ve(e.slice(0, u - 1).concat({
+                            value: " " === e[u - 2].type ? "*" : ""
+                        })).replace(B, "$1"), n, u < i && Ce(e.slice(u, i)), i < o && Ce(e = e.slice(i)), i < o && ve(e))
+                    }
+                    p.push(n)
+                } return xe(p)
+        }
+
+        function Ee(e, t) {
+            var n = t.length > 0,
+                i = e.length > 0,
+                o = function(o, a, s, u, c) {
+                    var f, h, y, v = 0,
+                        m = "0",
+                        x = o && [],
+                        b = [],
+                        w = l,
+                        C = o || i && r.find.TAG("*", c),
+                        E = T += null == w ? 1 : Math.random() || .1,
+                        k = C.length;
+                    for (c && (l = a === d || a || c); m !== k && null != (f = C[m]); m++) {
+                        if (i && f) {
+                            h = 0, a || f.ownerDocument === d || (p(f), s = !g);
+                            while (y = e[h++])
+                                if (y(f, a || d, s)) {
+                                    u.push(f);
+                                    break
+                                } c && (T = E)
+                        }
+                        n && ((f = !y && f) && v--, o && x.push(f))
+                    }
+                    if (v += m, n && m !== v) {
+                        h = 0;
+                        while (y = t[h++]) y(x, b, a, s);
+                        if (o) {
+                            if (v > 0)
+                                while (m--) x[m] || b[m] || (b[m] = j.call(u));
+                            b = we(b)
+                        }
+                        L.apply(u, b), c && !o && b.length > 0 && v + t.length > 1 && oe.uniqueSort(u)
+                    }
+                    return c && (T = E, l = w), x
+                };
+            return n ? se(o) : o
+        }
+        return s = oe.compile = function(e, t) {
+            var n, r = [],
+                i = [],
+                o = S[e + " "];
+            if (!o) {
+                t || (t = a(e)), n = t.length;
+                while (n--)(o = Ce(t[n]))[b] ? r.push(o) : i.push(o);
+                (o = S(e, Ee(i, r))).selector = e
+            }
+            return o
+        }, u = oe.select = function(e, t, n, i) {
+            var o, u, l, c, f, p = "function" == typeof e && e,
+                d = !i && a(e = p.selector || e);
+            if (n = n || [], 1 === d.length) {
+                if ((u = d[0] = d[0].slice(0)).length > 2 && "ID" === (l = u[0]).type && 9 === t.nodeType && g && r.relative[u[1].type]) {
+                    if (!(t = (r.find.ID(l.matches[0].replace(Z, ee), t) || [])[0])) return n;
+                    p && (t = t.parentNode), e = e.slice(u.shift().value.length)
+                }
+                o = V.needsContext.test(e) ? 0 : u.length;
+                while (o--) {
+                    if (l = u[o], r.relative[c = l.type]) break;
+                    if ((f = r.find[c]) && (i = f(l.matches[0].replace(Z, ee), K.test(u[0].type) && ge(t.parentNode) || t))) {
+                        if (u.splice(o, 1), !(e = i.length && ve(u))) return L.apply(n, i), n;
+                        break
+                    }
+                }
+            }
+            return (p || s(e, d))(i, t, !g, n, !t || K.test(e) && ge(t.parentNode) || t), n
+        }, n.sortStable = b.split("").sort(D).join("") === b, n.detectDuplicates = !!f, p(), n.sortDetached = ue(function(e) {
+            return 1 & e.compareDocumentPosition(d.createElement("fieldset"))
+        }), ue(function(e) {
+            return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href")
+        }) || le("type|href|height|width", function(e, t, n) {
+            if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
+        }), n.attributes && ue(function(e) {
+            return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
+        }) || le("value", function(e, t, n) {
+            if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue
+        }), ue(function(e) {
+            return null == e.getAttribute("disabled")
+        }) || le(P, function(e, t, n) {
+            var r;
+            if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
+        }), oe
+    }(e);
+    w.find = E, w.expr = E.selectors, w.expr[":"] = w.expr.pseudos, w.uniqueSort = w.unique = E.uniqueSort, w.text = E.getText, w.isXMLDoc = E.isXML, w.contains = E.contains, w.escapeSelector = E.escape;
+    var k = function(e, t, n) {
+            var r = [],
+                i = void 0 !== n;
+            while ((e = e[t]) && 9 !== e.nodeType)
+                if (1 === e.nodeType) {
+                    if (i && w(e).is(n)) break;
+                    r.push(e)
+                } return r
+        },
+        S = function(e, t) {
+            for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
+            return n
+        },
+        D = w.expr.match.needsContext;
+
+    function N(e, t) {
+        return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
+    }
+    var A = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
+
+    function j(e, t, n) {
+        return g(t) ? w.grep(e, function(e, r) {
+            return !!t.call(e, r, e) !== n
+        }) : t.nodeType ? w.grep(e, function(e) {
+            return e === t !== n
+        }) : "string" != typeof t ? w.grep(e, function(e) {
+            return u.call(t, e) > -1 !== n
+        }) : w.filter(t, e, n)
+    }
+    w.filter = function(e, t, n) {
+        var r = t[0];
+        return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? w.find.matchesSelector(r, e) ? [r] : [] : w.find.matches(e, w.grep(t, function(e) {
+            return 1 === e.nodeType
+        }))
+    }, w.fn.extend({
+        find: function(e) {
+            var t, n, r = this.length,
+                i = this;
+            if ("string" != typeof e) return this.pushStack(w(e).filter(function() {
+                for (t = 0; t < r; t++)
+                    if (w.contains(i[t], this)) return !0
+            }));
+            for (n = this.pushStack([]), t = 0; t < r; t++) w.find(e, i[t], n);
+            return r > 1 ? w.uniqueSort(n) : n
+        },
+        filter: function(e) {
+            return this.pushStack(j(this, e || [], !1))
+        },
+        not: function(e) {
+            return this.pushStack(j(this, e || [], !0))
+        },
+        is: function(e) {
+            return !!j(this, "string" == typeof e && D.test(e) ? w(e) : e || [], !1).length
+        }
+    });
+    var q, L = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
+    (w.fn.init = function(e, t, n) {
+        var i, o;
+        if (!e) return this;
+        if (n = n || q, "string" == typeof e) {
+            if (!(i = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null, e, null] : L.exec(e)) || !i[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
+            if (i[1]) {
+                if (t = t instanceof w ? t[0] : t, w.merge(this, w.parseHTML(i[1], t && t.nodeType ? t.ownerDocument || t : r, !0)), A.test(i[1]) && w.isPlainObject(t))
+                    for (i in t) g(this[i]) ? this[i](t[i]) : this.attr(i, t[i]);
+                return this
+            }
+            return (o = r.getElementById(i[2])) && (this[0] = o, this.length = 1), this
+        }
+        return e.nodeType ? (this[0] = e, this.length = 1, this) : g(e) ? void 0 !== n.ready ? n.ready(e) : e(w) : w.makeArray(e, this)
+    }).prototype = w.fn, q = w(r);
+    var H = /^(?:parents|prev(?:Until|All))/,
+        O = {
+            children: !0,
+            contents: !0,
+            next: !0,
+            prev: !0
+        };
+    w.fn.extend({
+        has: function(e) {
+            var t = w(e, this),
+                n = t.length;
+            return this.filter(function() {
+                for (var e = 0; e < n; e++)
+                    if (w.contains(this, t[e])) return !0
+            })
+        },
+        closest: function(e, t) {
+            var n, r = 0,
+                i = this.length,
+                o = [],
+                a = "string" != typeof e && w(e);
+            if (!D.test(e))
+                for (; r < i; r++)
+                    for (n = this[r]; n && n !== t; n = n.parentNode)
+                        if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && w.find.matchesSelector(n, e))) {
+                            o.push(n);
+                            break
+                        } return this.pushStack(o.length > 1 ? w.uniqueSort(o) : o)
+        },
+        index: function(e) {
+            return e ? "string" == typeof e ? u.call(w(e), this[0]) : u.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+        },
+        add: function(e, t) {
+            return this.pushStack(w.uniqueSort(w.merge(this.get(), w(e, t))))
+        },
+        addBack: function(e) {
+            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
+        }
+    });
+
+    function P(e, t) {
+        while ((e = e[t]) && 1 !== e.nodeType);
+        return e
+    }
+    w.each({
+        parent: function(e) {
+            var t = e.parentNode;
+            return t && 11 !== t.nodeType ? t : null
+        },
+        parents: function(e) {
+            return k(e, "parentNode")
+        },
+        parentsUntil: function(e, t, n) {
+            return k(e, "parentNode", n)
+        },
+        next: function(e) {
+            return P(e, "nextSibling")
+        },
+        prev: function(e) {
+            return P(e, "previousSibling")
+        },
+        nextAll: function(e) {
+            return k(e, "nextSibling")
+        },
+        prevAll: function(e) {
+            return k(e, "previousSibling")
+        },
+        nextUntil: function(e, t, n) {
+            return k(e, "nextSibling", n)
+        },
+        prevUntil: function(e, t, n) {
+            return k(e, "previousSibling", n)
+        },
+        siblings: function(e) {
+            return S((e.parentNode || {}).firstChild, e)
+        },
+        children: function(e) {
+            return S(e.firstChild)
+        },
+        contents: function(e) {
+            return N(e, "iframe") ? e.contentDocument : (N(e, "template") && (e = e.content || e), w.merge([], e.childNodes))
+        }
+    }, function(e, t) {
+        w.fn[e] = function(n, r) {
+            var i = w.map(this, t, n);
+            return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (i = w.filter(r, i)), this.length > 1 && (O[e] || w.uniqueSort(i), H.test(e) && i.reverse()), this.pushStack(i)
+        }
+    });
+    var M = /[^\x20\t\r\n\f]+/g;
+
+    function R(e) {
+        var t = {};
+        return w.each(e.match(M) || [], function(e, n) {
+            t[n] = !0
+        }), t
+    }
+    w.Callbacks = function(e) {
+        e = "string" == typeof e ? R(e) : w.extend({}, e);
+        var t, n, r, i, o = [],
+            a = [],
+            s = -1,
+            u = function() {
+                for (i = i || e.once, r = t = !0; a.length; s = -1) {
+                    n = a.shift();
+                    while (++s < o.length) !1 === o[s].apply(n[0], n[1]) && e.stopOnFalse && (s = o.length, n = !1)
+                }
+                e.memory || (n = !1), t = !1, i && (o = n ? [] : "")
+            },
+            l = {
+                add: function() {
+                    return o && (n && !t && (s = o.length - 1, a.push(n)), function t(n) {
+                        w.each(n, function(n, r) {
+                            g(r) ? e.unique && l.has(r) || o.push(r) : r && r.length && "string" !== x(r) && t(r)
+                        })
+                    }(arguments), n && !t && u()), this
+                },
+                remove: function() {
+                    return w.each(arguments, function(e, t) {
+                        var n;
+                        while ((n = w.inArray(t, o, n)) > -1) o.splice(n, 1), n <= s && s--
+                    }), this
+                },
+                has: function(e) {
+                    return e ? w.inArray(e, o) > -1 : o.length > 0
+                },
+                empty: function() {
+                    return o && (o = []), this
+                },
+                disable: function() {
+                    return i = a = [], o = n = "", this
+                },
+                disabled: function() {
+                    return !o
+                },
+                lock: function() {
+                    return i = a = [], n || t || (o = n = ""), this
+                },
+                locked: function() {
+                    return !!i
+                },
+                fireWith: function(e, n) {
+                    return i || (n = [e, (n = n || []).slice ? n.slice() : n], a.push(n), t || u()), this
+                },
+                fire: function() {
+                    return l.fireWith(this, arguments), this
+                },
+                fired: function() {
+                    return !!r
+                }
+            };
+        return l
+    };
+
+    function I(e) {
+        return e
+    }
+
+    function W(e) {
+        throw e
+    }
+
+    function $(e, t, n, r) {
+        var i;
+        try {
+            e && g(i = e.promise) ? i.call(e).done(t).fail(n) : e && g(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r))
+        } catch (e) {
+            n.apply(void 0, [e])
+        }
+    }
+    w.extend({
+        Deferred: function(t) {
+            var n = [
+                    ["notify", "progress", w.Callbacks("memory"), w.Callbacks("memory"), 2],
+                    ["resolve", "done", w.Callbacks("once memory"), w.Callbacks("once memory"), 0, "resolved"],
+                    ["reject", "fail", w.Callbacks("once memory"), w.Callbacks("once memory"), 1, "rejected"]
+                ],
+                r = "pending",
+                i = {
+                    state: function() {
+                        return r
+                    },
+                    always: function() {
+                        return o.done(arguments).fail(arguments), this
+                    },
+                    "catch": function(e) {
+                        return i.then(null, e)
+                    },
+                    pipe: function() {
+                        var e = arguments;
+                        return w.Deferred(function(t) {
+                            w.each(n, function(n, r) {
+                                var i = g(e[r[4]]) && e[r[4]];
+                                o[r[1]](function() {
+                                    var e = i && i.apply(this, arguments);
+                                    e && g(e.promise) ? e.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[r[0] + "With"](this, i ? [e] : arguments)
+                                })
+                            }), e = null
+                        }).promise()
+                    },
+                    then: function(t, r, i) {
+                        var o = 0;
+
+                        function a(t, n, r, i) {
+                            return function() {
+                                var s = this,
+                                    u = arguments,
+                                    l = function() {
+                                        var e, l;
+                                        if (!(t < o)) {
+                                            if ((e = r.apply(s, u)) === n.promise()) throw new TypeError("Thenable self-resolution");
+                                            l = e && ("object" == typeof e || "function" == typeof e) && e.then, g(l) ? i ? l.call(e, a(o, n, I, i), a(o, n, W, i)) : (o++, l.call(e, a(o, n, I, i), a(o, n, W, i), a(o, n, I, n.notifyWith))) : (r !== I && (s = void 0, u = [e]), (i || n.resolveWith)(s, u))
+                                        }
+                                    },
+                                    c = i ? l : function() {
+                                        try {
+                                            l()
+                                        } catch (e) {
+                                            w.Deferred.exceptionHook && w.Deferred.exceptionHook(e, c.stackTrace), t + 1 >= o && (r !== W && (s = void 0, u = [e]), n.rejectWith(s, u))
+                                        }
+                                    };
+                                t ? c() : (w.Deferred.getStackHook && (c.stackTrace = w.Deferred.getStackHook()), e.setTimeout(c))
+                            }
+                        }
+                        return w.Deferred(function(e) {
+                            n[0][3].add(a(0, e, g(i) ? i : I, e.notifyWith)), n[1][3].add(a(0, e, g(t) ? t : I)), n[2][3].add(a(0, e, g(r) ? r : W))
+                        }).promise()
+                    },
+                    promise: function(e) {
+                        return null != e ? w.extend(e, i) : i
+                    }
+                },
+                o = {};
+            return w.each(n, function(e, t) {
+                var a = t[2],
+                    s = t[5];
+                i[t[1]] = a.add, s && a.add(function() {
+                    r = s
+                }, n[3 - e][2].disable, n[3 - e][3].disable, n[0][2].lock, n[0][3].lock), a.add(t[3].fire), o[t[0]] = function() {
+                    return o[t[0] + "With"](this === o ? void 0 : this, arguments), this
+                }, o[t[0] + "With"] = a.fireWith
+            }), i.promise(o), t && t.call(o, o), o
+        },
+        when: function(e) {
+            var t = arguments.length,
+                n = t,
+                r = Array(n),
+                i = o.call(arguments),
+                a = w.Deferred(),
+                s = function(e) {
+                    return function(n) {
+                        r[e] = this, i[e] = arguments.length > 1 ? o.call(arguments) : n, --t || a.resolveWith(r, i)
+                    }
+                };
+            if (t <= 1 && ($(e, a.done(s(n)).resolve, a.reject, !t), "pending" === a.state() || g(i[n] && i[n].then))) return a.then();
+            while (n--) $(i[n], s(n), a.reject);
+            return a.promise()
+        }
+    });
+    var B = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+    w.Deferred.exceptionHook = function(t, n) {
+        e.console && e.console.warn && t && B.test(t.name) && e.console.warn("jQuery.Deferred exception: " + t.message, t.stack, n)
+    }, w.readyException = function(t) {
+        e.setTimeout(function() {
+            throw t
+        })
+    };
+    var F = w.Deferred();
+    w.fn.ready = function(e) {
+        return F.then(e)["catch"](function(e) {
+            w.readyException(e)
+        }), this
+    }, w.extend({
+        isReady: !1,
+        readyWait: 1,
+        ready: function(e) {
+            (!0 === e ? --w.readyWait : w.isReady) || (w.isReady = !0, !0 !== e && --w.readyWait > 0 || F.resolveWith(r, [w]))
+        }
+    }), w.ready.then = F.then;
+
+    function _() {
+        r.removeEventListener("DOMContentLoaded", _), e.removeEventListener("load", _), w.ready()
+    }
+    "complete" === r.readyState || "loading" !== r.readyState && !r.documentElement.doScroll ? e.setTimeout(w.ready) : (r.addEventListener("DOMContentLoaded", _), e.addEventListener("load", _));
+    var z = function(e, t, n, r, i, o, a) {
+            var s = 0,
+                u = e.length,
+                l = null == n;
+            if ("object" === x(n)) {
+                i = !0;
+                for (s in n) z(e, t, s, n[s], !0, o, a)
+            } else if (void 0 !== r && (i = !0, g(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function(e, t, n) {
+                    return l.call(w(e), n)
+                })), t))
+                for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
+            return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
+        },
+        X = /^-ms-/,
+        U = /-([a-z])/g;
+
+    function V(e, t) {
+        return t.toUpperCase()
+    }
+
+    function G(e) {
+        return e.replace(X, "ms-").replace(U, V)
+    }
+    var Y = function(e) {
+        return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
+    };
+
+    function Q() {
+        this.expando = w.expando + Q.uid++
+    }
+    Q.uid = 1, Q.prototype = {
+        cache: function(e) {
+            var t = e[this.expando];
+            return t || (t = {}, Y(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
+                value: t,
+                configurable: !0
+            }))), t
+        },
+        set: function(e, t, n) {
+            var r, i = this.cache(e);
+            if ("string" == typeof t) i[G(t)] = n;
+            else
+                for (r in t) i[G(r)] = t[r];
+            return i
+        },
+        get: function(e, t) {
+            return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][G(t)]
+        },
+        access: function(e, t, n) {
+            return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
+        },
+        remove: function(e, t) {
+            var n, r = e[this.expando];
+            if (void 0 !== r) {
+                if (void 0 !== t) {
+                    n = (t = Array.isArray(t) ? t.map(G) : (t = G(t)) in r ? [t] : t.match(M) || []).length;
+                    while (n--) delete r[t[n]]
+                }(void 0 === t || w.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
+            }
+        },
+        hasData: function(e) {
+            var t = e[this.expando];
+            return void 0 !== t && !w.isEmptyObject(t)
+        }
+    };
+    var J = new Q,
+        K = new Q,
+        Z = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+        ee = /[A-Z]/g;
+
+    function te(e) {
+        return "true" === e || "false" !== e && ("null" === e ? null : e === +e + "" ? +e : Z.test(e) ? JSON.parse(e) : e)
+    }
+
+    function ne(e, t, n) {
+        var r;
+        if (void 0 === n && 1 === e.nodeType)
+            if (r = "data-" + t.replace(ee, "-$&").toLowerCase(), "string" == typeof(n = e.getAttribute(r))) {
+                try {
+                    n = te(n)
+                } catch (e) {}
+                K.set(e, t, n)
+            } else n = void 0;
+        return n
+    }
+    w.extend({
+        hasData: function(e) {
+            return K.hasData(e) || J.hasData(e)
+        },
+        data: function(e, t, n) {
+            return K.access(e, t, n)
+        },
+        removeData: function(e, t) {
+            K.remove(e, t)
+        },
+        _data: function(e, t, n) {
+            return J.access(e, t, n)
+        },
+        _removeData: function(e, t) {
+            J.remove(e, t)
+        }
+    }), w.fn.extend({
+        data: function(e, t) {
+            var n, r, i, o = this[0],
+                a = o && o.attributes;
+            if (void 0 === e) {
+                if (this.length && (i = K.get(o), 1 === o.nodeType && !J.get(o, "hasDataAttrs"))) {
+                    n = a.length;
+                    while (n--) a[n] && 0 === (r = a[n].name).indexOf("data-") && (r = G(r.slice(5)), ne(o, r, i[r]));
+                    J.set(o, "hasDataAttrs", !0)
+                }
+                return i
+            }
+            return "object" == typeof e ? this.each(function() {
+                K.set(this, e)
+            }) : z(this, function(t) {
+                var n;
+                if (o && void 0 === t) {
+                    if (void 0 !== (n = K.get(o, e))) return n;
+                    if (void 0 !== (n = ne(o, e))) return n
+                } else this.each(function() {
+                    K.set(this, e, t)
+                })
+            }, null, t, arguments.length > 1, null, !0)
+        },
+        removeData: function(e) {
+            return this.each(function() {
+                K.remove(this, e)
+            })
+        }
+    }), w.extend({
+        queue: function(e, t, n) {
+            var r;
+            if (e) return t = (t || "fx") + "queue", r = J.get(e, t), n && (!r || Array.isArray(n) ? r = J.access(e, t, w.makeArray(n)) : r.push(n)), r || []
+        },
+        dequeue: function(e, t) {
+            t = t || "fx";
+            var n = w.queue(e, t),
+                r = n.length,
+                i = n.shift(),
+                o = w._queueHooks(e, t),
+                a = function() {
+                    w.dequeue(e, t)
+                };
+            "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, a, o)), !r && o && o.empty.fire()
+        },
+        _queueHooks: function(e, t) {
+            var n = t + "queueHooks";
+            return J.get(e, n) || J.access(e, n, {
+                empty: w.Callbacks("once memory").add(function() {
+                    J.remove(e, [t + "queue", n])
+                })
+            })
+        }
+    }), w.fn.extend({
+        queue: function(e, t) {
+            var n = 2;
+            return "string" != typeof e && (t = e, e = "fx", n--), arguments.length < n ? w.queue(this[0], e) : void 0 === t ? this : this.each(function() {
+                var n = w.queue(this, e, t);
+                w._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && w.dequeue(this, e)
+            })
+        },
+        dequeue: function(e) {
+            return this.each(function() {
+                w.dequeue(this, e)
+            })
+        },
+        clearQueue: function(e) {
+            return this.queue(e || "fx", [])
+        },
+        promise: function(e, t) {
+            var n, r = 1,
+                i = w.Deferred(),
+                o = this,
+                a = this.length,
+                s = function() {
+                    --r || i.resolveWith(o, [o])
+                };
+            "string" != typeof e && (t = e, e = void 0), e = e || "fx";
+            while (a--)(n = J.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
+            return s(), i.promise(t)
+        }
+    });
+    var re = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+        ie = new RegExp("^(?:([+-])=|)(" + re + ")([a-z%]*)$", "i"),
+        oe = ["Top", "Right", "Bottom", "Left"],
+        ae = function(e, t) {
+            return "none" === (e = t || e).style.display || "" === e.style.display && w.contains(e.ownerDocument, e) && "none" === w.css(e, "display")
+        },
+        se = function(e, t, n, r) {
+            var i, o, a = {};
+            for (o in t) a[o] = e.style[o], e.style[o] = t[o];
+            i = n.apply(e, r || []);
+            for (o in t) e.style[o] = a[o];
+            return i
+        };
+
+    function ue(e, t, n, r) {
+        var i, o, a = 20,
+            s = r ? function() {
+                return r.cur()
+            } : function() {
+                return w.css(e, t, "")
+            },
+            u = s(),
+            l = n && n[3] || (w.cssNumber[t] ? "" : "px"),
+            c = (w.cssNumber[t] || "px" !== l && +u) && ie.exec(w.css(e, t));
+        if (c && c[3] !== l) {
+            u /= 2, l = l || c[3], c = +u || 1;
+            while (a--) w.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o;
+            c *= 2, w.style(e, t, c + l), n = n || []
+        }
+        return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i
+    }
+    var le = {};
+
+    function ce(e) {
+        var t, n = e.ownerDocument,
+            r = e.nodeName,
+            i = le[r];
+        return i || (t = n.body.appendChild(n.createElement(r)), i = w.css(t, "display"), t.parentNode.removeChild(t), "none" === i && (i = "block"), le[r] = i, i)
+    }
+
+    function fe(e, t) {
+        for (var n, r, i = [], o = 0, a = e.length; o < a; o++)(r = e[o]).style && (n = r.style.display, t ? ("none" === n && (i[o] = J.get(r, "display") || null, i[o] || (r.style.display = "")), "" === r.style.display && ae(r) && (i[o] = ce(r))) : "none" !== n && (i[o] = "none", J.set(r, "display", n)));
+        for (o = 0; o < a; o++) null != i[o] && (e[o].style.display = i[o]);
+        return e
+    }
+    w.fn.extend({
+        show: function() {
+            return fe(this, !0)
+        },
+        hide: function() {
+            return fe(this)
+        },
+        toggle: function(e) {
+            return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
+                ae(this) ? w(this).show() : w(this).hide()
+            })
+        }
+    });
+    var pe = /^(?:checkbox|radio)$/i,
+        de = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i,
+        he = /^$|^module$|\/(?:java|ecma)script/i,
+        ge = {
+            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, "", ""]
+        };
+    ge.optgroup = ge.option, ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td;
+
+    function ye(e, t) {
+        var n;
+        return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && N(e, t) ? w.merge([e], n) : n
+    }
+
+    function ve(e, t) {
+        for (var n = 0, r = e.length; n < r; n++) J.set(e[n], "globalEval", !t || J.get(t[n], "globalEval"))
+    }
+    var me = /<|&#?\w+;/;
+
+    function xe(e, t, n, r, i) {
+        for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)
+            if ((o = e[d]) || 0 === o)
+                if ("object" === x(o)) w.merge(p, o.nodeType ? [o] : o);
+                else if (me.test(o)) {
+            a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + w.htmlPrefilter(o) + u[2], c = u[0];
+            while (c--) a = a.lastChild;
+            w.merge(p, a.childNodes), (a = f.firstChild).textContent = ""
+        } else p.push(t.createTextNode(o));
+        f.textContent = "", d = 0;
+        while (o = p[d++])
+            if (r && w.inArray(o, r) > -1) i && i.push(o);
+            else if (l = w.contains(o.ownerDocument, o), a = ye(f.appendChild(o), "script"), l && ve(a), n) {
+            c = 0;
+            while (o = a[c++]) he.test(o.type || "") && n.push(o)
+        }
+        return f
+    }! function() {
+        var e = r.createDocumentFragment().appendChild(r.createElement("div")),
+            t = r.createElement("input");
+        t.setAttribute("type", "radio"), t.setAttribute("checked", "checked"), t.setAttribute("name", "t"), e.appendChild(t), h.checkClone = e.cloneNode(!0).cloneNode(!0).lastChild.checked, e.innerHTML = "<textarea>x</textarea>", h.noCloneChecked = !!e.cloneNode(!0).lastChild.defaultValue
+    }();
+    var be = r.documentElement,
+        we = /^key/,
+        Te = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+        Ce = /^([^.]*)(?:\.(.+)|)/;
+
+    function Ee() {
+        return !0
+    }
+
+    function ke() {
+        return !1
+    }
+
+    function Se() {
+        try {
+            return r.activeElement
+        } catch (e) {}
+    }
+
+    function De(e, t, n, r, i, o) {
+        var a, s;
+        if ("object" == typeof t) {
+            "string" != typeof n && (r = r || n, n = void 0);
+            for (s in t) De(e, s, n, r, t[s], o);
+            return e
+        }
+        if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = ke;
+        else if (!i) return e;
+        return 1 === o && (a = i, (i = function(e) {
+            return w().off(e), a.apply(this, arguments)
+        }).guid = a.guid || (a.guid = w.guid++)), e.each(function() {
+            w.event.add(this, t, i, r, n)
+        })
+    }
+    w.event = {
+        global: {},
+        add: function(e, t, n, r, i) {
+            var o, a, s, u, l, c, f, p, d, h, g, y = J.get(e);
+            if (y) {
+                n.handler && (n = (o = n).handler, i = o.selector), i && w.find.matchesSelector(be, i), n.guid || (n.guid = w.guid++), (u = y.events) || (u = y.events = {}), (a = y.handle) || (a = y.handle = function(t) {
+                    return "undefined" != typeof w && w.event.triggered !== t.type ? w.event.dispatch.apply(e, arguments) : void 0
+                }), l = (t = (t || "").match(M) || [""]).length;
+                while (l--) d = g = (s = Ce.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = w.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = w.event.special[d] || {}, c = w.extend({
+                    type: d,
+                    origType: g,
+                    data: r,
+                    handler: n,
+                    guid: n.guid,
+                    selector: i,
+                    needsContext: i && w.expr.match.needsContext.test(i),
+                    namespace: h.join(".")
+                }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(e, r, h, a) || e.addEventListener && e.addEventListener(d, a)), f.add && (f.add.call(e, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), w.event.global[d] = !0)
+            }
+        },
+        remove: function(e, t, n, r, i) {
+            var o, a, s, u, l, c, f, p, d, h, g, y = J.hasData(e) && J.get(e);
+            if (y && (u = y.events)) {
+                l = (t = (t || "").match(M) || [""]).length;
+                while (l--)
+                    if (s = Ce.exec(t[l]) || [], d = g = s[1], h = (s[2] || "").split(".").sort(), d) {
+                        f = w.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length;
+                        while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
+                        a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, y.handle) || w.removeEvent(e, d, y.handle), delete u[d])
+                    } else
+                        for (d in u) w.event.remove(e, d + t[l], n, r, !0);
+                w.isEmptyObject(u) && J.remove(e, "handle events")
+            }
+        },
+        dispatch: function(e) {
+            var t = w.event.fix(e),
+                n, r, i, o, a, s, u = new Array(arguments.length),
+                l = (J.get(this, "events") || {})[t.type] || [],
+                c = w.event.special[t.type] || {};
+            for (u[0] = t, n = 1; n < arguments.length; n++) u[n] = arguments[n];
+            if (t.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, t)) {
+                s = w.event.handlers.call(this, t, l), n = 0;
+                while ((o = s[n++]) && !t.isPropagationStopped()) {
+                    t.currentTarget = o.elem, r = 0;
+                    while ((a = o.handlers[r++]) && !t.isImmediatePropagationStopped()) t.rnamespace && !t.rnamespace.test(a.namespace) || (t.handleObj = a, t.data = a.data, void 0 !== (i = ((w.event.special[a.origType] || {}).handle || a.handler).apply(o.elem, u)) && !1 === (t.result = i) && (t.preventDefault(), t.stopPropagation()))
+                }
+                return c.postDispatch && c.postDispatch.call(this, t), t.result
+            }
+        },
+        handlers: function(e, t) {
+            var n, r, i, o, a, s = [],
+                u = t.delegateCount,
+                l = e.target;
+            if (u && l.nodeType && !("click" === e.type && e.button >= 1))
+                for (; l !== this; l = l.parentNode || this)
+                    if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
+                        for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? w(i, this).index(l) > -1 : w.find(i, this, null, [l]).length), a[i] && o.push(r);
+                        o.length && s.push({
+                            elem: l,
+                            handlers: o
+                        })
+                    } return l = this, u < t.length && s.push({
+                elem: l,
+                handlers: t.slice(u)
+            }), s
+        },
+        addProp: function(e, t) {
+            Object.defineProperty(w.Event.prototype, e, {
+                enumerable: !0,
+                configurable: !0,
+                get: g(t) ? function() {
+                    if (this.originalEvent) return t(this.originalEvent)
+                } : function() {
+                    if (this.originalEvent) return this.originalEvent[e]
+                },
+                set: function(t) {
+                    Object.defineProperty(this, e, {
+                        enumerable: !0,
+                        configurable: !0,
+                        writable: !0,
+                        value: t
+                    })
+                }
+            })
+        },
+        fix: function(e) {
+            return e[w.expando] ? e : new w.Event(e)
+        },
+        special: {
+            load: {
+                noBubble: !0
+            },
+            focus: {
+                trigger: function() {
+                    if (this !== Se() && this.focus) return this.focus(), !1
+                },
+                delegateType: "focusin"
+            },
+            blur: {
+                trigger: function() {
+                    if (this === Se() && this.blur) return this.blur(), !1
+                },
+                delegateType: "focusout"
+            },
+            click: {
+                trigger: function() {
+                    if ("checkbox" === this.type && this.click && N(this, "input")) return this.click(), !1
+                },
+                _default: function(e) {
+                    return N(e.target, "a")
+                }
+            },
+            beforeunload: {
+                postDispatch: function(e) {
+                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
+                }
+            }
+        }
+    }, w.removeEvent = function(e, t, n) {
+        e.removeEventListener && e.removeEventListener(t, n)
+    }, w.Event = function(e, t) {
+        if (!(this instanceof w.Event)) return new w.Event(e, t);
+        e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ee : ke, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && w.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[w.expando] = !0
+    }, w.Event.prototype = {
+        constructor: w.Event,
+        isDefaultPrevented: ke,
+        isPropagationStopped: ke,
+        isImmediatePropagationStopped: ke,
+        isSimulated: !1,
+        preventDefault: function() {
+            var e = this.originalEvent;
+            this.isDefaultPrevented = Ee, e && !this.isSimulated && e.preventDefault()
+        },
+        stopPropagation: function() {
+            var e = this.originalEvent;
+            this.isPropagationStopped = Ee, e && !this.isSimulated && e.stopPropagation()
+        },
+        stopImmediatePropagation: function() {
+            var e = this.originalEvent;
+            this.isImmediatePropagationStopped = Ee, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation()
+        }
+    }, w.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(e) {
+            var t = e.button;
+            return null == e.which && we.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Te.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which
+        }
+    }, w.event.addProp), w.each({
+        mouseenter: "mouseover",
+        mouseleave: "mouseout",
+        pointerenter: "pointerover",
+        pointerleave: "pointerout"
+    }, function(e, t) {
+        w.event.special[e] = {
+            delegateType: t,
+            bindType: t,
+            handle: function(e) {
+                var n, r = this,
+                    i = e.relatedTarget,
+                    o = e.handleObj;
+                return i && (i === r || w.contains(r, i)) || (e.type = o.origType, n = o.handler.apply(this, arguments), e.type = t), n
+            }
+        }
+    }), w.fn.extend({
+        on: function(e, t, n, r) {
+            return De(this, e, t, n, r)
+        },
+        one: function(e, t, n, r) {
+            return De(this, e, t, n, r, 1)
+        },
+        off: function(e, t, n) {
+            var r, i;
+            if (e && e.preventDefault && e.handleObj) return r = e.handleObj, w(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
+            if ("object" == typeof e) {
+                for (i in e) this.off(i, t, e[i]);
+                return this
+            }
+            return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = ke), this.each(function() {
+                w.event.remove(this, e, n, t)
+            })
+        }
+    });
+    var Ne = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+        Ae = /<script|<style|<link/i,
+        je = /checked\s*(?:[^=]|=\s*.checked.)/i,
+        qe = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+    function Le(e, t) {
+        return N(e, "table") && N(11 !== t.nodeType ? t : t.firstChild, "tr") ? w(e).children("tbody")[0] || e : e
+    }
+
+    function He(e) {
+        return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e
+    }
+
+    function Oe(e) {
+        return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e
+    }
+
+    function Pe(e, t) {
+        var n, r, i, o, a, s, u, l;
+        if (1 === t.nodeType) {
+            if (J.hasData(e) && (o = J.access(e), a = J.set(t, o), l = o.events)) {
+                delete a.handle, a.events = {};
+                for (i in l)
+                    for (n = 0, r = l[i].length; n < r; n++) w.event.add(t, i, l[i][n])
+            }
+            K.hasData(e) && (s = K.access(e), u = w.extend({}, s), K.set(t, u))
+        }
+    }
+
+    function Me(e, t) {
+        var n = t.nodeName.toLowerCase();
+        "input" === n && pe.test(e.type) ? t.checked = e.checked : "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue)
+    }
+
+    function Re(e, t, n, r) {
+        t = a.apply([], t);
+        var i, o, s, u, l, c, f = 0,
+            p = e.length,
+            d = p - 1,
+            y = t[0],
+            v = g(y);
+        if (v || p > 1 && "string" == typeof y && !h.checkClone && je.test(y)) return e.each(function(i) {
+            var o = e.eq(i);
+            v && (t[0] = y.call(this, i, o.html())), Re(o, t, n, r)
+        });
+        if (p && (i = xe(t, e[0].ownerDocument, !1, e, r), o = i.firstChild, 1 === i.childNodes.length && (i = o), o || r)) {
+            for (u = (s = w.map(ye(i, "script"), He)).length; f < p; f++) l = i, f !== d && (l = w.clone(l, !0, !0), u && w.merge(s, ye(l, "script"))), n.call(e[f], l, f);
+            if (u)
+                for (c = s[s.length - 1].ownerDocument, w.map(s, Oe), f = 0; f < u; f++) l = s[f], he.test(l.type || "") && !J.access(l, "globalEval") && w.contains(c, l) && (l.src && "module" !== (l.type || "").toLowerCase() ? w._evalUrl && w._evalUrl(l.src) : m(l.textContent.replace(qe, ""), c, l))
+        }
+        return e
+    }
+
+    function Ie(e, t, n) {
+        for (var r, i = t ? w.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || w.cleanData(ye(r)), r.parentNode && (n && w.contains(r.ownerDocument, r) && ve(ye(r, "script")), r.parentNode.removeChild(r));
+        return e
+    }
+    w.extend({
+        htmlPrefilter: function(e) {
+            return e.replace(Ne, "<$1></$2>")
+        },
+        clone: function(e, t, n) {
+            var r, i, o, a, s = e.cloneNode(!0),
+                u = w.contains(e.ownerDocument, e);
+            if (!(h.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || w.isXMLDoc(e)))
+                for (a = ye(s), r = 0, i = (o = ye(e)).length; r < i; r++) Me(o[r], a[r]);
+            if (t)
+                if (n)
+                    for (o = o || ye(e), a = a || ye(s), r = 0, i = o.length; r < i; r++) Pe(o[r], a[r]);
+                else Pe(e, s);
+            return (a = ye(s, "script")).length > 0 && ve(a, !u && ye(e, "script")), s
+        },
+        cleanData: function(e) {
+            for (var t, n, r, i = w.event.special, o = 0; void 0 !== (n = e[o]); o++)
+                if (Y(n)) {
+                    if (t = n[J.expando]) {
+                        if (t.events)
+                            for (r in t.events) i[r] ? w.event.remove(n, r) : w.removeEvent(n, r, t.handle);
+                        n[J.expando] = void 0
+                    }
+                    n[K.expando] && (n[K.expando] = void 0)
+                }
+        }
+    }), w.fn.extend({
+        detach: function(e) {
+            return Ie(this, e, !0)
+        },
+        remove: function(e) {
+            return Ie(this, e)
+        },
+        text: function(e) {
+            return z(this, function(e) {
+                return void 0 === e ? w.text(this) : this.empty().each(function() {
+                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
+                })
+            }, null, e, arguments.length)
+        },
+        append: function() {
+            return Re(this, arguments, function(e) {
+                1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || Le(this, e).appendChild(e)
+            })
+        },
+        prepend: function() {
+            return Re(this, arguments, function(e) {
+                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+                    var t = Le(this, e);
+                    t.insertBefore(e, t.firstChild)
+                }
+            })
+        },
+        before: function() {
+            return Re(this, arguments, function(e) {
+                this.parentNode && this.parentNode.insertBefore(e, this)
+            })
+        },
+        after: function() {
+            return Re(this, arguments, function(e) {
+                this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
+            })
+        },
+        empty: function() {
+            for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (w.cleanData(ye(e, !1)), e.textContent = "");
+            return this
+        },
+        clone: function(e, t) {
+            return e = null != e && e, t = null == t ? e : t, this.map(function() {
+                return w.clone(this, e, t)
+            })
+        },
+        html: function(e) {
+            return z(this, function(e) {
+                var t = this[0] || {},
+                    n = 0,
+                    r = this.length;
+                if (void 0 === e && 1 === t.nodeType) return t.innerHTML;
+                if ("string" == typeof e && !Ae.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) {
+                    e = w.htmlPrefilter(e);
+                    try {
+                        for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (w.cleanData(ye(t, !1)), t.innerHTML = e);
+                        t = 0
+                    } catch (e) {}
+                }
+                t && this.empty().append(e)
+            }, null, e, arguments.length)
+        },
+        replaceWith: function() {
+            var e = [];
+            return Re(this, arguments, function(t) {
+                var n = this.parentNode;
+                w.inArray(this, e) < 0 && (w.cleanData(ye(this)), n && n.replaceChild(t, this))
+            }, e)
+        }
+    }), w.each({
+        appendTo: "append",
+        prependTo: "prepend",
+        insertBefore: "before",
+        insertAfter: "after",
+        replaceAll: "replaceWith"
+    }, function(e, t) {
+        w.fn[e] = function(e) {
+            for (var n, r = [], i = w(e), o = i.length - 1, a = 0; a <= o; a++) n = a === o ? this : this.clone(!0), w(i[a])[t](n), s.apply(r, n.get());
+            return this.pushStack(r)
+        }
+    });
+    var We = new RegExp("^(" + re + ")(?!px)[a-z%]+$", "i"),
+        $e = function(t) {
+            var n = t.ownerDocument.defaultView;
+            return n && n.opener || (n = e), n.getComputedStyle(t)
+        },
+        Be = new RegExp(oe.join("|"), "i");
+    ! function() {
+        function t() {
+            if (c) {
+                l.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", c.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", be.appendChild(l).appendChild(c);
+                var t = e.getComputedStyle(c);
+                i = "1%" !== t.top, u = 12 === n(t.marginLeft), c.style.right = "60%", s = 36 === n(t.right), o = 36 === n(t.width), c.style.position = "absolute", a = 36 === c.offsetWidth || "absolute", be.removeChild(l), c = null
+            }
+        }
+
+        function n(e) {
+            return Math.round(parseFloat(e))
+        }
+        var i, o, a, s, u, l = r.createElement("div"),
+            c = r.createElement("div");
+        c.style && (c.style.backgroundClip = "content-box", c.cloneNode(!0).style.backgroundClip = "", h.clearCloneStyle = "content-box" === c.style.backgroundClip, w.extend(h, {
+            boxSizingReliable: function() {
+                return t(), o
+            },
+            pixelBoxStyles: function() {
+                return t(), s
+            },
+            pixelPosition: function() {
+                return t(), i
+            },
+            reliableMarginLeft: function() {
+                return t(), u
+            },
+            scrollboxSize: function() {
+                return t(), a
+            }
+        }))
+    }();
+
+    function Fe(e, t, n) {
+        var r, i, o, a, s = e.style;
+        return (n = n || $e(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || w.contains(e.ownerDocument, e) || (a = w.style(e, t)), !h.pixelBoxStyles() && We.test(a) && Be.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a
+    }
+
+    function _e(e, t) {
+        return {
+            get: function() {
+                if (!e()) return (this.get = t).apply(this, arguments);
+                delete this.get
+            }
+        }
+    }
+    var ze = /^(none|table(?!-c[ea]).+)/,
+        Xe = /^--/,
+        Ue = {
+            position: "absolute",
+            visibility: "hidden",
+            display: "block"
+        },
+        Ve = {
+            letterSpacing: "0",
+            fontWeight: "400"
+        },
+        Ge = ["Webkit", "Moz", "ms"],
+        Ye = r.createElement("div").style;
+
+    function Qe(e) {
+        if (e in Ye) return e;
+        var t = e[0].toUpperCase() + e.slice(1),
+            n = Ge.length;
+        while (n--)
+            if ((e = Ge[n] + t) in Ye) return e
+    }
+
+    function Je(e) {
+        var t = w.cssProps[e];
+        return t || (t = w.cssProps[e] = Qe(e) || e), t
+    }
+
+    function Ke(e, t, n) {
+        var r = ie.exec(t);
+        return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
+    }
+
+    function Ze(e, t, n, r, i, o) {
+        var a = "width" === t ? 1 : 0,
+            s = 0,
+            u = 0;
+        if (n === (r ? "border" : "content")) return 0;
+        for (; a < 4; a += 2) "margin" === n && (u += w.css(e, n + oe[a], !0, i)), r ? ("content" === n && (u -= w.css(e, "padding" + oe[a], !0, i)), "margin" !== n && (u -= w.css(e, "border" + oe[a] + "Width", !0, i))) : (u += w.css(e, "padding" + oe[a], !0, i), "padding" !== n ? u += w.css(e, "border" + oe[a] + "Width", !0, i) : s += w.css(e, "border" + oe[a] + "Width", !0, i));
+        return !r && o >= 0 && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5))), u
+    }
+
+    function et(e, t, n) {
+        var r = $e(e),
+            i = Fe(e, t, r),
+            o = "border-box" === w.css(e, "boxSizing", !1, r),
+            a = o;
+        if (We.test(i)) {
+            if (!n) return i;
+            i = "auto"
+        }
+        return a = a && (h.boxSizingReliable() || i === e.style[t]), ("auto" === i || !parseFloat(i) && "inline" === w.css(e, "display", !1, r)) && (i = e["offset" + t[0].toUpperCase() + t.slice(1)], a = !0), (i = parseFloat(i) || 0) + Ze(e, t, n || (o ? "border" : "content"), a, r, i) + "px"
+    }
+    w.extend({
+        cssHooks: {
+            opacity: {
+                get: function(e, t) {
+                    if (t) {
+                        var n = Fe(e, "opacity");
+                        return "" === n ? "1" : n
+                    }
+                }
+            }
+        },
+        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: {},
+        style: function(e, t, n, r) {
+            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
+                var i, o, a, s = G(t),
+                    u = Xe.test(t),
+                    l = e.style;
+                if (u || (t = Je(s)), a = w.cssHooks[t] || w.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];
+                "string" == (o = typeof n) && (i = ie.exec(n)) && i[1] && (n = ue(e, t, i), o = "number"), null != n && n === n && ("number" === o && (n += i && i[3] || (w.cssNumber[s] ? "" : "px")), h.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n))
+            }
+        },
+        css: function(e, t, n, r) {
+            var i, o, a, s = G(t);
+            return Xe.test(t) || (t = Je(s)), (a = w.cssHooks[t] || w.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Fe(e, t, r)), "normal" === i && t in Ve && (i = Ve[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i
+        }
+    }), w.each(["height", "width"], function(e, t) {
+        w.cssHooks[t] = {
+            get: function(e, n, r) {
+                if (n) return !ze.test(w.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? et(e, t, r) : se(e, Ue, function() {
+                    return et(e, t, r)
+                })
+            },
+            set: function(e, n, r) {
+                var i, o = $e(e),
+                    a = "border-box" === w.css(e, "boxSizing", !1, o),
+                    s = r && Ze(e, t, r, a, o);
+                return a && h.scrollboxSize() === o.position && (s -= Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - parseFloat(o[t]) - Ze(e, t, "border", !1, o) - .5)), s && (i = ie.exec(n)) && "px" !== (i[3] || "px") && (e.style[t] = n, n = w.css(e, t)), Ke(e, n, s)
+            }
+        }
+    }), w.cssHooks.marginLeft = _e(h.reliableMarginLeft, function(e, t) {
+        if (t) return (parseFloat(Fe(e, "marginLeft")) || e.getBoundingClientRect().left - se(e, {
+            marginLeft: 0
+        }, function() {
+            return e.getBoundingClientRect().left
+        })) + "px"
+    }), w.each({
+        margin: "",
+        padding: "",
+        border: "Width"
+    }, function(e, t) {
+        w.cssHooks[e + t] = {
+            expand: function(n) {
+                for (var r = 0, i = {}, o = "string" == typeof n ? n.split(" ") : [n]; r < 4; r++) i[e + oe[r] + t] = o[r] || o[r - 2] || o[0];
+                return i
+            }
+        }, "margin" !== e && (w.cssHooks[e + t].set = Ke)
+    }), w.fn.extend({
+        css: function(e, t) {
+            return z(this, function(e, t, n) {
+                var r, i, o = {},
+                    a = 0;
+                if (Array.isArray(t)) {
+                    for (r = $e(e), i = t.length; a < i; a++) o[t[a]] = w.css(e, t[a], !1, r);
+                    return o
+                }
+                return void 0 !== n ? w.style(e, t, n) : w.css(e, t)
+            }, e, t, arguments.length > 1)
+        }
+    });
+
+    function tt(e, t, n, r, i) {
+        return new tt.prototype.init(e, t, n, r, i)
+    }
+    w.Tween = tt, tt.prototype = {
+        constructor: tt,
+        init: function(e, t, n, r, i, o) {
+            this.elem = e, this.prop = n, this.easing = i || w.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (w.cssNumber[n] ? "" : "px")
+        },
+        cur: function() {
+            var e = tt.propHooks[this.prop];
+            return e && e.get ? e.get(this) : tt.propHooks._default.get(this)
+        },
+        run: function(e) {
+            var t, n = tt.propHooks[this.prop];
+            return this.options.duration ? this.pos = t = w.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : tt.propHooks._default.set(this), this
+        }
+    }, tt.prototype.init.prototype = tt.prototype, tt.propHooks = {
+        _default: {
+            get: function(e) {
+                var t;
+                return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = w.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0
+            },
+            set: function(e) {
+                w.fx.step[e.prop] ? w.fx.step[e.prop](e) : 1 !== e.elem.nodeType || null == e.elem.style[w.cssProps[e.prop]] && !w.cssHooks[e.prop] ? e.elem[e.prop] = e.now : w.style(e.elem, e.prop, e.now + e.unit)
+            }
+        }
+    }, tt.propHooks.scrollTop = tt.propHooks.scrollLeft = {
+        set: function(e) {
+            e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
+        }
+    }, w.easing = {
+        linear: function(e) {
+            return e
+        },
+        swing: function(e) {
+            return .5 - Math.cos(e * Math.PI) / 2
+        },
+        _default: "swing"
+    }, w.fx = tt.prototype.init, w.fx.step = {};
+    var nt, rt, it = /^(?:toggle|show|hide)$/,
+        ot = /queueHooks$/;
+
+    function at() {
+        rt && (!1 === r.hidden && e.requestAnimationFrame ? e.requestAnimationFrame(at) : e.setTimeout(at, w.fx.interval), w.fx.tick())
+    }
+
+    function st() {
+        return e.setTimeout(function() {
+            nt = void 0
+        }), nt = Date.now()
+    }
+
+    function ut(e, t) {
+        var n, r = 0,
+            i = {
+                height: e
+            };
+        for (t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = oe[r])] = i["padding" + n] = e;
+        return t && (i.opacity = i.width = e), i
+    }
+
+    function lt(e, t, n) {
+        for (var r, i = (pt.tweeners[t] || []).concat(pt.tweeners["*"]), o = 0, a = i.length; o < a; o++)
+            if (r = i[o].call(n, t, e)) return r
+    }
+
+    function ct(e, t, n) {
+        var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t,
+            p = this,
+            d = {},
+            h = e.style,
+            g = e.nodeType && ae(e),
+            y = J.get(e, "fxshow");
+        n.queue || (null == (a = w._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function() {
+            a.unqueued || s()
+        }), a.unqueued++, p.always(function() {
+            p.always(function() {
+                a.unqueued--, w.queue(e, "fx").length || a.empty.fire()
+            })
+        }));
+        for (r in t)
+            if (i = t[r], it.test(i)) {
+                if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) {
+                    if ("show" !== i || !y || void 0 === y[r]) continue;
+                    g = !0
+                }
+                d[r] = y && y[r] || w.style(e, r)
+            } if ((u = !w.isEmptyObject(t)) || !w.isEmptyObject(d)) {
+            f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = y && y.display) && (l = J.get(e, "display")), "none" === (c = w.css(e, "display")) && (l ? c = l : (fe([e], !0), l = e.style.display || l, c = w.css(e, "display"), fe([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === w.css(e, "float") && (u || (p.done(function() {
+                h.display = l
+            }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function() {
+                h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2]
+            })), u = !1;
+            for (r in d) u || (y ? "hidden" in y && (g = y.hidden) : y = J.access(e, "fxshow", {
+                display: l
+            }), o && (y.hidden = !g), g && fe([e], !0), p.done(function() {
+                g || fe([e]), J.remove(e, "fxshow");
+                for (r in d) w.style(e, r, d[r])
+            })), u = lt(g ? y[r] : 0, r, p), r in y || (y[r] = u.start, g && (u.end = u.start, u.start = 0))
+        }
+    }
+
+    function ft(e, t) {
+        var n, r, i, o, a;
+        for (n in e)
+            if (r = G(n), i = t[r], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = w.cssHooks[r]) && "expand" in a) {
+                o = a.expand(o), delete e[r];
+                for (n in o) n in e || (e[n] = o[n], t[n] = i)
+            } else t[r] = i
+    }
+
+    function pt(e, t, n) {
+        var r, i, o = 0,
+            a = pt.prefilters.length,
+            s = w.Deferred().always(function() {
+                delete u.elem
+            }),
+            u = function() {
+                if (i) return !1;
+                for (var t = nt || st(), n = Math.max(0, l.startTime + l.duration - t), r = 1 - (n / l.duration || 0), o = 0, a = l.tweens.length; o < a; o++) l.tweens[o].run(r);
+                return s.notifyWith(e, [l, r, n]), r < 1 && a ? n : (a || s.notifyWith(e, [l, 1, 0]), s.resolveWith(e, [l]), !1)
+            },
+            l = s.promise({
+                elem: e,
+                props: w.extend({}, t),
+                opts: w.extend(!0, {
+                    specialEasing: {},
+                    easing: w.easing._default
+                }, n),
+                originalProperties: t,
+                originalOptions: n,
+                startTime: nt || st(),
+                duration: n.duration,
+                tweens: [],
+                createTween: function(t, n) {
+                    var r = w.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing);
+                    return l.tweens.push(r), r
+                },
+                stop: function(t) {
+                    var n = 0,
+                        r = t ? l.tweens.length : 0;
+                    if (i) return this;
+                    for (i = !0; n < r; n++) l.tweens[n].run(1);
+                    return t ? (s.notifyWith(e, [l, 1, 0]), s.resolveWith(e, [l, t])) : s.rejectWith(e, [l, t]), this
+                }
+            }),
+            c = l.props;
+        for (ft(c, l.opts.specialEasing); o < a; o++)
+            if (r = pt.prefilters[o].call(l, e, c, l.opts)) return g(r.stop) && (w._queueHooks(l.elem, l.opts.queue).stop = r.stop.bind(r)), r;
+        return w.map(c, lt, l), g(l.opts.start) && l.opts.start.call(e, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), w.fx.timer(w.extend(u, {
+            elem: e,
+            anim: l,
+            queue: l.opts.queue
+        })), l
+    }
+    w.Animation = w.extend(pt, {
+            tweeners: {
+                "*": [function(e, t) {
+                    var n = this.createTween(e, t);
+                    return ue(n.elem, e, ie.exec(t), n), n
+                }]
+            },
+            tweener: function(e, t) {
+                g(e) ? (t = e, e = ["*"]) : e = e.match(M);
+                for (var n, r = 0, i = e.length; r < i; r++) n = e[r], pt.tweeners[n] = pt.tweeners[n] || [], pt.tweeners[n].unshift(t)
+            },
+            prefilters: [ct],
+            prefilter: function(e, t) {
+                t ? pt.prefilters.unshift(e) : pt.prefilters.push(e)
+            }
+        }), w.speed = function(e, t, n) {
+            var r = e && "object" == typeof e ? w.extend({}, e) : {
+                complete: n || !n && t || g(e) && e,
+                duration: e,
+                easing: n && t || t && !g(t) && t
+            };
+            return w.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in w.fx.speeds ? r.duration = w.fx.speeds[r.duration] : r.duration = w.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function() {
+                g(r.old) && r.old.call(this), r.queue && w.dequeue(this, r.queue)
+            }, r
+        }, w.fn.extend({
+            fadeTo: function(e, t, n, r) {
+                return this.filter(ae).css("opacity", 0).show().end().animate({
+                    opacity: t
+                }, e, n, r)
+            },
+            animate: function(e, t, n, r) {
+                var i = w.isEmptyObject(e),
+                    o = w.speed(t, n, r),
+                    a = function() {
+                        var t = pt(this, w.extend({}, e), o);
+                        (i || J.get(this, "finish")) && t.stop(!0)
+                    };
+                return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
+            },
+            stop: function(e, t, n) {
+                var r = function(e) {
+                    var t = e.stop;
+                    delete e.stop, t(n)
+                };
+                return "string" != typeof e && (n = t, t = e, e = void 0), t && !1 !== e && this.queue(e || "fx", []), this.each(function() {
+                    var t = !0,
+                        i = null != e && e + "queueHooks",
+                        o = w.timers,
+                        a = J.get(this);
+                    if (i) a[i] && a[i].stop && r(a[i]);
+                    else
+                        for (i in a) a[i] && a[i].stop && ot.test(i) && r(a[i]);
+                    for (i = o.length; i--;) o[i].elem !== this || null != e && o[i].queue !== e || (o[i].anim.stop(n), t = !1, o.splice(i, 1));
+                    !t && n || w.dequeue(this, e)
+                })
+            },
+            finish: function(e) {
+                return !1 !== e && (e = e || "fx"), this.each(function() {
+                    var t, n = J.get(this),
+                        r = n[e + "queue"],
+                        i = n[e + "queueHooks"],
+                        o = w.timers,
+                        a = r ? r.length : 0;
+                    for (n.finish = !0, w.queue(this, e, []), i && i.stop && i.stop.call(this, !0), t = o.length; t--;) o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0), o.splice(t, 1));
+                    for (t = 0; t < a; t++) r[t] && r[t].finish && r[t].finish.call(this);
+                    delete n.finish
+                })
+            }
+        }), w.each(["toggle", "show", "hide"], function(e, t) {
+            var n = w.fn[t];
+            w.fn[t] = function(e, r, i) {
+                return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(ut(t, !0), e, r, i)
+            }
+        }), w.each({
+            slideDown: ut("show"),
+            slideUp: ut("hide"),
+            slideToggle: ut("toggle"),
+            fadeIn: {
+                opacity: "show"
+            },
+            fadeOut: {
+                opacity: "hide"
+            },
+            fadeToggle: {
+                opacity: "toggle"
+            }
+        }, function(e, t) {
+            w.fn[e] = function(e, n, r) {
+                return this.animate(t, e, n, r)
+            }
+        }), w.timers = [], w.fx.tick = function() {
+            var e, t = 0,
+                n = w.timers;
+            for (nt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1);
+            n.length || w.fx.stop(), nt = void 0
+        }, w.fx.timer = function(e) {
+            w.timers.push(e), w.fx.start()
+        }, w.fx.interval = 13, w.fx.start = function() {
+            rt || (rt = !0, at())
+        }, w.fx.stop = function() {
+            rt = null
+        }, w.fx.speeds = {
+            slow: 600,
+            fast: 200,
+            _default: 400
+        }, w.fn.delay = function(t, n) {
+            return t = w.fx ? w.fx.speeds[t] || t : t, n = n || "fx", this.queue(n, function(n, r) {
+                var i = e.setTimeout(n, t);
+                r.stop = function() {
+                    e.clearTimeout(i)
+                }
+            })
+        },
+        function() {
+            var e = r.createElement("input"),
+                t = r.createElement("select").appendChild(r.createElement("option"));
+            e.type = "checkbox", h.checkOn = "" !== e.value, h.optSelected = t.selected, (e = r.createElement("input")).value = "t", e.type = "radio", h.radioValue = "t" === e.value
+        }();
+    var dt, ht = w.expr.attrHandle;
+    w.fn.extend({
+        attr: function(e, t) {
+            return z(this, w.attr, e, t, arguments.length > 1)
+        },
+        removeAttr: function(e) {
+            return this.each(function() {
+                w.removeAttr(this, e)
+            })
+        }
+    }), w.extend({
+        attr: function(e, t, n) {
+            var r, i, o = e.nodeType;
+            if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? w.prop(e, t, n) : (1 === o && w.isXMLDoc(e) || (i = w.attrHooks[t.toLowerCase()] || (w.expr.match.bool.test(t) ? dt : void 0)), void 0 !== n ? null === n ? void w.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = w.find.attr(e, t)) ? void 0 : r)
+        },
+        attrHooks: {
+            type: {
+                set: function(e, t) {
+                    if (!h.radioValue && "radio" === t && N(e, "input")) {
+                        var n = e.value;
+                        return e.setAttribute("type", t), n && (e.value = n), t
+                    }
+                }
+            }
+        },
+        removeAttr: function(e, t) {
+            var n, r = 0,
+                i = t && t.match(M);
+            if (i && 1 === e.nodeType)
+                while (n = i[r++]) e.removeAttribute(n)
+        }
+    }), dt = {
+        set: function(e, t, n) {
+            return !1 === t ? w.removeAttr(e, n) : e.setAttribute(n, n), n
+        }
+    }, w.each(w.expr.match.bool.source.match(/\w+/g), function(e, t) {
+        var n = ht[t] || w.find.attr;
+        ht[t] = function(e, t, r) {
+            var i, o, a = t.toLowerCase();
+            return r || (o = ht[a], ht[a] = i, i = null != n(e, t, r) ? a : null, ht[a] = o), i
+        }
+    });
+    var gt = /^(?:input|select|textarea|button)$/i,
+        yt = /^(?:a|area)$/i;
+    w.fn.extend({
+        prop: function(e, t) {
+            return z(this, w.prop, e, t, arguments.length > 1)
+        },
+        removeProp: function(e) {
+            return this.each(function() {
+                delete this[w.propFix[e] || e]
+            })
+        }
+    }), w.extend({
+        prop: function(e, t, n) {
+            var r, i, o = e.nodeType;
+            if (3 !== o && 8 !== o && 2 !== o) return 1 === o && w.isXMLDoc(e) || (t = w.propFix[t] || t, i = w.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t]
+        },
+        propHooks: {
+            tabIndex: {
+                get: function(e) {
+                    var t = w.find.attr(e, "tabindex");
+                    return t ? parseInt(t, 10) : gt.test(e.nodeName) || yt.test(e.nodeName) && e.href ? 0 : -1
+                }
+            }
+        },
+        propFix: {
+            "for": "htmlFor",
+            "class": "className"
+        }
+    }), h.optSelected || (w.propHooks.selected = {
+        get: function(e) {
+            var t = e.parentNode;
+            return t && t.parentNode && t.parentNode.selectedIndex, null
+        },
+        set: function(e) {
+            var t = e.parentNode;
+            t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex)
+        }
+    }), w.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
+        w.propFix[this.toLowerCase()] = this
+    });
+
+    function vt(e) {
+        return (e.match(M) || []).join(" ")
+    }
+
+    function mt(e) {
+        return e.getAttribute && e.getAttribute("class") || ""
+    }
+
+    function xt(e) {
+        return Array.isArray(e) ? e : "string" == typeof e ? e.match(M) || [] : []
+    }
+    w.fn.extend({
+        addClass: function(e) {
+            var t, n, r, i, o, a, s, u = 0;
+            if (g(e)) return this.each(function(t) {
+                w(this).addClass(e.call(this, t, mt(this)))
+            });
+            if ((t = xt(e)).length)
+                while (n = this[u++])
+                    if (i = mt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
+                        a = 0;
+                        while (o = t[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " ");
+                        i !== (s = vt(r)) && n.setAttribute("class", s)
+                    } return this
+        },
+        removeClass: function(e) {
+            var t, n, r, i, o, a, s, u = 0;
+            if (g(e)) return this.each(function(t) {
+                w(this).removeClass(e.call(this, t, mt(this)))
+            });
+            if (!arguments.length) return this.attr("class", "");
+            if ((t = xt(e)).length)
+                while (n = this[u++])
+                    if (i = mt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
+                        a = 0;
+                        while (o = t[a++])
+                            while (r.indexOf(" " + o + " ") > -1) r = r.replace(" " + o + " ", " ");
+                        i !== (s = vt(r)) && n.setAttribute("class", s)
+                    } return this
+        },
+        toggleClass: function(e, t) {
+            var n = typeof e,
+                r = "string" === n || Array.isArray(e);
+            return "boolean" == typeof t && r ? t ? this.addClass(e) : this.removeClass(e) : g(e) ? this.each(function(n) {
+                w(this).toggleClass(e.call(this, n, mt(this), t), t)
+            }) : this.each(function() {
+                var t, i, o, a;
+                if (r) {
+                    i = 0, o = w(this), a = xt(e);
+                    while (t = a[i++]) o.hasClass(t) ? o.removeClass(t) : o.addClass(t)
+                } else void 0 !== e && "boolean" !== n || ((t = mt(this)) && J.set(this, "__className__", t), this.setAttribute && this.setAttribute("class", t || !1 === e ? "" : J.get(this, "__className__") || ""))
+            })
+        },
+        hasClass: function(e) {
+            var t, n, r = 0;
+            t = " " + e + " ";
+            while (n = this[r++])
+                if (1 === n.nodeType && (" " + vt(mt(n)) + " ").indexOf(t) > -1) return !0;
+            return !1
+        }
+    });
+    var bt = /\r/g;
+    w.fn.extend({
+        val: function(e) {
+            var t, n, r, i = this[0]; {
+                if (arguments.length) return r = g(e), this.each(function(n) {
+                    var i;
+                    1 === this.nodeType && (null == (i = r ? e.call(this, n, w(this).val()) : e) ? i = "" : "number" == typeof i ? i += "" : Array.isArray(i) && (i = w.map(i, function(e) {
+                        return null == e ? "" : e + ""
+                    })), (t = w.valHooks[this.type] || w.valHooks[this.nodeName.toLowerCase()]) && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i))
+                });
+                if (i) return (t = w.valHooks[i.type] || w.valHooks[i.nodeName.toLowerCase()]) && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : "string" == typeof(n = i.value) ? n.replace(bt, "") : null == n ? "" : n
+            }
+        }
+    }), w.extend({
+        valHooks: {
+            option: {
+                get: function(e) {
+                    var t = w.find.attr(e, "value");
+                    return null != t ? t : vt(w.text(e))
+                }
+            },
+            select: {
+                get: function(e) {
+                    var t, n, r, i = e.options,
+                        o = e.selectedIndex,
+                        a = "select-one" === e.type,
+                        s = a ? null : [],
+                        u = a ? o + 1 : i.length;
+                    for (r = o < 0 ? u : a ? o : 0; r < u; r++)
+                        if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !N(n.parentNode, "optgroup"))) {
+                            if (t = w(n).val(), a) return t;
+                            s.push(t)
+                        } return s
+                },
+                set: function(e, t) {
+                    var n, r, i = e.options,
+                        o = w.makeArray(t),
+                        a = i.length;
+                    while (a--)((r = i[a]).selected = w.inArray(w.valHooks.option.get(r), o) > -1) && (n = !0);
+                    return n || (e.selectedIndex = -1), o
+                }
+            }
+        }
+    }), w.each(["radio", "checkbox"], function() {
+        w.valHooks[this] = {
+            set: function(e, t) {
+                if (Array.isArray(t)) return e.checked = w.inArray(w(e).val(), t) > -1
+            }
+        }, h.checkOn || (w.valHooks[this].get = function(e) {
+            return null === e.getAttribute("value") ? "on" : e.value
+        })
+    }), h.focusin = "onfocusin" in e;
+    var wt = /^(?:focusinfocus|focusoutblur)$/,
+        Tt = function(e) {
+            e.stopPropagation()
+        };
+    w.extend(w.event, {
+        trigger: function(t, n, i, o) {
+            var a, s, u, l, c, p, d, h, v = [i || r],
+                m = f.call(t, "type") ? t.type : t,
+                x = f.call(t, "namespace") ? t.namespace.split(".") : [];
+            if (s = h = u = i = i || r, 3 !== i.nodeType && 8 !== i.nodeType && !wt.test(m + w.event.triggered) && (m.indexOf(".") > -1 && (m = (x = m.split(".")).shift(), x.sort()), c = m.indexOf(":") < 0 && "on" + m, t = t[w.expando] ? t : new w.Event(m, "object" == typeof t && t), t.isTrigger = o ? 2 : 3, t.namespace = x.join("."), t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + x.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = i), n = null == n ? [t] : w.makeArray(n, [t]), d = w.event.special[m] || {}, o || !d.trigger || !1 !== d.trigger.apply(i, n))) {
+                if (!o && !d.noBubble && !y(i)) {
+                    for (l = d.delegateType || m, wt.test(l + m) || (s = s.parentNode); s; s = s.parentNode) v.push(s), u = s;
+                    u === (i.ownerDocument || r) && v.push(u.defaultView || u.parentWindow || e)
+                }
+                a = 0;
+                while ((s = v[a++]) && !t.isPropagationStopped()) h = s, t.type = a > 1 ? l : d.bindType || m, (p = (J.get(s, "events") || {})[t.type] && J.get(s, "handle")) && p.apply(s, n), (p = c && s[c]) && p.apply && Y(s) && (t.result = p.apply(s, n), !1 === t.result && t.preventDefault());
+                return t.type = m, o || t.isDefaultPrevented() || d._default && !1 !== d._default.apply(v.pop(), n) || !Y(i) || c && g(i[m]) && !y(i) && ((u = i[c]) && (i[c] = null), w.event.triggered = m, t.isPropagationStopped() && h.addEventListener(m, Tt), i[m](), t.isPropagationStopped() && h.removeEventListener(m, Tt), w.event.triggered = void 0, u && (i[c] = u)), t.result
+            }
+        },
+        simulate: function(e, t, n) {
+            var r = w.extend(new w.Event, n, {
+                type: e,
+                isSimulated: !0
+            });
+            w.event.trigger(r, null, t)
+        }
+    }), w.fn.extend({
+        trigger: function(e, t) {
+            return this.each(function() {
+                w.event.trigger(e, t, this)
+            })
+        },
+        triggerHandler: function(e, t) {
+            var n = this[0];
+            if (n) return w.event.trigger(e, t, n, !0)
+        }
+    }), h.focusin || w.each({
+        focus: "focusin",
+        blur: "focusout"
+    }, function(e, t) {
+        var n = function(e) {
+            w.event.simulate(t, e.target, w.event.fix(e))
+        };
+        w.event.special[t] = {
+            setup: function() {
+                var r = this.ownerDocument || this,
+                    i = J.access(r, t);
+                i || r.addEventListener(e, n, !0), J.access(r, t, (i || 0) + 1)
+            },
+            teardown: function() {
+                var r = this.ownerDocument || this,
+                    i = J.access(r, t) - 1;
+                i ? J.access(r, t, i) : (r.removeEventListener(e, n, !0), J.remove(r, t))
+            }
+        }
+    });
+    var Ct = e.location,
+        Et = Date.now(),
+        kt = /\?/;
+    w.parseXML = function(t) {
+        var n;
+        if (!t || "string" != typeof t) return null;
+        try {
+            n = (new e.DOMParser).parseFromString(t, "text/xml")
+        } catch (e) {
+            n = void 0
+        }
+        return n && !n.getElementsByTagName("parsererror").length || w.error("Invalid XML: " + t), n
+    };
+    var St = /\[\]$/,
+        Dt = /\r?\n/g,
+        Nt = /^(?:submit|button|image|reset|file)$/i,
+        At = /^(?:input|select|textarea|keygen)/i;
+
+    function jt(e, t, n, r) {
+        var i;
+        if (Array.isArray(t)) w.each(t, function(t, i) {
+            n || St.test(e) ? r(e, i) : jt(e + "[" + ("object" == typeof i && null != i ? t : "") + "]", i, n, r)
+        });
+        else if (n || "object" !== x(t)) r(e, t);
+        else
+            for (i in t) jt(e + "[" + i + "]", t[i], n, r)
+    }
+    w.param = function(e, t) {
+        var n, r = [],
+            i = function(e, t) {
+                var n = g(t) ? t() : t;
+                r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n)
+            };
+        if (Array.isArray(e) || e.jquery && !w.isPlainObject(e)) w.each(e, function() {
+            i(this.name, this.value)
+        });
+        else
+            for (n in e) jt(n, e[n], t, i);
+        return r.join("&")
+    }, w.fn.extend({
+        serialize: function() {
+            return w.param(this.serializeArray())
+        },
+        serializeArray: function() {
+            return this.map(function() {
+                var e = w.prop(this, "elements");
+                return e ? w.makeArray(e) : this
+            }).filter(function() {
+                var e = this.type;
+                return this.name && !w(this).is(":disabled") && At.test(this.nodeName) && !Nt.test(e) && (this.checked || !pe.test(e))
+            }).map(function(e, t) {
+                var n = w(this).val();
+                return null == n ? null : Array.isArray(n) ? w.map(n, function(e) {
+                    return {
+                        name: t.name,
+                        value: e.replace(Dt, "\r\n")
+                    }
+                }) : {
+                    name: t.name,
+                    value: n.replace(Dt, "\r\n")
+                }
+            }).get()
+        }
+    });
+    var qt = /%20/g,
+        Lt = /#.*$/,
+        Ht = /([?&])_=[^&]*/,
+        Ot = /^(.*?):[ \t]*([^\r\n]*)$/gm,
+        Pt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+        Mt = /^(?:GET|HEAD)$/,
+        Rt = /^\/\//,
+        It = {},
+        Wt = {},
+        $t = "*/".concat("*"),
+        Bt = r.createElement("a");
+    Bt.href = Ct.href;
+
+    function Ft(e) {
+        return function(t, n) {
+            "string" != typeof t && (n = t, t = "*");
+            var r, i = 0,
+                o = t.toLowerCase().match(M) || [];
+            if (g(n))
+                while (r = o[i++]) "+" === r[0] ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
+        }
+    }
+
+    function _t(e, t, n, r) {
+        var i = {},
+            o = e === Wt;
+
+        function a(s) {
+            var u;
+            return i[s] = !0, w.each(e[s] || [], function(e, s) {
+                var l = s(t, n, r);
+                return "string" != typeof l || o || i[l] ? o ? !(u = l) : void 0 : (t.dataTypes.unshift(l), a(l), !1)
+            }), u
+        }
+        return a(t.dataTypes[0]) || !i["*"] && a("*")
+    }
+
+    function zt(e, t) {
+        var n, r, i = w.ajaxSettings.flatOptions || {};
+        for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
+        return r && w.extend(!0, e, r), e
+    }
+
+    function Xt(e, t, n) {
+        var r, i, o, a, s = e.contents,
+            u = e.dataTypes;
+        while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
+        if (r)
+            for (i in s)
+                if (s[i] && s[i].test(r)) {
+                    u.unshift(i);
+                    break
+                } if (u[0] in n) o = u[0];
+        else {
+            for (i in n) {
+                if (!u[0] || e.converters[i + " " + u[0]]) {
+                    o = i;
+                    break
+                }
+                a || (a = i)
+            }
+            o = o || a
+        }
+        if (o) return o !== u[0] && u.unshift(o), n[o]
+    }
+
+    function Ut(e, t, n, r) {
+        var i, o, a, s, u, l = {},
+            c = e.dataTypes.slice();
+        if (c[1])
+            for (a in e.converters) l[a.toLowerCase()] = e.converters[a];
+        o = c.shift();
+        while (o)
+            if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift())
+                if ("*" === o) o = u;
+                else if ("*" !== u && u !== o) {
+            if (!(a = l[u + " " + o] || l["* " + o]))
+                for (i in l)
+                    if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
+                        !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1]));
+                        break
+                    } if (!0 !== a)
+                if (a && e["throws"]) t = a(t);
+                else try {
+                    t = a(t)
+                } catch (e) {
+                    return {
+                        state: "parsererror",
+                        error: a ? e : "No conversion from " + u + " to " + o
+                    }
+                }
+        }
+        return {
+            state: "success",
+            data: t
+        }
+    }
+    w.extend({
+        active: 0,
+        lastModified: {},
+        etag: {},
+        ajaxSettings: {
+            url: Ct.href,
+            type: "GET",
+            isLocal: Pt.test(Ct.protocol),
+            global: !0,
+            processData: !0,
+            async: !0,
+            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+            accepts: {
+                "*": $t,
+                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": w.parseXML
+            },
+            flatOptions: {
+                url: !0,
+                context: !0
+            }
+        },
+        ajaxSetup: function(e, t) {
+            return t ? zt(zt(e, w.ajaxSettings), t) : zt(w.ajaxSettings, e)
+        },
+        ajaxPrefilter: Ft(It),
+        ajaxTransport: Ft(Wt),
+        ajax: function(t, n) {
+            "object" == typeof t && (n = t, t = void 0), n = n || {};
+            var i, o, a, s, u, l, c, f, p, d, h = w.ajaxSetup({}, n),
+                g = h.context || h,
+                y = h.context && (g.nodeType || g.jquery) ? w(g) : w.event,
+                v = w.Deferred(),
+                m = w.Callbacks("once memory"),
+                x = h.statusCode || {},
+                b = {},
+                T = {},
+                C = "canceled",
+                E = {
+                    readyState: 0,
+                    getResponseHeader: function(e) {
+                        var t;
+                        if (c) {
+                            if (!s) {
+                                s = {};
+                                while (t = Ot.exec(a)) s[t[1].toLowerCase()] = t[2]
+                            }
+                            t = s[e.toLowerCase()]
+                        }
+                        return null == t ? null : t
+                    },
+                    getAllResponseHeaders: function() {
+                        return c ? a : null
+                    },
+                    setRequestHeader: function(e, t) {
+                        return null == c && (e = T[e.toLowerCase()] = T[e.toLowerCase()] || e, b[e] = t), this
+                    },
+                    overrideMimeType: function(e) {
+                        return null == c && (h.mimeType = e), this
+                    },
+                    statusCode: function(e) {
+                        var t;
+                        if (e)
+                            if (c) E.always(e[E.status]);
+                            else
+                                for (t in e) x[t] = [x[t], e[t]];
+                        return this
+                    },
+                    abort: function(e) {
+                        var t = e || C;
+                        return i && i.abort(t), k(0, t), this
+                    }
+                };
+            if (v.promise(E), h.url = ((t || h.url || Ct.href) + "").replace(Rt, Ct.protocol + "//"), h.type = n.method || n.type || h.method || h.type, h.dataTypes = (h.dataType || "*").toLowerCase().match(M) || [""], null == h.crossDomain) {
+                l = r.createElement("a");
+                try {
+                    l.href = h.url, l.href = l.href, h.crossDomain = Bt.protocol + "//" + Bt.host != l.protocol + "//" + l.host
+                } catch (e) {
+                    h.crossDomain = !0
+                }
+            }
+            if (h.data && h.processData && "string" != typeof h.data && (h.data = w.param(h.data, h.traditional)), _t(It, h, n, E), c) return E;
+            (f = w.event && h.global) && 0 == w.active++ && w.event.trigger("ajaxStart"), h.type = h.type.toUpperCase(), h.hasContent = !Mt.test(h.type), o = h.url.replace(Lt, ""), h.hasContent ? h.data && h.processData && 0 === (h.contentType || "").indexOf("application/x-www-form-urlencoded") && (h.data = h.data.replace(qt, "+")) : (d = h.url.slice(o.length), h.data && (h.processData || "string" == typeof h.data) && (o += (kt.test(o) ? "&" : "?") + h.data, delete h.data), !1 === h.cache && (o = o.replace(Ht, "$1"), d = (kt.test(o) ? "&" : "?") + "_=" + Et++ + d), h.url = o + d), h.ifModified && (w.lastModified[o] && E.setRequestHeader("If-Modified-Since", w.lastModified[o]), w.etag[o] && E.setRequestHeader("If-None-Match", w.etag[o])), (h.data && h.hasContent && !1 !== h.contentType || n.contentType) && E.setRequestHeader("Content-Type", h.contentType), E.setRequestHeader("Accept", h.dataTypes[0] && h.accepts[h.dataTypes[0]] ? h.accepts[h.dataTypes[0]] + ("*" !== h.dataTypes[0] ? ", " + $t + "; q=0.01" : "") : h.accepts["*"]);
+            for (p in h.headers) E.setRequestHeader(p, h.headers[p]);
+            if (h.beforeSend && (!1 === h.beforeSend.call(g, E, h) || c)) return E.abort();
+            if (C = "abort", m.add(h.complete), E.done(h.success), E.fail(h.error), i = _t(Wt, h, n, E)) {
+                if (E.readyState = 1, f && y.trigger("ajaxSend", [E, h]), c) return E;
+                h.async && h.timeout > 0 && (u = e.setTimeout(function() {
+                    E.abort("timeout")
+                }, h.timeout));
+                try {
+                    c = !1, i.send(b, k)
+                } catch (e) {
+                    if (c) throw e;
+                    k(-1, e)
+                }
+            } else k(-1, "No Transport");
+
+            function k(t, n, r, s) {
+                var l, p, d, b, T, C = n;
+                c || (c = !0, u && e.clearTimeout(u), i = void 0, a = s || "", E.readyState = t > 0 ? 4 : 0, l = t >= 200 && t < 300 || 304 === t, r && (b = Xt(h, E, r)), b = Ut(h, b, E, l), l ? (h.ifModified && ((T = E.getResponseHeader("Last-Modified")) && (w.lastModified[o] = T), (T = E.getResponseHeader("etag")) && (w.etag[o] = T)), 204 === t || "HEAD" === h.type ? C = "nocontent" : 304 === t ? C = "notmodified" : (C = b.state, p = b.data, l = !(d = b.error))) : (d = C, !t && C || (C = "error", t < 0 && (t = 0))), E.status = t, E.statusText = (n || C) + "", l ? v.resolveWith(g, [p, C, E]) : v.rejectWith(g, [E, C, d]), E.statusCode(x), x = void 0, f && y.trigger(l ? "ajaxSuccess" : "ajaxError", [E, h, l ? p : d]), m.fireWith(g, [E, C]), f && (y.trigger("ajaxComplete", [E, h]), --w.active || w.event.trigger("ajaxStop")))
+            }
+            return E
+        },
+        getJSON: function(e, t, n) {
+            return w.get(e, t, n, "json")
+        },
+        getScript: function(e, t) {
+            return w.get(e, void 0, t, "script")
+        }
+    }), w.each(["get", "post"], function(e, t) {
+        w[t] = function(e, n, r, i) {
+            return g(n) && (i = i || r, r = n, n = void 0), w.ajax(w.extend({
+                url: e,
+                type: t,
+                dataType: i,
+                data: n,
+                success: r
+            }, w.isPlainObject(e) && e))
+        }
+    }), w._evalUrl = function(e) {
+        return w.ajax({
+            url: e,
+            type: "GET",
+            dataType: "script",
+            cache: !0,
+            async: !1,
+            global: !1,
+            "throws": !0
+        })
+    }, w.fn.extend({
+        wrapAll: function(e) {
+            var t;
+            return this[0] && (g(e) && (e = e.call(this[0])), t = w(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
+                var e = this;
+                while (e.firstElementChild) e = e.firstElementChild;
+                return e
+            }).append(this)), this
+        },
+        wrapInner: function(e) {
+            return g(e) ? this.each(function(t) {
+                w(this).wrapInner(e.call(this, t))
+            }) : this.each(function() {
+                var t = w(this),
+                    n = t.contents();
+                n.length ? n.wrapAll(e) : t.append(e)
+            })
+        },
+        wrap: function(e) {
+            var t = g(e);
+            return this.each(function(n) {
+                w(this).wrapAll(t ? e.call(this, n) : e)
+            })
+        },
+        unwrap: function(e) {
+            return this.parent(e).not("body").each(function() {
+                w(this).replaceWith(this.childNodes)
+            }), this
+        }
+    }), w.expr.pseudos.hidden = function(e) {
+        return !w.expr.pseudos.visible(e)
+    }, w.expr.pseudos.visible = function(e) {
+        return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
+    }, w.ajaxSettings.xhr = function() {
+        try {
+            return new e.XMLHttpRequest
+        } catch (e) {}
+    };
+    var Vt = {
+            0: 200,
+            1223: 204
+        },
+        Gt = w.ajaxSettings.xhr();
+    h.cors = !!Gt && "withCredentials" in Gt, h.ajax = Gt = !!Gt, w.ajaxTransport(function(t) {
+        var n, r;
+        if (h.cors || Gt && !t.crossDomain) return {
+            send: function(i, o) {
+                var a, s = t.xhr();
+                if (s.open(t.type, t.url, t.async, t.username, t.password), t.xhrFields)
+                    for (a in t.xhrFields) s[a] = t.xhrFields[a];
+                t.mimeType && s.overrideMimeType && s.overrideMimeType(t.mimeType), t.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
+                for (a in i) s.setRequestHeader(a, i[a]);
+                n = function(e) {
+                    return function() {
+                        n && (n = r = s.onload = s.onerror = s.onabort = s.ontimeout = s.onreadystatechange = null, "abort" === e ? s.abort() : "error" === e ? "number" != typeof s.status ? o(0, "error") : o(s.status, s.statusText) : o(Vt[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? {
+                            binary: s.response
+                        } : {
+                            text: s.responseText
+                        }, s.getAllResponseHeaders()))
+                    }
+                }, s.onload = n(), r = s.onerror = s.ontimeout = n("error"), void 0 !== s.onabort ? s.onabort = r : s.onreadystatechange = function() {
+                    4 === s.readyState && e.setTimeout(function() {
+                        n && r()
+                    })
+                }, n = n("abort");
+                try {
+                    s.send(t.hasContent && t.data || null)
+                } catch (e) {
+                    if (n) throw e
+                }
+            },
+            abort: function() {
+                n && n()
+            }
+        }
+    }), w.ajaxPrefilter(function(e) {
+        e.crossDomain && (e.contents.script = !1)
+    }), w.ajaxSetup({
+        accepts: {
+            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+        },
+        contents: {
+            script: /\b(?:java|ecma)script\b/
+        },
+        converters: {
+            "text script": function(e) {
+                return w.globalEval(e), e
+            }
+        }
+    }), w.ajaxPrefilter("script", function(e) {
+        void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET")
+    }), w.ajaxTransport("script", function(e) {
+        if (e.crossDomain) {
+            var t, n;
+            return {
+                send: function(i, o) {
+                    t = w("<script>").prop({
+                        charset: e.scriptCharset,
+                        src: e.url
+                    }).on("load error", n = function(e) {
+                        t.remove(), n = null, e && o("error" === e.type ? 404 : 200, e.type)
+                    }), r.head.appendChild(t[0])
+                },
+                abort: function() {
+                    n && n()
+                }
+            }
+        }
+    });
+    var Yt = [],
+        Qt = /(=)\?(?=&|$)|\?\?/;
+    w.ajaxSetup({
+        jsonp: "callback",
+        jsonpCallback: function() {
+            var e = Yt.pop() || w.expando + "_" + Et++;
+            return this[e] = !0, e
+        }
+    }), w.ajaxPrefilter("json jsonp", function(t, n, r) {
+        var i, o, a, s = !1 !== t.jsonp && (Qt.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && Qt.test(t.data) && "data");
+        if (s || "jsonp" === t.dataTypes[0]) return i = t.jsonpCallback = g(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, s ? t[s] = t[s].replace(Qt, "$1" + i) : !1 !== t.jsonp && (t.url += (kt.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), t.converters["script json"] = function() {
+            return a || w.error(i + " was not called"), a[0]
+        }, t.dataTypes[0] = "json", o = e[i], e[i] = function() {
+            a = arguments
+        }, r.always(function() {
+            void 0 === o ? w(e).removeProp(i) : e[i] = o, t[i] && (t.jsonpCallback = n.jsonpCallback, Yt.push(i)), a && g(o) && o(a[0]), a = o = void 0
+        }), "script"
+    }), h.createHTMLDocument = function() {
+        var e = r.implementation.createHTMLDocument("").body;
+        return e.innerHTML = "<form></form><form></form>", 2 === e.childNodes.length
+    }(), w.parseHTML = function(e, t, n) {
+        if ("string" != typeof e) return [];
+        "boolean" == typeof t && (n = t, t = !1);
+        var i, o, a;
+        return t || (h.createHTMLDocument ? ((i = (t = r.implementation.createHTMLDocument("")).createElement("base")).href = r.location.href, t.head.appendChild(i)) : t = r), o = A.exec(e), a = !n && [], o ? [t.createElement(o[1])] : (o = xe([e], t, a), a && a.length && w(a).remove(), w.merge([], o.childNodes))
+    }, w.fn.load = function(e, t, n) {
+        var r, i, o, a = this,
+            s = e.indexOf(" ");
+        return s > -1 && (r = vt(e.slice(s)), e = e.slice(0, s)), g(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"), a.length > 0 && w.ajax({
+            url: e,
+            type: i || "GET",
+            dataType: "html",
+            data: t
+        }).done(function(e) {
+            o = arguments, a.html(r ? w("<div>").append(w.parseHTML(e)).find(r) : e)
+        }).always(n && function(e, t) {
+            a.each(function() {
+                n.apply(this, o || [e.responseText, t, e])
+            })
+        }), this
+    }, w.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
+        w.fn[t] = function(e) {
+            return this.on(t, e)
+        }
+    }), w.expr.pseudos.animated = function(e) {
+        return w.grep(w.timers, function(t) {
+            return e === t.elem
+        }).length
+    }, w.offset = {
+        setOffset: function(e, t, n) {
+            var r, i, o, a, s, u, l, c = w.css(e, "position"),
+                f = w(e),
+                p = {};
+            "static" === c && (e.style.position = "relative"), s = f.offset(), o = w.css(e, "top"), u = w.css(e, "left"), (l = ("absolute" === c || "fixed" === c) && (o + u).indexOf("auto") > -1) ? (a = (r = f.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0), g(t) && (t = t.call(e, n, w.extend({}, s))), null != t.top && (p.top = t.top - s.top + a), null != t.left && (p.left = t.left - s.left + i), "using" in t ? t.using.call(e, p) : f.css(p)
+        }
+    }, w.fn.extend({
+        offset: function(e) {
+            if (arguments.length) return void 0 === e ? this : this.each(function(t) {
+                w.offset.setOffset(this, e, t)
+            });
+            var t, n, r = this[0];
+            if (r) return r.getClientRects().length ? (t = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, {
+                top: t.top + n.pageYOffset,
+                left: t.left + n.pageXOffset
+            }) : {
+                top: 0,
+                left: 0
+            }
+        },
+        position: function() {
+            if (this[0]) {
+                var e, t, n, r = this[0],
+                    i = {
+                        top: 0,
+                        left: 0
+                    };
+                if ("fixed" === w.css(r, "position")) t = r.getBoundingClientRect();
+                else {
+                    t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement;
+                    while (e && (e === n.body || e === n.documentElement) && "static" === w.css(e, "position")) e = e.parentNode;
+                    e && e !== r && 1 === e.nodeType && ((i = w(e).offset()).top += w.css(e, "borderTopWidth", !0), i.left += w.css(e, "borderLeftWidth", !0))
+                }
+                return {
+                    top: t.top - i.top - w.css(r, "marginTop", !0),
+                    left: t.left - i.left - w.css(r, "marginLeft", !0)
+                }
+            }
+        },
+        offsetParent: function() {
+            return this.map(function() {
+                var e = this.offsetParent;
+                while (e && "static" === w.css(e, "position")) e = e.offsetParent;
+                return e || be
+            })
+        }
+    }), w.each({
+        scrollLeft: "pageXOffset",
+        scrollTop: "pageYOffset"
+    }, function(e, t) {
+        var n = "pageYOffset" === t;
+        w.fn[e] = function(r) {
+            return z(this, function(e, r, i) {
+                var o;
+                if (y(e) ? o = e : 9 === e.nodeType && (o = e.defaultView), void 0 === i) return o ? o[t] : e[r];
+                o ? o.scrollTo(n ? o.pageXOffset : i, n ? i : o.pageYOffset) : e[r] = i
+            }, e, r, arguments.length)
+        }
+    }), w.each(["top", "left"], function(e, t) {
+        w.cssHooks[t] = _e(h.pixelPosition, function(e, n) {
+            if (n) return n = Fe(e, t), We.test(n) ? w(e).position()[t] + "px" : n
+        })
+    }), w.each({
+        Height: "height",
+        Width: "width"
+    }, function(e, t) {
+        w.each({
+            padding: "inner" + e,
+            content: t,
+            "": "outer" + e
+        }, function(n, r) {
+            w.fn[r] = function(i, o) {
+                var a = arguments.length && (n || "boolean" != typeof i),
+                    s = n || (!0 === i || !0 === o ? "margin" : "border");
+                return z(this, function(t, n, i) {
+                    var o;
+                    return y(t) ? 0 === r.indexOf("outer") ? t["inner" + e] : t.document.documentElement["client" + e] : 9 === t.nodeType ? (o = t.documentElement, Math.max(t.body["scroll" + e], o["scroll" + e], t.body["offset" + e], o["offset" + e], o["client" + e])) : void 0 === i ? w.css(t, n, s) : w.style(t, n, i, s)
+                }, t, a ? i : void 0, a)
+            }
+        })
+    }), w.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(e, t) {
+        w.fn[t] = function(e, n) {
+            return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
+        }
+    }), w.fn.extend({
+        hover: function(e, t) {
+            return this.mouseenter(e).mouseleave(t || e)
+        }
+    }), w.fn.extend({
+        bind: function(e, t, n) {
+            return this.on(e, null, t, n)
+        },
+        unbind: function(e, t) {
+            return this.off(e, null, t)
+        },
+        delegate: function(e, t, n, r) {
+            return this.on(t, e, n, r)
+        },
+        undelegate: function(e, t, n) {
+            return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
+        }
+    }), w.proxy = function(e, t) {
+        var n, r, i;
+        if ("string" == typeof t && (n = e[t], t = e, e = n), g(e)) return r = o.call(arguments, 2), i = function() {
+            return e.apply(t || this, r.concat(o.call(arguments)))
+        }, i.guid = e.guid = e.guid || w.guid++, i
+    }, w.holdReady = function(e) {
+        e ? w.readyWait++ : w.ready(!0)
+    }, w.isArray = Array.isArray, w.parseJSON = JSON.parse, w.nodeName = N, w.isFunction = g, w.isWindow = y, w.camelCase = G, w.type = x, w.now = Date.now, w.isNumeric = function(e) {
+        var t = w.type(e);
+        return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
+    }, "function" == typeof define && define.amd && define("jquery", [], function() {
+        return w
+    });
+    var Jt = e.jQuery,
+        Kt = e.$;
+    return w.noConflict = function(t) {
+        return e.$ === w && (e.$ = Kt), t && e.jQuery === w && (e.jQuery = Jt), w
+    }, t || (e.jQuery = e.$ = w), w
+});
diff -urN zabbix-4.0.8.orig/debian/missing-sources/jquery-ui.js zabbix-4.0.8/debian/missing-sources/jquery-ui.js
--- zabbix-4.0.8.orig/debian/missing-sources/jquery-ui.js	1969-12-31 18:00:00.000000000 -0600
+++ zabbix-4.0.8/debian/missing-sources/jquery-ui.js	2019-05-29 08:27:00.464841474 -0500
@@ -0,0 +1,2868 @@
+/*! jQuery UI - v1.12.1 - 2019-02-14
+ * http://jqueryui.com
+ * Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, keycode.js, scroll-parent.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/mouse.js, widgets/tabs.js
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
+(function(t) {
+    "function" == typeof define && define.amd ? define(["jquery"], t) : t(jQuery)
+})(function(t) {
+    function e(t) {
+        for (var e = t.css("visibility");
+            "inherit" === e;) t = t.parent(), e = t.css("visibility");
+        return "hidden" !== e
+    }
+    t.ui = t.ui || {}, t.ui.version = "1.12.1";
+    var i = 0,
+        s = Array.prototype.slice;
+    t.cleanData = function(e) {
+            return function(i) {
+                var s, n, o;
+                for (o = 0; null != (n = i[o]); o++) try {
+                    s = t._data(n, "events"), s && s.remove && t(n).triggerHandler("remove")
+                } catch (a) {}
+                e(i)
+            }
+        }(t.cleanData), t.widget = function(e, i, s) {
+            var n, o, a, r = {},
+                l = e.split(".")[0];
+            e = e.split(".")[1];
+            var h = l + "-" + e;
+            return s || (s = i, i = t.Widget), t.isArray(s) && (s = t.extend.apply(null, [{}].concat(s))), t.expr[":"][h.toLowerCase()] = function(e) {
+                return !!t.data(e, h)
+            }, t[l] = t[l] || {}, n = t[l][e], o = t[l][e] = function(t, e) {
+                return this._createWidget ? (arguments.length && this._createWidget(t, e), void 0) : new o(t, e)
+            }, t.extend(o, n, {
+                version: s.version,
+                _proto: t.extend({}, s),
+                _childConstructors: []
+            }), a = new i, a.options = t.widget.extend({}, a.options), t.each(s, function(e, s) {
+                return t.isFunction(s) ? (r[e] = function() {
+                    function t() {
+                        return i.prototype[e].apply(this, arguments)
+                    }
+
+                    function n(t) {
+                        return i.prototype[e].apply(this, t)
+                    }
+                    return function() {
+                        var e, i = this._super,
+                            o = this._superApply;
+                        return this._super = t, this._superApply = n, e = s.apply(this, arguments), this._super = i, this._superApply =
+                            o, e
+                    }
+                }(), void 0) : (r[e] = s, void 0)
+            }), o.prototype = t.widget.extend(a, {
+                widgetEventPrefix: n ? a.widgetEventPrefix || e : e
+            }, r, {
+                constructor: o,
+                namespace: l,
+                widgetName: e,
+                widgetFullName: h
+            }), n ? (t.each(n._childConstructors, function(e, i) {
+                var s = i.prototype;
+                t.widget(s.namespace + "." + s.widgetName, o, i._proto)
+            }), delete n._childConstructors) : i._childConstructors.push(o), t.widget.bridge(e, o), o
+        }, t.widget.extend = function(e) {
+            for (var i, n, o = s.call(arguments, 1), a = 0, r = o.length; r > a; a++)
+                for (i in o[a]) n = o[a][i], o[a].hasOwnProperty(i) && void 0 !== n && (e[i] = t.isPlainObject(n) ? t.isPlainObject(e[i]) ? t.widget
+                    .extend({}, e[i], n) : t.widget.extend({}, n) : n);
+            return e
+        }, t.widget.bridge = function(e, i) {
+            var n = i.prototype.widgetFullName || e;
+            t.fn[e] = function(o) {
+                var a = "string" == typeof o,
+                    r = s.call(arguments, 1),
+                    l = this;
+                return a ? this.length || "instance" !== o ? this.each(function() {
+                    var i, s = t.data(this, n);
+                    return "instance" === o ? (l = s, !1) : s ? t.isFunction(s[o]) && "_" !== o.charAt(0) ? (i = s[o].apply(s, r), i !== s &&
+                        void 0 !== i ? (l = i && i.jquery ? l.pushStack(i.get()) : i, !1) : void 0) : t.error("no such method '" + o +
+                        "' for " + e + " widget instance") : t.error("cannot call methods on " + e + " prior to initialization; " +
+                        "attempted to call method '" + o + "'")
+                }) : l = void 0 : (r.length && (o = t.widget.extend.apply(null, [o].concat(r))), this.each(function() {
+                    var e = t.data(this, n);
+                    e ? (e.option(o || {}), e._init && e._init()) : t.data(this, n, new i(o, this))
+                })), l
+            }
+        }, t.Widget = function() {}, t.Widget._childConstructors = [], t.Widget.prototype = {
+            widgetName: "widget",
+            widgetEventPrefix: "",
+            defaultElement: "<div>",
+            options: {
+                classes: {},
+                disabled: !1,
+                create: null
+            },
+            _createWidget: function(e, s) {
+                s = t(s || this.defaultElement || this)[0], this.element = t(s), this.uuid = i++, this.eventNamespace = "." + this.widgetName + this
+                    .uuid, this.bindings = t(), this.hoverable = t(), this.focusable = t(), this.classesElementLookup = {}, s !== this && (t.data(s,
+                        this.widgetFullName, this), this._on(!0, this.element, {
+                        remove: function(t) {
+                            t.target === s && this.destroy()
+                        }
+                    }), this.document = t(s.style ? s.ownerDocument : s.document || s), this.window = t(this.document[0].defaultView || this
+                        .document[0].parentWindow)), this.options = t.widget.extend({}, this.options, this._getCreateOptions(), e), this._create(), this
+                    .options.disabled && this._setOptionDisabled(this.options.disabled), this._trigger("create", null, this._getCreateEventData()), this
+                    ._init()
+            },
+            _getCreateOptions: function() {
+                return {}
+            },
+            _getCreateEventData: t.noop,
+            _create: t.noop,
+            _init: t.noop,
+            destroy: function() {
+                var e = this;
+                this._destroy(), t.each(this.classesElementLookup, function(t, i) {
+                    e._removeClass(i, t)
+                }), this.element.off(this.eventNamespace).removeData(this.widgetFullName), this.widget().off(this.eventNamespace).removeAttr(
+                    "aria-disabled"), this.bindings.off(this.eventNamespace)
+            },
+            _destroy: t.noop,
+            widget: function() {
+                return this.element
+            },
+            option: function(e, i) {
+                var s, n, o, a = e;
+                if (0 === arguments.length) return t.widget.extend({}, this.options);
+                if ("string" == typeof e)
+                    if (a = {}, s = e.split("."), e = s.shift(), s.length) {
+                        for (n = a[e] = t.widget.extend({}, this.options[e]), o = 0; s.length - 1 > o; o++) n[s[o]] = n[s[o]] || {}, n = n[s[o]];
+                        if (e = s.pop(), 1 === arguments.length) return void 0 === n[e] ? null : n[e];
+                        n[e] = i
+                    } else {
+                        if (1 === arguments.length) return void 0 === this.options[e] ? null : this.options[e];
+                        a[e] = i
+                    } return this._setOptions(a), this
+            },
+            _setOptions: function(t) {
+                var e;
+                for (e in t) this._setOption(e, t[e]);
+                return this
+            },
+            _setOption: function(t, e) {
+                return "classes" === t && this._setOptionClasses(e), this.options[t] = e, "disabled" === t && this._setOptionDisabled(e), this
+            },
+            _setOptionClasses: function(e) {
+                var i, s, n;
+                for (i in e) n = this.classesElementLookup[i], e[i] !== this.options.classes[i] && n && n.length && (s = t(n.get()), this._removeClass(
+                    n, i), s.addClass(this._classes({
+                    element: s,
+                    keys: i,
+                    classes: e,
+                    add: !0
+                })))
+            },
+            _setOptionDisabled: function(t) {
+                this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!t), t && (this._removeClass(this.hoverable, null,
+                    "ui-state-hover"), this._removeClass(this.focusable, null, "ui-state-focus"))
+            },
+            enable: function() {
+                return this._setOptions({
+                    disabled: !1
+                })
+            },
+            disable: function() {
+                return this._setOptions({
+                    disabled: !0
+                })
+            },
+            _classes: function(e) {
+                function i(i, o) {
+                    var a, r;
+                    for (r = 0; i.length > r; r++) a = n.classesElementLookup[i[r]] || t(), a = e.add ? t(t.unique(a.get().concat(e.element.get()))) :
+                        t(a.not(e.element).get()), n.classesElementLookup[i[r]] = a, s.push(i[r]), o && e.classes[i[r]] && s.push(e.classes[i[r]])
+                }
+                var s = [],
+                    n = this;
+                return e = t.extend({
+                    element: this.element,
+                    classes: this.options.classes || {}
+                }, e), this._on(e.element, {
+                    remove: "_untrackClassesElement"
+                }), e.keys && i(e.keys.match(/\S+/g) || [], !0), e.extra && i(e.extra.match(/\S+/g) || []), s.join(" ")
+            },
+            _untrackClassesElement: function(e) {
+                var i = this;
+                t.each(i.classesElementLookup, function(s, n) {
+                    -1 !== t.inArray(e.target, n) && (i.classesElementLookup[s] = t(n.not(e.target).get()))
+                })
+            },
+            _removeClass: function(t, e, i) {
+                return this._toggleClass(t, e, i, !1)
+            },
+            _addClass: function(t, e, i) {
+                return this._toggleClass(t, e, i, !0)
+            },
+            _toggleClass: function(t, e, i, s) {
+                s = "boolean" == typeof s ? s : i;
+                var n = "string" == typeof t || null === t,
+                    o = {
+                        extra: n ? e : i,
+                        keys: n ? t : e,
+                        element: n ? this.element : t,
+                        add: s
+                    };
+                return o.element.toggleClass(this._classes(o), s), this
+            },
+            _on: function(e, i, s) {
+                var n, o = this;
+                "boolean" != typeof e && (s = i, i = e, e = !1), s ? (i = n = t(i), this.bindings = this.bindings.add(i)) : (s = i, i = this.element,
+                    n = this.widget()), t.each(s, function(s, a) {
+                    function r() {
+                        return e || o.options.disabled !== !0 && !t(this).hasClass("ui-state-disabled") ? ("string" == typeof a ? o[a] : a)
+                            .apply(o, arguments) : void 0
+                    }
+                    "string" != typeof a && (r.guid = a.guid = a.guid || r.guid || t.guid++);
+                    var l = s.match(/^([\w:-]*)\s*(.*)$/),
+                        h = l[1] + o.eventNamespace,
+                        c = l[2];
+                    c ? n.on(h, c, r) : i.on(h, r)
+                })
+            },
+            _off: function(e, i) {
+                i = (i || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.off(i).off(i), this.bindings = t(this.bindings.not(e)
+                    .get()), this.focusable = t(this.focusable.not(e).get()), this.hoverable = t(this.hoverable.not(e).get())
+            },
+            _delay: function(t, e) {
+                function i() {
+                    return ("string" == typeof t ? s[t] : t).apply(s, arguments)
+                }
+                var s = this;
+                return setTimeout(i, e || 0)
+            },
+            _hoverable: function(e) {
+                this.hoverable = this.hoverable.add(e), this._on(e, {
+                    mouseenter: function(e) {
+                        this._addClass(t(e.currentTarget), null, "ui-state-hover")
+                    },
+                    mouseleave: function(e) {
+                        this._removeClass(t(e.currentTarget), null, "ui-state-hover")
+                    }
+                })
+            },
+            _focusable: function(e) {
+                this.focusable = this.focusable.add(e), this._on(e, {
+                    focusin: function(e) {
+                        this._addClass(t(e.currentTarget), null, "ui-state-focus")
+                    },
+                    focusout: function(e) {
+                        this._removeClass(t(e.currentTarget), null, "ui-state-focus")
+                    }
+                })
+            },
+            _trigger: function(e, i, s) {
+                var n, o, a = this.options[e];
+                if (s = s || {}, i = t.Event(i), i.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), i.target = this
+                    .element[0], o = i.originalEvent)
+                    for (n in o) n in i || (i[n] = o[n]);
+                return this.element.trigger(i, s), !(t.isFunction(a) && a.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented())
+            }
+        }, t.each({
+            show: "fadeIn",
+            hide: "fadeOut"
+        }, function(e, i) {
+            t.Widget.prototype["_" + e] = function(s, n, o) {
+                "string" == typeof n && (n = {
+                    effect: n
+                });
+                var a, r = n ? n === !0 || "number" == typeof n ? i : n.effect || i : e;
+                n = n || {}, "number" == typeof n && (n = {
+                        duration: n
+                    }), a = !t.isEmptyObject(n), n.complete = o, n.delay && s.delay(n.delay), a && t.effects && t.effects.effect[r] ? s[e](n) :
+                    r !== e && s[r] ? s[r](n.duration, n.easing, o) : s.queue(function(i) {
+                        t(this)[e](), o && o.call(s[0]), i()
+                    })
+            }
+        }), t.widget,
+        function() {
+            function e(t, e, i) {
+                return [parseFloat(t[0]) * (u.test(t[0]) ? e / 100 : 1), parseFloat(t[1]) * (u.test(t[1]) ? i / 100 : 1)]
+            }
+
+            function i(e, i) {
+                return parseInt(t.css(e, i), 10) || 0
+            }
+
+            function s(e) {
+                var i = e[0];
+                return 9 === i.nodeType ? {
+                    width: e.width(),
+                    height: e.height(),
+                    offset: {
+                        top: 0,
+                        left: 0
+                    }
+                } : t.isWindow(i) ? {
+                    width: e.width(),
+                    height: e.height(),
+                    offset: {
+                        top: e.scrollTop(),
+                        left: e.scrollLeft()
+                    }
+                } : i.preventDefault ? {
+                    width: 0,
+                    height: 0,
+                    offset: {
+                        top: i.pageY,
+                        left: i.pageX
+                    }
+                } : {
+                    width: e.outerWidth(),
+                    height: e.outerHeight(),
+                    offset: e.offset()
+                }
+            }
+            var n, o = Math.max,
+                a = Math.abs,
+                r = /left|center|right/,
+                l = /top|center|bottom/,
+                h = /[\+\-]\d+(\.[\d]+)?%?/,
+                c = /^\w+/,
+                u = /%$/,
+                d = t.fn.position;
+            t.position = {
+                scrollbarWidth: function() {
+                    if (void 0 !== n) return n;
+                    var e, i, s = t(
+                            "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"
+                        ),
+                        o = s.children()[0];
+                    return t("body").append(s), e = o.offsetWidth, s.css("overflow", "scroll"), i = o.offsetWidth, e === i && (i = s[0]
+                        .clientWidth), s.remove(), n = e - i
+                },
+                getScrollInfo: function(e) {
+                    var i = e.isWindow || e.isDocument ? "" : e.element.css("overflow-x"),
+                        s = e.isWindow || e.isDocument ? "" : e.element.css("overflow-y"),
+                        n = "scroll" === i || "auto" === i && e.width < e.element[0].scrollWidth,
+                        o = "scroll" === s || "auto" === s && e.height < e.element[0].scrollHeight;
+                    return {
+                        width: o ? t.position.scrollbarWidth() : 0,
+                        height: n ? t.position.scrollbarWidth() : 0
+                    }
+                },
+                getWithinInfo: function(e) {
+                    var i = t(e || window),
+                        s = t.isWindow(i[0]),
+                        n = !!i[0] && 9 === i[0].nodeType,
+                        o = !s && !n;
+                    return {
+                        element: i,
+                        isWindow: s,
+                        isDocument: n,
+                        offset: o ? t(e).offset() : {
+                            left: 0,
+                            top: 0
+                        },
+                        scrollLeft: i.scrollLeft(),
+                        scrollTop: i.scrollTop(),
+                        width: i.outerWidth(),
+                        height: i.outerHeight()
+                    }
+                }
+            }, t.fn.position = function(n) {
+                if (!n || !n.of) return d.apply(this, arguments);
+                n = t.extend({}, n);
+                var u, p, f, g, m, _, v = t(n.of),
+                    b = t.position.getWithinInfo(n.within),
+                    y = t.position.getScrollInfo(b),
+                    w = (n.collision || "flip").split(" "),
+                    k = {};
+                return _ = s(v), v[0].preventDefault && (n.at = "left top"), p = _.width, f = _.height, g = _.offset, m = t.extend({}, g), t.each(["my",
+                        "at"
+                    ], function() {
+                        var t, e, i = (n[this] || "").split(" ");
+                        1 === i.length && (i = r.test(i[0]) ? i.concat(["center"]) : l.test(i[0]) ? ["center"].concat(i) : ["center", "center"]), i[
+                            0] = r.test(i[0]) ? i[0] : "center", i[1] = l.test(i[1]) ? i[1] : "center", t = h.exec(i[0]), e = h.exec(i[1]), k[
+                            this] = [t ? t[0] : 0, e ? e[0] : 0], n[this] = [c.exec(i[0])[0], c.exec(i[1])[0]]
+                    }), 1 === w.length && (w[1] = w[0]), "right" === n.at[0] ? m.left += p : "center" === n.at[0] && (m.left += p / 2), "bottom" === n
+                    .at[1] ? m.top += f : "center" === n.at[1] && (m.top += f / 2), u = e(k.at, p, f), m.left += u[0], m.top += u[1], this.each(
+                        function() {
+                            var s, r, l = t(this),
+                                h = l.outerWidth(),
+                                c = l.outerHeight(),
+                                d = i(this, "marginLeft"),
+                                _ = i(this, "marginTop"),
+                                x = h + d + i(this, "marginRight") + y.width,
+                                C = c + _ + i(this, "marginBottom") + y.height,
+                                D = t.extend({}, m),
+                                T = e(k.my, l.outerWidth(), l.outerHeight());
+                            "right" === n.my[0] ? D.left -= h : "center" === n.my[0] && (D.left -= h / 2), "bottom" === n.my[1] ? D.top -= c :
+                                "center" === n.my[1] && (D.top -= c / 2), D.left += T[0], D.top += T[1], s = {
+                                    marginLeft: d,
+                                    marginTop: _
+                                }, t.each(["left", "top"], function(e, i) {
+                                    t.ui.position[w[e]] && t.ui.position[w[e]][i](D, {
+                                        targetWidth: p,
+                                        targetHeight: f,
+                                        elemWidth: h,
+                                        elemHeight: c,
+                                        collisionPosition: s,
+                                        collisionWidth: x,
+                                        collisionHeight: C,
+                                        offset: [u[0] + T[0], u[1] + T[1]],
+                                        my: n.my,
+                                        at: n.at,
+                                        within: b,
+                                        elem: l
+                                    })
+                                }), n.using && (r = function(t) {
+                                    var e = g.left - D.left,
+                                        i = e + p - h,
+                                        s = g.top - D.top,
+                                        r = s + f - c,
+                                        u = {
+                                            target: {
+                                                element: v,
+                                                left: g.left,
+                                                top: g.top,
+                                                width: p,
+                                                height: f
+                                            },
+                                            element: {
+                                                element: l,
+                                                left: D.left,
+                                                top: D.top,
+                                                width: h,
+                                                height: c
+                                            },
+                                            horizontal: 0 > i ? "left" : e > 0 ? "right" : "center",
+                                            vertical: 0 > r ? "top" : s > 0 ? "bottom" : "middle"
+                                        };
+                                    h > p && p > a(e + i) && (u.horizontal = "center"), c > f && f > a(s + r) && (u.vertical = "middle"), u
+                                        .important = o(a(e), a(i)) > o(a(s), a(r)) ? "horizontal" : "vertical", n.using.call(this, t, u)
+                                }), l.offset(t.extend(D, {
+                                    using: r
+                                }))
+                        })
+            }, t.ui.position = {
+                fit: {
+                    left: function(t, e) {
+                        var i, s = e.within,
+                            n = s.isWindow ? s.scrollLeft : s.offset.left,
+                            a = s.width,
+                            r = t.left - e.collisionPosition.marginLeft,
+                            l = n - r,
+                            h = r + e.collisionWidth - a - n;
+                        e.collisionWidth > a ? l > 0 && 0 >= h ? (i = t.left + l + e.collisionWidth - a - n, t.left += l - i) : t.left = h > 0 &&
+                            0 >= l ? n : l > h ? n + a - e.collisionWidth : n : l > 0 ? t.left += l : h > 0 ? t.left -= h : t.left = o(t.left - r, t
+                                .left)
+                    },
+                    top: function(t, e) {
+                        var i, s = e.within,
+                            n = s.isWindow ? s.scrollTop : s.offset.top,
+                            a = e.within.height,
+                            r = t.top - e.collisionPosition.marginTop,
+                            l = n - r,
+                            h = r + e.collisionHeight - a - n;
+                        e.collisionHeight > a ? l > 0 && 0 >= h ? (i = t.top + l + e.collisionHeight - a - n, t.top += l - i) : t.top = h > 0 &&
+                            0 >= l ? n : l > h ? n + a - e.collisionHeight : n : l > 0 ? t.top += l : h > 0 ? t.top -= h : t.top = o(t.top - r, t
+                                .top)
+                    }
+                },
+                flip: {
+                    left: function(t, e) {
+                        var i, s, n = e.within,
+                            o = n.offset.left + n.scrollLeft,
+                            r = n.width,
+                            l = n.isWindow ? n.scrollLeft : n.offset.left,
+                            h = t.left - e.collisionPosition.marginLeft,
+                            c = h - l,
+                            u = h + e.collisionWidth - r - l,
+                            d = "left" === e.my[0] ? -e.elemWidth : "right" === e.my[0] ? e.elemWidth : 0,
+                            p = "left" === e.at[0] ? e.targetWidth : "right" === e.at[0] ? -e.targetWidth : 0,
+                            f = -2 * e.offset[0];
+                        0 > c ? (i = t.left + d + p + f + e.collisionWidth - r - o, (0 > i || a(c) > i) && (t.left += d + p + f)) : u > 0 && (s = t
+                            .left - e.collisionPosition.marginLeft + d + p + f - l, (s > 0 || u > a(s)) && (t.left += d + p + f))
+                    },
+                    top: function(t, e) {
+                        var i, s, n = e.within,
+                            o = n.offset.top + n.scrollTop,
+                            r = n.height,
+                            l = n.isWindow ? n.scrollTop : n.offset.top,
+                            h = t.top - e.collisionPosition.marginTop,
+                            c = h - l,
+                            u = h + e.collisionHeight - r - l,
+                            d = "top" === e.my[1],
+                            p = d ? -e.elemHeight : "bottom" === e.my[1] ? e.elemHeight : 0,
+                            f = "top" === e.at[1] ? e.targetHeight : "bottom" === e.at[1] ? -e.targetHeight : 0,
+                            g = -2 * e.offset[1];
+                        0 > c ? (s = t.top + p + f + g + e.collisionHeight - r - o, (0 > s || a(c) > s) && (t.top += p + f + g)) : u > 0 && (i = t
+                            .top - e.collisionPosition.marginTop + p + f + g - l, (i > 0 || u > a(i)) && (t.top += p + f + g))
+                    }
+                },
+                flipfit: {
+                    left: function() {
+                        t.ui.position.flip.left.apply(this, arguments), t.ui.position.fit.left.apply(this, arguments)
+                    },
+                    top: function() {
+                        t.ui.position.flip.top.apply(this, arguments), t.ui.position.fit.top.apply(this, arguments)
+                    }
+                }
+            }
+        }(), t.ui.position, t.extend(t.expr[":"], {
+            data: t.expr.createPseudo ? t.expr.createPseudo(function(e) {
+                return function(i) {
+                    return !!t.data(i, e)
+                }
+            }) : function(e, i, s) {
+                return !!t.data(e, s[3])
+            }
+        }), t.fn.extend({
+            disableSelection: function() {
+                var t = "onselectstart" in document.createElement("div") ? "selectstart" : "mousedown";
+                return function() {
+                    return this.on(t + ".ui-disableSelection", function(t) {
+                        t.preventDefault()
+                    })
+                }
+            }(),
+            enableSelection: function() {
+                return this.off(".ui-disableSelection")
+            }
+        }), t.ui.focusable = function(i, s) {
+            var n, o, a, r, l, h = i.nodeName.toLowerCase();
+            return "area" === h ? (n = i.parentNode, o = n.name, i.href && o && "map" === n.nodeName.toLowerCase() ? (a = t("img[usemap='#" + o + "']"), a
+                .length > 0 && a.is(":visible")) : !1) : (/^(input|select|textarea|button|object)$/.test(h) ? (r = !i.disabled, r && (l = t(i).closest(
+                "fieldset")[0], l && (r = !l.disabled))) : r = "a" === h ? i.href || s : s, r && t(i).is(":visible") && e(t(i)))
+        }, t.extend(t.expr[":"], {
+            focusable: function(e) {
+                return t.ui.focusable(e, null != t.attr(e, "tabindex"))
+            }
+        }), t.ui.focusable, t.ui.keyCode = {
+            BACKSPACE: 8,
+            COMMA: 188,
+            DELETE: 46,
+            DOWN: 40,
+            END: 35,
+            ENTER: 13,
+            ESCAPE: 27,
+            HOME: 36,
+            LEFT: 37,
+            PAGE_DOWN: 34,
+            PAGE_UP: 33,
+            PERIOD: 190,
+            RIGHT: 39,
+            SPACE: 32,
+            TAB: 9,
+            UP: 38
+        }, t.fn.scrollParent = function(e) {
+            var i = this.css("position"),
+                s = "absolute" === i,
+                n = e ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+                o = this.parents().filter(function() {
+                    var e = t(this);
+                    return s && "static" === e.css("position") ? !1 : n.test(e.css("overflow") + e.css("overflow-y") + e.css("overflow-x"))
+                }).eq(0);
+            return "fixed" !== i && o.length ? o : t(this[0].ownerDocument || document)
+        }, t.fn.extend({
+            uniqueId: function() {
+                var t = 0;
+                return function() {
+                    return this.each(function() {
+                        this.id || (this.id = "ui-id-" + ++t)
+                    })
+                }
+            }(),
+            removeUniqueId: function() {
+                return this.each(function() {
+                    /^ui-id-\d+$/.test(this.id) && t(this).removeAttr("id")
+                })
+            }
+        }), t.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());
+    var n = !1;
+    t(document).on("mouseup", function() {
+        n = !1
+    }), t.widget("ui.mouse", {
+        version: "1.12.1",
+        options: {
+            cancel: "input, textarea, button, select, option",
+            distance: 1,
+            delay: 0
+        },
+        _mouseInit: function() {
+            var e = this;
+            this.element.on("mousedown." + this.widgetName, function(t) {
+                return e._mouseDown(t)
+            }).on("click." + this.widgetName, function(i) {
+                return !0 === t.data(i.target, e.widgetName + ".preventClickEvent") ? (t.removeData(i.target, e.widgetName +
+                    ".preventClickEvent"), i.stopImmediatePropagation(), !1) : void 0
+            }), this.started = !1
+        },
+        _mouseDestroy: function() {
+            this.element.off("." + this.widgetName), this._mouseMoveDelegate && this.document.off("mousemove." + this.widgetName, this
+                ._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate)
+        },
+        _mouseDown: function(e) {
+            if (!n) {
+                this._mouseMoved = !1, this._mouseStarted && this._mouseUp(e), this._mouseDownEvent = e;
+                var i = this,
+                    s = 1 === e.which,
+                    o = "string" == typeof this.options.cancel && e.target.nodeName ? t(e.target).closest(this.options.cancel).length : !1;
+                return s && !o && this._mouseCapture(e) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this
+                    ._mouseDelayTimer = setTimeout(function() {
+                        i.mouseDelayMet = !0
+                    }, this.options.delay)), this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = this
+                    ._mouseStart(e) !== !1, !this._mouseStarted) ? (e.preventDefault(), !0) : (!0 === t.data(e.target, this.widgetName +
+                        ".preventClickEvent") && t.removeData(e.target, this.widgetName + ".preventClickEvent"), this
+                    ._mouseMoveDelegate = function(t) {
+                        return i._mouseMove(t)
+                    }, this._mouseUpDelegate = function(t) {
+                        return i._mouseUp(t)
+                    }, this.document.on("mousemove." + this.widgetName, this._mouseMoveDelegate).on("mouseup." + this.widgetName, this
+                        ._mouseUpDelegate), e.preventDefault(), n = !0, !0)) : !0
+            }
+        },
+        _mouseMove: function(e) {
+            if (this._mouseMoved) {
+                if (t.ui.ie && (!document.documentMode || 9 > document.documentMode) && !e.button) return this._mouseUp(e);
+                if (!e.which)
+                    if (e.originalEvent.altKey || e.originalEvent.ctrlKey || e.originalEvent.metaKey || e.originalEvent.shiftKey) this
+                        .ignoreMissingWhich = !0;
+                    else if (!this.ignoreMissingWhich) return this._mouseUp(e)
+            }
+            return (e.which || e.button) && (this._mouseMoved = !0), this._mouseStarted ? (this._mouseDrag(e), e.preventDefault()) : (this
+                ._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, e) !== !1,
+                    this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e)), !this._mouseStarted)
+        },
+        _mouseUp: function(e) {
+            this.document.off("mousemove." + this.widgetName, this._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate),
+                this._mouseStarted && (this._mouseStarted = !1, e.target === this._mouseDownEvent.target && t.data(e.target, this.widgetName +
+                    ".preventClickEvent", !0), this._mouseStop(e)), this._mouseDelayTimer && (clearTimeout(this._mouseDelayTimer), delete this
+                    ._mouseDelayTimer), this.ignoreMissingWhich = !1, n = !1, e.preventDefault()
+        },
+        _mouseDistanceMet: function(t) {
+            return Math.max(Math.abs(this._mouseDownEvent.pageX - t.pageX), Math.abs(this._mouseDownEvent.pageY - t.pageY)) >= this.options
+                .distance
+        },
+        _mouseDelayMet: function() {
+            return this.mouseDelayMet
+        },
+        _mouseStart: function() {},
+        _mouseDrag: function() {},
+        _mouseStop: function() {},
+        _mouseCapture: function() {
+            return !0
+        }
+    }), t.ui.plugin = {
+        add: function(e, i, s) {
+            var n, o = t.ui[e].prototype;
+            for (n in s) o.plugins[n] = o.plugins[n] || [], o.plugins[n].push([i, s[n]])
+        },
+        call: function(t, e, i, s) {
+            var n, o = t.plugins[e];
+            if (o && (s || t.element[0].parentNode && 11 !== t.element[0].parentNode.nodeType))
+                for (n = 0; o.length > n; n++) t.options[o[n][0]] && o[n][1].apply(t.element, i)
+        }
+    }, t.ui.safeActiveElement = function(t) {
+        var e;
+        try {
+            e = t.activeElement
+        } catch (i) {
+            e = t.body
+        }
+        return e || (e = t.body), e.nodeName || (e = t.body), e
+    }, t.ui.safeBlur = function(e) {
+        e && "body" !== e.nodeName.toLowerCase() && t(e).trigger("blur")
+    }, t.widget("ui.draggable", t.ui.mouse, {
+        version: "1.12.1",
+        widgetEventPrefix: "drag",
+        options: {
+            addClasses: !0,
+            appendTo: "parent",
+            axis: !1,
+            connectToSortable: !1,
+            containment: !1,
+            cursor: "auto",
+            cursorAt: !1,
+            grid: !1,
+            handle: !1,
+            helper: "original",
+            iframeFix: !1,
+            opacity: !1,
+            refreshPositions: !1,
+            revert: !1,
+            revertDuration: 500,
+            scope: "default",
+            scroll: !0,
+            scrollSensitivity: 20,
+            scrollSpeed: 20,
+            snap: !1,
+            snapMode: "both",
+            snapTolerance: 20,
+            stack: !1,
+            zIndex: !1,
+            drag: null,
+            start: null,
+            stop: null
+        },
+        _create: function() {
+            "original" === this.options.helper && this._setPositionRelative(), this.options.addClasses && this._addClass("ui-draggable"), this
+                ._setHandleClassName(), this._mouseInit()
+        },
+        _setOption: function(t, e) {
+            this._super(t, e), "handle" === t && (this._removeHandleClassName(), this._setHandleClassName())
+        },
+        _destroy: function() {
+            return (this.helper || this.element).is(".ui-draggable-dragging") ? (this.destroyOnClear = !0, void 0) : (this
+                ._removeHandleClassName(), this._mouseDestroy(), void 0)
+        },
+        _mouseCapture: function(e) {
+            var i = this.options;
+            return this.helper || i.disabled || t(e.target).closest(".ui-resizable-handle").length > 0 ? !1 : (this.handle = this._getHandle(e),
+                this.handle ? (this._blurActiveElement(e), this._blockFrames(i.iframeFix === !0 ? "iframe" : i.iframeFix), !0) : !1)
+        },
+        _blockFrames: function(e) {
+            this.iframeBlocks = this.document.find(e).map(function() {
+                var e = t(this);
+                return t("<div>").css("position", "absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e
+                    .outerHeight()).offset(e.offset())[0]
+            })
+        },
+        _unblockFrames: function() {
+            this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
+        },
+        _blurActiveElement: function(e) {
+            var i = t.ui.safeActiveElement(this.document[0]),
+                s = t(e.target);
+            s.closest(i).length || t.ui.safeBlur(i)
+        },
+        _mouseStart: function(e) {
+            var i = this.options;
+            return this.helper = this._createHelper(e), this._addClass(this.helper, "ui-draggable-dragging"), this._cacheHelperProportions(), t
+                .ui.ddmanager && (t.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this
+                .scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.hasFixedAncestor = this
+                .helper.parents().filter(function() {
+                    return "fixed" === t(this).css("position")
+                }).length > 0, this.positionAbs = this.element.offset(), this._refreshOffsets(e), this.originalPosition = this.position = this
+                ._generatePosition(e, !1), this.originalPageX = e.pageX, this.originalPageY = e.pageY, i.cursorAt && this
+                ._adjustOffsetFromHelper(i.cursorAt), this._setContainment(), this._trigger("start", e) === !1 ? (this._clear(), !1) : (this
+                    ._cacheHelperProportions(), t.ui.ddmanager && !i.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this._mouseDrag(e,
+                        !0), t.ui.ddmanager && t.ui.ddmanager.dragStart(this, e), !0)
+        },
+        _refreshOffsets: function(t) {
+            this.offset = {
+                top: this.positionAbs.top - this.margins.top,
+                left: this.positionAbs.left - this.margins.left,
+                scroll: !1,
+                parent: this._getParentOffset(),
+                relative: this._getRelativeOffset()
+            }, this.offset.click = {
+                left: t.pageX - this.offset.left,
+                top: t.pageY - this.offset.top
+            }
+        },
+        _mouseDrag: function(e, i) {
+            if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(e, !0), this
+                .positionAbs = this._convertPositionTo("absolute"), !i) {
+                var s = this._uiHash();
+                if (this._trigger("drag", e, s) === !1) return this._mouseUp(new t.Event("mouseup", e)), !1;
+                this.position = s.position
+            }
+            return this.helper[0].style.left = this.position.left + "px", this.helper[0].style.top = this.position.top + "px", t.ui.ddmanager &&
+                t.ui.ddmanager.drag(this, e), !1
+        },
+        _mouseStop: function(e) {
+            var i = this,
+                s = !1;
+            return t.ui.ddmanager && !this.options.dropBehaviour && (s = t.ui.ddmanager.drop(this, e)), this.dropped && (s = this.dropped, this
+                    .dropped = !1), "invalid" === this.options.revert && !s || "valid" === this.options.revert && s || this.options.revert === !
+                0 || t.isFunction(this.options.revert) && this.options.revert.call(this.element, s) ? t(this.helper).animate(this
+                    .originalPosition, parseInt(this.options.revertDuration, 10),
+                    function() {
+                        i._trigger("stop", e) !== !1 && i._clear()
+                    }) : this._trigger("stop", e) !== !1 && this._clear(), !1
+        },
+        _mouseUp: function(e) {
+            return this._unblockFrames(), t.ui.ddmanager && t.ui.ddmanager.dragStop(this, e), this.handleElement.is(e.target) && this.element
+                .trigger("focus"), t.ui.mouse.prototype._mouseUp.call(this, e)
+        },
+        cancel: function() {
+            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp(new t.Event("mouseup", {
+                target: this.element[0]
+            })) : this._clear(), this
+        },
+        _getHandle: function(e) {
+            return this.options.handle ? !!t(e.target).closest(this.element.find(this.options.handle)).length : !0
+        },
+        _setHandleClassName: function() {
+            this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this._addClass(this.handleElement,
+                "ui-draggable-handle")
+        },
+        _removeHandleClassName: function() {
+            this._removeClass(this.handleElement, "ui-draggable-handle")
+        },
+        _createHelper: function(e) {
+            var i = this.options,
+                s = t.isFunction(i.helper),
+                n = s ? t(i.helper.apply(this.element[0], [e])) : "clone" === i.helper ? this.element.clone().removeAttr("id") : this.element;
+            return n.parents("body").length || n.appendTo("parent" === i.appendTo ? this.element[0].parentNode : i.appendTo), s && n[0] === this
+                .element[0] && this._setPositionRelative(), n[0] === this.element[0] || /(fixed|absolute)/.test(n.css("position")) || n.css(
+                    "position", "absolute"), n
+        },
+        _setPositionRelative: function() {
+            /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative")
+        },
+        _adjustOffsetFromHelper: function(e) {
+            "string" == typeof e && (e = e.split(" ")), t.isArray(e) && (e = {
+                    left: +e[0],
+                    top: +e[1] || 0
+                }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this
+                    .helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top),
+                "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
+        },
+        _isRootNode: function(t) {
+            return /(html|body)/i.test(t.tagName) || t === this.document[0]
+        },
+        _getParentOffset: function() {
+            var e = this.offsetParent.offset(),
+                i = this.document[0];
+            return "absolute" === this.cssPosition && this.scrollParent[0] !== i && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e
+                    .left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) &&
+                (e = {
+                    top: 0,
+                    left: 0
+                }), {
+                    top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+                    left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+                }
+        },
+        _getRelativeOffset: function() {
+            if ("relative" !== this.cssPosition) return {
+                top: 0,
+                left: 0
+            };
+            var t = this.element.position(),
+                e = this._isRootNode(this.scrollParent[0]);
+            return {
+                top: t.top - (parseInt(this.helper.css("top"), 10) || 0) + (e ? 0 : this.scrollParent.scrollTop()),
+                left: t.left - (parseInt(this.helper.css("left"), 10) || 0) + (e ? 0 : this.scrollParent.scrollLeft())
+            }
+        },
+        _cacheMargins: function() {
+            this.margins = {
+                left: parseInt(this.element.css("marginLeft"), 10) || 0,
+                top: parseInt(this.element.css("marginTop"), 10) || 0,
+                right: parseInt(this.element.css("marginRight"), 10) || 0,
+                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
+            }
+        },
+        _cacheHelperProportions: function() {
+            this.helperProportions = {
+                width: this.helper.outerWidth(),
+                height: this.helper.outerHeight()
+            }
+        },
+        _setContainment: function() {
+            var e, i, s, n = this.options,
+                o = this.document[0];
+            return this.relativeContainer = null, n.containment ? "window" === n.containment ? (this.containment = [t(window).scrollLeft() -
+                this.offset.relative.left - this.offset.parent.left, t(window).scrollTop() - this.offset.relative.top - this.offset
+                .parent.top, t(window).scrollLeft() + t(window).width() - this.helperProportions.width - this.margins.left, t(window)
+                .scrollTop() + (t(window).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+            ], void 0) : "document" === n.containment ? (this.containment = [0, 0, t(o).width() - this.helperProportions.width - this
+                .margins.left, (t(o).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+            ], void 0) : n.containment.constructor === Array ? (this.containment = n.containment, void 0) : ("parent" === n.containment && (
+                n.containment = this.helper[0].parentNode), i = t(n.containment), s = i[0], s && (e = /(scroll|auto)/.test(i.css(
+                "overflow")), this.containment = [(parseInt(i.css("borderLeftWidth"), 10) || 0) + (parseInt(i.css("paddingLeft"),
+                    10) || 0), (parseInt(i.css("borderTopWidth"), 10) || 0) + (parseInt(i.css("paddingTop"), 10) || 0), (e ? Math
+                    .max(s.scrollWidth, s.offsetWidth) : s.offsetWidth) - (parseInt(i.css("borderRightWidth"), 10) || 0) - (
+                    parseInt(i.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins
+                .right, (e ? Math.max(s.scrollHeight, s.offsetHeight) : s.offsetHeight) - (parseInt(i.css("borderBottomWidth"),
+                    10) || 0) - (parseInt(i.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top -
+                this.margins.bottom
+            ], this.relativeContainer = i), void 0) : (this.containment = null, void 0)
+        },
+        _convertPositionTo: function(t, e) {
+            e || (e = this.position);
+            var i = "absolute" === t ? 1 : -1,
+                s = this._isRootNode(this.scrollParent[0]);
+            return {
+                top: e.top + this.offset.relative.top * i + this.offset.parent.top * i - ("fixed" === this.cssPosition ? -this.offset.scroll
+                    .top : s ? 0 : this.offset.scroll.top) * i,
+                left: e.left + this.offset.relative.left * i + this.offset.parent.left * i - ("fixed" === this.cssPosition ? -this.offset.scroll
+                    .left : s ? 0 : this.offset.scroll.left) * i
+            }
+        },
+        _generatePosition: function(t, e) {
+            var i, s, n, o, a = this.options,
+                r = this._isRootNode(this.scrollParent[0]),
+                l = t.pageX,
+                h = t.pageY;
+            return r && this.offset.scroll || (this.offset.scroll = {
+                top: this.scrollParent.scrollTop(),
+                left: this.scrollParent.scrollLeft()
+            }), e && (this.containment && (this.relativeContainer ? (s = this.relativeContainer.offset(), i = [this.containment[0] + s.left,
+                        this.containment[1] + s.top, this.containment[2] + s.left, this.containment[3] + s.top
+                    ]) : i = this.containment, t.pageX - this.offset.click.left < i[0] && (l = i[0] + this.offset.click.left), t.pageY -
+                    this.offset.click.top < i[1] && (h = i[1] + this.offset.click.top), t.pageX - this.offset.click.left > i[2] && (l = i[
+                        2] + this.offset.click.left), t.pageY - this.offset.click.top > i[3] && (h = i[3] + this.offset.click.top)), a
+                .grid && (n = a.grid[1] ? this.originalPageY + Math.round((h - this.originalPageY) / a.grid[1]) * a.grid[1] : this
+                    .originalPageY, h = i ? n - this.offset.click.top >= i[1] || n - this.offset.click.top > i[3] ? n : n - this.offset
+                    .click.top >= i[1] ? n - a.grid[1] : n + a.grid[1] : n, o = a.grid[0] ? this.originalPageX + Math.round((l - this
+                        .originalPageX) / a.grid[0]) * a.grid[0] : this.originalPageX, l = i ? o - this.offset.click.left >= i[0] || o -
+                    this.offset.click.left > i[2] ? o : o - this.offset.click.left >= i[0] ? o - a.grid[0] : o + a.grid[0] : o), "y" === a
+                .axis && (l = this.originalPageX), "x" === a.axis && (h = this.originalPageY)), {
+                top: h - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this
+                    .offset.scroll.top : r ? 0 : this.offset.scroll.top),
+                left: l - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -
+                    this.offset.scroll.left : r ? 0 : this.offset.scroll.left)
+            }
+        },
+        _clear: function() {
+            this._removeClass(this.helper, "ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this
+                .helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy()
+        },
+        _trigger: function(e, i, s) {
+            return s = s || this._uiHash(), t.ui.plugin.call(this, e, [i, s, this], !0), /^(drag|start|stop)/.test(e) && (this.positionAbs =
+                this._convertPositionTo("absolute"), s.offset = this.positionAbs), t.Widget.prototype._trigger.call(this, e, i, s)
+        },
+        plugins: {},
+        _uiHash: function() {
+            return {
+                helper: this.helper,
+                position: this.position,
+                originalPosition: this.originalPosition,
+                offset: this.positionAbs
+            }
+        }
+    }), t.ui.plugin.add("draggable", "connectToSortable", {
+        start: function(e, i, s) {
+            var n = t.extend({}, i, {
+                item: s.element
+            });
+            s.sortables = [], t(s.options.connectToSortable).each(function() {
+                var i = t(this).sortable("instance");
+                i && !i.options.disabled && (s.sortables.push(i), i.refreshPositions(), i._trigger("activate", e, n))
+            })
+        },
+        stop: function(e, i, s) {
+            var n = t.extend({}, i, {
+                item: s.element
+            });
+            s.cancelHelperRemoval = !1, t.each(s.sortables, function() {
+                var t = this;
+                t.isOver ? (t.isOver = 0, s.cancelHelperRemoval = !0, t.cancelHelperRemoval = !1, t._storedCSS = {
+                    position: t.placeholder.css("position"),
+                    top: t.placeholder.css("top"),
+                    left: t.placeholder.css("left")
+                }, t._mouseStop(e), t.options.helper = t.options._helper) : (t.cancelHelperRemoval = !0, t._trigger("deactivate", e,
+                    n))
+            })
+        },
+        drag: function(e, i, s) {
+            t.each(s.sortables, function() {
+                var n = !1,
+                    o = this;
+                o.positionAbs = s.positionAbs, o.helperProportions = s.helperProportions, o.offset.click = s.offset.click, o
+                    ._intersectsWith(o.containerCache) && (n = !0, t.each(s.sortables, function() {
+                        return this.positionAbs = s.positionAbs, this.helperProportions = s.helperProportions, this.offset
+                            .click = s.offset.click, this !== o && this._intersectsWith(this.containerCache) && t.contains(o
+                                .element[0], this.element[0]) && (n = !1), n
+                    })), n ? (o.isOver || (o.isOver = 1, s._parent = i.helper.parent(), o.currentItem = i.helper.appendTo(o.element)
+                        .data("ui-sortable-item", !0), o.options._helper = o.options.helper, o.options.helper = function() {
+                            return i.helper[0]
+                        }, e.target = o.currentItem[0], o._mouseCapture(e, !0), o._mouseStart(e, !0, !0), o.offset.click.top = s
+                        .offset.click.top, o.offset.click.left = s.offset.click.left, o.offset.parent.left -= s.offset.parent.left -
+                        o.offset.parent.left, o.offset.parent.top -= s.offset.parent.top - o.offset.parent.top, s._trigger(
+                            "toSortable", e), s.dropped = o.element, t.each(s.sortables, function() {
+                            this.refreshPositions()
+                        }), s.currentItem = s.element, o.fromOutside = s), o.currentItem && (o._mouseDrag(e), i.position = o
+                        .position)) : o.isOver && (o.isOver = 0, o.cancelHelperRemoval = !0, o.options._revert = o.options.revert, o
+                        .options.revert = !1, o._trigger("out", e, o._uiHash(o)), o._mouseStop(e, !0), o.options.revert = o.options
+                        ._revert, o.options.helper = o.options._helper, o.placeholder && o.placeholder.remove(), i.helper.appendTo(s
+                            ._parent), s._refreshOffsets(e), i.position = s._generatePosition(e, !0), s._trigger("fromSortable", e), s
+                        .dropped = !1, t.each(s.sortables, function() {
+                            this.refreshPositions()
+                        }))
+            })
+        }
+    }), t.ui.plugin.add("draggable", "cursor", {
+        start: function(e, i, s) {
+            var n = t("body"),
+                o = s.options;
+            n.css("cursor") && (o._cursor = n.css("cursor")), n.css("cursor", o.cursor)
+        },
+        stop: function(e, i, s) {
+            var n = s.options;
+            n._cursor && t("body").css("cursor", n._cursor)
+        }
+    }), t.ui.plugin.add("draggable", "opacity", {
+        start: function(e, i, s) {
+            var n = t(i.helper),
+                o = s.options;
+            n.css("opacity") && (o._opacity = n.css("opacity")), n.css("opacity", o.opacity)
+        },
+        stop: function(e, i, s) {
+            var n = s.options;
+            n._opacity && t(i.helper).css("opacity", n._opacity)
+        }
+    }), t.ui.plugin.add("draggable", "scroll", {
+        start: function(t, e, i) {
+            i.scrollParentNotHidden || (i.scrollParentNotHidden = i.helper.scrollParent(!1)), i.scrollParentNotHidden[0] !== i.document[0] &&
+                "HTML" !== i.scrollParentNotHidden[0].tagName && (i.overflowOffset = i.scrollParentNotHidden.offset())
+        },
+        drag: function(e, i, s) {
+            var n = s.options,
+                o = !1,
+                a = s.scrollParentNotHidden[0],
+                r = s.document[0];
+            a !== r && "HTML" !== a.tagName ? (n.axis && "x" === n.axis || (s.overflowOffset.top + a.offsetHeight - e.pageY < n
+                    .scrollSensitivity ? a.scrollTop = o = a.scrollTop + n.scrollSpeed : e.pageY - s.overflowOffset.top < n
+                    .scrollSensitivity && (a.scrollTop = o = a.scrollTop - n.scrollSpeed)), n.axis && "y" === n.axis || (s.overflowOffset
+                    .left + a.offsetWidth - e.pageX < n.scrollSensitivity ? a.scrollLeft = o = a.scrollLeft + n.scrollSpeed : e.pageX - s
+                    .overflowOffset.left < n.scrollSensitivity && (a.scrollLeft = o = a.scrollLeft - n.scrollSpeed))) : (n.axis && "x" === n
+                    .axis || (e.pageY - t(r).scrollTop() < n.scrollSensitivity ? o = t(r).scrollTop(t(r).scrollTop() - n.scrollSpeed) : t(
+                        window).height() - (e.pageY - t(r).scrollTop()) < n.scrollSensitivity && (o = t(r).scrollTop(t(r).scrollTop() + n
+                        .scrollSpeed))), n.axis && "y" === n.axis || (e.pageX - t(r).scrollLeft() < n.scrollSensitivity ? o = t(r).scrollLeft(t(
+                        r).scrollLeft() - n.scrollSpeed) : t(window).width() - (e.pageX - t(r).scrollLeft()) < n.scrollSensitivity && (o =
+                        t(r).scrollLeft(t(r).scrollLeft() + n.scrollSpeed)))), o !== !1 && t.ui.ddmanager && !n.dropBehaviour && t.ui.ddmanager
+                .prepareOffsets(s, e)
+        }
+    }), t.ui.plugin.add("draggable", "snap", {
+        start: function(e, i, s) {
+            var n = s.options;
+            s.snapElements = [], t(n.snap.constructor !== String ? n.snap.items || ":data(ui-draggable)" : n.snap).each(function() {
+                var e = t(this),
+                    i = e.offset();
+                this !== s.element[0] && s.snapElements.push({
+                    item: this,
+                    width: e.outerWidth(),
+                    height: e.outerHeight(),
+                    top: i.top,
+                    left: i.left
+                })
+            })
+        },
+        drag: function(e, i, s) {
+            var n, o, a, r, l, h, c, u, d, p, f = s.options,
+                g = f.snapTolerance,
+                m = i.offset.left,
+                _ = m + s.helperProportions.width,
+                v = i.offset.top,
+                b = v + s.helperProportions.height;
+            for (d = s.snapElements.length - 1; d >= 0; d--) l = s.snapElements[d].left - s.margins.left, h = l + s.snapElements[d].width, c = s
+                .snapElements[d].top - s.margins.top, u = c + s.snapElements[d].height, l - g > _ || m > h + g || c - g > b || v > u + g || !t
+                .contains(s.snapElements[d].item.ownerDocument, s.snapElements[d].item) ? (s.snapElements[d].snapping && s.options.snap
+                    .release && s.options.snap.release.call(s.element, e, t.extend(s._uiHash(), {
+                        snapItem: s.snapElements[d].item
+                    })), s.snapElements[d].snapping = !1) : ("inner" !== f.snapMode && (n = g >= Math.abs(c - b), o = g >= Math.abs(u - v), a =
+                    g >= Math.abs(l - _), r = g >= Math.abs(h - m), n && (i.position.top = s._convertPositionTo("relative", {
+                        top: c - s.helperProportions.height,
+                        left: 0
+                    }).top), o && (i.position.top = s._convertPositionTo("relative", {
+                        top: u,
+                        left: 0
+                    }).top), a && (i.position.left = s._convertPositionTo("relative", {
+                        top: 0,
+                        left: l - s.helperProportions.width
+                    }).left), r && (i.position.left = s._convertPositionTo("relative", {
+                        top: 0,
+                        left: h
+                    }).left)), p = n || o || a || r, "outer" !== f.snapMode && (n = g >= Math.abs(c - v), o = g >= Math.abs(u - b), a = g >=
+                    Math.abs(l - m), r = g >= Math.abs(h - _), n && (i.position.top = s._convertPositionTo("relative", {
+                        top: c,
+                        left: 0
+                    }).top), o && (i.position.top = s._convertPositionTo("relative", {
+                        top: u - s.helperProportions.height,
+                        left: 0
+                    }).top), a && (i.position.left = s._convertPositionTo("relative", {
+                        top: 0,
+                        left: l
+                    }).left), r && (i.position.left = s._convertPositionTo("relative", {
+                        top: 0,
+                        left: h - s.helperProportions.width
+                    }).left)), !s.snapElements[d].snapping && (n || o || a || r || p) && s.options.snap.snap && s.options.snap.snap.call(s
+                    .element, e, t.extend(s._uiHash(), {
+                        snapItem: s.snapElements[d].item
+                    })), s.snapElements[d].snapping = n || o || a || r || p)
+        }
+    }), t.ui.plugin.add("draggable", "stack", {
+        start: function(e, i, s) {
+            var n, o = s.options,
+                a = t.makeArray(t(o.stack)).sort(function(e, i) {
+                    return (parseInt(t(e).css("zIndex"), 10) || 0) - (parseInt(t(i).css("zIndex"), 10) || 0)
+                });
+            a.length && (n = parseInt(t(a[0]).css("zIndex"), 10) || 0, t(a).each(function(e) {
+                t(this).css("zIndex", n + e)
+            }), this.css("zIndex", n + a.length))
+        }
+    }), t.ui.plugin.add("draggable", "zIndex", {
+        start: function(e, i, s) {
+            var n = t(i.helper),
+                o = s.options;
+            n.css("zIndex") && (o._zIndex = n.css("zIndex")), n.css("zIndex", o.zIndex)
+        },
+        stop: function(e, i, s) {
+            var n = s.options;
+            n._zIndex && t(i.helper).css("zIndex", n._zIndex)
+        }
+    }), t.ui.draggable, t.widget("ui.droppable", {
+        version: "1.12.1",
+        widgetEventPrefix: "drop",
+        options: {
+            accept: "*",
+            addClasses: !0,
+            greedy: !1,
+            scope: "default",
+            tolerance: "intersect",
+            activate: null,
+            deactivate: null,
+            drop: null,
+            out: null,
+            over: null
+        },
+        _create: function() {
+            var e, i = this.options,
+                s = i.accept;
+            this.isover = !1, this.isout = !0, this.accept = t.isFunction(s) ? s : function(t) {
+                return t.is(s)
+            }, this.proportions = function() {
+                return arguments.length ? (e = arguments[0], void 0) : e ? e : e = {
+                    width: this.element[0].offsetWidth,
+                    height: this.element[0].offsetHeight
+                }
+            }, this._addToManager(i.scope), i.addClasses && this._addClass("ui-droppable")
+        },
+        _addToManager: function(e) {
+            t.ui.ddmanager.droppables[e] = t.ui.ddmanager.droppables[e] || [], t.ui.ddmanager.droppables[e].push(this)
+        },
+        _splice: function(t) {
+            for (var e = 0; t.length > e; e++) t[e] === this && t.splice(e, 1)
+        },
+        _destroy: function() {
+            var e = t.ui.ddmanager.droppables[this.options.scope];
+            this._splice(e)
+        },
+        _setOption: function(e, i) {
+            if ("accept" === e) this.accept = t.isFunction(i) ? i : function(t) {
+                return t.is(i)
+            };
+            else if ("scope" === e) {
+                var s = t.ui.ddmanager.droppables[this.options.scope];
+                this._splice(s), this._addToManager(i)
+            }
+            this._super(e, i)
+        },
+        _activate: function(e) {
+            var i = t.ui.ddmanager.current;
+            this._addActiveClass(), i && this._trigger("activate", e, this.ui(i))
+        },
+        _deactivate: function(e) {
+            var i = t.ui.ddmanager.current;
+            this._removeActiveClass(), i && this._trigger("deactivate", e, this.ui(i))
+        },
+        _over: function(e) {
+            var i = t.ui.ddmanager.current;
+            i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this
+                ._addHoverClass(), this._trigger("over", e, this.ui(i)))
+        },
+        _out: function(e) {
+            var i = t.ui.ddmanager.current;
+            i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this
+                ._removeHoverClass(), this._trigger("out", e, this.ui(i)))
+        },
+        _drop: function(e, i) {
+            var s = i || t.ui.ddmanager.current,
+                n = !1;
+            return s && (s.currentItem || s.element)[0] !== this.element[0] ? (this.element.find(":data(ui-droppable)").not(
+                ".ui-draggable-dragging").each(function() {
+                var i = t(this).droppable("instance");
+                return i.options.greedy && !i.options.disabled && i.options.scope === s.options.scope && i.accept.call(i.element[0],
+                    s.currentItem || s.element) && o(s, t.extend(i, {
+                    offset: i.element.offset()
+                }), i.options.tolerance, e) ? (n = !0, !1) : void 0
+            }), n ? !1 : this.accept.call(this.element[0], s.currentItem || s.element) ? (this._removeActiveClass(), this
+                ._removeHoverClass(), this._trigger("drop", e, this.ui(s)), this.element) : !1) : !1
+        },
+        ui: function(t) {
+            return {
+                draggable: t.currentItem || t.element,
+                helper: t.helper,
+                position: t.position,
+                offset: t.positionAbs
+            }
+        },
+        _addHoverClass: function() {
+            this._addClass("ui-droppable-hover")
+        },
+        _removeHoverClass: function() {
+            this._removeClass("ui-droppable-hover")
+        },
+        _addActiveClass: function() {
+            this._addClass("ui-droppable-active")
+        },
+        _removeActiveClass: function() {
+            this._removeClass("ui-droppable-active")
+        }
+    });
+    var o = t.ui.intersect = function() {
+        function t(t, e, i) {
+            return t >= e && e + i > t
+        }
+        return function(e, i, s, n) {
+            if (!i.offset) return !1;
+            var o = (e.positionAbs || e.position.absolute).left + e.margins.left,
+                a = (e.positionAbs || e.position.absolute).top + e.margins.top,
+                r = o + e.helperProportions.width,
+                l = a + e.helperProportions.height,
+                h = i.offset.left,
+                c = i.offset.top,
+                u = h + i.proportions().width,
+                d = c + i.proportions().height;
+            switch (s) {
+                case "fit":
+                    return o >= h && u >= r && a >= c && d >= l;
+                case "intersect":
+                    return o + e.helperProportions.width / 2 > h && u > r - e.helperProportions.width / 2 && a + e.helperProportions.height / 2 >
+                        c && d > l - e.helperProportions.height / 2;
+                case "pointer":
+                    return t(n.pageY, c, i.proportions().height) && t(n.pageX, h, i.proportions().width);
+                case "touch":
+                    return (a >= c && d >= a || l >= c && d >= l || c > a && l > d) && (o >= h && u >= o || r >= h && u >= r || h > o && r > u);
+                default:
+                    return !1
+            }
+        }
+    }();
+    t.ui.ddmanager = {
+        current: null,
+        droppables: {
+            "default": []
+        },
+        prepareOffsets: function(e, i) {
+            var s, n, o = t.ui.ddmanager.droppables[e.options.scope] || [],
+                a = i ? i.type : null,
+                r = (e.currentItem || e.element).find(":data(ui-droppable)").addBack();
+            t: for (s = 0; o.length > s; s++)
+                if (!(o[s].options.disabled || e && !o[s].accept.call(o[s].element[0], e.currentItem || e.element))) {
+                    for (n = 0; r.length > n; n++)
+                        if (r[n] === o[s].element[0]) {
+                            o[s].proportions().height = 0;
+                            continue t
+                        } o[s].visible = "none" !== o[s].element.css("display"), o[s].visible && ("mousedown" === a && o[s]._activate.call(o[s],
+                        i), o[s].offset = o[s].element.offset(), o[s].proportions({
+                        width: o[s].element[0].offsetWidth,
+                        height: o[s].element[0].offsetHeight
+                    }))
+                }
+        },
+        drop: function(e, i) {
+            var s = !1;
+            return t.each((t.ui.ddmanager.droppables[e.options.scope] || []).slice(), function() {
+                this.options && (!this.options.disabled && this.visible && o(e, this, this.options.tolerance, i) && (s = this._drop.call(
+                    this, i) || s), !this.options.disabled && this.visible && this.accept.call(this.element[0], e.currentItem || e
+                    .element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, i)))
+            }), s
+        },
+        dragStart: function(e, i) {
+            e.element.parentsUntil("body").on("scroll.droppable", function() {
+                e.options.refreshPositions || t.ui.ddmanager.prepareOffsets(e, i)
+            })
+        },
+        drag: function(e, i) {
+            e.options.refreshPositions && t.ui.ddmanager.prepareOffsets(e, i), t.each(t.ui.ddmanager.droppables[e.options.scope] || [], function() {
+                if (!this.options.disabled && !this.greedyChild && this.visible) {
+                    var s, n, a, r = o(e, this, this.options.tolerance, i),
+                        l = !r && this.isover ? "isout" : r && !this.isover ? "isover" : null;
+                    l && (this.options.greedy && (n = this.options.scope, a = this.element.parents(":data(ui-droppable)").filter(
+                            function() {
+                                return t(this).droppable("instance").options.scope === n
+                            }), a.length && (s = t(a[0]).droppable("instance"), s.greedyChild = "isover" === l)), s && "isover" === l &&
+                        (s
+                            .isover = !1, s.isout = !0, s._out.call(s, i)), this[l] = !0, this["isout" === l ? "isover" : "isout"] = !1,
+                        this["isover" === l ? "_over" : "_out"].call(this, i), s && "isout" === l && (s.isout = !1, s.isover = !0, s
+                            ._over.call(s, i)))
+                }
+            })
+        },
+        dragStop: function(e, i) {
+            e.element.parentsUntil("body").off("scroll.droppable"), e.options.refreshPositions || t.ui.ddmanager.prepareOffsets(e, i)
+        }
+    }, t.uiBackCompat !== !1 && t.widget("ui.droppable", t.ui.droppable, {
+        options: {
+            hoverClass: !1,
+            activeClass: !1
+        },
+        _addActiveClass: function() {
+            this._super(), this.options.activeClass && this.element.addClass(this.options.activeClass)
+        },
+        _removeActiveClass: function() {
+            this._super(), this.options.activeClass && this.element.removeClass(this.options.activeClass)
+        },
+        _addHoverClass: function() {
+            this._super(), this.options.hoverClass && this.element.addClass(this.options.hoverClass)
+        },
+        _removeHoverClass: function() {
+            this._super(), this.options.hoverClass && this.element.removeClass(this.options.hoverClass)
+        }
+    }), t.ui.droppable, t.widget("ui.resizable", t.ui.mouse, {
+        version: "1.12.1",
+        widgetEventPrefix: "resize",
+        options: {
+            alsoResize: !1,
+            animate: !1,
+            animateDuration: "slow",
+            animateEasing: "swing",
+            aspectRatio: !1,
+            autoHide: !1,
+            classes: {
+                "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
+            },
+            containment: !1,
+            ghost: !1,
+            grid: !1,
+            handles: "e,s,se",
+            helper: !1,
+            maxHeight: null,
+            maxWidth: null,
+            minHeight: 10,
+            minWidth: 10,
+            zIndex: 90,
+            resize: null,
+            start: null,
+            stop: null
+        },
+        _num: function(t) {
+            return parseFloat(t) || 0
+        },
+        _isNumber: function(t) {
+            return !isNaN(parseFloat(t))
+        },
+        _hasScroll: function(e, i) {
+            if ("hidden" === t(e).css("overflow")) return !1;
+            var s = i && "left" === i ? "scrollLeft" : "scrollTop",
+                n = !1;
+            return e[s] > 0 ? !0 : (e[s] = 1, n = e[s] > 0, e[s] = 0, n)
+        },
+        _create: function() {
+            var e, i = this.options,
+                s = this;
+            this._addClass("ui-resizable"), t.extend(this, {
+                _aspectRatio: !!i.aspectRatio,
+                aspectRatio: i.aspectRatio,
+                originalElement: this.element,
+                _proportionallyResizeElements: [],
+                _helper: i.helper || i.ghost || i.animate ? i.helper || "ui-resizable-helper" : null
+            }), this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i) && (this.element.wrap(t(
+                    "<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+                    position: this.element.css("position"),
+                    width: this.element.outerWidth(),
+                    height: this.element.outerHeight(),
+                    top: this.element.css("top"),
+                    left: this.element.css("left")
+                })), this.element = this.element.parent().data("ui-resizable", this.element.resizable("instance")), this
+                .elementIsWrapper = !0, e = {
+                    marginTop: this.originalElement.css("marginTop"),
+                    marginRight: this.originalElement.css("marginRight"),
+                    marginBottom: this.originalElement.css("marginBottom"),
+                    marginLeft: this.originalElement.css("marginLeft")
+                }, this.element.css(e), this.originalElement.css("margin", 0), this.originalResizeStyle = this.originalElement.css(
+                    "resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement
+                    .css({
+                        position: "static",
+                        zoom: 1,
+                        display: "block"
+                    })), this.originalElement.css(e), this._proportionallyResize()), this._setupHandles(), i.autoHide && t(this.element).on(
+                "mouseenter",
+                function() {
+                    i.disabled || (s._removeClass("ui-resizable-autohide"), s._handles.show())
+                }).on("mouseleave", function() {
+                i.disabled || s.resizing || (s._addClass("ui-resizable-autohide"), s._handles.hide())
+            }), this._mouseInit()
+        },
+        _destroy: function() {
+            this._mouseDestroy();
+            var e, i = function(e) {
+                t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()
+            };
+            return this.elementIsWrapper && (i(this.element), e = this.element, this.originalElement.css({
+                position: e.css("position"),
+                width: e.outerWidth(),
+                height: e.outerHeight(),
+                top: e.css("top"),
+                left: e.css("left")
+            }).insertAfter(e), e.remove()), this.originalElement.css("resize", this.originalResizeStyle), i(this.originalElement), this
+        },
+        _setOption: function(t, e) {
+            switch (this._super(t, e), t) {
+                case "handles":
+                    this._removeHandles(), this._setupHandles();
+                    break;
+                default:
+            }
+        },
+        _setupHandles: function() {
+            var e, i, s, n, o, a = this.options,
+                r = this;
+            if (this.handles = a.handles || (t(".ui-resizable-handle", this.element).length ? {
+                    n: ".ui-resizable-n",
+                    e: ".ui-resizable-e",
+                    s: ".ui-resizable-s",
+                    w: ".ui-resizable-w",
+                    se: ".ui-resizable-se",
+                    sw: ".ui-resizable-sw",
+                    ne: ".ui-resizable-ne",
+                    nw: ".ui-resizable-nw"
+                } : "e,s,se"), this._handles = t(), this.handles.constructor === String)
+                for ("all" === this.handles && (this.handles = "n,e,s,w,se,sw,ne,nw"), s = this.handles.split(","), this.handles = {}, i = 0; s
+                    .length > i; i++) e = t.trim(s[i]), n = "ui-resizable-" + e, o = t("<div>"), this._addClass(o, "ui-resizable-handle " + n),
+                    o.css({
+                        zIndex: a.zIndex
+                    }), this.handles[e] = ".ui-resizable-" + e, this.element.append(o);
+            this._renderAxis = function(e) {
+                    var i, s, n, o;
+                    e = e || this.element;
+                    for (i in this.handles) this.handles[i].constructor === String ? this.handles[i] = this.element.children(this.handles[i])
+                        .first().show() : (this.handles[i].jquery || this.handles[i].nodeType) && (this.handles[i] = t(this.handles[i]), this
+                            ._on(this.handles[i], {
+                                mousedown: r._mouseDown
+                            })), this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i) && (s = t(
+                            this.handles[i], this.element), o = /sw|ne|nw|se|n|s/.test(i) ? s.outerHeight() : s.outerWidth(), n = [
+                            "padding", /ne|nw|n/.test(i) ? "Top" : /se|sw|s/.test(i) ? "Bottom" : /^e$/.test(i) ? "Right" : "Left"
+                        ].join(""), e.css(n, o), this._proportionallyResize()), this._handles = this._handles.add(this.handles[i])
+                }, this._renderAxis(this.element), this._handles = this._handles.add(this.element.find(".ui-resizable-handle")), this._handles
+                .disableSelection(), this._handles.on("mouseover", function() {
+                    r.resizing || (this.className && (o = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)), r.axis = o && o[1] ?
+                        o[1] : "se")
+                }), a.autoHide && (this._handles.hide(), this._addClass("ui-resizable-autohide"))
+        },
+        _removeHandles: function() {
+            this._handles.remove()
+        },
+        _mouseCapture: function(e) {
+            var i, s, n = !1;
+            for (i in this.handles) s = t(this.handles[i])[0], (s === e.target || t.contains(s, e.target)) && (n = !0);
+            return !this.options.disabled && n
+        },
+        _mouseStart: function(e) {
+            var i, s, n, o = this.options,
+                a = this.element;
+            return this.resizing = !0, this._renderProxy(), i = this._num(this.helper.css("left")), s = this._num(this.helper.css("top")), o
+                .containment && (i += t(o.containment).scrollLeft() || 0, s += t(o.containment).scrollTop() || 0), this.offset = this.helper
+                .offset(), this.position = {
+                    left: i,
+                    top: s
+                }, this.size = this._helper ? {
+                    width: this.helper.width(),
+                    height: this.helper.height()
+                } : {
+                    width: a.width(),
+                    height: a.height()
+                }, this.originalSize = this._helper ? {
+                    width: a.outerWidth(),
+                    height: a.outerHeight()
+                } : {
+                    width: a.width(),
+                    height: a.height()
+                }, this.sizeDiff = {
+                    width: a.outerWidth() - a.width(),
+                    height: a.outerHeight() - a.height()
+                }, this.originalPosition = {
+                    left: i,
+                    top: s
+                }, this.originalMousePosition = {
+                    left: e.pageX,
+                    top: e.pageY
+                }, this.aspectRatio = "number" == typeof o.aspectRatio ? o.aspectRatio : this.originalSize.width / this.originalSize.height ||
+                1, n = t(".ui-resizable-" + this.axis).css("cursor"), t("body").css("cursor", "auto" === n ? this.axis + "-resize" : n), this
+                ._addClass("ui-resizable-resizing"), this._propagate("start", e), !0
+        },
+        _mouseDrag: function(e) {
+            var i, s, n = this.originalMousePosition,
+                o = this.axis,
+                a = e.pageX - n.left || 0,
+                r = e.pageY - n.top || 0,
+                l = this._change[o];
+            return this._updatePrevProperties(), l ? (i = l.apply(this, [e, a, r]), this._updateVirtualBoundaries(e.shiftKey), (this
+                    ._aspectRatio || e.shiftKey) && (i = this._updateRatio(i, e)), i = this._respectSize(i, e), this._updateCache(i), this
+                ._propagate("resize", e), s = this._applyChanges(), !this._helper && this._proportionallyResizeElements.length && this
+                ._proportionallyResize(), t.isEmptyObject(s) || (this._updatePrevProperties(), this._trigger("resize", e, this.ui()), this
+                    ._applyChanges()), !1) : !1
+        },
+        _mouseStop: function(e) {
+            this.resizing = !1;
+            var i, s, n, o, a, r, l, h = this.options,
+                c = this;
+            return this._helper && (i = this._proportionallyResizeElements, s = i.length && /textarea/i.test(i[0].nodeName), n = s && this
+                ._hasScroll(i[0], "left") ? 0 : c.sizeDiff.height, o = s ? 0 : c.sizeDiff.width, a = {
+                    width: c.helper.width() - o,
+                    height: c.helper.height() - n
+                }, r = parseFloat(c.element.css("left")) + (c.position.left - c.originalPosition.left) || null, l = parseFloat(c.element
+                    .css("top")) + (c.position.top - c.originalPosition.top) || null, h.animate || this.element.css(t.extend(a, {
+                    top: l,
+                    left: r
+                })), c.helper.height(c.size.height), c.helper.width(c.size.width), this._helper && !h.animate && this
+                ._proportionallyResize()), t("body").css("cursor", "auto"), this._removeClass("ui-resizable-resizing"), this._propagate(
+                "stop", e), this._helper && this.helper.remove(), !1
+        },
+        _updatePrevProperties: function() {
+            this.prevPosition = {
+                top: this.position.top,
+                left: this.position.left
+            }, this.prevSize = {
+                width: this.size.width,
+                height: this.size.height
+            }
+        },
+        _applyChanges: function() {
+            var t = {};
+            return this.position.top !== this.prevPosition.top && (t.top = this.position.top + "px"), this.position.left !== this.prevPosition
+                .left && (t.left = this.position.left + "px"), this.size.width !== this.prevSize.width && (t.width = this.size.width + "px"),
+                this.size.height !== this.prevSize.height && (t.height = this.size.height + "px"), this.helper.css(t), t
+        },
+        _updateVirtualBoundaries: function(t) {
+            var e, i, s, n, o, a = this.options;
+            o = {
+                minWidth: this._isNumber(a.minWidth) ? a.minWidth : 0,
+                maxWidth: this._isNumber(a.maxWidth) ? a.maxWidth : 1 / 0,
+                minHeight: this._isNumber(a.minHeight) ? a.minHeight : 0,
+                maxHeight: this._isNumber(a.maxHeight) ? a.maxHeight : 1 / 0
+            }, (this._aspectRatio || t) && (e = o.minHeight * this.aspectRatio, s = o.minWidth / this.aspectRatio, i = o.maxHeight * this
+                .aspectRatio, n = o.maxWidth / this.aspectRatio, e > o.minWidth && (o.minWidth = e), s > o.minHeight && (o.minHeight = s), o
+                .maxWidth > i && (o.maxWidth = i), o.maxHeight > n && (o.maxHeight = n)), this._vBoundaries = o
+        },
+        _updateCache: function(t) {
+            this.offset = this.helper.offset(), this._isNumber(t.left) && (this.position.left = t.left), this._isNumber(t.top) && (this.position
+                .top = t.top), this._isNumber(t.height) && (this.size.height = t.height), this._isNumber(t.width) && (this.size.width = t
+                .width)
+        },
+        _updateRatio: function(t) {
+            var e = this.position,
+                i = this.size,
+                s = this.axis;
+            return this._isNumber(t.height) ? t.width = t.height * this.aspectRatio : this._isNumber(t.width) && (t.height = t.width / this
+                .aspectRatio), "sw" === s && (t.left = e.left + (i.width - t.width), t.top = null), "nw" === s && (t.top = e.top + (i
+                .height - t.height), t.left = e.left + (i.width - t.width)), t
+        },
+        _respectSize: function(t) {
+            var e = this._vBoundaries,
+                i = this.axis,
+                s = this._isNumber(t.width) && e.maxWidth && e.maxWidth < t.width,
+                n = this._isNumber(t.height) && e.maxHeight && e.maxHeight < t.height,
+                o = this._isNumber(t.width) && e.minWidth && e.minWidth > t.width,
+                a = this._isNumber(t.height) && e.minHeight && e.minHeight > t.height,
+                r = this.originalPosition.left + this.originalSize.width,
+                l = this.originalPosition.top + this.originalSize.height,
+                h = /sw|nw|w/.test(i),
+                c = /nw|ne|n/.test(i);
+            return o && (t.width = e.minWidth), a && (t.height = e.minHeight), s && (t.width = e.maxWidth), n && (t.height = e.maxHeight), o &&
+                h && (t.left = r - e.minWidth), s && h && (t.left = r - e.maxWidth), a && c && (t.top = l - e.minHeight), n && c && (t.top = l -
+                    e.maxHeight), t.width || t.height || t.left || !t.top ? t.width || t.height || t.top || !t.left || (t.left = null) : t.top =
+                null, t
+        },
+        _getPaddingPlusBorderDimensions: function(t) {
+            for (var e = 0, i = [], s = [t.css("borderTopWidth"), t.css("borderRightWidth"), t.css("borderBottomWidth"), t.css(
+                    "borderLeftWidth")], n = [t.css("paddingTop"), t.css("paddingRight"), t.css("paddingBottom"), t.css("paddingLeft")]; 4 >
+                e; e++) i[e] = parseFloat(s[e]) || 0, i[e] += parseFloat(n[e]) || 0;
+            return {
+                height: i[0] + i[2],
+                width: i[1] + i[3]
+            }
+        },
+        _proportionallyResize: function() {
+            if (this._proportionallyResizeElements.length)
+                for (var t, e = 0, i = this.helper || this.element; this._proportionallyResizeElements.length > e; e++) t = this
+                    ._proportionallyResizeElements[e], this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(t)),
+                    t.css({
+                        height: i.height() - this.outerDimensions.height || 0,
+                        width: i.width() - this.outerDimensions.width || 0
+                    })
+        },
+        _renderProxy: function() {
+            var e = this.element,
+                i = this.options;
+            this.elementOffset = e.offset(), this._helper ? (this.helper = this.helper || t("<div style='overflow:hidden;'></div>"), this
+                ._addClass(this.helper, this._helper), this.helper.css({
+                    width: this.element.outerWidth(),
+                    height: this.element.outerHeight(),
+                    position: "absolute",
+                    left: this.elementOffset.left + "px",
+                    top: this.elementOffset.top + "px",
+                    zIndex: ++i.zIndex
+                }), this.helper.appendTo("body").disableSelection()) : this.helper = this.element
+        },
+        _change: {
+            e: function(t, e) {
+                return {
+                    width: this.originalSize.width + e
+                }
+            },
+            w: function(t, e) {
+                var i = this.originalSize,
+                    s = this.originalPosition;
+                return {
+                    left: s.left + e,
+                    width: i.width - e
+                }
+            },
+            n: function(t, e, i) {
+                var s = this.originalSize,
+                    n = this.originalPosition;
+                return {
+                    top: n.top + i,
+                    height: s.height - i
+                }
+            },
+            s: function(t, e, i) {
+                return {
+                    height: this.originalSize.height + i
+                }
+            },
+            se: function(e, i, s) {
+                return t.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, i, s]))
+            },
+            sw: function(e, i, s) {
+                return t.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, i, s]))
+            },
+            ne: function(e, i, s) {
+                return t.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, i, s]))
+            },
+            nw: function(e, i, s) {
+                return t.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, i, s]))
+            }
+        },
+        _propagate: function(e, i) {
+            t.ui.plugin.call(this, e, [i, this.ui()]), "resize" !== e && this._trigger(e, i, this.ui())
+        },
+        plugins: {},
+        ui: function() {
+            return {
+                originalElement: this.originalElement,
+                element: this.element,
+                helper: this.helper,
+                position: this.position,
+                size: this.size,
+                originalSize: this.originalSize,
+                originalPosition: this.originalPosition
+            }
+        }
+    }), t.ui.plugin.add("resizable", "animate", {
+        stop: function(e) {
+            var i = t(this).resizable("instance"),
+                s = i.options,
+                n = i._proportionallyResizeElements,
+                o = n.length && /textarea/i.test(n[0].nodeName),
+                a = o && i._hasScroll(n[0], "left") ? 0 : i.sizeDiff.height,
+                r = o ? 0 : i.sizeDiff.width,
+                l = {
+                    width: i.size.width - r,
+                    height: i.size.height - a
+                },
+                h = parseFloat(i.element.css("left")) + (i.position.left - i.originalPosition.left) || null,
+                c = parseFloat(i.element.css("top")) + (i.position.top - i.originalPosition.top) || null;
+            i.element.animate(t.extend(l, c && h ? {
+                top: c,
+                left: h
+            } : {}), {
+                duration: s.animateDuration,
+                easing: s.animateEasing,
+                step: function() {
+                    var s = {
+                        width: parseFloat(i.element.css("width")),
+                        height: parseFloat(i.element.css("height")),
+                        top: parseFloat(i.element.css("top")),
+                        left: parseFloat(i.element.css("left"))
+                    };
+                    n && n.length && t(n[0]).css({
+                        width: s.width,
+                        height: s.height
+                    }), i._updateCache(s), i._propagate("resize", e)
+                }
+            })
+        }
+    }), t.ui.plugin.add("resizable", "containment", {
+        start: function() {
+            var e, i, s, n, o, a, r, l = t(this).resizable("instance"),
+                h = l.options,
+                c = l.element,
+                u = h.containment,
+                d = u instanceof t ? u.get(0) : /parent/.test(u) ? c.parent().get(0) : u;
+            d && (l.containerElement = t(d), /document/.test(u) || u === document ? (l.containerOffset = {
+                left: 0,
+                top: 0
+            }, l.containerPosition = {
+                left: 0,
+                top: 0
+            }, l.parentData = {
+                element: t(document),
+                left: 0,
+                top: 0,
+                width: t(document).width(),
+                height: t(document).height() || document.body.parentNode.scrollHeight
+            }) : (e = t(d), i = [], t(["Top", "Right", "Left", "Bottom"]).each(function(t, s) {
+                    i[t] = l._num(e.css("padding" + s))
+                }), l.containerOffset = e.offset(), l.containerPosition = e.position(), l.containerSize = {
+                    height: e.innerHeight() - i[3],
+                    width: e.innerWidth() - i[1]
+                }, s = l.containerOffset, n = l.containerSize.height, o = l.containerSize.width, a = l._hasScroll(d, "left") ? d
+                .scrollWidth : o, r = l._hasScroll(d) ? d.scrollHeight : n, l.parentData = {
+                    element: d,
+                    left: s.left,
+                    top: s.top,
+                    width: a,
+                    height: r
+                }))
+        },
+        resize: function(e) {
+            var i, s, n, o, a = t(this).resizable("instance"),
+                r = a.options,
+                l = a.containerOffset,
+                h = a.position,
+                c = a._aspectRatio || e.shiftKey,
+                u = {
+                    top: 0,
+                    left: 0
+                },
+                d = a.containerElement,
+                p = !0;
+            d[0] !== document && /static/.test(d.css("position")) && (u = l), h.left < (a._helper ? l.left : 0) && (a.size.width = a.size
+                    .width + (a._helper ? a.position.left - l.left : a.position.left - u.left), c && (a.size.height = a.size.width / a
+                        .aspectRatio, p = !1), a.position.left = r.helper ? l.left : 0), h.top < (a._helper ? l.top : 0) && (a.size.height = a
+                    .size.height + (a._helper ? a.position.top - l.top : a.position.top), c && (a.size.width = a.size.height * a.aspectRatio,
+                        p = !1), a.position.top = a._helper ? l.top : 0), n = a.containerElement.get(0) === a.element.parent().get(0), o =
+                /relative|absolute/.test(a.containerElement.css("position")), n && o ? (a.offset.left = a.parentData.left + a.position.left, a
+                    .offset.top = a.parentData.top + a.position.top) : (a.offset.left = a.element.offset().left, a.offset.top = a.element
+                    .offset().top), i = Math.abs(a.sizeDiff.width + (a._helper ? a.offset.left - u.left : a.offset.left - l.left)), s = Math
+                .abs(a.sizeDiff.height + (a._helper ? a.offset.top - u.top : a.offset.top - l.top)), i + a.size.width >= a.parentData.width && (
+                    a.size.width = a.parentData.width - i, c && (a.size.height = a.size.width / a.aspectRatio, p = !1)), s + a.size.height >= a
+                .parentData.height && (a.size.height = a.parentData.height - s, c && (a.size.width = a.size.height * a.aspectRatio, p = !1)),
+                p || (a.position.left = a.prevPosition.left, a.position.top = a.prevPosition.top, a.size.width = a.prevSize.width, a.size
+                    .height = a.prevSize.height)
+        },
+        stop: function() {
+            var e = t(this).resizable("instance"),
+                i = e.options,
+                s = e.containerOffset,
+                n = e.containerPosition,
+                o = e.containerElement,
+                a = t(e.helper),
+                r = a.offset(),
+                l = a.outerWidth() - e.sizeDiff.width,
+                h = a.outerHeight() - e.sizeDiff.height;
+            e._helper && !i.animate && /relative/.test(o.css("position")) && t(this).css({
+                left: r.left - n.left - s.left,
+                width: l,
+                height: h
+            }), e._helper && !i.animate && /static/.test(o.css("position")) && t(this).css({
+                left: r.left - n.left - s.left,
+                width: l,
+                height: h
+            })
+        }
+    }), t.ui.plugin.add("resizable", "alsoResize", {
+        start: function() {
+            var e = t(this).resizable("instance"),
+                i = e.options;
+            t(i.alsoResize).each(function() {
+                var e = t(this);
+                e.data("ui-resizable-alsoresize", {
+                    width: parseFloat(e.width()),
+                    height: parseFloat(e.height()),
+                    left: parseFloat(e.css("left")),
+                    top: parseFloat(e.css("top"))
+                })
+            })
+        },
+        resize: function(e, i) {
+            var s = t(this).resizable("instance"),
+                n = s.options,
+                o = s.originalSize,
+                a = s.originalPosition,
+                r = {
+                    height: s.size.height - o.height || 0,
+                    width: s.size.width - o.width || 0,
+                    top: s.position.top - a.top || 0,
+                    left: s.position.left - a.left || 0
+                };
+            t(n.alsoResize).each(function() {
+                var e = t(this),
+                    s = t(this).data("ui-resizable-alsoresize"),
+                    n = {},
+                    o = e.parents(i.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+                t.each(o, function(t, e) {
+                    var i = (s[e] || 0) + (r[e] || 0);
+                    i && i >= 0 && (n[e] = i || null)
+                }), e.css(n)
+            })
+        },
+        stop: function() {
+            t(this).removeData("ui-resizable-alsoresize")
+        }
+    }), t.ui.plugin.add("resizable", "ghost", {
+        start: function() {
+            var e = t(this).resizable("instance"),
+                i = e.size;
+            e.ghost = e.originalElement.clone(), e.ghost.css({
+                opacity: .25,
+                display: "block",
+                position: "relative",
+                height: i.height,
+                width: i.width,
+                margin: 0,
+                left: 0,
+                top: 0
+            }), e._addClass(e.ghost, "ui-resizable-ghost"), t.uiBackCompat !== !1 && "string" == typeof e.options.ghost && e.ghost.addClass(
+                this.options.ghost), e.ghost.appendTo(e.helper)
+        },
+        resize: function() {
+            var e = t(this).resizable("instance");
+            e.ghost && e.ghost.css({
+                position: "relative",
+                height: e.size.height,
+                width: e.size.width
+            })
+        },
+        stop: function() {
+            var e = t(this).resizable("instance");
+            e.ghost && e.helper && e.helper.get(0).removeChild(e.ghost.get(0))
+        }
+    }), t.ui.plugin.add("resizable", "grid", {
+        resize: function() {
+            var e, i = t(this).resizable("instance"),
+                s = i.options,
+                n = i.size,
+                o = i.originalSize,
+                a = i.originalPosition,
+                r = i.axis,
+                l = "number" == typeof s.grid ? [s.grid, s.grid] : s.grid,
+                h = l[0] || 1,
+                c = l[1] || 1,
+                u = Math.round((n.width - o.width) / h) * h,
+                d = Math.round((n.height - o.height) / c) * c,
+                p = o.width + u,
+                f = o.height + d,
+                g = s.maxWidth && p > s.maxWidth,
+                m = s.maxHeight && f > s.maxHeight,
+                _ = s.minWidth && s.minWidth > p,
+                v = s.minHeight && s.minHeight > f;
+            s.grid = l, _ && (p += h), v && (f += c), g && (p -= h), m && (f -= c), /^(se|s|e)$/.test(r) ? (i.size.width = p, i.size.height =
+                f) : /^(ne)$/.test(r) ? (i.size.width = p, i.size.height = f, i.position.top = a.top - d) : /^(sw)$/.test(r) ? (i.size
+                .width =
+                p, i.size.height = f, i.position.left = a.left - u) : ((0 >= f - c || 0 >= p - h) && (e = i._getPaddingPlusBorderDimensions(
+                this)), f - c > 0 ? (i.size.height = f, i.position.top = a.top - d) : (f = c - e.height, i.size.height = f, i.position
+                .top = a.top + o.height - f), p - h > 0 ? (i.size.width = p, i.position.left = a.left - u) : (p = h - e.width, i.size
+                .width = p, i.position.left = a.left + o.width - p))
+        }
+    }), t.ui.resizable, t.widget("ui.selectable", t.ui.mouse, {
+        version: "1.12.1",
+        options: {
+            appendTo: "body",
+            autoRefresh: !0,
+            distance: 0,
+            filter: "*",
+            tolerance: "touch",
+            selected: null,
+            selecting: null,
+            start: null,
+            stop: null,
+            unselected: null,
+            unselecting: null
+        },
+        _create: function() {
+            var e = this;
+            this._addClass("ui-selectable"), this.dragged = !1, this.refresh = function() {
+                e.elementPos = t(e.element[0]).offset(), e.selectees = t(e.options.filter, e.element[0]), e._addClass(e.selectees,
+                    "ui-selectee"), e.selectees.each(function() {
+                    var i = t(this),
+                        s = i.offset(),
+                        n = {
+                            left: s.left - e.elementPos.left,
+                            top: s.top - e.elementPos.top
+                        };
+                    t.data(this, "selectable-item", {
+                        element: this,
+                        $element: i,
+                        left: n.left,
+                        top: n.top,
+                        right: n.left + i.outerWidth(),
+                        bottom: n.top + i.outerHeight(),
+                        startselected: !1,
+                        selected: i.hasClass("ui-selected"),
+                        selecting: i.hasClass("ui-selecting"),
+                        unselecting: i.hasClass("ui-unselecting")
+                    })
+                })
+            }, this.refresh(), this._mouseInit(), this.helper = t("<div>"), this._addClass(this.helper, "ui-selectable-helper")
+        },
+        _destroy: function() {
+            this.selectees.removeData("selectable-item"), this._mouseDestroy()
+        },
+        _mouseStart: function(e) {
+            var i = this,
+                s = this.options;
+            this.opos = [e.pageX, e.pageY], this.elementPos = t(this.element[0]).offset(), this.options.disabled || (this.selectees = t(s
+                .filter, this.element[0]), this._trigger("start", e), t(s.appendTo).append(this.helper), this.helper.css({
+                left: e.pageX,
+                top: e.pageY,
+                width: 0,
+                height: 0
+            }), s.autoRefresh && this.refresh(), this.selectees.filter(".ui-selected").each(function() {
+                var s = t.data(this, "selectable-item");
+                s.startselected = !0, e.metaKey || e.ctrlKey || (i._removeClass(s.$element, "ui-selected"), s.selected = !1, i
+                    ._addClass(s.$element, "ui-unselecting"), s.unselecting = !0, i._trigger("unselecting", e, {
+                        unselecting: s.element
+                    }))
+            }), t(e.target).parents().addBack().each(function() {
+                var s, n = t.data(this, "selectable-item");
+                return n ? (s = !e.metaKey && !e.ctrlKey || !n.$element.hasClass("ui-selected"), i._removeClass(n.$element, s ?
+                        "ui-unselecting" : "ui-selected")._addClass(n.$element, s ? "ui-selecting" : "ui-unselecting"), n
+                    .unselecting = !s, n.selecting = s, n.selected = s, s ? i._trigger("selecting", e, {
+                        selecting: n.element
+                    }) : i._trigger("unselecting", e, {
+                        unselecting: n.element
+                    }), !1) : void 0
+            }))
+        },
+        _mouseDrag: function(e) {
+            if (this.dragged = !0, !this.options.disabled) {
+                var i, s = this,
+                    n = this.options,
+                    o = this.opos[0],
+                    a = this.opos[1],
+                    r = e.pageX,
+                    l = e.pageY;
+                return o > r && (i = r, r = o, o = i), a > l && (i = l, l = a, a = i), this.helper.css({
+                    left: o,
+                    top: a,
+                    width: r - o,
+                    height: l - a
+                }), this.selectees.each(function() {
+                    var i = t.data(this, "selectable-item"),
+                        h = !1,
+                        c = {};
+                    i && i.element !== s.element[0] && (c.left = i.left + s.elementPos.left, c.right = i.right + s.elementPos.left, c
+                        .top = i.top + s.elementPos.top, c.bottom = i.bottom + s.elementPos.top, "touch" === n.tolerance ? h = !(c
+                            .left > r || o > c.right || c.top > l || a > c.bottom) : "fit" === n.tolerance && (h = c.left > o && r >
+                            c.right && c.top > a && l > c.bottom), h ? (i.selected && (s._removeClass(i.$element, "ui-selected"), i
+                            .selected = !1), i.unselecting && (s._removeClass(i.$element, "ui-unselecting"), i.unselecting = !
+                            1), i.selecting || (s._addClass(i.$element, "ui-selecting"), i.selecting = !0, s._trigger(
+                            "selecting",
+                            e, {
+                                selecting: i.element
+                            }))) : (i.selecting && ((e.metaKey || e.ctrlKey) && i.startselected ? (s._removeClass(i.$element,
+                            "ui-selecting"), i.selecting = !1, s._addClass(i.$element, "ui-selected"), i.selected = !0) : (s
+                            ._removeClass(i.$element, "ui-selecting"), i.selecting = !1, i.startselected && (s._addClass(i
+                                .$element, "ui-unselecting"), i.unselecting = !0), s._trigger("unselecting", e, {
+                                unselecting: i.element
+                            }))), i.selected && (e.metaKey || e.ctrlKey || i.startselected || (s._removeClass(i.$element,
+                                "ui-selected"), i.selected = !1, s._addClass(i.$element, "ui-unselecting"), i
+                            .unselecting = !0, s._trigger("unselecting", e, {
+                                unselecting: i.element
+                            })))))
+                }), !1
+            }
+        },
+        _mouseStop: function(e) {
+            var i = this;
+            return this.dragged = !1, t(".ui-unselecting", this.element[0]).each(function() {
+                var s = t.data(this, "selectable-item");
+                i._removeClass(s.$element, "ui-unselecting"), s.unselecting = !1, s.startselected = !1, i._trigger("unselected", e, {
+                    unselected: s.element
+                })
+            }), t(".ui-selecting", this.element[0]).each(function() {
+                var s = t.data(this, "selectable-item");
+                i._removeClass(s.$element, "ui-selecting")._addClass(s.$element, "ui-selected"), s.selecting = !1, s.selected = !0, s
+                    .startselected = !0, i._trigger("selected", e, {
+                        selected: s.element
+                    })
+            }), this._trigger("stop", e), this.helper.remove(), !1
+        }
+    }), t.widget("ui.sortable", t.ui.mouse, {
+        version: "1.12.1",
+        widgetEventPrefix: "sort",
+        ready: !1,
+        options: {
+            appendTo: "parent",
+            axis: !1,
+            connectWith: !1,
+            containment: !1,
+            cursor: "auto",
+            cursorAt: !1,
+            dropOnEmpty: !0,
+            forcePlaceholderSize: !1,
+            forceHelperSize: !1,
+            grid: !1,
+            handle: !1,
+            helper: "original",
+            items: "> *",
+            opacity: !1,
+            placeholder: !1,
+            revert: !1,
+            scroll: !0,
+            scrollSensitivity: 20,
+            scrollSpeed: 20,
+            scope: "default",
+            tolerance: "intersect",
+            zIndex: 1e3,
+            activate: null,
+            beforeStop: null,
+            change: null,
+            deactivate: null,
+            out: null,
+            over: null,
+            receive: null,
+            remove: null,
+            sort: null,
+            start: null,
+            stop: null,
+            update: null
+        },
+        _isOverAxis: function(t, e, i) {
+            return t >= e && e + i > t
+        },
+        _isFloating: function(t) {
+            return /left|right/.test(t.css("float")) || /inline|table-cell/.test(t.css("display"))
+        },
+        _create: function() {
+            this.containerCache = {}, this._addClass("ui-sortable"), this.refresh(), this.offset = this.element.offset(), this._mouseInit(),
+                this._setHandleClassName(), this.ready = !0
+        },
+        _setOption: function(t, e) {
+            this._super(t, e), "handle" === t && this._setHandleClassName()
+        },
+        _setHandleClassName: function() {
+            var e = this;
+            this._removeClass(this.element.find(".ui-sortable-handle"), "ui-sortable-handle"), t.each(this.items, function() {
+                e._addClass(this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item,
+                    "ui-sortable-handle")
+            })
+        },
+        _destroy: function() {
+            this._mouseDestroy();
+            for (var t = this.items.length - 1; t >= 0; t--) this.items[t].item.removeData(this.widgetName + "-item");
+            return this
+        },
+        _mouseCapture: function(e, i) {
+            var s = null,
+                n = !1,
+                o = this;
+            return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(e), t(e.target)
+                .parents().each(function() {
+                    return t.data(this, o.widgetName + "-item") === o ? (s = t(this), !1) : void 0
+                }), t.data(e.target, o.widgetName + "-item") === o && (s = t(e.target)), s ? !this.options.handle || i || (t(this.options
+                    .handle, s).find("*").addBack().each(function() {
+                    this === e.target && (n = !0)
+                }), n) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1)
+        },
+        _mouseStart: function(e, i, s) {
+            var n, o, a = this.options;
+            if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this
+                ._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
+                    top: this.offset.top - this.margins.top,
+                    left: this.offset.left - this.margins.left
+                }, t.extend(this.offset, {
+                    click: {
+                        left: e.pageX - this.offset.left,
+                        top: e.pageY - this.offset.top
+                    },
+                    parent: this._getParentOffset(),
+                    relative: this._getRelativeOffset()
+                }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this
+                ._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, a.cursorAt && this._adjustOffsetFromHelper(a
+                    .cursorAt), this.domPosition = {
+                    prev: this.currentItem.prev()[0],
+                    parent: this.currentItem.parent()[0]
+                }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), a.containment && this
+                ._setContainment(), a.cursor && "auto" !== a.cursor && (o = this.document.find("body"), this.storedCursor = o.css("cursor"), o
+                    .css("cursor", a.cursor), this.storedStylesheet = t("<style>*{ cursor: " + a.cursor + " !important; }</style>").appendTo(o)
+                ), a.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css(
+                    "opacity", a.opacity)), a.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this
+                    .helper.css("zIndex", a.zIndex)), this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName && (
+                    this.overflowOffset = this.scrollParent.offset()), this._trigger("start", e, this._uiHash()), this
+                ._preserveHelperProportions || this._cacheHelperProportions(), !s)
+                for (n = this.containers.length - 1; n >= 0; n--) this.containers[n]._trigger("activate", e, this._uiHash(this));
+            return t.ui.ddmanager && (t.ui.ddmanager.current = this), t.ui.ddmanager && !a.dropBehaviour && t.ui.ddmanager.prepareOffsets(this,
+                e), this.dragging = !0, this._addClass(this.helper, "ui-sortable-helper"), this._mouseDrag(e), !0
+        },
+        _mouseDrag: function(e) {
+            var i, s, n, o, a = this.options,
+                r = !1;
+            for (this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (
+                    this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== this.document[0] && "HTML" !==
+                    this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < a
+                        .scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + a.scrollSpeed : e.pageY -
+                        this.overflowOffset.top < a.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop -
+                            a.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < a.scrollSensitivity ? this
+                        .scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + a.scrollSpeed : e.pageX - this.overflowOffset.left <
+                        a.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - a.scrollSpeed)) : (e
+                        .pageY - this.document.scrollTop() < a.scrollSensitivity ? r = this.document.scrollTop(this.document.scrollTop() - a
+                            .scrollSpeed) : this.window.height() - (e.pageY - this.document.scrollTop()) < a.scrollSensitivity && (r = this
+                            .document.scrollTop(this.document.scrollTop() + a.scrollSpeed)), e.pageX - this.document.scrollLeft() < a
+                        .scrollSensitivity ? r = this.document.scrollLeft(this.document.scrollLeft() - a.scrollSpeed) : this.window.width() - (e
+                            .pageX - this.document.scrollLeft()) < a.scrollSensitivity && (r = this.document.scrollLeft(this.document
+                            .scrollLeft() + a.scrollSpeed))), r !== !1 && t.ui.ddmanager && !a.dropBehaviour && t.ui.ddmanager.prepareOffsets(
+                        this, e)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (
+                    this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0]
+                    .style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--)
+                if (s = this.items[i], n = s.item[0], o = this._intersectsWithPointer(s), o && s.instance === this.currentContainer && n !==
+                    this.currentItem[0] && this.placeholder[1 === o ? "next" : "prev"]()[0] !== n && !t.contains(this.placeholder[0], n) && (
+                        "semi-dynamic" === this.options.type ? !t.contains(this.element[0], n) : !0)) {
+                    if (this.direction = 1 === o ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(s)) break;
+                    this._rearrange(e, s), this._trigger("change", e, this._uiHash());
+                    break
+                } return this._contactContainers(e), t.ui.ddmanager && t.ui.ddmanager.drag(this, e), this._trigger("sort", e, this._uiHash()),
+                this.lastPositionAbs = this.positionAbs, !1
+        },
+        _mouseStop: function(e, i) {
+            if (e) {
+                if (t.ui.ddmanager && !this.options.dropBehaviour && t.ui.ddmanager.drop(this, e), this.options.revert) {
+                    var s = this,
+                        n = this.placeholder.offset(),
+                        o = this.options.axis,
+                        a = {};
+                    o && "x" !== o || (a.left = n.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[
+                            0].body ? 0 : this.offsetParent[0].scrollLeft)), o && "y" !== o || (a.top = n.top - this.offset.parent.top - this
+                            .margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)), this
+                        .reverting = !0, t(this.helper).animate(a, parseInt(this.options.revert, 10) || 500, function() {
+                            s._clear(e)
+                        })
+                } else this._clear(e, i);
+                return !1
+            }
+        },
+        cancel: function() {
+            if (this.dragging) {
+                this._mouseUp(new t.Event("mouseup", {
+                    target: null
+                })), "original" === this.options.helper ? (this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem,
+                    "ui-sortable-helper")) : this.currentItem.show();
+                for (var e = this.containers.length - 1; e >= 0; e--) this.containers[e]._trigger("deactivate", null, this._uiHash(this)), this
+                    .containers[e].containerCache.over && (this.containers[e]._trigger("out", null, this._uiHash(this)), this.containers[e]
+                        .containerCache.over = 0)
+            }
+            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]),
+                "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), t.extend(this, {
+                    helper: null,
+                    dragging: !1,
+                    reverting: !1,
+                    _noFinalSort: null
+                }), this.domPosition.prev ? t(this.domPosition.prev).after(this.currentItem) : t(this.domPosition.parent).prepend(this
+                    .currentItem)), this
+        },
+        serialize: function(e) {
+            var i = this._getItemsAsjQuery(e && e.connected),
+                s = [];
+            return e = e || {}, t(i).each(function() {
+                var i = (t(e.item || this).attr(e.attribute || "id") || "").match(e.expression || /(.+)[\-=_](.+)/);
+                i && s.push((e.key || i[1] + "[]") + "=" + (e.key && e.expression ? i[1] : i[2]))
+            }), !s.length && e.key && s.push(e.key + "="), s.join("&")
+        },
+        toArray: function(e) {
+            var i = this._getItemsAsjQuery(e && e.connected),
+                s = [];
+            return e = e || {}, i.each(function() {
+                s.push(t(e.item || this).attr(e.attribute || "id") || "")
+            }), s
+        },
+        _intersectsWith: function(t) {
+            var e = this.positionAbs.left,
+                i = e + this.helperProportions.width,
+                s = this.positionAbs.top,
+                n = s + this.helperProportions.height,
+                o = t.left,
+                a = o + t.width,
+                r = t.top,
+                l = r + t.height,
+                h = this.offset.click.top,
+                c = this.offset.click.left,
+                u = "x" === this.options.axis || s + h > r && l > s + h,
+                d = "y" === this.options.axis || e + c > o && a > e + c,
+                p = u && d;
+            return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance &&
+                this.helperProportions[this.floating ? "width" : "height"] > t[this.floating ? "width" : "height"] ? p : e + this
+                .helperProportions.width / 2 > o && a > i - this.helperProportions.width / 2 && s + this.helperProportions.height / 2 > r && l >
+                n - this.helperProportions.height / 2
+        },
+        _intersectsWithPointer: function(t) {
+            var e, i, s = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, t.top, t.height),
+                n = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, t.left, t.width),
+                o = s && n;
+            return o ? (e = this._getDragVerticalDirection(), i = this._getDragHorizontalDirection(), this.floating ? "right" === i ||
+                "down" === e ? 2 : 1 : e && ("down" === e ? 2 : 1)) : !1
+        },
+        _intersectsWithSides: function(t) {
+            var e = this._isOverAxis(this.positionAbs.top + this.offset.click.top, t.top + t.height / 2, t.height),
+                i = this._isOverAxis(this.positionAbs.left + this.offset.click.left, t.left + t.width / 2, t.width),
+                s = this._getDragVerticalDirection(),
+                n = this._getDragHorizontalDirection();
+            return this.floating && n ? "right" === n && i || "left" === n && !i : s && ("down" === s && e || "up" === s && !e)
+        },
+        _getDragVerticalDirection: function() {
+            var t = this.positionAbs.top - this.lastPositionAbs.top;
+            return 0 !== t && (t > 0 ? "down" : "up")
+        },
+        _getDragHorizontalDirection: function() {
+            var t = this.positionAbs.left - this.lastPositionAbs.left;
+            return 0 !== t && (t > 0 ? "right" : "left")
+        },
+        refresh: function(t) {
+            return this._refreshItems(t), this._setHandleClassName(), this.refreshPositions(), this
+        },
+        _connectWith: function() {
+            var t = this.options;
+            return t.connectWith.constructor === String ? [t.connectWith] : t.connectWith
+        },
+        _getItemsAsjQuery: function(e) {
+            function i() {
+                r.push(this)
+            }
+            var s, n, o, a, r = [],
+                l = [],
+                h = this._connectWith();
+            if (h && e)
+                for (s = h.length - 1; s >= 0; s--)
+                    for (o = t(h[s], this.document[0]), n = o.length - 1; n >= 0; n--) a = t.data(o[n], this.widgetFullName), a && a !== this &&
+                        !a.options.disabled && l.push([t.isFunction(a.options.items) ? a.options.items.call(a.element) : t(a.options.items, a
+                            .element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), a]);
+            for (l.push([t.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
+                    options: this.options,
+                    item: this.currentItem
+                }) : t(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), s = l.length -
+                1; s >= 0; s--) l[s][0].each(i);
+            return t(r)
+        },
+        _removeCurrentsFromItems: function() {
+            var e = this.currentItem.find(":data(" + this.widgetName + "-item)");
+            this.items = t.grep(this.items, function(t) {
+                for (var i = 0; e.length > i; i++)
+                    if (e[i] === t.item[0]) return !1;
+                return !0
+            })
+        },
+        _refreshItems: function(e) {
+            this.items = [], this.containers = [this];
+            var i, s, n, o, a, r, l, h, c = this.items,
+                u = [
+                    [t.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {
+                        item: this.currentItem
+                    }) : t(this.options.items, this.element), this]
+                ],
+                d = this._connectWith();
+            if (d && this.ready)
+                for (i = d.length - 1; i >= 0; i--)
+                    for (n = t(d[i], this.document[0]), s = n.length - 1; s >= 0; s--) o = t.data(n[s], this.widgetFullName), o && o !== this &&
+                        !o.options.disabled && (u.push([t.isFunction(o.options.items) ? o.options.items.call(o.element[0], e, {
+                            item: this.currentItem
+                        }) : t(o.options.items, o.element), o]), this.containers.push(o));
+            for (i = u.length - 1; i >= 0; i--)
+                for (a = u[i][1], r = u[i][0], s = 0, h = r.length; h > s; s++) l = t(r[s]), l.data(this.widgetName + "-item", a), c.push({
+                    item: l,
+                    instance: a,
+                    width: 0,
+                    height: 0,
+                    left: 0,
+                    top: 0
+                })
+        },
+        refreshPositions: function(e) {
+            this.floating = this.items.length ? "x" === this.options.axis || this._isFloating(this.items[0].item) : !1, this.offsetParent &&
+                this.helper && (this.offset.parent = this._getParentOffset());
+            var i, s, n, o;
+            for (i = this.items.length - 1; i >= 0; i--) s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s
+                .item[0] !== this.currentItem[0] || (n = this.options.toleranceElement ? t(this.options.toleranceElement, s.item) : s.item, e ||
+                    (s.width = n.outerWidth(), s.height = n.outerHeight()), o = n.offset(), s.left = o.left, s.top = o.top);
+            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
+            else
+                for (i = this.containers.length - 1; i >= 0; i--) o = this.containers[i].element.offset(), this.containers[i].containerCache
+                    .left = o.left, this.containers[i].containerCache.top = o.top, this.containers[i].containerCache.width = this.containers[i]
+                    .element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+            return this
+        },
+        _createPlaceholder: function(e) {
+            e = e || this;
+            var i, s = e.options;
+            s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {
+                    element: function() {
+                        var s = e.currentItem[0].nodeName.toLowerCase(),
+                            n = t("<" + s + ">", e.document[0]);
+                        return e._addClass(n, "ui-sortable-placeholder", i || e.currentItem[0].className)._removeClass(n,
+                                "ui-sortable-helper"), "tbody" === s ? e._createTrPlaceholder(e.currentItem.find("tr").eq(0), t("<tr>",
+                                e.document[0]).appendTo(n)) : "tr" === s ? e._createTrPlaceholder(e.currentItem, n) : "img" === s && n
+                            .attr("src", e.currentItem.attr("src")), i || n.css("visibility", "hidden"), n
+                    },
+                    update: function(t, n) {
+                        (!i || s.forcePlaceholderSize) && (n.height() || n.height(e.currentItem.innerHeight() - parseInt(e.currentItem
+                                .css("paddingTop") || 0, 10) - parseInt(e.currentItem.css("paddingBottom") || 0, 10)), n.width() || n
+                            .width(e.currentItem.innerWidth() - parseInt(e.currentItem.css("paddingLeft") || 0, 10) - parseInt(e
+                                .currentItem.css("paddingRight") || 0, 10)))
+                    }
+                }), e.placeholder = t(s.placeholder.element.call(e.element, e.currentItem)), e.currentItem.after(e.placeholder), s.placeholder
+                .update(e, e.placeholder)
+        },
+        _createTrPlaceholder: function(e, i) {
+            var s = this;
+            e.children().each(function() {
+                t("<td>&#160;</td>", s.document[0]).attr("colspan", t(this).attr("colspan") || 1).appendTo(i)
+            })
+        },
+        _contactContainers: function(e) {
+            var i, s, n, o, a, r, l, h, c, u, d = null,
+                p = null;
+            for (i = this.containers.length - 1; i >= 0; i--)
+                if (!t.contains(this.currentItem[0], this.containers[i].element[0]))
+                    if (this._intersectsWith(this.containers[i].containerCache)) {
+                        if (d && t.contains(this.containers[i].element[0], d.element[0])) continue;
+                        d = this.containers[i], p = i
+                    } else this.containers[i].containerCache.over && (this.containers[i]._trigger("out", e, this._uiHash(this)), this
+                        .containers[i].containerCache.over = 0);
+            if (d)
+                if (1 === this.containers.length) this.containers[p].containerCache.over || (this.containers[p]._trigger("over", e, this
+                    ._uiHash(this)), this.containers[p].containerCache.over = 1);
+                else {
+                    for (n = 1e4, o = null, c = d.floating || this._isFloating(this.currentItem), a = c ? "left" : "top", r = c ? "width" :
+                        "height", u = c ? "pageX" : "pageY", s = this.items.length - 1; s >= 0; s--) t.contains(this.containers[p].element[0],
+                        this.items[s].item[0]) && this.items[s].item[0] !== this.currentItem[0] && (l = this.items[s].item.offset()[a],
+                        h = !1, e[u] - l > this.items[s][r] / 2 && (h = !0), n > Math.abs(e[u] - l) && (n = Math.abs(e[u] - l), o = this
+                            .items[s], this.direction = h ? "up" : "down"));
+                    if (!o && !this.options.dropOnEmpty) return;
+                    if (this.currentContainer === this.containers[p]) return this.currentContainer.containerCache.over || (this.containers[p]
+                        ._trigger("over", e, this._uiHash()), this.currentContainer.containerCache.over = 1), void 0;
+                    o ? this._rearrange(e, o, null, !0) : this._rearrange(e, null, this.containers[p].element, !0), this._trigger("change", e,
+                            this._uiHash()), this.containers[p]._trigger("change", e, this._uiHash(this)), this.currentContainer = this
+                        .containers[p], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[p]._trigger(
+                            "over", e, this._uiHash(this)), this.containers[p].containerCache.over = 1
+                }
+        },
+        _createHelper: function(e) {
+            var i = this.options,
+                s = t.isFunction(i.helper) ? t(i.helper.apply(this.element[0], [e, this.currentItem])) : "clone" === i.helper ? this.currentItem
+                .clone() : this.currentItem;
+            return s.parents("body").length || t("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[
+                    0] === this.currentItem[0] && (this._storedCSS = {
+                    width: this.currentItem[0].style.width,
+                    height: this.currentItem[0].style.height,
+                    position: this.currentItem.css("position"),
+                    top: this.currentItem.css("top"),
+                    left: this.currentItem.css("left")
+                }), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) &&
+                s.height(this.currentItem.height()), s
+        },
+        _adjustOffsetFromHelper: function(e) {
+            "string" == typeof e && (e = e.split(" ")), t.isArray(e) && (e = {
+                    left: +e[0],
+                    top: +e[1] || 0
+                }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this
+                    .helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top),
+                "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
+        },
+        _getParentOffset: function() {
+            this.offsetParent = this.helper.offsetParent();
+            var e = this.offsetParent.offset();
+            return "absolute" === this.cssPosition && this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this
+                .offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[
+                    0] === this.document[0].body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() &&
+                t.ui.ie) && (e = {
+                top: 0,
+                left: 0
+            }), {
+                top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+                left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+            }
+        },
+        _getRelativeOffset: function() {
+            if ("relative" === this.cssPosition) {
+                var t = this.currentItem.position();
+                return {
+                    top: t.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
+                    left: t.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
+                }
+            }
+            return {
+                top: 0,
+                left: 0
+            }
+        },
+        _cacheMargins: function() {
+            this.margins = {
+                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
+                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
+            }
+        },
+        _cacheHelperProportions: function() {
+            this.helperProportions = {
+                width: this.helper.outerWidth(),
+                height: this.helper.outerHeight()
+            }
+        },
+        _setContainment: function() {
+            var e, i, s, n = this.options;
+            "parent" === n.containment && (n.containment = this.helper[0].parentNode), ("document" === n.containment || "window" === n
+                .containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative
+                .top - this.offset.parent.top, "document" === n.containment ? this.document.width() : this.window.width() - this
+                .helperProportions.width - this.margins.left, ("document" === n.containment ? this.document.height() || document.body
+                    .parentNode.scrollHeight : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this
+                .helperProportions.height - this.margins.top
+            ]), /^(document|window|parent)$/.test(n.containment) || (e = t(n.containment)[0], i = t(n.containment).offset(), s =
+                "hidden" !== t(e).css("overflow"), this.containment = [i.left + (parseInt(t(e).css("borderLeftWidth"), 10) || 0) + (
+                    parseInt(t(e).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(t(e).css("borderTopWidth"),
+                    10) || 0) + (parseInt(t(e).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(e.scrollWidth, e
+                    .offsetWidth) : e.offsetWidth) - (parseInt(t(e).css("borderLeftWidth"), 10) || 0) - (parseInt(t(e).css(
+                    "paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(e.scrollHeight,
+                    e.offsetHeight) : e.offsetHeight) - (parseInt(t(e).css("borderTopWidth"), 10) || 0) - (parseInt(t(e).css(
+                    "paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
+        },
+        _convertPositionTo: function(e, i) {
+            i || (i = this.position);
+            var s = "absolute" === e ? 1 : -1,
+                n = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this
+                    .offsetParent[0]) ? this.scrollParent : this.offsetParent,
+                o = /(html|body)/i.test(n[0].tagName);
+            return {
+                top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent
+                    .scrollTop() : o ? 0 : n.scrollTop()) * s,
+                left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent
+                    .scrollLeft() : o ? 0 : n.scrollLeft()) * s
+            }
+        },
+        _generatePosition: function(e) {
+            var i, s, n = this.options,
+                o = e.pageX,
+                a = e.pageY,
+                r = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this
+                    .offsetParent[0]) ? this.scrollParent : this.offsetParent,
+                l = /(html|body)/i.test(r[0].tagName);
+            return "relative" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[
+                0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this
+                .offset
+                .click.left < this.containment[0] && (o = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click
+                .top < this.containment[1] && (a = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this
+                .containment[2] && (o = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this
+                .containment[3] && (a = this.containment[3] + this.offset.click.top)), n.grid && (i = this.originalPageY + Math.round((
+                    a - this.originalPageY) / n.grid[1]) * n.grid[1], a = this.containment ? i - this.offset.click.top >= this
+                .containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[
+                    1] ? i - n.grid[1] : i + n.grid[1] : i, s = this.originalPageX + Math.round((o - this.originalPageX) / n.grid[0]) *
+                n.grid[0], o = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <=
+                this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - n.grid[0] : s + n.grid[0] : s)), {
+                top: a - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this
+                    .scrollParent.scrollTop() : l ? 0 : r.scrollTop()),
+                left: o - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -
+                    this.scrollParent.scrollLeft() : l ? 0 : r.scrollLeft())
+            }
+        },
+        _rearrange: function(t, e, i, s) {
+            i ? i[0].appendChild(this.placeholder[0]) : e.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? e
+                .item[0] : e.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
+            var n = this.counter;
+            this._delay(function() {
+                n === this.counter && this.refreshPositions(!s)
+            })
+        },
+        _clear: function(t, e) {
+            function i(t, e, i) {
+                return function(s) {
+                    i._trigger(t, s, e._uiHash(e))
+                }
+            }
+            this.reverting = !1;
+            var s, n = [];
+            if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null,
+                this.helper[0] === this.currentItem[0]) {
+                for (s in this._storedCSS)("auto" === this._storedCSS[s] || "static" === this._storedCSS[s]) && (this._storedCSS[s] = "");
+                this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem, "ui-sortable-helper")
+            } else this.currentItem.show();
+            for (this.fromOutside && !e && n.push(function(t) {
+                    this._trigger("receive", t, this._uiHash(this.fromOutside))
+                }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition
+                .parent === this.currentItem.parent()[0] || e || n.push(function(t) {
+                    this._trigger("update", t, this._uiHash())
+                }), this !== this.currentContainer && (e || (n.push(function(t) {
+                    this._trigger("remove", t, this._uiHash())
+                }), n.push(function(t) {
+                    return function(e) {
+                        t._trigger("receive", e, this._uiHash(this))
+                    }
+                }.call(this, this.currentContainer)), n.push(function(t) {
+                    return function(e) {
+                        t._trigger("update", e, this._uiHash(this))
+                    }
+                }.call(this, this.currentContainer)))), s = this.containers.length - 1; s >= 0; s--) e || n.push(i("deactivate", this, this
+                .containers[s])), this.containers[s].containerCache.over && (n.push(i("out", this, this.containers[s])), this.containers[s]
+                .containerCache.over = 0);
+            if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this
+                ._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" ===
+                    this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, e || this._trigger("beforeStop", t, this._uiHash()), this
+                .placeholder[0].parentNode.removeChild(this.placeholder[0]), this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[
+                    0] && this.helper.remove(), this.helper = null), !e) {
+                for (s = 0; n.length > s; s++) n[s].call(this, t);
+                this._trigger("stop", t, this._uiHash())
+            }
+            return this.fromOutside = !1, !this.cancelHelperRemoval
+        },
+        _trigger: function() {
+            t.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
+        },
+        _uiHash: function(e) {
+            var i = e || this;
+            return {
+                helper: i.helper,
+                placeholder: i.placeholder || t([]),
+                position: i.position,
+                originalPosition: i.originalPosition,
+                offset: i.positionAbs,
+                item: i.currentItem,
+                sender: e ? e.element : null
+            }
+        }
+    }), t.ui.escapeSelector = function() {
+        var t = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
+        return function(e) {
+            return e.replace(t, "\\$1")
+        }
+    }(), t.widget("ui.tabs", {
+        version: "1.12.1",
+        delay: 300,
+        options: {
+            active: null,
+            classes: {
+                "ui-tabs": "ui-corner-all",
+                "ui-tabs-nav": "ui-corner-all",
+                "ui-tabs-panel": "ui-corner-bottom",
+                "ui-tabs-tab": "ui-corner-top"
+            },
+            collapsible: !1,
+            event: "click",
+            heightStyle: "content",
+            hide: null,
+            show: null,
+            activate: null,
+            beforeActivate: null,
+            beforeLoad: null,
+            load: null
+        },
+        _isLocal: function() {
+            var t = /#.*$/;
+            return function(e) {
+                var i, s;
+                i = e.href.replace(t, ""), s = location.href.replace(t, "");
+                try {
+                    i = decodeURIComponent(i)
+                } catch (n) {}
+                try {
+                    s = decodeURIComponent(s)
+                } catch (n) {}
+                return e.hash.length > 1 && i === s
+            }
+        }(),
+        _create: function() {
+            var e = this,
+                i = this.options;
+            this.running = !1, this._addClass("ui-tabs", "ui-widget ui-widget-content"), this._toggleClass("ui-tabs-collapsible", null, i
+                    .collapsible), this._processTabs(), i.active = this._initialActive(), t.isArray(i.disabled) && (i.disabled = t.unique(i
+                    .disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"), function(t) {
+                        return e.tabs.index(t)
+                    }))).sort()), this.active = this.options.active !== !1 && this.anchors.length ? this._findActive(i.active) : t(), this
+                ._refresh(), this.active.length && this.load(i.active)
+        },
+        _initialActive: function() {
+            var e = this.options.active,
+                i = this.options.collapsible,
+                s = location.hash.substring(1);
+            return null === e && (s && this.tabs.each(function(i, n) {
+                    return t(n).attr("aria-controls") === s ? (e = i, !1) : void 0
+                }), null === e && (e = this.tabs.index(this.tabs.filter(".ui-tabs-active"))), (null === e || -1 === e) && (e = this.tabs
+                    .length ? 0 : !1)), e !== !1 && (e = this.tabs.index(this.tabs.eq(e)), -1 === e && (e = i ? !1 : 0)), !i && e === !1 && this
+                .anchors.length && (e = 0), e
+        },
+        _getCreateEventData: function() {
+            return {
+                tab: this.active,
+                panel: this.active.length ? this._getPanelForTab(this.active) : t()
+            }
+        },
+        _tabKeydown: function(e) {
+            var i = t(t.ui.safeActiveElement(this.document[0])).closest("li"),
+                s = this.tabs.index(i),
+                n = !0;
+            if (!this._handlePageNav(e)) {
+                switch (e.keyCode) {
+                    case t.ui.keyCode.RIGHT:
+                    case t.ui.keyCode.DOWN:
+                        s++;
+                        break;
+                    case t.ui.keyCode.UP:
+                    case t.ui.keyCode.LEFT:
+                        n = !1, s--;
+                        break;
+                    case t.ui.keyCode.END:
+                        s = this.anchors.length - 1;
+                        break;
+                    case t.ui.keyCode.HOME:
+                        s = 0;
+                        break;
+                    case t.ui.keyCode.SPACE:
+                        return e.preventDefault(), clearTimeout(this.activating), this._activate(s), void 0;
+                    case t.ui.keyCode.ENTER:
+                        return e.preventDefault(), clearTimeout(this.activating), this._activate(s === this.options.active ? !1 : s), void 0;
+                    default:
+                        return
+                }
+                e.preventDefault(), clearTimeout(this.activating), s = this._focusNextTab(s, n), e.ctrlKey || e.metaKey || (i.attr(
+                    "aria-selected", "false"), this.tabs.eq(s).attr("aria-selected", "true"), this.activating = this._delay(function() {
+                    this.option("active", s)
+                }, this.delay))
+            }
+        },
+        _panelKeydown: function(e) {
+            this._handlePageNav(e) || e.ctrlKey && e.keyCode === t.ui.keyCode.UP && (e.preventDefault(), this.active.trigger("focus"))
+        },
+        _handlePageNav: function(e) {
+            return e.altKey && e.keyCode === t.ui.keyCode.PAGE_UP ? (this._activate(this._focusNextTab(this.options.active - 1, !1)), !0) : e
+                .altKey && e.keyCode === t.ui.keyCode.PAGE_DOWN ? (this._activate(this._focusNextTab(this.options.active + 1, !0)), !0) : void 0
+        },
+        _findNextTab: function(e, i) {
+            function s() {
+                return e > n && (e = 0), 0 > e && (e = n), e
+            }
+            for (var n = this.tabs.length - 1; - 1 !== t.inArray(s(), this.options.disabled);) e = i ? e + 1 : e - 1;
+            return e
+        },
+        _focusNextTab: function(t, e) {
+            return t = this._findNextTab(t, e), this.tabs.eq(t).trigger("focus"), t
+        },
+        _setOption: function(t, e) {
+            return "active" === t ? (this._activate(e), void 0) : (this._super(t, e), "collapsible" === t && (this._toggleClass(
+                    "ui-tabs-collapsible", null, e), e || this.options.active !== !1 || this._activate(0)), "event" === t && this
+                ._setupEvents(e), "heightStyle" === t && this._setupHeightStyle(e), void 0)
+        },
+        _sanitizeSelector: function(t) {
+            return t ? t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
+        },
+        refresh: function() {
+            var e = this.options,
+                i = this.tablist.children(":has(a[href])");
+            e.disabled = t.map(i.filter(".ui-state-disabled"), function(t) {
+                return i.index(t)
+            }), this._processTabs(), e.active !== !1 && this.anchors.length ? this.active.length && !t.contains(this.tablist[0], this
+                .active[0]) ? this.tabs.length === e.disabled.length ? (e.active = !1, this.active = t()) : this._activate(this
+                ._findNextTab(Math.max(0, e.active - 1), !1)) : e.active = this.tabs.index(this.active) : (e.active = !1, this.active =
+                t()), this._refresh()
+        },
+        _refresh: function() {
+            this._setOptionDisabled(this.options.disabled), this._setupEvents(this.options.event), this._setupHeightStyle(this.options
+                .heightStyle), this.tabs.not(this.active).attr({
+                "aria-selected": "false",
+                "aria-expanded": "false",
+                tabIndex: -1
+            }), this.panels.not(this._getPanelForTab(this.active)).hide().attr({
+                "aria-hidden": "true"
+            }), this.active.length ? (this.active.attr({
+                "aria-selected": "true",
+                "aria-expanded": "true",
+                tabIndex: 0
+            }), this._addClass(this.active, "ui-tabs-active", "ui-state-active"), this._getPanelForTab(this.active).show().attr({
+                "aria-hidden": "false"
+            })) : this.tabs.eq(0).attr("tabIndex", 0)
+        },
+        _processTabs: function() {
+            var e = this,
+                i = this.tabs,
+                s = this.anchors,
+                n = this.panels;
+            this.tablist = this._getList().attr("role", "tablist"), this._addClass(this.tablist, "ui-tabs-nav",
+                "ui-helper-reset ui-helper-clearfix ui-widget-header"), this.tablist.on("mousedown" + this.eventNamespace, "> li", function(
+                e) {
+                t(this).is(".ui-state-disabled") && e.preventDefault()
+            }).on("focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
+                t(this).closest("li").is(".ui-state-disabled") && this.blur()
+            }), this.tabs = this.tablist.find("> li:has(a[href])").attr({
+                role: "tab",
+                tabIndex: -1
+            }), this._addClass(this.tabs, "ui-tabs-tab", "ui-state-default"), this.anchors = this.tabs.map(function() {
+                return t("a", this)[0]
+            }).attr({
+                role: "presentation",
+                tabIndex: -1
+            }), this._addClass(this.anchors, "ui-tabs-anchor"), this.panels = t(), this.anchors.each(function(i, s) {
+                var n, o, a, r = t(s).uniqueId().attr("id"),
+                    l = t(s).closest("li"),
+                    h = l.attr("aria-controls");
+                e._isLocal(s) ? (n = s.hash, a = n.substring(1), o = e.element.find(e._sanitizeSelector(n))) : (a = l.attr(
+                    "aria-controls") || t({}).uniqueId()[0].id, n = "#" + a, o = e.element.find(n), o.length || (o = e
+                    ._createPanel(a), o.insertAfter(e.panels[i - 1] || e.tablist)), o.attr("aria-live", "polite")), o.length && (e
+                    .panels = e.panels.add(o)), h && l.data("ui-tabs-aria-controls", h), l.attr({
+                    "aria-controls": a,
+                    "aria-labelledby": r
+                }), o.attr("aria-labelledby", r)
+            }), this.panels.attr("role", "tabpanel"), this._addClass(this.panels, "ui-tabs-panel", "ui-widget-content"), i && (this._off(i
+                .not(this.tabs)), this._off(s.not(this.anchors)), this._off(n.not(this.panels)))
+        },
+        _getList: function() {
+            return this.tablist || this.element.find("ol, ul").eq(0)
+        },
+        _createPanel: function(e) {
+            return t("<div>").attr("id", e).data("ui-tabs-destroy", !0)
+        },
+        _setOptionDisabled: function(e) {
+            var i, s, n;
+            for (t.isArray(e) && (e.length ? e.length === this.anchors.length && (e = !0) : e = !1), n = 0; s = this.tabs[n]; n++) i = t(s),
+                e === !0 || -1 !== t.inArray(n, e) ? (i.attr("aria-disabled", "true"), this._addClass(i, null, "ui-state-disabled")) : (i
+                    .removeAttr("aria-disabled"), this._removeClass(i, null, "ui-state-disabled"));
+            this.options.disabled = e, this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, e === !0)
+        },
+        _setupEvents: function(e) {
+            var i = {};
+            e && t.each(e.split(" "), function(t, e) {
+                i[e] = "_eventHandler"
+            }), this._off(this.anchors.add(this.tabs).add(this.panels)), this._on(!0, this.anchors, {
+                click: function(t) {
+                    t.preventDefault()
+                }
+            }), this._on(this.anchors, i), this._on(this.tabs, {
+                keydown: "_tabKeydown"
+            }), this._on(this.panels, {
+                keydown: "_panelKeydown"
+            }), this._focusable(this.tabs), this._hoverable(this.tabs)
+        },
+        _setupHeightStyle: function(e) {
+            var i, s = this.element.parent();
+            "fill" === e ? (i = s.height(), i -= this.element.outerHeight() - this.element.height(), this.element.siblings(":visible").each(
+                function() {
+                    var e = t(this),
+                        s = e.css("position");
+                    "absolute" !== s && "fixed" !== s && (i -= e.outerHeight(!0))
+                }), this.element.children().not(this.panels).each(function() {
+                i -= t(this).outerHeight(!0)
+            }), this.panels.each(function() {
+                t(this).height(Math.max(0, i - t(this).innerHeight() + t(this).height()))
+            }).css("overflow", "auto")) : "auto" === e && (i = 0, this.panels.each(function() {
+                i = Math.max(i, t(this).height("").height())
+            }).height(i))
+        },
+        _eventHandler: function(e) {
+            var i = this.options,
+                s = this.active,
+                n = t(e.currentTarget),
+                o = n.closest("li"),
+                a = o[0] === s[0],
+                r = a && i.collapsible,
+                l = r ? t() : this._getPanelForTab(o),
+                h = s.length ? this._getPanelForTab(s) : t(),
+                c = {
+                    oldTab: s,
+                    oldPanel: h,
+                    newTab: r ? t() : o,
+                    newPanel: l
+                };
+            e.preventDefault(), o.hasClass("ui-state-disabled") || o.hasClass("ui-tabs-loading") || this.running || a && !i.collapsible || this
+                ._trigger("beforeActivate", e, c) === !1 || (i.active = r ? !1 : this.tabs.index(o), this.active = a ? t() : o, this.xhr && this
+                    .xhr.abort(), h.length || l.length || t.error("jQuery UI Tabs: Mismatching fragment identifier."), l.length && this.load(
+                        this.tabs.index(o), e), this._toggle(e, c))
+        },
+        _toggle: function(e, i) {
+            function s() {
+                o.running = !1, o._trigger("activate", e, i)
+            }
+
+            function n() {
+                o._addClass(i.newTab.closest("li"), "ui-tabs-active", "ui-state-active"), a.length && o.options.show ? o._show(a, o.options
+                    .show, s) : (a.show(), s())
+            }
+            var o = this,
+                a = i.newPanel,
+                r = i.oldPanel;
+            this.running = !0, r.length && this.options.hide ? this._hide(r, this.options.hide, function() {
+                o._removeClass(i.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"), n()
+            }) : (this._removeClass(i.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"), r.hide(), n()), r.attr("aria-hidden",
+                "true"), i.oldTab.attr({
+                "aria-selected": "false",
+                "aria-expanded": "false"
+            }), a.length && r.length ? i.oldTab.attr("tabIndex", -1) : a.length && this.tabs.filter(function() {
+                return 0 === t(this).attr("tabIndex")
+            }).attr("tabIndex", -1), a.attr("aria-hidden", "false"), i.newTab.attr({
+                "aria-selected": "true",
+                "aria-expanded": "true",
+                tabIndex: 0
+            })
+        },
+        _activate: function(e) {
+            var i, s = this._findActive(e);
+            s[0] !== this.active[0] && (s.length || (s = this.active), i = s.find(".ui-tabs-anchor")[0], this._eventHandler({
+                target: i,
+                currentTarget: i,
+                preventDefault: t.noop
+            }))
+        },
+        _findActive: function(e) {
+            return e === !1 ? t() : this.tabs.eq(e)
+        },
+        _getIndex: function(e) {
+            return "string" == typeof e && (e = this.anchors.index(this.anchors.filter("[href$='" + t.ui.escapeSelector(e) + "']"))), e
+        },
+        _destroy: function() {
+            this.xhr && this.xhr.abort(), this.tablist.removeAttr("role").off(this.eventNamespace), this.anchors.removeAttr("role tabIndex")
+                .removeUniqueId(), this.tabs.add(this.panels).each(function() {
+                    t.data(this, "ui-tabs-destroy") ? t(this).remove() : t(this).removeAttr(
+                        "role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")
+                }), this.tabs.each(function() {
+                    var e = t(this),
+                        i = e.data("ui-tabs-aria-controls");
+                    i ? e.attr("aria-controls", i).removeData("ui-tabs-aria-controls") : e.removeAttr("aria-controls")
+                }), this.panels.show(), "content" !== this.options.heightStyle && this.panels.css("height", "")
+        },
+        enable: function(e) {
+            var i = this.options.disabled;
+            i !== !1 && (void 0 === e ? i = !1 : (e = this._getIndex(e), i = t.isArray(i) ? t.map(i, function(t) {
+                return t !== e ? t : null
+            }) : t.map(this.tabs, function(t, i) {
+                return i !== e ? i : null
+            })), this._setOptionDisabled(i))
+        },
+        disable: function(e) {
+            var i = this.options.disabled;
+            if (i !== !0) {
+                if (void 0 === e) i = !0;
+                else {
+                    if (e = this._getIndex(e), -1 !== t.inArray(e, i)) return;
+                    i = t.isArray(i) ? t.merge([e], i).sort() : [e]
+                }
+                this._setOptionDisabled(i)
+            }
+        },
+        load: function(e, i) {
+            e = this._getIndex(e);
+            var s = this,
+                n = this.tabs.eq(e),
+                o = n.find(".ui-tabs-anchor"),
+                a = this._getPanelForTab(n),
+                r = {
+                    tab: n,
+                    panel: a
+                },
+                l = function(t, e) {
+                    "abort" === e && s.panels.stop(!1, !0), s._removeClass(n, "ui-tabs-loading"), a.removeAttr("aria-busy"), t === s.xhr &&
+                        delete s.xhr
+                };
+            this._isLocal(o[0]) || (this.xhr = t.ajax(this._ajaxSettings(o, i, r)), this.xhr && "canceled" !== this.xhr.statusText && (this
+                ._addClass(n, "ui-tabs-loading"), a.attr("aria-busy", "true"), this.xhr.done(function(t, e, n) {
+                    setTimeout(function() {
+                        a.html(t), s._trigger("load", i, r), l(n, e)
+                    }, 1)
+                }).fail(function(t, e) {
+                    setTimeout(function() {
+                        l(t, e)
+                    }, 1)
+                })))
+        },
+        _ajaxSettings: function(e, i, s) {
+            var n = this;
+            return {
+                url: e.attr("href").replace(/#.*$/, ""),
+                beforeSend: function(e, o) {
+                    return n._trigger("beforeLoad", i, t.extend({
+                        jqXHR: e,
+                        ajaxSettings: o
+                    }, s))
+                }
+            }
+        },
+        _getPanelForTab: function(e) {
+            var i = t(e).attr("aria-controls");
+            return this.element.find(this._sanitizeSelector("#" + i))
+        }
+    }), t.uiBackCompat !== !1 && t.widget("ui.tabs", t.ui.tabs, {
+        _processTabs: function() {
+            this._superApply(arguments), this._addClass(this.tabs, "ui-tab")
+        }
+    }), t.ui.tabs
+  });
+
diff -urN zabbix-4.0.8.orig/debian/patches/fping3-sourceip-option.patch zabbix-4.0.8/debian/patches/fping3-sourceip-option.patch
--- zabbix-4.0.8.orig/debian/patches/fping3-sourceip-option.patch	2019-05-29 07:19:06.201650499 -0500
+++ zabbix-4.0.8/debian/patches/fping3-sourceip-option.patch	2019-05-29 07:50:16.745141682 -0500
@@ -1,3 +1,4 @@
+Description: [ZBX-4894] fixed fping 3.x source IP option detection (asaveljevs)
 diff -Nru zabbix-3.0.2.orig/src/libs/zbxicmpping/icmpping.c zabbix-3.0.2/src/libs/zbxicmpping/icmpping.c
 --- zabbix-3.0.2.orig/src/libs/zbxicmpping/icmpping.c	2016-04-20 18:51:21.000000000 +0900
 +++ zabbix-3.0.2/src/libs/zbxicmpping/icmpping.c	2016-04-20 22:28:59.000000000 +0900
diff -urN zabbix-4.0.8.orig/debian/rules zabbix-4.0.8/debian/rules
--- zabbix-4.0.8.orig/debian/rules	2019-05-29 07:19:06.209650533 -0500
+++ zabbix-4.0.8/debian/rules	2019-05-29 17:42:29.037437372 -0500
@@ -1,5 +1,10 @@
 #!/usr/bin/make -f
 
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+
 PACKAGES	= PGSQL MYSQL SQLITE3
 MYSQL_NAME	= mysql
 PGSQL_NAME	= postgresql
diff -urN zabbix-4.0.8.orig/debian/watch zabbix-4.0.8/debian/watch
--- zabbix-4.0.8.orig/debian/watch	1969-12-31 18:00:00.000000000 -0600
+++ zabbix-4.0.8/debian/watch	2019-05-29 08:01:51.751603759 -0500
@@ -0,0 +1,2 @@
+version=4
+http://sf.net/zabbix/zabbix-(.+)\.tar\.gz
diff -urN zabbix-4.0.8.orig/debian/zabbix-agent.service zabbix-4.0.8/debian/zabbix-agent.service
--- zabbix-4.0.8.orig/debian/zabbix-agent.service	2019-05-29 07:19:06.201650499 -0500
+++ zabbix-4.0.8/debian/zabbix-agent.service	2019-05-29 10:06:35.040856193 -0500
@@ -1,6 +1,5 @@
 [Unit]
 Description=Zabbix Agent
-After=syslog.target
 After=network.target
 
 [Service]
diff -urN zabbix-4.0.8.orig/debian/zabbix-frontend-php.dirs zabbix-4.0.8/debian/zabbix-frontend-php.dirs
--- zabbix-4.0.8.orig/debian/zabbix-frontend-php.dirs	2019-05-29 07:19:06.201650499 -0500
+++ zabbix-4.0.8/debian/zabbix-frontend-php.dirs	2019-05-29 07:19:35.209771098 -0500
@@ -1,5 +1,6 @@
 etc/zabbix
 etc/zabbix/web
 usr/share/zabbix
-usr/share/zabbix/fonts
+usr/share/zabbix/assets
+usr/share/zabbix/assets/fonts
 usr/share/doc/zabbix-frontend-php
diff -urN zabbix-4.0.8.orig/debian/zabbix-frontend-php.postinst zabbix-4.0.8/debian/zabbix-frontend-php.postinst
--- zabbix-4.0.8.orig/debian/zabbix-frontend-php.postinst	2019-05-29 07:19:06.205650516 -0500
+++ zabbix-4.0.8/debian/zabbix-frontend-php.postinst	2019-05-29 07:23:21.782712077 -0500
@@ -7,16 +7,21 @@
        chmod 755 /etc/zabbix/web
     fi
 
+    if [ -d /usr/share/zabbix/assets ]; then
+       chown www-data.root /usr/share/zabbix/assets
+       chmod 755 /usr/share/zabbix/assets
+    fi
+
     for file in /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf; do
 	if [ -e $file ]; then
-            update-alternatives --install /usr/share/zabbix/fonts/graphfont.ttf zabbix-frontend-font $file 10
+            update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font $file 10
 	    break
 	fi
     done
 
     for file in /etc/alternatives/ttf-japanese-gothic.ttf /etc/alternatives/fonts-japanese-gothic.ttf; do
         if [ -e $file ]; then
-            update-alternatives --install /usr/share/zabbix/fonts/graphfont.ttf zabbix-frontend-font $file 20
+            update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font $file 20
             break
         fi
     done
