← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~rharding/launchpad/ga_combo into lp:launchpad

 

Richard Harding has proposed merging lp:~rharding/launchpad/ga_combo into lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~rharding/launchpad/ga_combo/+merge/105219

= Summary =
The google analytics script is its own file but could be served via the combo
loader saving a request for those users.

This came up while testing the combo loader, it was loaded in a blocking
fashion that when it would take several seconds to get, would cause delays in
the other JS that the page required to operate.

== Pre Implementation ==
Discussed the change with Deryck and agreed since the ga.js script is our own
fork it's ok to subsume and serve out efficiently.

== Implementation Notes ==
Our version is a diff'd version so we moved the whole google-analytics
directory into our app/javascript dir. We kept the old files to aid in future
updates if required.

Note that it is safe to always run the googleanalytics module because it only runs if the config'd domain and the current url match up. Otherwise it's dead code (for example in .dev and such)

== Tests ==
There aren't tests for this new YUI module as it's purely external code we're
wrapping.

== Q/A ==
Q/A is difficult because the ga.js script is only run when the `is_lpnet` is
set. This isn't set on qastaging. The only check to do there is that you can
tell that the google-analytics script is downloaded into the combo loader
request.

If the combo loader flag isn't enabled, then you don't get the ga.js script at all.

100% functional checks must be done on the production site and requires that
the _utm.gif file is pulled from google.

== Lint ==
/lib/lp/app/javascript/google-analytics/google-analytics.js will fail lint
horribly because it's a copied version of the ga.js script which is not our
code.

== LoC Qualification ==
This makes maint easier since it's less JS out of our normal tree. This seems
like a big increase because we had to copy the ga.js file into our YUI module,
and there are now two copies so that both combo loader and non-combo loader
users get the file. Once the combo loader is released these will decrease.
-- 
https://code.launchpad.net/~rharding/launchpad/ga_combo/+merge/105219
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~rharding/launchpad/ga_combo into lp:launchpad.
=== added file 'lib/canonical/launchpad/icing/ga.js'
--- lib/canonical/launchpad/icing/ga.js	1970-01-01 00:00:00 +0000
+++ lib/canonical/launchpad/icing/ga.js	2012-05-09 15:11:19 +0000
@@ -0,0 +1,1819 @@
+// This file is Copyright (c) Google Inc.
+//
+// Google Analytics Tracker code.
+// Downloaded from http://www.google-analytics.com/ga.js
+// on 2011-12-01.
+//
+// Beautified through http://jsbeautifier.org/
+//
+// We are serving it as part of Launchpad for security reasons.
+// Modification from the original: disable the Site Overlay feature
+// which loads additional JS from Google.
+// See ga-disable-gaso.diff
+(function () {
+    var g = void 0,
+        h = true,
+        i = null,
+        j = false,
+        ba = encodeURIComponent,
+        ca = Infinity,
+        da = setTimeout,
+        ea = decodeURIComponent,
+        k = Math;
+
+    function fa(a, b) {
+        return a.onload = b
+    }
+    function ga(a, b) {
+        return a.name = b
+    }
+    var m = "push",
+        ha = "slice",
+        ia = "replace",
+        ja = "load",
+        ka = "floor",
+        n = "charAt",
+        la = "value",
+        p = "indexOf",
+        ma = "match",
+        r = "name",
+        oa = "host",
+        t = "toString",
+        u = "length",
+        v = "prototype",
+        w = "split",
+        pa = "stopPropagation",
+        qa = "scope",
+        x = "location",
+        y = "getString",
+        z = "substring",
+        ra = "navigator",
+        A = "join",
+        C = "toLowerCase",
+        D;
+
+    function sa(a, b) {
+        switch (b) {
+        case 0:
+            return "" + a;
+        case 1:
+            return a * 1;
+        case 2:
+            return !!a;
+        case 3:
+            return a * 1E3
+        }
+        return a
+    }
+    function E(a, b) {
+        return g == a || "-" == a && !b || "" == a
+    }
+    function ta(a) {
+        if (!a || "" == a) return "";
+        for (; a && " \n\r\t" [p](a[n](0)) > -1;) a = a[z](1);
+        for (; a && " \n\r\t" [p](a[n](a[u] - 1)) > -1;) a = a[z](0, a[u] - 1);
+        return a
+    }
+    function ua(a) {
+        var b = 1,
+            c = 0,
+            d;
+        if (!E(a)) {
+            b = 0;
+            for (d = a[u] - 1; d >= 0; d--) c = a.charCodeAt(d), b = (b << 6 & 268435455) + c + (c << 14), c = b & 266338304, b = c != 0 ? b ^ c >> 21 : b
+        }
+        return b
+    }
+
+    function va() {
+        return k.round(k.random() * 2147483647)
+    }
+    function wa() {}
+    function F(a, b) {
+        return ba instanceof Function ? b ? encodeURI(a) : ba(a) : (G(68), escape(a))
+    }
+    function H(a) {
+        a = a[w]("+")[A](" ");
+        if (ea instanceof Function) try {
+            return ea(a)
+        } catch (b) {
+            G(17)
+        } else G(68);
+        return unescape(a)
+    }
+    var xa = function (a, b, c, d) {
+            a.addEventListener ? a.addEventListener(b, c, !! d) : a.attachEvent && a.attachEvent("on" + b, c)
+        },
+        ya = function (a, b, c, d) {
+            a.removeEventListener ? a.removeEventListener(b, c, !! d) : a.detachEvent && a.detachEvent("on" + b, c)
+        };
+
+    function I(a) {
+        return a && a[u] > 0 ? a[0] : ""
+    }
+    function za(a) {
+        var b = a ? a[u] : 0;
+        return b > 0 ? a[b - 1] : ""
+    }
+    var Aa = function () {
+            this.prefix = "ga.";
+            this.I = {}
+        };
+    Aa[v].set = function (a, b) {
+        this.I[this.prefix + a] = b
+    };
+    Aa[v].get = function (a) {
+        return this.I[this.prefix + a]
+    };
+    Aa[v].contains = function (a) {
+        return this.get(a) !== g
+    };
+
+    function Ba(a) {
+        a[p]("www.") == 0 && (a = a[z](4));
+        return a[C]()
+    }
+    function Ca(a, b) {
+        var c, d = {
+            url: a,
+            protocol: "http",
+            host: "",
+            path: "",
+            c: new Aa,
+            anchor: ""
+        };
+        if (!a) return d;
+        c = a[p]("://");
+        if (c >= 0) d.protocol = a[z](0, c), a = a[z](c + 3);
+        c = a.search("/|\\?|#");
+        if (c >= 0) d.host = a[z](0, c)[C](), a = a[z](c);
+        else return d.host = a[C](), d;
+        c = a[p]("#");
+        if (c >= 0) d.anchor = a[z](c + 1), a = a[z](0, c);
+        c = a[p]("?");
+        c >= 0 && (Da(d.c, a[z](c + 1)), a = a[z](0, c));
+        d.anchor && b && Da(d.c, d.anchor);
+        a && a[n](0) == "/" && (a = a[z](1));
+        d.path = a;
+        return d
+    }
+
+    function Da(a, b) {
+        function c(b, c) {
+            a.contains(b) || a.set(b, []);
+            a.get(b)[m](c)
+        }
+        for (var d = ta(b)[w]("&"), e = 0; e < d[u]; e++) if (d[e]) {
+            var f = d[e][p]("=");
+            f < 0 ? c(d[e], "1") : c(d[e][z](0, f), d[e][z](f + 1))
+        }
+    }
+    function Ea(a, b) {
+        if (E(a)) return "-";
+        if ("[" == a[n](0) && "]" == a[n](a[u] - 1)) return "-";
+        var c = J.domain;
+        c += b && b != "/" ? b : "";
+        return a[p](c) == (a[p]("http://";) == 0 ? 7 : a[p]("https://";) == 0 ? 8 : 0) ? "0" : a
+    };
+
+    function Fa(a, b, c) {
+        k.random() * 100 >= 1 || (a = ["utmt=error", "utmerr=" + a, "utmwv=5.2.2", "utmn=" + va(), "utmsp=1"], b && a[m]("api=" + b), c && a[m]("msg=" + F(c[z](0, 100))), K.q && a[m]("aip=1"), Ga(a[A]("&")))
+    };
+    var Ha = 0;
+
+    function L(a) {
+        return (a ? "_" : "") + Ha++
+    }
+    var Ia = L(),
+        Ja = L(),
+        Ka = L(),
+        La = L(),
+        Ma = L(),
+        M = L(),
+        N = L(),
+        Na = L(),
+        Oa = L(),
+        Pa = L(),
+        Qa = L(),
+        Ra = L(),
+        Sa = L(),
+        Ta = L(),
+        Ua = L(),
+        Va = L(),
+        Wa = L(),
+        Xa = L(),
+        Ya = L(),
+        Za = L(),
+        $a = L(),
+        ab = L(),
+        bb = L(),
+        cb = L(),
+        db = L(),
+        eb = L(),
+        fb = L(),
+        gb = L(),
+        hb = L(),
+        ib = L(),
+        jb = L(),
+        kb = L(),
+        lb = L(),
+        mb = L(),
+        nb = L(),
+        O = L(h),
+        ob = L(),
+        pb = L(),
+        qb = L(),
+        rb = L(),
+        sb = L(),
+        tb = L(),
+        ub = L(),
+        vb = L(),
+        wb = L(),
+        xb = L(),
+        P = L(h),
+        yb = L(h),
+        zb = L(h),
+        Bb = L(h),
+        Cb = L(h),
+        Db = L(h),
+        Eb = L(h),
+        Fb = L(h),
+        Gb = L(h),
+        Hb = L(h),
+        Ib = L(h),
+        Q = L(h),
+        Jb = L(h),
+        Kb = L(h),
+        Lb = L(h),
+        Mb = L(h),
+        Nb = L(h),
+        Ob = L(h),
+        Pb = L(h),
+        Qb = L(h),
+        Rb = L(h),
+        Sb = L(h),
+        Tb = L(h),
+        Ub = L(h),
+        Vb = L(h),
+        Wb = L(),
+        Xb = L(),
+        Yb = L();
+    L();
+    var Zb = L(),
+        $b = L(),
+        ac = L(),
+        bc = L(),
+        cc = L(),
+        dc = L(),
+        ec = L(),
+        hc = L(),
+        ic = L(),
+        jc = L();
+    L();
+    var kc = L(),
+        lc = L();
+    var mc = function () {
+            function a(a, c, d) {
+                R(S[v], a, c, d)
+            }
+            T("_getName", Ka, 58);
+            T("_getAccount", Ia, 64);
+            T("_visitCode", P, 54);
+            T("_getClientInfo", Ta, 53, 1);
+            T("_getDetectTitle", Wa, 56, 1);
+            T("_getDetectFlash", Ua, 65, 1);
+            T("_getLocalGifPath", fb, 57);
+            T("_getServiceMode", gb, 59);
+            U("_setClientInfo", Ta, 66, 2);
+            U("_setAccount", Ia, 3);
+            U("_setNamespace", Ja, 48);
+            U("_setAllowLinker", Qa, 11, 2);
+            U("_setDetectFlash", Ua, 61, 2);
+            U("_setDetectTitle", Wa, 62, 2);
+            U("_setLocalGifPath", fb, 46, 0);
+            U("_setLocalServerMode", gb, 92, g, 0);
+            U("_setRemoteServerMode", gb, 63, g, 1);
+            U("_setLocalRemoteServerMode", gb, 47, g, 2);
+            U("_setSampleRate", eb, 45, 1);
+            U("_setCampaignTrack", Va, 36, 2);
+            U("_setAllowAnchor", Ra, 7, 2);
+            U("_setCampNameKey", Ya, 41);
+            U("_setCampContentKey", cb, 38);
+            U("_setCampIdKey", Xa, 39);
+            U("_setCampMediumKey", ab, 40);
+            U("_setCampNOKey", db, 42);
+            U("_setCampSourceKey", $a, 43);
+            U("_setCampTermKey", bb, 44);
+            U("_setCampCIdKey", Za, 37);
+            U("_setCookiePath", N, 9, 0);
+            U("_setMaxCustomVariables", hb, 0, 1);
+            U("_setVisitorCookieTimeout", Na, 28, 1);
+            U("_setSessionCookieTimeout", Oa, 26, 1);
+            U("_setCampaignCookieTimeout", Pa, 29, 1);
+            U("_setReferrerOverride", qb, 49);
+            U("_setSiteSpeedSampleRate", ic, 132);
+            a("_trackPageview", S[v].na, 1);
+            a("_trackEvent", S[v].v, 4);
+            a("_trackPageLoadTime", S[v].ma, 100);
+            a("_trackSocial", S[v].oa, 104);
+            a("_trackTrans", S[v].pa, 18);
+            a("_sendXEvent", S[v].u, 78);
+            a("_createEventTracker", S[v].V, 74);
+            a("_getVersion", S[v].$, 60);
+            a("_setDomainName", S[v].t, 6);
+            a("_setAllowHash", S[v].ea, 8);
+            a("_getLinkerUrl", S[v].Z, 52);
+            a("_link", S[v].link, 101);
+            a("_linkByPost", S[v].da, 102);
+            a("_setTrans", S[v].ha, 20);
+            a("_addTrans", S[v].O, 21);
+            a("_addItem", S[v].M, 19);
+            a("_setTransactionDelim", S[v].ia, 82);
+            a("_setCustomVar", S[v].fa, 10);
+            a("_deleteCustomVar", S[v].X, 35);
+            a("_getVisitorCustomVar", S[v].aa, 50);
+            a("_setXKey", S[v].ka, 83);
+            a("_setXValue", S[v].la, 84);
+            a("_getXKey", S[v].ba, 76);
+            a("_getXValue", S[v].ca, 77);
+            a("_clearXKey", S[v].S, 72);
+            a("_clearXValue", S[v].T, 73);
+            a("_createXObj", S[v].W, 75);
+            a("_addIgnoredOrganic", S[v].K, 15);
+            a("_clearIgnoredOrganic", S[v].P, 97);
+            a("_addIgnoredRef", S[v].L, 31);
+            a("_clearIgnoredRef", S[v].Q, 32);
+            a("_addOrganic", S[v].N, 14);
+            a("_clearOrganic", S[v].R, 70);
+            a("_cookiePathCopy", S[v].U, 30);
+            a("_get", S[v].Y, 106);
+            a("_set", S[v].ga, 107);
+            a("_addEventListener", S[v].addEventListener, 108);
+            a("_removeEventListener", S[v].removeEventListener, 109);
+            a("_initData", S[v].m, 2);
+            a("_setVar", S[v].ja, 22);
+            U("_setSessionTimeout", Oa, 27, 3);
+            U("_setCookieTimeout", Pa, 25, 3);
+            U("_setCookiePersistence", Na, 24, 1);
+            a("_setAutoTrackOutbound", wa, 79);
+            a("_setTrackOutboundSubdomains", wa, 81);
+            a("_setHrefExamineLimit", wa, 80)
+        },
+        R = function (a, b, c, d) {
+            a[b] = function () {
+                try {
+                    return G(d), c.apply(this, arguments)
+                } catch (a) {
+                    throw Fa("exc", b, a && a[r]), a;
+                }
+            }
+        },
+        T = function (a, b, c, d) {
+            S[v][a] = function () {
+                try {
+                    return G(c), sa(this.a.get(b), d)
+                } catch (e) {
+                    throw Fa("exc", a, e && e[r]), e;
+                }
+            }
+        },
+        U = function (a, b, c, d, e) {
+            S[v][a] = function (f) {
+                try {
+                    G(c), e == g ? this.a.set(b, sa(f, d)) : this.a.set(b, e)
+                } catch (l) {
+                    throw Fa("exc", a, l && l[r]), l;
+                }
+            }
+        },
+        nc = function (a, b) {
+            return {
+                type: b,
+                target: a,
+                stopPropagation: function () {
+                    throw "aborted";
+                }
+            }
+        };
+    var oc = function (a, b) {
+            return b !== "/" ? j : (a[p]("www.google.") == 0 || a[p](".google.") == 0 || a[p]("google.") == 0) && !(a[p]("google.org") > -1) ? h : j
+        },
+        pc = function (a) {
+            var b = a.get(Ma),
+                c = a[y](N, "/");
+            oc(b, c) && a[pa]()
+        };
+    var uc = function () {
+            var a = {},
+                b = {},
+                c = new qc;
+            this.g = function (a, b) {
+                c.add(a, b)
+            };
+            var d = new qc;
+            this.d = function (a, b) {
+                d.add(a, b)
+            };
+            var e = j,
+                f = j,
+                l = h;
+            this.J = function () {
+                e = h
+            };
+            this.f = function (a) {
+                this[ja]();
+                this.set(Wb, a, h);
+                a = new rc(this);
+                e = j;
+                d.execute(this);
+                e = h;
+                b = {};
+                this.i();
+                a.qa()
+            };
+            this.load = function () {
+                e && (e = j, this.sa(), sc(this), f || (f = h, c.execute(this), tc(this), sc(this)), e = h)
+            };
+            this.i = function () {
+                if (e) if (f) e = j, tc(this), e = h;
+                else this[ja]()
+            };
+            this.get = function (c) {
+                c && c[n](0) == "_" && this[ja]();
+                return b[c] !== g ? b[c] : a[c]
+            };
+            this.set = function (c, d, e) {
+                c && c[n](0) == "_" && this[ja]();
+                e ? b[c] = d : a[c] = d;
+                c && c[n](0) == "_" && this.i()
+            };
+            this.n = function (b) {
+                a[b] = this.b(b, 0) + 1
+            };
+            this.b = function (a, b) {
+                var c = this.get(a);
+                return c == g || c === "" ? b : c * 1
+            };
+            this.getString = function (a, b) {
+                var c = this.get(a);
+                return c == g ? b : c + ""
+            };
+            this.sa = function () {
+                if (l) {
+                    var b = this[y](Ma, ""),
+                        c = this[y](N, "/");
+                    oc(b, c) || (a[M] = a[Sa] && b != "" ? ua(b) : 1, l = j)
+                }
+            }
+        };
+    uc[v].stopPropagation = function () {
+        throw "aborted";
+    };
+    var rc = function (a) {
+            var b = this;
+            this.j = 0;
+            var c = a.get(Xb);
+            this.Aa = function () {
+                b.j > 0 && c && (b.j--, b.j || c())
+            };
+            this.qa = function () {
+                !b.j && c && da(c, 0)
+            };
+            a.set(Yb, b, h)
+        };
+
+    function vc(a, b) {
+        for (var b = b || [], c = 0; c < b[u]; c++) {
+            var d = b[c];
+            if ("" + a == d || d[p](a + ".") == 0) return d
+        }
+        return "-"
+    }
+    var xc = function (a, b, c) {
+            c = c ? "" : a[y](M, "1");
+            b = b[w](".");
+            if (b[u] !== 6 || wc(b[0], c)) return j;
+            var c = b[1] * 1,
+                d = b[2] * 1,
+                e = b[3] * 1,
+                f = b[4] * 1,
+                b = b[5] * 1;
+            if (!(c >= 0 && d > 0 && e > 0 && f > 0 && b >= 0)) return G(110), j;
+            a.set(P, c);
+            a.set(Cb, d);
+            a.set(Db, e);
+            a.set(Eb, f);
+            a.set(Fb, b);
+            return h
+        },
+        yc = function (a) {
+            var b = a.get(P),
+                c = a.get(Cb),
+                d = a.get(Db),
+                e = a.get(Eb),
+                f = a.b(Fb, 1);
+            b == g ? G(113) : b == NaN && G(114);
+            b >= 0 && c > 0 && d > 0 && e > 0 && f >= 0 || G(115);
+            return [a.b(M, 1), b != g ? b : "-", c || "-", d || "-", e || "-", f][A](".")
+        },
+        zc = function (a) {
+            return [a.b(M, 1), a.b(Ib, 0), a.b(Q, 1), a.b(Jb, 0)][A](".")
+        },
+        Ac = function (a, b, c) {
+            var c = c ? "" : a[y](M, "1"),
+                d = b[w](".");
+            if (d[u] !== 4 || wc(d[0], c)) d = i;
+            a.set(Ib, d ? d[1] * 1 : 0);
+            a.set(Q, d ? d[2] * 1 : 10);
+            a.set(Jb, d ? d[3] * 1 : a.get(La));
+            return d != i || !wc(b, c)
+        },
+        Bc = function (a, b) {
+            var c = F(a[y](zb, "")),
+                d = [],
+                e = a.get(O);
+            if (!b && e) {
+                for (var f = 0; f < e[u]; f++) {
+                    var l = e[f];
+                    l && l[qa] == 1 && d[m](f + "=" + F(l[r]) + "=" + F(l[la]) + "=1")
+                }
+                d[u] > 0 && (c += "|" + d[A](","))
+            }
+            return c ? a.b(M, 1) + "." + c : i
+        },
+        Cc = function (a, b, c) {
+            c = c ? "" : a[y](M, "1");
+            b = b[w](".");
+            if (b[u] < 2 || wc(b[0], c)) return j;
+            b = b[ha](1)[A](".")[w]("|");
+            b[u] > 0 && a.set(zb, H(b[0]));
+            if (b[u] <= 1) return h;
+            for (var c = b[1][w](b[1][p](",") == -1 ? "^" : ","), d = 0; d < c[u]; d++) {
+                var e = c[d][w]("=");
+                if (e[u] == 4) {
+                    var f = {};
+                    ga(f, H(e[1]));
+                    f.value = H(e[2]);
+                    f.scope = 1;
+                    a.get(O)[e[0]] = f
+                }
+            }
+            b[1][p]("^") >= 0 && G(125);
+            return h
+        },
+        Ec = function (a, b) {
+            var c = Dc(a, b);
+            return c ? [a.b(M, 1), a.b(Kb, 0), a.b(Lb, 1), a.b(Mb, 1), c][A](".") : ""
+        },
+        Dc = function (a) {
+            function b(b, e) {
+                if (!E(a.get(b))) {
+                    var f = a[y](b, ""),
+                        f = f[w](" ")[A]("%20"),
+                        f = f[w]("+")[A]("%20");
+                    c[m](e + "=" + f)
+                }
+            }
+            var c = [];
+            b(Ob, "utmcid");
+            b(Sb, "utmcsr");
+            b(Qb, "utmgclid");
+            b(Rb, "utmdclid");
+            b(Pb, "utmccn");
+            b(Tb, "utmcmd");
+            b(Ub, "utmctr");
+            b(Vb, "utmcct");
+            return c[A]("|")
+        },
+        Gc = function (a, b, c) {
+            c = c ? "" : a[y](M, "1");
+            b = b[w](".");
+            if (b[u] < 5 || wc(b[0], c)) return a.set(Kb, g), a.set(Lb, g), a.set(Mb, g), a.set(Ob, g), a.set(Pb, g), a.set(Sb, g), a.set(Tb, g), a.set(Ub, g), a.set(Vb, g), a.set(Qb, g), a.set(Rb, g), j;
+            a.set(Kb, b[1] * 1);
+            a.set(Lb, b[2] * 1);
+            a.set(Mb, b[3] * 1);
+            Fc(a, b[ha](4)[A]("."));
+            return h
+        },
+        Fc = function (a, b) {
+            function c(a) {
+                return (a = b[ma](a + "=(.*?)(?:\\|utm|$)")) && a[u] == 2 ? a[1] : g
+            }
+            function d(b, c) {
+                c && (c = e ? H(c) : c[w]("%20")[A](" "), a.set(b, c))
+            }
+            b[p]("=") == -1 && (b = H(b));
+            var e = c("utmcvr") == "2";
+            d(Ob, c("utmcid"));
+            d(Pb, c("utmccn"));
+            d(Sb, c("utmcsr"));
+            d(Tb, c("utmcmd"));
+            d(Ub, c("utmctr"));
+            d(Vb, c("utmcct"));
+            d(Qb, c("utmgclid"));
+            d(Rb, c("utmdclid"))
+        },
+        wc = function (a, b) {
+            return b ? a != b : !/^\d+$/.test(a)
+        };
+    var qc = function () {
+            this.s = []
+        };
+    qc[v].add = function (a, b) {
+        this.s[m]({
+            name: a,
+            Da: b
+        })
+    };
+    qc[v].execute = function (a) {
+        try {
+            for (var b = 0; b < this.s[u]; b++) this.s[b].Da.call(V, a)
+        } catch (c) {}
+    };
+
+    function Hc(a) {
+        a.get(eb) != 100 && a.get(P) % 1E4 >= a.get(eb) * 100 && a[pa]()
+    }
+    function Ic(a) {
+        Jc() && a[pa]()
+    }
+    function Kc(a) {
+        J[x].protocol == "file:" && a[pa]()
+    }
+    function Lc(a) {
+        a.get(pb) || a.set(pb, J.title, h);
+        a.get(ob) || a.set(ob, J[x].pathname + J[x].search, h)
+    };
+    var Mc = new function () {
+            var a = [];
+            this.set = function (b) {
+                a[b] = h
+            };
+            this.Ea = function () {
+                for (var b = [], c = 0; c < a[u]; c++) a[c] && (b[k[ka](c / 6)] ^= 1 << c % 6);
+                for (c = 0; c < b[u]; c++) b[c] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" [n](b[c] || 0);
+                return b[A]("") + "~"
+            }
+        };
+
+    function G(a) {
+        Mc.set(a)
+    };
+    var V = window,
+        J = document,
+        Jc = function () {
+            var a = V._gaUserPrefs;
+            return a && a.ioo && a.ioo()
+        },
+        Nc = function (a, b) {
+            da(a, b)
+        },
+        W = function (a) {
+            for (var b = [], c = J.cookie[w](";"), a = RegExp("^\\s*" + a + "=\\s*(.*?)\\s*$"), d = 0; d < c[u]; d++) {
+                var e = c[d][ma](a);
+                e && b[m](e[1])
+            }
+            return b
+        },
+        X = function (a, b, c, d, e) {
+            var f;
+            f = Jc() ? j : oc(d, c) ? j : h;
+            if (f) {
+                if (b && V[ra].userAgent[p]("Firefox") >= 0) {
+                    b = b[ia](/\n|\r/g, " ");
+                    f = 0;
+                    for (var l = b[u]; f < l; ++f) {
+                        var o = b.charCodeAt(f) & 255;
+                        if (o == 10 || o == 13) b = b[z](0, f) + "?" + b[z](f + 1)
+                    }
+                }
+                b && b[u] > 2E3 && (b = b[z](0, 2E3), G(69));
+                a = a + "=" + b + "; path=" + c + "; ";
+                e && (a += "expires=" + (new Date((new Date).getTime() + e)).toGMTString() + "; ");
+                d && (a += "domain=" + d + ";");
+                J.cookie = a
+            }
+        };
+    var Oc, Pc, Qc = function () {
+            if (!Oc) {
+                var a = {},
+                    b = V[ra],
+                    c = V.screen;
+                a.H = c ? c.width + "x" + c.height : "-";
+                a.G = c ? c.colorDepth + "-bit" : "-";
+                a.language = (b && (b.language || b.browserLanguage) || "-")[C]();
+                a.javaEnabled = b && b.javaEnabled() ? 1 : 0;
+                a.characterSet = J.characterSet || J.charset || "-";
+                Oc = a
+            }
+        },
+        Rc = function () {
+            Qc();
+            for (var a = Oc, b = V[ra], a = b.appName + b.version + a.language + b.platform + b.userAgent + a.javaEnabled + a.H + a.G + (J.cookie ? J.cookie : "") + (J.referrer ? J.referrer : ""), b = a[u], c = V.history[u]; c > 0;) a += c-- ^ b++;
+            return ua(a)
+        },
+        Sc = function (a) {
+            Qc();
+            var b = Oc;
+            a.set(sb, b.H);
+            a.set(tb, b.G);
+            a.set(wb, b.language);
+            a.set(xb, b.characterSet);
+            a.set(ub, b.javaEnabled);
+            if (a.get(Ta) && a.get(Ua)) {
+                if (!(b = Pc)) {
+                    var c, d, e;
+                    d = "ShockwaveFlash";
+                    if ((b = (b = V[ra]) ? b.plugins : g) && b[u] > 0) for (c = 0; c < b[u] && !e; c++) d = b[c], d[r][p]("Shockwave Flash") > -1 && (e = d.description[w]("Shockwave Flash ")[1]);
+                    else {
+                        d = d + "." + d;
+                        try {
+                            c = new ActiveXObject(d + ".7"), e = c.GetVariable("$version")
+                        } catch (f) {}
+                        if (!e) try {
+                            c = new ActiveXObject(d + ".6"), e = "WIN 6,0,21,0", c.AllowScriptAccess = "always", e = c.GetVariable("$version")
+                        } catch (l) {}
+                        if (!e) try {
+                            c = new ActiveXObject(d), e = c.GetVariable("$version")
+                        } catch (o) {}
+                        e && (e = e[w](" ")[1][w](","), e = e[0] + "." + e[1] + " r" + e[2])
+                    }
+                    b = e ? e : "-"
+                }
+                Pc = b;
+                a.set(vb, Pc)
+            } else a.set(vb, "-")
+        };
+    var Y = function () {
+            R(Y[v], "push", Y[v][m], 5);
+            R(Y[v], "_createAsyncTracker", Y[v].Ba, 33);
+            R(Y[v], "_getAsyncTracker", Y[v].Ca, 34);
+            this.r = 0
+        };
+    Y[v].Ba = function (a, b) {
+        return K.l(a, b || "")
+    };
+    Y[v].Ca = function (a) {
+        return K.p(a)
+    };
+    Y[v].push = function (a) {
+        this.r > 0 && G(105);
+        this.r++;
+        for (var b = arguments, c = 0, d = 0; d < b[u]; d++) try {
+            if (typeof b[d] === "function") b[d]();
+            else {
+                var e = "",
+                    f = b[d][0],
+                    l = f.lastIndexOf(".");
+                l > 0 && (e = f[z](0, l), f = f[z](l + 1));
+                var o = e == "_gat" ? K : e == "_gaq" ? Tc : K.p(e);
+                o[f].apply(o, b[d][ha](1))
+            }
+        } catch (q) {
+            c++
+        }
+        this.r--;
+        return c
+    };
+    var Yc = function () {
+            function a(a, b, c, d) {
+                g == f[a] && (f[a] = {});
+                g == f[a][b] && (f[a][b] = []);
+                f[a][b][c] = d
+            }
+            function b(a, b, c) {
+                if (g != f[a] && g != f[a][b]) return f[a][b][c]
+            }
+            function c(a, b) {
+                if (g != f[a] && g != f[a][b]) {
+                    f[a][b] = g;
+                    var c = h,
+                        d;
+                    for (d = 0; d < l[u]; d++) if (g != f[a][l[d]]) {
+                        c = j;
+                        break
+                    }
+                    c && (f[a] = g)
+                }
+            }
+            function d(a) {
+                var b = "",
+                    c = j,
+                    d, e;
+                for (d = 0; d < l[u]; d++) if (e = a[l[d]], g != e) {
+                    c && (b += l[d]);
+                    for (var c = [], f = g, $ = g, $ = 0; $ < e[u]; $++) if (g != e[$]) {
+                        f = "";
+                        $ != aa && g == e[$ - 1] && (f += $[t]() + na);
+                        for (var Wc = e[$], Xc = "", Ab = g, fc = g, gc = g, Ab = 0; Ab < Wc[u]; Ab++) fc = Wc[n](Ab), gc = B[fc], Xc += g != gc ? gc : fc;
+                        f += Xc;
+                        c[m](f)
+                    }
+                    b += o + c[A](s) + q;
+                    c = j
+                } else c = h;
+                return b
+            }
+            var e = this,
+                f = [],
+                l = ["k", "v"],
+                o = "(",
+                q = ")",
+                s = "*",
+                na = "!",
+                B = {
+                    "'": "'0"
+                };
+            B[q] = "'1";
+            B[s] = "'2";
+            B[na] = "'3";
+            var aa = 1;
+            e.va = function (a) {
+                return g != f[a]
+            };
+            e.o = function () {
+                for (var a = "", b = 0; b < f[u]; b++) g != f[b] && (a += b[t]() + d(f[b]));
+                return a
+            };
+            e.ua = function (a) {
+                if (a == g) return e.o();
+                for (var b = a.o(), c = 0; c < f[u]; c++) g != f[c] && !a.va(c) && (b += c[t]() + d(f[c]));
+                return b
+            };
+            e.e = function (b, c, d) {
+                if (!Uc(d)) return j;
+                a(b, "k", c, d);
+                return h
+            };
+            e.k = function (b, c, d) {
+                if (!Vc(d)) return j;
+                a(b, "v", c, d[t]());
+                return h
+            };
+            e.getKey = function (a, c) {
+                return b(a, "k", c)
+            };
+            e.C = function (a, c) {
+                return b(a, "v", c)
+            };
+            e.A = function (a) {
+                c(a, "k")
+            };
+            e.B = function (a) {
+                c(a, "v")
+            };
+            R(e, "_setKey", e.e, 89);
+            R(e, "_setValue", e.k, 90);
+            R(e, "_getKey", e.getKey, 87);
+            R(e, "_getValue", e.C, 88);
+            R(e, "_clearKey", e.A, 85);
+            R(e, "_clearValue", e.B, 86)
+        };
+
+    function Uc(a) {
+        return typeof a == "string"
+    }
+    function Vc(a) {
+        return typeof a != "number" && (g == Number || !(a instanceof Number)) || k.round(a) != a || a == NaN || a == ca ? j : h
+    };
+    var Zc = function (a) {
+            var b = V.gaGlobal;
+            a && !b && (V.gaGlobal = b = {});
+            return b
+        },
+        $c = function () {
+            var a = Zc(h).hid;
+            if (a == i) a = va(), Zc(h).hid = a;
+            return a
+        },
+        ad = function (a) {
+            a.set(rb, $c());
+            var b = Zc();
+            if (b && b.dh == a.get(M)) {
+                var c = b.sid;
+                c && (c == "0" && G(112), a.set(Eb, c), a.get(yb) && a.set(Db, c));
+                b = b.vid;
+                a.get(yb) && b && (b = b[w]("."), b[1] * 1 || G(112), a.set(P, b[0] * 1), a.set(Cb, b[1] * 1))
+            }
+        };
+    var bd, cd = function (a, b, c) {
+            var d = a[y](Ma, ""),
+                e = a[y](N, "/"),
+                a = a.b(Na, 0);
+            X(b, c, e, d, a)
+        },
+        tc = function (a) {
+            var b = a[y](Ma, "");
+            a.b(M, 1);
+            var c = a[y](N, "/");
+            X("__utma", yc(a), c, b, a.get(Na));
+            X("__utmb", zc(a), c, b, a.get(Oa));
+            X("__utmc", "" + a.b(M, 1), c, b);
+            var d = Ec(a, h);
+            d ? X("__utmz", d, c, b, a.get(Pa)) : X("__utmz", "", c, b, -1);
+            (d = Bc(a, j)) ? X("__utmv", d, c, b, a.get(Na)) : X("__utmv", "", c, b, -1)
+        },
+        sc = function (a) {
+            var b = a.b(M, 1);
+            if (!xc(a, vc(b, W("__utma")))) return a.set(Bb, h), j;
+            var c = !Ac(a, vc(b, W("__utmb")));
+            a.set(Hb, c);
+            Gc(a, vc(b, W("__utmz")));
+            Cc(a, vc(b, W("__utmv")));
+            bd = !c;
+            return h
+        },
+        dd = function (a) {
+            !bd && !(W("__utmb")[u] > 0) && (X("__utmd", "1", a[y](N, "/"), a[y](Ma, ""), 1E4), W("__utmd")[u] == 0 && a[pa]())
+        };
+    var gd = function (a) {
+            a.get(P) == g ? ed(a) : a.get(Bb) && !a.get(kc) ? ed(a) : a.get(Hb) && fd(a)
+        },
+        hd = function (a) {
+            a.get(Nb) && !a.get(Gb) && (fd(a), a.set(Lb, a.get(Fb)))
+        },
+        ed = function (a) {
+            var b = a.get(La);
+            a.set(yb, h);
+            a.set(P, va() ^ Rc(a) & 2147483647);
+            a.set(zb, "");
+            a.set(Cb, b);
+            a.set(Db, b);
+            a.set(Eb, b);
+            a.set(Fb, 1);
+            a.set(Gb, h);
+            a.set(Ib, 0);
+            a.set(Q, 10);
+            a.set(Jb, b);
+            a.set(O, []);
+            a.set(Bb, j);
+            a.set(Hb, j)
+        },
+        fd = function (a) {
+            a.set(Db, a.get(Eb));
+            a.set(Eb, a.get(La));
+            a.n(Fb);
+            a.set(Gb, h);
+            a.set(Ib, 0);
+            a.set(Q, 10);
+            a.set(Jb, a.get(La));
+            a.set(Hb, j)
+        };
+    var id = "daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:q,lycos:query,ask:q,netscape:query,cnn:query,about:terms,mamma:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,ozu:q,terra:query,rambler:query".split(","),
+        od = function (a) {
+            if (a.get(Va) && !a.get(kc)) {
+                for (var b = !E(a.get(Ob)) || !E(a.get(Sb)) || !E(a.get(Qb)) || !E(a.get(Rb)), c = {}, d = 0; d < jd[u]; d++) {
+                    var e = jd[d];
+                    c[e] = a.get(e)
+                }
+                d = Ca(J[x].href, a.get(Ra));
+                if (!(za(d.c.get(a.get(db))) == "1" && b) && (d = kd(a, d) || ld(a), !d && !b && a.get(Gb) && (md(a, g, "(direct)", g, g, "(direct)", "(none)", g, g), d = h), d && (a.set(Nb, nd(a, c)), b = a.get(Sb) == "(direct)" && a.get(Pb) == "(direct)" && a.get(Tb) == "(none)", a.get(Nb) || a.get(Gb) && !b))) a.set(Kb, a.get(La)), a.set(Lb, a.get(Fb)), a.n(Mb)
+            }
+        },
+        kd = function (a, b) {
+            function c(c, d) {
+                var d = d || "-",
+                    e = za(b.c.get(a.get(c)));
+                return e && e != "-" ? H(e) : d
+            }
+            var d = za(b.c.get(a.get(Xa))) || "-",
+                e = za(b.c.get(a.get($a))) || "-",
+                f = za(b.c.get(a.get(Za))) || "-",
+                l = za(b.c.get("dclid")) || "-",
+                o = c(Ya, "(not set)"),
+                q = c(ab, "(not set)"),
+                s = c(bb),
+                na = c(cb);
+            if (E(d) && E(f) && E(l) && E(e)) return j;
+            if (E(s)) {
+                var B = Ea(a.get(qb), a.get(N)),
+                    B = Ca(B, h);
+                (B = pd(a, B)) && !E(B[1] && !B[2]) && (s = B[1])
+            }
+            md(a, d, e, f, l, o, q, s, na);
+            return h
+        },
+        ld = function (a) {
+            var b = Ea(a.get(qb), a.get(N)),
+                c = Ca(b, h);
+            if (!(b != g && b != i && b != "" && b != "0" && b != "-" && b[p]("://") >= 0) || c && c[oa][p]("google") > -1 && c.c.contains("q") && c.path == "cse") return j;
+            if ((b = pd(a, c)) && !b[2]) return md(a, g, b[0], g, g, "(organic)", "organic", b[1], g), h;
+            else if (b) return j;
+            if (a.get(Gb)) a: {
+                for (var b = a.get(kb), d = Ba(c[oa]), e = 0; e < b[u]; ++e) if (d[p](b[e]) > -1) {
+                    a = j;
+                    break a
+                }
+                md(a, g, d, g, g, "(referral)", "referral", g, "/" + c.path);
+                a = h
+            } else a = j;
+            return a
+        },
+        pd = function (a, b) {
+            for (var c = a.get(ib), d = 0; d < c[u]; ++d) {
+                var e = c[d][w](":");
+                if (b[oa][p](e[0][C]()) > -1) {
+                    var f = b.c.get(e[1]);
+                    if (f && (f = I(f), !f && b[oa][p]("google.") > -1 && (f = "(not provided)"), !e[3] || b.url[p](e[3]) > -1)) {
+                        a: {
+                            for (var c = f, d = a.get(jb), c = H(c)[C](), l = 0; l < d[u]; ++l) if (c == d[l]) {
+                                c = h;
+                                break a
+                            }
+                            c = j
+                        }
+                        return [e[2] || e[0], f, c]
+                    }
+                }
+            }
+            return i
+        },
+        md = function (a, b, c, d, e, f, l, o, q) {
+            a.set(Ob, b);
+            a.set(Sb, c);
+            a.set(Qb, d);
+            a.set(Rb, e);
+            a.set(Pb, f);
+            a.set(Tb, l);
+            a.set(Ub, o);
+            a.set(Vb, q)
+        },
+        jd = [Pb, Ob, Qb, Rb, Sb, Tb, Ub, Vb],
+        nd = function (a, b) {
+            function c(a) {
+                a = ("" + a)[w]("+")[A]("%20");
+                return a = a[w](" ")[A]("%20")
+            }
+            function d(c) {
+                var d = "" + (a.get(c) || ""),
+                    c = "" + (b[c] || "");
+                return d[u] > 0 && d == c
+            }
+            if (d(Qb) || d(Rb)) return G(131), j;
+            for (var e = 0; e < jd[u]; e++) {
+                var f = jd[e],
+                    l = b[f] || "-",
+                    f = a.get(f) || "-";
+                if (c(l) != c(f)) return h
+            }
+            return j
+        };
+    var rd = function (a) {
+            qd(a, J[x].href) ? (a.set(kc, h), G(12)) : a.set(kc, j)
+        },
+        qd = function (a, b) {
+            if (!a.get(Qa)) return j;
+            var c = Ca(b, a.get(Ra)),
+                d = I(c.c.get("__utma")),
+                e = I(c.c.get("__utmb")),
+                f = I(c.c.get("__utmc")),
+                l = I(c.c.get("__utmx")),
+                o = I(c.c.get("__utmz")),
+                q = I(c.c.get("__utmv")),
+                c = I(c.c.get("__utmk"));
+            if (ua("" + d + e + f + l + o + q) != c) {
+                d = H(d);
+                e = H(e);
+                f = H(f);
+                l = H(l);
+                a: {
+                    for (var f = d + e + f + l, s = 0; s < 3; s++) {
+                        for (var na = 0; na < 3; na++) {
+                            if (c == ua(f + o + q)) {
+                                G(127);
+                                c = [o, q];
+                                break a
+                            }
+                            var B = o[ia](/ /g, "%20"),
+                                aa = q[ia](/ /g, "%20");
+                            if (c == ua(f + B + aa)) {
+                                G(128);
+                                c = [B, aa];
+                                break a
+                            }
+                            B = B[ia](/\+/g, "%20");
+                            aa = aa[ia](/\+/g, "%20");
+                            if (c == ua(f + B + aa)) {
+                                G(129);
+                                c = [B, aa];
+                                break a
+                            }
+                            o = H(o)
+                        }
+                        q = H(q)
+                    }
+                    c = g
+                }
+                if (!c) return j;
+                o = c[0];
+                q = c[1]
+            }
+            if (!xc(a, d, h)) return j;
+            Ac(a, e, h);
+            Gc(a, o, h);
+            Cc(a, q, h);
+            sd(a, l, h);
+            return h
+        },
+        ud = function (a, b, c) {
+            var d;
+            d = yc(a) || "-";
+            var e = zc(a) || "-",
+                f = "" + a.b(M, 1) || "-",
+                l = td(a) || "-",
+                o = Ec(a, j) || "-",
+                a = Bc(a, j) || "-",
+                q = ua("" + d + e + f + l + o + a),
+                s = [];
+            s[m]("__utma=" + d);
+            s[m]("__utmb=" + e);
+            s[m]("__utmc=" + f);
+            s[m]("__utmx=" + l);
+            s[m]("__utmz=" + o);
+            s[m]("__utmv=" + a);
+            s[m]("__utmk=" + q);
+            d = s[A]("&");
+            if (!d) return b;
+            e = b[p]("#");
+            return c ? e < 0 ? b + "#" + d : b + "&" + d : (c = "", f = b[p]("?"), e > 0 && (c = b[z](e), b = b[z](0, e)), f < 0 ? b + "?" + d + c : b + "&" + d + c)
+        };
+    var vd = "|",
+        xd = function (a, b, c, d, e, f, l, o, q) {
+            var s = wd(a, b);
+            s || (s = {}, a.get(lb)[m](s));
+            s.id_ = b;
+            s.affiliation_ = c;
+            s.total_ = d;
+            s.tax_ = e;
+            s.shipping_ = f;
+            s.city_ = l;
+            s.state_ = o;
+            s.country_ = q;
+            s.items_ = s.items_ || [];
+            return s
+        },
+        yd = function (a, b, c, d, e, f, l) {
+            var a = wd(a, b) || xd(a, b, "", 0, 0, 0, "", "", ""),
+                o;
+            a: {
+                if (a && a.items_) {
+                    o = a.items_;
+                    for (var q = 0; q < o[u]; q++) if (o[q].sku_ == c) {
+                        o = o[q];
+                        break a
+                    }
+                }
+                o = i
+            }
+            q = o || {};
+            q.transId_ = b;
+            q.sku_ = c;
+            q.name_ = d;
+            q.category_ = e;
+            q.price_ = f;
+            q.quantity_ = l;
+            o || a.items_[m](q);
+            return q
+        },
+        wd = function (a, b) {
+            for (var c = a.get(lb), d = 0; d < c[u]; d++) if (c[d].id_ == b) return c[d];
+            return i
+        };
+    var zd, Ad = function (a) {
+        /* Disabled for security.
+            var f;
+            var e;
+            if (!zd) {
+                var b;
+                b = J[x].hash;
+                var c = V[r],
+                    d = /^#?gaso=([^&]*)/;
+                if (f = (e = (b = b && b[ma](d) || c && c[ma](d)) ? b[1] : I(W("GASO")), b = e) && b[ma](/^(?:\|([-0-9a-z.]{1,40})\|)?([-.\w]{10,1200})$/i), c = f) if (cd(a, "GASO", "" + b), K._gasoDomain = a.get(Ma), K._gasoCPath = a.get(N), b = "https://"; + ((c[1] || "www") + ".google.com") + "/analytics/reporting/overlay_js?gaso=" + c[2] + "&" + va()) a = J.createElement("script"), a.type = "text/javascript", a.async = h, a.src = b, a.id = "_gasojs", fa(a, g), b = J.getElementsByTagName("script")[0], b.parentNode.insertBefore(a, b);
+                zd = h
+            }
+        */
+        };
+    var sd = function (a, b, c) {
+            c && (b = H(b));
+            c = a.b(M, 1);
+            b = b[w](".");
+            !(b[u] < 2) && /^\d+$/.test(b[0]) && (b[0] = "" + c, cd(a, "__utmx", b[A](".")))
+        },
+        td = function (a, b) {
+            var c = vc(a.get(M), W("__utmx"));
+            c == "-" && (c = "");
+            return b ? F(c) : c
+        };
+    var Fd = function (a, b) {
+            var c = k.min(a.b(ic, 0), 10);
+            if (a.b(P, 0) % 100 >= c) return j;
+            c = Bd() || Cd();
+            if (c == g) return j;
+            var d = c[0];
+            if (d == g || d == ca || isNaN(d)) return j;
+            d > 0 ? Dd(c) ? b(Ed(c)) : b(Ed(c[ha](0, 1))) : xa(V, "load", function () {
+                Fd(a, b)
+            }, j);
+            return h
+        },
+        Dd = function (a) {
+            for (var b = 1; b < a[u]; b++) if (isNaN(a[b]) || a[b] == ca || a[b] < 0) return j;
+            return h
+        },
+        Ed = function (a) {
+            for (var b = new Yc, c = 0; c < a[u]; c++) b.e(14, c + 1, (isNaN(a[c]) || a[c] < 0 ? 0 : a[c] < 5E3 ? k[ka](a[c] / 10) * 10 : a[c] < 45E4 ? k[ka](a[c] / 100) * 100 : 45E4) + ""), b.k(14, c + 1, a[c]);
+            return b
+        },
+        Bd = function () {
+            var a = V.performance || V.webkitPerformance;
+            if (a = a && a.timing) {
+                var b = a.navigationStart;
+                if (b == 0) G(133);
+                else return [a.loadEventStart - b, a.domainLookupEnd - a.domainLookupStart, a.connectEnd - a.connectStart, a.responseStart - a.requestStart, a.responseEnd - a.responseStart, a.fetchStart - b]
+            }
+        },
+        Cd = function () {
+            if (V.top == V) {
+                var a = V.external,
+                    b = a && a.onloadT;
+                a && !a.isValidLoadTime && (b = g);
+                b > 2147483648 && (b = g);
+                b > 0 && a.setPageReadyTime();
+                return b == g ? g : [b]
+            }
+        };
+    var S = function (a, b, c) {
+            function d(a) {
+                return function (b) {
+                    if ((b = b.get(lc)[a]) && b[u]) for (var c = nc(e, a), d = 0; d < b[u]; d++) b[d].call(e, c)
+                }
+            }
+            var e = this;
+            this.a = new uc;
+            this.get = function (a) {
+                return this.a.get(a)
+            };
+            this.set = function (a, b, c) {
+                this.a.set(a, b, c)
+            };
+            this.set(Ia, b || "UA-XXXXX-X");
+            this.set(Ka, a || "");
+            this.set(Ja, c || "");
+            this.set(La, k.round((new Date).getTime() / 1E3));
+            this.set(N, "/");
+            this.set(Na, 63072E6);
+            this.set(Pa, 15768E6);
+            this.set(Oa, 18E5);
+            this.set(Qa, j);
+            this.set(hb, 50);
+            this.set(Ra, j);
+            this.set(Sa, h);
+            this.set(Ta, h);
+            this.set(Ua, h);
+            this.set(Va, h);
+            this.set(Wa, h);
+            this.set(Ya, "utm_campaign");
+            this.set(Xa, "utm_id");
+            this.set(Za, "gclid");
+            this.set($a, "utm_source");
+            this.set(ab, "utm_medium");
+            this.set(bb, "utm_term");
+            this.set(cb, "utm_content");
+            this.set(db, "utm_nooverride");
+            this.set(eb, 100);
+            this.set(ic, 1);
+            this.set(jc, j);
+            this.set(fb, "/__utm.gif");
+            this.set(gb, 1);
+            this.set(lb, []);
+            this.set(O, []);
+            this.set(ib, id[ha](0));
+            this.set(jb, []);
+            this.set(kb, []);
+            this.t("auto");
+            this.set(qb, this.ra());
+            this.set(lc, {
+                hit: [],
+                load: []
+            });
+            this.a.g("0", rd);
+            this.a.g("1", gd);
+            this.a.g("2", od);
+            this.a.g("3", hd);
+            this.a.g("4", d("load"));
+            this.a.g("5", Ad);
+            this.a.d("A", Ic);
+            this.a.d("B", Kc);
+            this.a.d("C", gd);
+            this.a.d("D", Hc);
+            this.a.d("E", pc);
+            this.a.d("F", Gd);
+            this.a.d("G", dd);
+            this.a.d("H", Lc);
+            this.a.d("I", Sc);
+            this.a.d("J", ad);
+            this.a.d("K", d("hit"));
+            this.a.d("L", Hd);
+            this.a.d("M", Id);
+            this.get(La) === 0 && G(111);
+            this.a.J();
+            this.w = g
+        };
+    D = S[v];
+    D.h = function () {
+        var a = this.get(mb);
+        a || (a = new Yc, this.set(mb, a));
+        return a
+    };
+    D.ta = function (a) {
+        for (var b in a) {
+            var c = a[b];
+            a.hasOwnProperty(b) && typeof c != "function" && this.set(b, c, h)
+        }
+    };
+    D.z = function (a) {
+        if (this.get(jc)) return j;
+        var b = this,
+            c = Fd(this.a, function (c) {
+                b.set(ob, a, h);
+                b.u(c)
+            });
+        this.set(jc, c);
+        return c
+    };
+    D.na = function (a) {
+        a && a != g && (a.constructor + "")[p]("String") > -1 ? (G(13), this.set(ob, a, h)) : typeof a === "object" && a !== i && this.ta(a);
+        this.w = a = this.get(ob);
+        this.a.f("page");
+        this.z(a)
+    };
+    D.v = function (a, b, c, d, e) {
+        if (a == "" || !Uc(a) || b == "" || !Uc(b)) return j;
+        if (c != g && !Uc(c)) return j;
+        if (d != g && !Vc(d)) return j;
+        this.set($b, a, h);
+        this.set(ac, b, h);
+        this.set(bc, c, h);
+        this.set(cc, d, h);
+        this.set(Zb, !! e, h);
+        this.a.f("event");
+        return h
+    };
+    D.oa = function (a, b, c, d) {
+        if (!a || !b) return j;
+        this.set(dc, a, h);
+        this.set(ec, b, h);
+        this.set(hc, c || J[x].href, h);
+        d && this.set(ob, d, h);
+        this.a.f("social");
+        return h
+    };
+    D.ma = function () {
+        this.set(ic, 10);
+        this.z(this.w)
+    };
+    D.pa = function () {
+        this.a.f("trans")
+    };
+    D.u = function (a) {
+        this.set(nb, a, h);
+        this.a.f("event")
+    };
+    D.V = function (a) {
+        this.m();
+        var b = this;
+        return {
+            _trackEvent: function (c, d, e) {
+                G(91);
+                b.v(a, c, d, e)
+            }
+        }
+    };
+    D.Y = function (a) {
+        return this.get(a)
+    };
+    D.ga = function (a, b) {
+        if (a) if (a != g && (a.constructor + "")[p]("String") > -1) this.set(a, b);
+        else if (typeof a == "object") for (var c in a) a.hasOwnProperty(c) && this.set(c, a[c])
+    };
+    D.addEventListener = function (a, b) {
+        var c = this.get(lc)[a];
+        c && c[m](b)
+    };
+    D.removeEventListener = function (a, b) {
+        for (var c = this.get(lc)[a], d = 0; c && d < c[u]; d++) if (c[d] == b) {
+            c.splice(d, 1);
+            break
+        }
+    };
+    D.$ = function () {
+        return "5.2.2"
+    };
+    D.t = function (a) {
+        this.get(Sa);
+        a = a == "auto" ? Ba(J.domain) : !a || a == "-" || a == "none" ? "" : a[C]();
+        this.set(Ma, a)
+    };
+    D.ea = function (a) {
+        this.set(Sa, !! a)
+    };
+    D.Z = function (a, b) {
+        return ud(this.a, a, b)
+    };
+    D.link = function (a, b) {
+        if (this.a.get(Qa) && a) {
+            var c = ud(this.a, a, b);
+            J[x].href = c
+        }
+    };
+    D.da = function (a, b) {
+        this.a.get(Qa) && a && a.action && (a.action = ud(this.a, a.action, b))
+    };
+    D.ha = function () {
+        this.m();
+        var a = this.a,
+            b = J.getElementById ? J.getElementById("utmtrans") : J.utmform && J.utmform.utmtrans ? J.utmform.utmtrans : i;
+        if (b && b[la]) {
+            a.set(lb, []);
+            for (var b = b[la][w]("UTM:"), c = 0; c < b[u]; c++) {
+                b[c] = ta(b[c]);
+                for (var d = b[c][w](vd), e = 0; e < d[u]; e++) d[e] = ta(d[e]);
+                "T" == d[0] ? xd(a, d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8]) : "I" == d[0] && yd(a, d[1], d[2], d[3], d[4], d[5], d[6])
+            }
+        }
+    };
+    D.O = function (a, b, c, d, e, f, l, o) {
+        return xd(this.a, a, b, c, d, e, f, l, o)
+    };
+    D.M = function (a, b, c, d, e, f) {
+        return yd(this.a, a, b, c, d, e, f)
+    };
+    D.ia = function (a) {
+        vd = a || "|"
+    };
+    D.fa = function (a, b, c, d) {
+        var e = this.a;
+        if (a <= 0 || a > e.get(hb)) a = j;
+        else if (!b || !c || F(b)[u] + F(c)[u] > 64) a = j;
+        else {
+            d != 1 && d != 2 && (d = 3);
+            var f = {};
+            ga(f, b);
+            f.value = c;
+            f.scope = d;
+            e.get(O)[a] = f;
+            a = h
+        }
+        a && this.a.i();
+        return a
+    };
+    D.X = function (a) {
+        this.a.get(O)[a] = g;
+        this.a.i()
+    };
+    D.aa = function (a) {
+        return (a = this.a.get(O)[a]) && a[qa] == 1 ? a[la] : g
+    };
+    D.ka = function (a, b, c) {
+        this.h().e(a, b, c)
+    };
+    D.la = function (a, b, c) {
+        this.h().k(a, b, c)
+    };
+    D.ba = function (a, b) {
+        return this.h().getKey(a, b)
+    };
+    D.ca = function (a, b) {
+        return this.h().C(a, b)
+    };
+    D.S = function (a) {
+        this.h().A(a)
+    };
+    D.T = function (a) {
+        this.h().B(a)
+    };
+    D.W = function () {
+        return new Yc
+    };
+    D.K = function (a) {
+        a && this.get(jb)[m](a[C]())
+    };
+    D.P = function () {
+        this.set(jb, [])
+    };
+    D.L = function (a) {
+        a && this.get(kb)[m](a[C]())
+    };
+    D.Q = function () {
+        this.set(kb, [])
+    };
+    D.N = function (a, b, c, d, e) {
+        if (a && b) {
+            a = [a, b[C]()][A](":");
+            if (d || e) a = [a, d, e][A](":");
+            d = this.get(ib);
+            d.splice(c ? 0 : d[u], 0, a)
+        }
+    };
+    D.R = function () {
+        this.set(ib, [])
+    };
+    D.U = function (a) {
+        this.a[ja]();
+        var b = this.get(N),
+            c = td(this.a);
+        this.set(N, a);
+        this.a.i();
+        sd(this.a, c);
+        this.set(N, b)
+    };
+    D.ra = function () {
+        return J.referrer
+    };
+    D.m = function () {
+        this.a[ja]()
+    };
+    D.ja = function (a) {
+        a && a != "" && (this.set(zb, a), this.a.f("var"))
+    };
+    var Gd = function (a) {
+            a.get(Wb) !== "trans" && a.b(Ib, 0) >= 500 && a[pa]();
+            if (a.get(Wb) === "event") {
+                var b = (new Date).getTime(),
+                    c = a.b(Jb, 0),
+                    d = a.b(Eb, 0),
+                    c = k[ka](0.2 * ((b - (c != d ? c : c * 1E3)) / 1E3));
+                c > 0 && (a.set(Jb, b), a.set(Q, k.min(10, a.b(Q, 0) + c)));
+                a.b(Q, 0) <= 0 && a[pa]()
+            }
+        },
+        Id = function (a) {
+            a.get(Wb) === "event" && a.set(Q, k.max(0, a.b(Q, 10) - 1))
+        };
+    var Jd = function () {
+            var a = [];
+            this.add = function (b, c, d) {
+                d && (c = F("" + c));
+                a[m](b + "=" + c)
+            };
+            this.toString = function () {
+                return a[A]("&")
+            }
+        },
+        Kd = function (a, b) {
+            (b || a.get(gb) != 2) && a.n(Ib)
+        },
+        Ld = function (a, b) {
+            b.add("utmwv", "5.2.2");
+            b.add("utms", a.get(Ib));
+            b.add("utmn", va());
+            var c = J[x].hostname;
+            E(c) || b.add("utmhn", c, h);
+            c = a.get(eb);
+            c != 100 && b.add("utmsp", c, h)
+        },
+        Nd = function (a, b) {
+            b.add("utmac", a.get(Ia));
+            a.get(Zb) && b.add("utmni", 1);
+            Md(a, b);
+            K.q && b.add("aip", 1);
+            b.add("utmu", Mc.Ea())
+        },
+        Md = function (a, b) {
+            function c(a, b) {
+                b && d[m](a + "=" + b + ";")
+            }
+            var d = [];
+            c("__utma", yc(a));
+            c("__utmz", Ec(a, j));
+            c("__utmv", Bc(a, h));
+            c("__utmx", td(a));
+            b.add("utmcc", d[A]("+"), h)
+        },
+        Od = function (a, b) {
+            a.get(Ta) && (b.add("utmcs", a.get(xb), h), b.add("utmsr", a.get(sb)), b.add("utmsc", a.get(tb)), b.add("utmul", a.get(wb)), b.add("utmje", a.get(ub)), b.add("utmfl", a.get(vb), h))
+        },
+        Pd = function (a, b) {
+            a.get(Wa) && a.get(pb) && b.add("utmdt", a.get(pb), h);
+            b.add("utmhid", a.get(rb));
+            b.add("utmr", Ea(a.get(qb), a.get(N)), h);
+            b.add("utmp", F(a.get(ob), h), h)
+        },
+        Qd = function (a, b) {
+            for (var c = a.get(mb), d = a.get(nb), e = a.get(O) || [], f = 0; f < e[u]; f++) {
+                var l = e[f];
+                l && (c || (c = new Yc), c.e(8, f, l[r]), c.e(9, f, l[la]), l[qa] != 3 && c.e(11, f, "" + l[qa]))
+            }!E(a.get($b)) && !E(a.get(ac), h) && (c || (c = new Yc), c.e(5, 1, a.get($b)), c.e(5, 2, a.get(ac)), e = a.get(bc), e != g && c.e(5, 3, e), e = a.get(cc), e != g && c.k(5, 1, e));
+            c ? b.add("utme", c.ua(d), h) : d && b.add("utme", d.o(), h)
+        },
+        Rd = function (a, b, c) {
+            var d = new Jd;
+            Kd(a, c);
+            Ld(a, d);
+            d.add("utmt", "tran");
+            d.add("utmtid", b.id_, h);
+            d.add("utmtst", b.affiliation_, h);
+            d.add("utmtto", b.total_, h);
+            d.add("utmttx", b.tax_, h);
+            d.add("utmtsp", b.shipping_, h);
+            d.add("utmtci", b.city_, h);
+            d.add("utmtrg", b.state_, h);
+            d.add("utmtco", b.country_, h);
+            !c && Nd(a, d);
+            return d[t]()
+        },
+        Sd = function (a, b, c) {
+            var d = new Jd;
+            Kd(a, c);
+            Ld(a, d);
+            d.add("utmt", "item");
+            d.add("utmtid", b.transId_, h);
+            d.add("utmipc", b.sku_, h);
+            d.add("utmipn", b.name_, h);
+            d.add("utmiva", b.category_, h);
+            d.add("utmipr", b.price_, h);
+            d.add("utmiqt", b.quantity_, h);
+            !c && Nd(a, d);
+            return d[t]()
+        },
+        Td = function (a, b) {
+            var c = a.get(Wb);
+            if (c == "page") c = new Jd, Kd(a, b), Ld(a, c), Qd(a, c), Od(a, c), Pd(a, c), b || Nd(a, c), c = [c[t]()];
+            else if (c == "event") c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "event"), Qd(a, c), Od(a, c), Pd(a, c), !b && Nd(a, c), c = [c[t]()];
+            else if (c == "var") c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "var"), !b && Nd(a, c), c = [c[t]()];
+            else if (c == "trans") for (var c = [], d = a.get(lb), e = 0; e < d[u]; ++e) {
+                c[m](Rd(a, d[e], b));
+                for (var f = d[e].items_, l = 0; l < f[u]; ++l) c[m](Sd(a, f[l], b))
+            } else c == "social" ? b ? c = [] : (c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "social"), c.add("utmsn", a.get(dc), h), c.add("utmsa", a.get(ec), h), c.add("utmsid", a.get(hc), h), Qd(a, c), Od(a, c), Pd(a, c), Nd(a, c), c = [c[t]()]) : c = [];
+            return c
+        },
+        Hd = function (a) {
+            var b, c = a.get(gb),
+                d = a.get(Yb),
+                e = d && d.Aa,
+                f = 0;
+            if (c == 0 || c == 2) {
+                var l = a.get(fb) + "?";
+                b = Td(a, h);
+                for (var o = 0, q = b[u]; o < q; o++) Ga(b[o], e, l, h), f++
+            }
+            if (c == 1 || c == 2) {
+                b = Td(a);
+                o = 0;
+                for (q = b[u]; o < q; o++) try {
+                    Ga(b[o], e), f++
+                } catch (s) {
+                    s && Fa(s[r], g, s.message)
+                }
+            }
+            if (d) d.j = f
+        };
+    var Ud = "https:" == J[x].protocol ? "https://ssl.google-analytics.com"; : "http://www.google-analytics.com";,
+        Vd = function (a) {
+            ga(this, "len");
+            this.message = a + "-8192"
+        },
+        Wd = function (a) {
+            ga(this, "ff2post");
+            this.message = a + "-2036"
+        },
+        Ga = function (a, b, c, d) {
+            b = b || wa;
+            if (d || a[u] <= 2036) Xd(a, b, c);
+            else if (a[u] <= 8192) {
+                if (V[ra].userAgent[p]("Firefox") >= 0 && ![].reduce) throw new Wd(a[u]);
+                Yd(a, b) || Zd(a, b)
+            } else throw new Vd(a[u]);
+        },
+        Xd = function (a, b, c) {
+            var c = c || Ud + "/__utm.gif?",
+                d = new Image(1, 1);
+            d.src = c + a;
+            fa(d, function () {
+                fa(d, i);
+                d.onerror = i;
+                b()
+            });
+            d.onerror = function () {
+                fa(d, i);
+                d.onerror = i;
+                b()
+            }
+        },
+        Yd = function (a, b) {
+            var c, d = Ud + "/p/__utm.gif",
+                e = V.XDomainRequest;
+            if (e) c = new e, c.open("POST", d);
+            else if (e = V.XMLHttpRequest) e = new e, "withCredentials" in e && (c = e, c.open("POST", d, h), c.setRequestHeader("Content-Type", "text/plain"));
+            if (c) return c.onreadystatechange = function () {
+                c.readyState == 4 && (b(), c = i)
+            }, c.send(a), h
+        },
+        Zd = function (a, b) {
+            if (J.body) {
+                a = ba(a);
+                try {
+                    var c = J.createElement('<iframe name="' + a + '"></iframe>')
+                } catch (d) {
+                    c = J.createElement("iframe"), ga(c, a)
+                }
+                c.height = "0";
+                c.width = "0";
+                c.style.display = "none";
+                c.style.visibility = "hidden";
+                var e = J[x],
+                    e = Ud + "/u/post_iframe.html#" + ba(e.protocol + "//" + e[oa] + "/favicon.ico"),
+                    f = function () {
+                        c.src = "";
+                        c.parentNode && c.parentNode.removeChild(c)
+                    };
+                xa(V, "beforeunload", f);
+                var l = j,
+                    o = 0,
+                    q = function () {
+                        if (!l) {
+                            try {
+                                if (o > 9 || c.contentWindow[x][oa] == J[x][oa]) {
+                                    l = h;
+                                    f();
+                                    ya(V, "beforeunload", f);
+                                    b();
+                                    return
+                                }
+                            } catch (a) {}
+                            o++;
+                            da(q, 200)
+                        }
+                    };
+                xa(c, "load", q);
+                J.body.appendChild(c);
+                c.src = e
+            } else Nc(function () {
+                Zd(a, b)
+            }, 100)
+        };
+    var Z = function () {
+            this.q = j;
+            this.D = {};
+            this.F = [];
+            this.wa = 0;
+            this._gasoCPath = this._gasoDomain = g;
+            R(Z[v], "_createTracker", Z[v].l, 55);
+            R(Z[v], "_getTracker", Z[v].ya, 0);
+            R(Z[v], "_getTrackerByName", Z[v].p, 51);
+            R(Z[v], "_getTrackers", Z[v].za, 130);
+            R(Z[v], "_anonymizeIp", Z[v].xa, 16);
+            mc()
+        };
+    D = Z[v];
+    D.ya = function (a, b) {
+        return this.l(a, g, b)
+    };
+    D.l = function (a, b, c) {
+        b && G(23);
+        c && G(67);
+        b == g && (b = "~" + K.wa++);
+        a = new S(b, a, c);
+        K.D[b] = a;
+        K.F[m](a);
+        return a
+    };
+    D.p = function (a) {
+        a = a || "";
+        return K.D[a] || K.l(g, a)
+    };
+    D.za = function () {
+        return K.F[ha](0)
+    };
+    D.xa = function () {
+        this.q = h
+    };
+    var $d = function (a) {
+            if (J.webkitVisibilityState == "prerender") return j;
+            a();
+            return h
+        };
+    var K = new Z;
+    var ae = V._gat;
+    ae && typeof ae._getTracker == "function" ? K = ae : V._gat = K;
+    var Tc = new Y;
+    (function (a) {
+        if (!$d(a)) {
+            G(123);
+            var b = j,
+                c = function () {
+                    !b && $d(a) && (G(124), b = h, ya(J, "webkitvisibilitychange", c))
+                };
+            xa(J, "webkitvisibilitychange", c)
+        }
+    })(function () {
+        var a = V._gaq,
+            b = j;
+        if (a && typeof a[m] == "function" && (b = Object[v][t].call(Object(a)) == "[object Array]", !b)) {
+            Tc = a;
+            return
+        }
+        V._gaq = Tc;
+        b && Tc[m].apply(Tc, a)
+    });
+})();

=== renamed directory 'lib/canonical/launchpad/icing/google-analytics' => 'lib/lp/app/javascript/google-analytics'
=== added file 'lib/lp/app/javascript/google-analytics/google-analytics.js'
--- lib/lp/app/javascript/google-analytics/google-analytics.js	1970-01-01 00:00:00 +0000
+++ lib/lp/app/javascript/google-analytics/google-analytics.js	2012-05-09 15:11:19 +0000
@@ -0,0 +1,1841 @@
+/* Copyright 2012 Canonical Ltd.  This software is licensed under the
+ * GNU Affero General Public License version 3 (see the file LICENSE).
+ *
+ * Launchpad wrapping of the Google Analytics code.
+ * Just including this module will run the ga script and get things working.
+ *
+ * Until the combo loader is released, any changes to this file need to be
+ * updated to the +icing/ga.js file as well.
+ *
+ * @module Y.lp.ga
+ */
+YUI.add('lp.app.googleanalytics', function(Y) {
+    var module = Y.namespace('lp.app.googleanalytics');
+
+    module.run = function (_gaq) {
+
+        // This code is Copyright (c) Google Inc.
+        //
+        // Google Analytics Tracker code.
+        // Downloaded from http://www.google-analytics.com/ga.js
+        // on 2011-12-01.
+        //
+        // Beautified through http://jsbeautifier.org/
+        //
+        // We are serving it as part of Launchpad for security reasons.
+        // Modification from the original: disable the Site Overlay feature
+        // which loads additional JS from Google.
+        // See ga-disable-gaso.diff
+        (function () {
+            var g = void 0,
+                h = true,
+                i = null,
+                j = false,
+                ba = encodeURIComponent,
+                ca = Infinity,
+                da = setTimeout,
+                ea = decodeURIComponent,
+                k = Math;
+
+            function fa(a, b) {
+                return a.onload = b
+            }
+            function ga(a, b) {
+                return a.name = b
+            }
+            var m = "push",
+                ha = "slice",
+                ia = "replace",
+                ja = "load",
+                ka = "floor",
+                n = "charAt",
+                la = "value",
+                p = "indexOf",
+                ma = "match",
+                r = "name",
+                oa = "host",
+                t = "toString",
+                u = "length",
+                v = "prototype",
+                w = "split",
+                pa = "stopPropagation",
+                qa = "scope",
+                x = "location",
+                y = "getString",
+                z = "substring",
+                ra = "navigator",
+                A = "join",
+                C = "toLowerCase",
+                D;
+
+            function sa(a, b) {
+                switch (b) {
+                case 0:
+                    return "" + a;
+                case 1:
+                    return a * 1;
+                case 2:
+                    return !!a;
+                case 3:
+                    return a * 1E3
+                }
+                return a
+            }
+            function E(a, b) {
+                return g == a || "-" == a && !b || "" == a
+            }
+            function ta(a) {
+                if (!a || "" == a) return "";
+                for (; a && " \n\r\t" [p](a[n](0)) > -1;) a = a[z](1);
+                for (; a && " \n\r\t" [p](a[n](a[u] - 1)) > -1;) a = a[z](0, a[u] - 1);
+                return a
+            }
+            function ua(a) {
+                var b = 1,
+                    c = 0,
+                    d;
+                if (!E(a)) {
+                    b = 0;
+                    for (d = a[u] - 1; d >= 0; d--) c = a.charCodeAt(d), b = (b << 6 & 268435455) + c + (c << 14), c = b & 266338304, b = c != 0 ? b ^ c >> 21 : b
+                }
+                return b
+            }
+
+            function va() {
+                return k.round(k.random() * 2147483647)
+            }
+            function wa() {}
+            function F(a, b) {
+                return ba instanceof Function ? b ? encodeURI(a) : ba(a) : (G(68), escape(a))
+            }
+            function H(a) {
+                a = a[w]("+")[A](" ");
+                if (ea instanceof Function) try {
+                    return ea(a)
+                } catch (b) {
+                    G(17)
+                } else G(68);
+                return unescape(a)
+            }
+            var xa = function (a, b, c, d) {
+                    a.addEventListener ? a.addEventListener(b, c, !! d) : a.attachEvent && a.attachEvent("on" + b, c)
+                },
+                ya = function (a, b, c, d) {
+                    a.removeEventListener ? a.removeEventListener(b, c, !! d) : a.detachEvent && a.detachEvent("on" + b, c)
+                };
+
+            function I(a) {
+                return a && a[u] > 0 ? a[0] : ""
+            }
+            function za(a) {
+                var b = a ? a[u] : 0;
+                return b > 0 ? a[b - 1] : ""
+            }
+            var Aa = function () {
+                    this.prefix = "ga.";
+                    this.I = {}
+                };
+            Aa[v].set = function (a, b) {
+                this.I[this.prefix + a] = b
+            };
+            Aa[v].get = function (a) {
+                return this.I[this.prefix + a]
+            };
+            Aa[v].contains = function (a) {
+                return this.get(a) !== g
+            };
+
+            function Ba(a) {
+                a[p]("www.") == 0 && (a = a[z](4));
+                return a[C]()
+            }
+            function Ca(a, b) {
+                var c, d = {
+                    url: a,
+                    protocol: "http",
+                    host: "",
+                    path: "",
+                    c: new Aa,
+                    anchor: ""
+                };
+                if (!a) return d;
+                c = a[p]("://");
+                if (c >= 0) d.protocol = a[z](0, c), a = a[z](c + 3);
+                c = a.search("/|\\?|#");
+                if (c >= 0) d.host = a[z](0, c)[C](), a = a[z](c);
+                else return d.host = a[C](), d;
+                c = a[p]("#");
+                if (c >= 0) d.anchor = a[z](c + 1), a = a[z](0, c);
+                c = a[p]("?");
+                c >= 0 && (Da(d.c, a[z](c + 1)), a = a[z](0, c));
+                d.anchor && b && Da(d.c, d.anchor);
+                a && a[n](0) == "/" && (a = a[z](1));
+                d.path = a;
+                return d
+            }
+
+            function Da(a, b) {
+                function c(b, c) {
+                    a.contains(b) || a.set(b, []);
+                    a.get(b)[m](c)
+                }
+                for (var d = ta(b)[w]("&"), e = 0; e < d[u]; e++) if (d[e]) {
+                    var f = d[e][p]("=");
+                    f < 0 ? c(d[e], "1") : c(d[e][z](0, f), d[e][z](f + 1))
+                }
+            }
+            function Ea(a, b) {
+                if (E(a)) return "-";
+                if ("[" == a[n](0) && "]" == a[n](a[u] - 1)) return "-";
+                var c = J.domain;
+                c += b && b != "/" ? b : "";
+                return a[p](c) == (a[p]("http://";) == 0 ? 7 : a[p]("https://";) == 0 ? 8 : 0) ? "0" : a
+            };
+
+            function Fa(a, b, c) {
+                k.random() * 100 >= 1 || (a = ["utmt=error", "utmerr=" + a, "utmwv=5.2.2", "utmn=" + va(), "utmsp=1"], b && a[m]("api=" + b), c && a[m]("msg=" + F(c[z](0, 100))), K.q && a[m]("aip=1"), Ga(a[A]("&")))
+            };
+            var Ha = 0;
+
+            function L(a) {
+                return (a ? "_" : "") + Ha++
+            }
+            var Ia = L(),
+                Ja = L(),
+                Ka = L(),
+                La = L(),
+                Ma = L(),
+                M = L(),
+                N = L(),
+                Na = L(),
+                Oa = L(),
+                Pa = L(),
+                Qa = L(),
+                Ra = L(),
+                Sa = L(),
+                Ta = L(),
+                Ua = L(),
+                Va = L(),
+                Wa = L(),
+                Xa = L(),
+                Ya = L(),
+                Za = L(),
+                $a = L(),
+                ab = L(),
+                bb = L(),
+                cb = L(),
+                db = L(),
+                eb = L(),
+                fb = L(),
+                gb = L(),
+                hb = L(),
+                ib = L(),
+                jb = L(),
+                kb = L(),
+                lb = L(),
+                mb = L(),
+                nb = L(),
+                O = L(h),
+                ob = L(),
+                pb = L(),
+                qb = L(),
+                rb = L(),
+                sb = L(),
+                tb = L(),
+                ub = L(),
+                vb = L(),
+                wb = L(),
+                xb = L(),
+                P = L(h),
+                yb = L(h),
+                zb = L(h),
+                Bb = L(h),
+                Cb = L(h),
+                Db = L(h),
+                Eb = L(h),
+                Fb = L(h),
+                Gb = L(h),
+                Hb = L(h),
+                Ib = L(h),
+                Q = L(h),
+                Jb = L(h),
+                Kb = L(h),
+                Lb = L(h),
+                Mb = L(h),
+                Nb = L(h),
+                Ob = L(h),
+                Pb = L(h),
+                Qb = L(h),
+                Rb = L(h),
+                Sb = L(h),
+                Tb = L(h),
+                Ub = L(h),
+                Vb = L(h),
+                Wb = L(),
+                Xb = L(),
+                Yb = L();
+            L();
+            var Zb = L(),
+                $b = L(),
+                ac = L(),
+                bc = L(),
+                cc = L(),
+                dc = L(),
+                ec = L(),
+                hc = L(),
+                ic = L(),
+                jc = L();
+            L();
+            var kc = L(),
+                lc = L();
+            var mc = function () {
+                    function a(a, c, d) {
+                        R(S[v], a, c, d)
+                    }
+                    T("_getName", Ka, 58);
+                    T("_getAccount", Ia, 64);
+                    T("_visitCode", P, 54);
+                    T("_getClientInfo", Ta, 53, 1);
+                    T("_getDetectTitle", Wa, 56, 1);
+                    T("_getDetectFlash", Ua, 65, 1);
+                    T("_getLocalGifPath", fb, 57);
+                    T("_getServiceMode", gb, 59);
+                    U("_setClientInfo", Ta, 66, 2);
+                    U("_setAccount", Ia, 3);
+                    U("_setNamespace", Ja, 48);
+                    U("_setAllowLinker", Qa, 11, 2);
+                    U("_setDetectFlash", Ua, 61, 2);
+                    U("_setDetectTitle", Wa, 62, 2);
+                    U("_setLocalGifPath", fb, 46, 0);
+                    U("_setLocalServerMode", gb, 92, g, 0);
+                    U("_setRemoteServerMode", gb, 63, g, 1);
+                    U("_setLocalRemoteServerMode", gb, 47, g, 2);
+                    U("_setSampleRate", eb, 45, 1);
+                    U("_setCampaignTrack", Va, 36, 2);
+                    U("_setAllowAnchor", Ra, 7, 2);
+                    U("_setCampNameKey", Ya, 41);
+                    U("_setCampContentKey", cb, 38);
+                    U("_setCampIdKey", Xa, 39);
+                    U("_setCampMediumKey", ab, 40);
+                    U("_setCampNOKey", db, 42);
+                    U("_setCampSourceKey", $a, 43);
+                    U("_setCampTermKey", bb, 44);
+                    U("_setCampCIdKey", Za, 37);
+                    U("_setCookiePath", N, 9, 0);
+                    U("_setMaxCustomVariables", hb, 0, 1);
+                    U("_setVisitorCookieTimeout", Na, 28, 1);
+                    U("_setSessionCookieTimeout", Oa, 26, 1);
+                    U("_setCampaignCookieTimeout", Pa, 29, 1);
+                    U("_setReferrerOverride", qb, 49);
+                    U("_setSiteSpeedSampleRate", ic, 132);
+                    a("_trackPageview", S[v].na, 1);
+                    a("_trackEvent", S[v].v, 4);
+                    a("_trackPageLoadTime", S[v].ma, 100);
+                    a("_trackSocial", S[v].oa, 104);
+                    a("_trackTrans", S[v].pa, 18);
+                    a("_sendXEvent", S[v].u, 78);
+                    a("_createEventTracker", S[v].V, 74);
+                    a("_getVersion", S[v].$, 60);
+                    a("_setDomainName", S[v].t, 6);
+                    a("_setAllowHash", S[v].ea, 8);
+                    a("_getLinkerUrl", S[v].Z, 52);
+                    a("_link", S[v].link, 101);
+                    a("_linkByPost", S[v].da, 102);
+                    a("_setTrans", S[v].ha, 20);
+                    a("_addTrans", S[v].O, 21);
+                    a("_addItem", S[v].M, 19);
+                    a("_setTransactionDelim", S[v].ia, 82);
+                    a("_setCustomVar", S[v].fa, 10);
+                    a("_deleteCustomVar", S[v].X, 35);
+                    a("_getVisitorCustomVar", S[v].aa, 50);
+                    a("_setXKey", S[v].ka, 83);
+                    a("_setXValue", S[v].la, 84);
+                    a("_getXKey", S[v].ba, 76);
+                    a("_getXValue", S[v].ca, 77);
+                    a("_clearXKey", S[v].S, 72);
+                    a("_clearXValue", S[v].T, 73);
+                    a("_createXObj", S[v].W, 75);
+                    a("_addIgnoredOrganic", S[v].K, 15);
+                    a("_clearIgnoredOrganic", S[v].P, 97);
+                    a("_addIgnoredRef", S[v].L, 31);
+                    a("_clearIgnoredRef", S[v].Q, 32);
+                    a("_addOrganic", S[v].N, 14);
+                    a("_clearOrganic", S[v].R, 70);
+                    a("_cookiePathCopy", S[v].U, 30);
+                    a("_get", S[v].Y, 106);
+                    a("_set", S[v].ga, 107);
+                    a("_addEventListener", S[v].addEventListener, 108);
+                    a("_removeEventListener", S[v].removeEventListener, 109);
+                    a("_initData", S[v].m, 2);
+                    a("_setVar", S[v].ja, 22);
+                    U("_setSessionTimeout", Oa, 27, 3);
+                    U("_setCookieTimeout", Pa, 25, 3);
+                    U("_setCookiePersistence", Na, 24, 1);
+                    a("_setAutoTrackOutbound", wa, 79);
+                    a("_setTrackOutboundSubdomains", wa, 81);
+                    a("_setHrefExamineLimit", wa, 80)
+                },
+                R = function (a, b, c, d) {
+                    a[b] = function () {
+                        try {
+                            return G(d), c.apply(this, arguments)
+                        } catch (a) {
+                            throw Fa("exc", b, a && a[r]), a;
+                        }
+                    }
+                },
+                T = function (a, b, c, d) {
+                    S[v][a] = function () {
+                        try {
+                            return G(c), sa(this.a.get(b), d)
+                        } catch (e) {
+                            throw Fa("exc", a, e && e[r]), e;
+                        }
+                    }
+                },
+                U = function (a, b, c, d, e) {
+                    S[v][a] = function (f) {
+                        try {
+                            G(c), e == g ? this.a.set(b, sa(f, d)) : this.a.set(b, e)
+                        } catch (l) {
+                            throw Fa("exc", a, l && l[r]), l;
+                        }
+                    }
+                },
+                nc = function (a, b) {
+                    return {
+                        type: b,
+                        target: a,
+                        stopPropagation: function () {
+                            throw "aborted";
+                        }
+                    }
+                };
+            var oc = function (a, b) {
+                    return b !== "/" ? j : (a[p]("www.google.") == 0 || a[p](".google.") == 0 || a[p]("google.") == 0) && !(a[p]("google.org") > -1) ? h : j
+                },
+                pc = function (a) {
+                    var b = a.get(Ma),
+                        c = a[y](N, "/");
+                    oc(b, c) && a[pa]()
+                };
+            var uc = function () {
+                    var a = {},
+                        b = {},
+                        c = new qc;
+                    this.g = function (a, b) {
+                        c.add(a, b)
+                    };
+                    var d = new qc;
+                    this.d = function (a, b) {
+                        d.add(a, b)
+                    };
+                    var e = j,
+                        f = j,
+                        l = h;
+                    this.J = function () {
+                        e = h
+                    };
+                    this.f = function (a) {
+                        this[ja]();
+                        this.set(Wb, a, h);
+                        a = new rc(this);
+                        e = j;
+                        d.execute(this);
+                        e = h;
+                        b = {};
+                        this.i();
+                        a.qa()
+                    };
+                    this.load = function () {
+                        e && (e = j, this.sa(), sc(this), f || (f = h, c.execute(this), tc(this), sc(this)), e = h)
+                    };
+                    this.i = function () {
+                        if (e) if (f) e = j, tc(this), e = h;
+                        else this[ja]()
+                    };
+                    this.get = function (c) {
+                        c && c[n](0) == "_" && this[ja]();
+                        return b[c] !== g ? b[c] : a[c]
+                    };
+                    this.set = function (c, d, e) {
+                        c && c[n](0) == "_" && this[ja]();
+                        e ? b[c] = d : a[c] = d;
+                        c && c[n](0) == "_" && this.i()
+                    };
+                    this.n = function (b) {
+                        a[b] = this.b(b, 0) + 1
+                    };
+                    this.b = function (a, b) {
+                        var c = this.get(a);
+                        return c == g || c === "" ? b : c * 1
+                    };
+                    this.getString = function (a, b) {
+                        var c = this.get(a);
+                        return c == g ? b : c + ""
+                    };
+                    this.sa = function () {
+                        if (l) {
+                            var b = this[y](Ma, ""),
+                                c = this[y](N, "/");
+                            oc(b, c) || (a[M] = a[Sa] && b != "" ? ua(b) : 1, l = j)
+                        }
+                    }
+                };
+            uc[v].stopPropagation = function () {
+                throw "aborted";
+            };
+            var rc = function (a) {
+                    var b = this;
+                    this.j = 0;
+                    var c = a.get(Xb);
+                    this.Aa = function () {
+                        b.j > 0 && c && (b.j--, b.j || c())
+                    };
+                    this.qa = function () {
+                        !b.j && c && da(c, 0)
+                    };
+                    a.set(Yb, b, h)
+                };
+
+            function vc(a, b) {
+                for (var b = b || [], c = 0; c < b[u]; c++) {
+                    var d = b[c];
+                    if ("" + a == d || d[p](a + ".") == 0) return d
+                }
+                return "-"
+            }
+            var xc = function (a, b, c) {
+                    c = c ? "" : a[y](M, "1");
+                    b = b[w](".");
+                    if (b[u] !== 6 || wc(b[0], c)) return j;
+                    var c = b[1] * 1,
+                        d = b[2] * 1,
+                        e = b[3] * 1,
+                        f = b[4] * 1,
+                        b = b[5] * 1;
+                    if (!(c >= 0 && d > 0 && e > 0 && f > 0 && b >= 0)) return G(110), j;
+                    a.set(P, c);
+                    a.set(Cb, d);
+                    a.set(Db, e);
+                    a.set(Eb, f);
+                    a.set(Fb, b);
+                    return h
+                },
+                yc = function (a) {
+                    var b = a.get(P),
+                        c = a.get(Cb),
+                        d = a.get(Db),
+                        e = a.get(Eb),
+                        f = a.b(Fb, 1);
+                    b == g ? G(113) : b == NaN && G(114);
+                    b >= 0 && c > 0 && d > 0 && e > 0 && f >= 0 || G(115);
+                    return [a.b(M, 1), b != g ? b : "-", c || "-", d || "-", e || "-", f][A](".")
+                },
+                zc = function (a) {
+                    return [a.b(M, 1), a.b(Ib, 0), a.b(Q, 1), a.b(Jb, 0)][A](".")
+                },
+                Ac = function (a, b, c) {
+                    var c = c ? "" : a[y](M, "1"),
+                        d = b[w](".");
+                    if (d[u] !== 4 || wc(d[0], c)) d = i;
+                    a.set(Ib, d ? d[1] * 1 : 0);
+                    a.set(Q, d ? d[2] * 1 : 10);
+                    a.set(Jb, d ? d[3] * 1 : a.get(La));
+                    return d != i || !wc(b, c)
+                },
+                Bc = function (a, b) {
+                    var c = F(a[y](zb, "")),
+                        d = [],
+                        e = a.get(O);
+                    if (!b && e) {
+                        for (var f = 0; f < e[u]; f++) {
+                            var l = e[f];
+                            l && l[qa] == 1 && d[m](f + "=" + F(l[r]) + "=" + F(l[la]) + "=1")
+                        }
+                        d[u] > 0 && (c += "|" + d[A](","))
+                    }
+                    return c ? a.b(M, 1) + "." + c : i
+                },
+                Cc = function (a, b, c) {
+                    c = c ? "" : a[y](M, "1");
+                    b = b[w](".");
+                    if (b[u] < 2 || wc(b[0], c)) return j;
+                    b = b[ha](1)[A](".")[w]("|");
+                    b[u] > 0 && a.set(zb, H(b[0]));
+                    if (b[u] <= 1) return h;
+                    for (var c = b[1][w](b[1][p](",") == -1 ? "^" : ","), d = 0; d < c[u]; d++) {
+                        var e = c[d][w]("=");
+                        if (e[u] == 4) {
+                            var f = {};
+                            ga(f, H(e[1]));
+                            f.value = H(e[2]);
+                            f.scope = 1;
+                            a.get(O)[e[0]] = f
+                        }
+                    }
+                    b[1][p]("^") >= 0 && G(125);
+                    return h
+                },
+                Ec = function (a, b) {
+                    var c = Dc(a, b);
+                    return c ? [a.b(M, 1), a.b(Kb, 0), a.b(Lb, 1), a.b(Mb, 1), c][A](".") : ""
+                },
+                Dc = function (a) {
+                    function b(b, e) {
+                        if (!E(a.get(b))) {
+                            var f = a[y](b, ""),
+                                f = f[w](" ")[A]("%20"),
+                                f = f[w]("+")[A]("%20");
+                            c[m](e + "=" + f)
+                        }
+                    }
+                    var c = [];
+                    b(Ob, "utmcid");
+                    b(Sb, "utmcsr");
+                    b(Qb, "utmgclid");
+                    b(Rb, "utmdclid");
+                    b(Pb, "utmccn");
+                    b(Tb, "utmcmd");
+                    b(Ub, "utmctr");
+                    b(Vb, "utmcct");
+                    return c[A]("|")
+                },
+                Gc = function (a, b, c) {
+                    c = c ? "" : a[y](M, "1");
+                    b = b[w](".");
+                    if (b[u] < 5 || wc(b[0], c)) return a.set(Kb, g), a.set(Lb, g), a.set(Mb, g), a.set(Ob, g), a.set(Pb, g), a.set(Sb, g), a.set(Tb, g), a.set(Ub, g), a.set(Vb, g), a.set(Qb, g), a.set(Rb, g), j;
+                    a.set(Kb, b[1] * 1);
+                    a.set(Lb, b[2] * 1);
+                    a.set(Mb, b[3] * 1);
+                    Fc(a, b[ha](4)[A]("."));
+                    return h
+                },
+                Fc = function (a, b) {
+                    function c(a) {
+                        return (a = b[ma](a + "=(.*?)(?:\\|utm|$)")) && a[u] == 2 ? a[1] : g
+                    }
+                    function d(b, c) {
+                        c && (c = e ? H(c) : c[w]("%20")[A](" "), a.set(b, c))
+                    }
+                    b[p]("=") == -1 && (b = H(b));
+                    var e = c("utmcvr") == "2";
+                    d(Ob, c("utmcid"));
+                    d(Pb, c("utmccn"));
+                    d(Sb, c("utmcsr"));
+                    d(Tb, c("utmcmd"));
+                    d(Ub, c("utmctr"));
+                    d(Vb, c("utmcct"));
+                    d(Qb, c("utmgclid"));
+                    d(Rb, c("utmdclid"))
+                },
+                wc = function (a, b) {
+                    return b ? a != b : !/^\d+$/.test(a)
+                };
+            var qc = function () {
+                    this.s = []
+                };
+            qc[v].add = function (a, b) {
+                this.s[m]({
+                    name: a,
+                    Da: b
+                })
+            };
+            qc[v].execute = function (a) {
+                try {
+                    for (var b = 0; b < this.s[u]; b++) this.s[b].Da.call(V, a)
+                } catch (c) {}
+            };
+
+            function Hc(a) {
+                a.get(eb) != 100 && a.get(P) % 1E4 >= a.get(eb) * 100 && a[pa]()
+            }
+            function Ic(a) {
+                Jc() && a[pa]()
+            }
+            function Kc(a) {
+                J[x].protocol == "file:" && a[pa]()
+            }
+            function Lc(a) {
+                a.get(pb) || a.set(pb, J.title, h);
+                a.get(ob) || a.set(ob, J[x].pathname + J[x].search, h)
+            };
+            var Mc = new function () {
+                    var a = [];
+                    this.set = function (b) {
+                        a[b] = h
+                    };
+                    this.Ea = function () {
+                        for (var b = [], c = 0; c < a[u]; c++) a[c] && (b[k[ka](c / 6)] ^= 1 << c % 6);
+                        for (c = 0; c < b[u]; c++) b[c] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" [n](b[c] || 0);
+                        return b[A]("") + "~"
+                    }
+                };
+
+            function G(a) {
+                Mc.set(a)
+            };
+            var V = window,
+                J = document,
+                Jc = function () {
+                    var a = V._gaUserPrefs;
+                    return a && a.ioo && a.ioo()
+                },
+                Nc = function (a, b) {
+                    da(a, b)
+                },
+                W = function (a) {
+                    for (var b = [], c = J.cookie[w](";"), a = RegExp("^\\s*" + a + "=\\s*(.*?)\\s*$"), d = 0; d < c[u]; d++) {
+                        var e = c[d][ma](a);
+                        e && b[m](e[1])
+                    }
+                    return b
+                },
+                X = function (a, b, c, d, e) {
+                    var f;
+                    f = Jc() ? j : oc(d, c) ? j : h;
+                    if (f) {
+                        if (b && V[ra].userAgent[p]("Firefox") >= 0) {
+                            b = b[ia](/\n|\r/g, " ");
+                            f = 0;
+                            for (var l = b[u]; f < l; ++f) {
+                                var o = b.charCodeAt(f) & 255;
+                                if (o == 10 || o == 13) b = b[z](0, f) + "?" + b[z](f + 1)
+                            }
+                        }
+                        b && b[u] > 2E3 && (b = b[z](0, 2E3), G(69));
+                        a = a + "=" + b + "; path=" + c + "; ";
+                        e && (a += "expires=" + (new Date((new Date).getTime() + e)).toGMTString() + "; ");
+                        d && (a += "domain=" + d + ";");
+                        J.cookie = a
+                    }
+                };
+            var Oc, Pc, Qc = function () {
+                    if (!Oc) {
+                        var a = {},
+                            b = V[ra],
+                            c = V.screen;
+                        a.H = c ? c.width + "x" + c.height : "-";
+                        a.G = c ? c.colorDepth + "-bit" : "-";
+                        a.language = (b && (b.language || b.browserLanguage) || "-")[C]();
+                        a.javaEnabled = b && b.javaEnabled() ? 1 : 0;
+                        a.characterSet = J.characterSet || J.charset || "-";
+                        Oc = a
+                    }
+                },
+                Rc = function () {
+                    Qc();
+                    for (var a = Oc, b = V[ra], a = b.appName + b.version + a.language + b.platform + b.userAgent + a.javaEnabled + a.H + a.G + (J.cookie ? J.cookie : "") + (J.referrer ? J.referrer : ""), b = a[u], c = V.history[u]; c > 0;) a += c-- ^ b++;
+                    return ua(a)
+                },
+                Sc = function (a) {
+                    Qc();
+                    var b = Oc;
+                    a.set(sb, b.H);
+                    a.set(tb, b.G);
+                    a.set(wb, b.language);
+                    a.set(xb, b.characterSet);
+                    a.set(ub, b.javaEnabled);
+                    if (a.get(Ta) && a.get(Ua)) {
+                        if (!(b = Pc)) {
+                            var c, d, e;
+                            d = "ShockwaveFlash";
+                            if ((b = (b = V[ra]) ? b.plugins : g) && b[u] > 0) for (c = 0; c < b[u] && !e; c++) d = b[c], d[r][p]("Shockwave Flash") > -1 && (e = d.description[w]("Shockwave Flash ")[1]);
+                            else {
+                                d = d + "." + d;
+                                try {
+                                    c = new ActiveXObject(d + ".7"), e = c.GetVariable("$version")
+                                } catch (f) {}
+                                if (!e) try {
+                                    c = new ActiveXObject(d + ".6"), e = "WIN 6,0,21,0", c.AllowScriptAccess = "always", e = c.GetVariable("$version")
+                                } catch (l) {}
+                                if (!e) try {
+                                    c = new ActiveXObject(d), e = c.GetVariable("$version")
+                                } catch (o) {}
+                                e && (e = e[w](" ")[1][w](","), e = e[0] + "." + e[1] + " r" + e[2])
+                            }
+                            b = e ? e : "-"
+                        }
+                        Pc = b;
+                        a.set(vb, Pc)
+                    } else a.set(vb, "-")
+                };
+            var Y = function () {
+                    R(Y[v], "push", Y[v][m], 5);
+                    R(Y[v], "_createAsyncTracker", Y[v].Ba, 33);
+                    R(Y[v], "_getAsyncTracker", Y[v].Ca, 34);
+                    this.r = 0
+                };
+            Y[v].Ba = function (a, b) {
+                return K.l(a, b || "")
+            };
+            Y[v].Ca = function (a) {
+                return K.p(a)
+            };
+            Y[v].push = function (a) {
+                this.r > 0 && G(105);
+                this.r++;
+                for (var b = arguments, c = 0, d = 0; d < b[u]; d++) try {
+                    if (typeof b[d] === "function") b[d]();
+                    else {
+                        var e = "",
+                            f = b[d][0],
+                            l = f.lastIndexOf(".");
+                        l > 0 && (e = f[z](0, l), f = f[z](l + 1));
+                        var o = e == "_gat" ? K : e == "_gaq" ? Tc : K.p(e);
+                        o[f].apply(o, b[d][ha](1))
+                    }
+                } catch (q) {
+                    c++
+                }
+                this.r--;
+                return c
+            };
+            var Yc = function () {
+                    function a(a, b, c, d) {
+                        g == f[a] && (f[a] = {});
+                        g == f[a][b] && (f[a][b] = []);
+                        f[a][b][c] = d
+                    }
+                    function b(a, b, c) {
+                        if (g != f[a] && g != f[a][b]) return f[a][b][c]
+                    }
+                    function c(a, b) {
+                        if (g != f[a] && g != f[a][b]) {
+                            f[a][b] = g;
+                            var c = h,
+                                d;
+                            for (d = 0; d < l[u]; d++) if (g != f[a][l[d]]) {
+                                c = j;
+                                break
+                            }
+                            c && (f[a] = g)
+                        }
+                    }
+                    function d(a) {
+                        var b = "",
+                            c = j,
+                            d, e;
+                        for (d = 0; d < l[u]; d++) if (e = a[l[d]], g != e) {
+                            c && (b += l[d]);
+                            for (var c = [], f = g, $ = g, $ = 0; $ < e[u]; $++) if (g != e[$]) {
+                                f = "";
+                                $ != aa && g == e[$ - 1] && (f += $[t]() + na);
+                                for (var Wc = e[$], Xc = "", Ab = g, fc = g, gc = g, Ab = 0; Ab < Wc[u]; Ab++) fc = Wc[n](Ab), gc = B[fc], Xc += g != gc ? gc : fc;
+                                f += Xc;
+                                c[m](f)
+                            }
+                            b += o + c[A](s) + q;
+                            c = j
+                        } else c = h;
+                        return b
+                    }
+                    var e = this,
+                        f = [],
+                        l = ["k", "v"],
+                        o = "(",
+                        q = ")",
+                        s = "*",
+                        na = "!",
+                        B = {
+                            "'": "'0"
+                        };
+                    B[q] = "'1";
+                    B[s] = "'2";
+                    B[na] = "'3";
+                    var aa = 1;
+                    e.va = function (a) {
+                        return g != f[a]
+                    };
+                    e.o = function () {
+                        for (var a = "", b = 0; b < f[u]; b++) g != f[b] && (a += b[t]() + d(f[b]));
+                        return a
+                    };
+                    e.ua = function (a) {
+                        if (a == g) return e.o();
+                        for (var b = a.o(), c = 0; c < f[u]; c++) g != f[c] && !a.va(c) && (b += c[t]() + d(f[c]));
+                        return b
+                    };
+                    e.e = function (b, c, d) {
+                        if (!Uc(d)) return j;
+                        a(b, "k", c, d);
+                        return h
+                    };
+                    e.k = function (b, c, d) {
+                        if (!Vc(d)) return j;
+                        a(b, "v", c, d[t]());
+                        return h
+                    };
+                    e.getKey = function (a, c) {
+                        return b(a, "k", c)
+                    };
+                    e.C = function (a, c) {
+                        return b(a, "v", c)
+                    };
+                    e.A = function (a) {
+                        c(a, "k")
+                    };
+                    e.B = function (a) {
+                        c(a, "v")
+                    };
+                    R(e, "_setKey", e.e, 89);
+                    R(e, "_setValue", e.k, 90);
+                    R(e, "_getKey", e.getKey, 87);
+                    R(e, "_getValue", e.C, 88);
+                    R(e, "_clearKey", e.A, 85);
+                    R(e, "_clearValue", e.B, 86)
+                };
+
+            function Uc(a) {
+                return typeof a == "string"
+            }
+            function Vc(a) {
+                return typeof a != "number" && (g == Number || !(a instanceof Number)) || k.round(a) != a || a == NaN || a == ca ? j : h
+            };
+            var Zc = function (a) {
+                    var b = V.gaGlobal;
+                    a && !b && (V.gaGlobal = b = {});
+                    return b
+                },
+                $c = function () {
+                    var a = Zc(h).hid;
+                    if (a == i) a = va(), Zc(h).hid = a;
+                    return a
+                },
+                ad = function (a) {
+                    a.set(rb, $c());
+                    var b = Zc();
+                    if (b && b.dh == a.get(M)) {
+                        var c = b.sid;
+                        c && (c == "0" && G(112), a.set(Eb, c), a.get(yb) && a.set(Db, c));
+                        b = b.vid;
+                        a.get(yb) && b && (b = b[w]("."), b[1] * 1 || G(112), a.set(P, b[0] * 1), a.set(Cb, b[1] * 1))
+                    }
+                };
+            var bd, cd = function (a, b, c) {
+                    var d = a[y](Ma, ""),
+                        e = a[y](N, "/"),
+                        a = a.b(Na, 0);
+                    X(b, c, e, d, a)
+                },
+                tc = function (a) {
+                    var b = a[y](Ma, "");
+                    a.b(M, 1);
+                    var c = a[y](N, "/");
+                    X("__utma", yc(a), c, b, a.get(Na));
+                    X("__utmb", zc(a), c, b, a.get(Oa));
+                    X("__utmc", "" + a.b(M, 1), c, b);
+                    var d = Ec(a, h);
+                    d ? X("__utmz", d, c, b, a.get(Pa)) : X("__utmz", "", c, b, -1);
+                    (d = Bc(a, j)) ? X("__utmv", d, c, b, a.get(Na)) : X("__utmv", "", c, b, -1)
+                },
+                sc = function (a) {
+                    var b = a.b(M, 1);
+                    if (!xc(a, vc(b, W("__utma")))) return a.set(Bb, h), j;
+                    var c = !Ac(a, vc(b, W("__utmb")));
+                    a.set(Hb, c);
+                    Gc(a, vc(b, W("__utmz")));
+                    Cc(a, vc(b, W("__utmv")));
+                    bd = !c;
+                    return h
+                },
+                dd = function (a) {
+                    !bd && !(W("__utmb")[u] > 0) && (X("__utmd", "1", a[y](N, "/"), a[y](Ma, ""), 1E4), W("__utmd")[u] == 0 && a[pa]())
+                };
+            var gd = function (a) {
+                    a.get(P) == g ? ed(a) : a.get(Bb) && !a.get(kc) ? ed(a) : a.get(Hb) && fd(a)
+                },
+                hd = function (a) {
+                    a.get(Nb) && !a.get(Gb) && (fd(a), a.set(Lb, a.get(Fb)))
+                },
+                ed = function (a) {
+                    var b = a.get(La);
+                    a.set(yb, h);
+                    a.set(P, va() ^ Rc(a) & 2147483647);
+                    a.set(zb, "");
+                    a.set(Cb, b);
+                    a.set(Db, b);
+                    a.set(Eb, b);
+                    a.set(Fb, 1);
+                    a.set(Gb, h);
+                    a.set(Ib, 0);
+                    a.set(Q, 10);
+                    a.set(Jb, b);
+                    a.set(O, []);
+                    a.set(Bb, j);
+                    a.set(Hb, j)
+                },
+                fd = function (a) {
+                    a.set(Db, a.get(Eb));
+                    a.set(Eb, a.get(La));
+                    a.n(Fb);
+                    a.set(Gb, h);
+                    a.set(Ib, 0);
+                    a.set(Q, 10);
+                    a.set(Jb, a.get(La));
+                    a.set(Hb, j)
+                };
+            var id = "daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:q,lycos:query,ask:q,netscape:query,cnn:query,about:terms,mamma:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,ozu:q,terra:query,rambler:query".split(","),
+                od = function (a) {
+                    if (a.get(Va) && !a.get(kc)) {
+                        for (var b = !E(a.get(Ob)) || !E(a.get(Sb)) || !E(a.get(Qb)) || !E(a.get(Rb)), c = {}, d = 0; d < jd[u]; d++) {
+                            var e = jd[d];
+                            c[e] = a.get(e)
+                        }
+                        d = Ca(J[x].href, a.get(Ra));
+                        if (!(za(d.c.get(a.get(db))) == "1" && b) && (d = kd(a, d) || ld(a), !d && !b && a.get(Gb) && (md(a, g, "(direct)", g, g, "(direct)", "(none)", g, g), d = h), d && (a.set(Nb, nd(a, c)), b = a.get(Sb) == "(direct)" && a.get(Pb) == "(direct)" && a.get(Tb) == "(none)", a.get(Nb) || a.get(Gb) && !b))) a.set(Kb, a.get(La)), a.set(Lb, a.get(Fb)), a.n(Mb)
+                    }
+                },
+                kd = function (a, b) {
+                    function c(c, d) {
+                        var d = d || "-",
+                            e = za(b.c.get(a.get(c)));
+                        return e && e != "-" ? H(e) : d
+                    }
+                    var d = za(b.c.get(a.get(Xa))) || "-",
+                        e = za(b.c.get(a.get($a))) || "-",
+                        f = za(b.c.get(a.get(Za))) || "-",
+                        l = za(b.c.get("dclid")) || "-",
+                        o = c(Ya, "(not set)"),
+                        q = c(ab, "(not set)"),
+                        s = c(bb),
+                        na = c(cb);
+                    if (E(d) && E(f) && E(l) && E(e)) return j;
+                    if (E(s)) {
+                        var B = Ea(a.get(qb), a.get(N)),
+                            B = Ca(B, h);
+                        (B = pd(a, B)) && !E(B[1] && !B[2]) && (s = B[1])
+                    }
+                    md(a, d, e, f, l, o, q, s, na);
+                    return h
+                },
+                ld = function (a) {
+                    var b = Ea(a.get(qb), a.get(N)),
+                        c = Ca(b, h);
+                    if (!(b != g && b != i && b != "" && b != "0" && b != "-" && b[p]("://") >= 0) || c && c[oa][p]("google") > -1 && c.c.contains("q") && c.path == "cse") return j;
+                    if ((b = pd(a, c)) && !b[2]) return md(a, g, b[0], g, g, "(organic)", "organic", b[1], g), h;
+                    else if (b) return j;
+                    if (a.get(Gb)) a: {
+                        for (var b = a.get(kb), d = Ba(c[oa]), e = 0; e < b[u]; ++e) if (d[p](b[e]) > -1) {
+                            a = j;
+                            break a
+                        }
+                        md(a, g, d, g, g, "(referral)", "referral", g, "/" + c.path);
+                        a = h
+                    } else a = j;
+                    return a
+                },
+                pd = function (a, b) {
+                    for (var c = a.get(ib), d = 0; d < c[u]; ++d) {
+                        var e = c[d][w](":");
+                        if (b[oa][p](e[0][C]()) > -1) {
+                            var f = b.c.get(e[1]);
+                            if (f && (f = I(f), !f && b[oa][p]("google.") > -1 && (f = "(not provided)"), !e[3] || b.url[p](e[3]) > -1)) {
+                                a: {
+                                    for (var c = f, d = a.get(jb), c = H(c)[C](), l = 0; l < d[u]; ++l) if (c == d[l]) {
+                                        c = h;
+                                        break a
+                                    }
+                                    c = j
+                                }
+                                return [e[2] || e[0], f, c]
+                            }
+                        }
+                    }
+                    return i
+                },
+                md = function (a, b, c, d, e, f, l, o, q) {
+                    a.set(Ob, b);
+                    a.set(Sb, c);
+                    a.set(Qb, d);
+                    a.set(Rb, e);
+                    a.set(Pb, f);
+                    a.set(Tb, l);
+                    a.set(Ub, o);
+                    a.set(Vb, q)
+                },
+                jd = [Pb, Ob, Qb, Rb, Sb, Tb, Ub, Vb],
+                nd = function (a, b) {
+                    function c(a) {
+                        a = ("" + a)[w]("+")[A]("%20");
+                        return a = a[w](" ")[A]("%20")
+                    }
+                    function d(c) {
+                        var d = "" + (a.get(c) || ""),
+                            c = "" + (b[c] || "");
+                        return d[u] > 0 && d == c
+                    }
+                    if (d(Qb) || d(Rb)) return G(131), j;
+                    for (var e = 0; e < jd[u]; e++) {
+                        var f = jd[e],
+                            l = b[f] || "-",
+                            f = a.get(f) || "-";
+                        if (c(l) != c(f)) return h
+                    }
+                    return j
+                };
+            var rd = function (a) {
+                    qd(a, J[x].href) ? (a.set(kc, h), G(12)) : a.set(kc, j)
+                },
+                qd = function (a, b) {
+                    if (!a.get(Qa)) return j;
+                    var c = Ca(b, a.get(Ra)),
+                        d = I(c.c.get("__utma")),
+                        e = I(c.c.get("__utmb")),
+                        f = I(c.c.get("__utmc")),
+                        l = I(c.c.get("__utmx")),
+                        o = I(c.c.get("__utmz")),
+                        q = I(c.c.get("__utmv")),
+                        c = I(c.c.get("__utmk"));
+                    if (ua("" + d + e + f + l + o + q) != c) {
+                        d = H(d);
+                        e = H(e);
+                        f = H(f);
+                        l = H(l);
+                        a: {
+                            for (var f = d + e + f + l, s = 0; s < 3; s++) {
+                                for (var na = 0; na < 3; na++) {
+                                    if (c == ua(f + o + q)) {
+                                        G(127);
+                                        c = [o, q];
+                                        break a
+                                    }
+                                    var B = o[ia](/ /g, "%20"),
+                                        aa = q[ia](/ /g, "%20");
+                                    if (c == ua(f + B + aa)) {
+                                        G(128);
+                                        c = [B, aa];
+                                        break a
+                                    }
+                                    B = B[ia](/\+/g, "%20");
+                                    aa = aa[ia](/\+/g, "%20");
+                                    if (c == ua(f + B + aa)) {
+                                        G(129);
+                                        c = [B, aa];
+                                        break a
+                                    }
+                                    o = H(o)
+                                }
+                                q = H(q)
+                            }
+                            c = g
+                        }
+                        if (!c) return j;
+                        o = c[0];
+                        q = c[1]
+                    }
+                    if (!xc(a, d, h)) return j;
+                    Ac(a, e, h);
+                    Gc(a, o, h);
+                    Cc(a, q, h);
+                    sd(a, l, h);
+                    return h
+                },
+                ud = function (a, b, c) {
+                    var d;
+                    d = yc(a) || "-";
+                    var e = zc(a) || "-",
+                        f = "" + a.b(M, 1) || "-",
+                        l = td(a) || "-",
+                        o = Ec(a, j) || "-",
+                        a = Bc(a, j) || "-",
+                        q = ua("" + d + e + f + l + o + a),
+                        s = [];
+                    s[m]("__utma=" + d);
+                    s[m]("__utmb=" + e);
+                    s[m]("__utmc=" + f);
+                    s[m]("__utmx=" + l);
+                    s[m]("__utmz=" + o);
+                    s[m]("__utmv=" + a);
+                    s[m]("__utmk=" + q);
+                    d = s[A]("&");
+                    if (!d) return b;
+                    e = b[p]("#");
+                    return c ? e < 0 ? b + "#" + d : b + "&" + d : (c = "", f = b[p]("?"), e > 0 && (c = b[z](e), b = b[z](0, e)), f < 0 ? b + "?" + d + c : b + "&" + d + c)
+                };
+            var vd = "|",
+                xd = function (a, b, c, d, e, f, l, o, q) {
+                    var s = wd(a, b);
+                    s || (s = {}, a.get(lb)[m](s));
+                    s.id_ = b;
+                    s.affiliation_ = c;
+                    s.total_ = d;
+                    s.tax_ = e;
+                    s.shipping_ = f;
+                    s.city_ = l;
+                    s.state_ = o;
+                    s.country_ = q;
+                    s.items_ = s.items_ || [];
+                    return s
+                },
+                yd = function (a, b, c, d, e, f, l) {
+                    var a = wd(a, b) || xd(a, b, "", 0, 0, 0, "", "", ""),
+                        o;
+                    a: {
+                        if (a && a.items_) {
+                            o = a.items_;
+                            for (var q = 0; q < o[u]; q++) if (o[q].sku_ == c) {
+                                o = o[q];
+                                break a
+                            }
+                        }
+                        o = i
+                    }
+                    q = o || {};
+                    q.transId_ = b;
+                    q.sku_ = c;
+                    q.name_ = d;
+                    q.category_ = e;
+                    q.price_ = f;
+                    q.quantity_ = l;
+                    o || a.items_[m](q);
+                    return q
+                },
+                wd = function (a, b) {
+                    for (var c = a.get(lb), d = 0; d < c[u]; d++) if (c[d].id_ == b) return c[d];
+                    return i
+                };
+            var zd, Ad = function (a) {
+                /* Disabled for security.
+                    var f;
+                    var e;
+                    if (!zd) {
+                        var b;
+                        b = J[x].hash;
+                        var c = V[r],
+                            d = /^#?gaso=([^&]*)/;
+                        if (f = (e = (b = b && b[ma](d) || c && c[ma](d)) ? b[1] : I(W("GASO")), b = e) && b[ma](/^(?:\|([-0-9a-z.]{1,40})\|)?([-.\w]{10,1200})$/i), c = f) if (cd(a, "GASO", "" + b), K._gasoDomain = a.get(Ma), K._gasoCPath = a.get(N), b = "https://"; + ((c[1] || "www") + ".google.com") + "/analytics/reporting/overlay_js?gaso=" + c[2] + "&" + va()) a = J.createElement("script"), a.type = "text/javascript", a.async = h, a.src = b, a.id = "_gasojs", fa(a, g), b = J.getElementsByTagName("script")[0], b.parentNode.insertBefore(a, b);
+                        zd = h
+                    }
+                */
+                };
+            var sd = function (a, b, c) {
+                    c && (b = H(b));
+                    c = a.b(M, 1);
+                    b = b[w](".");
+                    !(b[u] < 2) && /^\d+$/.test(b[0]) && (b[0] = "" + c, cd(a, "__utmx", b[A](".")))
+                },
+                td = function (a, b) {
+                    var c = vc(a.get(M), W("__utmx"));
+                    c == "-" && (c = "");
+                    return b ? F(c) : c
+                };
+            var Fd = function (a, b) {
+                    var c = k.min(a.b(ic, 0), 10);
+                    if (a.b(P, 0) % 100 >= c) return j;
+                    c = Bd() || Cd();
+                    if (c == g) return j;
+                    var d = c[0];
+                    if (d == g || d == ca || isNaN(d)) return j;
+                    d > 0 ? Dd(c) ? b(Ed(c)) : b(Ed(c[ha](0, 1))) : xa(V, "load", function () {
+                        Fd(a, b)
+                    }, j);
+                    return h
+                },
+                Dd = function (a) {
+                    for (var b = 1; b < a[u]; b++) if (isNaN(a[b]) || a[b] == ca || a[b] < 0) return j;
+                    return h
+                },
+                Ed = function (a) {
+                    for (var b = new Yc, c = 0; c < a[u]; c++) b.e(14, c + 1, (isNaN(a[c]) || a[c] < 0 ? 0 : a[c] < 5E3 ? k[ka](a[c] / 10) * 10 : a[c] < 45E4 ? k[ka](a[c] / 100) * 100 : 45E4) + ""), b.k(14, c + 1, a[c]);
+                    return b
+                },
+                Bd = function () {
+                    var a = V.performance || V.webkitPerformance;
+                    if (a = a && a.timing) {
+                        var b = a.navigationStart;
+                        if (b == 0) G(133);
+                        else return [a.loadEventStart - b, a.domainLookupEnd - a.domainLookupStart, a.connectEnd - a.connectStart, a.responseStart - a.requestStart, a.responseEnd - a.responseStart, a.fetchStart - b]
+                    }
+                },
+                Cd = function () {
+                    if (V.top == V) {
+                        var a = V.external,
+                            b = a && a.onloadT;
+                        a && !a.isValidLoadTime && (b = g);
+                        b > 2147483648 && (b = g);
+                        b > 0 && a.setPageReadyTime();
+                        return b == g ? g : [b]
+                    }
+                };
+            var S = function (a, b, c) {
+                    function d(a) {
+                        return function (b) {
+                            if ((b = b.get(lc)[a]) && b[u]) for (var c = nc(e, a), d = 0; d < b[u]; d++) b[d].call(e, c)
+                        }
+                    }
+                    var e = this;
+                    this.a = new uc;
+                    this.get = function (a) {
+                        return this.a.get(a)
+                    };
+                    this.set = function (a, b, c) {
+                        this.a.set(a, b, c)
+                    };
+                    this.set(Ia, b || "UA-XXXXX-X");
+                    this.set(Ka, a || "");
+                    this.set(Ja, c || "");
+                    this.set(La, k.round((new Date).getTime() / 1E3));
+                    this.set(N, "/");
+                    this.set(Na, 63072E6);
+                    this.set(Pa, 15768E6);
+                    this.set(Oa, 18E5);
+                    this.set(Qa, j);
+                    this.set(hb, 50);
+                    this.set(Ra, j);
+                    this.set(Sa, h);
+                    this.set(Ta, h);
+                    this.set(Ua, h);
+                    this.set(Va, h);
+                    this.set(Wa, h);
+                    this.set(Ya, "utm_campaign");
+                    this.set(Xa, "utm_id");
+                    this.set(Za, "gclid");
+                    this.set($a, "utm_source");
+                    this.set(ab, "utm_medium");
+                    this.set(bb, "utm_term");
+                    this.set(cb, "utm_content");
+                    this.set(db, "utm_nooverride");
+                    this.set(eb, 100);
+                    this.set(ic, 1);
+                    this.set(jc, j);
+                    this.set(fb, "/__utm.gif");
+                    this.set(gb, 1);
+                    this.set(lb, []);
+                    this.set(O, []);
+                    this.set(ib, id[ha](0));
+                    this.set(jb, []);
+                    this.set(kb, []);
+                    this.t("auto");
+                    this.set(qb, this.ra());
+                    this.set(lc, {
+                        hit: [],
+                        load: []
+                    });
+                    this.a.g("0", rd);
+                    this.a.g("1", gd);
+                    this.a.g("2", od);
+                    this.a.g("3", hd);
+                    this.a.g("4", d("load"));
+                    this.a.g("5", Ad);
+                    this.a.d("A", Ic);
+                    this.a.d("B", Kc);
+                    this.a.d("C", gd);
+                    this.a.d("D", Hc);
+                    this.a.d("E", pc);
+                    this.a.d("F", Gd);
+                    this.a.d("G", dd);
+                    this.a.d("H", Lc);
+                    this.a.d("I", Sc);
+                    this.a.d("J", ad);
+                    this.a.d("K", d("hit"));
+                    this.a.d("L", Hd);
+                    this.a.d("M", Id);
+                    this.get(La) === 0 && G(111);
+                    this.a.J();
+                    this.w = g
+                };
+            D = S[v];
+            D.h = function () {
+                var a = this.get(mb);
+                a || (a = new Yc, this.set(mb, a));
+                return a
+            };
+            D.ta = function (a) {
+                for (var b in a) {
+                    var c = a[b];
+                    a.hasOwnProperty(b) && typeof c != "function" && this.set(b, c, h)
+                }
+            };
+            D.z = function (a) {
+                if (this.get(jc)) return j;
+                var b = this,
+                    c = Fd(this.a, function (c) {
+                        b.set(ob, a, h);
+                        b.u(c)
+                    });
+                this.set(jc, c);
+                return c
+            };
+            D.na = function (a) {
+                a && a != g && (a.constructor + "")[p]("String") > -1 ? (G(13), this.set(ob, a, h)) : typeof a === "object" && a !== i && this.ta(a);
+                this.w = a = this.get(ob);
+                this.a.f("page");
+                this.z(a)
+            };
+            D.v = function (a, b, c, d, e) {
+                if (a == "" || !Uc(a) || b == "" || !Uc(b)) return j;
+                if (c != g && !Uc(c)) return j;
+                if (d != g && !Vc(d)) return j;
+                this.set($b, a, h);
+                this.set(ac, b, h);
+                this.set(bc, c, h);
+                this.set(cc, d, h);
+                this.set(Zb, !! e, h);
+                this.a.f("event");
+                return h
+            };
+            D.oa = function (a, b, c, d) {
+                if (!a || !b) return j;
+                this.set(dc, a, h);
+                this.set(ec, b, h);
+                this.set(hc, c || J[x].href, h);
+                d && this.set(ob, d, h);
+                this.a.f("social");
+                return h
+            };
+            D.ma = function () {
+                this.set(ic, 10);
+                this.z(this.w)
+            };
+            D.pa = function () {
+                this.a.f("trans")
+            };
+            D.u = function (a) {
+                this.set(nb, a, h);
+                this.a.f("event")
+            };
+            D.V = function (a) {
+                this.m();
+                var b = this;
+                return {
+                    _trackEvent: function (c, d, e) {
+                        G(91);
+                        b.v(a, c, d, e)
+                    }
+                }
+            };
+            D.Y = function (a) {
+                return this.get(a)
+            };
+            D.ga = function (a, b) {
+                if (a) if (a != g && (a.constructor + "")[p]("String") > -1) this.set(a, b);
+                else if (typeof a == "object") for (var c in a) a.hasOwnProperty(c) && this.set(c, a[c])
+            };
+            D.addEventListener = function (a, b) {
+                var c = this.get(lc)[a];
+                c && c[m](b)
+            };
+            D.removeEventListener = function (a, b) {
+                for (var c = this.get(lc)[a], d = 0; c && d < c[u]; d++) if (c[d] == b) {
+                    c.splice(d, 1);
+                    break
+                }
+            };
+            D.$ = function () {
+                return "5.2.2"
+            };
+            D.t = function (a) {
+                this.get(Sa);
+                a = a == "auto" ? Ba(J.domain) : !a || a == "-" || a == "none" ? "" : a[C]();
+                this.set(Ma, a)
+            };
+            D.ea = function (a) {
+                this.set(Sa, !! a)
+            };
+            D.Z = function (a, b) {
+                return ud(this.a, a, b)
+            };
+            D.link = function (a, b) {
+                if (this.a.get(Qa) && a) {
+                    var c = ud(this.a, a, b);
+                    J[x].href = c
+                }
+            };
+            D.da = function (a, b) {
+                this.a.get(Qa) && a && a.action && (a.action = ud(this.a, a.action, b))
+            };
+            D.ha = function () {
+                this.m();
+                var a = this.a,
+                    b = J.getElementById ? J.getElementById("utmtrans") : J.utmform && J.utmform.utmtrans ? J.utmform.utmtrans : i;
+                if (b && b[la]) {
+                    a.set(lb, []);
+                    for (var b = b[la][w]("UTM:"), c = 0; c < b[u]; c++) {
+                        b[c] = ta(b[c]);
+                        for (var d = b[c][w](vd), e = 0; e < d[u]; e++) d[e] = ta(d[e]);
+                        "T" == d[0] ? xd(a, d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8]) : "I" == d[0] && yd(a, d[1], d[2], d[3], d[4], d[5], d[6])
+                    }
+                }
+            };
+            D.O = function (a, b, c, d, e, f, l, o) {
+                return xd(this.a, a, b, c, d, e, f, l, o)
+            };
+            D.M = function (a, b, c, d, e, f) {
+                return yd(this.a, a, b, c, d, e, f)
+            };
+            D.ia = function (a) {
+                vd = a || "|"
+            };
+            D.fa = function (a, b, c, d) {
+                var e = this.a;
+                if (a <= 0 || a > e.get(hb)) a = j;
+                else if (!b || !c || F(b)[u] + F(c)[u] > 64) a = j;
+                else {
+                    d != 1 && d != 2 && (d = 3);
+                    var f = {};
+                    ga(f, b);
+                    f.value = c;
+                    f.scope = d;
+                    e.get(O)[a] = f;
+                    a = h
+                }
+                a && this.a.i();
+                return a
+            };
+            D.X = function (a) {
+                this.a.get(O)[a] = g;
+                this.a.i()
+            };
+            D.aa = function (a) {
+                return (a = this.a.get(O)[a]) && a[qa] == 1 ? a[la] : g
+            };
+            D.ka = function (a, b, c) {
+                this.h().e(a, b, c)
+            };
+            D.la = function (a, b, c) {
+                this.h().k(a, b, c)
+            };
+            D.ba = function (a, b) {
+                return this.h().getKey(a, b)
+            };
+            D.ca = function (a, b) {
+                return this.h().C(a, b)
+            };
+            D.S = function (a) {
+                this.h().A(a)
+            };
+            D.T = function (a) {
+                this.h().B(a)
+            };
+            D.W = function () {
+                return new Yc
+            };
+            D.K = function (a) {
+                a && this.get(jb)[m](a[C]())
+            };
+            D.P = function () {
+                this.set(jb, [])
+            };
+            D.L = function (a) {
+                a && this.get(kb)[m](a[C]())
+            };
+            D.Q = function () {
+                this.set(kb, [])
+            };
+            D.N = function (a, b, c, d, e) {
+                if (a && b) {
+                    a = [a, b[C]()][A](":");
+                    if (d || e) a = [a, d, e][A](":");
+                    d = this.get(ib);
+                    d.splice(c ? 0 : d[u], 0, a)
+                }
+            };
+            D.R = function () {
+                this.set(ib, [])
+            };
+            D.U = function (a) {
+                this.a[ja]();
+                var b = this.get(N),
+                    c = td(this.a);
+                this.set(N, a);
+                this.a.i();
+                sd(this.a, c);
+                this.set(N, b)
+            };
+            D.ra = function () {
+                return J.referrer
+            };
+            D.m = function () {
+                this.a[ja]()
+            };
+            D.ja = function (a) {
+                a && a != "" && (this.set(zb, a), this.a.f("var"))
+            };
+            var Gd = function (a) {
+                    a.get(Wb) !== "trans" && a.b(Ib, 0) >= 500 && a[pa]();
+                    if (a.get(Wb) === "event") {
+                        var b = (new Date).getTime(),
+                            c = a.b(Jb, 0),
+                            d = a.b(Eb, 0),
+                            c = k[ka](0.2 * ((b - (c != d ? c : c * 1E3)) / 1E3));
+                        c > 0 && (a.set(Jb, b), a.set(Q, k.min(10, a.b(Q, 0) + c)));
+                        a.b(Q, 0) <= 0 && a[pa]()
+                    }
+                },
+                Id = function (a) {
+                    a.get(Wb) === "event" && a.set(Q, k.max(0, a.b(Q, 10) - 1))
+                };
+            var Jd = function () {
+                    var a = [];
+                    this.add = function (b, c, d) {
+                        d && (c = F("" + c));
+                        a[m](b + "=" + c)
+                    };
+                    this.toString = function () {
+                        return a[A]("&")
+                    }
+                },
+                Kd = function (a, b) {
+                    (b || a.get(gb) != 2) && a.n(Ib)
+                },
+                Ld = function (a, b) {
+                    b.add("utmwv", "5.2.2");
+                    b.add("utms", a.get(Ib));
+                    b.add("utmn", va());
+                    var c = J[x].hostname;
+                    E(c) || b.add("utmhn", c, h);
+                    c = a.get(eb);
+                    c != 100 && b.add("utmsp", c, h)
+                },
+                Nd = function (a, b) {
+                    b.add("utmac", a.get(Ia));
+                    a.get(Zb) && b.add("utmni", 1);
+                    Md(a, b);
+                    K.q && b.add("aip", 1);
+                    b.add("utmu", Mc.Ea())
+                },
+                Md = function (a, b) {
+                    function c(a, b) {
+                        b && d[m](a + "=" + b + ";")
+                    }
+                    var d = [];
+                    c("__utma", yc(a));
+                    c("__utmz", Ec(a, j));
+                    c("__utmv", Bc(a, h));
+                    c("__utmx", td(a));
+                    b.add("utmcc", d[A]("+"), h)
+                },
+                Od = function (a, b) {
+                    a.get(Ta) && (b.add("utmcs", a.get(xb), h), b.add("utmsr", a.get(sb)), b.add("utmsc", a.get(tb)), b.add("utmul", a.get(wb)), b.add("utmje", a.get(ub)), b.add("utmfl", a.get(vb), h))
+                },
+                Pd = function (a, b) {
+                    a.get(Wa) && a.get(pb) && b.add("utmdt", a.get(pb), h);
+                    b.add("utmhid", a.get(rb));
+                    b.add("utmr", Ea(a.get(qb), a.get(N)), h);
+                    b.add("utmp", F(a.get(ob), h), h)
+                },
+                Qd = function (a, b) {
+                    for (var c = a.get(mb), d = a.get(nb), e = a.get(O) || [], f = 0; f < e[u]; f++) {
+                        var l = e[f];
+                        l && (c || (c = new Yc), c.e(8, f, l[r]), c.e(9, f, l[la]), l[qa] != 3 && c.e(11, f, "" + l[qa]))
+                    }!E(a.get($b)) && !E(a.get(ac), h) && (c || (c = new Yc), c.e(5, 1, a.get($b)), c.e(5, 2, a.get(ac)), e = a.get(bc), e != g && c.e(5, 3, e), e = a.get(cc), e != g && c.k(5, 1, e));
+                    c ? b.add("utme", c.ua(d), h) : d && b.add("utme", d.o(), h)
+                },
+                Rd = function (a, b, c) {
+                    var d = new Jd;
+                    Kd(a, c);
+                    Ld(a, d);
+                    d.add("utmt", "tran");
+                    d.add("utmtid", b.id_, h);
+                    d.add("utmtst", b.affiliation_, h);
+                    d.add("utmtto", b.total_, h);
+                    d.add("utmttx", b.tax_, h);
+                    d.add("utmtsp", b.shipping_, h);
+                    d.add("utmtci", b.city_, h);
+                    d.add("utmtrg", b.state_, h);
+                    d.add("utmtco", b.country_, h);
+                    !c && Nd(a, d);
+                    return d[t]()
+                },
+                Sd = function (a, b, c) {
+                    var d = new Jd;
+                    Kd(a, c);
+                    Ld(a, d);
+                    d.add("utmt", "item");
+                    d.add("utmtid", b.transId_, h);
+                    d.add("utmipc", b.sku_, h);
+                    d.add("utmipn", b.name_, h);
+                    d.add("utmiva", b.category_, h);
+                    d.add("utmipr", b.price_, h);
+                    d.add("utmiqt", b.quantity_, h);
+                    !c && Nd(a, d);
+                    return d[t]()
+                },
+                Td = function (a, b) {
+                    var c = a.get(Wb);
+                    if (c == "page") c = new Jd, Kd(a, b), Ld(a, c), Qd(a, c), Od(a, c), Pd(a, c), b || Nd(a, c), c = [c[t]()];
+                    else if (c == "event") c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "event"), Qd(a, c), Od(a, c), Pd(a, c), !b && Nd(a, c), c = [c[t]()];
+                    else if (c == "var") c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "var"), !b && Nd(a, c), c = [c[t]()];
+                    else if (c == "trans") for (var c = [], d = a.get(lb), e = 0; e < d[u]; ++e) {
+                        c[m](Rd(a, d[e], b));
+                        for (var f = d[e].items_, l = 0; l < f[u]; ++l) c[m](Sd(a, f[l], b))
+                    } else c == "social" ? b ? c = [] : (c = new Jd, Kd(a, b), Ld(a, c), c.add("utmt", "social"), c.add("utmsn", a.get(dc), h), c.add("utmsa", a.get(ec), h), c.add("utmsid", a.get(hc), h), Qd(a, c), Od(a, c), Pd(a, c), Nd(a, c), c = [c[t]()]) : c = [];
+                    return c
+                },
+                Hd = function (a) {
+                    var b, c = a.get(gb),
+                        d = a.get(Yb),
+                        e = d && d.Aa,
+                        f = 0;
+                    if (c == 0 || c == 2) {
+                        var l = a.get(fb) + "?";
+                        b = Td(a, h);
+                        for (var o = 0, q = b[u]; o < q; o++) Ga(b[o], e, l, h), f++
+                    }
+                    if (c == 1 || c == 2) {
+                        b = Td(a);
+                        o = 0;
+                        for (q = b[u]; o < q; o++) try {
+                            Ga(b[o], e), f++
+                        } catch (s) {
+                            s && Fa(s[r], g, s.message)
+                        }
+                    }
+                    if (d) d.j = f
+                };
+            var Ud = "https:" == J[x].protocol ? "https://ssl.google-analytics.com"; : "http://www.google-analytics.com";,
+                Vd = function (a) {
+                    ga(this, "len");
+                    this.message = a + "-8192"
+                },
+                Wd = function (a) {
+                    ga(this, "ff2post");
+                    this.message = a + "-2036"
+                },
+                Ga = function (a, b, c, d) {
+                    b = b || wa;
+                    if (d || a[u] <= 2036) Xd(a, b, c);
+                    else if (a[u] <= 8192) {
+                        if (V[ra].userAgent[p]("Firefox") >= 0 && ![].reduce) throw new Wd(a[u]);
+                        Yd(a, b) || Zd(a, b)
+                    } else throw new Vd(a[u]);
+                },
+                Xd = function (a, b, c) {
+                    var c = c || Ud + "/__utm.gif?",
+                        d = new Image(1, 1);
+                    d.src = c + a;
+                    fa(d, function () {
+                        fa(d, i);
+                        d.onerror = i;
+                        b()
+                    });
+                    d.onerror = function () {
+                        fa(d, i);
+                        d.onerror = i;
+                        b()
+                    }
+                },
+                Yd = function (a, b) {
+                    var c, d = Ud + "/p/__utm.gif",
+                        e = V.XDomainRequest;
+                    if (e) c = new e, c.open("POST", d);
+                    else if (e = V.XMLHttpRequest) e = new e, "withCredentials" in e && (c = e, c.open("POST", d, h), c.setRequestHeader("Content-Type", "text/plain"));
+                    if (c) return c.onreadystatechange = function () {
+                        c.readyState == 4 && (b(), c = i)
+                    }, c.send(a), h
+                },
+                Zd = function (a, b) {
+                    if (J.body) {
+                        a = ba(a);
+                        try {
+                            var c = J.createElement('<iframe name="' + a + '"></iframe>')
+                        } catch (d) {
+                            c = J.createElement("iframe"), ga(c, a)
+                        }
+                        c.height = "0";
+                        c.width = "0";
+                        c.style.display = "none";
+                        c.style.visibility = "hidden";
+                        var e = J[x],
+                            e = Ud + "/u/post_iframe.html#" + ba(e.protocol + "//" + e[oa] + "/favicon.ico"),
+                            f = function () {
+                                c.src = "";
+                                c.parentNode && c.parentNode.removeChild(c)
+                            };
+                        xa(V, "beforeunload", f);
+                        var l = j,
+                            o = 0,
+                            q = function () {
+                                if (!l) {
+                                    try {
+                                        if (o > 9 || c.contentWindow[x][oa] == J[x][oa]) {
+                                            l = h;
+                                            f();
+                                            ya(V, "beforeunload", f);
+                                            b();
+                                            return
+                                        }
+                                    } catch (a) {}
+                                    o++;
+                                    da(q, 200)
+                                }
+                            };
+                        xa(c, "load", q);
+                        J.body.appendChild(c);
+                        c.src = e
+                    } else Nc(function () {
+                        Zd(a, b)
+                    }, 100)
+                };
+            var Z = function () {
+                    this.q = j;
+                    this.D = {};
+                    this.F = [];
+                    this.wa = 0;
+                    this._gasoCPath = this._gasoDomain = g;
+                    R(Z[v], "_createTracker", Z[v].l, 55);
+                    R(Z[v], "_getTracker", Z[v].ya, 0);
+                    R(Z[v], "_getTrackerByName", Z[v].p, 51);
+                    R(Z[v], "_getTrackers", Z[v].za, 130);
+                    R(Z[v], "_anonymizeIp", Z[v].xa, 16);
+                    mc()
+                };
+            D = Z[v];
+            D.ya = function (a, b) {
+                return this.l(a, g, b)
+            };
+            D.l = function (a, b, c) {
+                b && G(23);
+                c && G(67);
+                b == g && (b = "~" + K.wa++);
+                a = new S(b, a, c);
+                K.D[b] = a;
+                K.F[m](a);
+                return a
+            };
+            D.p = function (a) {
+                a = a || "";
+                return K.D[a] || K.l(g, a)
+            };
+            D.za = function () {
+                return K.F[ha](0)
+            };
+            D.xa = function () {
+                this.q = h
+            };
+            var $d = function (a) {
+                    if (J.webkitVisibilityState == "prerender") return j;
+                    a();
+                    return h
+                };
+            var K = new Z;
+            var ae = V._gat;
+            ae && typeof ae._getTracker == "function" ? K = ae : V._gat = K;
+            var Tc = new Y;
+            (function (a) {
+                if (!$d(a)) {
+                    G(123);
+                    var b = j,
+                        c = function () {
+                            !b && $d(a) && (G(124), b = h, ya(J, "webkitvisibilitychange", c))
+                        };
+                    xa(J, "webkitvisibilitychange", c)
+                }
+            })(function () {
+                var a = V._gaq,
+                    b = j;
+                if (a && typeof a[m] == "function" && (b = Object[v][t].call(Object(a)) == "[object Array]", !b)) {
+                    Tc = a;
+                    return
+                }
+                V._gaq = Tc;
+                b && Tc[m].apply(Tc, a)
+            });
+        })();
+
+        // end the google analytics code
+
+    };
+
+}, "0.1", {"requires": []});

=== modified file 'lib/lp/app/templates/base-layout-macros.pt'
--- lib/lp/app/templates/base-layout-macros.pt	2012-04-19 20:34:55 +0000
+++ lib/lp/app/templates/base-layout-macros.pt	2012-05-09 15:11:19 +0000
@@ -57,11 +57,20 @@
     wiki for details.)
   </tal:comment>
   <script type="text/javascript">
+    var _gaq = _gaq || [];
     var LP = {
         cache: {},
-        links: {}
+        links: {},
+        gaq: _gaq
     };
   </script>
+  <script type="text/javascript"
+      tal:condition="python: is_lpnet">
+    LP.gaq.push(['_setAccount', 'UA-12833497-1']);
+    LP.gaq.push(['_setDomainName', '.launchpad.net']);
+    LP.gaq.push(['_setAllowHash', false]);
+    LP.gaq.push(['_trackPageview']);
+  </script>
   <tal:js-legacy condition="not: request/features/js.combo_loader.enabled">
     <script type="text/javascript"
           tal:attributes="src string:${icingroot}/build/launchpad.js"></script>
@@ -77,6 +86,15 @@
         }
        ">
     </script>
+    <script type="text/javascript"
+      tal:condition="python: is_lpnet">
+      // the non-combo loaded ga.js script needs to have the _gaq var exposed
+      to the entire window namespace.
+      _gaq = LP.gaq;
+    </script>
+    <script type="text/javascript"
+        tal:condition="python: is_lpnet"
+        tal:attributes="src string:${icingroot}/ga.js"></script>
   </tal:js-legacy>
 
   <script type="text/javascript"
@@ -129,7 +147,6 @@
             }
         }">
    </script>
-
   </tal:js-loader>
   <script type="text/javascript">
       // we need this to create a single YUI instance all events and code
@@ -139,7 +156,6 @@
   </script>
 
 </metal:load-javascript>
-
 <metal:page-javascript define-macro="page-javascript"
   tal:define="
       revno modules/lp.app.versioninfo/revno | string:unknown;
@@ -150,6 +166,7 @@
 
   <metal:load-lavascript use-macro="context/@@+base-layout-macros/load-javascript" />
 
+
     <script id="base-layout-load-scripts" type="text/javascript">
         LPJS.use('base', 'node', 'console', 'event',
             'oop', 'lp', 'lp.app.privacy',
@@ -157,6 +174,7 @@
             'lp.app.inlinehelp', 'lp.app.links', 'lp.app.longpoll',
             'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
             'lp.code.branchmergeproposal.diff', 'lp.comments.hide',
+            'lp.app.googleanalytics',
             function(Y) {
 
             Y.on("domready", function () {
@@ -183,6 +201,12 @@
             Y.on('lp:context:web_link:changed', function(e) {
                   window.location = e.new_value;
             });
+
+            // Setup the google analytics information.
+            // This is safe for dev instances since it doesn't operate without
+            // the settings and also doesn't operate without the right matching
+            // domain setting.
+            Y.lp.app.googleanalytics.run(LP.gaq);
         });
     </script>
     <script id="base-helper-functions" type="text/javascript">

=== modified file 'lib/lp/app/templates/base-layout.pt'
--- lib/lp/app/templates/base-layout.pt	2012-04-12 19:42:35 +0000
+++ lib/lp/app/templates/base-layout.pt	2012-05-09 15:11:19 +0000
@@ -64,18 +64,7 @@
       ${view/macro:pagetype}
       ${view/fmt:public-private-css}
       yui3-skin-sam">
-        <script type="text/javascript"
-          tal:condition="python: is_lpnet">
-          var _gaq = _gaq || [];
-          _gaq.push(['_setAccount', 'UA-12833497-1']);
-          _gaq.push(['_setDomainName', '.launchpad.net']);
-          _gaq.push(['_setAllowHash', false]);
-          _gaq.push(['_trackPageview']);
-        </script>
-        <script type="text/javascript"
-            tal:condition="python: is_lpnet"
-            tal:attributes="src string:${icingroot}/google-analytics/ga.js"></script>
-    <div class="yui-d0">
+<div class="yui-d0">
       <div id="locationbar" class="login-logout">
         <tal:login replace="structure context/@@login_status" />
       </div><!--id="locationbar"-->


Follow ups