Best JavaScript code snippet using testcafe
gs.js
Source:gs.js  
1var Gridsum;2(function (a) {3    function n(a) {4        return "string" == typeof a5    }6    var c = document, b = Math;7    a.b = {8        lower: function (a) {9            return a && n(a) ? a.toLowerCase() : a10        }, indexOf: function (a, c, d) {11            if (a) {12                if (a.indexOf) return a.indexOf(c, d);13                if (a.length) for (d = d || 0; d < a.length; d++) if (a[d] === c) return d14            }15            return -116        }, qa: function (m, c) {17            var d = 1315423911, q, r;18            c || (m = a.b.lower(m));19            for (q = m.length - 1; 0 <= q; q--) r = m.charCodeAt(q), d ^= (d << 5) + r + (d >> 2);20            return d & 214748364721        }, Ma: function () {22            return b.round((new Date).getTimezoneOffset() / -60) + ""23        }, Aa: function () {24            return (new Date).getTime() + 36E5 * Number(a.b.Ma())25        }, ra: function (a) {26            var m, d = [];27            for (m = 0; m < a; m++) d.push("abcdefghijklmnopqrstuvwxyz0123456789".charAt(b.round(35 * b.random())));28            return d.join("")29        }, A: function (m) {30            var c = (new Date).getTime() + "", d = "";31            m || (d = "" + b.abs(a.b.qa(location.href + document.referrer + navigator.userAgent)), d = d.substring(0, 2 < d.length ? 2 : d.length));32            return c.substring(2, c.length - 3) + (m ? a.b.ra(8) : a.b.ra(6)) + d33        }, P: function (m, b, d) {34            if (!m) return null;35            var q, r = a.b.Lb(c.cookie, "=", ";", !0);36            m = a.b.lower(m);37            for (q in r) if (r && r.hasOwnProperty && r.hasOwnProperty(q) && a.b.lower(q) === m) return d ? r[q] : a.b.decode(r[q]);38            return b || null39        }, W: function (m, b, d, q, r, n, A) {40            m && (m = a.b.lower(m), A || (b = a.b.encode(b)), m = m + "=" + b + ";", b = d ? "expires=" + a.b.hc(d).toUTCString() + ";" : "", c.cookie = m + b + (q ? "path=" + q + ";" : "path=/;") + (r ? "domain=" + r + ";" : "") + (n ? "secure=true;" : ""))41        }, lb: function (m, c, d) {42            a.b.W(m, "", -1E3, c, d)43        }, hc: function (a) {44            return new Date((new Date).getTime() + 1E3 * a)45        }, trim: function (a) {46            return a && n(a) ? a.replace(/(^\s+)|(\s+$)/ig, "") : a47        }, Lb: function (m, c, d, q) {48            var b = {};49            c = c || "=";50            m = m.split(d || "&");51            var n = q ? a.b.trim : function (a) {52                return a53            };54            for (q = 0; q < m.length; q++) d = m[q].indexOf(c), -1 < d ? b[n(m[q].substring(0, d))] = n(m[q].substring(d + 1)) : b[m[q]] = null;55            return b56        }, encode: function (a) {57            return a && n(a) ? (encodeURIComponent || escape)(a) : a58        }, decode: function (a) {59            if (a && n(a)) {60                a = a.replace(/\+/ig, "%20");61                try {62                    return (decodeURIComponent || unescape)(a)63                } catch (z) {64                }65            }66            return a67        }, Ce: function () {68            a.b.W("gs_tc", "1");69            var m = a.b.P("gs_tc");70            a.b.lb("gs_tc");71            return !!m72        }, mc: function (m) {73            var c = "cn hk tw au uk us \u516c\u53f8 \u4e2d\u56fd \u7f51\u7edc".split(" "),74                d = "com edu net org gov int cc me tel mobi asia biz info name tv".split(" "), q = m.split("."),75                b = q.length;76            return 3 <= b ? -1 < a.b.indexOf(c, q[b - 1]) && -1 < a.b.indexOf(d, q[b - 2]) ? q[b - 3] + "." + q[b - 2] + "." + q[b - 1] : q[b - 2] + "." + q[b - 1] : m77        }, Ne: function (b) {78            for (var m in b) a.b[m] = b[m]79        }, Jf: function (a) {80            var b = {}, d = location.search.substring(1);81            a && (a = a.split("?"), 2 == a.length && (d = a[1]));82            d = d.split("&");83            for (a = 0; a < d.length; a++) {84                var q = d[a].indexOf("=");85                -1 != q && (b[d[a].substring(0, q)] = decodeURIComponent(d[a].substring(q + 1)))86            }87            return b88        }, ic: function () {89            for (var a = "", b = 0; 8 > b; b++) a += (65536 * (1 + Math.random()) | 0).toString(16).substring(1);90            return a91        }, ge: function (a) {92            return 6E4 * a.getTimezoneOffset() + a.getTime()93        }94    }95})(Gridsum || (Gridsum = {}));96(function (a) {97    var n = window, c = document, b = c.documentElement, m = location, z = navigator.userAgent.toLowerCase(), d = Math,98        q, r, w, A, B, h, f, l = {99            nb: ["diag-wd.gridsumdissector.com/receivewddiag/gs.gif"], l: void 0, ed: function (a) {100                return a101            }, isArray: function (a) {102                return a && a.constructor == Array103            }, Cc: function (a, f) {104                return a && a.hasOwnProperty ? a.hasOwnProperty(f) : !1105            }, sa: function (a) {106                return "string" == typeof a107            }, R: function (a, f, v, h) {108                if (!f) return null;109                a = (a || m.pathname + m.search).replace(/\#.*/ig, "");110                for (var e = ["&", "?"], p = 0; 2 > p; p++) {111                    var y = l.find(a, e[p] + f + "=", "&", v);112                    if (null != y) return h ? A(y) : y113                }114                return null115            }, find: function (a, f, v, h, e) {116                a = l.dc(a, f, v, h, e);117                f = a.length;118                return 0 < f ? a[f - 1] : null119            }, dc: function (p, y, l, h, e) {120                if (!p || !f(p)) return [];121                var v = [], d, b, c = "";122                b = 0;123                y = y || "";124                h || (c = q(p), y = q(y), l = q(l));125                for (; -1 < b;) {126                    h = null;127                    -1 < (d = r(c, y, b)) && (h = d + y.length, l ? (b = r(c, l, h), b >= h ? (h = p.substring(h, b), b += l.length) : (h = p.substring(h), b = -1)) : (h = p.substring(h), b = -1));128                    if (!h) break;129                    v.push(e ? h : a.b.trim(h))130                }131                return v132            }, yb: function (a, f, l, h) {133                l = h ? l || m.pathname : q(l || m.pathname);134                f = q(f);135                B(a) || (a = [a]);136                for (h = 0; h < a.length; h++) {137                    var e = q(a[h]);138                    if ("contains" == f && -1 < r(l, e) || "startswith" == f && 0 == r(l, e) || "endswith" == f && -1 < r(l, e, l.length - e.length) || "exactmatch" == f && l == e || "regex" == f && e.test && e.test(l)) return !0139                }140                return !1141            }, ta: function (f) {142                for (; f && " " == f[0];) f = f.substr(1);143                var p, l = {url: f};144                (p = f.match(/((\w+:)?\/\/([^\/\#&?]*))?\/?([^?#]*)?(\?[^#]*)?(#.*)?/)) ? (f = p[2] || m.protocol, l.protocol = f.substring(0, f.length - 1), l.local = "file" == l.protocol, l.host = p[3] || m.host, l.path = "/" + (p[4] || ""), l.fullPath = l.path, l.query = (p[5] || "").substring(1), l.anchor = (p[6] || "").substring(1), l.query && (l.fullPath += "?" + l.query, l.g = a.b.Lb(l.query.replace(/\?/g, "&")))) : (l.local = !0, l.protocol = "file", l.fullPath = l.path = "/" + f.replace(/\\/g, "/"));145                return l146            }, D: function (a, f, b, d, e) {147                function p(e) {148                    if (!e) return "";149                    var a = [], f;150                    for (f in e) h(e, f) && (e[f] || 0 === e[f]) && a.push(f + ":" + w(e[f]));151                    return a.join(";")152                }153                var y = [];154                e = e ? l.ed : w;155                var v, q = "gsurl gsorurl gsref gsmcurl lk url gssresurl gssref gsourl".split(" ");156                f = f || "=";157                b = b || "&";158                for (v in a) {159                    var c = !1, m;160                    for (m in q) if (q[m] == v) {161                        c = !0;162                        break163                    }164                    !c && h(a, v) && (d || a[v] || 0 === a[v]) && y.push(v + f + ("pcp" == v || "ecp" == v ? p(a[v]) : e(a[v])))165                }166                for (v = 0; v < q.length; v++) h(a, q[v]) && (d || a[q[v]] || 0 === a[q[v]]) && y.push(q[v] + f + e(a[q[v]]));167                return y.join(b)168            }, T: function (a) {169                return f(a) ? c.getElementById(a) : a170            }, Pb: function (a, f, h, b, e) {171                b = b || 30;172                var p = setInterval(function () {173                    var h;174                    if (a.split) {175                        var y = a.split(".", 3), v = y.length, d = n;176                        if (1 < v) {177                            for (h = 0; h < v; h++) if (!h || "window" != y[h]) if (d = d[y[h]], !d) break;178                            h = d179                        }180                    }181                    h || (h = l.T(a)) ? (clearInterval(p), f(h)) : 0 < b ? --b : (clearInterval(p), e && e(h))182                }, h || 1E3)183            }, o: function (a) {184                var f, h, p;185                f = c.body;186                if (null === a.parentNode || "none" == a.style.display) return null;187                if (a.getBoundingClientRect) return h = a.getBoundingClientRect(), a = d.max(b.scrollTop, f.scrollTop), f = d.max(b.scrollLeft, f.scrollLeft), f = "BackCompat" == c.compatMode && l.Pa() ? {188                    x: h.left,189                    y: h.top190                } : {x: h.left + f, y: h.top + a};191                if (c.getBoxObjectFor) h = c.getBoxObjectFor(a), p = [h.x - (a.style.borderLeftWidth ? parseInt(a.style.borderLeftWidth, 10) : 0), h.y - (a.style.borderTopWidth ? parseInt(a.style.borderTopWidth, 10) : 0)]; else {192                    p = [a.offsetLeft, a.offsetTop];193                    h = a.offsetParent;194                    if (h != a) for (; h;) p[0] += h.offsetLeft, p[1] += h.offsetTop, h = h.offsetParent;195                    if (-1 != r(z, "opera") || -1 != r(z, "safari") && "absolute" == a.style.position) p[0] -= f.offsetLeft, p[1] -= f.offsetTop196                }197                for (h = a.parentNode ? a.parentNode : null; h && "BODY" != h.tagName && "HTML" != h.tagName;) p[0] -= h.scrollLeft, p[1] -= h.scrollTop, h = h.parentNode ? h.parentNode : null;198                return f = {x: p[0], y: p[1]}199            }, pb: function () {200                return b && b.scrollWidth || c.body && c.body.scrollWidth || 0201            }, lc: function (a) {202                var f = c.body || {scrollLeft: 0, scrollTop: 0};203                return {204                    x: a.pageX || a.clientX + (b.scrollLeft || f.scrollLeft) - (b.clientLeft || 0),205                    y: a.pageY || a.clientY + (b.scrollTop || f.scrollTop) - (b.clientTop || 0)206                }207            }, observe: function (a, f, h) {208                function p(e) {209                    e.target || (e.target = e.srcElement || a);210                    if (!e.pageX) {211                        var f = l.lc(e);212                        e.pageX = f.x;213                        e.pageY = f.y214                    }215                    e.root = a;216                    h.call(a, e)217                }218                "beforeunload" == f && l.Bc() && (f = "pagehide");219                a = l.T(a);220                if (!a) return null;221                a.addEventListener ? a.addEventListener(f, p, !1) : a.attachEvent("on" + f, p);222                return a223            }, Ha: function (a, f) {224                function h(a) {225                    e = a.pageX;226                    b = a.pageY227                }228                function p(h) {229                    h.target || (h.target = h.srcElement || a);230                    try {231                        if (h.changedTouches[0].pageX != e || h.changedTouches[0].pageY != b) {232                            b = e = null;233                            return234                        }235                    } catch (J) {236                        l.f("", "M_utility_observeTouch", J);237                        b = e = null;238                        return239                    }240                    l.l = {la: e, ma: b};241                    b = e = null;242                    h.root = a;243                    f.call(a, h)244                }245                var e, b;246                a = l.T(a);247                if (!a) return null;248                a.addEventListener ? (a.addEventListener("touchstart", h, !1), a.addEventListener("touchend", p, !1)) : (a.attachEvent("ontouchstart", h), a.attachEvent("ontouchend", p));249                return a250            }, ha: function (f) {251                if (f = l.T(f)) {252                    if (f.innerText) return a.b.trim(f.innerText).replace(/\n+/ig, " ");253                    if (f.innerHTML) return a.b.trim(f.innerHTML.replace(/<[^>]+>/ig, "")).replace(/\n+/ig, "")254                }255                return null256            }, ia: function (a, f) {257                a = l.T(a);258                var h = "";259                if (a && a.innerHTML) for (var b = a.innerHTML, e = b.indexOf(f + '="'); -1 != e;) var e = e + (f.length + 2), p = b.indexOf('"', e), h = h + b.substr(e, p - e), b = b.substr(p), e = b.indexOf(f + '="');260                return h261            }, s: function (a, l, b, d, e) {262                var p;263                b = q(b);264                a = a && a.parentNode;265                var y = void 0 === l.target || f(l.target) ? l : l.target;266                do {267                    l = !0;268                    if (!b || q(y.tagName) == b) for (p in l = !1, d) if (h(d, p) && 0 > r(q(y[p] || y.getAttribute(p)), q(d[p]))) {269                        l = !0;270                        break271                    }272                    if (l) y = y.parentNode; else return y;273                    if (0 == e) break;274                    e--275                } while (y && y != a && y.getAttribute);276                return null277            }, f: function (f, h, b) {278                try {279                    b = b || {};280                    for (var p = 0; p < l.nb.length; p++) {281                        var e = ("https:" == m.protocol ? "https://" : "http://") + l.nb[p] + "?gscmd=err&gsrd=" + d.round(2147483647 * d.random()) + "&gsver=" + a.j.version + "&gserrc=" + h + "&gssrvid=" + f + "&gserrobj=" + l.D(b, "~", "'");282                        (new Image(1, 1)).src = e283                    }284                } catch (G) {285                }286            }, fc: function (f, h) {287                var b, p, e, d = h.fb, q = h.Ab, c = h.Jb, y = h.Bb, m = h.jb, r = h.sb, n = h.gb, z = h.Tb, w = h.I;288                p = l.ta(f);289                !p.local && (p = new a.nd(p.host, [], [d, q, c, y, m, r, n, z]), b = {290                    xa: w.xa,291                    group: w.group,292                    source: w.source,293                    Ga: w.Ga,294                    Ea: w.Ea,295                    content: w.content,296                    channel: w.channel,297                    ua: w.ua298                }, p = p.match(f.replace(/#/g, "?"))) && (e = p.g, 0 !== p.Ue && (b.xa = w.xa || (d != h.Vb ? A(e[d]) : null), b.group = w.group || (r != h.oc ? A(e[r]) : null), b.source = w.source || (c != h.Xc ? A(e[c]) : null), b.Ga = w.Ga || (y != h.Lc ? A(e[y]) : null), b.Ea = w.Ea || (q != h.Fc ? A(e[q]) : null), b.content = w.content || (m != h.Zb ? A(e[m]) : null), b.channel = w.channel || (n != h.Wb ? A(e[n]) : null), b.ua = w.ua || (z != h.Ub ? A(e[z]) : null)));299                return b300            }, Pa: function () {301                return "\v" == "v"302            }, Bc: function () {303                var a = navigator.userAgent;304                return 0 <= a.indexOf("Android") || 0 <= a.indexOf("iPhone") || 0 <= a.indexOf("iPad")305            }, Kf: function () {306                var a = navigator.userAgent;307                return 0 <= a.indexOf("iPhone") || 0 <= a.indexOf("iPad")308            }, H: function (f, h) {309                return q(w(f + "_" + a.b.qa(h.c + "_" + h.domain)))310            }, Yd: function () {311                function a(a, e) {312                    var f = e.match(a);313                    return f ? f[1] : null314                }315                var f, h, l = navigator.plugins, e, b, d = null, c = null;316                if (l && 0 < (e = l.length)) for (h = 0; h < e; h++) f = q(l[h].description), b = q(l[h].name), !d && f && -1 < r(f, "shockwave flash") && (d = a(/shockwave flash (\d+\.\d+)/i, f)), !c && b && f && -1 < r(b, "silverlight") && (c = a(/(\d+\.\d+)/i, f));317                return {Sd: d, lf: c}318            }, Ka: function () {319                try {320                    var f = n.sessionStorage;321                    if (f) {322                        var h = f.getItem("_gsdvid_");323                        if (h && 32 === h.length) return h;324                        var l = a.b.R(m.href, "_gsdvid_");325                        if (l && 32 === l.length) return f && f.setItem("_gsdvid_", l), l326                    }327                } catch (E) {328                }329                return null330            }, va: function (f, h, l) {331                try {332                    var b = new a.$a(f);333                    if (!h) return b;334                    var e = h.split("&"), d = b.g, p;335                    for (p in e) for (var q in l) if (-1 < e[p].indexOf(l[q])) {336                        var c = e[p].split("=");337                        for (f = 0; f < d.length; f++) 0 === d[f].indexOf(c[0]) && b.Dd(f, e[p]);338                        b.cb(c[0], c[1])339                    }340                    return b341                } catch (R) {342                    return b343                }344            }, vd: function (f, h, l) {345                try {346                    var b = new a.$a(f), e = h.split("?");347                    1 < e.length && (b = a.b.va(f, e[1], ["utm_"]));348                    l && b.bb("refurl", l);349                    return b.toString()350                } catch (G) {351                    return f352                }353            }, Re: function (f) {354                location.href = a.b.vd(f, m.href, c.referrer)355            }, qb: function (a) {356                return Number(a.split("-")[1])357            }, Xa: function (a, f) {358                f--;359                try {360                    return decodeURIComponent(a.substring(0, f))361                } catch (v) {362                    return l.Xa(a, f)363                }364            }365        };366    q = a.b.lower;367    r = a.b.indexOf;368    w = a.b.encode;369    A = a.b.decode;370    B = l.isArray;371    h = l.Cc;372    f = l.sa;373    a.b.Ne(l)374})(Gridsum || (Gridsum = {}));375(function (a) {376    var n = function () {377        function c(a) {378            this.a = a379        }380        c.prototype.get = function (b, c) {381            if ("_gscu" === b) {382                var m = a.b.R(location.href, "_gscu_");383                null !== m && this.set("_gscu", m, 63072E3)384            } else "_gscs" === b && (m = a.b.R(location.href, "_gscs_"), null !== m && (m = a.b.decode(m), this.set("_gscs", m, 1800)));385            return a.b.P(a.b.H(b, this.a), c, !0)386        };387        c.prototype.set = function (b, c, n, d, q, r) {388            q = q || this.a.domain;389            d = d || this.a.path;390            r = r || this.a.gf;391            a.b.W(a.b.H(b, this.a), c, n, d, q, r, !0)392        };393        c.prototype.remove = function (a) {394            this.set(a, "0", -1E3)395        };396        return c397    }();398    a.Za = n399})(Gridsum || (Gridsum = {}));400(function (a) {401    var n = window, c = function () {402        function d(d) {403            void 0 == n.gstempobj && (n.gstempobj = "");404            this.a = d;405            this.Wa = [new a.Za(d), new b(d), new m(d), new z(d)]406        }407        d.prototype.get = function (a, b) {408            if (!a) return null;409            var d;410            try {411                d = sessionStorage.getItem("_gsdvid_")412            } catch (f) {413            }414            var c, q, h;415            for (q = 0; 4 > q; q++) if (c = this.Wa[q].get(a)) {416                for (h = 0; 4 > h; h++) q != h && this.Wa[h].set(a, c, 63072E3);417                return "_gscu" === a ? d || c : c418            }419            return "_gscu" === a ? d || b || null : b || null420        };421        d.prototype.set = function (a, b, d, c, m, h) {422            if (a) {423                var f;424                for (f = 0; 4 > f; f++) this.Wa[f].set(a, b, d, c, m, h)425            }426        };427        d.prototype.remove = function (a) {428            this.Wa[3].remove(a)429        };430        return d431    }();432    a.ld = c;433    var b = function () {434        function b(a) {435            this.a = a;436            this.$ = ["_gscu"]437        }438        b.prototype.get = function (b) {439            try {440                if (0 <= a.b.indexOf(this.$, b)) {441                    var d = n.localStorage;442                    if (d) return d.getItem(a.b.H(b, this.a))443                }444            } catch (w) {445            }446            return null447        };448        b.prototype.set = function (b, d) {449            try {450                if (0 <= a.b.indexOf(this.$, b)) {451                    var c = n.localStorage;452                    c && c.setItem(a.b.H(b, this.a), d)453                }454            } catch (A) {455            }456        };457        return b458    }(), m = function () {459        function b(a) {460            this.a = a;461            this.$ = ["_gscu"]462        }463        b.prototype.get = function (b) {464            try {465                if (0 <= a.b.indexOf(this.$, b)) {466                    var d = n.sessionStorage;467                    if (d) return d.getItem(a.b.H(b, this.a))468                }469            } catch (w) {470            }471            return null472        };473        b.prototype.set = function (b, d) {474            try {475                if (0 <= a.b.indexOf(this.$, b)) {476                    var c = n.sessionStorage;477                    c && c.setItem(a.b.H(b, this.a), d)478                }479            } catch (A) {480            }481        };482        return b483    }(), z = function () {484        function b(a) {485            this.a = a;486            this.$ = ["_gscu"]487        }488        b.prototype.get = function (b) {489            try {490                if (0 <= a.b.indexOf(this.$, b)) return this.Zd(a.b.H(b, this.a), n.gstempobj)491            } catch (r) {492            }493            return null494        };495        b.prototype.set = function (b, d) {496            try {497                0 <= a.b.indexOf(this.$, b) && (n.gstempobj = this.replace(n.gstempobj, a.b.H(b, this.a), d))498            } catch (w) {499            }500        };501        b.prototype.replace = function (a, b, d) {502            if (-1 < a.indexOf("&" + b + "=") || 0 === a.indexOf(b + "=")) {503                var c = a.indexOf("&" + b + "=");504                -1 === c && (c = a.indexOf(b + "="));505                var m = a.indexOf("&", c + 1);506                return -1 !== m ? a.substr(0, c) + a.substr(m + (c ? 0 : 1)) + "&" + b + "=" + d : a.substr(0, c) + "&" + b + "=" + d507            }508            return a + "&" + b + "=" + d509        };510        b.prototype.Zd = function (a, b) {511            if ("string" !== typeof b) return null;512            var d = a + "=", c = b.split(/[;&]/), m, h;513            for (m = 0; m < c.length; m++) {514                for (h = c[m]; " " === h.charAt(0);) h = h.substring(1, h.length);515                if (0 === h.indexOf(d)) return h.substring(d.length, h.length)516            }517            return null518        };519        return b520    }()521})(Gridsum || (Gridsum = {}));522(function (a) {523    var n = window, c = function () {524        function b(a, b) {525            this.a = a;526            try {527                this.m = b || n.localStorage528            } catch (d) {529            }530        }531        b.prototype.rb = function (b, c, d) {532            d = d || this.a.Va[0];533            return d + "?" + a.b.D(b, "=", "&", !1, c)534        };535        b.prototype.V = function (b, c, d) {536            if (!document.body || "on" !== document.body.getAttribute("gswp")) {537                b.rd = a.b.ra(5);538                var m = this.a.c, n = new Image(1, 1), w = {};539                a.j.execHook("sender.send", b, d, w);540                if (!w.cancel) {541                    var z = this.rb(b, c, d).substring(0, 2E3);542                    n.onerror = function () {543                        setTimeout(function () {544                            var c = new Image(1, 1);545                            c.onload = function () {546                                a.b.f(m, "RetrySuccess", {cmd: b.gscmd, url: d})547                            };548                            c.onerror = function () {549                                a.b.f(m, "SendingFailed", {cmd: b.gscmd, url: d})550                            };551                            c.src = z552                        }, 2E3)553                    };554                    n.src = z555                }556            }557        };558        b.prototype.Gd = function (b) {559            b.rd = a.b.ra(5);560            return 2E3 >= this.rb(b, void 0, void 0).length561        };562        b.prototype.send = function (a, b, d) {563            if (a) for (var c = [this.a.c].concat(this.a.Sb), m = 0; m < c.length; m++) if (a.gssrvid = c[m], d) this.V(a, b, d); else for (var n = this.a.Va, z = 0; z < n.length; z++) this.V(a, b, n[z])564        };565        b.prototype.appendData = function (b, c, d) {566            try {567                var m = this.Cb();568                100 > m.length && (m.push({569                    obj: b,570                    noEncode: c,571                    destUrl: d572                }), this.m.setItem(a.b.H("gsfailed", this.a), JSON.stringify(m)))573            } catch (r) {574            }575        };576        b.prototype.Ve = function () {577            try {578                var b = this.Cb(), c = b.splice(0, 1)[0];579                this.m.setItem(a.b.H("gsfailed", this.a), JSON.stringify(b));580                return c581            } catch (d) {582            }583            return null584        };585        b.prototype.cf = function (b, c) {586            try {587                var d = this.Cb(), m;588                for (m = 0; m < d.length; m++) d[m].obj.dedupid == b && d[m].destUrl === c && (d.splice(m, 1), m--);589                this.m.setItem(a.b.H("gsfailed", this.a), JSON.stringify(d))590            } catch (r) {591            }592        };593        b.prototype.Cb = function () {594            try {595                var b = a.b.H("gsfailed", this.a), c = n.localStorage.getItem(b);596                this.m.removeItem(b);597                if (c) return JSON.parse(c)598            } catch (d) {599            }600            return []601        };602        return b603    }();604    a.Qb = c605})(Gridsum || (Gridsum = {}));606var __extends = this && this.__extends || function () {607    var a = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (a, c) {608        a.__proto__ = c609    } || function (a, c) {610        for (var b in c) c.hasOwnProperty(b) && (a[b] = c[b])611    };612    return function (n, c) {613        function b() {614            this.constructor = n615        }616        a(n, c);617        n.prototype = null === c ? Object.create(c) : (b.prototype = c.prototype, new b)618    }619}();620(function (a) {621    var n = String.fromCharCode, c = document, b = function () {622        return function (a) {623            this.Jc = a.matchPattern;624            this.Kc = a.matchType625        }626    }(), m = function () {627        return function (a) {628            this.Ob = a.urlMatchRule;629            this.target = a.target630        }631    }(), z = function () {632        return function (a) {633            this.ka = a.userBehaviorCondition;634            this.na = a.actions635        }636    }(), d = function () {637        return function (a) {638            this.qd = a.actionType;639            this.ab = a.actionOption640        }641    }();642    a.xf = d;643    var q = function () {644        return function (a) {645            this.Od = a.eventCategory;646            this.Qd = a.eventName;647            this.Pd = a.eventDescription;648            this.$b = a.customParam649        }650    }();651    a.Bf = function () {652        return function (a) {653            this.key = a.key;654            this.value = a.value655        }656    }();657    var r = {658        nc: function (b, f) {659            var l = "";660            if (b) {661                var h = b.childNodes, c;662                for (c in h) if ("#text" === h[c].nodeName) {663                    var l = l + (h[c].textContent || h[c].nodeValue).replace(/(^\s+)|(\s+$)/ig, "") + "\n",664                        d = encodeURIComponent(l);665                    if (d.length > f) {666                        l = d.substring(0, f);667                        try {668                            return decodeURIComponent(l)669                        } catch (E) {670                            return a.b.Xa(l, f)671                        }672                    }673                }674            }675            return l676        }, Zc: function (a) {677            var f = "";678            try {679                a.M && (f += a.M), a.ga && (f += a.ga), a.Y && (f += a.Y), a.X && (f += a.X), a.N && (f += a.N), a.Z && (f += a.Z), a.fa && (f += a.fa)680            } catch (l) {681            }682            return f683        }, Ac: function (a, f) {684            try {685                return a.Y && a.Y != f.Y || a.X && a.X != f.X || a.Z && a.Z != f.Z || a.ga && a.ga != f.ga || a.N && a.N != f.N || a.fa && a.fa != f.fa ? !1 : !0686            } catch (l) {687                return !1688            }689        }, ec: function (b, f, l, d, m) {690            b = b || c;691            f = b.getElementsByTagName(f);692            for (var h = [], p = 0; p < f.length; p++) (b == c || f[p].parentElement == b) && a.b.trim(f[p].getAttribute("id") || "") == l && (l || -1 < a.b.trim(f[p].getAttribute("class") || "").indexOf(d)) && (m ? f[p].parentElement.children[Number(m) - 1] == f[p] : 1) && h.push(f[p]);693            return h694        }, Oe: function (a) {695            return r.Nc(a)[0]696        }, Nc: function (a) {697            try {698                return c.querySelectorAll(a)699            } catch (F) {700            }701            a = a.split(">");702            for (var f = [], b, h = 0; h < a.length; h++) {703                var d = a[h].match(/(\w+)/)[0];704                b = a[h].substr(d.length) && a[h].substr(d.length).replace(/:nth-child\(\d*\)/g, "");705                var m = "", n = "";706                "#" == b[0] ? 0 > b.indexOf(".") ? m = b.substr(1) : (m = b.split(".")[0].substr(1), n = b.substr(m.length + 2)) : "." == b[0] && (n = b.substr(1));707                var n = n && n.replace(/\./g, " "),708                    e = a[h].match(/:nth-child\((\d*)\)/) && a[h].match(/:nth-child\((\d*)\)/)[1];709                if (0 == f.length) f = r.ec(c, d, m, n, e); else {710                    b = [];711                    for (var q = 0; q < f.length; q++) b = b.concat(r.ec(f[q], d, m, n, e));712                    f = b713                }714            }715            return f716        }, Fe: function (a, f) {717            return a && a.tagName && a.tagName.toLowerCase() === f.toLowerCase()718        }, Ud: function (a) {719            var f = a.className || "";720            f && "object" == typeof a.className && (f = a.className.Gf || a.getAttribute("class") || "");721            return f722        }, wd: function (a) {723            for (var f = 0; f < a.length; f++) if ("" == a[f] || "undefined" == typeof a[f]) a.splice(f, 1), --f;724            return a725        }, df: function (a) {726            return a && a.replace(/:nth-child\((\d*)\)/g, "{$1}")727        }728    };729    a.md = function () {730        return function (a) {731            this.We = a.pickerPath;732            this.Ld = a.customText;733            this.element = r.Oe(this.We);734            this.Xe = this.Ld || r.nc(this.element, 270)735        }736    }();737    var w = function (a) {738        function f(f) {739            var b = a.call(this, f) || this;740            b.element = f;741            b.zd();742            return b743        }744        __extends(f, a);745        f.prototype.zd = function () {746            try {747                var a = this.element;748                this.M = this.ae();749                this.ga = a.tagName.toLocaleLowerCase();750                a.getAttribute("id") && (this.Y = a.getAttribute("id"));751                a.getAttribute("class") && (this.X = a.getAttribute("class"));752                "INPUT" === a.tagName ? this.N = a.getAttribute("value") : "IMG" === a.tagName ? this.N = a.src : (this.N = r.nc(a, 270).replace(/(^\s+)|(\s+$)/ig, ""), this.fa = a.href);753                this.Z = Number(this.pa[this.pa.length - 1].nth_child)754            } catch (p) {755            }756        };757        f.prototype.getData = function () {758            var a = {};759            try {760                this.M && (a.tgpth = this.M), this.ga && (a.tgtag = this.ga), this.Y && (a.tgid = this.Y), this.X && (a.tgcls = this.X), this.N && (a.tgtxt = this.N), this.Z && (a.tgidx = this.Z), this.fa && (a.tghre = this.fa)761            } catch (p) {762            }763            return a764        };765        f.prototype.toString = function () {766            return r.Zc(this)767        };768        return f769    }(function () {770        function b(a) {771            this.pa = [];772            this.target = a;773            this.B()774        }775        b.prototype.B = function () {776            try {777                var a = this.target;778                for (this.Kb = [this.target]; a.parentNode && !r.Fe(a.parentNode, "body");) this.Kb.unshift(a.parentNode), a = a.parentNode;779                for (a = 0; a < this.Kb.length; a++) this.pa.push(this.ce(this.Kb[a]))780            } catch (l) {781            }782        };783        b.prototype.previousElementSibling = function (a) {784            if (a.previousElementSibling) return a.previousElementSibling;785            do a = a.previousSibling; while (a && 1 !== a.nodeType);786            return a787        };788        b.prototype.ce = function (a) {789            for (var f = {790                classes: r.Ud(a).split(" "),791                tag_name: a.tagName.toLowerCase()792            }, b = a.attributes, c = 0; c < b.length; c++) f["attr__" +793            b[c].name] = b[c].value;794            for (var c = b = 1, d = a; d = this.previousElementSibling(d);) b++, d.tagName === a.tagName && c++;795            f.nth_child = b;796            f.nth_of_type = c;797            return f798        };799        b.prototype.D = function (b, l) {800            var f, c, d;801            f = b.tag_name || "";802            if (l) return f;803            c = b.attr__id ? "#" + a.b.trim(b.attr__id) : "";804            d = b.classes[0] ? "." + r.wd(b.classes).join(".") : "";805            return f + c + d + (b.nth_child ? ":nth-child(" + b.nth_child + ")" : "")806        };807        b.prototype.ae = function () {808            try {809                for (var a = [], b = 0; b < this.pa.length; b++) a.push(this.D(this.pa[b], b === this.pa.length - 1));810                return r.df(a.join(">"))811            } catch (p) {812                return ""813            }814        };815        return b816    }());817    a.kd = w;818    var A = function () {819        function a(a) {820            this.Z = a.targetIndex;821            this.M = a.targetPath.replace(/\{(\d*)}/g, ":nth-child($1)");822            this.ga = a.targetTagName;823            this.Y = a.targetId;824            this.X = a.targetClass;825            this.N = a.targetText;826            this.fa = a.targetHref827        }828        a.prototype.Wd = function () {829            var a = this.M.split(">");830            this.Y || (a[a.length - 1] = a[a.length - 1].replace(/#\w+/ig, ""), this.M = a.join(">"));831            this.X || (a[a.length - 1] = a[a.length - 1].replace(/\.\w+/ig, ""), this.M = a.join(">"));832            this.Z || (this.M = this.M.replace(/{\d+}$/ig, ""));833            for (var a = r.Nc(this.M), b = [], c = 0; c < a.length; c++) {834                var d = new w(a[c]);835                r.Ac(this, d) && b.push(a[c])836            }837            return b838        };839        a.prototype.toString = function () {840            return r.Zc(this)841        };842        return a843    }();844    a.Ff = A;845    var B = function () {846        function h(a) {847            this.u = a.configurations;848            this.ff()849        }850        h.prototype.ff = function () {851            try {852                for (var a = 0; a < this.u.length; a++) {853                    this.u[a] = new z(this.u[a]);854                    this.u[a].ka = new m(this.u[a].ka);855                    this.u[a].ka.Ob = new b(this.u[a].ka.Ob);856                    this.u[a].ka.target = new A(this.u[a].ka.target);857                    for (var c = 0; c < this.u[a].na.length; c++) this.u[a].na[c] = new d(this.u[a].na[c]), this.u[a].na[c].ab = new q(this.u[a].na[c].ab)858                }859            } catch (p) {860            }861        };862        h.prototype.Gb = function (b) {863            try {864                var f = new a.$a(b), c = f.F.split("/"), d = c[c.length - 1];865                d && (0 > d.indexOf(".") || 3 == c.length) && (f.F += "/");866                return f.toString()867            } catch (v) {868                return b869            }870        };871        h.prototype.Xd = function (b) {872            try {873                for (var f = [], c = 0; c < this.u.length; c++) try {874                    var d = this.u[c], h = d.ka, m = h.target, e = this.jc(b, m.Wd(), 99);875                    if (e && r.Ac(m, e)) {876                        var n = h.Ob;877                        if (!n || n && a.b.yb(4 == n.Kc ? new RegExp(n.Jc) : n.Jc, this.La(n.Kc), this.Gb(location.href), !0)) f = f.concat(d.na)878                    }879                } catch (F) {880                }881                return f882            } catch (F) {883            }884            return []885        };886        h.prototype.jc = function (a, b, d) {887            try {888                if (a.element == c.body) return null;889                if (!d--) return a;890                var f = a.element.parentNode;891                if (f) {892                    for (var h = new w(f), l = 0; l < b.length; l++) {893                        if (b[l] == a.element) return a;894                        if (b[l] == f) return h895                    }896                    return this.jc(h, b, d)897                }898            } catch (e) {899            }900            return a901        };902        h.prototype.La = function (a) {903            return 0 === a ? "exactmatch" : 1 === a ? "startswith" : 2 === a ? "endswith" : 3 === a ? "contains" : 4 === a ? "regex" : ""904        };905        return h906    }();907    a.gd = B;908    B = function () {909        function a(a, b) {910            this.w = [];911            this.qf = a;912            this.Fb = b % 256;913            this.B()914        }915        a.prototype.B = function () {916            var a = "a", b = this.v("A", 0), c;917            for (c = 0; 62 > c; ++c) 26 == c && (b = this.v(a, 0)), 52 == c && (a = "0", b = this.v(a, 0)), this.w[b] = c, b++;918            this.w[this.v("+", 0)] = 62;919            this.w[this.v("/", 0)] = 63;920            this.w[this.v("-", 0)] = 62;921            this.w[this.v("_", 0)] = 63922        };923        a.prototype.Ye = function (a) {924            var b = a.length;925            if (!(0 < b % 4)) return "=" === a[b - 2] ? 2 : "=" === a[b - 1] ? 1 : 0926        };927        a.prototype.xd = function (a) {928            var b, f, c, d, h;929            b = a.length;930            d = this.Ye(a);931            h = Array(3 * b / 4 - d);932            f = 0 < d ? b - 4 : b;933            var e = 0;934            for (b = 0; b < f; b += 4) c = this.w[this.v(a, b)] << 18 | this.w[this.v(a, b + 1)] << 12 | this.w[this.v(a, b + 2)] << 6 | this.w[this.v(a, b + 3)], h[e++] = c >> 16 & 255, h[e++] = c >> 8 & 255, h[e++] = c & 255;935            2 === d ? (c = this.w[this.v(a, b)] << 2 | this.w[this.v(a, b + 1)] >> 4, h[e++] = c & 255) : 1 === d && (c = this.w[this.v(a, b)] << 10 | this.w[this.v(a, b + 1)] << 4 | this.w[this.v(a, b + 2)] >> 2, h[e++] = c >> 8 & 255, h[e++] = c & 255);936            return h937        };938        a.prototype.Ad = function (a) {939            for (var b = 0, c = "", d; b < a.length;) d = a[b], 0 === d >>> 7 ? (c += n(a[b]), b += 1) : 252 === (d & 252) ? (d = (a[b] & 3) << 30, d |= (a[b + 1] & 63) << 24, d |= (a[b + 2] & 63) << 18, d |= (a[b + 3] & 63) << 12, d |= (a[b + 4] & 63) << 6, d |= a[b + 5] & 63, c += n(d), b += 6) : 248 === (d & 248) ? (d = (a[b] & 7) << 24, d |= (a[b +940            1] & 63) << 18, d |= (a[b + 2] & 63) << 12, d |= (a[b + 3] & 63) << 6, d |= a[b + 4] & 63, c += n(d), b += 5) : 240 === (d & 240) ? (d = (a[b] & 15) << 18, d |= (a[b + 1] & 63) << 12, d |= (a[b + 2] & 63) << 6, d |= a[b + 3] & 63, c += n(d), b += 4) : 224 === (d & 224) ? (d = (a[b] & 31) << 12, d |= (a[b + 1] & 63) << 6, d |= a[b + 2] & 63, c += n(d), b += 3) : 192 === (d & 192) ? (d = (a[b] & 63) << 6, d |= a[b + 1] & 63, c += n(d), b += 2) : (c += n(a[b]), b += 1);941            return c942        };943        a.prototype.v = function (a, b) {944            return a.charCodeAt(b)945        };946        a.prototype.Md = function () {947            var a, b = this.xd(this.qf);948            for (a = 0; a < b.length; a++) b[a] = b[a] < this.Fb ? b[a] + 256 - this.Fb : b[a] - this.Fb;949            return this.Ad(b)950        };951        return a952    }();953    a.hd = B954})(Gridsum || (Gridsum = {}));955(function (a) {956    a.Df = function () {957        return function () {958        }959    }();960    var n = function () {961        function c(b) {962            this.a = b;963            this.tf = 0;964            this.Id = new a.Za(b)965        }966        c.prototype.Vd = function (a) {967            try {968                var b = new XMLHttpRequest;969                b.open("GET", c.wf + "/cmlist?gssrvid=" + this.a.c, !0);970                b.setRequestHeader("Content-type", "application/x-www-form-urlencoded");971                b.withCredentials = !0;972                b.onreadystatechange = function () {973                    if (4 == b.readyState) if (200 == b.status) {974                        var c = JSON.parse(b.responseText);975                        c.success && a(c.data)976                    } else a(null)977                };978                b.send()979            } catch (z) {980            }981        };982        c.prototype.kb = function (a, c) {983            var b = new Image(1, 1);984            b.onload = function () {985                c()986            };987            b.onerror = function () {988            };989            b.src = a990        };991        c.prototype.cc = function () {992            var a = this.Id;993            if (null == a.get("UDMP_CM_SIGN")) {994                var c = this;995                this.Vd(function (b) {996                    if (null != b && null != b.list) if (null == b.gridsumId) setTimeout(function () {997                        3 > c.tf++ && c.cc()998                    }, 2E3); else {999                        var d = b.list;1000                        a.set("UDMP_CM_SIGN", "1", 7200);1001                        for (var m, n = 0; n < d.length; n++) m = d[n], function (a) {1002                            "1" == a.origin && c.kb(a.partnerCmUrl.replace("{gid}", b.gridsumId).replace("{timestamp}", (new Date).getTime() + ""), function () {1003                                c.kb(a.udmpCmUrl + "&gssrvid=" + c.a.c, function () {1004                                })1005                            });1006                            "2" == a.origin && c.kb(a.partnerCmUrl.replace("{gid}", b.gridsumId).replace("{timestamp}", (new Date).getTime() + ""), function () {1007                            })1008                        }(m)1009                    }1010                })1011            }1012        };1013        c.wf = "http" + ("https:" == location.protocol ? "s" : "") + "://cm-udmp.gridsumdissector.com";1014        return c1015    }();1016    a.jd = n1017})(Gridsum || (Gridsum = {}));1018__extends = this && this.__extends || function () {1019    var a = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (a, c) {1020        a.__proto__ = c1021    } || function (a, c) {1022        for (var b in c) c.hasOwnProperty(b) && (a[b] = c[b])1023    };1024    return function (n, c) {1025        function b() {1026            this.constructor = n1027        }1028        a(n, c);1029        n.prototype = null === c ? Object.create(c) : (b.prototype = c.prototype, new b)1030    }1031}();1032(function (a) {1033    function n(b) {1034        if ("U" == b[0]) S[b[1]](b[2], b[3], b[4], b[5], b[6], b[7], b[8]); else if ("W" == b[0]) a.j[b[1]](b[2], b[3], b[4]); else if ("T" == b[0]) {1035            var k = a.j.getTracker(b[1]);1036            k[b[2]](b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10])1037        } else "H" == b[0] ? (k = a.j.getHybridTracker(b[1], b[2]), k[b[3]](b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11])) : (k = a.j.getTracker(b[0]), k[b[1]](b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9]))1038    }1039    Function.prototype.gsbind = function (a) {1040        function k() {1041            return e.apply(this instanceof g ? this : a, b.concat(Array.prototype.slice.call(arguments)))1042        }1043        function g() {1044        }1045        if ("function" !== typeof this) throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");1046        var b = Array.prototype.slice.call(arguments, 1), e = this;1047        this.prototype && (g.prototype = this.prototype);1048        k.prototype = new g;1049        return k1050    };1051    var c = window, b = document, m = b.referrer, z = b.documentElement, d = location,1052        q = navigator.userAgent.toLowerCase(), r = Math, w, A, B, h, f, l, p, y = Array.prototype.slice, v = Number,1053        E = eval, e = a.b;1054    w = e.lower;1055    A = e.indexOf;1056    B = e.encode;1057    h = e.decode;1058    f = e.isArray;1059    l = e.Cc;1060    p = e.sa;1061    var G = function () {1062        function b(b, g) {1063            this.se = a.b.Ma();1064            this.qc = 0;1065            this.Ca = "http" + ("https:" == d.protocol ? "s" : "") + "://impression.gridsumdissector.com/gs.gif";1066            var k = (new H(d.href)).kc();1067            this.a = g;1068            this.pe = document.referrer || "";1069            this.tc = e.ic();1070            this.rc = k.gsfguid || "root";1071            this.sc = k.gsfopenid || "root";1072            this.ke = k.gsdestination || "article";1073            this.Na = k.gslevel || 0;1074            this.pc = k.gsadid;1075            this.ie = g.h.i.uid;1076            if (null != b && b.openid) this.Oa = b.openid || "", this.ne = b.nickname || "", this.le = b.sex + "" || "", this.oe = b.province || "", this.he = b.city || "", this.je = b.country || "", this.me = b.headimgurl || "", this.te = b.unionid || "", this.qe = b.subscribe || ""; else {1077                var k = "gs-uuid-" + this.pc, u;1078                try {1079                    u = c.localStorage.getItem(k)1080                } catch (x) {1081                }1082                if (!u) {1083                    u = a.b.P(k) || e.ic();1084                    try {1085                        c.localStorage.setItem(k, u)1086                    } catch (x) {1087                    }1088                }1089                this.Oa = u;1090                a.b.W(k, this.Oa, 63072E3)1091            }1092            this.af();1093            this.bf()1094        }1095        b.prototype.bf = function () {1096            var a = this, g, b = a.ob("wc_pv");1097            a.Na++;1098            b.gsreferrer = a.pe;1099            b.gsfopenid = a.sc;1100            b.gsfguid = a.rc;1101            b.gslevel = a.Na;1102            b.gsdestination = a.ke;1103            b.gsnickname = a.ne;1104            b.gsgender = a.le;1105            b.gsprovince = a.oe;1106            b.gscity = a.he;1107            b.gscountry = a.je;1108            b.gsheadimgurl = a.me;1109            b.gsunionid = a.te;1110            b.gssubscribe = a.qe;1111            -1 != q.indexOf("micromessenger") ? -1 != q.indexOf("windowswechat") ? (b.gsnettype = "wifi", a.a.h.sender.send(b, void 0, a.Ca)) : wx.ready(function () {1112                wx.getNetworkType({1113                    success: function (a) {1114                        g = a.networkType1115                    }, complete: function () {1116                        b.gsnettype = g;1117                        a.a.h.sender.send(b, void 0, a.Ca)1118                    }1119                })1120            }) : (b.gsnettype = g, a.a.h.sender.send(b, void 0, a.Ca));1121            var e = (new Date).getTime();1122            window.addEventListener("beforeunload", function () {1123                var g = (new Date).getTime();1124                a.qc = 0 >= g -1125                e ? 1 : Math.round((g - e) / 1E3);1126                g = a.ob("wc_ul");1127                g.gsduration = a.qc;1128                a.a.h.sender.send(g, void 0, a.Ca)1129            })1130        };1131        b.prototype.ob = function (b) {1132            return {1133                gsversion: a.j.version,1134                gscmd: b,1135                gsadid: this.pc,1136                gsguid: this.tc,1137                gsopenid: this.Oa,1138                gstime: e.ge(new Date),1139                gstimezone: this.se,1140                gscookieid: this.ie1141            }1142        };1143        b.prototype.af = function () {1144            var a = this, g = wx.onMenuShareTimeline;1145            wx.onMenuShareTimeline = function (b) {1146                g(a.Oc(b, "timeline"))1147            };1148            var b = wx.onMenuShareAppMessage;1149            wx.onMenuShareAppMessage = function (g) {1150                b(a.Oc(g, "friend"))1151            }1152        };1153        b.prototype.Oc = function (a, g) {1154            var b = this, k = {}, e;1155            for (e in a) k[e] = a[e];1156            var c = k.success;1157            k.success = function () {1158                c && c();1159                b.Vc(g, 1)1160            };1161            var d = k.cancel;1162            k.cancel = function () {1163                d && d();1164                b.Vc(g, 0)1165            };1166            k.type = 0;1167            k.link = b.Cd(k.link, g);1168            return k1169        };1170        b.prototype.Vc = function (a, g) {1171            var b = this.ob("wc_sh");1172            b.gsfguid = this.rc;1173            b.gsfopenid = this.sc;1174            b.gsdestination = a;1175            b.gslevel = this.Na;1176            b.gsstatus = g;1177            this.a.h.sender.send(b, void 0, this.Ca)1178        };1179        b.prototype.Cd = function (b, g) {1180            b = b ? b.trim() : "";1181            var k = new H(b), c = "gsfopenid=" + this.Oa + "&gsdestination=" + g + "&gslevel=" + this.Na + "&gsfguid=" +1182                this.tc;1183            if (0 == b.indexOf("https://open.weixin.qq.com/")) var d = new H(k.kc().redirect_uri),1184                c = "redirect_uri=" + a.b.encode(e.va(d.toString(), c, ["gsfopenid", "gsdestination", "gslevel", "gsfguid"])),1185                k = e.va(k.toString(), c, ["redirect_uri"]); else k = e.va(k.toString(), c, ["gsfopenid", "gsdestination", "gslevel", "gsfguid"]);1186            return k.toString()1187        };1188        return b1189    }(), F = function () {1190        function a(a, g, b) {1191            this.host = a;1192            this.ef = g || [];1193            this.Te = b || []1194        }1195        a.prototype.sf = function (a) {1196            var g = this.host;1197            return p(g) ? -1 < A(a, g) : g.test && g.test(a)1198        };1199        a.prototype.match = function (a) {1200            var g, b, k, c = 0;1201            b = e.ta(a);1202            a = {};1203            var d = this.ef, f = this.Te, h = b.host;1204            if (this.sf(h)) {1205                if (k = b.g) {1206                    for (g in k) l(k, g) && (k[w(g)] = k[g]);1207                    for (g = 0; g < d.length; g++) if (b = k[d[g]]) a[d[g]] = b, c++; else return !1;1208                    for (g = 0; g < f.length; g++) if (b = k[f[g]]) a[f[g]] = b, c++1209                } else if (d.length) return !1;1210                return {host: h, g: a, Ue: c}1211            }1212            return !11213        };1214        return a1215    }();1216    a.nd = F;1217    var J = function (b) {1218        function k() {1219            var a = null !== b && b.apply(this, arguments) || this;1220            a.S = 0;1221            return a1222        }1223        __extends(k, b);1224        k.prototype.V = function (g, b, k) {1225            if (!document.body || "on" !== document.body.getAttribute("gswp")) {1226                var t = this;1227                t.S++;1228                g.rd = e.ra(5);1229                var c = t.a.c, d = new Image(1, 1), u = {};1230                a.j.execHook("sender.send", g, k, u);1231                if (!u.cancel) {1232                    if ("spv" == g.gscmd || "ecom" == g.gscmd || "ev" == g.gscmd) void 0 == g.dedupid && (g.dedupid = e.A()), t.appendData(g, b, k);1233                    void 0 !== g.gsversion && (g.gssrvid = "", g.rd = "");1234                    b = t.rb(g, b, k).substring(0, 2E3);1235                    d.onerror = function () {1236                        t.S--;1237                        t.S = 0 > t.S ? 0 : t.S;1238                        e.f(c, "SendingFailed", {cmd: g.gscmd, url: k})1239                    };1240                    d.onload = function () {1241                        t.S--;1242                        t.S = 0 > t.S ? 0 : t.S;1243                        void 0 != g.dedupid && t.cf(g.dedupid, k);1244                        if (0 == t.S) {1245                            var a = t.Ve();1246                            a && (a.obj.gsdelay = e.Aa() -1247                                a.obj.gsltime, t.send(a.obj, a.noEncode, a.destUrl))1248                        }1249                    };1250                    d.src = b1251                }1252            }1253        };1254        return k1255    }(a.Qb), X = function () {1256        function a(a) {1257            this.a = a1258        }1259        a.prototype.parse = function (a) {1260            try {1261                var g, b, k = this.a.zb, c = this.a.L, f = this.a.J;1262                a = a || d.href;1263                var h = e.ta(a), m = {1264                    protocol: h.protocol,1265                    local: h.local,1266                    host: h.host,1267                    path: h.fullPath,1268                    anchor: h.anchor,1269                    g: h.g1270                };1271                k && h.anchor && (m.path += "#" + h.anchor);1272                if (f) m.J = f; else if (0 !== c.length && h.g) {1273                    for (var l in h.g) for (g = 0; g < c.length; g++) w(l) == c[g] && delete h.g[l];1274                    for (g = 0; g < c.length; g++) delete h.g[c[g]];1275                    (b = e.D(h.g, "=", "&", !1, !0)) && (b = "?" + b);1276                    k && h.anchor && (b += "#" + h.anchor);1277                    m.J = [h.protocol, "://", h.host, h.path, b].join("")1278                } else m.J = [h.protocol, "://", h.host, m.path].join("");1279                if (!m.local) {1280                    var n = e.fc(a, this.a);1281                    m.I = n1282                }1283                return m1284            } catch (ba) {1285                e.f(this.a.c, "M_Url", ba)1286            }1287            return null1288        };1289        return a1290    }(), R = function () {1291        function b(b) {1292            this.a = b;1293            this.m = b.h.appVersion ? new a.Cf(b) : b.ac ? new a.ld(b) : new a.Za(b);1294            this.ja = {};1295            this.da = {}1296        }1297        b.prototype.update = function () {1298            var a, g = this.uid, b = this.ea, c = [], d = [];1299            for (a in this.ja) l(this.ja, a) && c.push(a + ":" + B(this.ja[a]));1300            0 < c.length && (g = g + "|" + c.join("|"));1301            for (a in this.da) l(this.da, a) && d.push(a + ":" + B(this.da[a]));1302            0 < d.length && (b = b + "|" + d.join("|"));1303            e.Ka() != g && this.m.set("_gscu", g, 63072E3);1304            this.m.set("_gscs", b, 1800);1305            this.m.set("_gscbrs", "1")1306        };1307        b.prototype.parse = function (a) {1308            if (!a) return null;1309            var g;1310            g = /[^\d\w-]+/i;1311            var b = {}, k = {};1312            a = a.split("|");1313            var e;1314            if (0 == a[0].length || 36 < a[0].length || g.test(a[0]) || "null" == a[0]) return null;1315            b.id = a[0];1316            for (g = 1; g < a.length; g++) e = a[g].split(":"), k[e[0]] = h(e[1]);1317            b.data = k;1318            return b1319        };1320        b.prototype.B = function (a) {1321            try {1322                var g, b = void 0, k = void 0, c = void 0, f = void 0, C = "";1323                this.ja = {};1324                this.da = {};1325                this.a.Jd && (g = e.R(d.href.replace("#", "&"), "_gsc")) && (g = g.split(";"), 2 == g.length && (c = h(g[0]), f = h(g[1]), b = 1, k = !0));1326                k || (c = this.m.get("_gscu"), f = this.m.get("_gscs"), b = this.m.get("_gscbrs"));1327                (c = this.parse(c)) ? (this.uid = c.id, this.ja = c.data, (f = this.parse(f)) ? (this.ea = f.id, this.da = f.data) : (!f && b && (C = "t"), this.ea = C + e.A())) : (this.uid = e.A(), this.ea = e.A());1328                a || this.update()1329            } catch (D) {1330                e.f(this.a.c, "M_User", D), this.uid = e.A(), this.ea = e.A(), this.ja = {}, this.da = {}, this.update()1331            }1332        };1333        b.prototype.Tc = function (a, g) {1334            this.da[a] = g + "";1335            this.update()1336        };1337        b.prototype.dd = function (a) {1338            var g = this.m.get("_gsref");1339            !g && a && (g = a + "");1340            g && this.a.jf && this.m.set("_gsref", g, 1800)1341        };1342        b.prototype.ee = function () {1343            return this.m.get("_gsref")1344        };1345        b.prototype.get = function (a) {1346            return this.ja[a] || this.da[a] || null1347        };1348        b.prototype.D = function () {1349            return "_gsc=" + this.m.get("_gscu") + ";" + this.m.get("_gscs")1350        };1351        b.prototype.Ee = function () {1352            var a = this.a.Sc;1353            return e.qa(this.uid) % 1E4 < 100 * a1354        };1355        return b1356    }(), aa = function () {1357        function a(a, g) {1358            this.value = this.key = "";1359            try {1360                this.index = g, -1 !== a.indexOf("=") && (this.key = a.split("=")[0], this.value = a.split("=")[1])1361            } catch (t) {1362                this.key = a1363            }1364        }1365        a.$d = function (b) {1366            for (var g = [], k = 0; k < b.length; k++) g.push(new a(b[k], k));1367            return g1368        };1369        return a1370    }(), Q = function () {1371        function a() {1372        }1373        a.nf = function (a) {1374            for (var g = 0; g < a.length - 1; g++) {1375                for (var b = g, k = g + 1; k < a.length; k++) a[k].value.length > a[b].value.length && (b = k);1376                b !== g && (k = a[b], a[b] = a[g], a[g] = k)1377            }1378            return a1379        };1380        a.fe = function (b, g) {1381            for (var k = [], c = 0; c < b.length; c++) 100 < b[c].value.length && -1 === e.indexOf(g, b[c].key) && k.push(b[c]);1382            return a.nf(k)1383        };1384        a.prototype.de = function (b) {1385            var g;1386            if (!b) try {1387                c.top._gsUtility ? b = m : (b = c.top.document.referrer, g = 1)1388            } catch (I) {1389                b = m1390            }1391            if (!b) try {1392                c.opener && (b = c.opener.location.href)1393            } catch (I) {1394            }1395            if (700 >= b.length) return [b, g];1396            var k = "eqid wd word q p query w search keyword kw".split(" "), d = b.indexOf("?"), f = b.substr(0, d);1397            if (-1 !== d) {1398                var h = b.length;1399                b = b.substr(d + 1).split("&");1400                for (var d = aa.$d(b), d = a.fe(d, k), C = 0; C < d.length; C++) {1401                    if (700 >= h) return [f + "?" + b.join("&"), g];1402                    var l = d[C].value, n = l.substr(0, l.length / 2);1403                    b[d[C].index] = d[C].key + "=" + n;1404                    h -= l.length - n.length1405                }1406                for (d = b.length - 1; 0 <= d && !(700 >= h); d--) -1 === e.indexOf(k, b[d].split("=")[0]) && (h = h - b[d].length - 1, b.splice(d, 1));1407                return [f + "?" + b.join("&"), g]1408            }1409            return [b, g]1410        };1411        return a1412    }();1413    a.Ef = Q;1414    var Y = function () {1415        function d(a) {1416            this.a = a;1417            this.h = a.h;1418            this.origin = a.origin1419        }1420        d.prototype.isEnabled = function () {1421            return this.a.U ? 100 == this.a.Fa ? !0 : r.round(1E4 * r.random()) < 100 * this.a.Fa : !11422        };1423        d.prototype.Nb = function () {1424            if (this.a.oa) {1425                var a = (e.pb() - this.a.oa) / 2;1426                this.offsetX = 0 < a ? a : 0;1427                this.offsetY = 01428            } else this.origin ? (a = e.o(this.origin), this.offsetX = a.x, this.offsetY = a.y) : this.offsetY = this.offsetX = 01429        };1430        d.prototype.o = function (a, b) {1431            this.Nb();1432            return this.Ba({x: a - this.offsetX, y: b - this.offsetY})1433        };1434        d.prototype.Ba = function (a) {1435            a.x = r.round(a.x);1436            a.y = r.round(a.y);1437            return a1438        };1439        d.prototype.V = function (k, g, t, d) {1440            var f, h = v(c[this.a.Wc] || 0), u = this.h.getCommon("mc"), m = this.h.url.parse();1441            f = {};1442            -1 < h && 256 > h || (h = 0);1443            a.j.execHook("heatmap.send", u, k, g, t, d, f);1444            if (!f.cancel) {1445                t = d.button;1446                e.Pa() && (1 == t ? t = 0 : 4 == t && (t = 1));1447                u.btn = t;1448                t = e.s(null, d, "A", null, 3);1449                if (null != t) u.lk = t.href, u.lt = e.ia(t, "title") + t.title || e.ia(t, "alt") || e.ha(t), f = e.o(t), f = this.o(f.x, f.y), u.lx = f.x, u.ly = f.y, u.lw = r.round(t.offsetWidth), u.lh = r.round(t.offsetHeight); else if (this.a.Le) return;1450                t = e.s(null, d, null, {gsregion: ""}) || e.s(null, d, null, {"data-gsregion": ""});1451                if (null != t && (f = v(t.getAttribute("gsregion") || v(t.getAttribute("data-gsregion"))), -1 < f && 256 > f)) {1452                    u.re = f;1453                    if ("1" == t.getAttribute("gsposfixed") || "1" == t.getAttribute("data-gsposfixed")) f = e.o(t), f = this.o(f.x, f.y), k -= f.x, g -= f.y;1454                    if (t = e.s(null, d, null, {gssnapshot: ""}) || e.s(null, d, null, {"data-gssnapshot": ""})) if (h = v(t.getAttribute("gssnapshot") || v(t.getAttribute("data-gssnapshot"))), 0 > h || 255 < h) h = 01455                }1456                u.gspver = this.a.Sa;1457                this.a.O ? (k = e.o(this.a.O), u.gsmcoffsetx = Math.round(d.pageX + this.a.O.scrollLeft - k.x), u.gsmcoffsety = Math.round(d.pageY + this.a.O.scrollTop - k.y)) : (u.gsmcoffsetx = k, u.gsmcoffsety = g);1458                d = [m.protocol, "://", m.host, m.path];1459                u.gsmcurl = d.join("");1460                u.gstl = this.a.Ia || b.title;1461                u.gssn = h;1462                u.gsorurl = this.a.J;1463                u.gsscr = screen.width + "*" + screen.height;1464                this.h.sender.send(u)1465            }1466        };1467        d.prototype.C = function (a) {1468            if (!this.za(a)) {1469                var b = (new Date).getTime();1470                if (!(100 > b - this.aa)) {1471                    this.aa = b;1472                    try {1473                        if (this.isEnabled()) {1474                            var k = w(a.target.tagName);1475                            if (void 0 !== k && "body" != k && "html" != k) {1476                                var d = a.pageX, c = a.pageY;1477                                e.l && (d = e.l.la, c = e.l.ma, e.l = null);1478                                var f = this.o(d, c);1479                                this.V(f.x, f.y, a.srcElement, a)1480                            }1481                        }1482                    } catch (C) {1483                        e.f(this.a.c, "M_Heatmap_doc", C)1484                    }1485                }1486            }1487        };1488        d.prototype.vb = function (a, b) {1489            if (!this.za(b)) {1490                var g = (new Date).getTime();1491                if (!(100 > g - this.aa)) {1492                    this.aa = g;1493                    try {1494                        var k = b.clientX, d = b.clientY;1495                        e.l && (k = e.l.la, d = e.l.ma, e.l = null);1496                        var c = this.Ba(e.o(a)), f = this.o(k, d);1497                        this.V(f.x + c.x, f.y + c.y, a, b)1498                    } catch (D) {1499                        e.f(this.a.c, "M_Heatmap_iframe", D)1500                    }1501                }1502            }1503        };1504        d.prototype.za = function (a) {1505            return e.l && e.l.la == a.pageX && e.l.ma == a.pageY1506        };1507        d.prototype.wa = function () {1508            var a = this, g, d = a.a.xc, c = frames;1509            if (0 == d.length) for (g = 0; g < c.length; g++) try {1510                var f = c[g].frameElement || c[g];1511                if (f.contentDocument || c[g].document) f.contentDocument = f.contentDocument || c[g].document, d.push(f)1512            } catch (D) {1513            }1514            for (g = 0; g < d.length; g++) if (c = e.T(d[g])) try {1515                var c = c.frameElement || c, h = c.contentDocument, m = function (b) {1516                    return function (g) {1517                        a.vb(b, g)1518                    }1519                }(c);1520                void 0 !== b.ontouchstart && e.Ha(h, m.bind ? m.bind(a) : m.gsbind(a));1521                e.observe(h, "mouseup", m.bind ? m.bind(a) : m.gsbind(a))1522            } catch (D) {1523            }1524        };1525        d.prototype.bind = function () {1526            !this.xb && this.a.U && (this.xb = !0, void 0 !== b.ontouchstart && e.Ha(b, this.C.bind ? this.C.bind(this) : this.C.gsbind(this)), e.observe(b, "mouseup", this.C.bind ? this.C.bind(this) : this.C.gsbind(this)), /loaded|complete/.test(b.readyState) ? this.wa() : e.observe(c, "load", this.wa.bind ? this.wa.bind(this) : this.wa.gsbind(this)))1527        };1528        d.prototype.B = function () {1529            this.bind()1530        };1531        return d1532    }(), Z = function () {1533        function a(a) {1534            this.a = a;1535            this.Qa = [];1536            this.ca = []1537        }1538        a.prototype.sd = function (a, b, e) {1539            b = v(b);1540            this.Qa.push({ba: a + "", Ta: b || 0, Ua: 0, currency: e, Db: [], Qc: !b})1541        };1542        a.prototype.td = function (a, b, d, c, f, h, m, l) {1543            try {1544                var g, k = void 0, t = this.Qa;1545                a += "";1546                c = v(c) || 0;1547                f = v(f) || 0;1548                for (g = 0; g < t.length; g++) if (t[g].ba == a) {1549                    k = t[g];1550                    break1551                }1552                k || (k = {ba: a, Ta: 0, Ua: 0, currency: "", Db: [], Qc: !0}, t.push(k));1553                var u = k.Qc, x = v((c * f).toFixed(2)), n;1554                d && !e.sa(d) && (n = d.spu, d = d.sku);1555                a = {1556                    orderid: a,1557                    name: b,1558                    sku: d,1559                    spu: n,1560                    quantity: f,1561                    unitPrice: c,1562                    price: x,1563                    category: h,1564                    currency: l1565                };1566                m && (a.procp = e.D(m, ":", ",", !0, !1));1567                k.Ua += a.quantity;1568                k.Db.push(a);1569                u && (k.Ta = v((k.Ta + x).toFixed(2)))1570            } catch (N) {1571                e.f(this.a.c, "FC_addProduct", N)1572            }1573        };1574        return a1575    }(), da = function () {1576        function f(a) {1577            this.aa = 0;1578            this.a = a;1579            this.h = a.h;1580            this.origin = a.origin;1581            this.Be();1582            a.K && this.wb()1583        }1584        f.prototype.isEnabled = function () {1585            return this.a.K ? 100 == this.a.Fa ? !0 : r.round(1E4 * r.random()) < 100 * this.a.Fa : !11586        };1587        f.prototype.Nb = function () {1588            if (this.a.oa) {1589                var a = (e.pb() - this.a.oa) / 2;1590                this.offsetX = 0 < a ? a : 0;1591                this.offsetY = 01592            } else this.origin ? (a = e.o(this.origin), this.offsetX = a.x, this.offsetY = a.y) : this.offsetY = this.offsetX = 01593        };1594        f.prototype.o = function (a, b) {1595            this.Nb();1596            return this.Ba({x: a - this.offsetX, y: b - this.offsetY})1597        };1598        f.prototype.Ba = function (a) {1599            a.x = r.round(a.x);1600            a.y = r.round(a.y);1601            return a1602        };1603        f.prototype.ue = function (a) {1604            for (var b = a.attributes, e = 0; e < b.length; e++) if ("function" === typeof a[b[e].name]) return !0;1605            return !11606        };1607        f.prototype.V = function (k, g, d, f) {1608            var t, h = v(c[this.a.Wc] || 0), u = this.h.getCommon("ub"), m = this.h.url.parse(), l = {}, n;1609            -1 < h && 256 > h || (h = 0);1610            var p = a[this.a.ib + "_" + e.qb(this.a.c)] || a[this.a.ib] || c[this.a.ib];1611            if (!this.hb && p) {1612                p = new a.hd(p, e.qb(this.a.c));1613                try {1614                    t = E("(" + p.Md() + ")")1615                } catch (T) {1616                }1617                this.hb = t && new a.gd(t)1618            }1619            a.j.execHook("codeless.send", u, k, g, d, f, l);1620            if (!l.cancel && (l = f.button, e.Pa() && (1 == l ? l = 0 : 4 == l && (l = 1)), u.btn = l, l = e.s(null, f, "A", null, 3), null != l && (n = u.lk = l.href, u.lt = e.ia(l, "title") + l.title || e.ia(l, "alt") || e.ha(l), t = e.o(l), t = this.o(t.x, t.y), u.lx = t.x, u.ly = t.y, u.lw = r.round(l.offsetWidth), u.lh = r.round(l.offsetHeight)), f)) {1621                u.ubtype = "click";1622                u.tgcg = "selector";1623                l = new a.kd(d);1624                t = "A" == d.tagName ? e.Xa(encodeURIComponent(e.ha(d)), 270) : e.Xa(encodeURIComponent(l.N), 270);1625                var p = l.getData(), q;1626                for (q in p) u[q] = p[q];1627                this.cd = e.A();1628                u.ubid = this.cd;1629                u.eljs = this.ue(d) ? 1 : "";1630                this.hb && this.hf(this.hb.Xd(l), t, n);1631                l = e.s(null, f, null, {gsregion: ""}) || e.s(null, f, null, {"data-gsregion": ""});1632                if (null != l && (d = v(l.getAttribute("gsregion") || v(l.getAttribute("data-gsregion"))), -1 < d && 256 > d)) {1633                    u.re = d;1634                    if ("1" == l.getAttribute("gsposfixed") || "1" == l.getAttribute("data-gsposfixed")) t = e.o(l), t = this.o(t.x, t.y), k -= t.x, g -= t.y;1635                    if (l = e.s(null, f, null, {gssnapshot: ""}) || e.s(null, f, null, {"data-gssnapshot": ""})) if (h = v(l.getAttribute("gssnapshot") || v(l.getAttribute("data-gssnapshot"))), 0 > h || 255 < h) h = 01636                }1637                u.gspver = this.a.Sa;1638                u.gsmcoffsetx = k;1639                u.gsmcoffsety = g;1640                k = e.o(f.target);1641                u.gselmw = f.target.offsetWidth;1642                u.gselmh = f.target.offsetHeight;1643                u.gsmcelmx = Math.round(f.pageX - k.x + f.target.scrollLeft);1644                u.gsmcelmy = Math.round(f.pageY - k.y + f.target.scrollTop);1645                f = [m.protocol, "://", m.host, m.path];1646                u.gsmcurl = f.join("");1647                u.gstl = this.a.Ia || b.title;1648                u.gssn = h;1649                u.gsorurl = this.a.J;1650                u.gsscr = screen.width + "*" + screen.height;1651                this.h.sender.send(u)1652            }1653        };1654        f.prototype.hf = function (b, g, e) {1655            try {1656                for (var d = 0; d < b.length; d++) {1657                    var k = b[d], c = k.ab;1658                    if (0 == k.qd) {1659                        var f = c.Pd, t = {};1660                        try {1661                            var h = c.$b, l;1662                            for (l in c.$b) {1663                                var m = h[l];1664                                t[m.key] = (new a.md(m.value)).Xe1665                            }1666                        } catch (M) {1667                        }1668                        this.h.ad(c.Od, c.Qd, f, null, t, this.cd, g, e)1669                    }1670                }1671            } catch (M) {1672            }1673        };1674        f.prototype.Be = function () {1675            try {1676                var a = {}, b = e.ta(d.href).g, c, f;1677                b && (c = b.gs_file, f = b.gs_url);1678                if (c && f) {1679                    e.lb("_gswp");1680                    for (var h in b) 0 == h.indexOf("gs_") && (a[h] = b[h]);1681                    e.W("_gswp", JSON.stringify(a), 1800);1682                    this.Se(decodeURIComponent(f))1683                } else {1684                    var l = e.P("_gswp");1685                    try {1686                        a = JSON.parse(l || "{}")1687                    } catch (C) {1688                    }1689                    a.gs_file && this.zc((a.gs_protocol && decodeURIComponent(a.gs_protocol) || d.protocol) + decodeURIComponent(a.gs_file))1690                }1691            } catch (C) {1692            }1693        };1694        f.prototype.Se = function (a) {1695            var g = b.createElement("iframe");1696            g.src = "javascript:\"<script>top.location.replace('" + a + "')\x3c/script>\"";1697            c.setInterval(function () {1698                b.body && b.body.appendChild(g)1699            }, 500)1700        };1701        f.prototype.wb = function () {1702            try {1703                12 != this.a.Mb.length && this.zc("http" + ("https:" == d.protocol ? "s" : "") + "://static.gridsumdissector.com/js/Clients/" + this.a.Mb + "/ubcfg.js")1704            } catch (k) {1705            }1706        };1707        f.prototype.zc = function (a) {1708            if (b.querySelectorAll) for (var g = b.querySelectorAll("script[async]"), e = 0; e < g.length; e++) if (g[e].src && -1 < g[e].src.indexOf("ubcfg.js")) return;1709            g = b.createElement("script");1710            e = b.getElementsByTagName("script")[0];1711            g.type = "text/javascript";1712            g.async = !0;1713            g.src = a;1714            e.parentNode.insertBefore(g, e)1715        };1716        f.prototype.C = function (a) {1717            if (!this.za(a)) {1718                var b = (new Date).getTime();1719                if (!(100 > b - this.aa)) {1720                    this.aa = b;1721                    try {1722                        if (this.isEnabled()) {1723                            var d = w(a.target.tagName);1724                            if (void 0 !== d && "body" != d && "html" != d) {1725                                var c = a.pageX, k = a.pageY;1726                                e.l && (c = e.l.la, k = e.l.ma, e.l = null);1727                                var f = this.o(c, k);1728                                this.V(f.x, f.y, a.target, a)1729                            }1730                        }1731                    } catch (C) {1732                        e.f(this.a.c, "M_Codeless_doc", C)1733                    }1734                }1735            }1736        };1737        f.prototype.vb = function (a, b) {1738            if (!this.za(b)) {1739                var g = (new Date).getTime();1740                if (!(100 > g - this.aa)) {1741                    this.aa = g;1742                    try {1743                        var d = b.clientX, c = b.clientY;1744                        e.l && (d = e.l.la, c = e.l.ma, e.l = null);1745                        var k = this.Ba(e.o(a)), f = this.o(d, c);1746                        this.V(f.x +1747                            k.x, f.y + k.y, a, b)1748                    } catch (D) {1749                        e.f(this.a.c, "M_Heatmap_iframe", D)1750                    }1751                }1752            }1753        };1754        f.prototype.za = function (a) {1755            return e.l && e.l.la == a.pageX && e.l.ma == a.pageY1756        };1757        f.prototype.wa = function () {1758            var a = this, g, d = a.a.xc, c = frames;1759            if (0 == d.length) for (g = 0; g < c.length; g++) try {1760                var f = c[g].frameElement || c[g];1761                if (f.contentDocument || c[g].document) f.contentDocument = f.contentDocument || c[g].document, d.push(f)1762            } catch (D) {1763            }1764            for (g = 0; g < d.length; g++) if (c = e.T(d[g])) try {1765                var c = c.frameElement || c, h = c.contentDocument, l = function (b) {1766                    return function (g) {1767                        a.vb(b, g)1768                    }1769                }(c);1770                void 0 !== b.ontouchstart && e.Ha(h, l.bind ? l.bind(a) : l.gsbind(a));1771                e.observe(h, "mouseup", l.bind ? l.bind(a) : l.gsbind(a))1772            } catch (D) {1773            }1774        };1775        f.prototype.bind = function () {1776            !this.xb && this.a.K && (this.xb = !0, void 0 !== b.ontouchstart && e.Ha(b, this.C.bind ? this.C.bind(this) : this.C.gsbind(this)), e.observe(b, "mouseup", this.C.bind ? this.C.bind(this) : this.C.gsbind(this)))1777        };1778        f.prototype.B = function () {1779            this.bind()1780        };1781        return f1782    }(), U = function () {1783        return function (e) {1784            this.ib = "gsconfig";1785            this.Mb = "GWD-002808-030F33";1786            this.Sb = [];1787            this.Dc = !0;1788            var c = d.hostname;1789            this.I = {};1790            this.Pc = {};1791            this.Ra = null;1792            this.c = e;1793            this.Va = ["http" + ("https:" == d.protocol ? "s" : "") + "://recv-wd.gridsumdissector.com/gs.gif", "http" + ("https:" == d.protocol ? "s" : "") + "://www.webdissector.com/recv/gs.gif"];1794            this.Da = "//www.webdissector.cn/js/heatmap_v" + a.j.version + ".js";1795            this.Ze = "//www.addissector.com/";1796            this.$e = "/redirect.gif";1797            this.Vb = "utm_campaign";1798            this.Lc = "utm_medium";1799            this.Xc = "utm_source";1800            this.oc = "utm_adgroup";1801            this.Fc = "utm_term";1802            this.Zb = "utm_content";1803            this.Wb = "utm_channel";1804            this.pd = "utm_account";1805            this.Ub = "gsadid";1806            this.fb = this.Vb;1807            this.Bb = this.Lc;1808            this.Jb = this.Xc;1809            this.sb = this.oc;1810            this.Ab = this.Fc;1811            this.jb = this.Zb;1812            this.gb = this.Wb;1813            this.od = this.pd;1814            this.Tb = this.Ub;1815            this.L = ["gclid", "bdclkid", "gs_ws", this.fb, this.Bb, this.Jb, this.sb, this.Ab, this.jb, this.gb, this.od, "gsadid", "gsabredir"];1816            this.Hd = "content_";1817            "www." == c.substring(0, 4) && (c = c.substring(4));1818            this.domain = c;1819            this.path = "/";1820            this.kf = 1800;1821            this.Sc = 100;1822            this.origin = b.body;1823            this.Fa = 100;1824            this.xc = [];1825            this.Wc = "GridsumSnapshotID";1826            this.bd = "GSTS";1827            this.Mc = {};1828            this.zb = !0;1829            this.Rb = "http://ctrl-ab.gridsumdissector.com/";1830            this.ac = this.Ic = !0;1831            this.Yb = "http://ctrl-ab.gridsumdissector.com/clientredir.html"1832        }1833    }();1834    a.Af = U;1835    var H = function () {1836        function a(a) {1837            var b;1838            this.g = [];1839            b = a.indexOf("?");1840            var e = a.indexOf("#");1841            -1 === b ? -1 === e ? (this.F = a, this.hash = b = "") : (this.F = a.substr(0, e), b = "", this.hash = a.substr(e + 1)) : -1 === e ? (this.F = a.substr(0, b), b = a.substr(b + 1), this.hash = "") : (this.F = a.substr(0, b), b = a.substr(b + 1, e - b - 1), this.hash = a.substr(e + 1));1842            b && (this.g = b.split("&"))1843        }1844        a.prototype.cb = function (a, b) {1845            this.Yc(a) || this.g.push(a + "=" + b)1846        };1847        a.prototype.bb = function (a, b) {1848            if (!this.Yc(a)) {1849                var g = e.encode(b);1850                this.g.push(a + "=" + g)1851            }1852        };1853        a.prototype.Dd = function (a, b) {1854            b ? this.g.splice(a, 1, b) : this.g.splice(a, 1)1855        };1856        a.prototype.toString = function () {1857            var a;1858            a = 0 != this.g.length ? this.g.join("&") : "";1859            return this.F + (0 === this.g.length ? "" : "?" + a) + ("" === this.hash ? "" : "#" + this.hash)1860        };1861        a.prototype.Yc = function (a) {1862            for (var b = 0; b < this.g.length; b++) if (this.g[b].split("=")[0] === a) return !0;1863            return !11864        };1865        a.prototype.Gb = function () {1866            var a = this.F.split("/"), b = a[a.length -1867            1], e = [];1868            if (!b) e.push(this.toString()), this.F = this.F.slice(0, -1); else if (3 === a.length || -1 === b.indexOf(".")) e.push(this.toString()), this.F += "/";1869            e.push(this.toString());1870            return e1871        };1872        a.prototype.kc = function () {1873            for (var a = {}, b = 0; b < this.g.length; b++) {1874                var e = this.g[b].split("=");1875                2 > e.length || (a[e[0]] = e[1])1876            }1877            return a1878        };1879        return a1880    }();1881    a.$a = H;1882    var V = function () {1883        function b(a) {1884            this.ub = "${heatMapConfigs}";1885            this.h = a.h;1886            this.ze()1887        }1888        b.prototype.ze = function () {1889            var b;1890            if (!e.sa(this.ub)) for (var g = 0; g < this.ub.length; g++) {1891                b = this.ub[g];1892                for (var c = "regex" == this.La(b.MatchType) ? new RegExp(b.MatchPattern, "i") : b.MatchPattern, f = this.be(b.MatchPatternType), h = 0; h < f.length; h++) a.b.yb(c, this.La(b.MatchType), f[h]) && (b.HostName && d.hostname != b.HostName || ("0" == b.Module ? this.xe(b) : "1" == b.Module ? this.ye(b) : "2" == b.Module && this.Ae()))1893            }1894        };1895        b.prototype.xe = function (a) {1896            this.h.enableHeatmap();1897            this.h.setDocWidth(a.DocWidth);1898            this.h.setPageVersion(a.PageVersion);1899            this.h.setOriginalUrl(a.OriginalUrl)1900        };1901        b.prototype.ye = function (a) {1902            this.h.enableScroll();1903            this.h.setOriginalUrl(a.OriginalUrl)1904        };1905        b.prototype.Ae = function () {1906            this.h.enableCodeless()1907        };1908        b.prototype.La = function (a) {1909            return 0 === a ? "exactmatch" : 1 === a ? "startswith" : 2 === a ? "endswith" : 3 === a ? "contains" : 4 === a ? "regex" : ""1910        };1911        b.prototype.be = function (a) {1912            return "0" == a ? [d.pathname] : (new H(d.href)).Gb()1913        };1914        return b1915    }();1916    a.zf = V;1917    var W = function () {1918        function l(a, b, e) {1919            var g = new U(a);1920            g.h = this;1921            this.c = a;1922            this.appVersion = b;1923            this.ud = e;1924            this.a = g1925        }1926        var k = l.prototype;1927        k.check = function () {1928            try {1929                e.P("_gsHijack") || top == c || top.location.href != d.href || (e.f(this.c, "WebPageHijack"), e.W("_gsHijack", "1"))1930            } catch (g) {1931            }1932        };1933        k.isLocal = function () {1934            if (this.a.vf) return !1;1935            var a = d.hostname;1936            return "file:" == d.protocol || -1 < A(a, "localhost") || 0 == A(a, "127.") || 0 == A(a, "192.168.") || 0 == A(a, "10.") || 0 == A(a, "172.")1937        };1938        k.isHeatmapModeOn = function () {1939            var a = w(d.hash);1940            return this.a.U && -1 < A(a, "#gwdheatmap&") && -1 < A(a, this.c.substring(4))1941        };1942        k.isDisable = function () {1943            return !this.c || !this.appVersion && this.isLocal() || this.isHeatmapModeOn() || -1 < A(q, this.a.we) || !this.i.Ee()1944        };1945        k.getCommon = function (b) {1946            var g = this.i;1947            b = {1948                gsver: a.j.version,1949                gscmd: b,1950                gssrvid: this.c,1951                gsuid: g.uid,1952                gssid: g.ea,1953                pvid: this.Eb,1954                gsltime: e.Aa(),1955                gstmzone: e.Ma(),1956                gsjp: this.a.Ge,1957                gsdelay: null,1958                rd: 11959            };1960            this.a.Fd && (b.gscs = e.qa(b.gsver + b.gscmd + b.gssrvid + b.gsuid + b.gssid + b.gsltime, !0));1961            return b1962        };1963        k.appendBrowserInfo = function (a) {1964            a.gsscr = screen.width + "*" + screen.height1965        };1966        k.calculateDuration = function (a) {1967            a = (v(new Date) - a) / 1E3;1968            180 < a && (a = 180);1969            0 > a && (a = 0);1970            this.duration = a1971        };1972        k.sendHeartbeat = function (a, b, c) {1973            this.vc || (this.trackHeartbeat(a, b), this.Gc = e.Aa(), c || (this.vc = 1))1974        };1975        k.eb = function (a) {1976            a.gsst = this.a.O ? this.a.O.scrollTop : r.round(r.max(z ? z.scrollTop : 0, b.body ? b.body.scrollTop : 0, window.pageYOffset || 0));1977            a.gswh = this.a.fd || c.innerHeight || (z ? z.clientHeight : null)1978        };1979        k.setCustomPageLoadListenerOnElement = function (a) {1980            var b = this;1981            try {1982                var g, c = 0;1983                for (g = 0; g < a.length; g++) document.querySelectorAll(a[g])[0].addEventListener("load", function () {1984                    c++;1985                    c == a.length && b.trackCustomPageLoad()1986                })1987            } catch (L) {1988                e.f(this.c, "FC_setCustomPageLoadListenerOnElement", L)1989            }1990        };1991        k.trackCustomPageLoad = function () {1992            try {1993                var a = c[this.a.bd] || this.yc, b = (v(new Date) -1994                    a) / 1E3;1995                180 < b && (b = 180);1996                0 > b && (b = 0);1997                this.Bd = b1998            } catch (u) {1999                e.f(this.c, "FC_trackCustomPageLoad", u)2000            }2001        };2002        k.init = function () {2003            var b = this;2004            if (b.De) b.i.B(); else {2005                b.i = new R(b.a);2006                b.referrer = new Q;2007                b.url = new X(b.a);2008                b.G = new Z(b.a);2009                b.sender = b.a.Ic ? new J(b.a) : new a.Qb(b.a);2010                b.U = new Y(b.a);2011                b.K = new da(b.a);2012                b.i.B();2013                new V(b.a);2014                var f, h = a.j.plugins;2015                for (f = 0; f < h.length; f++) {2016                    var k = h[f];2017                    b[k.name] = new k.rf(b.a)2018                }2019                b.isHeatmapModeOn() && b.showHeatmap();2020                if (b.isDisable()) b.disabled = !0; else if (b.a.Ke ? e.observe(c, "load", function () {2021                    b.U.B();2022                    b.K.B()2023                }) : (b.U.B(), b.K.B()), b.Eb = e.A(), b.yc = new Date, b.Hc = v(new Date), e.observe(c, "load", function () {2024                    b.calculateDuration(c[b.a.bd] || b.yc)2025                }), e.observe(c, "beforeunload", function () {2026                    b.sendHeartbeat()2027                }), !b.appVersion) var l, m = b.i.ea, n = b.i.uid, p = d.href, q = c.setInterval(function () {2028                    if (b.a.Dc && p != d.href) b.$c(!0), p = d.href; else {2029                        if (!b.tb) {2030                            b.i.B(!0);2031                            var a = b.i.get("pv");2032                            l && l < a ? b.tb = 1 : b.i.ea != m && (b.tb = 1);2033                            l = a2034                        }2035                        b.tb && null != b.duration && (b.sendHeartbeat(m, n), b.i.dd(b.Rc), c.clearInterval(q))2036                    }2037                }, 1E3);2038                b.De = !02039            }2040        };2041        k.track = function (a, b, e) {2042            this.$c(!1, a, b, e)2043        };2044        k.$c = function (a, c, f, k) {2045            try {2046                if (this.init(), !this.disabled) {2047                    a && (this.vc = !1, this.sendHeartbeat(this.i.ea, this.i.uid));2048                    var g = !1, t = this.a.Pc, l = this.a.Ra, u, n = this.i, p, q = this.url, x = this.getCommon("spv"),2049                        r = c && f ? d.href : "", w = e.P("_gsdlorig_" + e.qb(this.a.c));2050                    if (c) {2051                        var g = !0, y = c.split("://", 2);2052                        if (1 < y.length) {2053                            if (-1 == y[1].indexOf(d.hostname)) {2054                                e.f(this.c, "The url's domain is wrong.");2055                                return2056                            }2057                            c = y[0] + "://" + y[1].replace(/\/+/g, "/")2058                        } else c = c.replace(/\/+/g, "/")2059                    } else this.Hc = v(new Date);2060                    c = q.parse(c || d.href);2061                    var K = this.referrer.de(r), r = K[0];2062                    p = v(n.get("pv")) || 0;2063                    0 === p && (x.gsfir = 1);2064                    this.Ec && (x.pvid = "");2065                    if (this.appVersion || a) this.Eb = e.A(), x.pvid = this.Eb;2066                    x.gstl = this.a.Ia || b.title;2067                    x.ubc = this.a.yd;2068                    x.gscp = e.D(t, "::", "||", !1, !1);2069                    x.pcp = l;2070                    x.gstestid = "";2071                    x.gstestverid = "";2072                    x.fbr = "";2073                    x.gsce = e.Ce() ? 1 : 0;2074                    var B = e.Yd();2075                    x.gsflver = B.Sd;2076                    x.gssil = B.lf;2077                    x.gsclr = screen.colorDepth || 32;2078                    try {2079                        x.gsje = navigator.javaEnabled() ? 1 : 02080                    } catch (O) {2081                    }2082                    this.eb(x);2083                    this.a.O ? (x.gsph = this.a.O.scrollHeight, x.gspw = this.a.O.scrollWidth) : (x.gsph = z ? z.scrollHeight : null, x.gspw = z ? z.scrollWidth : null);2084                    !0 === this.Uc && (x.gssce = 1);2085                    for (var F in k) x[F] = k[F];2086                    if (this.appVersion) x.gsurl = c.path; else {2087                        var G = [c.protocol, "://", c.host, c.path].join("");2088                        try {2089                            e.Ka() ? (x.gsurl = e.va(G, w, ["utm_"]).toString(), w && (x.dlsrc = 1), x.emb = 1) : x.gsurl = G2090                        } catch (O) {2091                            x.gsurl = G2092                        }2093                        if (u = c.I) x.adcp = u.xa, x.adgp = u.group, x.adsr = u.source, x.admd = u.Ga, x.adkw = u.Ea, x.adct = u.content, x.adch = u.channel, x.adid = u.ua2094                    }2095                    this.appendBrowserInfo(x);2096                    !g && this.a.J && (x.gsorurl = this.a.J);2097                    this.Rc = x.gsref = r || "";2098                    c.g && c.g.tid && c.g.tvid && (x.gstestid = c.g.tid, x.gstestverid = h(c.g.tvid), x.fbr = c.g.fbr, "" != x.gsref && 0 != x.gsref.indexOf(this.a.Rb) || void 0 == c.g.refurl || (x.gsref = h(c.g.refurl)));2099                    this.uc && (x.gsref = this.uc);2100                    x.notopjs = K[1];2101                    this.sender.send(x);2102                    n.dd(this.Rc);2103                    a || this.Ec || n.Tc("pv", ++p);2104                    this.Ec = !0;2105                    if (this.Hb && 1 == p && (!m || -1 < A(m, this.Hb))) {2106                        x.gscmd = "rpv";2107                        var E = [this.a.Ze, e.qa(this.Hb), this.a.$e].join("");2108                        this.sender.send(x, !1, E)2109                    }2110                    this.check();2111                    this.uc = d.href2112                }2113            } catch (O) {2114                e.f(this.c, "FC_track", O)2115            }2116        };2117        k.trackLaunch = function (b) {2118            var g = this;2119            try {2120                if (b || (document.addEventListener("pause", function () {2121                    g.sendHeartbeat(void 0, void 0, !0)2122                }, !1), document.addEventListener("resume", function () {2123                    if (void 0 != g.Gc && g.Gc + 3E4 < e.Aa()) {2124                        var a = e.A();2125                        g.i.m.set("_gscs", a);2126                        g.i.uid = a;2127                        g.trackLaunch(!0)2128                    }2129                    g.track()2130                }, !1)), (b || null == sessionStorage.getItem("gslaunched")) && c.device && (g.init(), !g.disabled)) {2131                    var d = g.getCommon("launch");2132                    d.gsmappver = g.appVersion;2133                    d.gschannel = g.ud;2134                    a.If.Hf(d);2135                    d.gscp = e.D(g.a.Mc, "::", "||", !1, !1);2136                    g.sender.send(d);2137                    sessionStorage.setItem("gslaunched", "1")2138                }2139            } catch (x) {2140                e.f(g.c, "FC_trackLaunch", x)2141            }2142        };2143        k.trackLink = function (a, b, c, e) {2144            var g = this;2145            return g.bindEvent(b, "click", function () {2146                g.track(a, !0)2147            }, c, e)2148        };2149        k.trackECom = function () {2150            try {2151                if (this.init(), !this.disabled) {2152                    var a, b, c, d, f = this.sender, h = this.G.Qa, k, l, m, n, p = this.i, q = p.get("_gsecom"),2153                        q = q ? q.split(",") : [];2154                    for (a = 0; a < h.length; a++) {2155                        var r = this.getCommon("ecom");2156                        l = h[a];2157                        d = B(l.ba);2158                        if (!(-1 < A(q, d))) {2159                            q.push(d);2160                            r.gsorderid = l.ba;2161                            r.gstotal = l.Ta;2162                            r.gsquan = l.Ua;2163                            r.gscur = l.currency;2164                            for (var v in this.G.ca) if (this.G.ca[v].ba == l.ba) {2165                                r.ecp = this.G.ca[v].mb;2166                                break2167                            }2168                            k = l.Db;2169                            n = [];2170                            b = 0;2171                            for (c = k.length; b < c; b++) m = k[b], m = e.D(m, "::", ",,", !1, !0), n.push(m);2172                            r.gsproducts = n.join("||");2173                            if (f.Gd(r)) f.send(r); else for (b = 0; b < c; b++) {2174                                var w = this.getCommon("ecom");2175                                w.gsorderid = r.gsorderid;2176                                w.gstotal = r.gstotal;2177                                w.gsquan = r.gsquan;2178                                w.gscur = r.gscur;2179                                w.ecp = r.ecp;2180                                m = k[b];2181                                m = e.D(m, "::", ",,", !1, !0);2182                                w.gsproducts = m;2183                                f.send(w)2184                            }2185                        }2186                    }2187                    p.Tc("_gsecom", q.join(","));2188                    this.G.Qa = []2189                }2190            } catch (ea) {2191                e.f(this.c, "FC_trackECom", ea)2192            }2193        };2194        k.trackClickthrough = function (a, b) {2195            try {2196                if (this.init(), !this.disabled && (a || b)) {2197                    var g = this.getCommon("ct"), c = this.Je;2198                    c && (g.gsssid = c, b && (g.url = b), g.gsclktl = a, g.gssresurl = d.href, this.sender.send(g))2199                }2200            } catch (L) {2201                e.f(this.c, "FC_trackClickthrough", L)2202            }2203        };2204        k.trackHeartbeat = function (a, b) {2205            var g = this.getCommon("hb");2206            try {2207                var e = c.performance.timing, d = (e.loadEventEnd - e.navigationStart) / 1E3;2208                g.plt = 0 <= d ? d : null2209            } catch (C) {2210            }2211            g.pld = this.duration;2212            g.cpld = this.Bd;2213            e = (v(new Date) - this.Hc) / 1E3;2214            0 > e && (e = 0);2215            g.psd = e;2216            this.eb(g);2217            g.gssid = a || g.gssid;2218            g.gsuid = b || g.gsuid;2219            this.sender.send(g)2220        };2221        k.trackSiteSearch = function (a, b, c, f, h, k) {2222            try {2223                if (this.init(), !this.disabled) {2224                    var g = this.getCommon("ss"), l = e.A();2225                    f ? (g.gsskwd = e.R(d.href, a), g.gssenc = c || "utf-8", g.gsscat = e.R(d.href, b)) : c ? (g.gsskwd = a, g.gsscat = b, g.gssenc = c) : (g.gsskwd = B(a), g.gsscat = B(b), g.gssenc = "utf-8");2226                    g.gsskwd && (g.gsssid = this.Je = l, k && (g.gsscnt = k), (h = h || m) && (g.gssref = h), g.gssresurl = d.href, this.sender.send(g))2227                }2228            } catch (I) {2229                e.f(this.c, "FC_trackSiteSearch", I)2230            }2231        };2232        k.trackEvent = function (a, b, c, d, f) {2233            try {2234                this.ad(a, b, c, d, f)2235            } catch (C) {2236                e.f(this.c, "FC_trackEvent", C)2237            }2238        };2239        k.ad = function (a, c, f, h, k, l, m, n) {2240            try {2241                if (this.init(), !this.disabled) {2242                    var g = this.getCommon("ev"), t = d.href;2243                    g.eca = a;2244                    g.eac = c;2245                    g.eva = h;2246                    g.ela = f;2247                    if (k) {2248                        a = "";2249                        var u, p;2250                        for (p in k) u ? a = a + "|" + p + ":" + k[p] : (a = p + ":" + k[p], u = !0);2251                        g.eparams = a2252                    }2253                    g.tgtxt = m;2254                    g.tghre = n;2255                    g.ubid = l;2256                    g.gstl = this.a.Ia || b.title;2257                    t = this.url.parse(t);2258                    g.gsourl = t.J;2259                    this.sender.send(g)2260                }2261            } catch (ca) {2262                e.f(this.c, "FC_trackUbEvent", ca)2263            }2264        };2265        k.trackInternalLink = function () {2266            return !02267        };2268        k.uf = function (a) {2269            try {2270                if (this.init(), !this.disabled) {2271                    var g = this.getCommon("ct");2272                    g.gstype = 1;2273                    g.url = a.href;2274                    g.gsclktl = e.ia(a, "title") + a.title || e.ia(a, "alt") || e.ha(a);2275                    g.gssresurl = d.href;2276                    g.gstl = this.a.Ia || b.title;2277                    var c = e.s(null, a, null, {gscampaign: ""});2278                    null != c && (g.gscamp = c.getAttribute("gscampaign"));2279                    c = e.s(null, a, null, {gsposition: ""});2280                    null != c && (g.gspos = c.getAttribute("gsposition"));2281                    c = e.s(null, a, null, {gsexpkey: ""});2282                    null != c && (g.gsexpkey = c.getAttribute("gsexpkey"));2283                    this.sender.send(g)2284                }2285            } catch (x) {2286                e.f(this.c, "FC_trackInternalLink", x)2287            }2288        };2289        k.trackLocation = function () {2290            var a = this;2291            try {2292                a.init(), a.disabled || navigator.geolocation.getCurrentPosition(function (b) {2293                    var g = a.getCommon("loc");2294                    g.gsmlati = b.coords.latitude;2295                    g.gsmlongi = b.coords.longitude;2296                    a.sender.send(g)2297                }, function () {2298                }, {timeout: 6E4})2299            } catch (t) {2300                e.f(a.c, "FC_trackLocation", t)2301            }2302        };2303        k.trackJunctionPoint = function (a, b) {2304            try {2305                if (this.init(), !this.disabled) {2306                    var g = this.getCommon("jp");2307                    void 0 == a ? (g.gsjpid = this.i.uid, g.gsjptype = 0) : (g.gsjpid = a, g.gsjptype = void 0 == b ? 0 : b);2308                    this.sender.send(g)2309                }2310            } catch (x) {2311                e.f(this.c, "FC_trackLogin", x)2312            }2313        };2314        k.enableScroll = function () {2315            var a = this;2316            void 0 === a.Uc && (a.Uc = !0, e.observe(a.a.O || c, "scroll", function () {2317                try {2318                    if (a.init(), !a.disabled) {2319                        var b = a.getCommon("sc");2320                        a.eb(b);2321                        b.gsorurl = a.a.J;2322                        b.scid = e.A();2323                        a.Ie = b.scid;2324                        c.setTimeout(function () {2325                            b.scid === a.Ie && (b.scid = null, a.sender.send(b))2326                        }, 1E3)2327                    }2328                } catch (u) {2329                    e.f(a.c, "FC_enableScroll", u)2330                }2331            }))2332        };2333        k.bindEvent = function (a, b, c, d, f) {2334            f = f || {};2335            return e.observe(a, b, function (b) {2336                if (b && b.target) {2337                    var g = e.s(a, b, d, f);2338                    null != g && (b.Me = g, c(b))2339                }2340            })2341        };2342        k.bindSearchResults = function (a, b) {2343            var g = this;2344            return g.bindEvent(a, "click", function (a) {2345                a = a.Me;2346                g.trackClickthrough(e.ha(a), a.href)2347            }, "a", b)2348        };2349        k.monitorSearchResults = function (a) {2350            function b(a, b) {2351                a.addEventListener ? a.addEventListener("click", b) : a.attachEvent("onclick", b)2352            }2353            for (var g = this, c = a.getElementsByTagName("a"), d = 0; d < c.length; d++) (function () {2354                var a = c[d];2355                b(a, function () {2356                    g.trackClickthrough(e.ha(a), a.href)2357                })2358            })()2359        };2360        k.showHeatmap = function () {2361            var g = this.a.Da;2362            a.j.Da = d.href;2363            var c = b.createElement("script");2364            c.src = g;2365            b.getElementsByTagName("head")[0].appendChild(c)2366        };2367        k.addOrder = function (a, b, c) {2368            try {2369                this.init(), this.disabled || this.G.sd(a, v(b), c ? c : "CNY")2370            } catch (x) {2371                e.f(this.c, "FC_addOrder", x)2372            }2373        };2374        k.addProduct = function (a, b, c, d, f, h, k, l) {2375            try {2376                this.init(), this.disabled || this.G.td(a, b, c, v(d), v(f), h, k, l ? l : "CNY")2377            } catch (I) {2378                e.f(this.c, "FC_addProduct", I)2379            }2380        };2381        k.setSessionTimeout = function (a) {2382            1 > a || 3600 < a || (this.a.kf = a)2383        };2384        k.setBreadcrumb = function (a) {2385            this.a.yd = a2386        };2387        k.setCampaign = function (a) {2388            a && a.length && (this.a.I.xa = a)2389        };2390        k.setGroup = function (a) {2391            a && a.length && (this.a.I.group = a)2392        };2393        k.setContent = function (a) {2394            a && a.length && (this.a.I.content = a)2395        };2396        k.setKeyword = function (a) {2397            a && a.length && (this.a.I.Ea = a)2398        };2399        k.setMedium = function (a) {2400            a && a.length && (this.a.I.Ga = a)2401        };2402        k.setSource = function (a) {2403            a && a.length && (this.a.I.source = a)2404        };2405        k.setAdid = function (a) {2406            a && a.length && (this.a.I.ua = a)2407        };2408        k.setCampaignKey = function (a) {2409            this.a.L.push(this.a.fb = w(a))2410        };2411        k.setMediumKey = function (a) {2412            this.a.L.push(this.a.Bb = w(a))2413        };2414        k.setContentKey = function (a) {2415            this.a.L.push(this.a.jb = w(a))2416        };2417        k.setSourceKey = function (a) {2418            this.a.L.push(this.a.Jb = w(a))2419        };2420        k.setKeywordKey = function (a) {2421            this.a.L.push(this.a.Ab = w(a))2422        };2423        k.setGroupKey = function (a) {2424            this.a.L.push(this.a.sb = w(a))2425        };2426        k.setChannelKey = function (a) {2427            this.a.L.push(this.a.gb = w(a))2428        };2429        k.setAdidKey = function (a) {2430            this.a.L.push(this.a.Tb = w(a))2431        };2432        k.setContentNetworkPrefix = function (a) {2433            this.a.Hd = a2434        };2435        k.setChannel = function (a, b, c) {2436            b && (b = c ? e.R(m, b) : e.R(d.href, b)) && (a = b);2437            a && 0 != a.length && (this.a.I.channel = a)2438        };2439        k.setIgnoreTrafficKeyword = function (a) {2440            a && (this.a.we = a)2441        };2442        k.setCustomProperty = function (a, b, c, f) {2443            var g = b;2444            "cookie" == c ? g = e.P(f) || b : "query" == c && (g = e.R(d.href, f) || b);2445            null != g && (this.a.Pc[a] = g)2446        };2447        k.setMobileLaunchProperty = function (a, b) {2448            a && b && (this.a.Mc[a] = b)2449        };2450        k.setPageProperty = function (a, b) {2451            null != a && null != b && (this.a.Ra || (this.a.Ra = {}), this.a.Ra[a] = b)2452        };2453        k.setEcomProperty = function (a, b, c) {2454            if (null != a && null != b && null != c) {2455                for (var g in this.G.ca) if (this.G.ca[g].ba == a) {2456                    this.G.ca[g].mb[b] = c;2457                    return2458                }2459                a = this.G.ca.push({ba: a, mb: {}});2460                this.G.ca[a - 1].mb[b] = c2461            }2462        };2463        k.setHeatmapScriptUrl = function (a) {2464            this.a.Da = a2465        };2466        k.setPageName = function (a) {2467            this.a.Ia = a2468        };2469        k.setServiceUrl = function (a) {2470            this.a.Va = [a]2471        };2472        k.setServiceUrls = function (a) {2473            f(a) || (a = y.call(arguments));2474            this.a.Va = a2475        };2476        k.setJunctionPoint = function (a) {2477            this.a.Ge = a2478        };2479        k.setCookieProperties = function (a, b, c) {2480            a && "." == a.charAt(0) && (a = a.substring(1));2481            0 <= d.host.indexOf(a) && (this.a.domain = a || this.a.domain);2482            this.a.path = b || this.a.path;2483            this.a.gf = !!c2484        };2485        k.setSamplingRate = function (a) {2486            this.a.Sc = a2487        };2488        k.setClickSamplingRate = function (a) {2489            this.a.Fa = a2490        };2491        k.setDocWidth = function (a) {2492            this.a.oa = v(a);2493            void 0 === document._gsDocWidth && (document._gsDocWidth = v(a))2494        };2495        k.setWindowHeight = function (a) {2496            this.a.fd = v(a)2497        };2498        k.setOriginalUrl = function (a) {2499            this.a.J = a2500        };2501        k.setOriginElement = function (a) {2502            this.a.origin = e.T(a)2503        };2504        k.setPageVersion = function (a) {2505            this.a.Sa = a2506        };2507        k.getWDCookieString = function () {2508            this.init();2509            return this.i.D()2510        };2511        k.jump = function (a) {2512            var b = this.getWDCookieString();2513            a = p(a) ? a : a.action;2514            d.href = a + "#" + b2515        };2516        k.addIgnoreParams = function () {2517            this.a.L = this.a.L.concat(y.call(arguments))2518        };2519        k.enableLazyClickTrace = function (a) {2520            this.a.Ke = !a2521        };2522        k.enableHeatmap = function (a) {2523            this.a.U = !0;2524            this.a.Le = a;2525            this.U && this.U.bind()2526        };2527        k.enableCodeless = function () {2528            this.a.K = !0;2529            this.K && (this.K.wb(), this.K.bind())2530        };2531        k.enableCrossDomain = function (a) {2532            this.a.Jd = !a2533        };2534        k.enableLocalTraffic = function () {2535            this.a.vf = !02536        };2537        k.enableAnchor = function () {2538        };2539        k.keepAnchor = function (a) {2540            this.a.zb = !a2541        };2542        k.disableAnchor = function () {2543            this.a.zb = !12544        };2545        k.enableRedirectServer = function (a) {2546            this.Hb = a || this.a.domain2547        };2548        k.setErrorUrls = function (a) {2549            f(a) || (a = y.call(arguments));2550            e.nb = a || []2551        };2552        k.getSessionRefPage = function () {2553            if (this.i) return this.i.ee()2554        };2555        k.enableCheckSum = function (a) {2556            this.a.Fd = void 0 == a ? !0 : a2557        };2558        k.setAbServer = function (a) {2559            this.a.Rb = a2560        };2561        k.enableAdditionalStorage = function () {2562        };2563        k.enableDurable = function (a) {2564            this.a.ac = void 0 == a ? !0 : a2565        };2566        k.enableLocalized = function (a) {2567            this.a.Ic = void 0 == a ? !0 : a2568        };2569        k.linkDomains = function () {2570            function a(a, c) {2571                if (-1 == d.pathname.indexOf("gridsum_crossdomain_helper")) for (var g, f = 0, h = a.length; f < h; f++) g = b.createElement("iframe"), g.src = "//" + a[f].domain + a[f].path + "#" + c, g.style.display = "none", b.body.appendChild(g);2572                e.W("_gspc1", "1", 1600);2573                e.W("_gspc2", "1")2574            }2575            try {2576                if (!(-1 < d.hash.indexOf("gwdheatmap"))) {2577                    this.enableCrossDomain();2578                    var c, f = y.call(arguments), h = f.length, k = d.hostname, l = !(e.P("_gspc1") && e.P("_gspc2")),2579                        m = [], n, p = !1;2580                    for (c = 0; c < h; c++) {2581                        var q = f[c].split("/")[0], r = f[c].substring(f[c].indexOf("/")), v = l && d.pathname != r;2582                        if (q != k) {2583                            var w = "www." == q.substr(0, 4) ? q.substr(4) : q;2584                            -1 === k.indexOf(w, k.length - w.length + 1) && v && (p = !0, m.push({domain: q, path: r}))2585                        }2586                    }2587                    p && (n = this.getWDCookieString(), b.body ? a(m, n) : e.Pb("document.body", function () {2588                        a(m, n)2589                    }))2590                }2591            } catch (N) {2592                e.f(this.a.Lf, "P_CD", N)2593            }2594        };2595        k.clientRedirect = function (a, b) {2596            try {2597                this.init();2598                if (this.disabled) return !0;2599                var c = a.href, g = this.i.m.get("_gscs"), f = g ? g.split("|")[0] : "null", h = "?destUrl=" +2600                    B(c) + "&gssid=" + f;2601                0 != b && (h += "&gsref=" + B(d.href));2602                a.href = this.a.Yb + h2603            } catch (D) {2604                e.f(this.c, "FC_clientRedirect", D)2605            }2606            return !02607        };2608        k.setClientRedirectUrl = function (a) {2609            this.a.Yb = a2610        };2611        k.bindDomains = function (a, f, h) {2612            function g(a, b) {2613                for (var c = 0; c < b.length; c++) if (0 === a.indexOf(b[c])) return !0;2614                return !12615            }2616            function k() {2617                try {2618                    if (l.init(), !l.disabled) {2619                        for (var c = e.mc(d.hostname), h = 0; h < a.length; h++) -1 < a[h].indexOf(c) && (a.splice(h, 1), h--);2620                        for (var k = b.getElementsByTagName("a"), c = 0; c < k.length; c++) if (g(k[c].href, a)) {2621                            var m = new H(k[c].href);2622                            m.cb("_gscu_", l.i.m.get("_gscu"));2623                            m.bb("_gscs_", l.i.m.get("_gscs"));2624                            k[c].href = m.toString()2625                        } else if (f) for (h = 0; h < f.length; h++) k[c].getAttribute(f[h]) && g(k[c].getAttribute(f[h]), a) && (m = new H(k[c].getAttribute(f[h])), m.cb("_gscu_", l.i.m.get("_gscu")), m.bb("_gscs_", l.i.m.get("_gscs")), k[c].setAttribute(f[h], m.toString()))2626                    }2627                } catch (M) {2628                    e.f(l.c, "FC_bindDomains", M)2629                }2630            }2631            var l = this;2632            h ? c.setTimeout(k, h) : k()2633        };2634        k.enableSessionRefPage = function (a) {2635            this.a.jf = void 0 == a ? !0 : a2636        };2637        k.trackExposure = function () {2638            var a = this;2639            try {2640                if (a.init(), !a.disabled && b.querySelectorAll) {2641                    for (var c = b.querySelectorAll("[gsexpkey]"), d = {}, f = 0; f < c.length; f++) {2642                        (function () {2643                            var b = c[f];2644                            e.observe(c[f], "click", function () {2645                                a.uf(b)2646                            })2647                        })();2648                        var h = e.s(null, c[f], null, {gscampaign: ""}),2649                            k = null != h ? h.getAttribute("gscampaign") : "",2650                            h = e.s(null, c[f], null, {gsposition: ""}),2651                            l = null != h ? h.getAttribute("gsposition") : "",2652                            h = e.s(null, c[f], null, {gsexpkey: ""});2653                        if (null != h) {2654                            var m = h.getAttribute("gsexpkey");2655                            null !== m && (void 0 === d[k] && (d[k] = {}), void 0 === d[k][l] && (d[k][l] = []), d[k][l].push(m))2656                        }2657                    }2658                    for (var n in d) {2659                        var p = a.getCommon("exp");2660                        p.gscamp = n;2661                        var h = [], q;2662                        for (q in d[n]) h.push(q + ":" + d[n][q].join(","));2663                        p.gslist = h.join("|");2664                        a.sender.send(p)2665                    }2666                }2667            } catch (T) {2668                e.f(a.c, "trackExposure", T)2669            }2670        };2671        k.trackSwiper = function (a) {2672            var b = this;2673            try {2674                if (b.init(), !b.disabled) {2675                    var d = a.params.onSlideChangeStart;2676                    a.params.onSlideChangeStart = function (a) {2677                        d && d(a);2678                        try {2679                            var f = b.getCommon("sc"), g = b.a.fd || c.innerHeight || (z ? z.clientHeight : null);2680                            f.gsst = g * a.activeIndex;2681                            f.gswh = g;2682                            f.gsorurl = b.a.J;2683                            b.sender.send(f)2684                        } catch (D) {2685                            e.f(b.c, "trackSwiper", D)2686                        }2687                    }2688                }2689            } catch (x) {2690                e.f(b.c, "trackSwiper", x)2691            }2692        };2693        k.mapCookie = function () {2694            (new a.jd(this.a)).cc()2695        };2696        k.setUbcfgHash = function (a) {2697            this.a.Mb = a;2698            this.K && this.K.wb()2699        };2700        k.setAdditionalProfile = function (a) {2701            this.a.Sb = e.sa(a) ? [a] : a2702        };2703        k.setAdConfig = function (a) {2704            this.init();2705            new G(a, this.a)2706        };2707        k.enableSPATracking = function (a) {2708            this.a.Dc = 0 != a2709        };2710        k.setCoordinate = function (a) {2711            a && (e.sa(a) && b.querySelector && (a = b.querySelector(a)), this.a.O = a)2712        };2713        return l2714    }();2715    a.j = {2716        version: "3.7.0.14", wc: {}, plugins: [], Ya: {}, Da: void 0, register: function (b, c, d) {2717            a.j.plugins.push({name: b, rf: c});2718            a.j.addApis(d)2719        }, addApis: function (a) {2720            if (a) for (var b in a) l(a, b) && (W.prototype[b] = a[b])2721        }, addHook: function (b, c) {2722            var d = a.j.wc;2723            b = w(b);2724            d[b] = d[b] || [];2725            d[b].push(c)2726        }, execHook: function (b) {2727            for (var c = [], d = 1; d < arguments.length; d++) c[d - 1] = arguments[d];2728            if (d = a.j.wc[b]) for (var e = 0; e < d.length; e++) {2729                var f = d[e];2730                f.apply(f, c)2731            }2732        }, isTrackerExist: function (b) {2733            return !!a.j.Ya[b]2734        }, getTracker: function (b, c, d) {2735            e.Ka();2736            b = e.trim(b);2737            return a.j.Ya[b] || (a.j.Ya[b] = new W(b, c, d))2738        }, getHybridTracker: function (b, c) {2739            e.Ka() && (c = b);2740            return a.j.getTracker(c)2741        }, loadCallback: function (a, b, c) {2742            e.Pb("window." + (a || "_gsCallback"), function (a) {2743                a()2744            }, b, c)2745        }, getServiceId: function () {2746            var b = [], c;2747            for (c in a.j.Ya) b.push(c);2748            return b2749        }2750    };2751    var S = {2752        decode: e.decode,2753        delCookie: e.lb,2754        encode: e.encode,2755        find: e.find,2756        findArray: e.dc,2757        getAd: e.fc,2758        getCookie: e.P,2759        getDocWidth: e.pb,2760        getEl: e.T,2761        getExpireDate: e.hc,2762        getHashCode: e.qa,2763        getInnerText: e.ha,2764        getInnerUnvisibleText: e.ia,2765        getLocalTime: e.Aa,2766        getPointer: e.lc,2767        getPos: e.o,2768        getPrimaryDomain: e.mc,2769        getRandomID: e.A,2770        getRandomString: e.ra,2771        getTimeZone: e.Ma,2772        getUrlParam: e.R,2773        indexOf: e.indexOf,2774        isIE: e.Pa,2775        isMobile: e.Bc,2776        isPageMatch: e.yb,2777        lower: e.lower,2778        observe: e.observe,2779        observeTouch: e.Ha,2780        openApp: e.Re,2781        report: e.f,2782        resolveURL: e.ta,2783        resolveUrl: e.ta,2784        searchUp: e.s,2785        serialize: e.D,2786        setCookie: e.W,2787        toDict: e.Lb,2788        trim: e.trim,2789        voidFunc: e.ed,2790        waitFor: e.Pb2791    }, F = function () {2792        function a() {2793        }2794        a.prototype.push = function (a) {2795            n(a)2796        };2797        return a2798    }();2799    try {2800        if (-1 === A(w(d.hash), "#gwdheatmap&")) for (var P = 0; P < _gsq.length; P++) n(_gsq[P]);2801        _gsq = new F2802    } catch (K) {2803    }2804    c.GridsumWebDissector = a.j;2805    c._gsUtility = S2806})(Gridsum || (Gridsum = {}));2807var _gsTracker = GridsumWebDissector.getTracker('GWD-002808');2808_gsTracker.setServiceUrls("//www.webdissector.com/recv/gs.gif", "//recv-wd.gridsumdissector.com/gs.gif", "//yhxwsjjs.court.gov.cn/gs.gif");2809if (_gsUtility.isPageMatch(["/", "/Index"], 'exactmatch', location.pathname)) {2810    _gsTracker.enableHeatmap();2811    _gsTracker.setPageVersion("ver20160316");2812    _gsTracker.setOriginalUrl("http://wenshu.court.gov.cn/");2813} else {2814}...assist_link_bat.js
Source:assist_link_bat.js  
...230    231    getUrlPath: function (e) {232      var href = e.getAttribute('href');233      var url = location.pathname;234      return this.urlMatchRule(url);235    },236  237    url: window.location.href,238  239    getQueryString: function (url, name) {240      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");241      var str = url.split('?')[1];242      if (str) {243        var r = str.match(reg);244        if (r !== null) return decodeURI(r[2]);245      }246      return false;247    },248  ...check-url.js
Source:check-url.js  
...43}44export default function (url, rules) {45    if (!Array.isArray(rules))46        rules = [rules];47    return rules.some(rule => urlMatchRule(parseUrl(url), prepareRule(rule)));...Using AI Code Generation
1import { RequestHook } from 'testcafe';2class MyHook extends RequestHook {3    constructor (requestFilterRules, responseEventConfigureOpts) {4        super(requestFilterRules, responseEventConfigureOpts);5    }6    async onRequest (event) {7        if (isMatch) {8            event.preventDefault();9        }10    }11    async onResponse (event) {12        if (isMatch) {13            event.preventDefault();14        }15    }16}17export default MyHook;18import { RequestHook } from 'testcafe';19class MyHook extends RequestHook {20    constructor (requestFilterRules, responseEventConfigureOpts) {21        super(requestFilterRules, responseEventConfigureOpts);22    }23    async onRequest (event) {24        if (isMatch) {25            event.preventDefault();26        }27    }28    async onResponse (event) {29        if (isMatch) {30            event.preventDefault();31        }32    }33}34export default MyHook;35import { RequestHook } from 'testcafe';36class MyHook extends RequestHook {37    constructor (requestFilterRules, responseEventConfigureOpts) {38        super(requestFilterRules, responseEventConfigureOpts);39    }40    async onRequest (event) {41        if (isMatch) {42            event.preventDefault();43        }44    }45    async onResponse (event) {46        if (isMatch) {47            event.preventDefault();48        }49    }50}51export default MyHook;52import { RequestHook } from 'testcafe';53class MyHook extends RequestHook {54    constructor (requestFilterRules, responseEventConfigureOpts) {55        super(requestFilterRules, responseEventConfigureOpts);56    }57    async onRequest (event) {58        if (isMatch) {59            event.preventDefault();60        }61    }62    async onResponse (event) {63        const isMatch = await event.isMatch('httpUsing AI Code Generation
1import { urlMatchRule } from 'testcafe';2test('My test', async t => {3});4import { urlMatchRule } from 'testcafe';5test('My test', async t => {6});7import { urlMatchRule } from 'testcafe';8test('My test', async t => {9});10import { urlMatchRule } from 'testcafe';11test('My test', async t => {12});13import { urlMatchRule } from 'testcafe';14test('My test', async t => {15});16import { urlMatchRule } from 'testcafe';17test('My test', async t => {18});19import { urlMatchRule } from 'testcafe';Using AI Code Generation
1import { urlMatchRule } from 'testcafe';2test('My Test', async t => {3});4import { urlMatchRule } from 'testcafe';5test('My Test', async t => {6});7import { urlMatchRule } from 'testcafe';8test('My Test', async t => {9});10import { urlMatchRule } from 'testcafe';11test('My Test', async t => {12});Using AI Code Generation
1import { urlMatchRule } from 'testcafe';2test('My test', async t => {3});4test('My test', async t => {5});6test('My test', async t => {7});8test('My test', async t => {9});10test('My test', async t => {11});12test('My test', async t => {13});Using AI Code Generation
1import { RequestLogger } from 'testcafe';2    .requestHooks(logger);3test('My test', async t => {4        .expect(logger.contains(r => r.url.match(/www.google.com/))).ok()5        .expect(logger.contains(r => r.url.match(/www.google.com\/search/))).ok()6        .expect(logger.contains(r => r.url.match(/www.google.com\/search\?q=test/))).ok();7});8import { RequestLogger } from 'testcafe';9    .requestHooks(logger);10test('My test', async t => {11        .expect(logger.contains(r => r.url.match(/www.google.com/))).ok()12        .expect(logger.contains(r => r.url.match(/www.google.com\/search/))).ok()13        .expect(logger.contains(r => r.url.match(/www.google.com\/search\?q=test/))).ok();14});15import { RequestLogger } from 'testcafe';16    .requestHooks(logger);17test('My test', async t => {18        .expect(logger.contains(r => r.url.match(/www.google.com/))).ok()19        .expect(logger.contains(r => r.url.match(/www.google.com\/search/))).ok()20        .expect(logger.contains(r => r.url.match(/www.google.com\/search\?q=test/))).ok();21});22import { RequestLogger } from 'testcafe';23    .requestHooks(logger);24test('My test', async t => {25        .expect(logger.contains(r => r.url.match(/www.google.com/))).ok()Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
