/* Replayable replacements for global functions */

/***************************************************************
 * BEGIN STABLE.JS
 **************************************************************/
//! stable.js 0.1.3, https://github.com/Two-Screen/stable
//! © 2012 Stéphan Kochen, Angry Bytes. MIT licensed.
(function() {

// A stable array sort, because `Array#sort()` is not guaranteed stable.
// This is an implementation of merge sort, without recursion.

var stable = function(arr, comp) {
    if (typeof(comp) !== 'function') {
        comp = function(a, b) {
            a = String(a);
            b = String(b);
            if (a < b) return -1;
            if (a > b) return 1;
            return 0;
        };
    }

    var len = arr.length;

    if (len <= 1) return arr;

    // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.
    // Chunks are the size of the left or right hand in merge sort.
    // Stop when the left-hand covers all of the array.
    var oarr = arr;
    for (var chk = 1; chk < len; chk *= 2) {
        arr = pass(arr, comp, chk);
    }
    for (var i = 0; i < len; i++) {
        oarr[i] = arr[i];
    }
    return oarr;
};

// Run a single pass with the given chunk size. Returns a new array.
var pass = function(arr, comp, chk) {
    var len = arr.length;
    // Output, and position.
    var result = new Array(len);
    var i = 0;
    // Step size / double chunk size.
    var dbl = chk * 2;
    // Bounds of the left and right chunks.
    var l, r, e;
    // Iterators over the left and right chunk.
    var li, ri;

    // Iterate over pairs of chunks.
    for (l = 0; l < len; l += dbl) {
        r = l + chk;
        e = r + chk;
        if (r > len) r = len;
        if (e > len) e = len;

        // Iterate both chunks in parallel.
        li = l;
        ri = r;
        while (true) {
            // Compare the chunks.
            if (li < r && ri < e) {
                // This works for a regular `sort()` compatible comparator,
                // but also for a simple comparator like: `a > b`
                if (comp(arr[li], arr[ri]) <= 0) {
                    result[i++] = arr[li++];
                }
                else {
                    result[i++] = arr[ri++];
                }
            }
            // Nothing to compare, just flush what's left.
            else if (li < r) {
                result[i++] = arr[li++];
            }
            else if (ri < e) {
                result[i++] = arr[ri++];
            }
            // Both iterators are at the chunk ends.
            else {
                break;
            }
        }
    }

    return result;
};

var arrsort = function(comp) {
    return stable(this, comp);
};

if (Object.defineProperty) {
    Object.defineProperty(Array.prototype, "sort", {
        configurable: true, writable: true, enumerable: false,
        value: arrsort
    });
} else {
    Array.prototype.sort = arrsort;
}

})();
/***************************************************************
 * END STABLE.JS
 **************************************************************/

/*
 * In a generated replay, this file is partially common, boilerplate code
 * included in every replay, and partially generated replay code. The following
 * header applies to the boilerplate code. A comment indicating "Auto-generated
 * below this comment" marks the separation between these two parts.
 *
 * Copyright (C) 2011, 2012 Purdue University
 * Written by Gregor Richards
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

(function() {
    // global eval alias
    var geval = eval;

    // detect if we're in a browser or not
    var inbrowser = false;
    var inharness = false;
    var finished = false;
    if (typeof window !== "undefined" && "document" in window) {
        inbrowser = true;
        if (window.parent && "JSBNG_handleResult" in window.parent) {
            inharness = true;
        }
    } else if (typeof global !== "undefined") {
        window = global;
        window.top = window;
    } else {
        window = (function() { return this; })();
        window.top = window;
    }

    if ("console" in window) {
        window.JSBNG_Console = window.console;
    }

    var callpath = [];

    // Workaround for bound functions as events
    delete Function.prototype.bind;

    // global state
    var JSBNG_Replay = window.top.JSBNG_Replay = {
        push: function(arr, fun) {
            arr.push(fun);
            return fun;
        },

        path: function(str) {
            verifyPath(str);
        },

        forInKeys: function(of) {
            var keys = [];
            for (var k in of)
                keys.push(k);
            return keys.sort();
        }
    };

    var currentTimeInMS;
    if (inharness) {
        currentTimeInMS = window.parent.currentTimeInMS;
    } else {
        if (window.performance && window.performance.now)
            currentTimeInMS = function() { return window.performance.now() };
        else if (typeof preciseTime !== 'undefined')
            currentTimeInMS = function() { return preciseTime() * 1000; };
        else
            currentTimeInMS = function() { return Date.now(); };
    }

    // the actual replay runner
    function onload() {
        try {
            delete window.onload;
        } catch (ex) {}

        var jr = JSBNG_Replay$;
        var cb = function() {
            var end = currentTimeInMS();
            finished = true;

            var msg = "Time: " + (end - st) + "ms";
    
            if (inharness) {
                window.parent.JSBNG_handleResult({error:false, time:(end - st)});
            } else if (inbrowser) {
                var res = document.createElement("div");
    
                res.style.position = "fixed";
                res.style.left = "1em";
                res.style.top = "1em";
                res.style.width = "35em";
                res.style.height = "5em";
                res.style.padding = "1em";
                res.style.backgroundColor = "white";
                res.style.color = "black";
                res.appendChild(document.createTextNode(msg));
    
                document.body.appendChild(res);
            } else if (typeof console !== "undefined") {
                console.log(msg);
            } else if (typeof print !== "undefined") {
                // hopefully not the browser print() function :)
                print(msg);
            }
        };

        // force it to JIT
        jr(false);

        // then time it
        var st = currentTimeInMS();
        while (jr !== null) {
            jr = jr(true, cb);
        }
    }

    // add a frame at replay time
    function iframe(pageid) {
        var iw;
        if (inbrowser) {
            // represent the iframe as an iframe (of course)
            var iframe = document.createElement("iframe");
            iframe.style.display = "none";
            document.body.appendChild(iframe);
            iw = iframe.contentWindow;
            iw.document.write("<script type=\"text/javascript\">var JSBNG_Replay_geval = eval;</script>");
            iw.document.close();
        } else {
            // no general way, just lie and do horrible things
            var topwin = window;
            (function() {
                var window = {};
                window.window = window;
                window.top = topwin;
                window.JSBNG_Replay_geval = function(str) {
                    eval(str);
                }
                iw = window;
            })();
        }
        return iw;
    }

    // called at the end of the replay stuff
    function finalize() {
        if (inbrowser) {
            setTimeout(onload, 0);
        } else {
            onload();
        }
    }

    // verify this recorded value and this replayed value are close enough
    function verify(rep, rec) {
        if (rec !== rep &&
            (rep === rep || rec === rec) /* NaN test */) {
            // FIXME?
            if (typeof rec === "function" && typeof rep === "function") {
                return true;
            }
            if (typeof rec !== "object" || rec === null ||
                !(("__JSBNG_unknown_" + typeof(rep)) in rec)) {
                return false;
            }
        }
        return true;
    }

    // general message
    var firstMessage = true;
    function replayMessage(msg) {
        if (inbrowser) {
            if (firstMessage)
                document.open();
            firstMessage = false;
            document.write(msg);
        } else {
            console.log(msg);
        }
    }

    // complain when there's an error
    function verificationError(msg) {
        if (finished) return;
        if (inharness) {
            window.parent.JSBNG_handleResult({error:true, msg: msg});
        } else replayMessage(msg);
        throw new Error();
    }

    // to verify a set
    function verifySet(objstr, obj, prop, gvalstr, gval) {
        if (/^on/.test(prop)) {
            // these aren't instrumented compatibly
            return;
        }

        if (!verify(obj[prop], gval)) {
            var bval = obj[prop];
            var msg = "Verification failure! " + objstr + "." + prop + " is not " + gvalstr + ", it's " + bval + "!";
            verificationError(msg);
        }
    }

    // to verify a call or new
    function verifyCall(iscall, func, cthis, cargs) {
        var ok = true;
        var callArgs = func.callArgs[func.inst];
        iscall = iscall ? 1 : 0;
        if (cargs.length !== callArgs.length - 1) {
            ok = false;
        } else {
            if (iscall && !verify(cthis, callArgs[0])) ok = false;
            for (var i = 0; i < cargs.length; i++) {
                if (!verify(cargs[i], callArgs[i+1])) ok = false;
            }
        }
        if (!ok) {
            var msg = "Call verification failure!";
            verificationError(msg);
        }

        return func.returns[func.inst++];
    }

    // to verify the callpath
    function verifyPath(func) {
        var real = callpath.shift();
        if (real !== func) {
            var msg = "Call path verification failure! Expected " + real + ", found " + func;
            verificationError(msg);
        }
    }

    // figure out how to define getters
    var defineGetter;
    if (Object.defineProperty) {
        var odp = Object.defineProperty;
        defineGetter = function(obj, prop, getter, setter) {
            if (typeof setter === "undefined") setter = function(){};
            odp(obj, prop, {"enumerable": true, "configurable": true, "get": getter, "set": setter});
        };
    } else if (Object.prototype.__defineGetter__) {
        var opdg = Object.prototype.__defineGetter__;
        var opds = Object.prototype.__defineSetter__;
        defineGetter = function(obj, prop, getter, setter) {
            if (typeof setter === "undefined") setter = function(){};
            opdg.call(obj, prop, getter);
            opds.call(obj, prop, setter);
        };
    } else {
        defineGetter = function() {
            verificationError("This replay requires getters for correct behavior, and your JS engine appears to be incapable of defining getters. Sorry!");
        };
    }

    var defineRegetter = function(obj, prop, getter, setter) {
        defineGetter(obj, prop, function() {
            return getter.call(this, prop);
        }, function(val) {
            // once it's set by the client, it's claimed
            setter.call(this, prop, val);
            Object.defineProperty(obj, prop, {
                "enumerable": true, "configurable": true, "writable": true,
                "value": val
            });
        });
    }

    // for calling events
    var fpc = Function.prototype.call;

// resist the urge, don't put a })(); here!
/******************************************************************************
 * Auto-generated below this comment
 *****************************************************************************/
var ow637880758 = window;
var f637880758_0;
var o0;
var o1;
var o2;
var f637880758_4;
var f637880758_7;
var f637880758_12;
var o3;
var o4;
var o5;
var f637880758_49;
var f637880758_51;
var o6;
var f637880758_53;
var f637880758_54;
var f637880758_57;
var o7;
var f637880758_59;
var f637880758_60;
var f637880758_61;
var f637880758_62;
var f637880758_70;
var f637880758_157;
var f637880758_420;
var f637880758_470;
var f637880758_472;
var f637880758_473;
var f637880758_474;
var o8;
var f637880758_476;
var f637880758_477;
var o9;
var o10;
var o11;
var f637880758_482;
var o12;
var o13;
var o14;
var f637880758_492;
var f637880758_496;
var f637880758_501;
var f637880758_502;
var f637880758_504;
var f637880758_512;
var f637880758_517;
var f637880758_519;
var f637880758_522;
var f637880758_526;
var f637880758_527;
var f637880758_528;
var f637880758_529;
var f637880758_531;
var f637880758_541;
var f637880758_544;
var f637880758_546;
var f637880758_547;
var f637880758_548;
var f637880758_550;
var f637880758_562;
var f637880758_579;
var f637880758_746;
var f637880758_747;
var fo637880758_1_jQuery18309834662606008351;
var f637880758_2577;
var fo637880758_2581_jQuery18309834662606008351;
var fo637880758_2583_jQuery18309834662606008351;
var fo637880758_2595_offsetWidth;
var o15;
var o16;
var f637880758_2695;
JSBNG_Replay.s19277ddcd28db6dd01a1d67d562dfbbffa3c6a17_4 = [];
// 1
// record generated by JSBench  at 2013-07-10T18:58:52.559Z
// 2
// 3
f637880758_0 = function() { return f637880758_0.returns[f637880758_0.inst++]; };
f637880758_0.returns = [];
f637880758_0.inst = 0;
// 4
ow637880758.JSBNG__Date = f637880758_0;
// 5
o0 = {};
// 6
ow637880758.JSBNG__document = o0;
// 7
o1 = {};
// 8
ow637880758.JSBNG__sessionStorage = o1;
// 9
o2 = {};
// 10
ow637880758.JSBNG__localStorage = o2;
// 11
f637880758_4 = function() { return f637880758_4.returns[f637880758_4.inst++]; };
f637880758_4.returns = [];
f637880758_4.inst = 0;
// 12
ow637880758.JSBNG__getComputedStyle = f637880758_4;
// 17
f637880758_7 = function() { return f637880758_7.returns[f637880758_7.inst++]; };
f637880758_7.returns = [];
f637880758_7.inst = 0;
// 18
ow637880758.JSBNG__addEventListener = f637880758_7;
// 19
ow637880758.JSBNG__top = ow637880758;
// 24
ow637880758.JSBNG__scrollX = 0;
// 25
ow637880758.JSBNG__scrollY = 0;
// 30
f637880758_12 = function() { return f637880758_12.returns[f637880758_12.inst++]; };
f637880758_12.returns = [];
f637880758_12.inst = 0;
// 31
ow637880758.JSBNG__setTimeout = f637880758_12;
// 42
ow637880758.JSBNG__frames = ow637880758;
// 45
ow637880758.JSBNG__self = ow637880758;
// 46
o3 = {};
// 47
ow637880758.JSBNG__navigator = o3;
// 50
o4 = {};
// 51
ow637880758.JSBNG__history = o4;
// 62
ow637880758.JSBNG__closed = false;
// 65
ow637880758.JSBNG__opener = null;
// 66
ow637880758.JSBNG__defaultStatus = "";
// 67
o5 = {};
// 68
ow637880758.JSBNG__location = o5;
// 69
ow637880758.JSBNG__innerWidth = 1050;
// 70
ow637880758.JSBNG__innerHeight = 588;
// 71
ow637880758.JSBNG__outerWidth = 1050;
// 72
ow637880758.JSBNG__outerHeight = 660;
// 73
ow637880758.JSBNG__screenX = 12;
// 74
ow637880758.JSBNG__screenY = 27;
// 75
ow637880758.JSBNG__pageXOffset = 0;
// 76
ow637880758.JSBNG__pageYOffset = 0;
// 101
ow637880758.JSBNG__frameElement = null;
// 118
f637880758_49 = function() { return f637880758_49.returns[f637880758_49.inst++]; };
f637880758_49.returns = [];
f637880758_49.inst = 0;
// 119
ow637880758.JSBNG__webkitIDBTransaction = f637880758_49;
// 122
f637880758_51 = function() { return f637880758_51.returns[f637880758_51.inst++]; };
f637880758_51.returns = [];
f637880758_51.inst = 0;
// 123
ow637880758.JSBNG__webkitIDBIndex = f637880758_51;
// 124
o6 = {};
// 125
ow637880758.JSBNG__webkitIndexedDB = o6;
// 126
ow637880758.JSBNG__screenLeft = 12;
// 127
f637880758_53 = function() { return f637880758_53.returns[f637880758_53.inst++]; };
f637880758_53.returns = [];
f637880758_53.inst = 0;
// 128
ow637880758.JSBNG__webkitIDBFactory = f637880758_53;
// 129
ow637880758.JSBNG__clientInformation = o3;
// 130
f637880758_54 = function() { return f637880758_54.returns[f637880758_54.inst++]; };
f637880758_54.returns = [];
f637880758_54.inst = 0;
// 131
ow637880758.JSBNG__webkitIDBCursor = f637880758_54;
// 132
ow637880758.JSBNG__defaultstatus = "";
// 137
f637880758_57 = function() { return f637880758_57.returns[f637880758_57.inst++]; };
f637880758_57.returns = [];
f637880758_57.inst = 0;
// 138
ow637880758.JSBNG__webkitIDBDatabase = f637880758_57;
// 139
o7 = {};
// 140
ow637880758.JSBNG__console = o7;
// 141
f637880758_59 = function() { return f637880758_59.returns[f637880758_59.inst++]; };
f637880758_59.returns = [];
f637880758_59.inst = 0;
// 142
ow637880758.JSBNG__webkitIDBRequest = f637880758_59;
// 143
f637880758_60 = function() { return f637880758_60.returns[f637880758_60.inst++]; };
f637880758_60.returns = [];
f637880758_60.inst = 0;
// 144
ow637880758.JSBNG__webkitIDBObjectStore = f637880758_60;
// 145
ow637880758.JSBNG__devicePixelRatio = 1;
// 146
f637880758_61 = function() { return f637880758_61.returns[f637880758_61.inst++]; };
f637880758_61.returns = [];
f637880758_61.inst = 0;
// 147
ow637880758.JSBNG__webkitURL = f637880758_61;
// 148
f637880758_62 = function() { return f637880758_62.returns[f637880758_62.inst++]; };
f637880758_62.returns = [];
f637880758_62.inst = 0;
// 149
ow637880758.JSBNG__webkitIDBKeyRange = f637880758_62;
// 150
ow637880758.JSBNG__offscreenBuffering = true;
// 151
ow637880758.JSBNG__screenTop = 27;
// 166
f637880758_70 = function() { return f637880758_70.returns[f637880758_70.inst++]; };
f637880758_70.returns = [];
f637880758_70.inst = 0;
// 167
ow637880758.JSBNG__XMLHttpRequest = f637880758_70;
// 170
ow637880758.JSBNG__URL = f637880758_61;
// 171
ow637880758.JSBNG__name = "";
// 178
ow637880758.JSBNG__status = "";
// 343
f637880758_157 = function() { return f637880758_157.returns[f637880758_157.inst++]; };
f637880758_157.returns = [];
f637880758_157.inst = 0;
// 344
ow637880758.JSBNG__Document = f637880758_157;
// 619
ow637880758.JSBNG__XMLDocument = f637880758_157;
// 840
ow637880758.JSBNG__TEMPORARY = 0;
// 841
ow637880758.JSBNG__PERSISTENT = 1;
// 872
f637880758_420 = function() { return f637880758_420.returns[f637880758_420.inst++]; };
f637880758_420.returns = [];
f637880758_420.inst = 0;
// 873
ow637880758.JSBNG__WebKitMutationObserver = f637880758_420;
// 892
ow637880758.JSBNG__indexedDB = o6;
// undefined
o6 = null;
// 893
o6 = {};
// 894
ow637880758.JSBNG__Intl = o6;
// 895
ow637880758.JSBNG__v8Intl = o6;
// undefined
o6 = null;
// 946
ow637880758.JSBNG__IDBTransaction = f637880758_49;
// 947
ow637880758.JSBNG__IDBRequest = f637880758_59;
// 950
ow637880758.JSBNG__IDBObjectStore = f637880758_60;
// 951
ow637880758.JSBNG__IDBKeyRange = f637880758_62;
// 952
ow637880758.JSBNG__IDBIndex = f637880758_51;
// 953
ow637880758.JSBNG__IDBFactory = f637880758_53;
// 954
ow637880758.JSBNG__IDBDatabase = f637880758_57;
// 957
ow637880758.JSBNG__IDBCursor = f637880758_54;
// 958
ow637880758.JSBNG__MutationObserver = f637880758_420;
// 983
ow637880758.JSBNG__onerror = null;
// 984
f637880758_470 = function() { return f637880758_470.returns[f637880758_470.inst++]; };
f637880758_470.returns = [];
f637880758_470.inst = 0;
// 985
ow637880758.Math.JSBNG__random = f637880758_470;
// 986
// 988
o6 = {};
// 989
o0.documentElement = o6;
// 991
o6.className = "";
// 993
f637880758_472 = function() { return f637880758_472.returns[f637880758_472.inst++]; };
f637880758_472.returns = [];
f637880758_472.inst = 0;
// 994
o6.getAttribute = f637880758_472;
// 995
f637880758_472.returns.push("swift-loading");
// 996
// 998
// 999
// 1000
// 1001
// 1002
f637880758_12.returns.push(1);
// 1004
f637880758_473 = function() { return f637880758_473.returns[f637880758_473.inst++]; };
f637880758_473.returns = [];
f637880758_473.inst = 0;
// 1005
o0.JSBNG__addEventListener = f637880758_473;
// 1007
f637880758_473.returns.push(undefined);
// 1009
f637880758_473.returns.push(undefined);
// 1011
// 1012
o0.nodeType = 9;
// 1013
f637880758_474 = function() { return f637880758_474.returns[f637880758_474.inst++]; };
f637880758_474.returns = [];
f637880758_474.inst = 0;
// 1014
o0.createElement = f637880758_474;
// 1015
o8 = {};
// 1016
f637880758_474.returns.push(o8);
// 1017
f637880758_476 = function() { return f637880758_476.returns[f637880758_476.inst++]; };
f637880758_476.returns = [];
f637880758_476.inst = 0;
// 1018
o8.setAttribute = f637880758_476;
// 1019
f637880758_476.returns.push(undefined);
// 1020
// 1021
f637880758_477 = function() { return f637880758_477.returns[f637880758_477.inst++]; };
f637880758_477.returns = [];
f637880758_477.inst = 0;
// 1022
o8.getElementsByTagName = f637880758_477;
// 1023
o9 = {};
// 1024
f637880758_477.returns.push(o9);
// 1026
o10 = {};
// 1027
f637880758_477.returns.push(o10);
// 1028
o11 = {};
// 1029
o10["0"] = o11;
// undefined
o10 = null;
// 1030
o9.length = 4;
// undefined
o9 = null;
// 1032
o9 = {};
// 1033
f637880758_474.returns.push(o9);
// 1034
f637880758_482 = function() { return f637880758_482.returns[f637880758_482.inst++]; };
f637880758_482.returns = [];
f637880758_482.inst = 0;
// 1035
o9.appendChild = f637880758_482;
// 1037
o10 = {};
// 1038
f637880758_474.returns.push(o10);
// 1039
f637880758_482.returns.push(o10);
// 1041
o12 = {};
// 1042
f637880758_477.returns.push(o12);
// 1043
o13 = {};
// 1044
o12["0"] = o13;
// undefined
o12 = null;
// 1045
o12 = {};
// 1046
o11.style = o12;
// 1047
// 1048
o14 = {};
// 1049
o8.firstChild = o14;
// 1050
o14.nodeType = 3;
// undefined
o14 = null;
// 1052
o14 = {};
// 1053
f637880758_477.returns.push(o14);
// 1054
o14.length = 0;
// undefined
o14 = null;
// 1056
o14 = {};
// 1057
f637880758_477.returns.push(o14);
// 1058
o14.length = 1;
// undefined
o14 = null;
// 1059
o11.getAttribute = f637880758_472;
// undefined
o11 = null;
// 1060
f637880758_472.returns.push("top: 1px; float: left; opacity: 0.5;");
// 1062
f637880758_472.returns.push("/a");
// 1064
o12.opacity = "0.5";
// 1066
o12.cssFloat = "left";
// undefined
o12 = null;
// 1067
o13.value = "on";
// 1068
o10.selected = true;
// 1069
o8.className = "";
// 1071
o11 = {};
// 1072
f637880758_474.returns.push(o11);
// 1073
o11.enctype = "application/x-www-form-urlencoded";
// undefined
o11 = null;
// 1075
o11 = {};
// 1076
f637880758_474.returns.push(o11);
// 1077
f637880758_492 = function() { return f637880758_492.returns[f637880758_492.inst++]; };
f637880758_492.returns = [];
f637880758_492.inst = 0;
// 1078
o11.cloneNode = f637880758_492;
// undefined
o11 = null;
// 1079
o11 = {};
// 1080
f637880758_492.returns.push(o11);
// 1081
o11.outerHTML = "<nav></nav>";
// undefined
o11 = null;
// 1082
o0.compatMode = "CSS1Compat";
// 1083
// 1084
o13.cloneNode = f637880758_492;
// undefined
o13 = null;
// 1085
o11 = {};
// 1086
f637880758_492.returns.push(o11);
// 1087
o11.checked = true;
// undefined
o11 = null;
// 1088
// undefined
o9 = null;
// 1089
o10.disabled = false;
// undefined
o10 = null;
// 1090
// 1091
o8.JSBNG__addEventListener = f637880758_473;
// 1093
o9 = {};
// 1094
f637880758_474.returns.push(o9);
// 1095
// 1096
o9.setAttribute = f637880758_476;
// 1097
f637880758_476.returns.push(undefined);
// 1099
f637880758_476.returns.push(undefined);
// 1101
f637880758_476.returns.push(undefined);
// 1102
o8.appendChild = f637880758_482;
// 1103
f637880758_482.returns.push(o9);
// 1104
f637880758_496 = function() { return f637880758_496.returns[f637880758_496.inst++]; };
f637880758_496.returns = [];
f637880758_496.inst = 0;
// 1105
o0.createDocumentFragment = f637880758_496;
// 1106
o10 = {};
// 1107
f637880758_496.returns.push(o10);
// 1108
o10.appendChild = f637880758_482;
// 1109
o8.lastChild = o9;
// 1110
f637880758_482.returns.push(o9);
// 1111
o10.cloneNode = f637880758_492;
// 1112
o11 = {};
// 1113
f637880758_492.returns.push(o11);
// 1114
o11.cloneNode = f637880758_492;
// undefined
o11 = null;
// 1115
o11 = {};
// 1116
f637880758_492.returns.push(o11);
// 1117
o12 = {};
// 1118
o11.lastChild = o12;
// undefined
o11 = null;
// 1119
o12.checked = true;
// undefined
o12 = null;
// 1120
o9.checked = true;
// 1121
f637880758_501 = function() { return f637880758_501.returns[f637880758_501.inst++]; };
f637880758_501.returns = [];
f637880758_501.inst = 0;
// 1122
o10.removeChild = f637880758_501;
// undefined
o10 = null;
// 1123
f637880758_501.returns.push(o9);
// undefined
o9 = null;
// 1125
f637880758_482.returns.push(o8);
// 1126
o8.JSBNG__attachEvent = void 0;
// 1127
o0.readyState = "interactive";
// 1130
f637880758_473.returns.push(undefined);
// 1131
f637880758_7.returns.push(undefined);
// 1133
f637880758_501.returns.push(o8);
// undefined
o8 = null;
// 1134
f637880758_470.returns.push(0.9834662606008351);
// 1135
f637880758_502 = function() { return f637880758_502.returns[f637880758_502.inst++]; };
f637880758_502.returns = [];
f637880758_502.inst = 0;
// 1136
o0.JSBNG__removeEventListener = f637880758_502;
// 1137
f637880758_470.returns.push(0.6948561759199947);
// 1140
o8 = {};
// 1141
f637880758_474.returns.push(o8);
// 1142
o8.appendChild = f637880758_482;
// 1143
f637880758_504 = function() { return f637880758_504.returns[f637880758_504.inst++]; };
f637880758_504.returns = [];
f637880758_504.inst = 0;
// 1144
o0.createComment = f637880758_504;
// 1145
o9 = {};
// 1146
f637880758_504.returns.push(o9);
// 1147
f637880758_482.returns.push(o9);
// undefined
o9 = null;
// 1148
o8.getElementsByTagName = f637880758_477;
// undefined
o8 = null;
// 1149
o8 = {};
// 1150
f637880758_477.returns.push(o8);
// 1151
o8.length = 0;
// undefined
o8 = null;
// 1153
o8 = {};
// 1154
f637880758_474.returns.push(o8);
// 1155
// 1156
o9 = {};
// 1157
o8.firstChild = o9;
// undefined
o8 = null;
// 1159
o9.getAttribute = f637880758_472;
// undefined
o9 = null;
// 1162
f637880758_472.returns.push("#");
// 1164
o8 = {};
// 1165
f637880758_474.returns.push(o8);
// 1166
// 1167
o9 = {};
// 1168
o8.lastChild = o9;
// undefined
o8 = null;
// 1169
o9.getAttribute = f637880758_472;
// undefined
o9 = null;
// 1170
f637880758_472.returns.push(null);
// 1172
o8 = {};
// 1173
f637880758_474.returns.push(o8);
// 1174
// 1175
f637880758_512 = function() { return f637880758_512.returns[f637880758_512.inst++]; };
f637880758_512.returns = [];
f637880758_512.inst = 0;
// 1176
o8.getElementsByClassName = f637880758_512;
// 1178
o9 = {};
// 1179
f637880758_512.returns.push(o9);
// 1180
o9.length = 1;
// undefined
o9 = null;
// 1181
o9 = {};
// 1182
o8.lastChild = o9;
// undefined
o8 = null;
// 1183
// undefined
o9 = null;
// 1185
o8 = {};
// 1186
f637880758_512.returns.push(o8);
// 1187
o8.length = 2;
// undefined
o8 = null;
// 1189
o8 = {};
// 1190
f637880758_474.returns.push(o8);
// 1191
// 1192
// 1193
f637880758_517 = function() { return f637880758_517.returns[f637880758_517.inst++]; };
f637880758_517.returns = [];
f637880758_517.inst = 0;
// 1194
o6.insertBefore = f637880758_517;
// 1195
o9 = {};
// 1196
o6.firstChild = o9;
// 1197
f637880758_517.returns.push(o8);
// 1198
f637880758_519 = function() { return f637880758_519.returns[f637880758_519.inst++]; };
f637880758_519.returns = [];
f637880758_519.inst = 0;
// 1199
o0.getElementsByName = f637880758_519;
// 1201
o10 = {};
// 1202
f637880758_519.returns.push(o10);
// 1203
o10.length = 2;
// undefined
o10 = null;
// 1205
o10 = {};
// 1206
f637880758_519.returns.push(o10);
// 1207
o10.length = 0;
// undefined
o10 = null;
// 1208
f637880758_522 = function() { return f637880758_522.returns[f637880758_522.inst++]; };
f637880758_522.returns = [];
f637880758_522.inst = 0;
// 1209
o0.getElementById = f637880758_522;
// 1210
f637880758_522.returns.push(null);
// 1211
o6.removeChild = f637880758_501;
// 1212
f637880758_501.returns.push(o8);
// undefined
o8 = null;
// 1213
o8 = {};
// 1214
o6.childNodes = o8;
// 1215
o8.length = 3;
// 1216
o8["0"] = o9;
// 1217
o10 = {};
// 1218
o8["1"] = o10;
// undefined
o10 = null;
// 1219
o10 = {};
// 1220
o8["2"] = o10;
// undefined
o8 = null;
// 1221
f637880758_526 = function() { return f637880758_526.returns[f637880758_526.inst++]; };
f637880758_526.returns = [];
f637880758_526.inst = 0;
// 1222
o6.contains = f637880758_526;
// 1223
f637880758_527 = function() { return f637880758_527.returns[f637880758_527.inst++]; };
f637880758_527.returns = [];
f637880758_527.inst = 0;
// 1224
o6.compareDocumentPosition = f637880758_527;
// 1225
f637880758_528 = function() { return f637880758_528.returns[f637880758_528.inst++]; };
f637880758_528.returns = [];
f637880758_528.inst = 0;
// 1226
o0.querySelectorAll = f637880758_528;
// 1227
o6.matchesSelector = void 0;
// 1228
o6.mozMatchesSelector = void 0;
// 1229
f637880758_529 = function() { return f637880758_529.returns[f637880758_529.inst++]; };
f637880758_529.returns = [];
f637880758_529.inst = 0;
// 1230
o6.webkitMatchesSelector = f637880758_529;
// 1232
o8 = {};
// 1233
f637880758_474.returns.push(o8);
// 1234
// 1235
f637880758_531 = function() { return f637880758_531.returns[f637880758_531.inst++]; };
f637880758_531.returns = [];
f637880758_531.inst = 0;
// 1236
o8.querySelectorAll = f637880758_531;
// undefined
o8 = null;
// 1237
o8 = {};
// 1238
f637880758_531.returns.push(o8);
// 1239
o8.length = 1;
// undefined
o8 = null;
// 1241
o8 = {};
// 1242
f637880758_531.returns.push(o8);
// 1243
o8.length = 1;
// undefined
o8 = null;
// 1245
o8 = {};
// 1246
f637880758_474.returns.push(o8);
// 1247
// 1248
o8.querySelectorAll = f637880758_531;
// 1249
o11 = {};
// 1250
f637880758_531.returns.push(o11);
// 1251
o11.length = 0;
// undefined
o11 = null;
// 1252
// undefined
o8 = null;
// 1254
o8 = {};
// 1255
f637880758_531.returns.push(o8);
// 1256
o8.length = 1;
// undefined
o8 = null;
// 1258
o8 = {};
// 1259
f637880758_474.returns.push(o8);
// undefined
o8 = null;
// 1260
f637880758_529.returns.push(true);
// 1262
o8 = {};
// 1263
f637880758_496.returns.push(o8);
// 1264
o8.createElement = void 0;
// 1265
o8.appendChild = f637880758_482;
// undefined
o8 = null;
// 1267
o8 = {};
// 1268
f637880758_474.returns.push(o8);
// 1269
f637880758_482.returns.push(o8);
// undefined
o8 = null;
// 1270
o3.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36";
// 1271
o5.href = "https://twitter.com/search?q=%23javascript";
// 1272
o8 = {};
// 1273
f637880758_0.returns.push(o8);
// 1274
f637880758_541 = function() { return f637880758_541.returns[f637880758_541.inst++]; };
f637880758_541.returns = [];
f637880758_541.inst = 0;
// 1275
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1276
f637880758_541.returns.push(1373482781376);
// 1277
o8 = {};
// 1278
f637880758_70.returns.push(o8);
// undefined
o8 = null;
// 1279
o8 = {};
// 1280
f637880758_0.prototype = o8;
// 1281
f637880758_544 = function() { return f637880758_544.returns[f637880758_544.inst++]; };
f637880758_544.returns = [];
f637880758_544.inst = 0;
// 1282
o8.toISOString = f637880758_544;
// 1283
o11 = {};
// 1284
f637880758_0.returns.push(o11);
// 1285
o11.toISOString = f637880758_544;
// undefined
o11 = null;
// 1286
f637880758_544.returns.push("-000001-01-01T00:00:00.000Z");
// 1287
f637880758_546 = function() { return f637880758_546.returns[f637880758_546.inst++]; };
f637880758_546.returns = [];
f637880758_546.inst = 0;
// 1288
f637880758_0.now = f637880758_546;
// 1290
f637880758_547 = function() { return f637880758_547.returns[f637880758_547.inst++]; };
f637880758_547.returns = [];
f637880758_547.inst = 0;
// 1291
o8.toJSON = f637880758_547;
// undefined
o8 = null;
// 1292
f637880758_548 = function() { return f637880758_548.returns[f637880758_548.inst++]; };
f637880758_548.returns = [];
f637880758_548.inst = 0;
// 1293
f637880758_0.parse = f637880758_548;
// 1295
f637880758_548.returns.push(8640000000000000);
// 1297
o8 = {};
// 1298
f637880758_474.returns.push(o8);
// undefined
o8 = null;
// 1299
ow637880758.JSBNG__attachEvent = undefined;
// 1300
f637880758_550 = function() { return f637880758_550.returns[f637880758_550.inst++]; };
f637880758_550.returns = [];
f637880758_550.inst = 0;
// 1301
o0.getElementsByTagName = f637880758_550;
// 1302
o8 = {};
// 1303
f637880758_550.returns.push(o8);
// 1305
o11 = {};
// 1306
f637880758_474.returns.push(o11);
// 1307
o12 = {};
// 1308
o8["0"] = o12;
// 1309
o12.src = "http://jsbngssl.twitter.com/JSBENCH_NG_RECORD_OBJECTS.js";
// 1310
o13 = {};
// 1311
o8["1"] = o13;
// 1312
o13.src = "http://jsbngssl.twitter.com/JSBENCH_NG_RECORD.js";
// undefined
o13 = null;
// 1313
o13 = {};
// 1314
o8["2"] = o13;
// 1315
o13.src = "";
// undefined
o13 = null;
// 1316
o13 = {};
// 1317
o8["3"] = o13;
// 1318
o13.src = "";
// undefined
o13 = null;
// 1319
o13 = {};
// 1320
o8["4"] = o13;
// 1321
o13.src = "";
// undefined
o13 = null;
// 1322
o13 = {};
// 1323
o8["5"] = o13;
// 1324
o13.src = "";
// undefined
o13 = null;
// 1325
o13 = {};
// 1326
o8["6"] = o13;
// 1327
o13.src = "http://jsbngssl.abs.twimg.com/c/swift/en/init.fc6418142bd015a47a0c8c1f3f5b7acd225021e8.js";
// undefined
o13 = null;
// 1328
o8["7"] = void 0;
// undefined
o8 = null;
// 1330
o8 = {};
// 1331
f637880758_522.returns.push(o8);
// 1332
o8.parentNode = o10;
// 1333
o8.id = "swift-module-path";
// 1334
o8.type = "hidden";
// 1335
o8.nodeName = "INPUT";
// 1336
o8.value = "http://jsbngssl.abs.twimg.com/c/swift/en";
// undefined
o8 = null;
// 1338
o0.ownerDocument = null;
// 1340
o6.nodeName = "HTML";
// 1344
o8 = {};
// 1345
f637880758_528.returns.push(o8);
// 1346
o8["0"] = void 0;
// undefined
o8 = null;
// 1351
f637880758_562 = function() { return f637880758_562.returns[f637880758_562.inst++]; };
f637880758_562.returns = [];
f637880758_562.inst = 0;
// 1352
o0.getElementsByClassName = f637880758_562;
// 1354
o8 = {};
// 1355
f637880758_562.returns.push(o8);
// 1356
o8["0"] = void 0;
// undefined
o8 = null;
// 1357
o8 = {};
// 1358
f637880758_0.returns.push(o8);
// 1359
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1360
f637880758_541.returns.push(1373482781400);
// 1361
o8 = {};
// 1362
f637880758_0.returns.push(o8);
// 1363
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1364
f637880758_541.returns.push(1373482781400);
// 1365
o8 = {};
// 1366
f637880758_0.returns.push(o8);
// 1367
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1368
f637880758_541.returns.push(1373482781401);
// 1369
o8 = {};
// 1370
f637880758_0.returns.push(o8);
// 1371
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1372
f637880758_541.returns.push(1373482781401);
// 1373
o8 = {};
// 1374
f637880758_0.returns.push(o8);
// 1375
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1376
f637880758_541.returns.push(1373482781401);
// 1377
o8 = {};
// 1378
f637880758_0.returns.push(o8);
// 1379
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1380
f637880758_541.returns.push(1373482781402);
// 1381
o8 = {};
// 1382
f637880758_0.returns.push(o8);
// 1383
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1384
f637880758_541.returns.push(1373482781402);
// 1385
o8 = {};
// 1386
f637880758_0.returns.push(o8);
// 1387
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1388
f637880758_541.returns.push(1373482781402);
// 1389
o8 = {};
// 1390
f637880758_0.returns.push(o8);
// 1391
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1392
f637880758_541.returns.push(1373482781402);
// 1393
o8 = {};
// 1394
f637880758_0.returns.push(o8);
// 1395
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1396
f637880758_541.returns.push(1373482781403);
// 1397
o8 = {};
// 1398
f637880758_0.returns.push(o8);
// 1399
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1400
f637880758_541.returns.push(1373482781403);
// 1401
o8 = {};
// 1402
f637880758_0.returns.push(o8);
// 1403
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1404
f637880758_541.returns.push(1373482781404);
// 1405
o8 = {};
// 1406
f637880758_0.returns.push(o8);
// 1407
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1408
f637880758_541.returns.push(1373482781404);
// 1409
o8 = {};
// 1410
f637880758_0.returns.push(o8);
// 1411
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1412
f637880758_541.returns.push(1373482781405);
// 1413
o8 = {};
// 1414
f637880758_0.returns.push(o8);
// 1415
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1416
f637880758_541.returns.push(1373482781405);
// 1417
f637880758_579 = function() { return f637880758_579.returns[f637880758_579.inst++]; };
f637880758_579.returns = [];
f637880758_579.inst = 0;
// 1418
o2.getItem = f637880758_579;
// 1419
f637880758_579.returns.push(null);
// 1421
f637880758_579.returns.push(null);
// 1422
o8 = {};
// 1423
f637880758_0.returns.push(o8);
// 1424
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1425
f637880758_541.returns.push(1373482781406);
// 1426
o8 = {};
// 1427
f637880758_0.returns.push(o8);
// 1428
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1429
f637880758_541.returns.push(1373482781406);
// 1430
o8 = {};
// 1431
f637880758_0.returns.push(o8);
// 1432
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1433
f637880758_541.returns.push(1373482781406);
// 1434
o8 = {};
// 1435
f637880758_0.returns.push(o8);
// 1436
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1437
f637880758_541.returns.push(1373482781407);
// 1438
o8 = {};
// 1439
f637880758_0.returns.push(o8);
// 1440
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1441
f637880758_541.returns.push(1373482781407);
// 1442
o8 = {};
// 1443
f637880758_0.returns.push(o8);
// 1444
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1445
f637880758_541.returns.push(1373482781407);
// 1451
o8 = {};
// 1452
f637880758_550.returns.push(o8);
// 1453
o8["0"] = o6;
// 1454
o8["1"] = void 0;
// undefined
o8 = null;
// 1455
o6.nodeType = 1;
// 1463
o8 = {};
// 1464
f637880758_528.returns.push(o8);
// 1465
o13 = {};
// 1466
o8["0"] = o13;
// 1467
o8["1"] = void 0;
// undefined
o8 = null;
// 1468
o13.nodeType = 1;
// 1469
o13.type = "hidden";
// 1470
o13.nodeName = "INPUT";
// 1471
o13.value = "app/pages/search/search";
// undefined
o13 = null;
// 1472
o8 = {};
// 1473
f637880758_0.returns.push(o8);
// 1474
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1475
f637880758_541.returns.push(1373482781413);
// 1476
o8 = {};
// 1477
f637880758_0.returns.push(o8);
// 1478
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1479
f637880758_541.returns.push(1373482781429);
// 1480
o11.cloneNode = f637880758_492;
// undefined
o11 = null;
// 1481
o8 = {};
// 1482
f637880758_492.returns.push(o8);
// 1483
// 1484
// 1485
// 1486
// 1487
// 1488
// 1489
// 1491
o12.parentNode = o9;
// undefined
o12 = null;
// 1492
o9.insertBefore = f637880758_517;
// undefined
o9 = null;
// 1494
f637880758_517.returns.push(o8);
// 1496
o9 = {};
// 1497
ow637880758.JSBNG__event = o9;
// 1498
o9.type = "load";
// undefined
o9 = null;
// 1499
// undefined
o8 = null;
// 1500
o8 = {};
// 1501
f637880758_0.returns.push(o8);
// 1502
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1503
f637880758_541.returns.push(1373482791039);
// 1504
o8 = {};
// 1505
f637880758_0.returns.push(o8);
// 1506
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1507
f637880758_541.returns.push(1373482791041);
// 1508
o8 = {};
// 1509
f637880758_0.returns.push(o8);
// 1510
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1511
f637880758_541.returns.push(1373482791075);
// 1512
o8 = {};
// 1513
f637880758_0.returns.push(o8);
// 1514
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1515
f637880758_541.returns.push(1373482791076);
// 1516
o8 = {};
// 1517
f637880758_0.returns.push(o8);
// 1518
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1519
f637880758_541.returns.push(1373482791077);
// 1520
o8 = {};
// 1521
f637880758_0.returns.push(o8);
// 1522
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 1523
f637880758_541.returns.push(1373482791084);
// 1525
o8 = {};
// 1526
f637880758_492.returns.push(o8);
// 1527
// 1528
// 1529
// 1530
// 1531
// 1532
// 1533
// 1538
f637880758_517.returns.push(o8);
// 1539
o9 = {};
// 1540
f637880758_0.returns.push(o9);
// 1541
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1542
f637880758_541.returns.push(1373482791085);
// 1543
o9 = {};
// 1544
f637880758_0.returns.push(o9);
// 1545
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1546
f637880758_541.returns.push(1373482791086);
// 1547
o9 = {};
// 1548
f637880758_0.returns.push(o9);
// 1549
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1550
f637880758_541.returns.push(1373482791086);
// 1551
o9 = {};
// 1552
f637880758_0.returns.push(o9);
// 1553
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1554
f637880758_541.returns.push(1373482791087);
// 1555
o9 = {};
// 1556
f637880758_0.returns.push(o9);
// 1557
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1558
f637880758_541.returns.push(1373482791087);
// 1559
o9 = {};
// 1560
f637880758_0.returns.push(o9);
// 1561
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1562
f637880758_541.returns.push(1373482791088);
// 1563
o9 = {};
// 1564
f637880758_0.returns.push(o9);
// 1565
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1566
f637880758_541.returns.push(1373482791088);
// 1567
o9 = {};
// 1568
f637880758_0.returns.push(o9);
// 1569
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1570
f637880758_541.returns.push(1373482791089);
// 1571
o9 = {};
// 1572
f637880758_0.returns.push(o9);
// 1573
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1574
f637880758_541.returns.push(1373482791089);
// 1575
o9 = {};
// 1576
f637880758_0.returns.push(o9);
// 1577
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1578
f637880758_541.returns.push(1373482791090);
// 1579
o9 = {};
// 1580
f637880758_0.returns.push(o9);
// 1581
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1582
f637880758_541.returns.push(1373482791090);
// 1583
o9 = {};
// 1584
f637880758_0.returns.push(o9);
// 1585
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1586
f637880758_541.returns.push(1373482791090);
// 1587
o9 = {};
// 1588
f637880758_0.returns.push(o9);
// 1589
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1590
f637880758_541.returns.push(1373482791091);
// 1591
o9 = {};
// 1592
f637880758_0.returns.push(o9);
// 1593
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1594
f637880758_541.returns.push(1373482791091);
// 1595
o9 = {};
// 1596
f637880758_0.returns.push(o9);
// 1597
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1598
f637880758_541.returns.push(1373482791091);
// 1599
o9 = {};
// 1600
f637880758_0.returns.push(o9);
// 1601
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1602
f637880758_541.returns.push(1373482791092);
// 1603
o9 = {};
// 1604
f637880758_0.returns.push(o9);
// 1605
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1606
f637880758_541.returns.push(1373482791099);
// 1607
o9 = {};
// 1608
f637880758_0.returns.push(o9);
// 1609
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1610
f637880758_541.returns.push(1373482791100);
// 1611
o9 = {};
// 1612
f637880758_0.returns.push(o9);
// 1613
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1614
f637880758_541.returns.push(1373482791100);
// 1615
o9 = {};
// 1616
f637880758_0.returns.push(o9);
// 1617
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1618
f637880758_541.returns.push(1373482791101);
// 1619
o9 = {};
// 1620
f637880758_0.returns.push(o9);
// 1621
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1622
f637880758_541.returns.push(1373482791101);
// 1623
o9 = {};
// 1624
f637880758_0.returns.push(o9);
// 1625
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1626
f637880758_541.returns.push(1373482791101);
// 1627
o9 = {};
// 1628
f637880758_0.returns.push(o9);
// 1629
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1630
f637880758_541.returns.push(1373482791101);
// 1631
o9 = {};
// 1632
f637880758_0.returns.push(o9);
// 1633
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1634
f637880758_541.returns.push(1373482791102);
// 1635
o9 = {};
// 1636
f637880758_0.returns.push(o9);
// 1637
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1638
f637880758_541.returns.push(1373482791102);
// 1639
o9 = {};
// 1640
f637880758_0.returns.push(o9);
// 1641
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1642
f637880758_541.returns.push(1373482791102);
// 1643
o9 = {};
// 1644
f637880758_0.returns.push(o9);
// 1645
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1646
f637880758_541.returns.push(1373482791102);
// 1647
o9 = {};
// 1648
f637880758_0.returns.push(o9);
// 1649
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1650
f637880758_541.returns.push(1373482791102);
// 1651
o9 = {};
// 1652
f637880758_0.returns.push(o9);
// 1653
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1654
f637880758_541.returns.push(1373482791102);
// 1655
o9 = {};
// 1656
f637880758_0.returns.push(o9);
// 1657
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1658
f637880758_541.returns.push(1373482791103);
// 1659
o9 = {};
// 1660
f637880758_0.returns.push(o9);
// 1661
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1662
f637880758_541.returns.push(1373482791103);
// 1663
o9 = {};
// 1664
f637880758_0.returns.push(o9);
// 1665
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1666
f637880758_541.returns.push(1373482791103);
// 1667
o9 = {};
// 1668
f637880758_0.returns.push(o9);
// 1669
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1670
f637880758_541.returns.push(1373482791103);
// 1671
o9 = {};
// 1672
f637880758_0.returns.push(o9);
// 1673
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1674
f637880758_541.returns.push(1373482791105);
// 1675
o9 = {};
// 1676
f637880758_0.returns.push(o9);
// 1677
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1678
f637880758_541.returns.push(1373482791105);
// 1679
o9 = {};
// 1680
f637880758_0.returns.push(o9);
// 1681
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1682
f637880758_541.returns.push(1373482791105);
// 1683
o9 = {};
// 1684
f637880758_0.returns.push(o9);
// 1685
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1686
f637880758_541.returns.push(1373482791105);
// 1687
o9 = {};
// 1688
f637880758_0.returns.push(o9);
// 1689
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1690
f637880758_541.returns.push(1373482791105);
// 1691
o9 = {};
// 1692
f637880758_0.returns.push(o9);
// 1693
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1694
f637880758_541.returns.push(1373482791105);
// 1695
o9 = {};
// 1696
f637880758_0.returns.push(o9);
// 1697
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1698
f637880758_541.returns.push(1373482791106);
// 1699
o9 = {};
// 1700
f637880758_0.returns.push(o9);
// 1701
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1702
f637880758_541.returns.push(1373482791106);
// 1703
o9 = {};
// 1704
f637880758_0.returns.push(o9);
// 1705
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1706
f637880758_541.returns.push(1373482791106);
// 1707
o9 = {};
// 1708
f637880758_0.returns.push(o9);
// 1709
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1710
f637880758_541.returns.push(1373482791106);
// 1711
o9 = {};
// 1712
f637880758_0.returns.push(o9);
// 1713
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1714
f637880758_541.returns.push(1373482791110);
// 1715
o9 = {};
// 1716
f637880758_0.returns.push(o9);
// 1717
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1718
f637880758_541.returns.push(1373482791110);
// 1719
o9 = {};
// 1720
f637880758_0.returns.push(o9);
// 1721
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1722
f637880758_541.returns.push(1373482791111);
// 1723
o9 = {};
// 1724
f637880758_0.returns.push(o9);
// 1725
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1726
f637880758_541.returns.push(1373482791111);
// 1727
o9 = {};
// 1728
f637880758_0.returns.push(o9);
// 1729
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1730
f637880758_541.returns.push(1373482791111);
// 1731
o9 = {};
// 1732
f637880758_0.returns.push(o9);
// 1733
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1734
f637880758_541.returns.push(1373482791111);
// 1735
o9 = {};
// 1736
f637880758_0.returns.push(o9);
// 1737
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1738
f637880758_541.returns.push(1373482791112);
// 1739
o9 = {};
// 1740
f637880758_0.returns.push(o9);
// 1741
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1742
f637880758_541.returns.push(1373482791112);
// 1743
o9 = {};
// 1744
f637880758_0.returns.push(o9);
// 1745
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1746
f637880758_541.returns.push(1373482791112);
// 1747
o9 = {};
// 1748
f637880758_0.returns.push(o9);
// 1749
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1750
f637880758_541.returns.push(1373482791113);
// 1751
o9 = {};
// 1752
f637880758_0.returns.push(o9);
// 1753
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1754
f637880758_541.returns.push(1373482791118);
// 1755
o9 = {};
// 1756
f637880758_0.returns.push(o9);
// 1757
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1758
f637880758_541.returns.push(1373482791118);
// 1759
o9 = {};
// 1760
f637880758_0.returns.push(o9);
// 1761
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1762
f637880758_541.returns.push(1373482791120);
// 1763
o9 = {};
// 1764
f637880758_0.returns.push(o9);
// 1765
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1766
f637880758_541.returns.push(1373482791121);
// 1767
o9 = {};
// 1768
f637880758_0.returns.push(o9);
// 1769
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1770
f637880758_541.returns.push(1373482791121);
// 1771
o9 = {};
// 1772
f637880758_0.returns.push(o9);
// 1773
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1774
f637880758_541.returns.push(1373482791128);
// 1775
o9 = {};
// 1776
f637880758_0.returns.push(o9);
// 1777
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1778
f637880758_541.returns.push(1373482791128);
// 1779
o9 = {};
// 1780
f637880758_0.returns.push(o9);
// 1781
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1782
f637880758_541.returns.push(1373482791129);
// 1783
o9 = {};
// 1784
f637880758_0.returns.push(o9);
// 1785
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1786
f637880758_541.returns.push(1373482791129);
// 1787
o9 = {};
// 1788
f637880758_0.returns.push(o9);
// 1789
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1790
f637880758_541.returns.push(1373482791129);
// 1791
o9 = {};
// 1792
f637880758_0.returns.push(o9);
// 1793
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1794
f637880758_541.returns.push(1373482791129);
// 1795
o9 = {};
// 1796
f637880758_0.returns.push(o9);
// 1797
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1798
f637880758_541.returns.push(1373482791131);
// 1799
o9 = {};
// 1800
f637880758_0.returns.push(o9);
// 1801
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1802
f637880758_541.returns.push(1373482791131);
// 1803
o9 = {};
// 1804
f637880758_0.returns.push(o9);
// 1805
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1806
f637880758_541.returns.push(1373482791131);
// 1807
o9 = {};
// 1808
f637880758_0.returns.push(o9);
// 1809
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1810
f637880758_541.returns.push(1373482791131);
// 1811
o9 = {};
// 1812
f637880758_0.returns.push(o9);
// 1813
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1814
f637880758_541.returns.push(1373482791131);
// 1815
o9 = {};
// 1816
f637880758_0.returns.push(o9);
// 1817
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1818
f637880758_541.returns.push(1373482791131);
// 1819
o9 = {};
// 1820
f637880758_0.returns.push(o9);
// 1821
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1822
f637880758_541.returns.push(1373482791135);
// 1823
o9 = {};
// 1824
f637880758_0.returns.push(o9);
// 1825
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1826
f637880758_541.returns.push(1373482791135);
// 1827
o9 = {};
// 1828
f637880758_0.returns.push(o9);
// 1829
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1830
f637880758_541.returns.push(1373482791135);
// 1831
o9 = {};
// 1832
f637880758_0.returns.push(o9);
// 1833
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1834
f637880758_541.returns.push(1373482791136);
// 1835
o9 = {};
// 1836
f637880758_0.returns.push(o9);
// 1837
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1838
f637880758_541.returns.push(1373482791136);
// 1839
o9 = {};
// 1840
f637880758_0.returns.push(o9);
// 1841
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1842
f637880758_541.returns.push(1373482791136);
// 1843
o9 = {};
// 1844
f637880758_0.returns.push(o9);
// 1845
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1846
f637880758_541.returns.push(1373482791136);
// 1847
o9 = {};
// 1848
f637880758_0.returns.push(o9);
// 1849
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1850
f637880758_541.returns.push(1373482791136);
// 1851
o9 = {};
// 1852
f637880758_0.returns.push(o9);
// 1853
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1854
f637880758_541.returns.push(1373482791137);
// 1855
o9 = {};
// 1856
f637880758_0.returns.push(o9);
// 1857
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1858
f637880758_541.returns.push(1373482791137);
// 1859
o9 = {};
// 1860
f637880758_0.returns.push(o9);
// 1861
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1862
f637880758_541.returns.push(1373482791139);
// 1863
o9 = {};
// 1864
f637880758_0.returns.push(o9);
// 1865
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1866
f637880758_541.returns.push(1373482791140);
// 1867
o9 = {};
// 1868
f637880758_0.returns.push(o9);
// 1869
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1870
f637880758_541.returns.push(1373482791140);
// 1871
o9 = {};
// 1872
f637880758_0.returns.push(o9);
// 1873
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1874
f637880758_541.returns.push(1373482791141);
// 1875
o9 = {};
// 1876
f637880758_0.returns.push(o9);
// 1877
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1878
f637880758_541.returns.push(1373482791141);
// 1879
o9 = {};
// 1880
f637880758_0.returns.push(o9);
// 1881
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1882
f637880758_541.returns.push(1373482791142);
// 1883
o9 = {};
// 1884
f637880758_0.returns.push(o9);
// 1885
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1886
f637880758_541.returns.push(1373482791142);
// 1887
o9 = {};
// 1888
f637880758_0.returns.push(o9);
// 1889
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1890
f637880758_541.returns.push(1373482791142);
// 1891
o9 = {};
// 1892
f637880758_0.returns.push(o9);
// 1893
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1894
f637880758_541.returns.push(1373482791142);
// 1895
o9 = {};
// 1896
f637880758_0.returns.push(o9);
// 1897
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1898
f637880758_541.returns.push(1373482791144);
// 1899
o9 = {};
// 1900
f637880758_0.returns.push(o9);
// 1901
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1902
f637880758_541.returns.push(1373482791144);
// 1903
o9 = {};
// 1904
f637880758_0.returns.push(o9);
// 1905
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1906
f637880758_541.returns.push(1373482791144);
// 1907
o9 = {};
// 1908
f637880758_0.returns.push(o9);
// 1909
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1910
f637880758_541.returns.push(1373482791145);
// 1911
o9 = {};
// 1912
f637880758_0.returns.push(o9);
// 1913
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1914
f637880758_541.returns.push(1373482791145);
// 1915
o9 = {};
// 1916
f637880758_0.returns.push(o9);
// 1917
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1918
f637880758_541.returns.push(1373482791145);
// 1919
o9 = {};
// 1920
f637880758_0.returns.push(o9);
// 1921
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1922
f637880758_541.returns.push(1373482791147);
// 1923
o9 = {};
// 1924
f637880758_0.returns.push(o9);
// 1925
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1926
f637880758_541.returns.push(1373482791147);
// 1927
o9 = {};
// 1928
f637880758_0.returns.push(o9);
// 1929
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1930
f637880758_541.returns.push(1373482791151);
// 1931
o9 = {};
// 1932
f637880758_0.returns.push(o9);
// 1933
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1934
f637880758_541.returns.push(1373482791151);
// 1935
o9 = {};
// 1936
f637880758_0.returns.push(o9);
// 1937
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1938
f637880758_541.returns.push(1373482791151);
// 1939
o9 = {};
// 1940
f637880758_0.returns.push(o9);
// 1941
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1942
f637880758_541.returns.push(1373482791152);
// 1943
o9 = {};
// 1944
f637880758_0.returns.push(o9);
// 1945
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1946
f637880758_541.returns.push(1373482791153);
// 1947
o9 = {};
// 1948
f637880758_0.returns.push(o9);
// 1949
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1950
f637880758_541.returns.push(1373482791153);
// 1951
o9 = {};
// 1952
f637880758_0.returns.push(o9);
// 1953
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1954
f637880758_541.returns.push(1373482791153);
// 1955
o9 = {};
// 1956
f637880758_0.returns.push(o9);
// 1957
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1958
f637880758_541.returns.push(1373482791154);
// 1959
o9 = {};
// 1960
f637880758_0.returns.push(o9);
// 1961
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1962
f637880758_541.returns.push(1373482791154);
// 1963
o9 = {};
// 1964
f637880758_0.returns.push(o9);
// 1965
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1966
f637880758_541.returns.push(1373482791155);
// 1967
o9 = {};
// 1968
f637880758_0.returns.push(o9);
// 1969
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1970
f637880758_541.returns.push(1373482791155);
// 1971
o9 = {};
// 1972
f637880758_0.returns.push(o9);
// 1973
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1974
f637880758_541.returns.push(1373482791156);
// 1975
o9 = {};
// 1976
f637880758_0.returns.push(o9);
// 1977
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1978
f637880758_541.returns.push(1373482791156);
// 1979
o9 = {};
// 1980
f637880758_0.returns.push(o9);
// 1981
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1982
f637880758_541.returns.push(1373482791157);
// 1983
o9 = {};
// 1984
f637880758_0.returns.push(o9);
// 1985
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1986
f637880758_541.returns.push(1373482791157);
// 1987
o9 = {};
// 1988
f637880758_0.returns.push(o9);
// 1989
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1990
f637880758_541.returns.push(1373482791157);
// 1991
o9 = {};
// 1992
f637880758_0.returns.push(o9);
// 1993
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1994
f637880758_541.returns.push(1373482791158);
// 1995
o9 = {};
// 1996
f637880758_0.returns.push(o9);
// 1997
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 1998
f637880758_541.returns.push(1373482791158);
// 1999
o9 = {};
// 2000
f637880758_0.returns.push(o9);
// 2001
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2002
f637880758_541.returns.push(1373482791158);
// 2003
o9 = {};
// 2004
f637880758_0.returns.push(o9);
// 2005
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2006
f637880758_541.returns.push(1373482791158);
// 2007
o9 = {};
// 2008
f637880758_0.returns.push(o9);
// 2009
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2010
f637880758_541.returns.push(1373482791158);
// 2011
o9 = {};
// 2012
f637880758_0.returns.push(o9);
// 2013
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2014
f637880758_541.returns.push(1373482791159);
// 2015
o9 = {};
// 2016
f637880758_0.returns.push(o9);
// 2017
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2018
f637880758_541.returns.push(1373482791159);
// 2019
o9 = {};
// 2020
f637880758_0.returns.push(o9);
// 2021
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2022
f637880758_541.returns.push(1373482791159);
// 2023
o9 = {};
// 2024
f637880758_0.returns.push(o9);
// 2025
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2026
f637880758_541.returns.push(1373482791159);
// 2027
o9 = {};
// 2028
f637880758_0.returns.push(o9);
// 2029
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2030
f637880758_541.returns.push(1373482791160);
// 2031
o9 = {};
// 2032
f637880758_0.returns.push(o9);
// 2033
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2034
f637880758_541.returns.push(1373482791160);
// 2035
o9 = {};
// 2036
f637880758_0.returns.push(o9);
// 2037
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2038
f637880758_541.returns.push(1373482791164);
// 2039
o9 = {};
// 2040
f637880758_0.returns.push(o9);
// 2041
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2042
f637880758_541.returns.push(1373482791166);
// 2043
o9 = {};
// 2044
f637880758_0.returns.push(o9);
// 2045
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2046
f637880758_541.returns.push(1373482791167);
// 2047
o9 = {};
// 2048
f637880758_0.returns.push(o9);
// 2049
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2050
f637880758_541.returns.push(1373482791167);
// 2051
o9 = {};
// 2052
f637880758_0.returns.push(o9);
// 2053
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2054
f637880758_541.returns.push(1373482791167);
// 2055
o9 = {};
// 2056
f637880758_0.returns.push(o9);
// 2057
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2058
f637880758_541.returns.push(1373482791168);
// 2059
o9 = {};
// 2060
f637880758_0.returns.push(o9);
// 2061
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2062
f637880758_541.returns.push(1373482791168);
// 2063
o9 = {};
// 2064
f637880758_0.returns.push(o9);
// 2065
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2066
f637880758_541.returns.push(1373482791168);
// 2067
o9 = {};
// 2068
f637880758_0.returns.push(o9);
// 2069
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2070
f637880758_541.returns.push(1373482791168);
// 2071
o9 = {};
// 2072
f637880758_0.returns.push(o9);
// 2073
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2074
f637880758_541.returns.push(1373482791168);
// 2075
o9 = {};
// 2076
f637880758_0.returns.push(o9);
// 2077
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2078
f637880758_541.returns.push(1373482791169);
// 2079
o9 = {};
// 2080
f637880758_0.returns.push(o9);
// 2081
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2082
f637880758_541.returns.push(1373482791169);
// 2083
o9 = {};
// 2084
f637880758_0.returns.push(o9);
// 2085
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2086
f637880758_541.returns.push(1373482791169);
// 2087
o9 = {};
// 2088
f637880758_0.returns.push(o9);
// 2089
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2090
f637880758_541.returns.push(1373482791169);
// 2091
o9 = {};
// 2092
f637880758_0.returns.push(o9);
// 2093
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2094
f637880758_541.returns.push(1373482791169);
// 2095
o9 = {};
// 2096
f637880758_0.returns.push(o9);
// 2097
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2098
f637880758_541.returns.push(1373482791169);
// 2099
o9 = {};
// 2100
f637880758_0.returns.push(o9);
// 2101
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2102
f637880758_541.returns.push(1373482791170);
// 2103
o9 = {};
// 2104
f637880758_0.returns.push(o9);
// 2105
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2106
f637880758_541.returns.push(1373482791170);
// 2107
o9 = {};
// 2108
f637880758_0.returns.push(o9);
// 2109
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2110
f637880758_541.returns.push(1373482791171);
// 2111
o9 = {};
// 2112
f637880758_0.returns.push(o9);
// 2113
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2114
f637880758_541.returns.push(1373482791171);
// 2115
o9 = {};
// 2116
f637880758_0.returns.push(o9);
// 2117
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2118
f637880758_541.returns.push(1373482791171);
// 2119
o9 = {};
// 2120
f637880758_0.returns.push(o9);
// 2121
o9.getTime = f637880758_541;
// undefined
o9 = null;
// 2122
f637880758_541.returns.push(1373482791171);
// 2123
f637880758_746 = function() { return f637880758_746.returns[f637880758_746.inst++]; };
f637880758_746.returns = [];
f637880758_746.inst = 0;
// 2124
o2.setItem = f637880758_746;
// 2125
f637880758_746.returns.push(undefined);
// 2126
f637880758_747 = function() { return f637880758_747.returns[f637880758_747.inst++]; };
f637880758_747.returns = [];
f637880758_747.inst = 0;
// 2127
o2.removeItem = f637880758_747;
// undefined
o2 = null;
// 2128
f637880758_747.returns.push(undefined);
// 2129
o2 = {};
// 2130
f637880758_0.returns.push(o2);
// 2131
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2132
f637880758_541.returns.push(1373482791175);
// 2133
o2 = {};
// 2134
f637880758_0.returns.push(o2);
// 2135
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2136
f637880758_541.returns.push(1373482791176);
// 2137
o2 = {};
// 2138
f637880758_0.returns.push(o2);
// 2139
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2140
f637880758_541.returns.push(1373482791176);
// 2141
o2 = {};
// 2142
f637880758_0.returns.push(o2);
// 2143
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2144
f637880758_541.returns.push(1373482791180);
// 2145
o2 = {};
// 2146
f637880758_0.returns.push(o2);
// 2147
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2148
f637880758_541.returns.push(1373482791181);
// 2149
o2 = {};
// 2150
f637880758_0.returns.push(o2);
// 2151
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2152
f637880758_541.returns.push(1373482791181);
// 2153
o2 = {};
// 2154
f637880758_0.returns.push(o2);
// 2155
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2156
f637880758_541.returns.push(1373482791181);
// 2157
o2 = {};
// 2158
f637880758_0.returns.push(o2);
// 2159
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2160
f637880758_541.returns.push(1373482791191);
// 2161
o2 = {};
// 2162
f637880758_0.returns.push(o2);
// 2163
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2164
f637880758_541.returns.push(1373482791191);
// 2165
o2 = {};
// 2166
f637880758_0.returns.push(o2);
// 2167
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2168
f637880758_541.returns.push(1373482791191);
// 2169
o2 = {};
// 2170
f637880758_0.returns.push(o2);
// 2171
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2172
f637880758_541.returns.push(1373482791191);
// 2173
o2 = {};
// 2174
f637880758_0.returns.push(o2);
// 2175
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2176
f637880758_541.returns.push(1373482791191);
// 2177
o2 = {};
// 2178
f637880758_0.returns.push(o2);
// 2179
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2180
f637880758_541.returns.push(1373482791192);
// 2181
o2 = {};
// 2182
f637880758_0.returns.push(o2);
// 2183
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2184
f637880758_541.returns.push(1373482791192);
// 2185
o2 = {};
// 2186
f637880758_0.returns.push(o2);
// 2187
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2188
f637880758_541.returns.push(1373482791192);
// 2189
o2 = {};
// 2190
f637880758_0.returns.push(o2);
// 2191
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2192
f637880758_541.returns.push(1373482791192);
// 2193
o2 = {};
// 2194
f637880758_0.returns.push(o2);
// 2195
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2196
f637880758_541.returns.push(1373482791193);
// 2197
o2 = {};
// 2198
f637880758_0.returns.push(o2);
// 2199
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2200
f637880758_541.returns.push(1373482791193);
// 2201
o2 = {};
// 2202
f637880758_0.returns.push(o2);
// 2203
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2204
f637880758_541.returns.push(1373482791194);
// 2205
o2 = {};
// 2206
f637880758_0.returns.push(o2);
// 2207
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2208
f637880758_541.returns.push(1373482791194);
// 2209
o2 = {};
// 2210
f637880758_0.returns.push(o2);
// 2211
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2212
f637880758_541.returns.push(1373482791194);
// 2213
o2 = {};
// 2214
f637880758_0.returns.push(o2);
// 2215
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2216
f637880758_541.returns.push(1373482791195);
// 2217
o2 = {};
// 2218
f637880758_0.returns.push(o2);
// 2219
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2220
f637880758_541.returns.push(1373482791195);
// 2221
o2 = {};
// 2222
f637880758_0.returns.push(o2);
// 2223
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2224
f637880758_541.returns.push(1373482791195);
// 2225
o2 = {};
// 2226
f637880758_0.returns.push(o2);
// 2227
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2228
f637880758_541.returns.push(1373482791195);
// 2229
o2 = {};
// 2230
f637880758_0.returns.push(o2);
// 2231
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2232
f637880758_541.returns.push(1373482791196);
// 2233
o2 = {};
// 2234
f637880758_0.returns.push(o2);
// 2235
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2236
f637880758_541.returns.push(1373482791196);
// 2237
o2 = {};
// 2238
f637880758_0.returns.push(o2);
// 2239
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2240
f637880758_541.returns.push(1373482791196);
// 2241
o2 = {};
// 2242
f637880758_0.returns.push(o2);
// 2243
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2244
f637880758_541.returns.push(1373482791197);
// 2245
o2 = {};
// 2246
f637880758_0.returns.push(o2);
// 2247
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2248
f637880758_541.returns.push(1373482791197);
// 2249
o2 = {};
// 2250
f637880758_0.returns.push(o2);
// 2251
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2252
f637880758_541.returns.push(1373482791201);
// 2253
o2 = {};
// 2254
f637880758_0.returns.push(o2);
// 2255
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2256
f637880758_541.returns.push(1373482791201);
// 2257
o2 = {};
// 2258
f637880758_0.returns.push(o2);
// 2259
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2260
f637880758_541.returns.push(1373482791201);
// 2261
o2 = {};
// 2262
f637880758_0.returns.push(o2);
// 2263
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2264
f637880758_541.returns.push(1373482791202);
// 2265
o2 = {};
// 2266
f637880758_0.returns.push(o2);
// 2267
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2268
f637880758_541.returns.push(1373482791202);
// 2269
o2 = {};
// 2270
f637880758_0.returns.push(o2);
// 2271
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2272
f637880758_541.returns.push(1373482791202);
// 2273
o2 = {};
// 2274
f637880758_0.returns.push(o2);
// 2275
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2276
f637880758_541.returns.push(1373482791202);
// 2277
o2 = {};
// 2278
f637880758_0.returns.push(o2);
// 2279
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2280
f637880758_541.returns.push(1373482791203);
// 2281
o2 = {};
// 2282
f637880758_0.returns.push(o2);
// 2283
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2284
f637880758_541.returns.push(1373482791204);
// 2285
o2 = {};
// 2286
f637880758_0.returns.push(o2);
// 2287
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2288
f637880758_541.returns.push(1373482791204);
// 2289
o2 = {};
// 2290
f637880758_0.returns.push(o2);
// 2291
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2292
f637880758_541.returns.push(1373482791204);
// 2293
o2 = {};
// 2294
f637880758_0.returns.push(o2);
// 2295
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2296
f637880758_541.returns.push(1373482791205);
// 2297
o2 = {};
// 2298
f637880758_0.returns.push(o2);
// 2299
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2300
f637880758_541.returns.push(1373482791205);
// 2301
o2 = {};
// 2302
f637880758_0.returns.push(o2);
// 2303
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2304
f637880758_541.returns.push(1373482791205);
// 2305
o2 = {};
// 2306
f637880758_0.returns.push(o2);
// 2307
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2308
f637880758_541.returns.push(1373482791206);
// 2309
o2 = {};
// 2310
f637880758_0.returns.push(o2);
// 2311
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2312
f637880758_541.returns.push(1373482791206);
// 2313
o2 = {};
// 2314
f637880758_0.returns.push(o2);
// 2315
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2316
f637880758_541.returns.push(1373482791206);
// 2317
o2 = {};
// 2318
f637880758_0.returns.push(o2);
// 2319
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2320
f637880758_541.returns.push(1373482791208);
// 2321
o2 = {};
// 2322
f637880758_0.returns.push(o2);
// 2323
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2324
f637880758_541.returns.push(1373482791208);
// 2325
o2 = {};
// 2326
f637880758_0.returns.push(o2);
// 2327
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2328
f637880758_541.returns.push(1373482791208);
// 2329
o2 = {};
// 2330
f637880758_0.returns.push(o2);
// 2331
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2332
f637880758_541.returns.push(1373482791208);
// 2333
o2 = {};
// 2334
f637880758_0.returns.push(o2);
// 2335
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2336
f637880758_541.returns.push(1373482791208);
// 2337
o2 = {};
// 2338
f637880758_0.returns.push(o2);
// 2339
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2340
f637880758_541.returns.push(1373482791208);
// 2341
o2 = {};
// 2342
f637880758_0.returns.push(o2);
// 2343
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2344
f637880758_541.returns.push(1373482791209);
// 2345
o2 = {};
// 2346
f637880758_0.returns.push(o2);
// 2347
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2348
f637880758_541.returns.push(1373482791209);
// 2349
o2 = {};
// 2350
f637880758_0.returns.push(o2);
// 2351
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2352
f637880758_541.returns.push(1373482791209);
// 2353
o2 = {};
// 2354
f637880758_0.returns.push(o2);
// 2355
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2356
f637880758_541.returns.push(1373482791211);
// 2357
o2 = {};
// 2358
f637880758_0.returns.push(o2);
// 2359
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2360
f637880758_541.returns.push(1373482791220);
// 2361
o2 = {};
// 2362
f637880758_0.returns.push(o2);
// 2363
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2364
f637880758_541.returns.push(1373482791220);
// 2365
o2 = {};
// 2366
f637880758_0.returns.push(o2);
// 2367
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2368
f637880758_541.returns.push(1373482791220);
// 2369
o2 = {};
// 2370
f637880758_0.returns.push(o2);
// 2371
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2372
f637880758_541.returns.push(1373482791221);
// 2373
o2 = {};
// 2374
f637880758_0.returns.push(o2);
// 2375
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2376
f637880758_541.returns.push(1373482791221);
// 2377
o2 = {};
// 2378
f637880758_0.returns.push(o2);
// 2379
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2380
f637880758_541.returns.push(1373482791221);
// 2381
o2 = {};
// 2382
f637880758_0.returns.push(o2);
// 2383
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2384
f637880758_541.returns.push(1373482791225);
// 2385
o2 = {};
// 2386
f637880758_0.returns.push(o2);
// 2387
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2388
f637880758_541.returns.push(1373482791225);
// 2389
o2 = {};
// 2390
f637880758_0.returns.push(o2);
// 2391
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2392
f637880758_541.returns.push(1373482791225);
// 2393
o2 = {};
// 2394
f637880758_0.returns.push(o2);
// 2395
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2396
f637880758_541.returns.push(1373482791225);
// 2397
o2 = {};
// 2398
f637880758_0.returns.push(o2);
// 2399
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2400
f637880758_541.returns.push(1373482791226);
// 2401
o2 = {};
// 2402
f637880758_0.returns.push(o2);
// 2403
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2404
f637880758_541.returns.push(1373482791226);
// 2405
o2 = {};
// 2406
f637880758_0.returns.push(o2);
// 2407
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2408
f637880758_541.returns.push(1373482791226);
// 2409
o2 = {};
// 2410
f637880758_0.returns.push(o2);
// 2411
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2412
f637880758_541.returns.push(1373482791226);
// 2413
o2 = {};
// 2414
f637880758_0.returns.push(o2);
// 2415
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2416
f637880758_541.returns.push(1373482791227);
// 2417
o2 = {};
// 2418
f637880758_0.returns.push(o2);
// 2419
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2420
f637880758_541.returns.push(1373482791228);
// 2421
o2 = {};
// 2422
f637880758_0.returns.push(o2);
// 2423
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2424
f637880758_541.returns.push(1373482791228);
// 2425
o2 = {};
// 2426
f637880758_0.returns.push(o2);
// 2427
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2428
f637880758_541.returns.push(1373482791228);
// 2429
o2 = {};
// 2430
f637880758_0.returns.push(o2);
// 2431
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2432
f637880758_541.returns.push(1373482791228);
// 2433
o2 = {};
// 2434
f637880758_0.returns.push(o2);
// 2435
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2436
f637880758_541.returns.push(1373482791229);
// 2437
o2 = {};
// 2438
f637880758_0.returns.push(o2);
// 2439
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2440
f637880758_541.returns.push(1373482791229);
// 2441
o2 = {};
// 2442
f637880758_0.returns.push(o2);
// 2443
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2444
f637880758_541.returns.push(1373482791229);
// 2445
o2 = {};
// 2446
f637880758_0.returns.push(o2);
// 2447
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2448
f637880758_541.returns.push(1373482791230);
// 2449
o2 = {};
// 2450
f637880758_0.returns.push(o2);
// 2451
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2452
f637880758_541.returns.push(1373482791230);
// 2453
o2 = {};
// 2454
f637880758_0.returns.push(o2);
// 2455
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2456
f637880758_541.returns.push(1373482791231);
// 2457
o2 = {};
// 2458
f637880758_0.returns.push(o2);
// 2459
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2460
f637880758_541.returns.push(1373482791231);
// 2461
o2 = {};
// 2462
f637880758_0.returns.push(o2);
// 2463
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2464
f637880758_541.returns.push(1373482791231);
// 2465
o2 = {};
// 2466
f637880758_0.returns.push(o2);
// 2467
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2468
f637880758_541.returns.push(1373482791235);
// 2469
o2 = {};
// 2470
f637880758_0.returns.push(o2);
// 2471
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2472
f637880758_541.returns.push(1373482791238);
// 2473
o2 = {};
// 2474
f637880758_0.returns.push(o2);
// 2475
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2476
f637880758_541.returns.push(1373482791238);
// 2477
o2 = {};
// 2478
f637880758_0.returns.push(o2);
// 2479
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2480
f637880758_541.returns.push(1373482791238);
// 2481
o2 = {};
// 2482
f637880758_0.returns.push(o2);
// 2483
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2484
f637880758_541.returns.push(1373482791241);
// 2485
o2 = {};
// 2486
f637880758_0.returns.push(o2);
// 2487
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2488
f637880758_541.returns.push(1373482791241);
// 2489
o2 = {};
// 2490
f637880758_0.returns.push(o2);
// 2491
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2492
f637880758_541.returns.push(1373482791242);
// 2493
o2 = {};
// 2494
f637880758_0.returns.push(o2);
// 2495
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2496
f637880758_541.returns.push(1373482791242);
// 2497
o2 = {};
// 2498
f637880758_0.returns.push(o2);
// 2499
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2500
f637880758_541.returns.push(1373482791242);
// 2501
o2 = {};
// 2502
f637880758_0.returns.push(o2);
// 2503
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2504
f637880758_541.returns.push(1373482791242);
// 2505
o2 = {};
// 2506
f637880758_0.returns.push(o2);
// 2507
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2508
f637880758_541.returns.push(1373482791244);
// 2509
o2 = {};
// 2510
f637880758_0.returns.push(o2);
// 2511
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2512
f637880758_541.returns.push(1373482791244);
// 2513
o2 = {};
// 2514
f637880758_0.returns.push(o2);
// 2515
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2516
f637880758_541.returns.push(1373482791244);
// 2517
o2 = {};
// 2518
f637880758_0.returns.push(o2);
// 2519
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2520
f637880758_541.returns.push(1373482791244);
// 2521
o2 = {};
// 2522
f637880758_0.returns.push(o2);
// 2523
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2524
f637880758_541.returns.push(1373482791245);
// 2525
o2 = {};
// 2526
f637880758_0.returns.push(o2);
// 2527
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2528
f637880758_541.returns.push(1373482791245);
// 2529
o2 = {};
// 2530
f637880758_0.returns.push(o2);
// 2531
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2532
f637880758_541.returns.push(1373482791245);
// 2533
o2 = {};
// 2534
f637880758_0.returns.push(o2);
// 2535
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2536
f637880758_541.returns.push(1373482791246);
// 2537
o2 = {};
// 2538
f637880758_0.returns.push(o2);
// 2539
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2540
f637880758_541.returns.push(1373482791246);
// 2541
o2 = {};
// 2542
f637880758_0.returns.push(o2);
// 2543
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2544
f637880758_541.returns.push(1373482791246);
// 2545
o2 = {};
// 2546
f637880758_0.returns.push(o2);
// 2547
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2548
f637880758_541.returns.push(1373482791246);
// 2549
o2 = {};
// 2550
f637880758_0.returns.push(o2);
// 2551
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2552
f637880758_541.returns.push(1373482791247);
// 2553
o2 = {};
// 2554
f637880758_0.returns.push(o2);
// 2555
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2556
f637880758_541.returns.push(1373482791247);
// 2557
o2 = {};
// 2558
f637880758_0.returns.push(o2);
// 2559
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2560
f637880758_541.returns.push(1373482791247);
// 2561
o2 = {};
// 2562
f637880758_0.returns.push(o2);
// 2563
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2564
f637880758_541.returns.push(1373482791248);
// 2565
o2 = {};
// 2566
f637880758_0.returns.push(o2);
// 2567
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2568
f637880758_541.returns.push(1373482791248);
// 2569
o2 = {};
// 2570
f637880758_0.returns.push(o2);
// 2571
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2572
f637880758_541.returns.push(1373482791248);
// 2573
o2 = {};
// 2574
f637880758_0.returns.push(o2);
// 2575
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2576
f637880758_541.returns.push(1373482791252);
// 2577
o2 = {};
// 2578
f637880758_0.returns.push(o2);
// 2579
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2580
f637880758_541.returns.push(1373482791252);
// 2581
o2 = {};
// 2582
f637880758_0.returns.push(o2);
// 2583
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2584
f637880758_541.returns.push(1373482791252);
// 2585
o2 = {};
// 2586
f637880758_0.returns.push(o2);
// 2587
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2588
f637880758_541.returns.push(1373482791253);
// 2589
o2 = {};
// 2590
f637880758_0.returns.push(o2);
// 2591
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2592
f637880758_541.returns.push(1373482791253);
// 2593
o2 = {};
// 2594
f637880758_0.returns.push(o2);
// 2595
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2596
f637880758_541.returns.push(1373482791253);
// 2597
o2 = {};
// 2598
f637880758_0.returns.push(o2);
// 2599
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2600
f637880758_541.returns.push(1373482791256);
// 2601
o2 = {};
// 2602
f637880758_0.returns.push(o2);
// 2603
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2604
f637880758_541.returns.push(1373482791257);
// 2605
o2 = {};
// 2606
f637880758_0.returns.push(o2);
// 2607
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2608
f637880758_541.returns.push(1373482791257);
// 2609
o2 = {};
// 2610
f637880758_0.returns.push(o2);
// 2611
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2612
f637880758_541.returns.push(1373482791258);
// 2613
o2 = {};
// 2614
f637880758_0.returns.push(o2);
// 2615
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2616
f637880758_541.returns.push(1373482791258);
// 2617
o2 = {};
// 2618
f637880758_0.returns.push(o2);
// 2619
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2620
f637880758_541.returns.push(1373482791258);
// 2621
o2 = {};
// 2622
f637880758_0.returns.push(o2);
// 2623
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2624
f637880758_541.returns.push(1373482791258);
// 2625
o2 = {};
// 2626
f637880758_0.returns.push(o2);
// 2627
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2628
f637880758_541.returns.push(1373482791260);
// 2629
o2 = {};
// 2630
f637880758_0.returns.push(o2);
// 2631
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2632
f637880758_541.returns.push(1373482791260);
// 2633
o2 = {};
// 2634
f637880758_0.returns.push(o2);
// 2635
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2636
f637880758_541.returns.push(1373482791260);
// 2637
o2 = {};
// 2638
f637880758_0.returns.push(o2);
// 2639
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2640
f637880758_541.returns.push(1373482791262);
// 2641
o2 = {};
// 2642
f637880758_0.returns.push(o2);
// 2643
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2644
f637880758_541.returns.push(1373482791262);
// 2645
o2 = {};
// 2646
f637880758_0.returns.push(o2);
// 2647
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2648
f637880758_541.returns.push(1373482791262);
// 2649
o2 = {};
// 2650
f637880758_0.returns.push(o2);
// 2651
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2652
f637880758_541.returns.push(1373482791265);
// 2653
o2 = {};
// 2654
f637880758_0.returns.push(o2);
// 2655
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2656
f637880758_541.returns.push(1373482791265);
// 2657
o2 = {};
// 2658
f637880758_0.returns.push(o2);
// 2659
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2660
f637880758_541.returns.push(1373482791265);
// 2661
o2 = {};
// 2662
f637880758_0.returns.push(o2);
// 2663
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2664
f637880758_541.returns.push(1373482791265);
// 2665
o2 = {};
// 2666
f637880758_0.returns.push(o2);
// 2667
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2668
f637880758_541.returns.push(1373482791266);
// 2669
o2 = {};
// 2670
f637880758_0.returns.push(o2);
// 2671
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2672
f637880758_541.returns.push(1373482791277);
// 2673
o2 = {};
// 2674
f637880758_0.returns.push(o2);
// 2675
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2676
f637880758_541.returns.push(1373482791277);
// 2677
o2 = {};
// 2678
f637880758_0.returns.push(o2);
// 2679
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2680
f637880758_541.returns.push(1373482791278);
// 2681
o2 = {};
// 2682
f637880758_0.returns.push(o2);
// 2683
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2684
f637880758_541.returns.push(1373482791287);
// 2685
o2 = {};
// 2686
f637880758_0.returns.push(o2);
// 2687
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2688
f637880758_541.returns.push(1373482791288);
// 2689
o2 = {};
// 2690
f637880758_0.returns.push(o2);
// 2691
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2692
f637880758_541.returns.push(1373482791288);
// 2693
o2 = {};
// 2694
f637880758_0.returns.push(o2);
// 2695
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2696
f637880758_541.returns.push(1373482791289);
// 2697
o2 = {};
// 2698
f637880758_0.returns.push(o2);
// 2699
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2700
f637880758_541.returns.push(1373482791289);
// 2701
o2 = {};
// 2702
f637880758_0.returns.push(o2);
// 2703
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2704
f637880758_541.returns.push(1373482791289);
// 2705
o2 = {};
// 2706
f637880758_0.returns.push(o2);
// 2707
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2708
f637880758_541.returns.push(1373482791290);
// 2709
o2 = {};
// 2710
f637880758_0.returns.push(o2);
// 2711
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2712
f637880758_541.returns.push(1373482791290);
// 2713
o2 = {};
// 2714
f637880758_0.returns.push(o2);
// 2715
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2716
f637880758_541.returns.push(1373482791290);
// 2717
o2 = {};
// 2718
f637880758_0.returns.push(o2);
// 2719
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2720
f637880758_541.returns.push(1373482791291);
// 2721
o2 = {};
// 2722
f637880758_0.returns.push(o2);
// 2723
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2724
f637880758_541.returns.push(1373482791291);
// 2725
o2 = {};
// 2726
f637880758_0.returns.push(o2);
// 2727
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2728
f637880758_541.returns.push(1373482791292);
// 2729
o2 = {};
// 2730
f637880758_0.returns.push(o2);
// 2731
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2732
f637880758_541.returns.push(1373482791292);
// 2733
o2 = {};
// 2734
f637880758_0.returns.push(o2);
// 2735
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2736
f637880758_541.returns.push(1373482791292);
// 2737
o2 = {};
// 2738
f637880758_0.returns.push(o2);
// 2739
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2740
f637880758_541.returns.push(1373482791293);
// 2741
o2 = {};
// 2742
f637880758_0.returns.push(o2);
// 2743
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2744
f637880758_541.returns.push(1373482791293);
// 2745
o2 = {};
// 2746
f637880758_0.returns.push(o2);
// 2747
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2748
f637880758_541.returns.push(1373482791293);
// 2749
o2 = {};
// 2750
f637880758_0.returns.push(o2);
// 2751
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2752
f637880758_541.returns.push(1373482791293);
// 2753
o2 = {};
// 2754
f637880758_0.returns.push(o2);
// 2755
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2756
f637880758_541.returns.push(1373482791293);
// 2757
o2 = {};
// 2758
f637880758_0.returns.push(o2);
// 2759
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2760
f637880758_541.returns.push(1373482791295);
// 2761
o2 = {};
// 2762
f637880758_0.returns.push(o2);
// 2763
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2764
f637880758_541.returns.push(1373482791295);
// 2765
o2 = {};
// 2766
f637880758_0.returns.push(o2);
// 2767
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2768
f637880758_541.returns.push(1373482791295);
// 2769
o2 = {};
// 2770
f637880758_0.returns.push(o2);
// 2771
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2772
f637880758_541.returns.push(1373482791295);
// 2773
o2 = {};
// 2774
f637880758_0.returns.push(o2);
// 2775
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2776
f637880758_541.returns.push(1373482791296);
// 2777
o2 = {};
// 2778
f637880758_0.returns.push(o2);
// 2779
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2780
f637880758_541.returns.push(1373482791296);
// 2781
o2 = {};
// 2782
f637880758_0.returns.push(o2);
// 2783
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2784
f637880758_541.returns.push(1373482791296);
// 2785
o2 = {};
// 2786
f637880758_0.returns.push(o2);
// 2787
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2788
f637880758_541.returns.push(1373482791296);
// 2789
o2 = {};
// 2790
f637880758_0.returns.push(o2);
// 2791
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2792
f637880758_541.returns.push(1373482791300);
// 2793
o2 = {};
// 2794
f637880758_0.returns.push(o2);
// 2795
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2796
f637880758_541.returns.push(1373482791300);
// 2797
o2 = {};
// 2798
f637880758_0.returns.push(o2);
// 2799
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2800
f637880758_541.returns.push(1373482791300);
// 2801
o2 = {};
// 2802
f637880758_0.returns.push(o2);
// 2803
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2804
f637880758_541.returns.push(1373482791302);
// 2805
o2 = {};
// 2806
f637880758_0.returns.push(o2);
// 2807
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2808
f637880758_541.returns.push(1373482791302);
// 2809
o2 = {};
// 2810
f637880758_0.returns.push(o2);
// 2811
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2812
f637880758_541.returns.push(1373482791302);
// 2813
o2 = {};
// 2814
f637880758_0.returns.push(o2);
// 2815
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2816
f637880758_541.returns.push(1373482791302);
// 2817
o2 = {};
// 2818
f637880758_0.returns.push(o2);
// 2819
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2820
f637880758_541.returns.push(1373482791303);
// 2821
o2 = {};
// 2822
f637880758_0.returns.push(o2);
// 2823
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2824
f637880758_541.returns.push(1373482791303);
// 2825
o2 = {};
// 2826
f637880758_0.returns.push(o2);
// 2827
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2828
f637880758_541.returns.push(1373482791303);
// 2829
o2 = {};
// 2830
f637880758_0.returns.push(o2);
// 2831
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2832
f637880758_541.returns.push(1373482791303);
// 2833
o2 = {};
// 2834
f637880758_0.returns.push(o2);
// 2835
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2836
f637880758_541.returns.push(1373482791303);
// 2837
o2 = {};
// 2838
f637880758_0.returns.push(o2);
// 2839
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2840
f637880758_541.returns.push(1373482791306);
// 2841
o2 = {};
// 2842
f637880758_0.returns.push(o2);
// 2843
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2844
f637880758_541.returns.push(1373482791306);
// 2845
o2 = {};
// 2846
f637880758_0.returns.push(o2);
// 2847
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2848
f637880758_541.returns.push(1373482791306);
// 2849
o2 = {};
// 2850
f637880758_0.returns.push(o2);
// 2851
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2852
f637880758_541.returns.push(1373482791306);
// 2853
o2 = {};
// 2854
f637880758_0.returns.push(o2);
// 2855
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2856
f637880758_541.returns.push(1373482791307);
// 2857
o2 = {};
// 2858
f637880758_0.returns.push(o2);
// 2859
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2860
f637880758_541.returns.push(1373482791307);
// 2861
o2 = {};
// 2862
f637880758_0.returns.push(o2);
// 2863
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2864
f637880758_541.returns.push(1373482791307);
// 2865
o2 = {};
// 2866
f637880758_0.returns.push(o2);
// 2867
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2868
f637880758_541.returns.push(1373482791307);
// 2869
o2 = {};
// 2870
f637880758_0.returns.push(o2);
// 2871
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2872
f637880758_541.returns.push(1373482791307);
// 2873
o2 = {};
// 2874
f637880758_0.returns.push(o2);
// 2875
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2876
f637880758_541.returns.push(1373482791311);
// 2877
o2 = {};
// 2878
f637880758_0.returns.push(o2);
// 2879
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2880
f637880758_541.returns.push(1373482791311);
// 2881
o2 = {};
// 2882
f637880758_0.returns.push(o2);
// 2883
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2884
f637880758_541.returns.push(1373482791311);
// 2885
o2 = {};
// 2886
f637880758_0.returns.push(o2);
// 2887
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2888
f637880758_541.returns.push(1373482791312);
// 2889
o2 = {};
// 2890
f637880758_0.returns.push(o2);
// 2891
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2892
f637880758_541.returns.push(1373482791313);
// 2893
o2 = {};
// 2894
f637880758_0.returns.push(o2);
// 2895
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2896
f637880758_541.returns.push(1373482791313);
// 2897
o2 = {};
// 2898
f637880758_0.returns.push(o2);
// 2899
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2900
f637880758_541.returns.push(1373482791317);
// 2901
o2 = {};
// 2902
f637880758_0.returns.push(o2);
// 2903
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2904
f637880758_541.returns.push(1373482791317);
// 2905
o2 = {};
// 2906
f637880758_0.returns.push(o2);
// 2907
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2908
f637880758_541.returns.push(1373482791318);
// 2909
o2 = {};
// 2910
f637880758_0.returns.push(o2);
// 2911
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2912
f637880758_541.returns.push(1373482791318);
// 2913
o2 = {};
// 2914
f637880758_0.returns.push(o2);
// 2915
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2916
f637880758_541.returns.push(1373482791318);
// 2917
o2 = {};
// 2918
f637880758_0.returns.push(o2);
// 2919
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2920
f637880758_541.returns.push(1373482791318);
// 2921
o2 = {};
// 2922
f637880758_0.returns.push(o2);
// 2923
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2924
f637880758_541.returns.push(1373482791318);
// 2925
o2 = {};
// 2926
f637880758_0.returns.push(o2);
// 2927
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2928
f637880758_541.returns.push(1373482791318);
// 2929
o2 = {};
// 2930
f637880758_0.returns.push(o2);
// 2931
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2932
f637880758_541.returns.push(1373482791320);
// 2933
o2 = {};
// 2934
f637880758_0.returns.push(o2);
// 2935
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2936
f637880758_541.returns.push(1373482791320);
// 2937
o2 = {};
// 2938
f637880758_0.returns.push(o2);
// 2939
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2940
f637880758_541.returns.push(1373482791320);
// 2941
o2 = {};
// 2942
f637880758_0.returns.push(o2);
// 2943
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2944
f637880758_541.returns.push(1373482791321);
// 2945
o2 = {};
// 2946
f637880758_0.returns.push(o2);
// 2947
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2948
f637880758_541.returns.push(1373482791321);
// 2949
o2 = {};
// 2950
f637880758_0.returns.push(o2);
// 2951
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2952
f637880758_541.returns.push(1373482791321);
// 2953
o2 = {};
// 2954
f637880758_0.returns.push(o2);
// 2955
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2956
f637880758_541.returns.push(1373482791321);
// 2957
o2 = {};
// 2958
f637880758_0.returns.push(o2);
// 2959
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2960
f637880758_541.returns.push(1373482791322);
// 2961
o2 = {};
// 2962
f637880758_0.returns.push(o2);
// 2963
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2964
f637880758_541.returns.push(1373482791322);
// 2965
o2 = {};
// 2966
f637880758_0.returns.push(o2);
// 2967
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2968
f637880758_541.returns.push(1373482791322);
// 2969
o2 = {};
// 2970
f637880758_0.returns.push(o2);
// 2971
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2972
f637880758_541.returns.push(1373482791322);
// 2973
o2 = {};
// 2974
f637880758_0.returns.push(o2);
// 2975
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2976
f637880758_541.returns.push(1373482791324);
// 2977
o2 = {};
// 2978
f637880758_0.returns.push(o2);
// 2979
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2980
f637880758_541.returns.push(1373482791325);
// 2981
o2 = {};
// 2982
f637880758_0.returns.push(o2);
// 2983
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2984
f637880758_541.returns.push(1373482791325);
// 2985
o2 = {};
// 2986
f637880758_0.returns.push(o2);
// 2987
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2988
f637880758_541.returns.push(1373482791325);
// 2989
o2 = {};
// 2990
f637880758_0.returns.push(o2);
// 2991
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2992
f637880758_541.returns.push(1373482791326);
// 2993
o2 = {};
// 2994
f637880758_0.returns.push(o2);
// 2995
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 2996
f637880758_541.returns.push(1373482791326);
// 2997
o2 = {};
// 2998
f637880758_0.returns.push(o2);
// 2999
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3000
f637880758_541.returns.push(1373482791326);
// 3001
o2 = {};
// 3002
f637880758_0.returns.push(o2);
// 3003
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3004
f637880758_541.returns.push(1373482791326);
// 3005
o2 = {};
// 3006
f637880758_0.returns.push(o2);
// 3007
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3008
f637880758_541.returns.push(1373482791333);
// 3009
o2 = {};
// 3010
f637880758_0.returns.push(o2);
// 3011
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3012
f637880758_541.returns.push(1373482791334);
// 3013
o2 = {};
// 3014
f637880758_0.returns.push(o2);
// 3015
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3016
f637880758_541.returns.push(1373482791334);
// 3017
o2 = {};
// 3018
f637880758_0.returns.push(o2);
// 3019
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3020
f637880758_541.returns.push(1373482791334);
// 3021
o2 = {};
// 3022
f637880758_0.returns.push(o2);
// 3023
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3024
f637880758_541.returns.push(1373482791334);
// 3025
o2 = {};
// 3026
f637880758_0.returns.push(o2);
// 3027
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3028
f637880758_541.returns.push(1373482791336);
// 3029
o2 = {};
// 3030
f637880758_0.returns.push(o2);
// 3031
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3032
f637880758_541.returns.push(1373482791336);
// 3033
o2 = {};
// 3034
f637880758_0.returns.push(o2);
// 3035
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3036
f637880758_541.returns.push(1373482791337);
// 3037
o2 = {};
// 3038
f637880758_0.returns.push(o2);
// 3039
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3040
f637880758_541.returns.push(1373482791337);
// 3041
o2 = {};
// 3042
f637880758_0.returns.push(o2);
// 3043
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3044
f637880758_541.returns.push(1373482791337);
// 3045
o2 = {};
// 3046
f637880758_0.returns.push(o2);
// 3047
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3048
f637880758_541.returns.push(1373482791337);
// 3049
o2 = {};
// 3050
f637880758_0.returns.push(o2);
// 3051
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3052
f637880758_541.returns.push(1373482791338);
// 3053
o2 = {};
// 3054
f637880758_0.returns.push(o2);
// 3055
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3056
f637880758_541.returns.push(1373482791339);
// 3057
o2 = {};
// 3058
f637880758_0.returns.push(o2);
// 3059
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3060
f637880758_541.returns.push(1373482791340);
// 3061
o2 = {};
// 3062
f637880758_0.returns.push(o2);
// 3063
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3064
f637880758_541.returns.push(1373482791340);
// 3065
o2 = {};
// 3066
f637880758_0.returns.push(o2);
// 3067
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3068
f637880758_541.returns.push(1373482791340);
// 3069
o2 = {};
// 3070
f637880758_0.returns.push(o2);
// 3071
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3072
f637880758_541.returns.push(1373482791340);
// 3073
o2 = {};
// 3074
f637880758_0.returns.push(o2);
// 3075
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3076
f637880758_541.returns.push(1373482791341);
// 3077
o2 = {};
// 3078
f637880758_0.returns.push(o2);
// 3079
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3080
f637880758_541.returns.push(1373482791341);
// 3081
o2 = {};
// 3082
f637880758_0.returns.push(o2);
// 3083
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3084
f637880758_541.returns.push(1373482791342);
// 3085
o2 = {};
// 3086
f637880758_0.returns.push(o2);
// 3087
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3088
f637880758_541.returns.push(1373482791342);
// 3089
o2 = {};
// 3090
f637880758_0.returns.push(o2);
// 3091
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3092
f637880758_541.returns.push(1373482791342);
// 3093
o2 = {};
// 3094
f637880758_0.returns.push(o2);
// 3095
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3096
f637880758_541.returns.push(1373482791343);
// 3097
o2 = {};
// 3098
f637880758_0.returns.push(o2);
// 3099
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3100
f637880758_541.returns.push(1373482791345);
// 3101
o2 = {};
// 3102
f637880758_0.returns.push(o2);
// 3103
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3104
f637880758_541.returns.push(1373482791345);
// 3105
o2 = {};
// 3106
f637880758_0.returns.push(o2);
// 3107
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3108
f637880758_541.returns.push(1373482791345);
// 3109
o2 = {};
// 3110
f637880758_0.returns.push(o2);
// 3111
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3112
f637880758_541.returns.push(1373482791346);
// 3113
o2 = {};
// 3114
f637880758_0.returns.push(o2);
// 3115
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3116
f637880758_541.returns.push(1373482791351);
// 3117
o2 = {};
// 3118
f637880758_0.returns.push(o2);
// 3119
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3120
f637880758_541.returns.push(1373482791351);
// 3121
o2 = {};
// 3122
f637880758_0.returns.push(o2);
// 3123
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3124
f637880758_541.returns.push(1373482791351);
// 3125
o2 = {};
// 3126
f637880758_0.returns.push(o2);
// 3127
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3128
f637880758_541.returns.push(1373482791352);
// 3129
o2 = {};
// 3130
f637880758_0.returns.push(o2);
// 3131
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3132
f637880758_541.returns.push(1373482791352);
// 3133
o2 = {};
// 3134
f637880758_0.returns.push(o2);
// 3135
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3136
f637880758_541.returns.push(1373482791353);
// 3137
o2 = {};
// 3138
f637880758_0.returns.push(o2);
// 3139
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3140
f637880758_541.returns.push(1373482791354);
// 3141
o2 = {};
// 3142
f637880758_0.returns.push(o2);
// 3143
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3144
f637880758_541.returns.push(1373482791354);
// 3145
o2 = {};
// 3146
f637880758_0.returns.push(o2);
// 3147
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3148
f637880758_541.returns.push(1373482791354);
// 3149
o2 = {};
// 3150
f637880758_0.returns.push(o2);
// 3151
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3152
f637880758_541.returns.push(1373482791355);
// 3153
o2 = {};
// 3154
f637880758_0.returns.push(o2);
// 3155
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3156
f637880758_541.returns.push(1373482791355);
// 3157
o2 = {};
// 3158
f637880758_0.returns.push(o2);
// 3159
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3160
f637880758_541.returns.push(1373482791355);
// 3161
o2 = {};
// 3162
f637880758_0.returns.push(o2);
// 3163
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3164
f637880758_541.returns.push(1373482791356);
// 3165
o2 = {};
// 3166
f637880758_0.returns.push(o2);
// 3167
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3168
f637880758_541.returns.push(1373482791356);
// 3169
o2 = {};
// 3170
f637880758_0.returns.push(o2);
// 3171
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3172
f637880758_541.returns.push(1373482791356);
// 3173
o2 = {};
// 3174
f637880758_0.returns.push(o2);
// 3175
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3176
f637880758_541.returns.push(1373482791359);
// 3177
o2 = {};
// 3178
f637880758_0.returns.push(o2);
// 3179
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3180
f637880758_541.returns.push(1373482791360);
// 3181
o2 = {};
// 3182
f637880758_0.returns.push(o2);
// 3183
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3184
f637880758_541.returns.push(1373482791360);
// 3185
o2 = {};
// 3186
f637880758_0.returns.push(o2);
// 3187
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3188
f637880758_541.returns.push(1373482791360);
// 3189
o2 = {};
// 3190
f637880758_0.returns.push(o2);
// 3191
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3192
f637880758_541.returns.push(1373482791360);
// 3193
o2 = {};
// 3194
f637880758_0.returns.push(o2);
// 3195
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3196
f637880758_541.returns.push(1373482791360);
// 3197
o2 = {};
// 3198
f637880758_0.returns.push(o2);
// 3199
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3200
f637880758_541.returns.push(1373482791360);
// 3201
o2 = {};
// 3202
f637880758_0.returns.push(o2);
// 3203
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3204
f637880758_541.returns.push(1373482791361);
// 3205
o2 = {};
// 3206
f637880758_0.returns.push(o2);
// 3207
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3208
f637880758_541.returns.push(1373482791361);
// 3209
o2 = {};
// 3210
f637880758_0.returns.push(o2);
// 3211
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3212
f637880758_541.returns.push(1373482791361);
// 3213
o2 = {};
// 3214
f637880758_0.returns.push(o2);
// 3215
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3216
f637880758_541.returns.push(1373482791362);
// 3217
o2 = {};
// 3218
f637880758_0.returns.push(o2);
// 3219
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3220
f637880758_541.returns.push(1373482791362);
// 3221
o2 = {};
// 3222
f637880758_0.returns.push(o2);
// 3223
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3224
f637880758_541.returns.push(1373482791385);
// 3225
o2 = {};
// 3226
f637880758_0.returns.push(o2);
// 3227
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3228
f637880758_541.returns.push(1373482791385);
// 3229
o2 = {};
// 3230
f637880758_0.returns.push(o2);
// 3231
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3232
f637880758_541.returns.push(1373482791385);
// 3233
o2 = {};
// 3234
f637880758_0.returns.push(o2);
// 3235
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3236
f637880758_541.returns.push(1373482791385);
// 3237
o2 = {};
// 3238
f637880758_0.returns.push(o2);
// 3239
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3240
f637880758_541.returns.push(1373482791386);
// 3241
o2 = {};
// 3242
f637880758_0.returns.push(o2);
// 3243
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3244
f637880758_541.returns.push(1373482791386);
// 3245
o2 = {};
// 3246
f637880758_0.returns.push(o2);
// 3247
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3248
f637880758_541.returns.push(1373482791392);
// 3249
o2 = {};
// 3250
f637880758_0.returns.push(o2);
// 3251
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3252
f637880758_541.returns.push(1373482791392);
// 3253
o2 = {};
// 3254
f637880758_0.returns.push(o2);
// 3255
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3256
f637880758_541.returns.push(1373482791392);
// 3257
o2 = {};
// 3258
f637880758_0.returns.push(o2);
// 3259
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3260
f637880758_541.returns.push(1373482791393);
// 3261
o2 = {};
// 3262
f637880758_0.returns.push(o2);
// 3263
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3264
f637880758_541.returns.push(1373482791393);
// 3265
o2 = {};
// 3266
f637880758_0.returns.push(o2);
// 3267
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3268
f637880758_541.returns.push(1373482791393);
// 3269
o2 = {};
// 3270
f637880758_0.returns.push(o2);
// 3271
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3272
f637880758_541.returns.push(1373482791393);
// 3273
o2 = {};
// 3274
f637880758_0.returns.push(o2);
// 3275
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3276
f637880758_541.returns.push(1373482791393);
// 3277
o2 = {};
// 3278
f637880758_0.returns.push(o2);
// 3279
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3280
f637880758_541.returns.push(1373482791395);
// 3281
o2 = {};
// 3282
f637880758_0.returns.push(o2);
// 3283
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3284
f637880758_541.returns.push(1373482791395);
// 3285
o2 = {};
// 3286
f637880758_0.returns.push(o2);
// 3287
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3288
f637880758_541.returns.push(1373482791395);
// 3289
o2 = {};
// 3290
f637880758_0.returns.push(o2);
// 3291
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3292
f637880758_541.returns.push(1373482791395);
// 3293
o2 = {};
// 3294
f637880758_0.returns.push(o2);
// 3295
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3296
f637880758_541.returns.push(1373482791395);
// 3297
o2 = {};
// 3298
f637880758_0.returns.push(o2);
// 3299
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3300
f637880758_541.returns.push(1373482791396);
// 3301
o2 = {};
// 3302
f637880758_0.returns.push(o2);
// 3303
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3304
f637880758_541.returns.push(1373482791396);
// 3305
o2 = {};
// 3306
f637880758_0.returns.push(o2);
// 3307
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3308
f637880758_541.returns.push(1373482791397);
// 3309
o2 = {};
// 3310
f637880758_0.returns.push(o2);
// 3311
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3312
f637880758_541.returns.push(1373482791397);
// 3313
o2 = {};
// 3314
f637880758_0.returns.push(o2);
// 3315
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3316
f637880758_541.returns.push(1373482791397);
// 3317
o2 = {};
// 3318
f637880758_0.returns.push(o2);
// 3319
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3320
f637880758_541.returns.push(1373482791397);
// 3321
o2 = {};
// 3322
f637880758_0.returns.push(o2);
// 3323
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3324
f637880758_541.returns.push(1373482791397);
// 3325
o2 = {};
// 3326
f637880758_0.returns.push(o2);
// 3327
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3328
f637880758_541.returns.push(1373482791397);
// 3329
o2 = {};
// 3330
f637880758_0.returns.push(o2);
// 3331
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3332
f637880758_541.returns.push(1373482800320);
// 3333
o2 = {};
// 3334
f637880758_0.returns.push(o2);
// 3335
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3336
f637880758_541.returns.push(1373482800320);
// 3337
o2 = {};
// 3338
f637880758_0.returns.push(o2);
// 3339
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3340
f637880758_541.returns.push(1373482800321);
// 3341
o2 = {};
// 3342
f637880758_0.returns.push(o2);
// 3343
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3344
f637880758_541.returns.push(1373482800321);
// 3345
o2 = {};
// 3346
f637880758_0.returns.push(o2);
// 3347
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3348
f637880758_541.returns.push(1373482800321);
// 3349
o2 = {};
// 3350
f637880758_0.returns.push(o2);
// 3351
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3352
f637880758_541.returns.push(1373482800322);
// 3353
o2 = {};
// 3354
f637880758_0.returns.push(o2);
// 3355
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3356
f637880758_541.returns.push(1373482800322);
// 3357
o2 = {};
// 3358
f637880758_0.returns.push(o2);
// 3359
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3360
f637880758_541.returns.push(1373482800322);
// 3361
o2 = {};
// 3362
f637880758_0.returns.push(o2);
// 3363
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3364
f637880758_541.returns.push(1373482800324);
// 3365
o2 = {};
// 3366
f637880758_0.returns.push(o2);
// 3367
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3368
f637880758_541.returns.push(1373482800324);
// 3369
o2 = {};
// 3370
f637880758_0.returns.push(o2);
// 3371
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3372
f637880758_541.returns.push(1373482800324);
// 3373
o2 = {};
// 3374
f637880758_0.returns.push(o2);
// 3375
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3376
f637880758_541.returns.push(1373482800325);
// 3377
o2 = {};
// 3378
f637880758_0.returns.push(o2);
// 3379
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3380
f637880758_541.returns.push(1373482800325);
// 3381
o2 = {};
// 3382
f637880758_0.returns.push(o2);
// 3383
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3384
f637880758_541.returns.push(1373482800325);
// 3385
o2 = {};
// 3386
f637880758_0.returns.push(o2);
// 3387
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3388
f637880758_541.returns.push(1373482800327);
// 3389
o2 = {};
// 3390
f637880758_0.returns.push(o2);
// 3391
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3392
f637880758_541.returns.push(1373482800327);
// 3393
o2 = {};
// 3394
f637880758_0.returns.push(o2);
// 3395
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3396
f637880758_541.returns.push(1373482800327);
// 3397
o2 = {};
// 3398
f637880758_0.returns.push(o2);
// 3399
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3400
f637880758_541.returns.push(1373482800328);
// 3401
o2 = {};
// 3402
f637880758_0.returns.push(o2);
// 3403
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3404
f637880758_541.returns.push(1373482800328);
// 3405
o2 = {};
// 3406
f637880758_0.returns.push(o2);
// 3407
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3408
f637880758_541.returns.push(1373482800328);
// 3409
o2 = {};
// 3410
f637880758_0.returns.push(o2);
// 3411
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3412
f637880758_541.returns.push(1373482800329);
// 3413
o2 = {};
// 3414
f637880758_0.returns.push(o2);
// 3415
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3416
f637880758_541.returns.push(1373482800329);
// 3417
o2 = {};
// 3418
f637880758_0.returns.push(o2);
// 3419
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3420
f637880758_541.returns.push(1373482800330);
// 3421
o2 = {};
// 3422
f637880758_0.returns.push(o2);
// 3423
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3424
f637880758_541.returns.push(1373482800330);
// 3425
o2 = {};
// 3426
f637880758_0.returns.push(o2);
// 3427
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3428
f637880758_541.returns.push(1373482800331);
// 3429
o2 = {};
// 3430
f637880758_0.returns.push(o2);
// 3431
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3432
f637880758_541.returns.push(1373482800332);
// 3433
o2 = {};
// 3434
f637880758_0.returns.push(o2);
// 3435
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3436
f637880758_541.returns.push(1373482800337);
// 3437
o2 = {};
// 3438
f637880758_0.returns.push(o2);
// 3439
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3440
f637880758_541.returns.push(1373482800337);
// 3441
o2 = {};
// 3442
f637880758_0.returns.push(o2);
// 3443
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3444
f637880758_541.returns.push(1373482800338);
// 3445
o2 = {};
// 3446
f637880758_0.returns.push(o2);
// 3447
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3448
f637880758_541.returns.push(1373482800338);
// 3449
o2 = {};
// 3450
f637880758_0.returns.push(o2);
// 3451
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3452
f637880758_541.returns.push(1373482800338);
// 3453
o2 = {};
// 3454
f637880758_0.returns.push(o2);
// 3455
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3456
f637880758_541.returns.push(1373482800339);
// 3457
o2 = {};
// 3458
f637880758_0.returns.push(o2);
// 3459
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3460
f637880758_541.returns.push(1373482800339);
// 3461
o2 = {};
// 3462
f637880758_0.returns.push(o2);
// 3463
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3464
f637880758_541.returns.push(1373482800339);
// 3465
o2 = {};
// 3466
f637880758_0.returns.push(o2);
// 3467
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3468
f637880758_541.returns.push(1373482800339);
// 3469
o2 = {};
// 3470
f637880758_0.returns.push(o2);
// 3471
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3472
f637880758_541.returns.push(1373482800340);
// 3473
o2 = {};
// 3474
f637880758_0.returns.push(o2);
// 3475
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3476
f637880758_541.returns.push(1373482800340);
// 3477
o2 = {};
// 3478
f637880758_0.returns.push(o2);
// 3479
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3480
f637880758_541.returns.push(1373482800341);
// 3481
o2 = {};
// 3482
f637880758_0.returns.push(o2);
// 3483
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3484
f637880758_541.returns.push(1373482800341);
// 3485
o2 = {};
// 3486
f637880758_0.returns.push(o2);
// 3487
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3488
f637880758_541.returns.push(1373482800343);
// 3489
o2 = {};
// 3490
f637880758_0.returns.push(o2);
// 3491
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3492
f637880758_541.returns.push(1373482800343);
// 3493
o2 = {};
// 3494
f637880758_0.returns.push(o2);
// 3495
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3496
f637880758_541.returns.push(1373482800343);
// 3497
o2 = {};
// 3498
f637880758_0.returns.push(o2);
// 3499
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3500
f637880758_541.returns.push(1373482800345);
// 3501
o2 = {};
// 3502
f637880758_0.returns.push(o2);
// 3503
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3504
f637880758_541.returns.push(1373482800345);
// 3505
o2 = {};
// 3506
f637880758_0.returns.push(o2);
// 3507
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3508
f637880758_541.returns.push(1373482800345);
// 3509
o2 = {};
// 3510
f637880758_0.returns.push(o2);
// 3511
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3512
f637880758_541.returns.push(1373482800346);
// 3513
o2 = {};
// 3514
f637880758_0.returns.push(o2);
// 3515
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3516
f637880758_541.returns.push(1373482800346);
// 3517
o2 = {};
// 3518
f637880758_0.returns.push(o2);
// 3519
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3520
f637880758_541.returns.push(1373482800346);
// 3521
o2 = {};
// 3522
f637880758_0.returns.push(o2);
// 3523
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3524
f637880758_541.returns.push(1373482800347);
// 3525
o2 = {};
// 3526
f637880758_0.returns.push(o2);
// 3527
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3528
f637880758_541.returns.push(1373482800349);
// 3529
o2 = {};
// 3530
f637880758_0.returns.push(o2);
// 3531
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3532
f637880758_541.returns.push(1373482800349);
// 3533
o2 = {};
// 3534
f637880758_0.returns.push(o2);
// 3535
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3536
f637880758_541.returns.push(1373482800349);
// 3537
o2 = {};
// 3538
f637880758_0.returns.push(o2);
// 3539
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3540
f637880758_541.returns.push(1373482800350);
// 3541
o2 = {};
// 3542
f637880758_0.returns.push(o2);
// 3543
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3544
f637880758_541.returns.push(1373482800354);
// 3545
o2 = {};
// 3546
f637880758_0.returns.push(o2);
// 3547
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3548
f637880758_541.returns.push(1373482800354);
// 3549
o2 = {};
// 3550
f637880758_0.returns.push(o2);
// 3551
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3552
f637880758_541.returns.push(1373482800354);
// 3553
o2 = {};
// 3554
f637880758_0.returns.push(o2);
// 3555
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3556
f637880758_541.returns.push(1373482800355);
// 3557
o2 = {};
// 3558
f637880758_0.returns.push(o2);
// 3559
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3560
f637880758_541.returns.push(1373482800356);
// 3561
o2 = {};
// 3562
f637880758_0.returns.push(o2);
// 3563
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3564
f637880758_541.returns.push(1373482800356);
// 3565
o2 = {};
// 3566
f637880758_0.returns.push(o2);
// 3567
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3568
f637880758_541.returns.push(1373482800357);
// 3569
o2 = {};
// 3570
f637880758_0.returns.push(o2);
// 3571
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3572
f637880758_541.returns.push(1373482800357);
// 3573
o2 = {};
// 3574
f637880758_0.returns.push(o2);
// 3575
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3576
f637880758_541.returns.push(1373482800358);
// 3577
o2 = {};
// 3578
f637880758_0.returns.push(o2);
// 3579
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3580
f637880758_541.returns.push(1373482800358);
// 3581
o2 = {};
// 3582
f637880758_0.returns.push(o2);
// 3583
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3584
f637880758_541.returns.push(1373482800358);
// 3585
o2 = {};
// 3586
f637880758_0.returns.push(o2);
// 3587
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3588
f637880758_541.returns.push(1373482800359);
// 3589
o2 = {};
// 3590
f637880758_0.returns.push(o2);
// 3591
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3592
f637880758_541.returns.push(1373482800359);
// 3593
o2 = {};
// 3594
f637880758_0.returns.push(o2);
// 3595
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3596
f637880758_541.returns.push(1373482800359);
// 3597
o2 = {};
// 3598
f637880758_0.returns.push(o2);
// 3599
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3600
f637880758_541.returns.push(1373482800360);
// 3601
o2 = {};
// 3602
f637880758_0.returns.push(o2);
// 3603
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3604
f637880758_541.returns.push(1373482800360);
// 3605
o2 = {};
// 3606
f637880758_0.returns.push(o2);
// 3607
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3608
f637880758_541.returns.push(1373482800360);
// 3609
o2 = {};
// 3610
f637880758_0.returns.push(o2);
// 3611
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3612
f637880758_541.returns.push(1373482800360);
// 3613
o2 = {};
// 3614
f637880758_0.returns.push(o2);
// 3615
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3616
f637880758_541.returns.push(1373482800360);
// 3617
o2 = {};
// 3618
f637880758_0.returns.push(o2);
// 3619
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3620
f637880758_541.returns.push(1373482800361);
// 3621
o2 = {};
// 3622
f637880758_0.returns.push(o2);
// 3623
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3624
f637880758_541.returns.push(1373482800361);
// 3625
o2 = {};
// 3626
f637880758_0.returns.push(o2);
// 3627
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3628
f637880758_541.returns.push(1373482800362);
// 3629
o2 = {};
// 3630
f637880758_0.returns.push(o2);
// 3631
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3632
f637880758_541.returns.push(1373482800362);
// 3633
o2 = {};
// 3634
f637880758_0.returns.push(o2);
// 3635
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3636
f637880758_541.returns.push(1373482800362);
// 3637
o2 = {};
// 3638
f637880758_0.returns.push(o2);
// 3639
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3640
f637880758_541.returns.push(1373482800362);
// 3641
o2 = {};
// 3642
f637880758_0.returns.push(o2);
// 3643
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3644
f637880758_541.returns.push(1373482800363);
// 3645
o2 = {};
// 3646
f637880758_0.returns.push(o2);
// 3647
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3648
f637880758_541.returns.push(1373482800366);
// 3649
o2 = {};
// 3650
f637880758_0.returns.push(o2);
// 3651
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3652
f637880758_541.returns.push(1373482800366);
// 3653
o2 = {};
// 3654
f637880758_0.returns.push(o2);
// 3655
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3656
f637880758_541.returns.push(1373482800367);
// 3657
o2 = {};
// 3658
f637880758_0.returns.push(o2);
// 3659
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3660
f637880758_541.returns.push(1373482800368);
// 3661
o2 = {};
// 3662
f637880758_0.returns.push(o2);
// 3663
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3664
f637880758_541.returns.push(1373482800368);
// 3665
o2 = {};
// 3666
f637880758_0.returns.push(o2);
// 3667
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3668
f637880758_541.returns.push(1373482800369);
// 3669
o2 = {};
// 3670
f637880758_0.returns.push(o2);
// 3671
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3672
f637880758_541.returns.push(1373482800369);
// 3673
o2 = {};
// 3674
f637880758_0.returns.push(o2);
// 3675
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3676
f637880758_541.returns.push(1373482800369);
// 3677
o2 = {};
// 3678
f637880758_0.returns.push(o2);
// 3679
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3680
f637880758_541.returns.push(1373482800370);
// 3681
o2 = {};
// 3682
f637880758_0.returns.push(o2);
// 3683
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3684
f637880758_541.returns.push(1373482800371);
// 3685
o2 = {};
// 3686
f637880758_0.returns.push(o2);
// 3687
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3688
f637880758_541.returns.push(1373482800371);
// 3689
o2 = {};
// 3690
f637880758_0.returns.push(o2);
// 3691
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3692
f637880758_541.returns.push(1373482800371);
// 3693
o2 = {};
// 3694
f637880758_0.returns.push(o2);
// 3695
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3696
f637880758_541.returns.push(1373482800371);
// 3697
o2 = {};
// 3698
f637880758_0.returns.push(o2);
// 3699
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3700
f637880758_541.returns.push(1373482800371);
// 3701
o2 = {};
// 3702
f637880758_0.returns.push(o2);
// 3703
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3704
f637880758_541.returns.push(1373482800371);
// 3705
o2 = {};
// 3706
f637880758_0.returns.push(o2);
// 3707
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3708
f637880758_541.returns.push(1373482800372);
// 3709
o2 = {};
// 3710
f637880758_0.returns.push(o2);
// 3711
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3712
f637880758_541.returns.push(1373482800372);
// 3713
o2 = {};
// 3714
f637880758_0.returns.push(o2);
// 3715
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3716
f637880758_541.returns.push(1373482800372);
// 3717
o2 = {};
// 3718
f637880758_0.returns.push(o2);
// 3719
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3720
f637880758_541.returns.push(1373482800372);
// 3721
o2 = {};
// 3722
f637880758_0.returns.push(o2);
// 3723
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3724
f637880758_541.returns.push(1373482800372);
// 3725
o2 = {};
// 3726
f637880758_0.returns.push(o2);
// 3727
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3728
f637880758_541.returns.push(1373482800373);
// 3729
o2 = {};
// 3730
f637880758_0.returns.push(o2);
// 3731
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3732
f637880758_541.returns.push(1373482800373);
// 3733
o2 = {};
// 3734
f637880758_0.returns.push(o2);
// 3735
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3736
f637880758_541.returns.push(1373482800373);
// 3737
o2 = {};
// 3738
f637880758_0.returns.push(o2);
// 3739
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3740
f637880758_541.returns.push(1373482800374);
// 3741
o2 = {};
// 3742
f637880758_0.returns.push(o2);
// 3743
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3744
f637880758_541.returns.push(1373482800374);
// 3745
o2 = {};
// 3746
f637880758_0.returns.push(o2);
// 3747
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3748
f637880758_541.returns.push(1373482800374);
// 3749
o2 = {};
// 3750
f637880758_0.returns.push(o2);
// 3751
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3752
f637880758_541.returns.push(1373482800374);
// 3753
o2 = {};
// 3754
f637880758_0.returns.push(o2);
// 3755
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3756
f637880758_541.returns.push(1373482800378);
// 3757
o2 = {};
// 3758
f637880758_0.returns.push(o2);
// 3759
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3760
f637880758_541.returns.push(1373482800378);
// 3761
o2 = {};
// 3762
f637880758_0.returns.push(o2);
// 3763
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3764
f637880758_541.returns.push(1373482800378);
// 3765
o2 = {};
// 3766
f637880758_0.returns.push(o2);
// 3767
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3768
f637880758_541.returns.push(1373482800378);
// 3769
o2 = {};
// 3770
f637880758_0.returns.push(o2);
// 3771
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3772
f637880758_541.returns.push(1373482800378);
// 3773
o2 = {};
// 3774
f637880758_0.returns.push(o2);
// 3775
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3776
f637880758_541.returns.push(1373482800378);
// 3777
o2 = {};
// 3778
f637880758_0.returns.push(o2);
// 3779
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3780
f637880758_541.returns.push(1373482800378);
// 3781
o2 = {};
// 3782
f637880758_0.returns.push(o2);
// 3783
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3784
f637880758_541.returns.push(1373482800379);
// 3785
o2 = {};
// 3786
f637880758_0.returns.push(o2);
// 3787
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3788
f637880758_541.returns.push(1373482800379);
// 3789
o2 = {};
// 3790
f637880758_0.returns.push(o2);
// 3791
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3792
f637880758_541.returns.push(1373482800379);
// 3793
o2 = {};
// 3794
f637880758_0.returns.push(o2);
// 3795
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3796
f637880758_541.returns.push(1373482800380);
// 3797
o2 = {};
// 3798
f637880758_0.returns.push(o2);
// 3799
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3800
f637880758_541.returns.push(1373482800380);
// 3801
o2 = {};
// 3802
f637880758_0.returns.push(o2);
// 3803
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3804
f637880758_541.returns.push(1373482800381);
// 3805
o2 = {};
// 3806
f637880758_0.returns.push(o2);
// 3807
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3808
f637880758_541.returns.push(1373482800381);
// 3809
o2 = {};
// 3810
f637880758_0.returns.push(o2);
// 3811
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3812
f637880758_541.returns.push(1373482800381);
// 3813
o2 = {};
// 3814
f637880758_0.returns.push(o2);
// 3815
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3816
f637880758_541.returns.push(1373482800382);
// 3817
o2 = {};
// 3818
f637880758_0.returns.push(o2);
// 3819
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3820
f637880758_541.returns.push(1373482800382);
// 3821
o2 = {};
// 3822
f637880758_0.returns.push(o2);
// 3823
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3824
f637880758_541.returns.push(1373482800382);
// 3825
o2 = {};
// 3826
f637880758_0.returns.push(o2);
// 3827
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3828
f637880758_541.returns.push(1373482800382);
// 3829
o2 = {};
// 3830
f637880758_0.returns.push(o2);
// 3831
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3832
f637880758_541.returns.push(1373482800382);
// 3833
o2 = {};
// 3834
f637880758_0.returns.push(o2);
// 3835
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3836
f637880758_541.returns.push(1373482800383);
// 3837
o2 = {};
// 3838
f637880758_0.returns.push(o2);
// 3839
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3840
f637880758_541.returns.push(1373482800383);
// 3841
o2 = {};
// 3842
f637880758_0.returns.push(o2);
// 3843
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3844
f637880758_541.returns.push(1373482800383);
// 3845
o2 = {};
// 3846
f637880758_0.returns.push(o2);
// 3847
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3848
f637880758_541.returns.push(1373482800384);
// 3849
o2 = {};
// 3850
f637880758_0.returns.push(o2);
// 3851
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3852
f637880758_541.returns.push(1373482800385);
// 3853
o2 = {};
// 3854
f637880758_0.returns.push(o2);
// 3855
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3856
f637880758_541.returns.push(1373482800385);
// 3857
o2 = {};
// 3858
f637880758_0.returns.push(o2);
// 3859
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3860
f637880758_541.returns.push(1373482800389);
// 3861
o2 = {};
// 3862
f637880758_0.returns.push(o2);
// 3863
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3864
f637880758_541.returns.push(1373482800390);
// 3865
o2 = {};
// 3866
f637880758_0.returns.push(o2);
// 3867
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3868
f637880758_541.returns.push(1373482800391);
// 3869
o2 = {};
// 3870
f637880758_0.returns.push(o2);
// 3871
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3872
f637880758_541.returns.push(1373482800391);
// 3873
o2 = {};
// 3874
f637880758_0.returns.push(o2);
// 3875
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3876
f637880758_541.returns.push(1373482800391);
// 3877
o2 = {};
// 3878
f637880758_0.returns.push(o2);
// 3879
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3880
f637880758_541.returns.push(1373482800391);
// 3881
o2 = {};
// 3882
f637880758_0.returns.push(o2);
// 3883
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3884
f637880758_541.returns.push(1373482800391);
// 3885
o2 = {};
// 3886
f637880758_0.returns.push(o2);
// 3887
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3888
f637880758_541.returns.push(1373482800391);
// 3889
o2 = {};
// 3890
f637880758_0.returns.push(o2);
// 3891
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3892
f637880758_541.returns.push(1373482800392);
// 3893
o2 = {};
// 3894
f637880758_0.returns.push(o2);
// 3895
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3896
f637880758_541.returns.push(1373482800392);
// 3897
o2 = {};
// 3898
f637880758_0.returns.push(o2);
// 3899
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3900
f637880758_541.returns.push(1373482800393);
// 3901
o2 = {};
// 3902
f637880758_0.returns.push(o2);
// 3903
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3904
f637880758_541.returns.push(1373482800393);
// 3905
o2 = {};
// 3906
f637880758_0.returns.push(o2);
// 3907
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3908
f637880758_541.returns.push(1373482800393);
// 3909
o2 = {};
// 3910
f637880758_0.returns.push(o2);
// 3911
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3912
f637880758_541.returns.push(1373482800394);
// 3913
o2 = {};
// 3914
f637880758_0.returns.push(o2);
// 3915
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3916
f637880758_541.returns.push(1373482800394);
// 3917
o2 = {};
// 3918
f637880758_0.returns.push(o2);
// 3919
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3920
f637880758_541.returns.push(1373482800394);
// 3921
o2 = {};
// 3922
f637880758_0.returns.push(o2);
// 3923
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3924
f637880758_541.returns.push(1373482800395);
// 3925
o2 = {};
// 3926
f637880758_0.returns.push(o2);
// 3927
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3928
f637880758_541.returns.push(1373482800395);
// 3929
o2 = {};
// 3930
f637880758_0.returns.push(o2);
// 3931
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3932
f637880758_541.returns.push(1373482800395);
// 3933
o2 = {};
// 3934
f637880758_0.returns.push(o2);
// 3935
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3936
f637880758_541.returns.push(1373482800395);
// 3937
o2 = {};
// 3938
f637880758_0.returns.push(o2);
// 3939
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3940
f637880758_541.returns.push(1373482800396);
// 3941
o2 = {};
// 3942
f637880758_0.returns.push(o2);
// 3943
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3944
f637880758_541.returns.push(1373482800396);
// 3945
o2 = {};
// 3946
f637880758_0.returns.push(o2);
// 3947
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3948
f637880758_541.returns.push(1373482800397);
// 3949
o2 = {};
// 3950
f637880758_0.returns.push(o2);
// 3951
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3952
f637880758_541.returns.push(1373482800398);
// 3953
o2 = {};
// 3954
f637880758_0.returns.push(o2);
// 3955
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3956
f637880758_541.returns.push(1373482800398);
// 3957
o2 = {};
// 3958
f637880758_0.returns.push(o2);
// 3959
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3960
f637880758_541.returns.push(1373482800398);
// 3961
o2 = {};
// 3962
f637880758_0.returns.push(o2);
// 3963
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3964
f637880758_541.returns.push(1373482800399);
// 3965
o2 = {};
// 3966
f637880758_0.returns.push(o2);
// 3967
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3968
f637880758_541.returns.push(1373482800403);
// 3969
o2 = {};
// 3970
f637880758_0.returns.push(o2);
// 3971
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3972
f637880758_541.returns.push(1373482800403);
// 3973
o2 = {};
// 3974
f637880758_0.returns.push(o2);
// 3975
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3976
f637880758_541.returns.push(1373482800406);
// 3977
o2 = {};
// 3978
f637880758_0.returns.push(o2);
// 3979
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3980
f637880758_541.returns.push(1373482800406);
// 3981
o2 = {};
// 3982
f637880758_0.returns.push(o2);
// 3983
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3984
f637880758_541.returns.push(1373482800406);
// 3985
o2 = {};
// 3986
f637880758_0.returns.push(o2);
// 3987
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3988
f637880758_541.returns.push(1373482800406);
// 3989
o2 = {};
// 3990
f637880758_0.returns.push(o2);
// 3991
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3992
f637880758_541.returns.push(1373482800407);
// 3993
o2 = {};
// 3994
f637880758_0.returns.push(o2);
// 3995
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 3996
f637880758_541.returns.push(1373482800407);
// 3997
o2 = {};
// 3998
f637880758_0.returns.push(o2);
// 3999
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4000
f637880758_541.returns.push(1373482800408);
// 4001
o2 = {};
// 4002
f637880758_0.returns.push(o2);
// 4003
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4004
f637880758_541.returns.push(1373482800408);
// 4005
o2 = {};
// 4006
f637880758_0.returns.push(o2);
// 4007
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4008
f637880758_541.returns.push(1373482800408);
// 4009
o2 = {};
// 4010
f637880758_0.returns.push(o2);
// 4011
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4012
f637880758_541.returns.push(1373482800408);
// 4013
o2 = {};
// 4014
f637880758_0.returns.push(o2);
// 4015
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4016
f637880758_541.returns.push(1373482800409);
// 4017
o2 = {};
// 4018
f637880758_0.returns.push(o2);
// 4019
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4020
f637880758_541.returns.push(1373482800409);
// 4021
o2 = {};
// 4022
f637880758_0.returns.push(o2);
// 4023
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4024
f637880758_541.returns.push(1373482800410);
// 4025
o2 = {};
// 4026
f637880758_0.returns.push(o2);
// 4027
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4028
f637880758_541.returns.push(1373482800412);
// 4029
o2 = {};
// 4030
f637880758_0.returns.push(o2);
// 4031
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4032
f637880758_541.returns.push(1373482800412);
// 4033
o2 = {};
// 4034
f637880758_0.returns.push(o2);
// 4035
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4036
f637880758_541.returns.push(1373482800412);
// 4037
o2 = {};
// 4038
f637880758_0.returns.push(o2);
// 4039
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4040
f637880758_541.returns.push(1373482800414);
// 4041
o2 = {};
// 4042
f637880758_0.returns.push(o2);
// 4043
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4044
f637880758_541.returns.push(1373482800414);
// 4045
o2 = {};
// 4046
f637880758_0.returns.push(o2);
// 4047
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4048
f637880758_541.returns.push(1373482800414);
// 4049
o2 = {};
// 4050
f637880758_0.returns.push(o2);
// 4051
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4052
f637880758_541.returns.push(1373482800414);
// 4053
o2 = {};
// 4054
f637880758_0.returns.push(o2);
// 4055
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4056
f637880758_541.returns.push(1373482800415);
// 4057
o2 = {};
// 4058
f637880758_0.returns.push(o2);
// 4059
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4060
f637880758_541.returns.push(1373482800415);
// 4061
o2 = {};
// 4062
f637880758_0.returns.push(o2);
// 4063
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4064
f637880758_541.returns.push(1373482800415);
// 4065
o2 = {};
// 4066
f637880758_0.returns.push(o2);
// 4067
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4068
f637880758_541.returns.push(1373482800415);
// 4069
o2 = {};
// 4070
f637880758_0.returns.push(o2);
// 4071
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4072
f637880758_541.returns.push(1373482800421);
// 4073
o2 = {};
// 4074
f637880758_0.returns.push(o2);
// 4075
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4076
f637880758_541.returns.push(1373482800421);
// 4077
o2 = {};
// 4078
f637880758_0.returns.push(o2);
// 4079
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4080
f637880758_541.returns.push(1373482800422);
// 4081
o2 = {};
// 4082
f637880758_0.returns.push(o2);
// 4083
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4084
f637880758_541.returns.push(1373482800422);
// 4085
o2 = {};
// 4086
f637880758_0.returns.push(o2);
// 4087
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4088
f637880758_541.returns.push(1373482800423);
// 4089
o2 = {};
// 4090
f637880758_0.returns.push(o2);
// 4091
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4092
f637880758_541.returns.push(1373482800423);
// 4093
o2 = {};
// 4094
f637880758_0.returns.push(o2);
// 4095
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4096
f637880758_541.returns.push(1373482800423);
// 4097
o2 = {};
// 4098
f637880758_0.returns.push(o2);
// 4099
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4100
f637880758_541.returns.push(1373482800424);
// 4101
o2 = {};
// 4102
f637880758_0.returns.push(o2);
// 4103
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4104
f637880758_541.returns.push(1373482800424);
// 4105
o2 = {};
// 4106
f637880758_0.returns.push(o2);
// 4107
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4108
f637880758_541.returns.push(1373482800425);
// 4109
o2 = {};
// 4110
f637880758_0.returns.push(o2);
// 4111
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4112
f637880758_541.returns.push(1373482800425);
// 4113
o2 = {};
// 4114
f637880758_0.returns.push(o2);
// 4115
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4116
f637880758_541.returns.push(1373482800426);
// 4117
o2 = {};
// 4118
f637880758_0.returns.push(o2);
// 4119
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4120
f637880758_541.returns.push(1373482800426);
// 4121
o2 = {};
// 4122
f637880758_0.returns.push(o2);
// 4123
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4124
f637880758_541.returns.push(1373482800427);
// 4125
o2 = {};
// 4126
f637880758_0.returns.push(o2);
// 4127
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4128
f637880758_541.returns.push(1373482800427);
// 4129
o2 = {};
// 4130
f637880758_0.returns.push(o2);
// 4131
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4132
f637880758_541.returns.push(1373482800427);
// 4133
o2 = {};
// 4134
f637880758_0.returns.push(o2);
// 4135
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4136
f637880758_541.returns.push(1373482800428);
// 4137
o2 = {};
// 4138
f637880758_0.returns.push(o2);
// 4139
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4140
f637880758_541.returns.push(1373482800428);
// 4141
o2 = {};
// 4142
f637880758_0.returns.push(o2);
// 4143
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4144
f637880758_541.returns.push(1373482800429);
// 4145
o2 = {};
// 4146
f637880758_0.returns.push(o2);
// 4147
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4148
f637880758_541.returns.push(1373482800429);
// 4149
o2 = {};
// 4150
f637880758_0.returns.push(o2);
// 4151
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4152
f637880758_541.returns.push(1373482800429);
// 4153
o2 = {};
// 4154
f637880758_0.returns.push(o2);
// 4155
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4156
f637880758_541.returns.push(1373482800429);
// 4157
o2 = {};
// 4158
f637880758_0.returns.push(o2);
// 4159
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4160
f637880758_541.returns.push(1373482800429);
// 4161
o2 = {};
// 4162
f637880758_0.returns.push(o2);
// 4163
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4164
f637880758_541.returns.push(1373482800430);
// 4165
o2 = {};
// 4166
f637880758_0.returns.push(o2);
// 4167
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4168
f637880758_541.returns.push(1373482800430);
// 4169
o2 = {};
// 4170
f637880758_0.returns.push(o2);
// 4171
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4172
f637880758_541.returns.push(1373482800431);
// 4173
o2 = {};
// 4174
f637880758_0.returns.push(o2);
// 4175
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4176
f637880758_541.returns.push(1373482800432);
// 4177
o2 = {};
// 4178
f637880758_0.returns.push(o2);
// 4179
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4180
f637880758_541.returns.push(1373482800436);
// 4181
o2 = {};
// 4182
f637880758_0.returns.push(o2);
// 4183
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4184
f637880758_541.returns.push(1373482800437);
// 4185
o2 = {};
// 4186
f637880758_0.returns.push(o2);
// 4187
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4188
f637880758_541.returns.push(1373482800437);
// 4189
o2 = {};
// 4190
f637880758_0.returns.push(o2);
// 4191
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4192
f637880758_541.returns.push(1373482800437);
// 4193
o2 = {};
// 4194
f637880758_0.returns.push(o2);
// 4195
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4196
f637880758_541.returns.push(1373482800438);
// 4197
o2 = {};
// 4198
f637880758_0.returns.push(o2);
// 4199
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4200
f637880758_541.returns.push(1373482800439);
// 4201
o2 = {};
// 4202
f637880758_0.returns.push(o2);
// 4203
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4204
f637880758_541.returns.push(1373482800439);
// 4205
o2 = {};
// 4206
f637880758_0.returns.push(o2);
// 4207
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4208
f637880758_541.returns.push(1373482800439);
// 4209
o2 = {};
// 4210
f637880758_0.returns.push(o2);
// 4211
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4212
f637880758_541.returns.push(1373482800439);
// 4213
o2 = {};
// 4214
f637880758_0.returns.push(o2);
// 4215
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4216
f637880758_541.returns.push(1373482800442);
// 4217
o2 = {};
// 4218
f637880758_0.returns.push(o2);
// 4219
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4220
f637880758_541.returns.push(1373482800442);
// 4221
o2 = {};
// 4222
f637880758_0.returns.push(o2);
// 4223
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4224
f637880758_541.returns.push(1373482800442);
// 4225
o2 = {};
// 4226
f637880758_0.returns.push(o2);
// 4227
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4228
f637880758_541.returns.push(1373482800443);
// 4229
o2 = {};
// 4230
f637880758_0.returns.push(o2);
// 4231
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4232
f637880758_541.returns.push(1373482800443);
// 4233
o2 = {};
// 4234
f637880758_0.returns.push(o2);
// 4235
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4236
f637880758_541.returns.push(1373482800443);
// 4237
o2 = {};
// 4238
f637880758_0.returns.push(o2);
// 4239
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4240
f637880758_541.returns.push(1373482800443);
// 4241
o2 = {};
// 4242
f637880758_0.returns.push(o2);
// 4243
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4244
f637880758_541.returns.push(1373482800443);
// 4245
o2 = {};
// 4246
f637880758_0.returns.push(o2);
// 4247
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4248
f637880758_541.returns.push(1373482800444);
// 4249
o2 = {};
// 4250
f637880758_0.returns.push(o2);
// 4251
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4252
f637880758_541.returns.push(1373482800444);
// 4253
o2 = {};
// 4254
f637880758_0.returns.push(o2);
// 4255
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4256
f637880758_541.returns.push(1373482800444);
// 4257
o2 = {};
// 4258
f637880758_0.returns.push(o2);
// 4259
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4260
f637880758_541.returns.push(1373482800445);
// 4261
o2 = {};
// 4262
f637880758_0.returns.push(o2);
// 4263
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4264
f637880758_541.returns.push(1373482800446);
// 4265
o2 = {};
// 4266
f637880758_0.returns.push(o2);
// 4267
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4268
f637880758_541.returns.push(1373482800446);
// 4269
o2 = {};
// 4270
f637880758_0.returns.push(o2);
// 4271
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4272
f637880758_541.returns.push(1373482800447);
// 4273
o2 = {};
// 4274
f637880758_0.returns.push(o2);
// 4275
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4276
f637880758_541.returns.push(1373482800447);
// 4277
o2 = {};
// 4278
f637880758_0.returns.push(o2);
// 4279
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4280
f637880758_541.returns.push(1373482800447);
// 4281
o2 = {};
// 4282
f637880758_0.returns.push(o2);
// 4283
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4284
f637880758_541.returns.push(1373482800456);
// 4285
o2 = {};
// 4286
f637880758_0.returns.push(o2);
// 4287
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4288
f637880758_541.returns.push(1373482800457);
// 4289
o2 = {};
// 4290
f637880758_0.returns.push(o2);
// 4291
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4292
f637880758_541.returns.push(1373482800457);
// 4293
o2 = {};
// 4294
f637880758_0.returns.push(o2);
// 4295
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4296
f637880758_541.returns.push(1373482800457);
// 4297
o2 = {};
// 4298
f637880758_0.returns.push(o2);
// 4299
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4300
f637880758_541.returns.push(1373482800457);
// 4301
o2 = {};
// 4302
f637880758_0.returns.push(o2);
// 4303
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4304
f637880758_541.returns.push(1373482800457);
// 4305
o2 = {};
// 4306
f637880758_0.returns.push(o2);
// 4307
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4308
f637880758_541.returns.push(1373482800458);
// 4309
o2 = {};
// 4310
f637880758_0.returns.push(o2);
// 4311
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4312
f637880758_541.returns.push(1373482800459);
// 4313
o2 = {};
// 4314
f637880758_0.returns.push(o2);
// 4315
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4316
f637880758_541.returns.push(1373482800459);
// 4317
o2 = {};
// 4318
f637880758_0.returns.push(o2);
// 4319
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4320
f637880758_541.returns.push(1373482800459);
// 4321
o2 = {};
// 4322
f637880758_0.returns.push(o2);
// 4323
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4324
f637880758_541.returns.push(1373482800459);
// 4325
o2 = {};
// 4326
f637880758_0.returns.push(o2);
// 4327
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4328
f637880758_541.returns.push(1373482800460);
// 4329
o2 = {};
// 4330
f637880758_0.returns.push(o2);
// 4331
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4332
f637880758_541.returns.push(1373482800460);
// 4333
o2 = {};
// 4334
f637880758_0.returns.push(o2);
// 4335
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4336
f637880758_541.returns.push(1373482800460);
// 4337
o2 = {};
// 4338
f637880758_0.returns.push(o2);
// 4339
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4340
f637880758_541.returns.push(1373482800460);
// 4341
o2 = {};
// 4342
f637880758_0.returns.push(o2);
// 4343
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4344
f637880758_541.returns.push(1373482800462);
// 4345
o2 = {};
// 4346
f637880758_0.returns.push(o2);
// 4347
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4348
f637880758_541.returns.push(1373482800463);
// 4349
o2 = {};
// 4350
f637880758_0.returns.push(o2);
// 4351
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4352
f637880758_541.returns.push(1373482800463);
// 4353
o2 = {};
// 4354
f637880758_0.returns.push(o2);
// 4355
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4356
f637880758_541.returns.push(1373482800463);
// 4357
o2 = {};
// 4358
f637880758_0.returns.push(o2);
// 4359
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4360
f637880758_541.returns.push(1373482800465);
// 4361
o2 = {};
// 4362
f637880758_0.returns.push(o2);
// 4363
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4364
f637880758_541.returns.push(1373482800465);
// 4365
o2 = {};
// 4366
f637880758_0.returns.push(o2);
// 4367
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4368
f637880758_541.returns.push(1373482800465);
// 4369
o2 = {};
// 4370
f637880758_0.returns.push(o2);
// 4371
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4372
f637880758_541.returns.push(1373482800465);
// 4373
o2 = {};
// 4374
f637880758_0.returns.push(o2);
// 4375
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4376
f637880758_541.returns.push(1373482800465);
// 4377
o2 = {};
// 4378
f637880758_0.returns.push(o2);
// 4379
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4380
f637880758_541.returns.push(1373482800466);
// 4381
o2 = {};
// 4382
f637880758_0.returns.push(o2);
// 4383
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4384
f637880758_541.returns.push(1373482800466);
// 4385
o2 = {};
// 4386
f637880758_0.returns.push(o2);
// 4387
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4388
f637880758_541.returns.push(1373482800466);
// 4389
o2 = {};
// 4390
f637880758_0.returns.push(o2);
// 4391
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4392
f637880758_541.returns.push(1373482800471);
// 4393
o2 = {};
// 4394
f637880758_0.returns.push(o2);
// 4395
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4396
f637880758_541.returns.push(1373482800471);
// 4397
o2 = {};
// 4398
f637880758_0.returns.push(o2);
// 4399
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4400
f637880758_541.returns.push(1373482800471);
// 4401
o2 = {};
// 4402
f637880758_0.returns.push(o2);
// 4403
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4404
f637880758_541.returns.push(1373482800472);
// 4405
o2 = {};
// 4406
f637880758_0.returns.push(o2);
// 4407
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4408
f637880758_541.returns.push(1373482800472);
// 4409
o2 = {};
// 4410
f637880758_0.returns.push(o2);
// 4411
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4412
f637880758_541.returns.push(1373482800472);
// 4413
o2 = {};
// 4414
f637880758_0.returns.push(o2);
// 4415
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4416
f637880758_541.returns.push(1373482800473);
// 4417
o2 = {};
// 4418
f637880758_0.returns.push(o2);
// 4419
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4420
f637880758_541.returns.push(1373482800473);
// 4421
o2 = {};
// 4422
f637880758_0.returns.push(o2);
// 4423
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4424
f637880758_541.returns.push(1373482800473);
// 4425
o2 = {};
// 4426
f637880758_0.returns.push(o2);
// 4427
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4428
f637880758_541.returns.push(1373482800473);
// 4429
o2 = {};
// 4430
f637880758_0.returns.push(o2);
// 4431
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4432
f637880758_541.returns.push(1373482800473);
// 4433
o2 = {};
// 4434
f637880758_0.returns.push(o2);
// 4435
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4436
f637880758_541.returns.push(1373482800474);
// 4437
o2 = {};
// 4438
f637880758_0.returns.push(o2);
// 4439
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4440
f637880758_541.returns.push(1373482800474);
// 4441
o2 = {};
// 4442
f637880758_0.returns.push(o2);
// 4443
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4444
f637880758_541.returns.push(1373482800474);
// 4445
o2 = {};
// 4446
f637880758_0.returns.push(o2);
// 4447
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4448
f637880758_541.returns.push(1373482800475);
// 4449
o2 = {};
// 4450
f637880758_0.returns.push(o2);
// 4451
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4452
f637880758_541.returns.push(1373482800475);
// 4453
o2 = {};
// 4454
f637880758_0.returns.push(o2);
// 4455
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4456
f637880758_541.returns.push(1373482800475);
// 4457
o2 = {};
// 4458
f637880758_0.returns.push(o2);
// 4459
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4460
f637880758_541.returns.push(1373482800475);
// 4461
o2 = {};
// 4462
f637880758_0.returns.push(o2);
// 4463
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4464
f637880758_541.returns.push(1373482800476);
// 4465
o2 = {};
// 4466
f637880758_0.returns.push(o2);
// 4467
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4468
f637880758_541.returns.push(1373482800476);
// 4469
o2 = {};
// 4470
f637880758_0.returns.push(o2);
// 4471
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4472
f637880758_541.returns.push(1373482800476);
// 4473
o2 = {};
// 4474
f637880758_0.returns.push(o2);
// 4475
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4476
f637880758_541.returns.push(1373482800478);
// 4477
o2 = {};
// 4478
f637880758_0.returns.push(o2);
// 4479
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4480
f637880758_541.returns.push(1373482800478);
// 4481
o2 = {};
// 4482
f637880758_0.returns.push(o2);
// 4483
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4484
f637880758_541.returns.push(1373482800478);
// 4485
o2 = {};
// 4486
f637880758_0.returns.push(o2);
// 4487
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4488
f637880758_541.returns.push(1373482800479);
// 4489
o2 = {};
// 4490
f637880758_0.returns.push(o2);
// 4491
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4492
f637880758_541.returns.push(1373482800480);
// 4493
o2 = {};
// 4494
f637880758_0.returns.push(o2);
// 4495
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4496
f637880758_541.returns.push(1373482800484);
// 4497
o2 = {};
// 4498
f637880758_0.returns.push(o2);
// 4499
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4500
f637880758_541.returns.push(1373482800484);
// 4501
o2 = {};
// 4502
f637880758_0.returns.push(o2);
// 4503
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4504
f637880758_541.returns.push(1373482800487);
// 4505
o2 = {};
// 4506
f637880758_0.returns.push(o2);
// 4507
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4508
f637880758_541.returns.push(1373482800487);
// 4509
o2 = {};
// 4510
f637880758_0.returns.push(o2);
// 4511
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4512
f637880758_541.returns.push(1373482800487);
// 4513
o2 = {};
// 4514
f637880758_0.returns.push(o2);
// 4515
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4516
f637880758_541.returns.push(1373482800488);
// 4517
o2 = {};
// 4518
f637880758_0.returns.push(o2);
// 4519
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4520
f637880758_541.returns.push(1373482800488);
// 4521
o2 = {};
// 4522
f637880758_0.returns.push(o2);
// 4523
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4524
f637880758_541.returns.push(1373482800488);
// 4525
o2 = {};
// 4526
f637880758_0.returns.push(o2);
// 4527
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4528
f637880758_541.returns.push(1373482800488);
// 4529
o2 = {};
// 4530
f637880758_0.returns.push(o2);
// 4531
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4532
f637880758_541.returns.push(1373482800490);
// 4533
o2 = {};
// 4534
f637880758_0.returns.push(o2);
// 4535
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4536
f637880758_541.returns.push(1373482800490);
// 4537
o2 = {};
// 4538
f637880758_0.returns.push(o2);
// 4539
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4540
f637880758_541.returns.push(1373482800491);
// 4541
o2 = {};
// 4542
f637880758_0.returns.push(o2);
// 4543
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4544
f637880758_541.returns.push(1373482800492);
// 4545
o2 = {};
// 4546
f637880758_0.returns.push(o2);
// 4547
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4548
f637880758_541.returns.push(1373482800493);
// 4549
o2 = {};
// 4550
f637880758_0.returns.push(o2);
// 4551
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4552
f637880758_541.returns.push(1373482800494);
// 4553
o2 = {};
// 4554
f637880758_0.returns.push(o2);
// 4555
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4556
f637880758_541.returns.push(1373482800494);
// 4557
o2 = {};
// 4558
f637880758_0.returns.push(o2);
// 4559
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4560
f637880758_541.returns.push(1373482800494);
// 4561
o2 = {};
// 4562
f637880758_0.returns.push(o2);
// 4563
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4564
f637880758_541.returns.push(1373482800495);
// 4565
o2 = {};
// 4566
f637880758_0.returns.push(o2);
// 4567
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4568
f637880758_541.returns.push(1373482800495);
// 4569
o2 = {};
// 4570
f637880758_0.returns.push(o2);
// 4571
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4572
f637880758_541.returns.push(1373482800495);
// 4573
o2 = {};
// 4574
f637880758_0.returns.push(o2);
// 4575
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4576
f637880758_541.returns.push(1373482800495);
// 4577
o2 = {};
// 4578
f637880758_0.returns.push(o2);
// 4579
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4580
f637880758_541.returns.push(1373482800496);
// 4581
o2 = {};
// 4582
f637880758_0.returns.push(o2);
// 4583
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4584
f637880758_541.returns.push(1373482800496);
// 4585
o2 = {};
// 4586
f637880758_0.returns.push(o2);
// 4587
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4588
f637880758_541.returns.push(1373482800497);
// 4589
o2 = {};
// 4590
f637880758_0.returns.push(o2);
// 4591
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4592
f637880758_541.returns.push(1373482800497);
// 4593
o2 = {};
// 4594
f637880758_0.returns.push(o2);
// 4595
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4596
f637880758_541.returns.push(1373482800497);
// 4597
o2 = {};
// 4598
f637880758_0.returns.push(o2);
// 4599
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4600
f637880758_541.returns.push(1373482800497);
// 4601
o2 = {};
// 4602
f637880758_0.returns.push(o2);
// 4603
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4604
f637880758_541.returns.push(1373482800501);
// 4606
o2 = {};
// 4607
f637880758_474.returns.push(o2);
// 4608
o9 = {};
// 4609
o2.style = o9;
// undefined
o2 = null;
// undefined
o9 = null;
// 4610
o2 = {};
// 4611
f637880758_0.returns.push(o2);
// 4612
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4613
f637880758_541.returns.push(1373482800503);
// 4614
o2 = {};
// 4615
f637880758_0.returns.push(o2);
// 4616
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4617
f637880758_541.returns.push(1373482800503);
// 4618
o2 = {};
// 4619
f637880758_0.returns.push(o2);
// 4620
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4621
f637880758_541.returns.push(1373482800503);
// 4622
o2 = {};
// 4623
f637880758_0.returns.push(o2);
// 4624
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4625
f637880758_541.returns.push(1373482800503);
// 4626
o2 = {};
// 4627
f637880758_0.returns.push(o2);
// 4628
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4629
f637880758_541.returns.push(1373482800503);
// 4630
o2 = {};
// 4631
f637880758_0.returns.push(o2);
// 4632
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4633
f637880758_541.returns.push(1373482800504);
// 4634
o2 = {};
// 4635
f637880758_0.returns.push(o2);
// 4636
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4637
f637880758_541.returns.push(1373482800509);
// 4638
o2 = {};
// 4639
f637880758_0.returns.push(o2);
// 4640
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4641
f637880758_541.returns.push(1373482800509);
// 4642
o2 = {};
// 4643
f637880758_0.returns.push(o2);
// 4644
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4645
f637880758_541.returns.push(1373482800509);
// 4646
o2 = {};
// 4647
f637880758_0.returns.push(o2);
// 4648
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4649
f637880758_541.returns.push(1373482800510);
// 4650
o2 = {};
// 4651
f637880758_0.returns.push(o2);
// 4652
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4653
f637880758_541.returns.push(1373482800510);
// 4654
o2 = {};
// 4655
f637880758_0.returns.push(o2);
// 4656
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4657
f637880758_541.returns.push(1373482800511);
// 4658
o2 = {};
// 4659
f637880758_0.returns.push(o2);
// 4660
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4661
f637880758_541.returns.push(1373482800511);
// 4662
o2 = {};
// 4663
f637880758_0.returns.push(o2);
// 4664
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4665
f637880758_541.returns.push(1373482800511);
// 4666
o2 = {};
// 4667
f637880758_0.returns.push(o2);
// 4668
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4669
f637880758_541.returns.push(1373482800512);
// 4670
o2 = {};
// 4671
f637880758_0.returns.push(o2);
// 4672
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4673
f637880758_541.returns.push(1373482800512);
// 4674
o2 = {};
// 4675
f637880758_0.returns.push(o2);
// 4676
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4677
f637880758_541.returns.push(1373482800513);
// 4678
o2 = {};
// 4679
f637880758_0.returns.push(o2);
// 4680
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4681
f637880758_541.returns.push(1373482800513);
// 4682
o2 = {};
// 4683
f637880758_0.returns.push(o2);
// 4684
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4685
f637880758_541.returns.push(1373482800514);
// 4686
o2 = {};
// 4687
f637880758_0.returns.push(o2);
// 4688
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4689
f637880758_541.returns.push(1373482800515);
// 4690
o2 = {};
// 4691
f637880758_0.returns.push(o2);
// 4692
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4693
f637880758_541.returns.push(1373482800515);
// 4694
o2 = {};
// 4695
f637880758_0.returns.push(o2);
// 4696
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4697
f637880758_541.returns.push(1373482800515);
// 4698
o2 = {};
// 4699
f637880758_0.returns.push(o2);
// 4700
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4701
f637880758_541.returns.push(1373482800515);
// 4702
o2 = {};
// 4703
f637880758_0.returns.push(o2);
// 4704
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4705
f637880758_541.returns.push(1373482800516);
// 4706
o2 = {};
// 4707
f637880758_0.returns.push(o2);
// 4708
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4709
f637880758_541.returns.push(1373482800522);
// 4710
o2 = {};
// 4711
f637880758_0.returns.push(o2);
// 4712
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4713
f637880758_541.returns.push(1373482800522);
// 4714
o2 = {};
// 4715
f637880758_0.returns.push(o2);
// 4716
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4717
f637880758_541.returns.push(1373482800523);
// 4718
o2 = {};
// 4719
f637880758_0.returns.push(o2);
// 4720
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4721
f637880758_541.returns.push(1373482800523);
// 4722
o2 = {};
// 4723
f637880758_0.returns.push(o2);
// 4724
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4725
f637880758_541.returns.push(1373482800523);
// 4726
o2 = {};
// 4727
f637880758_0.returns.push(o2);
// 4728
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4729
f637880758_541.returns.push(1373482800523);
// 4730
o2 = {};
// 4731
f637880758_0.returns.push(o2);
// 4732
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4733
f637880758_541.returns.push(1373482800524);
// 4734
o2 = {};
// 4735
f637880758_0.returns.push(o2);
// 4736
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4737
f637880758_541.returns.push(1373482800524);
// 4738
o2 = {};
// 4739
f637880758_0.returns.push(o2);
// 4740
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4741
f637880758_541.returns.push(1373482800525);
// 4742
o2 = {};
// 4743
f637880758_0.returns.push(o2);
// 4744
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4745
f637880758_541.returns.push(1373482800525);
// 4746
o2 = {};
// 4747
f637880758_0.returns.push(o2);
// 4748
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4749
f637880758_541.returns.push(1373482800525);
// 4750
o2 = {};
// 4751
f637880758_0.returns.push(o2);
// 4752
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4753
f637880758_541.returns.push(1373482800525);
// 4754
o2 = {};
// 4755
f637880758_0.returns.push(o2);
// 4756
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4757
f637880758_541.returns.push(1373482800526);
// 4758
o2 = {};
// 4759
f637880758_0.returns.push(o2);
// 4760
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4761
f637880758_541.returns.push(1373482800526);
// 4762
o2 = {};
// 4763
f637880758_0.returns.push(o2);
// 4764
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4765
f637880758_541.returns.push(1373482800526);
// 4766
o2 = {};
// 4767
f637880758_0.returns.push(o2);
// 4768
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4769
f637880758_541.returns.push(1373482800526);
// 4770
o2 = {};
// 4771
f637880758_0.returns.push(o2);
// 4772
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4773
f637880758_541.returns.push(1373482800526);
// 4774
o2 = {};
// 4775
f637880758_0.returns.push(o2);
// 4776
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4777
f637880758_541.returns.push(1373482800527);
// 4778
o2 = {};
// 4779
f637880758_0.returns.push(o2);
// 4780
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4781
f637880758_541.returns.push(1373482800527);
// 4782
o2 = {};
// 4783
f637880758_0.returns.push(o2);
// 4784
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4785
f637880758_541.returns.push(1373482800528);
// 4786
o2 = {};
// 4787
f637880758_0.returns.push(o2);
// 4788
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4789
f637880758_541.returns.push(1373482800528);
// 4790
o2 = {};
// 4791
f637880758_0.returns.push(o2);
// 4792
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4793
f637880758_541.returns.push(1373482800528);
// 4794
o2 = {};
// 4795
f637880758_0.returns.push(o2);
// 4796
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4797
f637880758_541.returns.push(1373482800528);
// 4798
o2 = {};
// 4799
f637880758_0.returns.push(o2);
// 4800
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4801
f637880758_541.returns.push(1373482800529);
// 4802
o2 = {};
// 4803
f637880758_0.returns.push(o2);
// 4804
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4805
f637880758_541.returns.push(1373482800529);
// 4806
o2 = {};
// 4807
f637880758_0.returns.push(o2);
// 4808
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4809
f637880758_541.returns.push(1373482800529);
// 4810
o2 = {};
// 4811
f637880758_0.returns.push(o2);
// 4812
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4813
f637880758_541.returns.push(1373482800529);
// 4814
o2 = {};
// 4815
f637880758_0.returns.push(o2);
// 4816
o2.getTime = f637880758_541;
// undefined
o2 = null;
// 4817
f637880758_541.returns.push(1373482800562);
// 4819
// 4820
// 4821
// 4822
// 4824
o2 = {};
// 4826
o2.type = "load";
// 4827
// undefined
o8 = null;
// 4828
o8 = {};
// 4829
f637880758_0.returns.push(o8);
// 4830
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4831
f637880758_541.returns.push(1373482801658);
// 4832
o8 = {};
// 4833
f637880758_0.returns.push(o8);
// 4834
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4835
f637880758_541.returns.push(1373482801658);
// 4836
o8 = {};
// 4837
f637880758_0.returns.push(o8);
// 4838
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4839
f637880758_541.returns.push(1373482801660);
// 4840
o8 = {};
// 4841
f637880758_0.returns.push(o8);
// 4842
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4843
f637880758_541.returns.push(1373482801660);
// 4844
o8 = {};
// 4845
f637880758_0.returns.push(o8);
// 4846
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4847
f637880758_541.returns.push(1373482801661);
// 4848
o8 = {};
// 4849
f637880758_0.returns.push(o8);
// 4850
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4851
f637880758_541.returns.push(1373482801661);
// 4852
o8 = {};
// 4853
f637880758_0.returns.push(o8);
// 4854
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4855
f637880758_541.returns.push(1373482801661);
// 4856
o8 = {};
// 4857
f637880758_0.returns.push(o8);
// 4858
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4859
f637880758_541.returns.push(1373482801662);
// 4860
o8 = {};
// 4861
f637880758_0.returns.push(o8);
// 4862
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4863
f637880758_541.returns.push(1373482801662);
// 4864
o8 = {};
// 4865
f637880758_0.returns.push(o8);
// 4866
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4867
f637880758_541.returns.push(1373482801662);
// 4868
o8 = {};
// 4869
f637880758_0.returns.push(o8);
// 4870
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4871
f637880758_541.returns.push(1373482801662);
// 4872
o8 = {};
// 4873
f637880758_0.returns.push(o8);
// 4874
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4875
f637880758_541.returns.push(1373482801662);
// 4876
o8 = {};
// 4877
f637880758_0.returns.push(o8);
// 4878
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4879
f637880758_541.returns.push(1373482801662);
// 4880
o8 = {};
// 4881
f637880758_0.returns.push(o8);
// 4882
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4883
f637880758_541.returns.push(1373482801664);
// 4884
o8 = {};
// 4885
f637880758_0.returns.push(o8);
// 4886
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4887
f637880758_541.returns.push(1373482801664);
// 4888
o8 = {};
// 4889
f637880758_0.returns.push(o8);
// 4890
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4891
f637880758_541.returns.push(1373482801664);
// 4892
o8 = {};
// 4893
f637880758_0.returns.push(o8);
// 4894
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4895
f637880758_541.returns.push(1373482801664);
// 4896
o8 = {};
// 4897
f637880758_0.returns.push(o8);
// 4898
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4899
f637880758_541.returns.push(1373482801664);
// 4900
o8 = {};
// 4901
f637880758_0.returns.push(o8);
// 4902
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4903
f637880758_541.returns.push(1373482801664);
// 4904
o8 = {};
// 4905
f637880758_0.returns.push(o8);
// 4906
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4907
f637880758_541.returns.push(1373482801665);
// 4908
o8 = {};
// 4909
f637880758_0.returns.push(o8);
// 4910
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4911
f637880758_541.returns.push(1373482801665);
// 4912
o8 = {};
// 4913
f637880758_0.returns.push(o8);
// 4914
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4915
f637880758_541.returns.push(1373482801665);
// 4916
o8 = {};
// 4917
f637880758_0.returns.push(o8);
// 4918
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4919
f637880758_541.returns.push(1373482801665);
// 4920
o8 = {};
// 4921
f637880758_0.returns.push(o8);
// 4922
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4923
f637880758_541.returns.push(1373482801665);
// 4924
o8 = {};
// 4925
f637880758_0.returns.push(o8);
// 4926
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4927
f637880758_541.returns.push(1373482801665);
// 4928
o8 = {};
// 4929
f637880758_0.returns.push(o8);
// 4930
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4931
f637880758_541.returns.push(1373482801667);
// 4932
o8 = {};
// 4933
f637880758_0.returns.push(o8);
// 4934
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4935
f637880758_541.returns.push(1373482801670);
// 4936
o8 = {};
// 4937
f637880758_0.returns.push(o8);
// 4938
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4939
f637880758_541.returns.push(1373482801670);
// 4940
o8 = {};
// 4941
f637880758_0.returns.push(o8);
// 4942
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4943
f637880758_541.returns.push(1373482801671);
// 4944
o8 = {};
// 4945
f637880758_0.returns.push(o8);
// 4946
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4947
f637880758_541.returns.push(1373482801671);
// 4948
o8 = {};
// 4949
f637880758_0.returns.push(o8);
// 4950
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4951
f637880758_541.returns.push(1373482801671);
// 4952
o8 = {};
// 4953
f637880758_0.returns.push(o8);
// 4954
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4955
f637880758_541.returns.push(1373482801672);
// 4956
o8 = {};
// 4957
f637880758_0.returns.push(o8);
// 4958
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4959
f637880758_541.returns.push(1373482801672);
// 4960
o8 = {};
// 4961
f637880758_0.returns.push(o8);
// 4962
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4963
f637880758_541.returns.push(1373482801672);
// 4964
o8 = {};
// 4965
f637880758_0.returns.push(o8);
// 4966
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4967
f637880758_541.returns.push(1373482801674);
// 4968
o8 = {};
// 4969
f637880758_0.returns.push(o8);
// 4970
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4971
f637880758_541.returns.push(1373482801674);
// 4972
o8 = {};
// 4973
f637880758_0.returns.push(o8);
// 4974
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4975
f637880758_541.returns.push(1373482801674);
// 4976
o8 = {};
// 4977
f637880758_0.returns.push(o8);
// 4978
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4979
f637880758_541.returns.push(1373482801674);
// 4980
o8 = {};
// 4981
f637880758_0.returns.push(o8);
// 4982
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4983
f637880758_541.returns.push(1373482801674);
// 4984
o8 = {};
// 4985
f637880758_0.returns.push(o8);
// 4986
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4987
f637880758_541.returns.push(1373482801674);
// 4988
o8 = {};
// 4989
f637880758_0.returns.push(o8);
// 4990
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4991
f637880758_541.returns.push(1373482801675);
// 4992
o8 = {};
// 4993
f637880758_0.returns.push(o8);
// 4994
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4995
f637880758_541.returns.push(1373482801675);
// 4996
o8 = {};
// 4997
f637880758_0.returns.push(o8);
// 4998
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 4999
f637880758_541.returns.push(1373482801675);
// 5000
o8 = {};
// 5001
f637880758_0.returns.push(o8);
// 5002
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5003
f637880758_541.returns.push(1373482801677);
// 5004
o8 = {};
// 5005
f637880758_0.returns.push(o8);
// 5006
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5007
f637880758_541.returns.push(1373482801677);
// 5008
o8 = {};
// 5009
f637880758_0.returns.push(o8);
// 5010
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5011
f637880758_541.returns.push(1373482801677);
// 5012
o8 = {};
// 5013
f637880758_0.returns.push(o8);
// 5014
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5015
f637880758_541.returns.push(1373482801677);
// 5016
o8 = {};
// 5017
f637880758_0.returns.push(o8);
// 5018
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5019
f637880758_541.returns.push(1373482801677);
// 5020
o8 = {};
// 5021
f637880758_0.returns.push(o8);
// 5022
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5023
f637880758_541.returns.push(1373482801677);
// 5024
o8 = {};
// 5025
f637880758_0.returns.push(o8);
// 5026
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5027
f637880758_541.returns.push(1373482801677);
// 5028
o8 = {};
// 5029
f637880758_0.returns.push(o8);
// 5030
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5031
f637880758_541.returns.push(1373482801678);
// 5032
o8 = {};
// 5033
f637880758_0.returns.push(o8);
// 5034
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5035
f637880758_541.returns.push(1373482801678);
// 5036
o8 = {};
// 5037
f637880758_0.returns.push(o8);
// 5038
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5039
f637880758_541.returns.push(1373482801685);
// 5040
o8 = {};
// 5041
f637880758_0.returns.push(o8);
// 5042
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5043
f637880758_541.returns.push(1373482801685);
// 5044
o8 = {};
// 5045
f637880758_0.returns.push(o8);
// 5046
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5047
f637880758_541.returns.push(1373482801687);
// 5048
o8 = {};
// 5049
f637880758_0.returns.push(o8);
// 5050
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5051
f637880758_541.returns.push(1373482801687);
// 5052
o8 = {};
// 5053
f637880758_0.returns.push(o8);
// 5054
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5055
f637880758_541.returns.push(1373482801687);
// 5056
o8 = {};
// 5057
f637880758_0.returns.push(o8);
// 5058
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5059
f637880758_541.returns.push(1373482801688);
// 5060
o8 = {};
// 5061
f637880758_0.returns.push(o8);
// 5062
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5063
f637880758_541.returns.push(1373482801688);
// 5064
o8 = {};
// 5065
f637880758_0.returns.push(o8);
// 5066
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5067
f637880758_541.returns.push(1373482801688);
// 5068
o8 = {};
// 5069
f637880758_0.returns.push(o8);
// 5070
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5071
f637880758_541.returns.push(1373482801688);
// 5072
o8 = {};
// 5073
f637880758_0.returns.push(o8);
// 5074
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5075
f637880758_541.returns.push(1373482801689);
// 5076
o8 = {};
// 5077
f637880758_0.returns.push(o8);
// 5078
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5079
f637880758_541.returns.push(1373482801689);
// 5080
o8 = {};
// 5081
f637880758_0.returns.push(o8);
// 5082
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5083
f637880758_541.returns.push(1373482801690);
// 5084
o8 = {};
// 5085
f637880758_0.returns.push(o8);
// 5086
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5087
f637880758_541.returns.push(1373482801690);
// 5088
o8 = {};
// 5089
f637880758_0.returns.push(o8);
// 5090
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5091
f637880758_541.returns.push(1373482801690);
// 5092
o8 = {};
// 5093
f637880758_0.returns.push(o8);
// 5094
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5095
f637880758_541.returns.push(1373482801690);
// 5096
o8 = {};
// 5097
f637880758_0.returns.push(o8);
// 5098
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5099
f637880758_541.returns.push(1373482801691);
// 5100
o8 = {};
// 5101
f637880758_0.returns.push(o8);
// 5102
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5103
f637880758_541.returns.push(1373482801691);
// 5104
o8 = {};
// 5105
f637880758_0.returns.push(o8);
// 5106
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5107
f637880758_541.returns.push(1373482801691);
// 5108
o8 = {};
// 5109
f637880758_0.returns.push(o8);
// 5110
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5111
f637880758_541.returns.push(1373482801691);
// 5112
o8 = {};
// 5113
f637880758_0.returns.push(o8);
// 5114
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5115
f637880758_541.returns.push(1373482801694);
// 5116
o8 = {};
// 5117
f637880758_0.returns.push(o8);
// 5118
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5119
f637880758_541.returns.push(1373482801694);
// 5120
o8 = {};
// 5121
f637880758_0.returns.push(o8);
// 5122
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5123
f637880758_541.returns.push(1373482801694);
// 5124
o8 = {};
// 5125
f637880758_0.returns.push(o8);
// 5126
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5127
f637880758_541.returns.push(1373482801694);
// 5128
o8 = {};
// 5129
f637880758_0.returns.push(o8);
// 5130
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5131
f637880758_541.returns.push(1373482801694);
// 5132
o8 = {};
// 5133
f637880758_0.returns.push(o8);
// 5134
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5135
f637880758_541.returns.push(1373482801694);
// 5136
o8 = {};
// 5137
f637880758_0.returns.push(o8);
// 5138
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5139
f637880758_541.returns.push(1373482801695);
// 5140
o8 = {};
// 5141
f637880758_0.returns.push(o8);
// 5142
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5143
f637880758_541.returns.push(1373482801695);
// 5144
o8 = {};
// 5145
f637880758_0.returns.push(o8);
// 5146
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5147
f637880758_541.returns.push(1373482801699);
// 5148
o8 = {};
// 5149
f637880758_0.returns.push(o8);
// 5150
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5151
f637880758_541.returns.push(1373482801699);
// 5152
o8 = {};
// 5153
f637880758_0.returns.push(o8);
// 5154
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5155
f637880758_541.returns.push(1373482801699);
// 5156
o8 = {};
// 5157
f637880758_0.returns.push(o8);
// 5158
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5159
f637880758_541.returns.push(1373482801705);
// 5160
o8 = {};
// 5161
f637880758_0.returns.push(o8);
// 5162
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5163
f637880758_541.returns.push(1373482801705);
// 5164
o8 = {};
// 5165
f637880758_0.returns.push(o8);
// 5166
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5167
f637880758_541.returns.push(1373482801705);
// 5168
o8 = {};
// 5169
f637880758_0.returns.push(o8);
// 5170
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5171
f637880758_541.returns.push(1373482801706);
// 5172
o8 = {};
// 5173
f637880758_0.returns.push(o8);
// 5174
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5175
f637880758_541.returns.push(1373482801706);
// 5176
o8 = {};
// 5177
f637880758_0.returns.push(o8);
// 5178
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5179
f637880758_541.returns.push(1373482801706);
// 5180
o8 = {};
// 5181
f637880758_0.returns.push(o8);
// 5182
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5183
f637880758_541.returns.push(1373482801706);
// 5184
o8 = {};
// 5185
f637880758_0.returns.push(o8);
// 5186
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5187
f637880758_541.returns.push(1373482801707);
// 5188
o8 = {};
// 5189
f637880758_0.returns.push(o8);
// 5190
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5191
f637880758_541.returns.push(1373482801707);
// 5192
o8 = {};
// 5193
f637880758_0.returns.push(o8);
// 5194
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5195
f637880758_541.returns.push(1373482801707);
// 5196
o8 = {};
// 5197
f637880758_0.returns.push(o8);
// 5198
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5199
f637880758_541.returns.push(1373482801708);
// 5200
o8 = {};
// 5201
f637880758_0.returns.push(o8);
// 5202
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5203
f637880758_541.returns.push(1373482801708);
// 5204
o8 = {};
// 5205
f637880758_0.returns.push(o8);
// 5206
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5207
f637880758_541.returns.push(1373482801708);
// 5208
o5.pathname = "/search";
// 5209
o8 = {};
// 5210
f637880758_0.returns.push(o8);
// 5211
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5212
f637880758_541.returns.push(1373482801709);
// 5213
o8 = {};
// 5214
f637880758_0.returns.push(o8);
// 5215
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5216
f637880758_541.returns.push(1373482801709);
// 5217
o8 = {};
// 5218
f637880758_0.returns.push(o8);
// 5219
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5220
f637880758_541.returns.push(1373482801710);
// 5221
o8 = {};
// 5222
f637880758_0.returns.push(o8);
// 5223
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5224
f637880758_541.returns.push(1373482801710);
// 5225
o8 = {};
// 5226
f637880758_0.returns.push(o8);
// 5227
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5228
f637880758_541.returns.push(1373482801710);
// 5229
o8 = {};
// 5230
f637880758_0.returns.push(o8);
// 5231
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5232
f637880758_541.returns.push(1373482801710);
// 5233
o8 = {};
// 5234
f637880758_0.returns.push(o8);
// 5235
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5236
f637880758_541.returns.push(1373482801710);
// 5237
o8 = {};
// 5238
f637880758_0.returns.push(o8);
// 5239
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5240
f637880758_541.returns.push(1373482801711);
// 5241
o8 = {};
// 5242
f637880758_0.returns.push(o8);
// 5243
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5244
f637880758_541.returns.push(1373482801711);
// 5245
o8 = {};
// 5246
f637880758_0.returns.push(o8);
// 5247
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5248
f637880758_541.returns.push(1373482801711);
// 5249
o8 = {};
// 5250
f637880758_0.returns.push(o8);
// 5251
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5252
f637880758_541.returns.push(1373482801721);
// 5253
o8 = {};
// 5254
f637880758_0.returns.push(o8);
// 5255
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5256
f637880758_541.returns.push(1373482801721);
// 5257
o8 = {};
// 5258
f637880758_0.returns.push(o8);
// 5259
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5260
f637880758_541.returns.push(1373482801721);
// 5261
o8 = {};
// 5262
f637880758_0.returns.push(o8);
// 5263
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5264
f637880758_541.returns.push(1373482801721);
// 5265
o8 = {};
// 5266
f637880758_0.returns.push(o8);
// 5267
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5268
f637880758_541.returns.push(1373482801725);
// 5269
o8 = {};
// 5270
f637880758_0.returns.push(o8);
// 5271
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5272
f637880758_541.returns.push(1373482801725);
// 5273
o8 = {};
// 5274
f637880758_0.returns.push(o8);
// 5275
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5276
f637880758_541.returns.push(1373482801725);
// 5277
o8 = {};
// 5278
f637880758_0.returns.push(o8);
// 5279
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5280
f637880758_541.returns.push(1373482801726);
// 5281
o8 = {};
// 5282
f637880758_0.returns.push(o8);
// 5283
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5284
f637880758_541.returns.push(1373482801726);
// 5285
o8 = {};
// 5286
f637880758_0.returns.push(o8);
// 5287
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5288
f637880758_541.returns.push(1373482801726);
// 5289
o8 = {};
// 5290
f637880758_0.returns.push(o8);
// 5291
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5292
f637880758_541.returns.push(1373482801727);
// 5293
o8 = {};
// 5294
f637880758_0.returns.push(o8);
// 5295
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5296
f637880758_541.returns.push(1373482801727);
// 5297
o8 = {};
// 5298
f637880758_0.returns.push(o8);
// 5299
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5300
f637880758_541.returns.push(1373482801728);
// 5301
o8 = {};
// 5302
f637880758_0.returns.push(o8);
// 5303
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5304
f637880758_541.returns.push(1373482801728);
// 5305
o8 = {};
// 5306
f637880758_0.returns.push(o8);
// 5307
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5308
f637880758_541.returns.push(1373482801728);
// 5309
o8 = {};
// 5310
f637880758_0.returns.push(o8);
// 5311
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5312
f637880758_541.returns.push(1373482801728);
// 5313
o8 = {};
// 5314
f637880758_0.returns.push(o8);
// 5315
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5316
f637880758_541.returns.push(1373482801729);
// 5317
o8 = {};
// 5318
f637880758_0.returns.push(o8);
// 5319
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5320
f637880758_541.returns.push(1373482801729);
// 5321
o8 = {};
// 5322
f637880758_0.returns.push(o8);
// 5323
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5324
f637880758_541.returns.push(1373482801729);
// 5325
o8 = {};
// 5326
f637880758_0.returns.push(o8);
// 5327
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5328
f637880758_541.returns.push(1373482801729);
// 5329
o8 = {};
// 5330
f637880758_0.returns.push(o8);
// 5331
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5332
f637880758_541.returns.push(1373482801729);
// 5333
o8 = {};
// 5334
f637880758_0.returns.push(o8);
// 5335
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5336
f637880758_541.returns.push(1373482801729);
// 5337
o8 = {};
// 5338
f637880758_0.returns.push(o8);
// 5339
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5340
f637880758_541.returns.push(1373482801729);
// 5341
o8 = {};
// 5342
f637880758_0.returns.push(o8);
// 5343
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5344
f637880758_541.returns.push(1373482801729);
// 5345
o8 = {};
// 5346
f637880758_0.returns.push(o8);
// 5347
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5348
f637880758_541.returns.push(1373482801732);
// 5349
o8 = {};
// 5350
f637880758_0.returns.push(o8);
// 5351
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5352
f637880758_541.returns.push(1373482801732);
// 5353
o8 = {};
// 5354
f637880758_0.returns.push(o8);
// 5355
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5356
f637880758_541.returns.push(1373482801733);
// 5357
o8 = {};
// 5358
f637880758_0.returns.push(o8);
// 5359
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5360
f637880758_541.returns.push(1373482801737);
// 5361
o8 = {};
// 5362
f637880758_0.returns.push(o8);
// 5363
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5364
f637880758_541.returns.push(1373482801737);
// 5365
o8 = {};
// 5366
f637880758_0.returns.push(o8);
// 5367
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5368
f637880758_541.returns.push(1373482801737);
// 5369
o8 = {};
// 5370
f637880758_0.returns.push(o8);
// 5371
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5372
f637880758_541.returns.push(1373482801737);
// 5373
o8 = {};
// 5374
f637880758_0.returns.push(o8);
// 5375
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5376
f637880758_541.returns.push(1373482801738);
// 5377
o8 = {};
// 5378
f637880758_0.returns.push(o8);
// 5379
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5380
f637880758_541.returns.push(1373482801738);
// 5381
o8 = {};
// 5382
f637880758_0.returns.push(o8);
// 5383
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5384
f637880758_541.returns.push(1373482801738);
// 5385
o8 = {};
// 5386
f637880758_0.returns.push(o8);
// 5387
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5388
f637880758_541.returns.push(1373482801740);
// 5389
o8 = {};
// 5390
f637880758_0.returns.push(o8);
// 5391
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5392
f637880758_541.returns.push(1373482801740);
// 5393
o8 = {};
// 5394
f637880758_0.returns.push(o8);
// 5395
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5396
f637880758_541.returns.push(1373482801740);
// 5397
o8 = {};
// 5398
f637880758_0.returns.push(o8);
// 5399
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5400
f637880758_541.returns.push(1373482801741);
// 5401
o8 = {};
// 5402
f637880758_0.returns.push(o8);
// 5403
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5404
f637880758_541.returns.push(1373482801741);
// 5405
o8 = {};
// 5406
f637880758_0.returns.push(o8);
// 5407
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5408
f637880758_541.returns.push(1373482801741);
// 5409
o8 = {};
// 5410
f637880758_0.returns.push(o8);
// 5411
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5412
f637880758_541.returns.push(1373482801742);
// 5413
o8 = {};
// 5414
f637880758_0.returns.push(o8);
// 5415
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5416
f637880758_541.returns.push(1373482801742);
// 5417
o8 = {};
// 5418
f637880758_0.returns.push(o8);
// 5419
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5420
f637880758_541.returns.push(1373482801742);
// 5421
o8 = {};
// 5422
f637880758_0.returns.push(o8);
// 5423
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5424
f637880758_541.returns.push(1373482801742);
// 5425
o8 = {};
// 5426
f637880758_0.returns.push(o8);
// 5427
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5428
f637880758_541.returns.push(1373482801743);
// 5429
o8 = {};
// 5430
f637880758_0.returns.push(o8);
// 5431
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5432
f637880758_541.returns.push(1373482801743);
// 5433
o8 = {};
// 5434
f637880758_0.returns.push(o8);
// 5435
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5436
f637880758_541.returns.push(1373482801743);
// 5437
o8 = {};
// 5438
f637880758_0.returns.push(o8);
// 5439
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5440
f637880758_541.returns.push(1373482801743);
// 5441
o8 = {};
// 5442
f637880758_0.returns.push(o8);
// 5443
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5444
f637880758_541.returns.push(1373482801743);
// 5445
o8 = {};
// 5446
f637880758_0.returns.push(o8);
// 5447
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5448
f637880758_541.returns.push(1373482801746);
// 5449
o8 = {};
// 5450
f637880758_0.returns.push(o8);
// 5451
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5452
f637880758_541.returns.push(1373482801746);
// 5453
o8 = {};
// 5454
f637880758_0.returns.push(o8);
// 5455
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5456
f637880758_541.returns.push(1373482801747);
// 5457
o8 = {};
// 5458
f637880758_0.returns.push(o8);
// 5459
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5460
f637880758_541.returns.push(1373482801747);
// 5461
o8 = {};
// 5462
f637880758_0.returns.push(o8);
// 5463
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5464
f637880758_541.returns.push(1373482801751);
// 5465
o8 = {};
// 5466
f637880758_0.returns.push(o8);
// 5467
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5468
f637880758_541.returns.push(1373482801751);
// 5469
o8 = {};
// 5470
f637880758_0.returns.push(o8);
// 5471
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5472
f637880758_541.returns.push(1373482801751);
// 5473
o8 = {};
// 5474
f637880758_0.returns.push(o8);
// 5475
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5476
f637880758_541.returns.push(1373482801751);
// 5477
o8 = {};
// 5478
f637880758_0.returns.push(o8);
// 5479
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5480
f637880758_541.returns.push(1373482801752);
// 5481
o8 = {};
// 5482
f637880758_0.returns.push(o8);
// 5483
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5484
f637880758_541.returns.push(1373482801754);
// 5485
o8 = {};
// 5486
f637880758_0.returns.push(o8);
// 5487
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5488
f637880758_541.returns.push(1373482801754);
// 5489
o8 = {};
// 5490
f637880758_0.returns.push(o8);
// 5491
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5492
f637880758_541.returns.push(1373482801754);
// 5493
o8 = {};
// 5494
f637880758_0.returns.push(o8);
// 5495
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5496
f637880758_541.returns.push(1373482801755);
// 5497
o8 = {};
// 5498
f637880758_0.returns.push(o8);
// 5499
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5500
f637880758_541.returns.push(1373482801755);
// 5501
o8 = {};
// 5502
f637880758_0.returns.push(o8);
// 5503
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5504
f637880758_541.returns.push(1373482801756);
// 5505
o8 = {};
// 5506
f637880758_0.returns.push(o8);
// 5507
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5508
f637880758_541.returns.push(1373482801756);
// 5509
o8 = {};
// 5510
f637880758_0.returns.push(o8);
// 5511
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5512
f637880758_541.returns.push(1373482801756);
// 5513
o8 = {};
// 5514
f637880758_0.returns.push(o8);
// 5515
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5516
f637880758_541.returns.push(1373482801756);
// 5517
o8 = {};
// 5518
f637880758_0.returns.push(o8);
// 5519
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5520
f637880758_541.returns.push(1373482801756);
// 5521
o8 = {};
// 5522
f637880758_0.returns.push(o8);
// 5523
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5524
f637880758_541.returns.push(1373482801757);
// 5525
o8 = {};
// 5526
f637880758_0.returns.push(o8);
// 5527
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5528
f637880758_541.returns.push(1373482801759);
// 5529
o8 = {};
// 5530
f637880758_0.returns.push(o8);
// 5531
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5532
f637880758_541.returns.push(1373482801760);
// 5533
o8 = {};
// 5534
f637880758_0.returns.push(o8);
// 5535
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5536
f637880758_541.returns.push(1373482801760);
// 5537
o8 = {};
// 5538
f637880758_0.returns.push(o8);
// 5539
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5540
f637880758_541.returns.push(1373482801760);
// 5541
o8 = {};
// 5542
f637880758_0.returns.push(o8);
// 5543
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5544
f637880758_541.returns.push(1373482801760);
// 5545
o8 = {};
// 5546
f637880758_0.returns.push(o8);
// 5547
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5548
f637880758_541.returns.push(1373482801760);
// 5549
o8 = {};
// 5550
f637880758_0.returns.push(o8);
// 5551
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5552
f637880758_541.returns.push(1373482801761);
// 5553
o8 = {};
// 5554
f637880758_0.returns.push(o8);
// 5555
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5556
f637880758_541.returns.push(1373482801761);
// 5557
o8 = {};
// 5558
f637880758_0.returns.push(o8);
// 5559
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5560
f637880758_541.returns.push(1373482801761);
// 5561
o8 = {};
// 5562
f637880758_0.returns.push(o8);
// 5563
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5564
f637880758_541.returns.push(1373482801761);
// 5565
o8 = {};
// 5566
f637880758_0.returns.push(o8);
// 5567
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5568
f637880758_541.returns.push(1373482801761);
// 5569
o8 = {};
// 5570
f637880758_0.returns.push(o8);
// 5571
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5572
f637880758_541.returns.push(1373482801764);
// 5573
o8 = {};
// 5574
f637880758_0.returns.push(o8);
// 5575
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5576
f637880758_541.returns.push(1373482801764);
// 5577
o8 = {};
// 5578
f637880758_0.returns.push(o8);
// 5579
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5580
f637880758_541.returns.push(1373482801765);
// 5581
o8 = {};
// 5582
f637880758_0.returns.push(o8);
// 5583
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5584
f637880758_541.returns.push(1373482801765);
// 5585
o8 = {};
// 5586
f637880758_0.returns.push(o8);
// 5587
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5588
f637880758_541.returns.push(1373482801765);
// 5589
o8 = {};
// 5590
f637880758_0.returns.push(o8);
// 5591
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5592
f637880758_541.returns.push(1373482801767);
// 5593
o8 = {};
// 5594
f637880758_0.returns.push(o8);
// 5595
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5596
f637880758_541.returns.push(1373482801767);
// 5597
o8 = {};
// 5598
f637880758_0.returns.push(o8);
// 5599
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5600
f637880758_541.returns.push(1373482801767);
// 5601
o8 = {};
// 5602
f637880758_0.returns.push(o8);
// 5603
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5604
f637880758_541.returns.push(1373482801768);
// 5605
o8 = {};
// 5606
f637880758_0.returns.push(o8);
// 5607
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5608
f637880758_541.returns.push(1373482801768);
// 5609
o8 = {};
// 5610
f637880758_0.returns.push(o8);
// 5611
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5612
f637880758_541.returns.push(1373482801768);
// 5613
o8 = {};
// 5614
f637880758_0.returns.push(o8);
// 5615
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5616
f637880758_541.returns.push(1373482801768);
// 5617
o8 = {};
// 5618
f637880758_0.returns.push(o8);
// 5619
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5620
f637880758_541.returns.push(1373482801769);
// 5621
o8 = {};
// 5622
f637880758_0.returns.push(o8);
// 5623
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5624
f637880758_541.returns.push(1373482801774);
// 5625
o8 = {};
// 5626
f637880758_0.returns.push(o8);
// 5627
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5628
f637880758_541.returns.push(1373482801774);
// 5629
o8 = {};
// 5630
f637880758_0.returns.push(o8);
// 5631
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5632
f637880758_541.returns.push(1373482801774);
// 5633
o8 = {};
// 5634
f637880758_0.returns.push(o8);
// 5635
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5636
f637880758_541.returns.push(1373482801775);
// 5637
o8 = {};
// 5638
f637880758_0.returns.push(o8);
// 5639
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5640
f637880758_541.returns.push(1373482801775);
// 5641
o8 = {};
// 5642
f637880758_0.returns.push(o8);
// 5643
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5644
f637880758_541.returns.push(1373482801775);
// 5645
o8 = {};
// 5646
f637880758_0.returns.push(o8);
// 5647
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5648
f637880758_541.returns.push(1373482801775);
// 5649
o8 = {};
// 5650
f637880758_0.returns.push(o8);
// 5651
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5652
f637880758_541.returns.push(1373482801776);
// 5653
o8 = {};
// 5654
f637880758_0.returns.push(o8);
// 5655
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5656
f637880758_541.returns.push(1373482801776);
// 5657
o8 = {};
// 5658
f637880758_0.returns.push(o8);
// 5659
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5660
f637880758_541.returns.push(1373482801776);
// 5661
o8 = {};
// 5662
f637880758_0.returns.push(o8);
// 5663
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5664
f637880758_541.returns.push(1373482801776);
// 5665
o8 = {};
// 5666
f637880758_0.returns.push(o8);
// 5667
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5668
f637880758_541.returns.push(1373482801777);
// 5669
o8 = {};
// 5670
f637880758_0.returns.push(o8);
// 5671
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5672
f637880758_541.returns.push(1373482801777);
// 5673
o8 = {};
// 5674
f637880758_0.returns.push(o8);
// 5675
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5676
f637880758_541.returns.push(1373482801783);
// 5677
o8 = {};
// 5678
f637880758_0.returns.push(o8);
// 5679
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5680
f637880758_541.returns.push(1373482801783);
// 5681
o8 = {};
// 5682
f637880758_0.returns.push(o8);
// 5683
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5684
f637880758_541.returns.push(1373482801784);
// 5685
o8 = {};
// 5686
f637880758_0.returns.push(o8);
// 5687
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5688
f637880758_541.returns.push(1373482801784);
// 5689
o8 = {};
// 5690
f637880758_0.returns.push(o8);
// 5691
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5692
f637880758_541.returns.push(1373482801784);
// 5693
o8 = {};
// 5694
f637880758_0.returns.push(o8);
// 5695
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5696
f637880758_541.returns.push(1373482801784);
// 5697
o8 = {};
// 5698
f637880758_0.returns.push(o8);
// 5699
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5700
f637880758_541.returns.push(1373482801785);
// 5701
o8 = {};
// 5702
f637880758_0.returns.push(o8);
// 5703
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5704
f637880758_541.returns.push(1373482801785);
// 5705
o8 = {};
// 5706
f637880758_0.returns.push(o8);
// 5707
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5708
f637880758_541.returns.push(1373482801785);
// 5709
o8 = {};
// 5710
f637880758_0.returns.push(o8);
// 5711
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5712
f637880758_541.returns.push(1373482801785);
// 5713
o8 = {};
// 5714
f637880758_0.returns.push(o8);
// 5715
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5716
f637880758_541.returns.push(1373482801785);
// 5717
o8 = {};
// 5718
f637880758_0.returns.push(o8);
// 5719
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5720
f637880758_541.returns.push(1373482801786);
// 5721
o8 = {};
// 5722
f637880758_0.returns.push(o8);
// 5723
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5724
f637880758_541.returns.push(1373482801786);
// 5725
o8 = {};
// 5726
f637880758_0.returns.push(o8);
// 5727
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5728
f637880758_541.returns.push(1373482801786);
// 5729
o8 = {};
// 5730
f637880758_0.returns.push(o8);
// 5731
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5732
f637880758_541.returns.push(1373482801786);
// 5733
o8 = {};
// 5734
f637880758_0.returns.push(o8);
// 5735
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5736
f637880758_541.returns.push(1373482801787);
// 5737
o8 = {};
// 5738
f637880758_0.returns.push(o8);
// 5739
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5740
f637880758_541.returns.push(1373482801787);
// 5741
o8 = {};
// 5742
f637880758_0.returns.push(o8);
// 5743
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5744
f637880758_541.returns.push(1373482801787);
// 5745
o8 = {};
// 5746
f637880758_0.returns.push(o8);
// 5747
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5748
f637880758_541.returns.push(1373482801788);
// 5749
o8 = {};
// 5750
f637880758_0.returns.push(o8);
// 5751
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5752
f637880758_541.returns.push(1373482801788);
// 5753
o8 = {};
// 5754
f637880758_0.returns.push(o8);
// 5755
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5756
f637880758_541.returns.push(1373482801788);
// 5757
o8 = {};
// 5758
f637880758_0.returns.push(o8);
// 5759
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5760
f637880758_541.returns.push(1373482801789);
// 5761
o8 = {};
// 5762
f637880758_0.returns.push(o8);
// 5763
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5764
f637880758_541.returns.push(1373482801789);
// 5765
o8 = {};
// 5766
f637880758_0.returns.push(o8);
// 5767
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5768
f637880758_541.returns.push(1373482801789);
// 5769
o8 = {};
// 5770
f637880758_0.returns.push(o8);
// 5771
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5772
f637880758_541.returns.push(1373482801790);
// 5773
o8 = {};
// 5774
f637880758_0.returns.push(o8);
// 5775
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5776
f637880758_541.returns.push(1373482801791);
// 5777
o8 = {};
// 5778
f637880758_0.returns.push(o8);
// 5779
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5780
f637880758_541.returns.push(1373482801791);
// 5781
o8 = {};
// 5782
f637880758_0.returns.push(o8);
// 5783
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5784
f637880758_541.returns.push(1373482801795);
// 5785
o8 = {};
// 5786
f637880758_0.returns.push(o8);
// 5787
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5788
f637880758_541.returns.push(1373482801795);
// 5789
o8 = {};
// 5790
f637880758_0.returns.push(o8);
// 5791
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5792
f637880758_541.returns.push(1373482801795);
// 5793
o8 = {};
// 5794
f637880758_0.returns.push(o8);
// 5795
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5796
f637880758_541.returns.push(1373482801796);
// 5797
o8 = {};
// 5798
f637880758_0.returns.push(o8);
// 5799
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5800
f637880758_541.returns.push(1373482801796);
// 5801
o8 = {};
// 5802
f637880758_0.returns.push(o8);
// 5803
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5804
f637880758_541.returns.push(1373482801796);
// 5805
o8 = {};
// 5806
f637880758_0.returns.push(o8);
// 5807
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5808
f637880758_541.returns.push(1373482801796);
// 5809
o8 = {};
// 5810
f637880758_0.returns.push(o8);
// 5811
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5812
f637880758_541.returns.push(1373482801796);
// 5813
o8 = {};
// 5814
f637880758_0.returns.push(o8);
// 5815
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5816
f637880758_541.returns.push(1373482801796);
// 5817
o8 = {};
// 5818
f637880758_0.returns.push(o8);
// 5819
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5820
f637880758_541.returns.push(1373482801796);
// 5821
o8 = {};
// 5822
f637880758_0.returns.push(o8);
// 5823
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5824
f637880758_541.returns.push(1373482801797);
// 5825
o8 = {};
// 5826
f637880758_0.returns.push(o8);
// 5827
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5828
f637880758_541.returns.push(1373482801797);
// 5829
o3.appName = "Netscape";
// 5830
o8 = {};
// 5831
f637880758_0.returns.push(o8);
// 5832
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5833
f637880758_541.returns.push(1373482801797);
// 5834
o8 = {};
// 5835
f637880758_0.returns.push(o8);
// 5836
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5837
f637880758_541.returns.push(1373482801797);
// 5838
o8 = {};
// 5839
f637880758_0.returns.push(o8);
// 5840
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5841
f637880758_541.returns.push(1373482801797);
// 5842
o8 = {};
// 5843
f637880758_0.returns.push(o8);
// 5844
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5845
f637880758_541.returns.push(1373482801797);
// 5846
o8 = {};
// 5847
f637880758_0.returns.push(o8);
// 5848
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5849
f637880758_541.returns.push(1373482801798);
// 5850
o8 = {};
// 5851
f637880758_0.returns.push(o8);
// 5852
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5853
f637880758_541.returns.push(1373482801798);
// 5854
o8 = {};
// 5855
f637880758_0.returns.push(o8);
// 5856
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5857
f637880758_541.returns.push(1373482801798);
// 5858
o8 = {};
// 5859
f637880758_0.returns.push(o8);
// 5860
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5861
f637880758_541.returns.push(1373482801798);
// 5862
o8 = {};
// 5863
f637880758_0.returns.push(o8);
// 5864
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5865
f637880758_541.returns.push(1373482801798);
// 5866
o8 = {};
// 5867
f637880758_0.returns.push(o8);
// 5868
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5869
f637880758_541.returns.push(1373482801798);
// 5870
o8 = {};
// 5871
f637880758_0.returns.push(o8);
// 5872
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5873
f637880758_541.returns.push(1373482801798);
// 5874
o8 = {};
// 5875
f637880758_0.returns.push(o8);
// 5876
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5877
f637880758_541.returns.push(1373482801799);
// 5878
o8 = {};
// 5879
f637880758_0.returns.push(o8);
// 5880
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5881
f637880758_541.returns.push(1373482801799);
// 5882
o8 = {};
// 5883
f637880758_0.returns.push(o8);
// 5884
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5885
f637880758_541.returns.push(1373482801799);
// 5886
o8 = {};
// 5887
f637880758_0.returns.push(o8);
// 5888
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5889
f637880758_541.returns.push(1373482801804);
// 5890
o8 = {};
// 5891
f637880758_0.returns.push(o8);
// 5892
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 5893
f637880758_541.returns.push(1373482801804);
// 5894
o8 = {};
// 5895
o3.plugins = o8;
// undefined
o3 = null;
// 5896
o3 = {};
// 5897
o8["Shockwave Flash"] = o3;
// undefined
o8 = null;
// 5898
o3.description = "Shockwave Flash 11.7 r700";
// 5899
o3.JSBNG__name = "Shockwave Flash";
// undefined
o3 = null;
// 5900
o3 = {};
// 5901
f637880758_0.returns.push(o3);
// 5902
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5903
f637880758_541.returns.push(1373482801805);
// 5904
o3 = {};
// 5905
f637880758_0.returns.push(o3);
// 5906
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5907
f637880758_541.returns.push(1373482801805);
// 5908
o3 = {};
// 5909
f637880758_0.returns.push(o3);
// 5910
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5911
f637880758_541.returns.push(1373482801806);
// 5912
o3 = {};
// 5913
f637880758_0.returns.push(o3);
// 5914
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5915
f637880758_541.returns.push(1373482801806);
// 5916
o3 = {};
// 5917
f637880758_0.returns.push(o3);
// 5918
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5919
f637880758_541.returns.push(1373482801806);
// 5920
o3 = {};
// 5921
f637880758_0.returns.push(o3);
// 5922
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5923
f637880758_541.returns.push(1373482801806);
// 5924
o3 = {};
// 5925
f637880758_0.returns.push(o3);
// 5926
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5927
f637880758_541.returns.push(1373482801807);
// 5928
o3 = {};
// 5929
f637880758_0.returns.push(o3);
// 5930
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5931
f637880758_541.returns.push(1373482801807);
// 5932
o3 = {};
// 5933
f637880758_0.returns.push(o3);
// 5934
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5935
f637880758_541.returns.push(1373482801807);
// 5936
o3 = {};
// 5937
f637880758_0.returns.push(o3);
// 5938
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5939
f637880758_541.returns.push(1373482801807);
// 5940
o3 = {};
// 5941
f637880758_0.returns.push(o3);
// 5942
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5943
f637880758_541.returns.push(1373482801807);
// 5944
o3 = {};
// 5945
f637880758_0.returns.push(o3);
// 5946
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5947
f637880758_541.returns.push(1373482801808);
// 5948
o3 = {};
// 5949
f637880758_0.returns.push(o3);
// 5950
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5951
f637880758_541.returns.push(1373482801808);
// 5952
o3 = {};
// 5953
f637880758_0.returns.push(o3);
// 5954
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5955
f637880758_541.returns.push(1373482801808);
// 5956
o3 = {};
// 5957
f637880758_0.returns.push(o3);
// 5958
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5959
f637880758_541.returns.push(1373482801809);
// 5965
o3 = {};
// 5966
f637880758_550.returns.push(o3);
// 5967
o3["0"] = o10;
// 5968
o3["1"] = void 0;
// undefined
o3 = null;
// 5969
o10.nodeType = 1;
// 5970
o10.getAttribute = f637880758_472;
// 5971
o10.ownerDocument = o0;
// 5975
f637880758_472.returns.push("ltr");
// 5976
o3 = {};
// 5977
f637880758_0.returns.push(o3);
// 5978
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5979
f637880758_541.returns.push(1373482801828);
// 5980
o3 = {};
// 5981
f637880758_0.returns.push(o3);
// 5982
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5983
f637880758_541.returns.push(1373482801828);
// 5984
o3 = {};
// 5985
f637880758_0.returns.push(o3);
// 5986
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5987
f637880758_541.returns.push(1373482801828);
// 5988
o3 = {};
// 5989
f637880758_0.returns.push(o3);
// 5990
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5991
f637880758_541.returns.push(1373482801829);
// 5992
o3 = {};
// 5993
f637880758_0.returns.push(o3);
// 5994
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5995
f637880758_541.returns.push(1373482801831);
// 5996
o3 = {};
// 5997
f637880758_0.returns.push(o3);
// 5998
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 5999
f637880758_541.returns.push(1373482801832);
// 6000
o3 = {};
// 6001
f637880758_0.returns.push(o3);
// 6002
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6003
f637880758_541.returns.push(1373482801832);
// 6004
o3 = {};
// 6005
f637880758_0.returns.push(o3);
// 6006
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6007
f637880758_541.returns.push(1373482801832);
// 6008
o3 = {};
// 6009
f637880758_0.returns.push(o3);
// 6010
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6011
f637880758_541.returns.push(1373482801832);
// 6012
o3 = {};
// 6013
f637880758_0.returns.push(o3);
// 6014
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6015
f637880758_541.returns.push(1373482801832);
// 6016
o3 = {};
// 6017
f637880758_0.returns.push(o3);
// 6018
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6019
f637880758_541.returns.push(1373482801833);
// 6020
o3 = {};
// 6021
f637880758_0.returns.push(o3);
// 6022
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6023
f637880758_541.returns.push(1373482801833);
// 6024
o3 = {};
// 6025
f637880758_0.returns.push(o3);
// 6026
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6027
f637880758_541.returns.push(1373482801833);
// 6028
o3 = {};
// 6029
f637880758_0.returns.push(o3);
// 6030
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6031
f637880758_541.returns.push(1373482801834);
// 6032
o3 = {};
// 6033
f637880758_0.returns.push(o3);
// 6034
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6035
f637880758_541.returns.push(1373482801834);
// 6036
o3 = {};
// 6037
f637880758_0.returns.push(o3);
// 6038
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6039
f637880758_541.returns.push(1373482801834);
// 6040
o3 = {};
// 6041
f637880758_0.returns.push(o3);
// 6042
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6043
f637880758_541.returns.push(1373482801835);
// 6044
o3 = {};
// 6045
f637880758_0.returns.push(o3);
// 6046
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6047
f637880758_541.returns.push(1373482801835);
// 6048
o3 = {};
// 6049
f637880758_0.returns.push(o3);
// 6050
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6051
f637880758_541.returns.push(1373482801835);
// 6052
o3 = {};
// 6053
f637880758_0.returns.push(o3);
// 6054
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6055
f637880758_541.returns.push(1373482801835);
// 6056
o3 = {};
// 6057
f637880758_0.returns.push(o3);
// 6058
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6059
f637880758_541.returns.push(1373482801835);
// 6060
o3 = {};
// 6061
f637880758_0.returns.push(o3);
// 6062
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6063
f637880758_541.returns.push(1373482801836);
// 6064
o3 = {};
// 6065
f637880758_0.returns.push(o3);
// 6066
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6067
f637880758_541.returns.push(1373482801836);
// 6068
o3 = {};
// 6069
f637880758_0.returns.push(o3);
// 6070
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6071
f637880758_541.returns.push(1373482801836);
// 6072
o3 = {};
// 6073
f637880758_0.returns.push(o3);
// 6074
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6075
f637880758_541.returns.push(1373482801836);
// 6076
o3 = {};
// 6077
f637880758_0.returns.push(o3);
// 6078
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6079
f637880758_541.returns.push(1373482801837);
// 6080
o3 = {};
// 6081
f637880758_0.returns.push(o3);
// 6082
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6083
f637880758_541.returns.push(1373482801837);
// 6084
o3 = {};
// 6085
f637880758_0.returns.push(o3);
// 6086
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6087
f637880758_541.returns.push(1373482801837);
// 6088
o3 = {};
// 6089
f637880758_0.returns.push(o3);
// 6090
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6091
f637880758_541.returns.push(1373482801838);
// 6092
o3 = {};
// 6093
f637880758_0.returns.push(o3);
// 6094
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6095
f637880758_541.returns.push(1373482801838);
// 6096
o3 = {};
// 6097
f637880758_0.returns.push(o3);
// 6098
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6099
f637880758_541.returns.push(1373482801839);
// 6100
o3 = {};
// 6101
f637880758_0.returns.push(o3);
// 6102
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6103
f637880758_541.returns.push(1373482801844);
// 6104
o3 = {};
// 6105
f637880758_0.returns.push(o3);
// 6106
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6107
f637880758_541.returns.push(1373482801844);
// 6108
o3 = {};
// 6109
f637880758_0.returns.push(o3);
// 6110
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6111
f637880758_541.returns.push(1373482801849);
// 6112
o3 = {};
// 6113
f637880758_0.returns.push(o3);
// 6114
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6115
f637880758_541.returns.push(1373482801849);
// 6116
o3 = {};
// 6117
f637880758_0.returns.push(o3);
// 6118
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6119
f637880758_541.returns.push(1373482801849);
// 6120
o3 = {};
// 6121
f637880758_0.returns.push(o3);
// 6122
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6123
f637880758_541.returns.push(1373482801850);
// 6124
o3 = {};
// 6125
f637880758_0.returns.push(o3);
// 6126
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6127
f637880758_541.returns.push(1373482801850);
// 6128
o3 = {};
// 6129
f637880758_0.returns.push(o3);
// 6130
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6131
f637880758_541.returns.push(1373482801850);
// 6132
o3 = {};
// 6133
f637880758_0.returns.push(o3);
// 6134
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6135
f637880758_541.returns.push(1373482801850);
// 6136
o3 = {};
// 6137
f637880758_0.returns.push(o3);
// 6138
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6139
f637880758_541.returns.push(1373482801850);
// 6140
o3 = {};
// 6141
f637880758_0.returns.push(o3);
// 6142
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6143
f637880758_541.returns.push(1373482801850);
// 6144
o3 = {};
// 6145
f637880758_0.returns.push(o3);
// 6146
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6147
f637880758_541.returns.push(1373482801850);
// 6148
o3 = {};
// 6149
f637880758_0.returns.push(o3);
// 6150
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6151
f637880758_541.returns.push(1373482801850);
// 6152
o3 = {};
// 6153
f637880758_0.returns.push(o3);
// 6154
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6155
f637880758_541.returns.push(1373482801852);
// 6156
o3 = {};
// 6157
f637880758_0.returns.push(o3);
// 6158
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6159
f637880758_541.returns.push(1373482801852);
// 6160
o3 = {};
// 6161
f637880758_0.returns.push(o3);
// 6162
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6163
f637880758_541.returns.push(1373482801852);
// 6164
o3 = {};
// 6165
f637880758_0.returns.push(o3);
// 6166
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6167
f637880758_541.returns.push(1373482801852);
// 6168
o3 = {};
// 6169
f637880758_0.returns.push(o3);
// 6170
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6171
f637880758_541.returns.push(1373482801852);
// 6172
o3 = {};
// 6173
f637880758_0.returns.push(o3);
// 6174
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6175
f637880758_541.returns.push(1373482801853);
// 6176
o3 = {};
// 6177
f637880758_0.returns.push(o3);
// 6178
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6179
f637880758_541.returns.push(1373482801853);
// 6180
o3 = {};
// 6181
f637880758_0.returns.push(o3);
// 6182
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6183
f637880758_541.returns.push(1373482801853);
// 6184
o3 = {};
// 6185
f637880758_0.returns.push(o3);
// 6186
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6187
f637880758_541.returns.push(1373482801853);
// 6188
o3 = {};
// 6189
f637880758_0.returns.push(o3);
// 6190
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6191
f637880758_541.returns.push(1373482801854);
// 6192
o3 = {};
// 6193
f637880758_0.returns.push(o3);
// 6194
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6195
f637880758_541.returns.push(1373482801854);
// 6196
o3 = {};
// 6197
f637880758_0.returns.push(o3);
// 6198
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6199
f637880758_541.returns.push(1373482801854);
// 6200
o3 = {};
// 6201
f637880758_0.returns.push(o3);
// 6202
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6203
f637880758_541.returns.push(1373482801855);
// 6204
o3 = {};
// 6205
f637880758_0.returns.push(o3);
// 6206
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6207
f637880758_541.returns.push(1373482801858);
// 6208
o3 = {};
// 6209
f637880758_0.returns.push(o3);
// 6210
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6211
f637880758_541.returns.push(1373482801858);
// 6212
o3 = {};
// 6213
f637880758_0.returns.push(o3);
// 6214
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6215
f637880758_541.returns.push(1373482801858);
// 6216
o3 = {};
// 6217
f637880758_0.returns.push(o3);
// 6218
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6219
f637880758_541.returns.push(1373482801858);
// 6220
o3 = {};
// 6221
f637880758_0.returns.push(o3);
// 6222
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6223
f637880758_541.returns.push(1373482801858);
// 6224
o3 = {};
// 6225
f637880758_0.returns.push(o3);
// 6226
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6227
f637880758_541.returns.push(1373482801858);
// 6228
o3 = {};
// 6229
f637880758_0.returns.push(o3);
// 6230
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6231
f637880758_541.returns.push(1373482801860);
// 6232
o3 = {};
// 6233
f637880758_0.returns.push(o3);
// 6234
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6235
f637880758_541.returns.push(1373482801860);
// 6236
o3 = {};
// 6237
f637880758_0.returns.push(o3);
// 6238
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6239
f637880758_541.returns.push(1373482801860);
// 6240
o3 = {};
// 6241
f637880758_0.returns.push(o3);
// 6242
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6243
f637880758_541.returns.push(1373482801862);
// 6244
o3 = {};
// 6245
f637880758_0.returns.push(o3);
// 6246
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6247
f637880758_541.returns.push(1373482801862);
// 6248
o3 = {};
// 6249
f637880758_0.returns.push(o3);
// 6250
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6251
f637880758_541.returns.push(1373482801862);
// 6252
o3 = {};
// 6253
f637880758_0.returns.push(o3);
// 6254
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6255
f637880758_541.returns.push(1373482801862);
// 6256
o3 = {};
// 6257
f637880758_0.returns.push(o3);
// 6258
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6259
f637880758_541.returns.push(1373482801864);
// 6260
o3 = {};
// 6261
f637880758_0.returns.push(o3);
// 6262
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6263
f637880758_541.returns.push(1373482801864);
// 6264
o3 = {};
// 6265
f637880758_0.returns.push(o3);
// 6266
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6267
f637880758_541.returns.push(1373482801864);
// 6268
o3 = {};
// 6269
f637880758_0.returns.push(o3);
// 6270
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6271
f637880758_541.returns.push(1373482801864);
// 6272
o3 = {};
// 6273
f637880758_0.returns.push(o3);
// 6274
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6275
f637880758_541.returns.push(1373482801864);
// 6276
o3 = {};
// 6277
f637880758_0.returns.push(o3);
// 6278
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6279
f637880758_541.returns.push(1373482801864);
// 6280
o3 = {};
// 6281
f637880758_0.returns.push(o3);
// 6282
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6283
f637880758_541.returns.push(1373482801865);
// 6284
o3 = {};
// 6285
f637880758_0.returns.push(o3);
// 6286
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6287
f637880758_541.returns.push(1373482801866);
// 6288
o3 = {};
// 6289
f637880758_0.returns.push(o3);
// 6290
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6291
f637880758_541.returns.push(1373482801866);
// 6292
o3 = {};
// 6293
f637880758_0.returns.push(o3);
// 6294
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6295
f637880758_541.returns.push(1373482801866);
// 6296
o3 = {};
// 6297
f637880758_0.returns.push(o3);
// 6298
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6299
f637880758_541.returns.push(1373482801866);
// 6300
o3 = {};
// 6301
f637880758_0.returns.push(o3);
// 6302
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6303
f637880758_541.returns.push(1373482801867);
// 6305
o3 = {};
// 6306
f637880758_0.returns.push(o3);
// 6307
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6308
f637880758_541.returns.push(1373482801867);
// 6309
o3 = {};
// 6310
f637880758_0.returns.push(o3);
// 6311
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6312
f637880758_541.returns.push(1373482801872);
// 6313
o3 = {};
// 6314
f637880758_0.returns.push(o3);
// 6315
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6316
f637880758_541.returns.push(1373482801872);
// 6317
o3 = {};
// 6318
f637880758_0.returns.push(o3);
// 6319
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6320
f637880758_541.returns.push(1373482801877);
// 6321
o3 = {};
// 6322
f637880758_0.returns.push(o3);
// 6323
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6324
f637880758_541.returns.push(1373482801877);
// 6325
o3 = {};
// 6326
f637880758_0.returns.push(o3);
// 6327
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6328
f637880758_541.returns.push(1373482801878);
// 6329
o3 = {};
// 6330
f637880758_0.returns.push(o3);
// 6331
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6332
f637880758_541.returns.push(1373482801879);
// 6333
o3 = {};
// 6334
f637880758_0.returns.push(o3);
// 6335
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6336
f637880758_541.returns.push(1373482801879);
// 6337
o3 = {};
// 6338
f637880758_0.returns.push(o3);
// 6339
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6340
f637880758_541.returns.push(1373482801879);
// 6341
o3 = {};
// 6342
f637880758_0.returns.push(o3);
// 6343
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6344
f637880758_541.returns.push(1373482801880);
// 6345
o3 = {};
// 6346
f637880758_0.returns.push(o3);
// 6347
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6348
f637880758_541.returns.push(1373482801880);
// 6349
o3 = {};
// 6350
f637880758_0.returns.push(o3);
// 6351
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6352
f637880758_541.returns.push(1373482801880);
// 6353
o3 = {};
// 6354
f637880758_0.returns.push(o3);
// 6355
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6356
f637880758_541.returns.push(1373482801880);
// 6357
o3 = {};
// 6358
f637880758_0.returns.push(o3);
// 6359
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6360
f637880758_541.returns.push(1373482801881);
// 6361
o3 = {};
// 6362
f637880758_0.returns.push(o3);
// 6363
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6364
f637880758_541.returns.push(1373482801881);
// 6365
o3 = {};
// 6366
f637880758_0.returns.push(o3);
// 6367
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6368
f637880758_541.returns.push(1373482801881);
// 6369
o3 = {};
// 6370
f637880758_0.returns.push(o3);
// 6371
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6372
f637880758_541.returns.push(1373482801881);
// 6373
o3 = {};
// 6374
f637880758_0.returns.push(o3);
// 6375
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6376
f637880758_541.returns.push(1373482801882);
// 6377
o3 = {};
// 6378
f637880758_0.returns.push(o3);
// 6379
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6380
f637880758_541.returns.push(1373482801886);
// 6381
o3 = {};
// 6382
f637880758_0.returns.push(o3);
// 6383
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6384
f637880758_541.returns.push(1373482801886);
// 6385
o3 = {};
// 6386
f637880758_0.returns.push(o3);
// 6387
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6388
f637880758_541.returns.push(1373482801886);
// 6389
o3 = {};
// 6390
f637880758_0.returns.push(o3);
// 6391
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6392
f637880758_541.returns.push(1373482801889);
// 6393
o3 = {};
// 6394
f637880758_0.returns.push(o3);
// 6395
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6396
f637880758_541.returns.push(1373482801889);
// 6397
o3 = {};
// 6398
f637880758_0.returns.push(o3);
// 6399
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6400
f637880758_541.returns.push(1373482801889);
// 6401
o3 = {};
// 6402
f637880758_0.returns.push(o3);
// 6403
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6404
f637880758_541.returns.push(1373482801889);
// 6405
o3 = {};
// 6406
f637880758_0.returns.push(o3);
// 6407
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6408
f637880758_541.returns.push(1373482801890);
// 6409
o3 = {};
// 6410
f637880758_0.returns.push(o3);
// 6411
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6412
f637880758_541.returns.push(1373482801890);
// 6413
o3 = {};
// 6414
f637880758_0.returns.push(o3);
// 6415
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6416
f637880758_541.returns.push(1373482801890);
// 6417
o3 = {};
// 6418
f637880758_0.returns.push(o3);
// 6419
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6420
f637880758_541.returns.push(1373482801894);
// 6421
o3 = {};
// 6422
f637880758_0.returns.push(o3);
// 6423
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6424
f637880758_541.returns.push(1373482801898);
// 6425
o3 = {};
// 6426
f637880758_0.returns.push(o3);
// 6427
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6428
f637880758_541.returns.push(1373482801898);
// 6429
o3 = {};
// 6430
f637880758_0.returns.push(o3);
// 6431
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6432
f637880758_541.returns.push(1373482801899);
// 6433
o3 = {};
// 6434
f637880758_0.returns.push(o3);
// 6435
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6436
f637880758_541.returns.push(1373482801899);
// 6437
o3 = {};
// 6438
f637880758_0.returns.push(o3);
// 6439
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6440
f637880758_541.returns.push(1373482801899);
// 6441
o3 = {};
// 6442
f637880758_0.returns.push(o3);
// 6443
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6444
f637880758_541.returns.push(1373482801901);
// 6445
o3 = {};
// 6446
f637880758_0.returns.push(o3);
// 6447
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6448
f637880758_541.returns.push(1373482801902);
// 6449
o3 = {};
// 6450
f637880758_0.returns.push(o3);
// 6451
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6452
f637880758_541.returns.push(1373482801902);
// 6453
o3 = {};
// 6454
f637880758_0.returns.push(o3);
// 6455
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6456
f637880758_541.returns.push(1373482801903);
// 6457
o3 = {};
// 6458
f637880758_0.returns.push(o3);
// 6459
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6460
f637880758_541.returns.push(1373482801903);
// 6461
o3 = {};
// 6462
f637880758_0.returns.push(o3);
// 6463
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6464
f637880758_541.returns.push(1373482801903);
// 6465
o3 = {};
// 6466
f637880758_0.returns.push(o3);
// 6467
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6468
f637880758_541.returns.push(1373482801903);
// 6469
o3 = {};
// 6470
f637880758_0.returns.push(o3);
// 6471
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6472
f637880758_541.returns.push(1373482801903);
// 6473
o3 = {};
// 6474
f637880758_0.returns.push(o3);
// 6475
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6476
f637880758_541.returns.push(1373482801903);
// 6477
o3 = {};
// 6478
f637880758_0.returns.push(o3);
// 6479
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6480
f637880758_541.returns.push(1373482801904);
// 6481
o3 = {};
// 6482
f637880758_0.returns.push(o3);
// 6483
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6484
f637880758_541.returns.push(1373482801904);
// 6485
o3 = {};
// 6486
f637880758_0.returns.push(o3);
// 6487
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6488
f637880758_541.returns.push(1373482801905);
// 6489
o3 = {};
// 6490
f637880758_0.returns.push(o3);
// 6491
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6492
f637880758_541.returns.push(1373482801905);
// 6493
o3 = {};
// 6494
f637880758_0.returns.push(o3);
// 6495
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6496
f637880758_541.returns.push(1373482801905);
// 6497
o3 = {};
// 6498
f637880758_0.returns.push(o3);
// 6499
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6500
f637880758_541.returns.push(1373482801906);
// 6501
o3 = {};
// 6502
f637880758_0.returns.push(o3);
// 6503
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6504
f637880758_541.returns.push(1373482801906);
// 6505
o3 = {};
// 6506
f637880758_0.returns.push(o3);
// 6507
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6508
f637880758_541.returns.push(1373482801906);
// 6509
o3 = {};
// 6510
f637880758_0.returns.push(o3);
// 6511
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6512
f637880758_541.returns.push(1373482801906);
// 6513
o3 = {};
// 6514
f637880758_0.returns.push(o3);
// 6515
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6516
f637880758_541.returns.push(1373482801907);
// 6517
o3 = {};
// 6518
f637880758_0.returns.push(o3);
// 6519
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6520
f637880758_541.returns.push(1373482801907);
// 6521
o3 = {};
// 6522
f637880758_0.returns.push(o3);
// 6523
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6524
f637880758_541.returns.push(1373482801910);
// 6525
o3 = {};
// 6526
f637880758_0.returns.push(o3);
// 6527
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6528
f637880758_541.returns.push(1373482801911);
// 6529
o3 = {};
// 6530
f637880758_0.returns.push(o3);
// 6531
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6532
f637880758_541.returns.push(1373482801911);
// 6533
o3 = {};
// 6534
f637880758_0.returns.push(o3);
// 6535
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6536
f637880758_541.returns.push(1373482801911);
// 6537
o3 = {};
// 6538
f637880758_0.returns.push(o3);
// 6539
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6540
f637880758_541.returns.push(1373482801912);
// 6541
o3 = {};
// 6542
f637880758_0.returns.push(o3);
// 6543
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6544
f637880758_541.returns.push(1373482801912);
// 6545
o3 = {};
// 6546
f637880758_0.returns.push(o3);
// 6547
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6548
f637880758_541.returns.push(1373482801912);
// 6549
o3 = {};
// 6550
f637880758_0.returns.push(o3);
// 6551
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6552
f637880758_541.returns.push(1373482801913);
// 6553
o3 = {};
// 6554
f637880758_0.returns.push(o3);
// 6555
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6556
f637880758_541.returns.push(1373482801913);
// 6557
o3 = {};
// 6558
f637880758_0.returns.push(o3);
// 6559
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6560
f637880758_541.returns.push(1373482801913);
// 6561
o3 = {};
// 6562
f637880758_0.returns.push(o3);
// 6563
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6564
f637880758_541.returns.push(1373482801913);
// 6565
o3 = {};
// 6566
f637880758_0.returns.push(o3);
// 6567
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6568
f637880758_541.returns.push(1373482801913);
// 6569
o3 = {};
// 6570
f637880758_0.returns.push(o3);
// 6571
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6572
f637880758_541.returns.push(1373482801913);
// 6573
o3 = {};
// 6574
f637880758_0.returns.push(o3);
// 6575
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6576
f637880758_541.returns.push(1373482801913);
// 6577
o3 = {};
// 6578
f637880758_0.returns.push(o3);
// 6579
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6580
f637880758_541.returns.push(1373482801915);
// 6581
o3 = {};
// 6582
f637880758_0.returns.push(o3);
// 6583
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6584
f637880758_541.returns.push(1373482801915);
// 6585
o3 = {};
// 6586
f637880758_0.returns.push(o3);
// 6587
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6588
f637880758_541.returns.push(1373482801915);
// 6589
o3 = {};
// 6590
f637880758_0.returns.push(o3);
// 6591
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6592
f637880758_541.returns.push(1373482801915);
// 6593
o3 = {};
// 6594
f637880758_0.returns.push(o3);
// 6595
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6596
f637880758_541.returns.push(1373482801915);
// 6597
o3 = {};
// 6598
f637880758_0.returns.push(o3);
// 6599
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6600
f637880758_541.returns.push(1373482801915);
// 6601
o3 = {};
// 6602
f637880758_0.returns.push(o3);
// 6603
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6604
f637880758_541.returns.push(1373482801916);
// 6605
o3 = {};
// 6606
f637880758_0.returns.push(o3);
// 6607
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6608
f637880758_541.returns.push(1373482801916);
// 6609
o3 = {};
// 6610
f637880758_0.returns.push(o3);
// 6611
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6612
f637880758_541.returns.push(1373482801916);
// 6613
o3 = {};
// 6614
f637880758_0.returns.push(o3);
// 6615
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6616
f637880758_541.returns.push(1373482801916);
// 6617
o3 = {};
// 6618
f637880758_0.returns.push(o3);
// 6619
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6620
f637880758_541.returns.push(1373482801917);
// 6621
o3 = {};
// 6622
f637880758_0.returns.push(o3);
// 6623
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6624
f637880758_541.returns.push(1373482801917);
// 6625
o3 = {};
// 6626
f637880758_0.returns.push(o3);
// 6627
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6628
f637880758_541.returns.push(1373482801917);
// 6629
o3 = {};
// 6630
f637880758_0.returns.push(o3);
// 6631
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6632
f637880758_541.returns.push(1373482801920);
// 6633
o3 = {};
// 6634
f637880758_0.returns.push(o3);
// 6635
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6636
f637880758_541.returns.push(1373482801920);
// 6637
o3 = {};
// 6638
f637880758_0.returns.push(o3);
// 6639
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6640
f637880758_541.returns.push(1373482801920);
// 6641
o3 = {};
// 6642
f637880758_0.returns.push(o3);
// 6643
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6644
f637880758_541.returns.push(1373482801921);
// 6645
o3 = {};
// 6646
f637880758_0.returns.push(o3);
// 6647
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6648
f637880758_541.returns.push(1373482801921);
// 6649
o3 = {};
// 6650
f637880758_0.returns.push(o3);
// 6651
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6652
f637880758_541.returns.push(1373482801921);
// 6653
o3 = {};
// 6654
f637880758_0.returns.push(o3);
// 6655
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6656
f637880758_541.returns.push(1373482801922);
// 6657
o3 = {};
// 6658
f637880758_0.returns.push(o3);
// 6659
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6660
f637880758_541.returns.push(1373482801922);
// 6661
o3 = {};
// 6662
f637880758_0.returns.push(o3);
// 6663
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6664
f637880758_541.returns.push(1373482801922);
// 6665
o3 = {};
// 6666
f637880758_0.returns.push(o3);
// 6667
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6668
f637880758_541.returns.push(1373482801922);
// 6669
o3 = {};
// 6670
f637880758_0.returns.push(o3);
// 6671
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6672
f637880758_541.returns.push(1373482801923);
// 6673
o3 = {};
// 6674
f637880758_0.returns.push(o3);
// 6675
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6676
f637880758_541.returns.push(1373482801923);
// 6677
o3 = {};
// 6678
f637880758_0.returns.push(o3);
// 6679
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6680
f637880758_541.returns.push(1373482801923);
// 6681
o3 = {};
// 6682
f637880758_0.returns.push(o3);
// 6683
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6684
f637880758_541.returns.push(1373482801923);
// 6685
o3 = {};
// 6686
f637880758_0.returns.push(o3);
// 6687
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6688
f637880758_541.returns.push(1373482801925);
// 6689
o3 = {};
// 6690
f637880758_0.returns.push(o3);
// 6691
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6692
f637880758_541.returns.push(1373482801925);
// 6693
o3 = {};
// 6694
f637880758_0.returns.push(o3);
// 6695
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6696
f637880758_541.returns.push(1373482801925);
// 6697
o3 = {};
// 6698
f637880758_0.returns.push(o3);
// 6699
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6700
f637880758_541.returns.push(1373482801925);
// 6701
o3 = {};
// 6702
f637880758_0.returns.push(o3);
// 6703
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6704
f637880758_541.returns.push(1373482801925);
// 6705
o3 = {};
// 6706
f637880758_0.returns.push(o3);
// 6707
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6708
f637880758_541.returns.push(1373482801925);
// 6709
o3 = {};
// 6710
f637880758_0.returns.push(o3);
// 6711
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6712
f637880758_541.returns.push(1373482801925);
// 6713
o3 = {};
// 6714
f637880758_0.returns.push(o3);
// 6715
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6716
f637880758_541.returns.push(1373482801925);
// 6717
o3 = {};
// 6718
f637880758_0.returns.push(o3);
// 6719
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6720
f637880758_541.returns.push(1373482801926);
// 6721
o3 = {};
// 6722
f637880758_0.returns.push(o3);
// 6723
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6724
f637880758_541.returns.push(1373482801926);
// 6725
o3 = {};
// 6726
f637880758_0.returns.push(o3);
// 6727
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6728
f637880758_541.returns.push(1373482801926);
// 6729
o3 = {};
// 6730
f637880758_0.returns.push(o3);
// 6731
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6732
f637880758_541.returns.push(1373482801926);
// 6733
o3 = {};
// 6734
f637880758_0.returns.push(o3);
// 6735
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6736
f637880758_541.returns.push(1373482801930);
// 6737
o3 = {};
// 6738
f637880758_0.returns.push(o3);
// 6739
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6740
f637880758_541.returns.push(1373482801930);
// 6741
o3 = {};
// 6742
f637880758_0.returns.push(o3);
// 6743
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6744
f637880758_541.returns.push(1373482801930);
// 6745
o3 = {};
// 6746
f637880758_0.returns.push(o3);
// 6747
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6748
f637880758_541.returns.push(1373482801930);
// 6749
o3 = {};
// 6750
f637880758_0.returns.push(o3);
// 6751
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6752
f637880758_541.returns.push(1373482801930);
// 6753
o3 = {};
// 6754
f637880758_0.returns.push(o3);
// 6755
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6756
f637880758_541.returns.push(1373482801931);
// 6757
o3 = {};
// 6758
f637880758_0.returns.push(o3);
// 6759
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6760
f637880758_541.returns.push(1373482801931);
// 6761
o3 = {};
// 6762
f637880758_0.returns.push(o3);
// 6763
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6764
f637880758_541.returns.push(1373482801933);
// 6765
o3 = {};
// 6766
f637880758_0.returns.push(o3);
// 6767
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6768
f637880758_541.returns.push(1373482801933);
// 6769
o3 = {};
// 6770
f637880758_0.returns.push(o3);
// 6771
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6772
f637880758_541.returns.push(1373482801934);
// 6773
o3 = {};
// 6774
f637880758_0.returns.push(o3);
// 6775
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6776
f637880758_541.returns.push(1373482801934);
// 6777
o3 = {};
// 6778
f637880758_0.returns.push(o3);
// 6779
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6780
f637880758_541.returns.push(1373482801934);
// 6781
o3 = {};
// 6782
f637880758_0.returns.push(o3);
// 6783
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6784
f637880758_541.returns.push(1373482801935);
// 6785
o3 = {};
// 6786
f637880758_0.returns.push(o3);
// 6787
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6788
f637880758_541.returns.push(1373482801935);
// 6789
o3 = {};
// 6790
f637880758_0.returns.push(o3);
// 6791
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6792
f637880758_541.returns.push(1373482801935);
// 6793
o3 = {};
// 6794
f637880758_0.returns.push(o3);
// 6795
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6796
f637880758_541.returns.push(1373482801935);
// 6797
o3 = {};
// 6798
f637880758_0.returns.push(o3);
// 6799
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6800
f637880758_541.returns.push(1373482801937);
// 6801
o3 = {};
// 6802
f637880758_0.returns.push(o3);
// 6803
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6804
f637880758_541.returns.push(1373482801937);
// 6805
o3 = {};
// 6806
f637880758_0.returns.push(o3);
// 6807
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6808
f637880758_541.returns.push(1373482801937);
// 6809
o3 = {};
// 6810
f637880758_0.returns.push(o3);
// 6811
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6812
f637880758_541.returns.push(1373482801938);
// 6813
o3 = {};
// 6814
f637880758_0.returns.push(o3);
// 6815
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6816
f637880758_541.returns.push(1373482801938);
// 6817
o3 = {};
// 6818
f637880758_0.returns.push(o3);
// 6819
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6820
f637880758_541.returns.push(1373482801938);
// 6821
o3 = {};
// 6822
f637880758_0.returns.push(o3);
// 6823
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6824
f637880758_541.returns.push(1373482801938);
// 6825
o3 = {};
// 6826
f637880758_0.returns.push(o3);
// 6827
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6828
f637880758_541.returns.push(1373482801938);
// 6829
o3 = {};
// 6830
f637880758_0.returns.push(o3);
// 6831
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6832
f637880758_541.returns.push(1373482801939);
// 6833
o3 = {};
// 6834
f637880758_0.returns.push(o3);
// 6835
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6836
f637880758_541.returns.push(1373482801940);
// 6837
o3 = {};
// 6838
f637880758_0.returns.push(o3);
// 6839
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6840
f637880758_541.returns.push(1373482801940);
// 6841
o3 = {};
// 6842
f637880758_0.returns.push(o3);
// 6843
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6844
f637880758_541.returns.push(1373482801945);
// 6845
o3 = {};
// 6846
f637880758_0.returns.push(o3);
// 6847
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6848
f637880758_541.returns.push(1373482801945);
// 6849
o3 = {};
// 6850
f637880758_0.returns.push(o3);
// 6851
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6852
f637880758_541.returns.push(1373482801945);
// 6853
o3 = {};
// 6854
f637880758_0.returns.push(o3);
// 6855
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6856
f637880758_541.returns.push(1373482801946);
// 6857
o3 = {};
// 6858
f637880758_0.returns.push(o3);
// 6859
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6860
f637880758_541.returns.push(1373482801946);
// 6861
o3 = {};
// 6862
f637880758_0.returns.push(o3);
// 6863
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6864
f637880758_541.returns.push(1373482801946);
// 6865
o3 = {};
// 6866
f637880758_0.returns.push(o3);
// 6867
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6868
f637880758_541.returns.push(1373482801946);
// 6869
o3 = {};
// 6870
f637880758_0.returns.push(o3);
// 6871
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6872
f637880758_541.returns.push(1373482801947);
// 6873
o3 = {};
// 6874
f637880758_0.returns.push(o3);
// 6875
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6876
f637880758_541.returns.push(1373482801947);
// 6877
o3 = {};
// 6878
f637880758_0.returns.push(o3);
// 6879
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6880
f637880758_541.returns.push(1373482801947);
// 6881
o3 = {};
// 6882
f637880758_0.returns.push(o3);
// 6883
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6884
f637880758_541.returns.push(1373482801948);
// 6885
o3 = {};
// 6886
f637880758_0.returns.push(o3);
// 6887
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6888
f637880758_541.returns.push(1373482801948);
// 6889
o3 = {};
// 6890
f637880758_0.returns.push(o3);
// 6891
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6892
f637880758_541.returns.push(1373482801948);
// 6893
o3 = {};
// 6894
f637880758_0.returns.push(o3);
// 6895
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6896
f637880758_541.returns.push(1373482801948);
// 6897
o3 = {};
// 6898
f637880758_0.returns.push(o3);
// 6899
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6900
f637880758_541.returns.push(1373482801948);
// 6901
o3 = {};
// 6902
f637880758_0.returns.push(o3);
// 6903
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6904
f637880758_541.returns.push(1373482801949);
// 6905
o3 = {};
// 6906
f637880758_0.returns.push(o3);
// 6907
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6908
f637880758_541.returns.push(1373482801949);
// 6909
o3 = {};
// 6910
f637880758_0.returns.push(o3);
// 6911
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6912
f637880758_541.returns.push(1373482801951);
// 6913
o3 = {};
// 6914
f637880758_0.returns.push(o3);
// 6915
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6916
f637880758_541.returns.push(1373482801952);
// 6917
o3 = {};
// 6918
f637880758_0.returns.push(o3);
// 6919
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6920
f637880758_541.returns.push(1373482801952);
// 6921
o3 = {};
// 6922
f637880758_0.returns.push(o3);
// 6923
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6924
f637880758_541.returns.push(1373482801952);
// 6925
o3 = {};
// 6926
f637880758_0.returns.push(o3);
// 6927
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6928
f637880758_541.returns.push(1373482801952);
// 6929
o3 = {};
// 6930
f637880758_0.returns.push(o3);
// 6931
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6932
f637880758_541.returns.push(1373482801952);
// 6933
o3 = {};
// 6934
f637880758_0.returns.push(o3);
// 6935
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6936
f637880758_541.returns.push(1373482801954);
// 6937
o3 = {};
// 6938
f637880758_0.returns.push(o3);
// 6939
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6940
f637880758_541.returns.push(1373482801954);
// 6941
o3 = {};
// 6942
f637880758_0.returns.push(o3);
// 6943
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6944
f637880758_541.returns.push(1373482801954);
// 6945
o3 = {};
// 6946
f637880758_0.returns.push(o3);
// 6947
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6948
f637880758_541.returns.push(1373482801958);
// 6949
o3 = {};
// 6950
f637880758_0.returns.push(o3);
// 6951
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6952
f637880758_541.returns.push(1373482801958);
// 6953
o3 = {};
// 6954
f637880758_0.returns.push(o3);
// 6955
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6956
f637880758_541.returns.push(1373482801959);
// 6957
o3 = {};
// 6958
f637880758_0.returns.push(o3);
// 6959
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6960
f637880758_541.returns.push(1373482801959);
// 6961
o3 = {};
// 6962
f637880758_0.returns.push(o3);
// 6963
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6964
f637880758_541.returns.push(1373482801959);
// 6965
o3 = {};
// 6966
f637880758_0.returns.push(o3);
// 6967
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6968
f637880758_541.returns.push(1373482801959);
// 6969
o3 = {};
// 6970
f637880758_0.returns.push(o3);
// 6971
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6972
f637880758_541.returns.push(1373482801959);
// 6973
o3 = {};
// 6974
f637880758_0.returns.push(o3);
// 6975
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6976
f637880758_541.returns.push(1373482801962);
// 6977
o3 = {};
// 6978
f637880758_0.returns.push(o3);
// 6979
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6980
f637880758_541.returns.push(1373482801962);
// 6981
o3 = {};
// 6982
f637880758_0.returns.push(o3);
// 6983
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6984
f637880758_541.returns.push(1373482801963);
// 6985
o3 = {};
// 6986
f637880758_0.returns.push(o3);
// 6987
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6988
f637880758_541.returns.push(1373482801964);
// 6989
o3 = {};
// 6990
f637880758_0.returns.push(o3);
// 6991
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6992
f637880758_541.returns.push(1373482801964);
// 6993
o3 = {};
// 6994
f637880758_0.returns.push(o3);
// 6995
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 6996
f637880758_541.returns.push(1373482801964);
// 6997
o3 = {};
// 6998
f637880758_0.returns.push(o3);
// 6999
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7000
f637880758_541.returns.push(1373482801964);
// 7001
o3 = {};
// 7002
f637880758_0.returns.push(o3);
// 7003
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7004
f637880758_541.returns.push(1373482801965);
// 7005
o3 = {};
// 7006
f637880758_0.returns.push(o3);
// 7007
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7008
f637880758_541.returns.push(1373482801965);
// 7009
o3 = {};
// 7010
f637880758_0.returns.push(o3);
// 7011
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7012
f637880758_541.returns.push(1373482801965);
// 7013
o3 = {};
// 7014
f637880758_0.returns.push(o3);
// 7015
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7016
f637880758_541.returns.push(1373482801965);
// 7017
o3 = {};
// 7018
f637880758_0.returns.push(o3);
// 7019
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7020
f637880758_541.returns.push(1373482801966);
// 7021
o3 = {};
// 7022
f637880758_0.returns.push(o3);
// 7023
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7024
f637880758_541.returns.push(1373482801970);
// 7025
o3 = {};
// 7026
f637880758_0.returns.push(o3);
// 7027
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7028
f637880758_541.returns.push(1373482801970);
// 7029
o3 = {};
// 7030
f637880758_0.returns.push(o3);
// 7031
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7032
f637880758_541.returns.push(1373482801970);
// 7033
o3 = {};
// 7034
f637880758_0.returns.push(o3);
// 7035
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7036
f637880758_541.returns.push(1373482801971);
// 7037
o3 = {};
// 7038
f637880758_0.returns.push(o3);
// 7039
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7040
f637880758_541.returns.push(1373482801971);
// 7041
o3 = {};
// 7042
f637880758_0.returns.push(o3);
// 7043
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7044
f637880758_541.returns.push(1373482801971);
// 7045
o3 = {};
// 7046
f637880758_0.returns.push(o3);
// 7047
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7048
f637880758_541.returns.push(1373482801971);
// 7049
o3 = {};
// 7050
f637880758_0.returns.push(o3);
// 7051
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7052
f637880758_541.returns.push(1373482801972);
// 7053
o3 = {};
// 7054
f637880758_0.returns.push(o3);
// 7055
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7056
f637880758_541.returns.push(1373482801976);
// 7057
o3 = {};
// 7058
f637880758_0.returns.push(o3);
// 7059
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7060
f637880758_541.returns.push(1373482801976);
// 7061
o3 = {};
// 7062
f637880758_0.returns.push(o3);
// 7063
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7064
f637880758_541.returns.push(1373482801976);
// 7065
o3 = {};
// 7066
f637880758_0.returns.push(o3);
// 7067
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7068
f637880758_541.returns.push(1373482801976);
// 7069
o3 = {};
// 7070
f637880758_0.returns.push(o3);
// 7071
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7072
f637880758_541.returns.push(1373482801976);
// 7073
o3 = {};
// 7074
f637880758_0.returns.push(o3);
// 7075
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7076
f637880758_541.returns.push(1373482801977);
// 7077
o3 = {};
// 7078
f637880758_0.returns.push(o3);
// 7079
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7080
f637880758_541.returns.push(1373482801977);
// 7081
o3 = {};
// 7082
f637880758_0.returns.push(o3);
// 7083
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7084
f637880758_541.returns.push(1373482801977);
// 7085
o3 = {};
// 7086
f637880758_0.returns.push(o3);
// 7087
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7088
f637880758_541.returns.push(1373482801977);
// 7089
o3 = {};
// 7090
f637880758_0.returns.push(o3);
// 7091
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7092
f637880758_541.returns.push(1373482801977);
// 7093
o3 = {};
// 7094
f637880758_0.returns.push(o3);
// 7095
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7096
f637880758_541.returns.push(1373482801978);
// 7097
o3 = {};
// 7098
f637880758_0.returns.push(o3);
// 7099
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7100
f637880758_541.returns.push(1373482801978);
// 7101
o3 = {};
// 7102
f637880758_0.returns.push(o3);
// 7103
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7104
f637880758_541.returns.push(1373482801978);
// 7105
o3 = {};
// 7106
f637880758_0.returns.push(o3);
// 7107
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7108
f637880758_541.returns.push(1373482801978);
// 7109
o3 = {};
// 7110
f637880758_0.returns.push(o3);
// 7111
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7112
f637880758_541.returns.push(1373482801978);
// 7113
o3 = {};
// 7114
f637880758_0.returns.push(o3);
// 7115
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7116
f637880758_541.returns.push(1373482801978);
// 7117
o3 = {};
// 7118
f637880758_0.returns.push(o3);
// 7119
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7120
f637880758_541.returns.push(1373482801978);
// 7121
o3 = {};
// 7122
f637880758_0.returns.push(o3);
// 7123
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7124
f637880758_541.returns.push(1373482801978);
// 7125
o3 = {};
// 7126
f637880758_0.returns.push(o3);
// 7127
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7128
f637880758_541.returns.push(1373482801979);
// 7129
o3 = {};
// 7130
f637880758_0.returns.push(o3);
// 7131
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7132
f637880758_541.returns.push(1373482801979);
// 7133
o3 = {};
// 7134
f637880758_0.returns.push(o3);
// 7135
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7136
f637880758_541.returns.push(1373482801979);
// 7137
o3 = {};
// 7138
f637880758_0.returns.push(o3);
// 7139
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7140
f637880758_541.returns.push(1373482801979);
// 7141
o3 = {};
// 7142
f637880758_0.returns.push(o3);
// 7143
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7144
f637880758_541.returns.push(1373482801983);
// 7145
o3 = {};
// 7146
f637880758_0.returns.push(o3);
// 7147
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7148
f637880758_541.returns.push(1373482801983);
// 7149
o3 = {};
// 7150
f637880758_0.returns.push(o3);
// 7151
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7152
f637880758_541.returns.push(1373482801983);
// 7153
o3 = {};
// 7154
f637880758_0.returns.push(o3);
// 7155
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7156
f637880758_541.returns.push(1373482801983);
// 7157
o3 = {};
// 7158
f637880758_0.returns.push(o3);
// 7159
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7160
f637880758_541.returns.push(1373482801986);
// 7162
f637880758_522.returns.push(null);
// 7163
o3 = {};
// 7164
f637880758_0.returns.push(o3);
// 7165
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7166
f637880758_541.returns.push(1373482801987);
// 7167
o3 = {};
// 7168
f637880758_0.returns.push(o3);
// 7169
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7170
f637880758_541.returns.push(1373482801987);
// 7171
o3 = {};
// 7172
f637880758_0.returns.push(o3);
// 7173
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7174
f637880758_541.returns.push(1373482801987);
// 7175
o3 = {};
// 7176
f637880758_0.returns.push(o3);
// 7177
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7178
f637880758_541.returns.push(1373482801988);
// 7179
o3 = {};
// 7180
f637880758_0.returns.push(o3);
// 7181
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7182
f637880758_541.returns.push(1373482801988);
// 7183
o3 = {};
// 7184
f637880758_0.returns.push(o3);
// 7185
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7186
f637880758_541.returns.push(1373482801988);
// 7187
o3 = {};
// 7188
f637880758_0.returns.push(o3);
// 7189
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7190
f637880758_541.returns.push(1373482801988);
// 7191
o3 = {};
// 7192
f637880758_0.returns.push(o3);
// 7193
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7194
f637880758_541.returns.push(1373482801988);
// 7195
o3 = {};
// 7196
f637880758_0.returns.push(o3);
// 7197
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7198
f637880758_541.returns.push(1373482801988);
// 7199
o3 = {};
// 7200
f637880758_0.returns.push(o3);
// 7201
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7202
f637880758_541.returns.push(1373482801988);
// 7203
o3 = {};
// 7204
f637880758_0.returns.push(o3);
// 7205
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7206
f637880758_541.returns.push(1373482801990);
// 7207
o3 = {};
// 7208
f637880758_0.returns.push(o3);
// 7209
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7210
f637880758_541.returns.push(1373482801990);
// 7211
o3 = {};
// 7212
f637880758_0.returns.push(o3);
// 7213
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7214
f637880758_541.returns.push(1373482801990);
// 7215
o3 = {};
// 7216
f637880758_0.returns.push(o3);
// 7217
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7218
f637880758_541.returns.push(1373482801990);
// 7219
o3 = {};
// 7220
f637880758_0.returns.push(o3);
// 7221
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7222
f637880758_541.returns.push(1373482801991);
// 7223
o3 = {};
// 7224
f637880758_0.returns.push(o3);
// 7225
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7226
f637880758_541.returns.push(1373482801991);
// 7227
o3 = {};
// 7228
f637880758_0.returns.push(o3);
// 7229
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7230
f637880758_541.returns.push(1373482801991);
// 7231
o3 = {};
// 7232
f637880758_0.returns.push(o3);
// 7233
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7234
f637880758_541.returns.push(1373482801991);
// 7235
o3 = {};
// 7236
f637880758_0.returns.push(o3);
// 7237
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7238
f637880758_541.returns.push(1373482801991);
// 7239
o3 = {};
// 7240
f637880758_0.returns.push(o3);
// 7241
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7242
f637880758_541.returns.push(1373482801992);
// 7243
o3 = {};
// 7244
f637880758_0.returns.push(o3);
// 7245
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7246
f637880758_541.returns.push(1373482801992);
// 7247
o3 = {};
// 7248
f637880758_0.returns.push(o3);
// 7249
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7250
f637880758_541.returns.push(1373482801992);
// 7251
o3 = {};
// 7252
f637880758_0.returns.push(o3);
// 7253
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7254
f637880758_541.returns.push(1373482801993);
// 7255
o3 = {};
// 7256
f637880758_0.returns.push(o3);
// 7257
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7258
f637880758_541.returns.push(1373482801993);
// 7259
o3 = {};
// 7260
f637880758_0.returns.push(o3);
// 7261
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7262
f637880758_541.returns.push(1373482801993);
// 7263
o3 = {};
// 7264
f637880758_0.returns.push(o3);
// 7265
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7266
f637880758_541.returns.push(1373482801997);
// 7267
o3 = {};
// 7268
f637880758_0.returns.push(o3);
// 7269
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7270
f637880758_541.returns.push(1373482801997);
// 7271
o3 = {};
// 7272
f637880758_0.returns.push(o3);
// 7273
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7274
f637880758_541.returns.push(1373482801998);
// 7275
o3 = {};
// 7276
f637880758_0.returns.push(o3);
// 7277
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7278
f637880758_541.returns.push(1373482801998);
// 7279
o3 = {};
// 7280
f637880758_0.returns.push(o3);
// 7281
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7282
f637880758_541.returns.push(1373482801998);
// 7283
o3 = {};
// 7284
f637880758_0.returns.push(o3);
// 7285
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7286
f637880758_541.returns.push(1373482801999);
// 7287
o3 = {};
// 7288
f637880758_0.returns.push(o3);
// 7289
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7290
f637880758_541.returns.push(1373482801999);
// 7291
o3 = {};
// 7292
f637880758_0.returns.push(o3);
// 7293
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7294
f637880758_541.returns.push(1373482801999);
// 7295
o3 = {};
// 7296
f637880758_0.returns.push(o3);
// 7297
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7298
f637880758_541.returns.push(1373482801999);
// 7299
o3 = {};
// 7300
f637880758_0.returns.push(o3);
// 7301
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7302
f637880758_541.returns.push(1373482801999);
// 7303
o3 = {};
// 7304
f637880758_0.returns.push(o3);
// 7305
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7306
f637880758_541.returns.push(1373482802000);
// 7307
o3 = {};
// 7308
f637880758_0.returns.push(o3);
// 7309
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7310
f637880758_541.returns.push(1373482802000);
// 7311
o3 = {};
// 7312
f637880758_0.returns.push(o3);
// 7313
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7314
f637880758_541.returns.push(1373482802000);
// 7315
o3 = {};
// 7316
f637880758_0.returns.push(o3);
// 7317
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7318
f637880758_541.returns.push(1373482802001);
// 7319
o3 = {};
// 7320
f637880758_0.returns.push(o3);
// 7321
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7322
f637880758_541.returns.push(1373482802001);
// 7323
o3 = {};
// 7324
f637880758_0.returns.push(o3);
// 7325
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7326
f637880758_541.returns.push(1373482802001);
// 7327
o3 = {};
// 7328
f637880758_0.returns.push(o3);
// 7329
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7330
f637880758_541.returns.push(1373482802002);
// 7331
o3 = {};
// 7332
f637880758_0.returns.push(o3);
// 7333
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7334
f637880758_541.returns.push(1373482802002);
// 7335
o3 = {};
// 7336
f637880758_0.returns.push(o3);
// 7337
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7338
f637880758_541.returns.push(1373482802002);
// 7339
o3 = {};
// 7340
f637880758_0.returns.push(o3);
// 7341
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7342
f637880758_541.returns.push(1373482802002);
// 7343
o3 = {};
// 7344
f637880758_0.returns.push(o3);
// 7345
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7346
f637880758_541.returns.push(1373482802002);
// 7347
o3 = {};
// 7348
f637880758_0.returns.push(o3);
// 7349
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7350
f637880758_541.returns.push(1373482802003);
// 7351
o3 = {};
// 7352
f637880758_0.returns.push(o3);
// 7353
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7354
f637880758_541.returns.push(1373482802003);
// 7355
o3 = {};
// 7356
f637880758_0.returns.push(o3);
// 7357
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7358
f637880758_541.returns.push(1373482802003);
// 7359
o3 = {};
// 7360
f637880758_0.returns.push(o3);
// 7361
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7362
f637880758_541.returns.push(1373482802003);
// 7363
o3 = {};
// 7364
f637880758_0.returns.push(o3);
// 7365
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7366
f637880758_541.returns.push(1373482802003);
// 7367
o3 = {};
// 7368
f637880758_0.returns.push(o3);
// 7369
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7370
f637880758_541.returns.push(1373482802003);
// 7371
o3 = {};
// 7372
f637880758_0.returns.push(o3);
// 7373
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7374
f637880758_541.returns.push(1373482802007);
// 7375
o3 = {};
// 7376
f637880758_0.returns.push(o3);
// 7377
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7378
f637880758_541.returns.push(1373482802007);
// 7379
o3 = {};
// 7380
f637880758_0.returns.push(o3);
// 7381
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7382
f637880758_541.returns.push(1373482802007);
// 7383
o3 = {};
// 7384
f637880758_0.returns.push(o3);
// 7385
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7386
f637880758_541.returns.push(1373482802017);
// 7387
o3 = {};
// 7388
f637880758_0.returns.push(o3);
// 7389
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7390
f637880758_541.returns.push(1373482802018);
// 7391
o3 = {};
// 7392
f637880758_0.returns.push(o3);
// 7393
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7394
f637880758_541.returns.push(1373482802018);
// 7395
o3 = {};
// 7396
f637880758_0.returns.push(o3);
// 7397
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7398
f637880758_541.returns.push(1373482802018);
// 7399
o3 = {};
// 7400
f637880758_0.returns.push(o3);
// 7401
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7402
f637880758_541.returns.push(1373482802018);
// 7403
o3 = {};
// 7404
f637880758_0.returns.push(o3);
// 7405
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7406
f637880758_541.returns.push(1373482802018);
// 7407
o3 = {};
// 7408
f637880758_0.returns.push(o3);
// 7409
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7410
f637880758_541.returns.push(1373482802018);
// 7411
o3 = {};
// 7412
f637880758_0.returns.push(o3);
// 7413
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7414
f637880758_541.returns.push(1373482802018);
// 7415
o3 = {};
// 7416
f637880758_0.returns.push(o3);
// 7417
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7418
f637880758_541.returns.push(1373482802019);
// 7419
o3 = {};
// 7420
f637880758_0.returns.push(o3);
// 7421
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7422
f637880758_541.returns.push(1373482802019);
// 7423
o3 = {};
// 7424
f637880758_0.returns.push(o3);
// 7425
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7426
f637880758_541.returns.push(1373482802020);
// 7427
o3 = {};
// 7428
f637880758_0.returns.push(o3);
// 7429
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7430
f637880758_541.returns.push(1373482802020);
// 7431
o3 = {};
// 7432
f637880758_0.returns.push(o3);
// 7433
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7434
f637880758_541.returns.push(1373482802020);
// 7435
o3 = {};
// 7436
f637880758_0.returns.push(o3);
// 7437
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7438
f637880758_541.returns.push(1373482802021);
// 7439
o3 = {};
// 7440
f637880758_0.returns.push(o3);
// 7441
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7442
f637880758_541.returns.push(1373482802021);
// 7443
o3 = {};
// 7444
f637880758_0.returns.push(o3);
// 7445
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7446
f637880758_541.returns.push(1373482802021);
// 7447
o3 = {};
// 7448
f637880758_0.returns.push(o3);
// 7449
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7450
f637880758_541.returns.push(1373482802025);
// 7451
o3 = {};
// 7452
f637880758_0.returns.push(o3);
// 7453
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7454
f637880758_541.returns.push(1373482802025);
// 7455
o3 = {};
// 7456
f637880758_0.returns.push(o3);
// 7457
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7458
f637880758_541.returns.push(1373482802025);
// 7459
o3 = {};
// 7460
f637880758_0.returns.push(o3);
// 7461
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7462
f637880758_541.returns.push(1373482802026);
// 7463
o3 = {};
// 7464
f637880758_0.returns.push(o3);
// 7465
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7466
f637880758_541.returns.push(1373482802026);
// 7467
o3 = {};
// 7468
f637880758_0.returns.push(o3);
// 7469
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7470
f637880758_541.returns.push(1373482802026);
// 7471
o3 = {};
// 7472
f637880758_0.returns.push(o3);
// 7473
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7474
f637880758_541.returns.push(1373482802026);
// 7475
o3 = {};
// 7476
f637880758_0.returns.push(o3);
// 7477
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7478
f637880758_541.returns.push(1373482802036);
// 7479
o3 = {};
// 7480
f637880758_0.returns.push(o3);
// 7481
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7482
f637880758_541.returns.push(1373482802036);
// 7483
o3 = {};
// 7484
f637880758_0.returns.push(o3);
// 7485
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7486
f637880758_541.returns.push(1373482802036);
// 7488
o3 = {};
// 7489
f637880758_522.returns.push(o3);
// 7490
o3.parentNode = o10;
// 7491
o3.id = "profile_popup";
// undefined
o3 = null;
// 7492
o3 = {};
// 7493
f637880758_0.returns.push(o3);
// 7494
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7495
f637880758_541.returns.push(1373482802037);
// 7496
o3 = {};
// 7497
f637880758_0.returns.push(o3);
// 7498
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7499
f637880758_541.returns.push(1373482802037);
// 7500
o3 = {};
// 7501
f637880758_0.returns.push(o3);
// 7502
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7503
f637880758_541.returns.push(1373482802038);
// 7504
o3 = {};
// 7505
f637880758_0.returns.push(o3);
// 7506
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7507
f637880758_541.returns.push(1373482802042);
// 7508
o3 = {};
// 7509
f637880758_0.returns.push(o3);
// 7510
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7511
f637880758_541.returns.push(1373482802042);
// 7512
o3 = {};
// 7513
f637880758_0.returns.push(o3);
// 7514
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7515
f637880758_541.returns.push(1373482802043);
// 7516
o3 = {};
// 7517
f637880758_0.returns.push(o3);
// 7518
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7519
f637880758_541.returns.push(1373482802043);
// 7520
o3 = {};
// 7521
f637880758_0.returns.push(o3);
// 7522
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7523
f637880758_541.returns.push(1373482802043);
// 7524
o3 = {};
// 7525
f637880758_0.returns.push(o3);
// 7526
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7527
f637880758_541.returns.push(1373482802043);
// 7528
o3 = {};
// 7529
f637880758_0.returns.push(o3);
// 7530
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7531
f637880758_541.returns.push(1373482802043);
// 7532
o3 = {};
// 7533
f637880758_0.returns.push(o3);
// 7534
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7535
f637880758_541.returns.push(1373482802044);
// 7536
o3 = {};
// 7537
f637880758_0.returns.push(o3);
// 7538
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7539
f637880758_541.returns.push(1373482802044);
// 7540
o3 = {};
// 7541
f637880758_0.returns.push(o3);
// 7542
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7543
f637880758_541.returns.push(1373482802044);
// 7544
o3 = {};
// 7545
f637880758_0.returns.push(o3);
// 7546
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7547
f637880758_541.returns.push(1373482802044);
// 7548
o3 = {};
// 7549
f637880758_0.returns.push(o3);
// 7550
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7551
f637880758_541.returns.push(1373482802044);
// 7552
o3 = {};
// 7553
f637880758_0.returns.push(o3);
// 7554
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7555
f637880758_541.returns.push(1373482802045);
// 7556
o3 = {};
// 7557
f637880758_0.returns.push(o3);
// 7558
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7559
f637880758_541.returns.push(1373482802045);
// 7560
o3 = {};
// 7561
f637880758_0.returns.push(o3);
// 7562
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7563
f637880758_541.returns.push(1373482802045);
// 7564
o3 = {};
// 7565
f637880758_0.returns.push(o3);
// 7566
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7567
f637880758_541.returns.push(1373482802045);
// 7568
o3 = {};
// 7569
f637880758_0.returns.push(o3);
// 7570
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7571
f637880758_541.returns.push(1373482802045);
// 7572
o3 = {};
// 7573
f637880758_0.returns.push(o3);
// 7574
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7575
f637880758_541.returns.push(1373482802045);
// 7576
o3 = {};
// 7577
f637880758_0.returns.push(o3);
// 7578
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7579
f637880758_541.returns.push(1373482802045);
// 7580
o3 = {};
// 7581
f637880758_0.returns.push(o3);
// 7582
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7583
f637880758_541.returns.push(1373482802046);
// 7584
o3 = {};
// 7585
f637880758_0.returns.push(o3);
// 7586
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7587
f637880758_541.returns.push(1373482802049);
// 7588
o3 = {};
// 7589
f637880758_0.returns.push(o3);
// 7590
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7591
f637880758_541.returns.push(1373482802049);
// 7592
o3 = {};
// 7593
f637880758_0.returns.push(o3);
// 7594
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7595
f637880758_541.returns.push(1373482802049);
// 7596
o3 = {};
// 7597
f637880758_0.returns.push(o3);
// 7598
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7599
f637880758_541.returns.push(1373482802049);
// 7600
o3 = {};
// 7601
f637880758_0.returns.push(o3);
// 7602
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7603
f637880758_541.returns.push(1373482802050);
// 7604
o3 = {};
// 7605
f637880758_0.returns.push(o3);
// 7606
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7607
f637880758_541.returns.push(1373482802050);
// 7608
o3 = {};
// 7609
f637880758_0.returns.push(o3);
// 7610
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7611
f637880758_541.returns.push(1373482802050);
// 7612
o3 = {};
// 7613
f637880758_0.returns.push(o3);
// 7614
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7615
f637880758_541.returns.push(1373482802050);
// 7616
o3 = {};
// 7617
f637880758_0.returns.push(o3);
// 7618
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7619
f637880758_541.returns.push(1373482802050);
// 7620
o3 = {};
// 7621
f637880758_0.returns.push(o3);
// 7622
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7623
f637880758_541.returns.push(1373482802050);
// 7624
o3 = {};
// 7625
f637880758_0.returns.push(o3);
// 7626
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7627
f637880758_541.returns.push(1373482802051);
// 7628
o3 = {};
// 7629
f637880758_0.returns.push(o3);
// 7630
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7631
f637880758_541.returns.push(1373482802051);
// 7632
o3 = {};
// 7633
f637880758_0.returns.push(o3);
// 7634
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7635
f637880758_541.returns.push(1373482802051);
// 7636
o3 = {};
// 7637
f637880758_0.returns.push(o3);
// 7638
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7639
f637880758_541.returns.push(1373482802051);
// 7640
o3 = {};
// 7641
f637880758_0.returns.push(o3);
// 7642
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7643
f637880758_541.returns.push(1373482802051);
// 7644
o3 = {};
// 7645
f637880758_0.returns.push(o3);
// 7646
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7647
f637880758_541.returns.push(1373482802051);
// 7648
o3 = {};
// 7649
f637880758_0.returns.push(o3);
// 7650
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7651
f637880758_541.returns.push(1373482802051);
// 7652
o3 = {};
// 7653
f637880758_0.returns.push(o3);
// 7654
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7655
f637880758_541.returns.push(1373482802051);
// 7656
o3 = {};
// 7657
f637880758_0.returns.push(o3);
// 7658
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7659
f637880758_541.returns.push(1373482802052);
// 7660
o3 = {};
// 7661
f637880758_0.returns.push(o3);
// 7662
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7663
f637880758_541.returns.push(1373482802052);
// 7664
o3 = {};
// 7665
f637880758_0.returns.push(o3);
// 7666
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7667
f637880758_541.returns.push(1373482802052);
// 7668
o3 = {};
// 7669
f637880758_0.returns.push(o3);
// 7670
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7671
f637880758_541.returns.push(1373482802052);
// 7672
o3 = {};
// 7673
f637880758_0.returns.push(o3);
// 7674
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7675
f637880758_541.returns.push(1373482802052);
// 7676
o3 = {};
// 7677
f637880758_0.returns.push(o3);
// 7678
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7679
f637880758_541.returns.push(1373482802053);
// 7680
o3 = {};
// 7681
f637880758_0.returns.push(o3);
// 7682
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7683
f637880758_541.returns.push(1373482802053);
// 7684
o3 = {};
// 7685
f637880758_0.returns.push(o3);
// 7686
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7687
f637880758_541.returns.push(1373482802053);
// 7688
o3 = {};
// 7689
f637880758_0.returns.push(o3);
// 7690
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7691
f637880758_541.returns.push(1373482802059);
// 7692
o3 = {};
// 7693
f637880758_0.returns.push(o3);
// 7694
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7695
f637880758_541.returns.push(1373482802060);
// 7696
o3 = {};
// 7697
f637880758_0.returns.push(o3);
// 7698
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7699
f637880758_541.returns.push(1373482802060);
// 7700
o3 = {};
// 7701
f637880758_0.returns.push(o3);
// 7702
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7703
f637880758_541.returns.push(1373482802060);
// 7704
o3 = {};
// 7705
f637880758_0.returns.push(o3);
// 7706
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7707
f637880758_541.returns.push(1373482802060);
// 7708
o3 = {};
// 7709
f637880758_0.returns.push(o3);
// 7710
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7711
f637880758_541.returns.push(1373482802060);
// 7712
o3 = {};
// 7713
f637880758_0.returns.push(o3);
// 7714
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7715
f637880758_541.returns.push(1373482802060);
// 7716
o3 = {};
// 7717
f637880758_0.returns.push(o3);
// 7718
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7719
f637880758_541.returns.push(1373482802061);
// 7720
o3 = {};
// 7721
f637880758_0.returns.push(o3);
// 7722
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7723
f637880758_541.returns.push(1373482802061);
// 7724
o3 = {};
// 7725
f637880758_0.returns.push(o3);
// 7726
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7727
f637880758_541.returns.push(1373482802062);
// 7728
o3 = {};
// 7729
f637880758_0.returns.push(o3);
// 7730
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7731
f637880758_541.returns.push(1373482802062);
// 7732
o3 = {};
// 7733
f637880758_0.returns.push(o3);
// 7734
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7735
f637880758_541.returns.push(1373482802062);
// 7736
o3 = {};
// 7737
f637880758_0.returns.push(o3);
// 7738
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7739
f637880758_541.returns.push(1373482802062);
// 7740
o3 = {};
// 7741
f637880758_0.returns.push(o3);
// 7742
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7743
f637880758_541.returns.push(1373482802062);
// 7744
o3 = {};
// 7745
f637880758_0.returns.push(o3);
// 7746
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7747
f637880758_541.returns.push(1373482802062);
// 7748
o3 = {};
// 7749
f637880758_0.returns.push(o3);
// 7750
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7751
f637880758_541.returns.push(1373482802063);
// 7752
o3 = {};
// 7753
f637880758_0.returns.push(o3);
// 7754
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7755
f637880758_541.returns.push(1373482802063);
// 7756
o3 = {};
// 7757
f637880758_0.returns.push(o3);
// 7758
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7759
f637880758_541.returns.push(1373482802063);
// 7760
o3 = {};
// 7761
f637880758_0.returns.push(o3);
// 7762
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7763
f637880758_541.returns.push(1373482802063);
// 7764
o3 = {};
// 7765
f637880758_0.returns.push(o3);
// 7766
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7767
f637880758_541.returns.push(1373482802063);
// 7768
o3 = {};
// 7769
f637880758_0.returns.push(o3);
// 7770
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7771
f637880758_541.returns.push(1373482802064);
// 7772
o3 = {};
// 7773
f637880758_0.returns.push(o3);
// 7774
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7775
f637880758_541.returns.push(1373482802064);
// 7776
o3 = {};
// 7777
f637880758_0.returns.push(o3);
// 7778
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7779
f637880758_541.returns.push(1373482802064);
// 7780
o3 = {};
// 7781
f637880758_0.returns.push(o3);
// 7782
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7783
f637880758_541.returns.push(1373482802074);
// 7784
o3 = {};
// 7785
f637880758_0.returns.push(o3);
// 7786
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7787
f637880758_541.returns.push(1373482802074);
// 7788
o3 = {};
// 7789
f637880758_0.returns.push(o3);
// 7790
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7791
f637880758_541.returns.push(1373482802074);
// 7792
o3 = {};
// 7793
f637880758_0.returns.push(o3);
// 7794
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7795
f637880758_541.returns.push(1373482802075);
// 7796
o3 = {};
// 7797
f637880758_0.returns.push(o3);
// 7798
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7799
f637880758_541.returns.push(1373482802079);
// 7800
o3 = {};
// 7801
f637880758_0.returns.push(o3);
// 7802
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7803
f637880758_541.returns.push(1373482802080);
// 7804
o3 = {};
// 7805
f637880758_0.returns.push(o3);
// 7806
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7807
f637880758_541.returns.push(1373482802080);
// 7808
o3 = {};
// 7809
f637880758_0.returns.push(o3);
// 7810
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7811
f637880758_541.returns.push(1373482802080);
// 7812
o3 = {};
// 7813
f637880758_0.returns.push(o3);
// 7814
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7815
f637880758_541.returns.push(1373482802080);
// 7816
o3 = {};
// 7817
f637880758_0.returns.push(o3);
// 7818
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7819
f637880758_541.returns.push(1373482802082);
// 7820
o3 = {};
// 7821
f637880758_0.returns.push(o3);
// 7822
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7823
f637880758_541.returns.push(1373482802082);
// 7824
o3 = {};
// 7825
f637880758_0.returns.push(o3);
// 7826
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7827
f637880758_541.returns.push(1373482802083);
// 7828
o3 = {};
// 7829
f637880758_0.returns.push(o3);
// 7830
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7831
f637880758_541.returns.push(1373482802084);
// 7832
o3 = {};
// 7833
f637880758_0.returns.push(o3);
// 7834
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7835
f637880758_541.returns.push(1373482802084);
// 7836
o3 = {};
// 7837
f637880758_0.returns.push(o3);
// 7838
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7839
f637880758_541.returns.push(1373482802084);
// 7840
o3 = {};
// 7841
f637880758_0.returns.push(o3);
// 7842
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7843
f637880758_541.returns.push(1373482802085);
// 7844
o3 = {};
// 7845
f637880758_0.returns.push(o3);
// 7846
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7847
f637880758_541.returns.push(1373482802085);
// 7848
o3 = {};
// 7849
f637880758_0.returns.push(o3);
// 7850
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7851
f637880758_541.returns.push(1373482802085);
// 7852
o3 = {};
// 7853
f637880758_0.returns.push(o3);
// 7854
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7855
f637880758_541.returns.push(1373482802085);
// 7856
o3 = {};
// 7857
f637880758_0.returns.push(o3);
// 7858
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7859
f637880758_541.returns.push(1373482802087);
// 7860
o3 = {};
// 7861
f637880758_0.returns.push(o3);
// 7862
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7863
f637880758_541.returns.push(1373482802087);
// 7864
o3 = {};
// 7865
f637880758_0.returns.push(o3);
// 7866
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7867
f637880758_541.returns.push(1373482802088);
// 7868
o3 = {};
// 7869
f637880758_0.returns.push(o3);
// 7870
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7871
f637880758_541.returns.push(1373482802088);
// 7872
o3 = {};
// 7873
f637880758_0.returns.push(o3);
// 7874
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7875
f637880758_541.returns.push(1373482802088);
// 7876
o3 = {};
// 7877
f637880758_0.returns.push(o3);
// 7878
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7879
f637880758_541.returns.push(1373482802089);
// 7880
o3 = {};
// 7881
f637880758_0.returns.push(o3);
// 7882
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7883
f637880758_541.returns.push(1373482802089);
// 7884
o3 = {};
// 7885
f637880758_0.returns.push(o3);
// 7886
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7887
f637880758_541.returns.push(1373482802089);
// 7888
o3 = {};
// 7889
f637880758_0.returns.push(o3);
// 7890
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7891
f637880758_541.returns.push(1373482802089);
// 7892
o3 = {};
// 7893
f637880758_0.returns.push(o3);
// 7894
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7895
f637880758_541.returns.push(1373482802090);
// 7896
o3 = {};
// 7897
f637880758_0.returns.push(o3);
// 7898
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7899
f637880758_541.returns.push(1373482802090);
// 7900
o3 = {};
// 7901
f637880758_0.returns.push(o3);
// 7902
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7903
f637880758_541.returns.push(1373482802095);
// 7904
o3 = {};
// 7905
f637880758_0.returns.push(o3);
// 7906
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7907
f637880758_541.returns.push(1373482802095);
// 7908
o3 = {};
// 7909
f637880758_0.returns.push(o3);
// 7910
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7911
f637880758_541.returns.push(1373482802096);
// 7912
o3 = {};
// 7913
f637880758_0.returns.push(o3);
// 7914
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7915
f637880758_541.returns.push(1373482802096);
// 7916
o3 = {};
// 7917
f637880758_0.returns.push(o3);
// 7918
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7919
f637880758_541.returns.push(1373482802097);
// 7920
o3 = {};
// 7921
f637880758_0.returns.push(o3);
// 7922
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7923
f637880758_541.returns.push(1373482802097);
// 7924
o3 = {};
// 7925
f637880758_0.returns.push(o3);
// 7926
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7927
f637880758_541.returns.push(1373482802098);
// 7928
o3 = {};
// 7929
f637880758_0.returns.push(o3);
// 7930
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7931
f637880758_541.returns.push(1373482802098);
// 7932
o3 = {};
// 7933
f637880758_0.returns.push(o3);
// 7934
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7935
f637880758_541.returns.push(1373482802098);
// 7936
o3 = {};
// 7937
f637880758_0.returns.push(o3);
// 7938
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7939
f637880758_541.returns.push(1373482802099);
// 7940
o3 = {};
// 7941
f637880758_0.returns.push(o3);
// 7942
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7943
f637880758_541.returns.push(1373482802099);
// 7944
o3 = {};
// 7945
f637880758_0.returns.push(o3);
// 7946
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7947
f637880758_541.returns.push(1373482802099);
// 7948
o3 = {};
// 7949
f637880758_0.returns.push(o3);
// 7950
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7951
f637880758_541.returns.push(1373482802099);
// 7952
o3 = {};
// 7953
f637880758_0.returns.push(o3);
// 7954
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7955
f637880758_541.returns.push(1373482802099);
// 7956
o3 = {};
// 7957
f637880758_0.returns.push(o3);
// 7958
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7959
f637880758_541.returns.push(1373482802100);
// 7960
o3 = {};
// 7961
f637880758_0.returns.push(o3);
// 7962
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7963
f637880758_541.returns.push(1373482802100);
// 7964
o3 = {};
// 7965
f637880758_0.returns.push(o3);
// 7966
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7967
f637880758_541.returns.push(1373482802100);
// 7968
o3 = {};
// 7969
f637880758_0.returns.push(o3);
// 7970
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7971
f637880758_541.returns.push(1373482802100);
// 7972
o3 = {};
// 7973
f637880758_0.returns.push(o3);
// 7974
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7975
f637880758_541.returns.push(1373482802100);
// 7976
o3 = {};
// 7977
f637880758_0.returns.push(o3);
// 7978
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7979
f637880758_541.returns.push(1373482802100);
// 7980
o3 = {};
// 7981
f637880758_0.returns.push(o3);
// 7982
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7983
f637880758_541.returns.push(1373482802101);
// 7984
o3 = {};
// 7985
f637880758_0.returns.push(o3);
// 7986
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7987
f637880758_541.returns.push(1373482802101);
// 7988
o3 = {};
// 7989
f637880758_0.returns.push(o3);
// 7990
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7991
f637880758_541.returns.push(1373482802102);
// 7992
o3 = {};
// 7993
f637880758_0.returns.push(o3);
// 7994
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7995
f637880758_541.returns.push(1373482802102);
// 7996
o3 = {};
// 7997
f637880758_0.returns.push(o3);
// 7998
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 7999
f637880758_541.returns.push(1373482802103);
// 8000
o3 = {};
// 8001
f637880758_0.returns.push(o3);
// 8002
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8003
f637880758_541.returns.push(1373482802103);
// 8004
o3 = {};
// 8005
f637880758_0.returns.push(o3);
// 8006
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8007
f637880758_541.returns.push(1373482802103);
// 8008
o3 = {};
// 8009
f637880758_0.returns.push(o3);
// 8010
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8011
f637880758_541.returns.push(1373482802107);
// 8012
o3 = {};
// 8013
f637880758_0.returns.push(o3);
// 8014
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8015
f637880758_541.returns.push(1373482802107);
// 8016
o3 = {};
// 8017
f637880758_0.returns.push(o3);
// 8018
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8019
f637880758_541.returns.push(1373482802107);
// 8020
o3 = {};
// 8021
f637880758_0.returns.push(o3);
// 8022
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8023
f637880758_541.returns.push(1373482802107);
// 8024
o3 = {};
// 8025
f637880758_0.returns.push(o3);
// 8026
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8027
f637880758_541.returns.push(1373482802111);
// 8028
o3 = {};
// 8029
f637880758_0.returns.push(o3);
// 8030
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8031
f637880758_541.returns.push(1373482802111);
// 8032
o3 = {};
// 8033
f637880758_0.returns.push(o3);
// 8034
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8035
f637880758_541.returns.push(1373482802112);
// 8036
o3 = {};
// 8037
f637880758_0.returns.push(o3);
// 8038
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8039
f637880758_541.returns.push(1373482802112);
// 8040
o3 = {};
// 8041
f637880758_0.returns.push(o3);
// 8042
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8043
f637880758_541.returns.push(1373482802112);
// 8044
o3 = {};
// 8045
f637880758_0.returns.push(o3);
// 8046
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8047
f637880758_541.returns.push(1373482802112);
// 8048
o3 = {};
// 8049
f637880758_0.returns.push(o3);
// 8050
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8051
f637880758_541.returns.push(1373482802114);
// 8052
o3 = {};
// 8053
f637880758_0.returns.push(o3);
// 8054
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8055
f637880758_541.returns.push(1373482802114);
// 8056
o3 = {};
// 8057
f637880758_0.returns.push(o3);
// 8058
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8059
f637880758_541.returns.push(1373482802114);
// 8060
o3 = {};
// 8061
f637880758_0.returns.push(o3);
// 8062
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8063
f637880758_541.returns.push(1373482802114);
// 8064
o3 = {};
// 8065
f637880758_0.returns.push(o3);
// 8066
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8067
f637880758_541.returns.push(1373482802114);
// 8068
o3 = {};
// 8069
f637880758_0.returns.push(o3);
// 8070
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8071
f637880758_541.returns.push(1373482802114);
// 8072
o3 = {};
// 8073
f637880758_0.returns.push(o3);
// 8074
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8075
f637880758_541.returns.push(1373482802114);
// 8076
o3 = {};
// 8077
f637880758_0.returns.push(o3);
// 8078
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8079
f637880758_541.returns.push(1373482802115);
// 8080
o3 = {};
// 8081
f637880758_0.returns.push(o3);
// 8082
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8083
f637880758_541.returns.push(1373482802116);
// 8084
o3 = {};
// 8085
f637880758_0.returns.push(o3);
// 8086
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8087
f637880758_541.returns.push(1373482802117);
// 8088
o3 = {};
// 8089
f637880758_0.returns.push(o3);
// 8090
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8091
f637880758_541.returns.push(1373482802117);
// 8092
o3 = {};
// 8093
f637880758_0.returns.push(o3);
// 8094
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8095
f637880758_541.returns.push(1373482802117);
// 8096
o3 = {};
// 8097
f637880758_0.returns.push(o3);
// 8098
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8099
f637880758_541.returns.push(1373482802117);
// 8100
o3 = {};
// 8101
f637880758_0.returns.push(o3);
// 8102
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8103
f637880758_541.returns.push(1373482802118);
// 8104
o3 = {};
// 8105
f637880758_0.returns.push(o3);
// 8106
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8107
f637880758_541.returns.push(1373482802118);
// 8108
o3 = {};
// 8109
f637880758_0.returns.push(o3);
// 8110
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8111
f637880758_541.returns.push(1373482802118);
// 8112
o3 = {};
// 8113
f637880758_0.returns.push(o3);
// 8114
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8115
f637880758_541.returns.push(1373482802122);
// 8116
o3 = {};
// 8117
f637880758_0.returns.push(o3);
// 8118
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8119
f637880758_541.returns.push(1373482802123);
// 8120
o3 = {};
// 8121
f637880758_0.returns.push(o3);
// 8122
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8123
f637880758_541.returns.push(1373482802124);
// 8124
o3 = {};
// 8125
f637880758_0.returns.push(o3);
// 8126
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8127
f637880758_541.returns.push(1373482802124);
// 8128
o3 = {};
// 8129
f637880758_0.returns.push(o3);
// 8130
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8131
f637880758_541.returns.push(1373482802124);
// 8132
o3 = {};
// 8133
f637880758_0.returns.push(o3);
// 8134
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8135
f637880758_541.returns.push(1373482802124);
// 8136
o3 = {};
// 8137
f637880758_0.returns.push(o3);
// 8138
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8139
f637880758_541.returns.push(1373482802125);
// 8140
o3 = {};
// 8141
f637880758_0.returns.push(o3);
// 8142
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8143
f637880758_541.returns.push(1373482802125);
// 8144
o3 = {};
// 8145
f637880758_0.returns.push(o3);
// 8146
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8147
f637880758_541.returns.push(1373482802125);
// 8148
o3 = {};
// 8149
f637880758_0.returns.push(o3);
// 8150
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8151
f637880758_541.returns.push(1373482802126);
// 8152
o3 = {};
// 8153
f637880758_0.returns.push(o3);
// 8154
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8155
f637880758_541.returns.push(1373482802126);
// 8156
o3 = {};
// 8157
f637880758_0.returns.push(o3);
// 8158
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8159
f637880758_541.returns.push(1373482802126);
// 8160
o3 = {};
// 8161
f637880758_0.returns.push(o3);
// 8162
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8163
f637880758_541.returns.push(1373482802126);
// 8164
o3 = {};
// 8165
f637880758_0.returns.push(o3);
// 8166
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8167
f637880758_541.returns.push(1373482802127);
// 8168
o3 = {};
// 8169
f637880758_0.returns.push(o3);
// 8170
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8171
f637880758_541.returns.push(1373482802127);
// 8172
o3 = {};
// 8173
f637880758_0.returns.push(o3);
// 8174
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8175
f637880758_541.returns.push(1373482802128);
// 8176
o3 = {};
// 8177
f637880758_0.returns.push(o3);
// 8178
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8179
f637880758_541.returns.push(1373482802129);
// 8180
o3 = {};
// 8181
f637880758_0.returns.push(o3);
// 8182
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8183
f637880758_541.returns.push(1373482802129);
// 8184
o3 = {};
// 8185
f637880758_0.returns.push(o3);
// 8186
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8187
f637880758_541.returns.push(1373482802129);
// 8188
o3 = {};
// 8189
f637880758_0.returns.push(o3);
// 8190
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8191
f637880758_541.returns.push(1373482802129);
// 8192
o3 = {};
// 8193
f637880758_0.returns.push(o3);
// 8194
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8195
f637880758_541.returns.push(1373482802130);
// 8196
o3 = {};
// 8197
f637880758_0.returns.push(o3);
// 8198
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8199
f637880758_541.returns.push(1373482802131);
// 8200
o3 = {};
// 8201
f637880758_0.returns.push(o3);
// 8202
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8203
f637880758_541.returns.push(1373482802131);
// 8204
o3 = {};
// 8205
f637880758_0.returns.push(o3);
// 8206
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8207
f637880758_541.returns.push(1373482802131);
// 8208
o3 = {};
// 8209
f637880758_0.returns.push(o3);
// 8210
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8211
f637880758_541.returns.push(1373482802131);
// 8212
o3 = {};
// 8213
f637880758_0.returns.push(o3);
// 8214
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8215
f637880758_541.returns.push(1373482802132);
// 8216
o3 = {};
// 8217
f637880758_0.returns.push(o3);
// 8218
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8219
f637880758_541.returns.push(1373482802133);
// 8220
o3 = {};
// 8221
f637880758_0.returns.push(o3);
// 8222
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8223
f637880758_541.returns.push(1373482802136);
// 8224
o3 = {};
// 8225
f637880758_0.returns.push(o3);
// 8226
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8227
f637880758_541.returns.push(1373482802136);
// 8228
o3 = {};
// 8229
f637880758_0.returns.push(o3);
// 8230
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8231
f637880758_541.returns.push(1373482802137);
// 8232
o5.protocol = "https:";
// 8233
o3 = {};
// 8234
f637880758_0.returns.push(o3);
// 8235
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8236
f637880758_541.returns.push(1373482802137);
// 8237
o3 = {};
// 8238
f637880758_0.returns.push(o3);
// 8239
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8240
f637880758_541.returns.push(1373482802137);
// 8241
o3 = {};
// 8242
f637880758_0.returns.push(o3);
// 8243
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8244
f637880758_541.returns.push(1373482802138);
// 8245
o3 = {};
// 8246
f637880758_0.returns.push(o3);
// 8247
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8248
f637880758_541.returns.push(1373482802140);
// 8249
o3 = {};
// 8250
f637880758_0.returns.push(o3);
// 8251
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8252
f637880758_541.returns.push(1373482802140);
// 8253
o3 = {};
// 8254
f637880758_0.returns.push(o3);
// 8255
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8256
f637880758_541.returns.push(1373482802140);
// 8257
o3 = {};
// 8258
f637880758_0.returns.push(o3);
// 8259
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8260
f637880758_541.returns.push(1373482802141);
// 8261
o3 = {};
// 8262
f637880758_0.returns.push(o3);
// 8263
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8264
f637880758_541.returns.push(1373482802141);
// 8265
o3 = {};
// 8266
f637880758_0.returns.push(o3);
// 8267
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8268
f637880758_541.returns.push(1373482802141);
// 8269
o3 = {};
// 8270
f637880758_0.returns.push(o3);
// 8271
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8272
f637880758_541.returns.push(1373482802141);
// 8273
o3 = {};
// 8274
f637880758_0.returns.push(o3);
// 8275
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8276
f637880758_541.returns.push(1373482802142);
// 8277
f637880758_470.returns.push(0.5062825882341713);
// 8280
o5.search = "?q=%23javascript";
// 8281
o5.hash = "";
// undefined
o5 = null;
// 8282
o3 = {};
// 8283
f637880758_0.returns.push(o3);
// 8284
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8285
f637880758_541.returns.push(1373482802143);
// 8286
o3 = {};
// 8287
f637880758_0.returns.push(o3);
// 8288
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8289
f637880758_541.returns.push(1373482802143);
// 8290
o3 = {};
// 8291
f637880758_0.returns.push(o3);
// 8292
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8293
f637880758_541.returns.push(1373482802143);
// 8294
o3 = {};
// 8295
f637880758_0.returns.push(o3);
// 8296
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8297
f637880758_541.returns.push(1373482802143);
// 8298
o3 = {};
// 8299
f637880758_0.returns.push(o3);
// 8300
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8301
f637880758_541.returns.push(1373482802144);
// 8302
o3 = {};
// 8303
f637880758_0.returns.push(o3);
// 8304
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8305
f637880758_541.returns.push(1373482802144);
// 8306
o3 = {};
// 8307
f637880758_0.returns.push(o3);
// 8308
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8309
f637880758_541.returns.push(1373482802144);
// 8310
o3 = {};
// 8311
f637880758_0.returns.push(o3);
// 8312
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8313
f637880758_541.returns.push(1373482802144);
// 8314
o3 = {};
// 8315
f637880758_0.returns.push(o3);
// 8316
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8317
f637880758_541.returns.push(1373482802145);
// 8318
o3 = {};
// 8319
f637880758_0.returns.push(o3);
// 8320
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8321
f637880758_541.returns.push(1373482802145);
// 8322
o3 = {};
// 8323
f637880758_0.returns.push(o3);
// 8324
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8325
f637880758_541.returns.push(1373482802145);
// 8326
o3 = {};
// 8327
f637880758_0.returns.push(o3);
// 8328
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8329
f637880758_541.returns.push(1373482802150);
// 8330
o3 = {};
// 8331
f637880758_0.returns.push(o3);
// 8332
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8333
f637880758_541.returns.push(1373482802150);
// 8334
o3 = {};
// 8335
f637880758_0.returns.push(o3);
// 8336
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8337
f637880758_541.returns.push(1373482802150);
// 8338
o3 = {};
// 8339
f637880758_0.returns.push(o3);
// 8340
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8341
f637880758_541.returns.push(1373482802151);
// 8342
o3 = {};
// 8343
f637880758_0.returns.push(o3);
// 8344
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8345
f637880758_541.returns.push(1373482802151);
// 8346
o3 = {};
// 8347
f637880758_0.returns.push(o3);
// 8348
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8349
f637880758_541.returns.push(1373482802152);
// 8350
o3 = {};
// 8351
f637880758_0.returns.push(o3);
// 8352
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8353
f637880758_541.returns.push(1373482802152);
// 8354
o3 = {};
// 8355
f637880758_0.returns.push(o3);
// 8356
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8357
f637880758_541.returns.push(1373482802152);
// 8358
o3 = {};
// 8359
f637880758_0.returns.push(o3);
// 8360
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8361
f637880758_541.returns.push(1373482802152);
// 8362
o3 = {};
// 8363
f637880758_0.returns.push(o3);
// 8364
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8365
f637880758_541.returns.push(1373482802153);
// 8366
o3 = {};
// 8367
f637880758_0.returns.push(o3);
// 8368
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8369
f637880758_541.returns.push(1373482802153);
// 8370
o3 = {};
// 8371
f637880758_0.returns.push(o3);
// 8372
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8373
f637880758_541.returns.push(1373482802154);
// 8374
o3 = {};
// 8375
f637880758_0.returns.push(o3);
// 8376
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8377
f637880758_541.returns.push(1373482802155);
// 8378
o3 = {};
// 8379
f637880758_0.returns.push(o3);
// 8380
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8381
f637880758_541.returns.push(1373482802155);
// 8382
o3 = {};
// 8383
f637880758_0.returns.push(o3);
// 8384
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8385
f637880758_541.returns.push(1373482802155);
// 8386
o3 = {};
// 8387
f637880758_0.returns.push(o3);
// 8388
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8389
f637880758_541.returns.push(1373482802155);
// 8390
o3 = {};
// 8391
f637880758_0.returns.push(o3);
// 8392
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8393
f637880758_541.returns.push(1373482802155);
// 8394
o3 = {};
// 8395
f637880758_0.returns.push(o3);
// 8396
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8397
f637880758_541.returns.push(1373482802155);
// 8398
o3 = {};
// 8399
f637880758_0.returns.push(o3);
// 8400
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8401
f637880758_541.returns.push(1373482802155);
// 8402
o3 = {};
// 8403
f637880758_0.returns.push(o3);
// 8404
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8405
f637880758_541.returns.push(1373482802156);
// 8406
o3 = {};
// 8407
f637880758_0.returns.push(o3);
// 8408
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8409
f637880758_541.returns.push(1373482802156);
// 8410
o3 = {};
// 8411
f637880758_0.returns.push(o3);
// 8412
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8413
f637880758_541.returns.push(1373482802156);
// 8414
o3 = {};
// 8415
f637880758_0.returns.push(o3);
// 8416
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8417
f637880758_541.returns.push(1373482802156);
// 8418
o3 = {};
// 8419
f637880758_0.returns.push(o3);
// 8420
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8421
f637880758_541.returns.push(1373482802156);
// 8422
o3 = {};
// 8423
f637880758_0.returns.push(o3);
// 8424
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8425
f637880758_541.returns.push(1373482802157);
// 8426
o3 = {};
// 8427
f637880758_0.returns.push(o3);
// 8428
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8429
f637880758_541.returns.push(1373482802157);
// 8430
o3 = {};
// 8431
f637880758_0.returns.push(o3);
// 8432
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8433
f637880758_541.returns.push(1373482802160);
// 8434
o3 = {};
// 8435
f637880758_0.returns.push(o3);
// 8436
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8437
f637880758_541.returns.push(1373482802160);
// 8438
o3 = {};
// 8439
f637880758_0.returns.push(o3);
// 8440
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8441
f637880758_541.returns.push(1373482802161);
// 8442
o3 = {};
// 8443
f637880758_0.returns.push(o3);
// 8444
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8445
f637880758_541.returns.push(1373482802161);
// 8446
o3 = {};
// 8447
f637880758_0.returns.push(o3);
// 8448
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8449
f637880758_541.returns.push(1373482802161);
// 8450
o3 = {};
// 8451
f637880758_0.returns.push(o3);
// 8452
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8453
f637880758_541.returns.push(1373482802161);
// 8454
o3 = {};
// 8455
f637880758_0.returns.push(o3);
// 8456
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8457
f637880758_541.returns.push(1373482802161);
// 8458
o3 = {};
// 8459
f637880758_0.returns.push(o3);
// 8460
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8461
f637880758_541.returns.push(1373482802161);
// 8462
o3 = {};
// 8463
f637880758_0.returns.push(o3);
// 8464
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8465
f637880758_541.returns.push(1373482802161);
// 8466
o3 = {};
// 8467
f637880758_0.returns.push(o3);
// 8468
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8469
f637880758_541.returns.push(1373482802162);
// 8470
o3 = {};
// 8471
f637880758_0.returns.push(o3);
// 8472
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8473
f637880758_541.returns.push(1373482802162);
// 8474
o3 = {};
// 8475
f637880758_0.returns.push(o3);
// 8476
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8477
f637880758_541.returns.push(1373482802162);
// 8478
o3 = {};
// 8479
f637880758_0.returns.push(o3);
// 8480
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8481
f637880758_541.returns.push(1373482802163);
// 8482
o3 = {};
// 8483
f637880758_0.returns.push(o3);
// 8484
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8485
f637880758_541.returns.push(1373482802163);
// 8486
o3 = {};
// 8487
f637880758_0.returns.push(o3);
// 8488
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8489
f637880758_541.returns.push(1373482802163);
// 8490
o3 = {};
// 8491
f637880758_0.returns.push(o3);
// 8492
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8493
f637880758_541.returns.push(1373482802163);
// 8494
o3 = {};
// 8495
f637880758_0.returns.push(o3);
// 8496
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8497
f637880758_541.returns.push(1373482802163);
// 8498
o3 = {};
// 8499
f637880758_0.returns.push(o3);
// 8500
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8501
f637880758_541.returns.push(1373482802164);
// 8502
o3 = {};
// 8503
f637880758_0.returns.push(o3);
// 8504
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8505
f637880758_541.returns.push(1373482802164);
// 8506
o3 = {};
// 8507
f637880758_0.returns.push(o3);
// 8508
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8509
f637880758_541.returns.push(1373482802164);
// 8510
o3 = {};
// 8511
f637880758_0.returns.push(o3);
// 8512
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8513
f637880758_541.returns.push(1373482802164);
// 8514
o3 = {};
// 8515
f637880758_0.returns.push(o3);
// 8516
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8517
f637880758_541.returns.push(1373482802164);
// 8518
o3 = {};
// 8519
f637880758_0.returns.push(o3);
// 8520
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8521
f637880758_541.returns.push(1373482802175);
// 8522
o3 = {};
// 8523
f637880758_0.returns.push(o3);
// 8524
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8525
f637880758_541.returns.push(1373482802176);
// 8526
o3 = {};
// 8527
f637880758_0.returns.push(o3);
// 8528
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8529
f637880758_541.returns.push(1373482802176);
// 8530
o3 = {};
// 8531
f637880758_0.returns.push(o3);
// 8532
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8533
f637880758_541.returns.push(1373482802176);
// 8534
o3 = {};
// 8535
f637880758_0.returns.push(o3);
// 8536
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8537
f637880758_541.returns.push(1373482802176);
// 8538
o3 = {};
// 8539
f637880758_0.returns.push(o3);
// 8540
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8541
f637880758_541.returns.push(1373482802181);
// 8542
o3 = {};
// 8543
f637880758_0.returns.push(o3);
// 8544
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8545
f637880758_541.returns.push(1373482802181);
// 8546
o3 = {};
// 8547
f637880758_0.returns.push(o3);
// 8548
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8549
f637880758_541.returns.push(1373482802183);
// 8550
o3 = {};
// 8551
f637880758_0.returns.push(o3);
// 8552
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8553
f637880758_541.returns.push(1373482802183);
// 8554
o3 = {};
// 8555
f637880758_0.returns.push(o3);
// 8556
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8557
f637880758_541.returns.push(1373482802183);
// 8558
o3 = {};
// 8559
f637880758_0.returns.push(o3);
// 8560
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8561
f637880758_541.returns.push(1373482802185);
// 8562
o3 = {};
// 8563
f637880758_0.returns.push(o3);
// 8564
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8565
f637880758_541.returns.push(1373482802186);
// 8566
o3 = {};
// 8567
f637880758_0.returns.push(o3);
// 8568
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8569
f637880758_541.returns.push(1373482802186);
// 8570
o3 = {};
// 8571
f637880758_0.returns.push(o3);
// 8572
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8573
f637880758_541.returns.push(1373482802186);
// 8574
o3 = {};
// 8575
f637880758_0.returns.push(o3);
// 8576
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8577
f637880758_541.returns.push(1373482802186);
// 8578
o3 = {};
// 8579
f637880758_0.returns.push(o3);
// 8580
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8581
f637880758_541.returns.push(1373482802186);
// 8582
o3 = {};
// 8583
f637880758_0.returns.push(o3);
// 8584
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8585
f637880758_541.returns.push(1373482802187);
// 8586
o3 = {};
// 8587
f637880758_0.returns.push(o3);
// 8588
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8589
f637880758_541.returns.push(1373482802187);
// 8590
o3 = {};
// 8591
f637880758_0.returns.push(o3);
// 8592
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8593
f637880758_541.returns.push(1373482802187);
// 8594
o3 = {};
// 8595
f637880758_0.returns.push(o3);
// 8596
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8597
f637880758_541.returns.push(1373482802188);
// 8598
o3 = {};
// 8599
f637880758_0.returns.push(o3);
// 8600
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8601
f637880758_541.returns.push(1373482802188);
// 8602
o3 = {};
// 8603
f637880758_0.returns.push(o3);
// 8604
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8605
f637880758_541.returns.push(1373482802189);
// 8606
o3 = {};
// 8607
f637880758_0.returns.push(o3);
// 8608
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8609
f637880758_541.returns.push(1373482802190);
// 8610
o3 = {};
// 8611
f637880758_0.returns.push(o3);
// 8612
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8613
f637880758_541.returns.push(1373482802190);
// 8614
o3 = {};
// 8615
f637880758_0.returns.push(o3);
// 8616
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8617
f637880758_541.returns.push(1373482802190);
// 8618
o3 = {};
// 8619
f637880758_0.returns.push(o3);
// 8620
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8621
f637880758_541.returns.push(1373482802191);
// 8622
o3 = {};
// 8623
f637880758_0.returns.push(o3);
// 8624
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8625
f637880758_541.returns.push(1373482802191);
// 8626
o3 = {};
// 8627
f637880758_0.returns.push(o3);
// 8628
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8629
f637880758_541.returns.push(1373482802194);
// 8630
o3 = {};
// 8631
f637880758_0.returns.push(o3);
// 8632
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8633
f637880758_541.returns.push(1373482802195);
// 8634
o3 = {};
// 8635
f637880758_0.returns.push(o3);
// 8636
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8637
f637880758_541.returns.push(1373482802196);
// 8638
o3 = {};
// 8639
f637880758_0.returns.push(o3);
// 8640
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8641
f637880758_541.returns.push(1373482802196);
// 8642
o3 = {};
// 8643
f637880758_0.returns.push(o3);
// 8644
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8645
f637880758_541.returns.push(1373482802200);
// 8646
o3 = {};
// 8647
f637880758_0.returns.push(o3);
// 8648
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8649
f637880758_541.returns.push(1373482802200);
// 8650
o3 = {};
// 8651
f637880758_0.returns.push(o3);
// 8652
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8653
f637880758_541.returns.push(1373482802200);
// 8654
o3 = {};
// 8655
f637880758_0.returns.push(o3);
// 8656
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8657
f637880758_541.returns.push(1373482802201);
// 8658
o3 = {};
// 8659
f637880758_0.returns.push(o3);
// 8660
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8661
f637880758_541.returns.push(1373482802201);
// 8662
o3 = {};
// 8663
f637880758_0.returns.push(o3);
// 8664
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8665
f637880758_541.returns.push(1373482802201);
// 8666
o3 = {};
// 8667
f637880758_0.returns.push(o3);
// 8668
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8669
f637880758_541.returns.push(1373482802201);
// 8670
o3 = {};
// 8671
f637880758_0.returns.push(o3);
// 8672
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8673
f637880758_541.returns.push(1373482802201);
// 8674
o3 = {};
// 8675
f637880758_0.returns.push(o3);
// 8676
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8677
f637880758_541.returns.push(1373482802203);
// 8678
o3 = {};
// 8679
f637880758_0.returns.push(o3);
// 8680
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8681
f637880758_541.returns.push(1373482802203);
// 8682
o3 = {};
// 8683
f637880758_0.returns.push(o3);
// 8684
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8685
f637880758_541.returns.push(1373482802204);
// 8686
o3 = {};
// 8687
f637880758_0.returns.push(o3);
// 8688
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8689
f637880758_541.returns.push(1373482802211);
// 8690
o3 = {};
// 8691
f637880758_0.returns.push(o3);
// 8692
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8693
f637880758_541.returns.push(1373482802211);
// 8694
o3 = {};
// 8695
f637880758_0.returns.push(o3);
// 8696
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8697
f637880758_541.returns.push(1373482802212);
// 8698
o3 = {};
// 8699
f637880758_0.returns.push(o3);
// 8700
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8701
f637880758_541.returns.push(1373482802213);
// 8702
o3 = {};
// 8703
f637880758_0.returns.push(o3);
// 8704
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8705
f637880758_541.returns.push(1373482802213);
// 8706
o3 = {};
// 8707
f637880758_0.returns.push(o3);
// 8708
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8709
f637880758_541.returns.push(1373482802213);
// 8710
o3 = {};
// 8711
f637880758_0.returns.push(o3);
// 8712
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8713
f637880758_541.returns.push(1373482802214);
// 8714
o3 = {};
// 8715
f637880758_0.returns.push(o3);
// 8716
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8717
f637880758_541.returns.push(1373482802214);
// 8718
o3 = {};
// 8719
f637880758_0.returns.push(o3);
// 8720
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8721
f637880758_541.returns.push(1373482802215);
// 8722
o3 = {};
// 8723
f637880758_0.returns.push(o3);
// 8724
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8725
f637880758_541.returns.push(1373482802217);
// 8726
o3 = {};
// 8727
f637880758_0.returns.push(o3);
// 8728
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8729
f637880758_541.returns.push(1373482802217);
// 8730
o3 = {};
// 8731
f637880758_0.returns.push(o3);
// 8732
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8733
f637880758_541.returns.push(1373482802217);
// 8734
o3 = {};
// 8735
f637880758_0.returns.push(o3);
// 8736
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8737
f637880758_541.returns.push(1373482802219);
// 8738
o3 = {};
// 8739
f637880758_0.returns.push(o3);
// 8740
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8741
f637880758_541.returns.push(1373482802219);
// 8742
o3 = {};
// 8743
f637880758_0.returns.push(o3);
// 8744
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8745
f637880758_541.returns.push(1373482802219);
// 8746
o3 = {};
// 8747
f637880758_0.returns.push(o3);
// 8748
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8749
f637880758_541.returns.push(1373482802219);
// 8750
o3 = {};
// 8751
f637880758_0.returns.push(o3);
// 8752
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8753
f637880758_541.returns.push(1373482802223);
// 8754
o3 = {};
// 8755
f637880758_0.returns.push(o3);
// 8756
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8757
f637880758_541.returns.push(1373482802227);
// 8758
o3 = {};
// 8759
f637880758_0.returns.push(o3);
// 8760
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8761
f637880758_541.returns.push(1373482802227);
// 8762
o3 = {};
// 8763
f637880758_0.returns.push(o3);
// 8764
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8765
f637880758_541.returns.push(1373482802227);
// 8766
o3 = {};
// 8767
f637880758_0.returns.push(o3);
// 8768
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8769
f637880758_541.returns.push(1373482802227);
// 8770
o3 = {};
// 8771
f637880758_0.returns.push(o3);
// 8772
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8773
f637880758_541.returns.push(1373482802228);
// 8774
o3 = {};
// 8775
f637880758_0.returns.push(o3);
// 8776
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8777
f637880758_541.returns.push(1373482802228);
// 8778
o3 = {};
// 8779
f637880758_0.returns.push(o3);
// 8780
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8781
f637880758_541.returns.push(1373482802228);
// 8782
o3 = {};
// 8783
f637880758_0.returns.push(o3);
// 8784
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8785
f637880758_541.returns.push(1373482802229);
// 8786
o3 = {};
// 8787
f637880758_0.returns.push(o3);
// 8788
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8789
f637880758_541.returns.push(1373482802229);
// 8790
o3 = {};
// 8791
f637880758_0.returns.push(o3);
// 8792
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8793
f637880758_541.returns.push(1373482802229);
// 8794
o3 = {};
// 8795
f637880758_0.returns.push(o3);
// 8796
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8797
f637880758_541.returns.push(1373482802229);
// 8798
o3 = {};
// 8799
f637880758_0.returns.push(o3);
// 8800
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8801
f637880758_541.returns.push(1373482802230);
// 8802
o3 = {};
// 8803
f637880758_0.returns.push(o3);
// 8804
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8805
f637880758_541.returns.push(1373482802230);
// 8806
o3 = {};
// 8807
f637880758_0.returns.push(o3);
// 8808
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8809
f637880758_541.returns.push(1373482802230);
// 8810
o3 = {};
// 8811
f637880758_0.returns.push(o3);
// 8812
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8813
f637880758_541.returns.push(1373482802230);
// 8814
o3 = {};
// 8815
f637880758_0.returns.push(o3);
// 8816
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8817
f637880758_541.returns.push(1373482802230);
// 8818
o3 = {};
// 8819
f637880758_0.returns.push(o3);
// 8820
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8821
f637880758_541.returns.push(1373482802230);
// 8822
o3 = {};
// 8823
f637880758_0.returns.push(o3);
// 8824
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8825
f637880758_541.returns.push(1373482802230);
// 8826
o3 = {};
// 8827
f637880758_0.returns.push(o3);
// 8828
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8829
f637880758_541.returns.push(1373482802230);
// 8830
o3 = {};
// 8831
f637880758_0.returns.push(o3);
// 8832
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8833
f637880758_541.returns.push(1373482802233);
// 8834
o3 = {};
// 8835
f637880758_0.returns.push(o3);
// 8836
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8837
f637880758_541.returns.push(1373482802233);
// 8838
o3 = {};
// 8839
f637880758_0.returns.push(o3);
// 8840
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8841
f637880758_541.returns.push(1373482802233);
// 8842
o3 = {};
// 8843
f637880758_0.returns.push(o3);
// 8844
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8845
f637880758_541.returns.push(1373482802233);
// 8846
o3 = {};
// 8847
f637880758_0.returns.push(o3);
// 8848
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8849
f637880758_541.returns.push(1373482802233);
// 8850
o3 = {};
// 8851
f637880758_0.returns.push(o3);
// 8852
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8853
f637880758_541.returns.push(1373482802234);
// 8854
o3 = {};
// 8855
f637880758_0.returns.push(o3);
// 8856
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8857
f637880758_541.returns.push(1373482802238);
// 8858
o3 = {};
// 8859
f637880758_0.returns.push(o3);
// 8860
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8861
f637880758_541.returns.push(1373482802239);
// 8862
o3 = {};
// 8863
f637880758_0.returns.push(o3);
// 8864
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8865
f637880758_541.returns.push(1373482802241);
// 8866
o3 = {};
// 8867
f637880758_0.returns.push(o3);
// 8868
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8869
f637880758_541.returns.push(1373482802241);
// 8870
o3 = {};
// 8871
f637880758_0.returns.push(o3);
// 8872
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8873
f637880758_541.returns.push(1373482802242);
// 8874
o3 = {};
// 8875
f637880758_0.returns.push(o3);
// 8876
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8877
f637880758_541.returns.push(1373482802243);
// 8878
o3 = {};
// 8879
f637880758_0.returns.push(o3);
// 8880
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8881
f637880758_541.returns.push(1373482802243);
// 8882
o3 = {};
// 8883
f637880758_0.returns.push(o3);
// 8884
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8885
f637880758_541.returns.push(1373482802243);
// 8886
o3 = {};
// 8887
f637880758_0.returns.push(o3);
// 8888
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8889
f637880758_541.returns.push(1373482802243);
// 8890
o3 = {};
// 8891
f637880758_0.returns.push(o3);
// 8892
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8893
f637880758_541.returns.push(1373482802243);
// 8894
o3 = {};
// 8895
f637880758_0.returns.push(o3);
// 8896
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8897
f637880758_541.returns.push(1373482802243);
// 8898
o3 = {};
// 8899
f637880758_0.returns.push(o3);
// 8900
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8901
f637880758_541.returns.push(1373482802246);
// 8902
o3 = {};
// 8903
f637880758_0.returns.push(o3);
// 8904
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8905
f637880758_541.returns.push(1373482802246);
// 8906
o3 = {};
// 8907
f637880758_0.returns.push(o3);
// 8908
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8909
f637880758_541.returns.push(1373482802251);
// 8910
o3 = {};
// 8911
f637880758_0.returns.push(o3);
// 8912
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8913
f637880758_541.returns.push(1373482802253);
// 8914
o3 = {};
// 8915
f637880758_0.returns.push(o3);
// 8916
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8917
f637880758_541.returns.push(1373482802254);
// 8918
o3 = {};
// 8919
f637880758_0.returns.push(o3);
// 8920
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8921
f637880758_541.returns.push(1373482802254);
// 8922
o3 = {};
// 8923
f637880758_0.returns.push(o3);
// 8924
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8925
f637880758_541.returns.push(1373482802254);
// 8926
o3 = {};
// 8927
f637880758_0.returns.push(o3);
// 8928
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8929
f637880758_541.returns.push(1373482802254);
// 8930
o3 = {};
// 8931
f637880758_0.returns.push(o3);
// 8932
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8933
f637880758_541.returns.push(1373482802263);
// 8934
o3 = {};
// 8935
f637880758_0.returns.push(o3);
// 8936
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8937
f637880758_541.returns.push(1373482802263);
// 8938
o3 = {};
// 8939
f637880758_0.returns.push(o3);
// 8940
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8941
f637880758_541.returns.push(1373482802264);
// 8942
o3 = {};
// 8943
f637880758_0.returns.push(o3);
// 8944
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8945
f637880758_541.returns.push(1373482802264);
// 8946
o3 = {};
// 8947
f637880758_0.returns.push(o3);
// 8948
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8949
f637880758_541.returns.push(1373482802264);
// 8950
o3 = {};
// 8951
f637880758_0.returns.push(o3);
// 8952
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8953
f637880758_541.returns.push(1373482802264);
// 8954
o3 = {};
// 8955
f637880758_0.returns.push(o3);
// 8956
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8957
f637880758_541.returns.push(1373482802264);
// 8958
o3 = {};
// 8959
f637880758_0.returns.push(o3);
// 8960
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8961
f637880758_541.returns.push(1373482802266);
// 8962
o3 = {};
// 8963
f637880758_0.returns.push(o3);
// 8964
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8965
f637880758_541.returns.push(1373482802270);
// 8966
o3 = {};
// 8967
f637880758_0.returns.push(o3);
// 8968
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8969
f637880758_541.returns.push(1373482802271);
// 8970
o3 = {};
// 8971
f637880758_0.returns.push(o3);
// 8972
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8973
f637880758_541.returns.push(1373482802271);
// 8974
o3 = {};
// 8975
f637880758_0.returns.push(o3);
// 8976
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8977
f637880758_541.returns.push(1373482802271);
// 8978
o3 = {};
// 8979
f637880758_0.returns.push(o3);
// 8980
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8981
f637880758_541.returns.push(1373482802276);
// 8982
o3 = {};
// 8983
f637880758_0.returns.push(o3);
// 8984
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8985
f637880758_541.returns.push(1373482802276);
// 8986
o3 = {};
// 8987
f637880758_0.returns.push(o3);
// 8988
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8989
f637880758_541.returns.push(1373482802277);
// 8990
o3 = {};
// 8991
f637880758_0.returns.push(o3);
// 8992
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8993
f637880758_541.returns.push(1373482802277);
// 8994
o3 = {};
// 8995
f637880758_0.returns.push(o3);
// 8996
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 8997
f637880758_541.returns.push(1373482802277);
// 8998
o3 = {};
// 8999
f637880758_0.returns.push(o3);
// 9000
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9001
f637880758_541.returns.push(1373482802279);
// 9002
o3 = {};
// 9003
f637880758_0.returns.push(o3);
// 9004
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9005
f637880758_541.returns.push(1373482802279);
// 9006
o3 = {};
// 9007
f637880758_0.returns.push(o3);
// 9008
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9009
f637880758_541.returns.push(1373482802279);
// 9010
o3 = {};
// 9011
f637880758_0.returns.push(o3);
// 9012
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9013
f637880758_541.returns.push(1373482802282);
// 9014
o3 = {};
// 9015
f637880758_0.returns.push(o3);
// 9016
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9017
f637880758_541.returns.push(1373482802282);
// 9018
o3 = {};
// 9019
f637880758_0.returns.push(o3);
// 9020
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9021
f637880758_541.returns.push(1373482802282);
// 9022
o3 = {};
// 9023
f637880758_0.returns.push(o3);
// 9024
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9025
f637880758_541.returns.push(1373482802282);
// 9026
o3 = {};
// 9027
f637880758_0.returns.push(o3);
// 9028
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9029
f637880758_541.returns.push(1373482802283);
// 9030
o3 = {};
// 9031
f637880758_0.returns.push(o3);
// 9032
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9033
f637880758_541.returns.push(1373482802283);
// 9034
o3 = {};
// 9035
f637880758_0.returns.push(o3);
// 9036
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9037
f637880758_541.returns.push(1373482802284);
// 9038
o3 = {};
// 9039
f637880758_0.returns.push(o3);
// 9040
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9041
f637880758_541.returns.push(1373482802284);
// 9042
o3 = {};
// 9043
f637880758_0.returns.push(o3);
// 9044
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9045
f637880758_541.returns.push(1373482802287);
// 9046
o3 = {};
// 9047
f637880758_0.returns.push(o3);
// 9048
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9049
f637880758_541.returns.push(1373482802287);
// 9050
o3 = {};
// 9051
f637880758_0.returns.push(o3);
// 9052
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9053
f637880758_541.returns.push(1373482802288);
// 9054
o3 = {};
// 9055
f637880758_0.returns.push(o3);
// 9056
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9057
f637880758_541.returns.push(1373482802288);
// 9058
o3 = {};
// 9059
f637880758_0.returns.push(o3);
// 9060
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9061
f637880758_541.returns.push(1373482802288);
// 9062
o3 = {};
// 9063
f637880758_0.returns.push(o3);
// 9064
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9065
f637880758_541.returns.push(1373482802288);
// 9066
o3 = {};
// 9067
f637880758_0.returns.push(o3);
// 9068
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9069
f637880758_541.returns.push(1373482802292);
// 9070
o3 = {};
// 9071
f637880758_0.returns.push(o3);
// 9072
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9073
f637880758_541.returns.push(1373482802292);
// 9074
o3 = {};
// 9075
f637880758_0.returns.push(o3);
// 9076
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9077
f637880758_541.returns.push(1373482802293);
// 9078
o3 = {};
// 9079
f637880758_0.returns.push(o3);
// 9080
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9081
f637880758_541.returns.push(1373482802295);
// 9082
o3 = {};
// 9083
f637880758_0.returns.push(o3);
// 9084
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9085
f637880758_541.returns.push(1373482802295);
// 9086
o3 = {};
// 9087
f637880758_0.returns.push(o3);
// 9088
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9089
f637880758_541.returns.push(1373482802295);
// 9090
o3 = {};
// 9091
f637880758_0.returns.push(o3);
// 9092
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9093
f637880758_541.returns.push(1373482802295);
// 9094
o3 = {};
// 9095
f637880758_0.returns.push(o3);
// 9096
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9097
f637880758_541.returns.push(1373482802296);
// 9098
o3 = {};
// 9099
f637880758_0.returns.push(o3);
// 9100
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9101
f637880758_541.returns.push(1373482802296);
// 9102
o3 = {};
// 9103
f637880758_0.returns.push(o3);
// 9104
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9105
f637880758_541.returns.push(1373482802296);
// 9106
o3 = {};
// 9107
f637880758_0.returns.push(o3);
// 9108
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9109
f637880758_541.returns.push(1373482802296);
// 9110
o3 = {};
// 9111
f637880758_0.returns.push(o3);
// 9112
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9113
f637880758_541.returns.push(1373482802296);
// 9114
o3 = {};
// 9115
f637880758_0.returns.push(o3);
// 9116
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9117
f637880758_541.returns.push(1373482802297);
// 9118
o3 = {};
// 9119
f637880758_0.returns.push(o3);
// 9120
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9121
f637880758_541.returns.push(1373482802297);
// 9122
o3 = {};
// 9123
f637880758_0.returns.push(o3);
// 9124
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9125
f637880758_541.returns.push(1373482802297);
// 9126
o3 = {};
// 9127
f637880758_0.returns.push(o3);
// 9128
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9129
f637880758_541.returns.push(1373482802297);
// 9130
o3 = {};
// 9131
f637880758_0.returns.push(o3);
// 9132
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9133
f637880758_541.returns.push(1373482802297);
// 9134
o3 = {};
// 9135
f637880758_0.returns.push(o3);
// 9136
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9137
f637880758_541.returns.push(1373482802297);
// 9138
o3 = {};
// 9139
f637880758_0.returns.push(o3);
// 9140
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9141
f637880758_541.returns.push(1373482802300);
// 9142
o3 = {};
// 9143
f637880758_0.returns.push(o3);
// 9144
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9145
f637880758_541.returns.push(1373482802300);
// 9146
o3 = {};
// 9147
f637880758_0.returns.push(o3);
// 9148
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9149
f637880758_541.returns.push(1373482802300);
// 9150
o3 = {};
// 9151
f637880758_0.returns.push(o3);
// 9152
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9153
f637880758_541.returns.push(1373482802301);
// 9154
o3 = {};
// 9155
f637880758_0.returns.push(o3);
// 9156
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9157
f637880758_541.returns.push(1373482802301);
// 9158
o3 = {};
// 9159
f637880758_0.returns.push(o3);
// 9160
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9161
f637880758_541.returns.push(1373482802301);
// 9162
o3 = {};
// 9163
f637880758_0.returns.push(o3);
// 9164
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9165
f637880758_541.returns.push(1373482802301);
// 9166
o3 = {};
// 9167
f637880758_0.returns.push(o3);
// 9168
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9169
f637880758_541.returns.push(1373482802301);
// 9170
o3 = {};
// 9171
f637880758_0.returns.push(o3);
// 9172
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9173
f637880758_541.returns.push(1373482802312);
// 9174
o3 = {};
// 9175
f637880758_0.returns.push(o3);
// 9176
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9177
f637880758_541.returns.push(1373482802317);
// 9178
o3 = {};
// 9179
f637880758_0.returns.push(o3);
// 9180
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9181
f637880758_541.returns.push(1373482802317);
// 9182
o3 = {};
// 9183
f637880758_0.returns.push(o3);
// 9184
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9185
f637880758_541.returns.push(1373482802317);
// 9186
o3 = {};
// 9187
f637880758_0.returns.push(o3);
// 9188
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9189
f637880758_541.returns.push(1373482802319);
// 9190
o3 = {};
// 9191
f637880758_0.returns.push(o3);
// 9192
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9193
f637880758_541.returns.push(1373482802320);
// 9194
o3 = {};
// 9195
f637880758_0.returns.push(o3);
// 9196
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9197
f637880758_541.returns.push(1373482802320);
// 9198
o3 = {};
// 9199
f637880758_0.returns.push(o3);
// 9200
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9201
f637880758_541.returns.push(1373482802320);
// 9202
o3 = {};
// 9203
f637880758_0.returns.push(o3);
// 9204
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9205
f637880758_541.returns.push(1373482802322);
// 9206
o3 = {};
// 9207
f637880758_0.returns.push(o3);
// 9208
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9209
f637880758_541.returns.push(1373482802322);
// 9210
o3 = {};
// 9211
f637880758_0.returns.push(o3);
// 9212
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9213
f637880758_541.returns.push(1373482802322);
// 9214
o3 = {};
// 9215
f637880758_0.returns.push(o3);
// 9216
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9217
f637880758_541.returns.push(1373482802323);
// 9218
o3 = {};
// 9219
f637880758_0.returns.push(o3);
// 9220
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9221
f637880758_541.returns.push(1373482802323);
// 9222
o3 = {};
// 9223
f637880758_0.returns.push(o3);
// 9224
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9225
f637880758_541.returns.push(1373482802323);
// 9226
o3 = {};
// 9227
f637880758_0.returns.push(o3);
// 9228
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9229
f637880758_541.returns.push(1373482802324);
// 9230
o3 = {};
// 9231
f637880758_0.returns.push(o3);
// 9232
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9233
f637880758_541.returns.push(1373482802324);
// 9234
o3 = {};
// 9235
f637880758_0.returns.push(o3);
// 9236
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9237
f637880758_541.returns.push(1373482802325);
// 9238
o3 = {};
// 9239
f637880758_0.returns.push(o3);
// 9240
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9241
f637880758_541.returns.push(1373482802325);
// 9242
o3 = {};
// 9243
f637880758_0.returns.push(o3);
// 9244
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9245
f637880758_541.returns.push(1373482802325);
// 9246
o3 = {};
// 9247
f637880758_0.returns.push(o3);
// 9248
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9249
f637880758_541.returns.push(1373482802325);
// 9250
o3 = {};
// 9251
f637880758_0.returns.push(o3);
// 9252
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9253
f637880758_541.returns.push(1373482802325);
// 9254
o3 = {};
// 9255
f637880758_0.returns.push(o3);
// 9256
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9257
f637880758_541.returns.push(1373482802326);
// 9258
o3 = {};
// 9259
f637880758_0.returns.push(o3);
// 9260
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9261
f637880758_541.returns.push(1373482802326);
// 9262
o3 = {};
// 9263
f637880758_0.returns.push(o3);
// 9264
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9265
f637880758_541.returns.push(1373482802326);
// 9266
o3 = {};
// 9267
f637880758_0.returns.push(o3);
// 9268
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9269
f637880758_541.returns.push(1373482802326);
// 9270
o3 = {};
// 9271
f637880758_0.returns.push(o3);
// 9272
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9273
f637880758_541.returns.push(1373482802327);
// 9274
o3 = {};
// 9275
f637880758_0.returns.push(o3);
// 9276
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9277
f637880758_541.returns.push(1373482802327);
// 9278
o3 = {};
// 9279
f637880758_0.returns.push(o3);
// 9280
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9281
f637880758_541.returns.push(1373482802332);
// 9282
o3 = {};
// 9283
f637880758_0.returns.push(o3);
// 9284
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9285
f637880758_541.returns.push(1373482802332);
// 9286
o3 = {};
// 9287
f637880758_0.returns.push(o3);
// 9288
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9289
f637880758_541.returns.push(1373482802332);
// 9290
o3 = {};
// 9291
f637880758_0.returns.push(o3);
// 9292
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9293
f637880758_541.returns.push(1373482802332);
// 9294
o3 = {};
// 9295
f637880758_0.returns.push(o3);
// 9296
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9297
f637880758_541.returns.push(1373482802332);
// 9298
o3 = {};
// 9299
f637880758_0.returns.push(o3);
// 9300
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9301
f637880758_541.returns.push(1373482802332);
// 9302
o3 = {};
// 9303
f637880758_0.returns.push(o3);
// 9304
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9305
f637880758_541.returns.push(1373482802333);
// 9306
o3 = {};
// 9307
f637880758_0.returns.push(o3);
// 9308
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9309
f637880758_541.returns.push(1373482802333);
// 9310
o3 = {};
// 9311
f637880758_0.returns.push(o3);
// 9312
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9313
f637880758_541.returns.push(1373482802333);
// 9314
o3 = {};
// 9315
f637880758_0.returns.push(o3);
// 9316
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9317
f637880758_541.returns.push(1373482802334);
// 9318
o3 = {};
// 9319
f637880758_0.returns.push(o3);
// 9320
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9321
f637880758_541.returns.push(1373482802334);
// 9322
o3 = {};
// 9323
f637880758_0.returns.push(o3);
// 9324
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9325
f637880758_541.returns.push(1373482802334);
// 9326
o3 = {};
// 9327
f637880758_0.returns.push(o3);
// 9328
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9329
f637880758_541.returns.push(1373482802334);
// 9330
o3 = {};
// 9331
f637880758_0.returns.push(o3);
// 9332
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9333
f637880758_541.returns.push(1373482802334);
// 9334
o3 = {};
// 9335
f637880758_0.returns.push(o3);
// 9336
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9337
f637880758_541.returns.push(1373482802335);
// 9338
o3 = {};
// 9339
f637880758_0.returns.push(o3);
// 9340
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9341
f637880758_541.returns.push(1373482802335);
// 9342
o3 = {};
// 9343
f637880758_0.returns.push(o3);
// 9344
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9345
f637880758_541.returns.push(1373482802361);
// 9346
o3 = {};
// 9347
f637880758_0.returns.push(o3);
// 9348
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9349
f637880758_541.returns.push(1373482802361);
// 9350
o3 = {};
// 9351
f637880758_0.returns.push(o3);
// 9352
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9353
f637880758_541.returns.push(1373482802361);
// 9354
o3 = {};
// 9355
f637880758_0.returns.push(o3);
// 9356
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9357
f637880758_541.returns.push(1373482802361);
// 9358
o3 = {};
// 9359
f637880758_0.returns.push(o3);
// 9360
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9361
f637880758_541.returns.push(1373482802361);
// 9362
o3 = {};
// 9363
f637880758_0.returns.push(o3);
// 9364
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9365
f637880758_541.returns.push(1373482802361);
// 9366
o3 = {};
// 9367
f637880758_0.returns.push(o3);
// 9368
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9369
f637880758_541.returns.push(1373482802362);
// 9370
o3 = {};
// 9371
f637880758_0.returns.push(o3);
// 9372
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9373
f637880758_541.returns.push(1373482802362);
// 9374
o3 = {};
// 9375
f637880758_0.returns.push(o3);
// 9376
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9377
f637880758_541.returns.push(1373482802363);
// 9378
o3 = {};
// 9379
f637880758_0.returns.push(o3);
// 9380
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9381
f637880758_541.returns.push(1373482802363);
// 9382
o3 = {};
// 9383
f637880758_0.returns.push(o3);
// 9384
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9385
f637880758_541.returns.push(1373482802363);
// 9386
o3 = {};
// 9387
f637880758_0.returns.push(o3);
// 9388
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9389
f637880758_541.returns.push(1373482802366);
// 9390
o3 = {};
// 9391
f637880758_0.returns.push(o3);
// 9392
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9393
f637880758_541.returns.push(1373482802366);
// 9394
o3 = {};
// 9395
f637880758_0.returns.push(o3);
// 9396
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9397
f637880758_541.returns.push(1373482802366);
// 9398
o3 = {};
// 9399
f637880758_0.returns.push(o3);
// 9400
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9401
f637880758_541.returns.push(1373482802379);
// 9402
o3 = {};
// 9403
f637880758_0.returns.push(o3);
// 9404
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9405
f637880758_541.returns.push(1373482802379);
// 9406
o3 = {};
// 9407
f637880758_0.returns.push(o3);
// 9408
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9409
f637880758_541.returns.push(1373482802379);
// 9410
o3 = {};
// 9411
f637880758_0.returns.push(o3);
// 9412
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9413
f637880758_541.returns.push(1373482802380);
// 9414
o3 = {};
// 9415
f637880758_0.returns.push(o3);
// 9416
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9417
f637880758_541.returns.push(1373482802380);
// 9418
o3 = {};
// 9419
f637880758_0.returns.push(o3);
// 9420
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9421
f637880758_541.returns.push(1373482802381);
// 9422
o3 = {};
// 9423
f637880758_0.returns.push(o3);
// 9424
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9425
f637880758_541.returns.push(1373482802381);
// 9426
o3 = {};
// 9427
f637880758_0.returns.push(o3);
// 9428
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9429
f637880758_541.returns.push(1373482802384);
// 9430
o3 = {};
// 9431
f637880758_0.returns.push(o3);
// 9432
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9433
f637880758_541.returns.push(1373482802384);
// 9434
o3 = {};
// 9435
f637880758_0.returns.push(o3);
// 9436
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9437
f637880758_541.returns.push(1373482802384);
// 9438
o3 = {};
// 9439
f637880758_0.returns.push(o3);
// 9440
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9441
f637880758_541.returns.push(1373482802384);
// 9442
o3 = {};
// 9443
f637880758_0.returns.push(o3);
// 9444
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9445
f637880758_541.returns.push(1373482802388);
// 9446
o3 = {};
// 9447
f637880758_0.returns.push(o3);
// 9448
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9449
f637880758_541.returns.push(1373482802389);
// 9450
o3 = {};
// 9451
f637880758_0.returns.push(o3);
// 9452
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9453
f637880758_541.returns.push(1373482802389);
// 9454
o3 = {};
// 9455
f637880758_0.returns.push(o3);
// 9456
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9457
f637880758_541.returns.push(1373482802390);
// 9458
o3 = {};
// 9459
f637880758_0.returns.push(o3);
// 9460
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9461
f637880758_541.returns.push(1373482802391);
// 9462
o3 = {};
// 9463
f637880758_0.returns.push(o3);
// 9464
o3.getTime = f637880758_541;
// undefined
o3 = null;
// 9465
f637880758_541.returns.push(1373482802391);
// 9467
o3 = {};
// 9468
f637880758_522.returns.push(o3);
// 9469
o3.parentNode = o10;
// 9470
o3.id = "init-data";
// 9471
o3.type = "hidden";
// 9472
o3.nodeName = "INPUT";
// 9473
o3.value = "{\"baseFoucClass\":\"swift-loading\",\"htmlFoucClassNames\":\"swift-loading\",\"htmlClassNames\":\"\",\"macawSwift\":true,\"assetsBasePath\":\"https:\\/\\/abs.twimg.com\\/a\\/1373252541\\/\",\"environment\":\"production\",\"sandboxes\":{\"jsonp\":\"https:\\/\\/abs.twimg.com\\/a\\/1373252541\\/jsonp_sandbox.html\",\"detailsPane\":\"https:\\/\\/abs.twimg.com\\/a\\/1373252541\\/details_pane_content_sandbox.html\"},\"formAuthenticityToken\":\"965ea2b8839017a58e9a645d5e1562d0329b13b9\",\"loggedIn\":false,\"screenName\":null,\"userId\":null,\"scribeBufferSize\":3,\"pageName\":\"search\",\"sectionName\":\"search\",\"scribeParameters\":{},\"internalReferer\":\"\\/search-home\",\"experiments\":{},\"geoEnabled\":false,\"typeaheadData\":{\"accounts\":{\"localQueriesEnabled\":false,\"remoteQueriesEnabled\":false,\"enabled\":false,\"limit\":6},\"trendLocations\":{\"enabled\":false},\"savedSearches\":{\"enabled\":false,\"items\":[]},\"dmAccounts\":{\"enabled\":false,\"localQueriesEnabled\":false,\"onlyDMable\":true,\"remoteQueriesEnabled\":false},\"topics\":{\"enabled\":false,\"localQueriesEnabled\":false,\"prefetchLimit\":500,\"remoteQueriesEnabled\":false,\"remoteQueriesOverrideLocal\":false,\"limit\":4},\"recentSearches\":{\"enabled\":false},\"contextHelpers\":{\"enabled\":false,\"page_name\":\"search\",\"section_name\":\"search\",\"screen_name\":null},\"hashtags\":{\"enabled\":false,\"localQueriesEnabled\":false,\"prefetchLimit\":500,\"remoteQueriesEnabled\":false},\"showSearchAccountSocialContext\":false,\"showTweetComposeAccountSocialContext\":false,\"showDMAccountSocialContext\":false,\"showTypeaheadTopicSocialContext\":false,\"showDebugInfo\":false,\"useThrottle\":true,\"accountsOnTop\":false,\"remoteDebounceInterval\":300,\"remoteThrottleInterval\":300,\"tweetContextEnabled\":false},\"pushStatePageLimit\":500000,\"routes\":{\"profile\":\"\\/\"},\"pushState\":true,\"viewContainer\":\"#page-container\",\"asyncSocialProof\":true,\"dragAndDropPhotoUpload\":true,\"href\":\"\\/search?q=%23javascript\",\"searchPathWithQuery\":\"\\/search?q=query&src=typd\",\"mark_old_dms_read\":false,\"dmReadStateSync\":false,\"timelineCardsGallery\":true,\"mediaGrid\":true,\"deciders\":{\"oembed_use_macaw_syndication\":true,\"preserve_scroll_position\":false,\"pushState\":true},\"permalinkCardsGallery\":false,\"notifications_dm\":false,\"notifications_spoonbill\":false,\"notifications_timeline\":false,\"notifications_dm_poll_scale\":60,\"researchExperiments\":{},\"latest_incoming_direct_message_id\":null,\"smsDeviceVerified\":null,\"deviceEnabled\":false,\"hasPushDevice\":null,\"universalSearch\":false,\"query\":\"#javascript\",\"showAllInlineMedia\":false,\"search_endpoint\":\"\\/i\\/search\\/timeline?type=relevance\",\"help_pips_decider\":false,\"cardsGallery\":true,\"oneboxType\":\"\",\"wtfRefreshOnNewTweets\":false,\"wtfOptions\":{\"pc\":true,\"connections\":true,\"limit\":3,\"display_location\":\"wtf-component\",\"dismissable\":true},\"trendsCacheKey\":null,\"decider_personalized_trends\":true,\"trendsLocationDialogEnabled\":true,\"pollingOptions\":{\"focusedInterval\":30000,\"blurredInterval\":300000,\"backoffFactor\":2,\"backoffEmptyResponseLimit\":2,\"pauseAfterBackoff\":true,\"resumeItemCount\":40},\"initialState\":{\"title\":\"Twitter \\/ Search - #javascript\",\"section\":null,\"module\":\"app\\/pages\\/search\\/search\",\"cache_ttl\":300,\"body_class_names\":\"t1 logged-out\",\"doc_class_names\":null,\"page_container_class_names\":\"wrapper wrapper-search white\",\"ttft_navigation\":false}}";
// undefined
o3 = null;
// 9474
// 9475
// 9476
// 9477
// undefined
o7 = null;
// 9479
o0.jQuery = void 0;
// 9480
o0.jquery = void 0;
// 9484
o0.nodeName = "#document";
// undefined
fo637880758_1_jQuery18309834662606008351 = function() { return fo637880758_1_jQuery18309834662606008351.returns[fo637880758_1_jQuery18309834662606008351.inst++]; };
fo637880758_1_jQuery18309834662606008351.returns = [];
fo637880758_1_jQuery18309834662606008351.inst = 0;
defineGetter(o0, "jQuery18309834662606008351", fo637880758_1_jQuery18309834662606008351, undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(void 0);
// 9488
// 9491
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9500
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9513
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9522
f637880758_473.returns.push(undefined);
// 9523
o1.setItem = f637880758_746;
// 9524
f637880758_746.returns.push(undefined);
// 9525
o1.getItem = f637880758_579;
// 9526
f637880758_579.returns.push("test");
// 9527
o1.removeItem = f637880758_747;
// undefined
o1 = null;
// 9528
f637880758_747.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9539
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9548
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9557
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9566
f637880758_473.returns.push(undefined);
// 9567
f637880758_7.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9580
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9589
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9598
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9607
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9616
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9625
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9634
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9643
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9652
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9666
f637880758_473.returns.push(undefined);
// 9669
f637880758_473.returns.push(undefined);
// 9672
f637880758_473.returns.push(undefined);
// 9675
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9685
f637880758_473.returns.push(undefined);
// 9688
f637880758_473.returns.push(undefined);
// 9691
f637880758_473.returns.push(undefined);
// 9694
f637880758_473.returns.push(undefined);
// 9697
f637880758_473.returns.push(undefined);
// 9700
f637880758_473.returns.push(undefined);
// 9703
f637880758_473.returns.push(undefined);
// 9706
f637880758_473.returns.push(undefined);
// 9709
f637880758_473.returns.push(undefined);
// 9712
f637880758_473.returns.push(undefined);
// 9715
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9729
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9739
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9749
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9759
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9769
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9779
f637880758_473.returns.push(undefined);
// 9782
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9792
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9802
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9812
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9836
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9846
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9856
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9871
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9890
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9899
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9912
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9921
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9930
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9945
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9954
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9969
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9978
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9987
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 9997
f637880758_473.returns.push(undefined);
// 9998
f637880758_2577 = function() { return f637880758_2577.returns[f637880758_2577.inst++]; };
f637880758_2577.returns = [];
f637880758_2577.inst = 0;
// 9999
o4.pushState = f637880758_2577;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10010
f637880758_7.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10025
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10034
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10060
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10069
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10079
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10089
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10123
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10132
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10151
f637880758_473.returns.push(undefined);
// 10153
o1 = {};
// 10154
f637880758_522.returns.push(o1);
// 10155
o1.parentNode = o10;
// 10156
o1.id = "message-drawer";
// 10157
o1.jQuery = void 0;
// 10158
o1.jquery = void 0;
// 10159
o1.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10169
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10179
f637880758_473.returns.push(undefined);
// 10182
o1.nodeName = "DIV";
// 10185
o1.jQuery18309834662606008351 = void 0;
// 10186
// 10187
o1.JSBNG__addEventListener = f637880758_473;
// undefined
o1 = null;
// 10189
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10217
f637880758_473.returns.push(undefined);
// 10220
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10230
f637880758_473.returns.push(undefined);
// 10233
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10243
f637880758_473.returns.push(undefined);
// 10246
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10256
f637880758_473.returns.push(undefined);
// 10259
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10276
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10286
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10296
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10306
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10316
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10326
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10336
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10346
f637880758_473.returns.push(undefined);
// 10349
f637880758_473.returns.push(undefined);
// 10352
f637880758_473.returns.push(undefined);
// 10355
f637880758_473.returns.push(undefined);
// 10358
f637880758_473.returns.push(undefined);
// 10361
f637880758_473.returns.push(undefined);
// 10368
o1 = {};
// 10369
f637880758_562.returns.push(o1);
// 10370
o3 = {};
// 10371
o1["0"] = o3;
// 10372
o1["1"] = void 0;
// undefined
o1 = null;
// 10373
o3.jQuery = void 0;
// 10374
o3.jquery = void 0;
// 10375
o3.nodeType = 1;
// 10378
o3.nodeName = "LI";
// 10381
o3.jQuery18309834662606008351 = void 0;
// 10382
// 10383
o3.JSBNG__addEventListener = f637880758_473;
// 10385
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10402
f637880758_473.returns.push(undefined);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10412
f637880758_473.returns.push(undefined);
// 10414
f637880758_522.returns.push(null);
// 10416
o1 = {};
// 10417
f637880758_522.returns.push(o1);
// 10418
o5 = {};
// 10419
o1.parentNode = o5;
// 10420
o1.id = "global-nav-search";
// 10421
o1.jQuery = void 0;
// 10422
o1.jquery = void 0;
// 10423
o1.nodeType = 1;
// 10425
o1.ownerDocument = o0;
// 10431
o7 = {};
// 10432
f637880758_522.returns.push(o7);
// 10434
o7.parentNode = o1;
// 10435
o7.id = "search-query";
// 10443
o8 = {};
// 10444
f637880758_522.returns.push(o8);
// 10446
o8.parentNode = o1;
// 10447
o8.id = "search-query-hint";
// undefined
o8 = null;
// 10448
o7.nodeType = 1;
// 10450
o7.type = "text";
// 10451
o7.nodeName = "INPUT";
// 10452
// 10455
o1.nodeName = "FORM";
// undefined
fo637880758_2581_jQuery18309834662606008351 = function() { return fo637880758_2581_jQuery18309834662606008351.returns[fo637880758_2581_jQuery18309834662606008351.inst++]; };
fo637880758_2581_jQuery18309834662606008351.returns = [];
fo637880758_2581_jQuery18309834662606008351.inst = 0;
defineGetter(o1, "jQuery18309834662606008351", fo637880758_2581_jQuery18309834662606008351, undefined);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(void 0);
// 10459
// 10460
o1.JSBNG__addEventListener = f637880758_473;
// 10462
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10471
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351 = function() { return fo637880758_2583_jQuery18309834662606008351.returns[fo637880758_2583_jQuery18309834662606008351.inst++]; };
fo637880758_2583_jQuery18309834662606008351.returns = [];
fo637880758_2583_jQuery18309834662606008351.inst = 0;
defineGetter(o7, "jQuery18309834662606008351", fo637880758_2583_jQuery18309834662606008351, undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351.returns.push(void 0);
// 10478
// 10479
o7.JSBNG__addEventListener = f637880758_473;
// 10481
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351.returns.push(93);
// 10490
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10499
f637880758_473.returns.push(undefined);
// 10504
o1.getElementsByClassName = f637880758_512;
// 10506
o8 = {};
// 10507
f637880758_512.returns.push(o8);
// 10508
o9 = {};
// 10509
o8["0"] = o9;
// 10510
o8["1"] = void 0;
// undefined
o8 = null;
// 10511
o9.nodeType = 1;
// 10513
o9.nodeName = "SPAN";
// 10516
o9.jQuery18309834662606008351 = void 0;
// 10517
// 10518
o9.JSBNG__addEventListener = f637880758_473;
// undefined
o9 = null;
// 10520
f637880758_473.returns.push(undefined);
// 10522
f637880758_522.returns.push(o1);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10536
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10545
f637880758_473.returns.push(undefined);
// 10548
f637880758_473.returns.push(undefined);
// 10550
f637880758_522.returns.push(o1);
// 10563
f637880758_522.returns.push(o7);
// 10567
o7.ownerDocument = o0;
// 10570
f637880758_529.returns.push(true);
// 10574
f637880758_529.returns.push(false);
// 10581
o8 = {};
// 10582
f637880758_512.returns.push(o8);
// 10583
o9 = {};
// 10584
o8["0"] = o9;
// 10585
o8["1"] = void 0;
// undefined
o8 = null;
// 10587
o8 = {};
// 10588
f637880758_474.returns.push(o8);
// 10589
o8.setAttribute = f637880758_476;
// 10590
f637880758_476.returns.push(undefined);
// 10591
o8.JSBNG__oninput = null;
// undefined
o8 = null;
// 10592
o9.nodeType = 1;
// 10593
o9.getAttribute = f637880758_472;
// 10594
o9.ownerDocument = o0;
// 10597
o9.setAttribute = f637880758_476;
// undefined
o9 = null;
// 10598
f637880758_476.returns.push(undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351.returns.push(93);
// 10607
f637880758_473.returns.push(undefined);
// 10610
f637880758_473.returns.push(undefined);
// 10613
f637880758_473.returns.push(undefined);
// 10616
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351.returns.push(93);
// 10625
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10634
f637880758_473.returns.push(undefined);
// undefined
fo637880758_2583_jQuery18309834662606008351.returns.push(93);
// undefined
fo637880758_2581_jQuery18309834662606008351.returns.push(90);
// 10649
f637880758_473.returns.push(undefined);
// 10657
// 10658
o8 = {};
// undefined
o8 = null;
// 10659
o0.body = o10;
// 10661
o8 = {};
// 10662
f637880758_550.returns.push(o8);
// 10663
o8["0"] = o10;
// undefined
o8 = null;
// 10665
o8 = {};
// 10666
f637880758_474.returns.push(o8);
// 10667
o9 = {};
// 10668
o8.style = o9;
// 10669
// 10670
o10.insertBefore = f637880758_517;
// 10671
o11 = {};
// 10672
o10.firstChild = o11;
// undefined
o11 = null;
// 10673
f637880758_517.returns.push(o8);
// 10675
o11 = {};
// 10676
f637880758_474.returns.push(o11);
// 10677
o8.appendChild = f637880758_482;
// 10678
f637880758_482.returns.push(o11);
// 10679
// 10680
o11.getElementsByTagName = f637880758_477;
// 10681
o12 = {};
// 10682
f637880758_477.returns.push(o12);
// 10683
o13 = {};
// 10684
o12["0"] = o13;
// 10685
o14 = {};
// 10686
o13.style = o14;
// 10687
// 10689
o13.offsetHeight = 0;
// undefined
o13 = null;
// 10692
// undefined
o14 = null;
// 10693
o13 = {};
// 10694
o12["1"] = o13;
// undefined
o12 = null;
// 10695
o12 = {};
// 10696
o13.style = o12;
// undefined
o13 = null;
// 10697
// undefined
o12 = null;
// 10700
// 10701
o12 = {};
// 10702
o11.style = o12;
// 10703
// undefined
fo637880758_2595_offsetWidth = function() { return fo637880758_2595_offsetWidth.returns[fo637880758_2595_offsetWidth.inst++]; };
fo637880758_2595_offsetWidth.returns = [];
fo637880758_2595_offsetWidth.inst = 0;
defineGetter(o11, "offsetWidth", fo637880758_2595_offsetWidth, undefined);
// undefined
fo637880758_2595_offsetWidth.returns.push(4);
// 10705
o10.offsetTop = 0;
// 10706
o13 = {};
// 10707
f637880758_4.returns.push(o13);
// 10708
o13.JSBNG__top = "1%";
// undefined
o13 = null;
// 10709
o13 = {};
// 10710
f637880758_4.returns.push(o13);
// 10711
o13.width = "4px";
// undefined
o13 = null;
// 10713
o13 = {};
// 10714
f637880758_474.returns.push(o13);
// 10715
o14 = {};
// 10716
o13.style = o14;
// 10718
// 10719
// 10722
// 10723
// undefined
o14 = null;
// 10725
// 10726
o11.appendChild = f637880758_482;
// 10727
f637880758_482.returns.push(o13);
// undefined
o13 = null;
// 10728
o13 = {};
// 10729
f637880758_4.returns.push(o13);
// 10730
o13.marginRight = "0px";
// undefined
o13 = null;
// 10732
o12.zoom = "";
// 10733
// 10735
// undefined
fo637880758_2595_offsetWidth.returns.push(2);
// 10738
// 10740
// undefined
o12 = null;
// 10741
// 10742
o12 = {};
// 10743
o11.firstChild = o12;
// undefined
o11 = null;
// 10744
o11 = {};
// 10745
o12.style = o11;
// undefined
o12 = null;
// 10746
// undefined
o11 = null;
// undefined
fo637880758_2595_offsetWidth.returns.push(3);
// 10749
// undefined
o9 = null;
// 10750
o10.removeChild = f637880758_501;
// 10751
f637880758_501.returns.push(o8);
// undefined
o8 = null;
// 10755
o8 = {};
// 10756
f637880758_0.returns.push(o8);
// 10757
o8.getTime = f637880758_541;
// undefined
o8 = null;
// 10758
f637880758_541.returns.push(1373482802558);
// 10759
o0.window = void 0;
// 10760
o0.parentNode = null;
// 10762
o0.defaultView = ow637880758;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10767
o0.JSBNG__onready = void 0;
// 10768
ow637880758.JSBNG__onready = undefined;
// 10771
o0.ready = void 0;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10778
o8 = {};
// 10779
o8.type = "popstate";
// 10780
o8.jQuery18309834662606008351 = void 0;
// 10784
o8.defaultPrevented = false;
// 10785
o8.returnValue = true;
// 10786
o8.getPreventDefault = void 0;
// 10787
o8.timeStamp = 1373482802561;
// 10788
o8.which = void 0;
// 10789
o8.view = void 0;
// 10791
o8.target = ow637880758;
// 10792
o8.shiftKey = void 0;
// 10793
o8.relatedTarget = void 0;
// 10794
o8.metaKey = void 0;
// 10795
o8.eventPhase = 2;
// 10796
o8.currentTarget = ow637880758;
// 10797
o8.ctrlKey = void 0;
// 10798
o8.cancelable = true;
// 10799
o8.bubbles = false;
// 10800
o8.altKey = void 0;
// 10801
o8.srcElement = ow637880758;
// 10802
o8.relatedNode = void 0;
// 10803
o8.attrName = void 0;
// 10804
o8.attrChange = void 0;
// 10805
o8.state = null;
// undefined
o8 = null;
// 10806
o8 = {};
// 10807
o8.type = "mouseover";
// 10808
o8.jQuery18309834662606008351 = void 0;
// 10812
o8.defaultPrevented = false;
// 10813
o8.returnValue = true;
// 10814
o8.getPreventDefault = void 0;
// 10815
o8.timeStamp = 1373482818186;
// 10816
o9 = {};
// 10817
o8.toElement = o9;
// 10818
o8.screenY = 669;
// 10819
o8.screenX = 163;
// 10820
o8.pageY = 570;
// 10821
o8.pageX = 151;
// 10822
o8.offsetY = 516;
// 10823
o8.offsetX = 45;
// 10824
o8.fromElement = null;
// 10825
o8.clientY = 570;
// 10826
o8.clientX = 151;
// 10827
o8.buttons = void 0;
// 10828
o8.button = 0;
// 10829
o8.which = 0;
// 10830
o8.view = ow637880758;
// 10832
o8.target = o9;
// 10833
o8.shiftKey = false;
// 10834
o8.relatedTarget = null;
// 10835
o8.metaKey = false;
// 10836
o8.eventPhase = 3;
// 10837
o8.currentTarget = o0;
// 10838
o8.ctrlKey = false;
// 10839
o8.cancelable = true;
// 10840
o8.bubbles = true;
// 10841
o8.altKey = false;
// 10842
o8.srcElement = o9;
// 10843
o8.relatedNode = void 0;
// 10844
o8.attrName = void 0;
// 10845
o8.attrChange = void 0;
// undefined
o8 = null;
// 10846
o9.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10853
o9.disabled = void 0;
// 10858
o9.className = "dashboard";
// 10859
o8 = {};
// 10860
o9.parentNode = o8;
// 10861
o8.disabled = void 0;
// 10866
o8.className = "wrapper wrapper-search white";
// 10867
o11 = {};
// 10868
o8.parentNode = o11;
// 10869
o11.disabled = void 0;
// 10874
o11.className = "";
// 10875
o11.getAttribute = f637880758_472;
// 10877
f637880758_472.returns.push(null);
// 10878
o12 = {};
// 10879
o11.parentNode = o12;
// 10880
o12.disabled = void 0;
// 10885
o12.className = "";
// 10886
o12.getAttribute = f637880758_472;
// 10888
f637880758_472.returns.push("");
// 10889
o12.parentNode = o10;
// 10890
o10.disabled = void 0;
// 10895
o10.className = "t1 logged-out";
// 10896
o10.parentNode = o6;
// 10897
o6.disabled = void 0;
// 10902
o6.parentNode = o0;
// 10903
o13 = {};
// 10904
o13.type = "mouseout";
// 10905
o13.jQuery18309834662606008351 = void 0;
// 10909
o13.defaultPrevented = false;
// 10910
o13.returnValue = true;
// 10911
o13.getPreventDefault = void 0;
// 10912
o13.timeStamp = 1373482818196;
// 10913
o14 = {};
// 10914
o13.toElement = o14;
// 10915
o13.screenY = 630;
// 10916
o13.screenX = 174;
// 10917
o13.pageY = 531;
// 10918
o13.pageX = 162;
// 10919
o13.offsetY = 477;
// 10920
o13.offsetX = 56;
// 10921
o13.fromElement = o9;
// 10922
o13.clientY = 531;
// 10923
o13.clientX = 162;
// 10924
o13.buttons = void 0;
// 10925
o13.button = 0;
// 10926
o13.which = 0;
// 10927
o13.view = ow637880758;
// 10929
o13.target = o9;
// 10930
o13.shiftKey = false;
// 10931
o13.relatedTarget = o14;
// 10932
o13.metaKey = false;
// 10933
o13.eventPhase = 3;
// 10934
o13.currentTarget = o0;
// 10935
o13.ctrlKey = false;
// 10936
o13.cancelable = true;
// 10937
o13.bubbles = true;
// 10938
o13.altKey = false;
// 10939
o13.srcElement = o9;
// 10940
o13.relatedNode = void 0;
// 10941
o13.attrName = void 0;
// 10942
o13.attrChange = void 0;
// undefined
o13 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 10972
f637880758_472.returns.push(null);
// 10982
f637880758_472.returns.push("");
// 10997
o13 = {};
// 10998
o13.type = "mouseover";
// 10999
o13.jQuery18309834662606008351 = void 0;
// 11003
o13.defaultPrevented = false;
// 11004
o13.returnValue = true;
// 11005
o13.getPreventDefault = void 0;
// 11006
o13.timeStamp = 1373482818237;
// 11007
o13.toElement = o14;
// 11008
o13.screenY = 630;
// 11009
o13.screenX = 174;
// 11010
o13.pageY = 531;
// 11011
o13.pageX = 162;
// 11012
o13.offsetY = 10;
// 11013
o13.offsetX = 43;
// 11014
o13.fromElement = o9;
// 11015
o13.clientY = 531;
// 11016
o13.clientX = 162;
// 11017
o13.buttons = void 0;
// 11018
o13.button = 0;
// 11019
o13.which = 0;
// 11020
o13.view = ow637880758;
// 11022
o13.target = o14;
// 11023
o13.shiftKey = false;
// 11024
o13.relatedTarget = o9;
// 11025
o13.metaKey = false;
// 11026
o13.eventPhase = 3;
// 11027
o13.currentTarget = o0;
// 11028
o13.ctrlKey = false;
// 11029
o13.cancelable = true;
// 11030
o13.bubbles = true;
// 11031
o13.altKey = false;
// 11032
o13.srcElement = o14;
// 11033
o13.relatedNode = void 0;
// 11034
o13.attrName = void 0;
// 11035
o13.attrChange = void 0;
// undefined
o13 = null;
// 11036
o14.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11043
o14.disabled = void 0;
// 11048
o14.className = "";
// 11049
o14.getAttribute = f637880758_472;
// 11051
f637880758_472.returns.push(null);
// 11052
o13 = {};
// 11053
o14.parentNode = o13;
// 11054
o13.disabled = void 0;
// 11059
o13.className = "";
// 11060
o13.getAttribute = f637880758_472;
// 11062
f637880758_472.returns.push(null);
// 11063
o15 = {};
// 11064
o13.parentNode = o15;
// undefined
o13 = null;
// 11065
o15.disabled = void 0;
// 11070
o15.className = "clearfix";
// 11071
o13 = {};
// 11072
o15.parentNode = o13;
// undefined
o15 = null;
// 11073
o13.disabled = void 0;
// 11078
o13.className = "flex-module-inner js-items-container";
// 11079
o15 = {};
// 11080
o13.parentNode = o15;
// undefined
o13 = null;
// 11081
o15.disabled = void 0;
// 11086
o15.className = "flex-module";
// 11087
o13 = {};
// 11088
o15.parentNode = o13;
// undefined
o15 = null;
// 11089
o13.disabled = void 0;
// 11094
o13.className = "module site-footer ";
// 11095
o13.parentNode = o9;
// undefined
o13 = null;
// 11118
f637880758_472.returns.push(null);
// 11128
f637880758_472.returns.push("");
// 11143
o13 = {};
// 11144
o13.type = "mouseout";
// 11145
o13.jQuery18309834662606008351 = void 0;
// 11149
o13.defaultPrevented = false;
// 11150
o13.returnValue = true;
// 11151
o13.getPreventDefault = void 0;
// 11152
o13.timeStamp = 1373482818270;
// 11153
o15 = {};
// 11154
o13.toElement = o15;
// 11155
o13.screenY = 435;
// 11156
o13.screenX = 217;
// 11157
o13.pageY = 336;
// 11158
o13.pageX = 205;
// 11159
o13.offsetY = -185;
// 11160
o13.offsetX = 86;
// 11161
o13.fromElement = o14;
// 11162
o13.clientY = 336;
// 11163
o13.clientX = 205;
// 11164
o13.buttons = void 0;
// 11165
o13.button = 0;
// 11166
o13.which = 0;
// 11167
o13.view = ow637880758;
// 11169
o13.target = o14;
// 11170
o13.shiftKey = false;
// 11171
o13.relatedTarget = o15;
// 11172
o13.metaKey = false;
// 11173
o13.eventPhase = 3;
// 11174
o13.currentTarget = o0;
// 11175
o13.ctrlKey = false;
// 11176
o13.cancelable = true;
// 11177
o13.bubbles = true;
// 11178
o13.altKey = false;
// 11179
o13.srcElement = o14;
// 11180
o13.relatedNode = void 0;
// 11181
o13.attrName = void 0;
// 11182
o13.attrChange = void 0;
// undefined
o13 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11198
f637880758_472.returns.push(null);
// 11208
f637880758_472.returns.push(null);
// 11260
f637880758_472.returns.push(null);
// 11270
f637880758_472.returns.push("");
// 11285
o13 = {};
// 11286
o13.type = "mouseover";
// 11287
o13.jQuery18309834662606008351 = void 0;
// 11291
o13.defaultPrevented = false;
// 11292
o13.returnValue = true;
// 11293
o13.getPreventDefault = void 0;
// 11294
o13.timeStamp = 1373482818277;
// 11295
o13.toElement = o15;
// 11296
o13.screenY = 435;
// 11297
o13.screenX = 217;
// 11298
o13.pageY = 336;
// 11299
o13.pageX = 205;
// 11300
o13.offsetY = 1;
// 11301
o13.offsetX = 98;
// 11302
o13.fromElement = o14;
// 11303
o13.clientY = 336;
// 11304
o13.clientX = 205;
// 11305
o13.buttons = void 0;
// 11306
o13.button = 0;
// 11307
o13.which = 0;
// 11308
o13.view = ow637880758;
// 11310
o13.target = o15;
// 11311
o13.shiftKey = false;
// 11312
o13.relatedTarget = o14;
// undefined
o14 = null;
// 11313
o13.metaKey = false;
// 11314
o13.eventPhase = 3;
// 11315
o13.currentTarget = o0;
// 11316
o13.ctrlKey = false;
// 11317
o13.cancelable = true;
// 11318
o13.bubbles = true;
// 11319
o13.altKey = false;
// 11320
o13.srcElement = o15;
// 11321
o13.relatedNode = void 0;
// 11322
o13.attrName = void 0;
// 11323
o13.attrChange = void 0;
// undefined
o13 = null;
// 11324
o15.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11331
o15.disabled = void 0;
// 11336
o15.className = "list-link js-nav";
// 11337
o13 = {};
// 11338
o15.parentNode = o13;
// 11339
o13.disabled = void 0;
// 11344
o13.className = "people ";
// 11345
o14 = {};
// 11346
o13.parentNode = o14;
// undefined
o13 = null;
// 11347
o14.disabled = void 0;
// 11352
o14.className = "js-nav-links";
// 11353
o13 = {};
// 11354
o14.parentNode = o13;
// undefined
o14 = null;
// 11355
o13.disabled = void 0;
// 11360
o13.className = "module";
// 11361
o13.parentNode = o9;
// undefined
o13 = null;
// 11384
f637880758_472.returns.push(null);
// 11394
f637880758_472.returns.push("");
// 11409
o13 = {};
// 11410
o13.type = "mouseout";
// 11411
o13.jQuery18309834662606008351 = void 0;
// 11415
o13.defaultPrevented = false;
// 11416
o13.returnValue = true;
// 11417
o13.getPreventDefault = void 0;
// 11418
o13.timeStamp = 1373482818286;
// 11419
o14 = {};
// 11420
o13.toElement = o14;
// 11421
o13.screenY = 321;
// 11422
o13.screenX = 254;
// 11423
o13.pageY = 222;
// 11424
o13.pageX = 242;
// 11425
o13.offsetY = -113;
// 11426
o13.offsetX = 135;
// 11427
o13.fromElement = o15;
// 11428
o13.clientY = 222;
// 11429
o13.clientX = 242;
// 11430
o13.buttons = void 0;
// 11431
o13.button = 0;
// 11432
o13.which = 0;
// 11433
o13.view = ow637880758;
// 11435
o13.target = o15;
// 11436
o13.shiftKey = false;
// 11437
o13.relatedTarget = o14;
// 11438
o13.metaKey = false;
// 11439
o13.eventPhase = 3;
// 11440
o13.currentTarget = o0;
// 11441
o13.ctrlKey = false;
// 11442
o13.cancelable = true;
// 11443
o13.bubbles = true;
// 11444
o13.altKey = false;
// 11445
o13.srcElement = o15;
// 11446
o13.relatedNode = void 0;
// 11447
o13.attrName = void 0;
// 11448
o13.attrChange = void 0;
// undefined
o13 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11506
f637880758_472.returns.push(null);
// 11516
f637880758_472.returns.push("");
// 11531
o13 = {};
// 11532
o13.type = "mouseover";
// 11533
o13.jQuery18309834662606008351 = void 0;
// 11537
o13.defaultPrevented = false;
// 11538
o13.returnValue = true;
// 11539
o13.getPreventDefault = void 0;
// 11540
o13.timeStamp = 1373482818293;
// 11541
o13.toElement = o14;
// 11542
o13.screenY = 321;
// 11543
o13.screenX = 254;
// 11544
o13.pageY = 222;
// 11545
o13.pageX = 242;
// 11546
o13.offsetY = 11;
// 11547
o13.offsetX = 123;
// 11548
o13.fromElement = o15;
// 11549
o13.clientY = 222;
// 11550
o13.clientX = 242;
// 11551
o13.buttons = void 0;
// 11552
o13.button = 0;
// 11553
o13.which = 0;
// 11554
o13.view = ow637880758;
// 11556
o13.target = o14;
// 11557
o13.shiftKey = false;
// 11558
o13.relatedTarget = o15;
// undefined
o15 = null;
// 11559
o13.metaKey = false;
// 11560
o13.eventPhase = 3;
// 11561
o13.currentTarget = o0;
// 11562
o13.ctrlKey = false;
// 11563
o13.cancelable = true;
// 11564
o13.bubbles = true;
// 11565
o13.altKey = false;
// 11566
o13.srcElement = o14;
// 11567
o13.relatedNode = void 0;
// 11568
o13.attrName = void 0;
// 11569
o13.attrChange = void 0;
// undefined
o13 = null;
// 11570
o14.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11577
o14.disabled = false;
// 11582
o14.className = "";
// 11583
o14.getAttribute = f637880758_472;
// 11585
f637880758_472.returns.push(null);
// 11586
o13 = {};
// 11587
o14.parentNode = o13;
// 11588
o13.disabled = void 0;
// 11593
o13.className = "holding password";
// 11594
o15 = {};
// 11595
o13.parentNode = o15;
// undefined
o13 = null;
// 11596
o15.disabled = void 0;
// 11601
o15.className = "clearfix signup";
// 11602
o13 = {};
// 11603
o15.parentNode = o13;
// 11604
o13.disabled = void 0;
// 11609
o13.className = "flex-module";
// 11610
o16 = {};
// 11611
o13.parentNode = o16;
// 11612
o16.disabled = void 0;
// 11617
o16.className = "module signup-call-out search-signup-call-out";
// 11618
o16.parentNode = o9;
// undefined
o16 = null;
// undefined
o9 = null;
// 11641
f637880758_472.returns.push(null);
// 11651
f637880758_472.returns.push("");
// 11666
o9 = {};
// 11667
o9.type = "mouseout";
// 11668
o9.jQuery18309834662606008351 = void 0;
// 11672
o9.defaultPrevented = false;
// 11673
o9.returnValue = true;
// 11674
o9.getPreventDefault = void 0;
// 11675
o9.timeStamp = 1373482818321;
// 11676
o16 = {};
// 11677
o9.toElement = o16;
// 11678
o9.screenY = 237;
// 11679
o9.screenX = 342;
// 11680
o9.pageY = 138;
// 11681
o9.pageX = 330;
// 11682
o9.offsetY = -73;
// 11683
o9.offsetX = 211;
// 11684
o9.fromElement = o14;
// 11685
o9.clientY = 138;
// 11686
o9.clientX = 330;
// 11687
o9.buttons = void 0;
// 11688
o9.button = 0;
// 11689
o9.which = 0;
// 11690
o9.view = ow637880758;
// 11692
o9.target = o14;
// 11693
o9.shiftKey = false;
// 11694
o9.relatedTarget = o16;
// 11695
o9.metaKey = false;
// 11696
o9.eventPhase = 3;
// 11697
o9.currentTarget = o0;
// 11698
o9.ctrlKey = false;
// 11699
o9.cancelable = true;
// 11700
o9.bubbles = true;
// 11701
o9.altKey = false;
// 11702
o9.srcElement = o14;
// 11703
o9.relatedNode = void 0;
// 11704
o9.attrName = void 0;
// 11705
o9.attrChange = void 0;
// undefined
o9 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11721
f637880758_472.returns.push(null);
// 11773
f637880758_472.returns.push(null);
// 11783
f637880758_472.returns.push("");
// 11798
o9 = {};
// 11799
o9.type = "mouseover";
// 11800
o9.jQuery18309834662606008351 = void 0;
// 11804
o9.defaultPrevented = false;
// 11805
o9.returnValue = true;
// 11806
o9.getPreventDefault = void 0;
// 11807
o9.timeStamp = 1373482818332;
// 11808
o9.toElement = o16;
// 11809
o9.screenY = 237;
// 11810
o9.screenX = 342;
// 11811
o9.pageY = 138;
// 11812
o9.pageX = 330;
// 11813
o9.offsetY = 3;
// 11814
o9.offsetX = 211;
// 11815
o9.fromElement = o14;
// 11816
o9.clientY = 138;
// 11817
o9.clientX = 330;
// 11818
o9.buttons = void 0;
// 11819
o9.button = 0;
// 11820
o9.which = 0;
// 11821
o9.view = ow637880758;
// 11823
o9.target = o16;
// 11824
o9.shiftKey = false;
// 11825
o9.relatedTarget = o14;
// undefined
o14 = null;
// 11826
o9.metaKey = false;
// 11827
o9.eventPhase = 3;
// 11828
o9.currentTarget = o0;
// 11829
o9.ctrlKey = false;
// 11830
o9.cancelable = true;
// 11831
o9.bubbles = true;
// 11832
o9.altKey = false;
// 11833
o9.srcElement = o16;
// 11834
o9.relatedNode = void 0;
// 11835
o9.attrName = void 0;
// 11836
o9.attrChange = void 0;
// undefined
o9 = null;
// 11837
o16.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11844
o16.disabled = false;
// 11849
o16.className = "";
// 11850
o16.getAttribute = f637880758_472;
// 11852
f637880758_472.returns.push(null);
// 11853
o9 = {};
// 11854
o16.parentNode = o9;
// 11855
o9.disabled = void 0;
// 11860
o9.className = "holding name";
// 11861
o9.parentNode = o15;
// undefined
o9 = null;
// undefined
o15 = null;
// 11905
f637880758_472.returns.push(null);
// 11915
f637880758_472.returns.push("");
// 11930
o9 = {};
// 11931
o9.type = "mouseout";
// 11932
o9.jQuery18309834662606008351 = void 0;
// 11936
o9.defaultPrevented = false;
// 11937
o9.returnValue = true;
// 11938
o9.getPreventDefault = void 0;
// 11939
o9.timeStamp = 1373482818345;
// 11940
o9.toElement = o13;
// 11941
o9.screenY = 194;
// 11942
o9.screenX = 415;
// 11943
o9.pageY = 95;
// 11944
o9.pageX = 403;
// 11945
o9.offsetY = -40;
// 11946
o9.offsetX = 284;
// 11947
o9.fromElement = o16;
// 11948
o9.clientY = 95;
// 11949
o9.clientX = 403;
// 11950
o9.buttons = void 0;
// 11951
o9.button = 0;
// 11952
o9.which = 0;
// 11953
o9.view = ow637880758;
// 11955
o9.target = o16;
// 11956
o9.shiftKey = false;
// 11957
o9.relatedTarget = o13;
// 11958
o9.metaKey = false;
// 11959
o9.eventPhase = 3;
// 11960
o9.currentTarget = o0;
// 11961
o9.ctrlKey = false;
// 11962
o9.cancelable = true;
// 11963
o9.bubbles = true;
// 11964
o9.altKey = false;
// 11965
o9.srcElement = o16;
// 11966
o9.relatedNode = void 0;
// 11967
o9.attrName = void 0;
// 11968
o9.attrChange = void 0;
// undefined
o9 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 11984
f637880758_472.returns.push(null);
// 12036
f637880758_472.returns.push(null);
// 12046
f637880758_472.returns.push("");
// 12061
o9 = {};
// 12062
o9.type = "mouseover";
// 12063
o9.jQuery18309834662606008351 = void 0;
// 12067
o9.defaultPrevented = false;
// 12068
o9.returnValue = true;
// 12069
o9.getPreventDefault = void 0;
// 12070
o9.timeStamp = 1373482818355;
// 12071
o9.toElement = o13;
// 12072
o9.screenY = 194;
// 12073
o9.screenX = 415;
// 12074
o9.pageY = 95;
// 12075
o9.pageX = 403;
// 12076
o9.offsetY = 40;
// 12077
o9.offsetX = 296;
// 12078
o9.fromElement = o16;
// 12079
o9.clientY = 95;
// 12080
o9.clientX = 403;
// 12081
o9.buttons = void 0;
// 12082
o9.button = 0;
// 12083
o9.which = 0;
// 12084
o9.view = ow637880758;
// 12086
o9.target = o13;
// 12087
o9.shiftKey = false;
// 12088
o9.relatedTarget = o16;
// undefined
o16 = null;
// 12089
o9.metaKey = false;
// 12090
o9.eventPhase = 3;
// 12091
o9.currentTarget = o0;
// 12092
o9.ctrlKey = false;
// 12093
o9.cancelable = true;
// 12094
o9.bubbles = true;
// 12095
o9.altKey = false;
// 12096
o9.srcElement = o13;
// 12097
o9.relatedNode = void 0;
// 12098
o9.attrName = void 0;
// 12099
o9.attrChange = void 0;
// undefined
o9 = null;
// 12100
o13.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12143
f637880758_472.returns.push(null);
// 12153
f637880758_472.returns.push("");
// 12168
o9 = {};
// 12169
o9.type = "mouseout";
// 12170
o9.jQuery18309834662606008351 = void 0;
// 12174
o9.defaultPrevented = false;
// 12175
o9.returnValue = true;
// 12176
o9.getPreventDefault = void 0;
// 12177
o9.timeStamp = 1373482818372;
// 12178
o14 = {};
// 12179
o9.toElement = o14;
// 12180
o9.screenY = 159;
// 12181
o9.screenX = 480;
// 12182
o9.pageY = 60;
// 12183
o9.pageX = 468;
// 12184
o9.offsetY = 5;
// 12185
o9.offsetX = 361;
// 12186
o9.fromElement = o13;
// 12187
o9.clientY = 60;
// 12188
o9.clientX = 468;
// 12189
o9.buttons = void 0;
// 12190
o9.button = 0;
// 12191
o9.which = 0;
// 12192
o9.view = ow637880758;
// 12194
o9.target = o13;
// 12195
o9.shiftKey = false;
// 12196
o9.relatedTarget = o14;
// 12197
o9.metaKey = false;
// 12198
o9.eventPhase = 3;
// 12199
o9.currentTarget = o0;
// 12200
o9.ctrlKey = false;
// 12201
o9.cancelable = true;
// 12202
o9.bubbles = true;
// 12203
o9.altKey = false;
// 12204
o9.srcElement = o13;
// 12205
o9.relatedNode = void 0;
// 12206
o9.attrName = void 0;
// 12207
o9.attrChange = void 0;
// undefined
o9 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12251
f637880758_472.returns.push(null);
// 12261
f637880758_472.returns.push("");
// 12276
o9 = {};
// 12277
o9.type = "mouseover";
// 12278
o9.jQuery18309834662606008351 = void 0;
// 12282
o9.defaultPrevented = false;
// 12283
o9.returnValue = true;
// 12284
o9.getPreventDefault = void 0;
// 12285
o9.timeStamp = 1373482818378;
// 12286
o9.toElement = o14;
// 12287
o9.screenY = 159;
// 12288
o9.screenX = 480;
// 12289
o9.pageY = 60;
// 12290
o9.pageX = 468;
// 12291
o9.offsetY = 5;
// 12292
o9.offsetX = 46;
// 12293
o9.fromElement = o13;
// 12294
o9.clientY = 60;
// 12295
o9.clientX = 468;
// 12296
o9.buttons = void 0;
// 12297
o9.button = 0;
// 12298
o9.which = 0;
// 12299
o9.view = ow637880758;
// 12301
o9.target = o14;
// 12302
o9.shiftKey = false;
// 12303
o9.relatedTarget = o13;
// undefined
o13 = null;
// 12304
o9.metaKey = false;
// 12305
o9.eventPhase = 3;
// 12306
o9.currentTarget = o0;
// 12307
o9.ctrlKey = false;
// 12308
o9.cancelable = true;
// 12309
o9.bubbles = true;
// 12310
o9.altKey = false;
// 12311
o9.srcElement = o14;
// 12312
o9.relatedNode = void 0;
// 12313
o9.attrName = void 0;
// 12314
o9.attrChange = void 0;
// undefined
o9 = null;
// 12315
o14.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12322
o14.disabled = void 0;
// 12327
o14.className = "header-inner";
// 12328
o9 = {};
// 12329
o14.parentNode = o9;
// 12330
o9.disabled = void 0;
// 12335
o9.className = "content-header";
// 12336
o13 = {};
// 12337
o9.parentNode = o13;
// undefined
o9 = null;
// 12338
o13.disabled = void 0;
// 12343
o13.className = "content-main";
// 12344
o13.parentNode = o8;
// undefined
o13 = null;
// 12360
f637880758_472.returns.push(null);
// 12370
f637880758_472.returns.push("");
// 12385
o9 = {};
// 12386
o9.type = "mouseout";
// 12387
o9.jQuery18309834662606008351 = void 0;
// 12391
o9.defaultPrevented = false;
// 12392
o9.returnValue = true;
// 12393
o9.getPreventDefault = void 0;
// 12394
o9.timeStamp = 1373482818384;
// 12395
o9.toElement = o8;
// 12396
o9.screenY = 150;
// 12397
o9.screenX = 497;
// 12398
o9.pageY = 51;
// 12399
o9.pageX = 485;
// 12400
o9.offsetY = -4;
// 12401
o9.offsetX = 63;
// 12402
o9.fromElement = o14;
// 12403
o9.clientY = 51;
// 12404
o9.clientX = 485;
// 12405
o9.buttons = void 0;
// 12406
o9.button = 0;
// 12407
o9.which = 0;
// 12408
o9.view = ow637880758;
// 12410
o9.target = o14;
// 12411
o9.shiftKey = false;
// 12412
o9.relatedTarget = o8;
// 12413
o9.metaKey = false;
// 12414
o9.eventPhase = 3;
// 12415
o9.currentTarget = o0;
// 12416
o9.ctrlKey = false;
// 12417
o9.cancelable = true;
// 12418
o9.bubbles = true;
// 12419
o9.altKey = false;
// 12420
o9.srcElement = o14;
// 12421
o9.relatedNode = void 0;
// 12422
o9.attrName = void 0;
// 12423
o9.attrChange = void 0;
// undefined
o9 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12467
f637880758_472.returns.push(null);
// 12477
f637880758_472.returns.push("");
// 12492
o9 = {};
// 12493
o9.type = "mouseover";
// 12494
o9.jQuery18309834662606008351 = void 0;
// 12498
o9.defaultPrevented = false;
// 12499
o9.returnValue = true;
// 12500
o9.getPreventDefault = void 0;
// 12501
o9.timeStamp = 1373482818388;
// 12502
o9.toElement = o8;
// 12503
o9.screenY = 150;
// 12504
o9.screenX = 497;
// 12505
o9.pageY = 51;
// 12506
o9.pageX = 485;
// 12507
o9.offsetY = 51;
// 12508
o9.offsetX = 393;
// 12509
o9.fromElement = o14;
// 12510
o9.clientY = 51;
// 12511
o9.clientX = 485;
// 12512
o9.buttons = void 0;
// 12513
o9.button = 0;
// 12514
o9.which = 0;
// 12515
o9.view = ow637880758;
// 12517
o9.target = o8;
// 12518
o9.shiftKey = false;
// 12519
o9.relatedTarget = o14;
// undefined
o14 = null;
// 12520
o9.metaKey = false;
// 12521
o9.eventPhase = 3;
// 12522
o9.currentTarget = o0;
// 12523
o9.ctrlKey = false;
// 12524
o9.cancelable = true;
// 12525
o9.bubbles = true;
// 12526
o9.altKey = false;
// 12527
o9.srcElement = o8;
// 12528
o9.relatedNode = void 0;
// 12529
o9.attrName = void 0;
// 12530
o9.attrChange = void 0;
// undefined
o9 = null;
// 12531
o8.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12553
f637880758_472.returns.push(null);
// 12563
f637880758_472.returns.push("");
// 12578
o9 = {};
// 12579
o9.type = "mouseout";
// 12580
o9.jQuery18309834662606008351 = void 0;
// 12584
o9.defaultPrevented = false;
// 12585
o9.returnValue = true;
// 12586
o9.getPreventDefault = void 0;
// 12587
o9.timeStamp = 1373482818424;
// 12588
o13 = {};
// 12589
o9.toElement = o13;
// 12590
o9.screenY = 137;
// 12591
o9.screenX = 565;
// 12592
o9.pageY = 38;
// 12593
o9.pageX = 553;
// 12594
o9.offsetY = 38;
// 12595
o9.offsetX = 461;
// 12596
o9.fromElement = o8;
// 12597
o9.clientY = 38;
// 12598
o9.clientX = 553;
// 12599
o9.buttons = void 0;
// 12600
o9.button = 0;
// 12601
o9.which = 0;
// 12602
o9.view = ow637880758;
// 12604
o9.target = o8;
// 12605
o9.shiftKey = false;
// 12606
o9.relatedTarget = o13;
// 12607
o9.metaKey = false;
// 12608
o9.eventPhase = 3;
// 12609
o9.currentTarget = o0;
// 12610
o9.ctrlKey = false;
// 12611
o9.cancelable = true;
// 12612
o9.bubbles = true;
// 12613
o9.altKey = false;
// 12614
o9.srcElement = o8;
// 12615
o9.relatedNode = void 0;
// 12616
o9.attrName = void 0;
// 12617
o9.attrChange = void 0;
// undefined
o9 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12640
f637880758_472.returns.push(null);
// 12650
f637880758_472.returns.push("");
// 12665
o9 = {};
// 12666
o9.type = "mouseover";
// 12667
o9.jQuery18309834662606008351 = void 0;
// 12671
o9.defaultPrevented = false;
// 12672
o9.returnValue = true;
// 12673
o9.getPreventDefault = void 0;
// 12674
o9.timeStamp = 1373482818432;
// 12675
o9.toElement = o13;
// 12676
o9.screenY = 137;
// 12677
o9.screenX = 565;
// 12678
o9.pageY = 38;
// 12679
o9.pageX = 553;
// 12680
o9.offsetY = 38;
// 12681
o9.offsetX = 553;
// 12682
o9.fromElement = o8;
// 12683
o9.clientY = 38;
// 12684
o9.clientX = 553;
// 12685
o9.buttons = void 0;
// 12686
o9.button = 0;
// 12687
o9.which = 0;
// 12688
o9.view = ow637880758;
// 12690
o9.target = o13;
// 12691
o9.shiftKey = false;
// 12692
o9.relatedTarget = o8;
// undefined
o8 = null;
// 12693
o9.metaKey = false;
// 12694
o9.eventPhase = 3;
// 12695
o9.currentTarget = o0;
// 12696
o9.ctrlKey = false;
// 12697
o9.cancelable = true;
// 12698
o9.bubbles = true;
// 12699
o9.altKey = false;
// 12700
o9.srcElement = o13;
// 12701
o9.relatedNode = void 0;
// 12702
o9.attrName = void 0;
// 12703
o9.attrChange = void 0;
// undefined
o9 = null;
// 12704
o13.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12711
o13.disabled = void 0;
// 12716
o13.className = "global-nav";
// 12717
o8 = {};
// 12718
o13.parentNode = o8;
// 12719
o8.disabled = void 0;
// 12724
o8.className = "topbar js-topbar";
// 12725
o8.parentNode = o12;
// undefined
o8 = null;
// 12734
f637880758_472.returns.push("");
// 12749
o8 = {};
// 12750
o8.type = "mouseout";
// 12751
o8.jQuery18309834662606008351 = void 0;
// 12755
o8.defaultPrevented = false;
// 12756
o8.returnValue = true;
// 12757
o8.getPreventDefault = void 0;
// 12758
o8.timeStamp = 1373482818450;
// 12759
o8.toElement = o7;
// 12760
o8.screenY = 119;
// 12761
o8.screenX = 591;
// 12762
o8.pageY = 20;
// 12763
o8.pageX = 579;
// 12764
o8.offsetY = 20;
// 12765
o8.offsetX = 579;
// 12766
o8.fromElement = o13;
// 12767
o8.clientY = 20;
// 12768
o8.clientX = 579;
// 12769
o8.buttons = void 0;
// 12770
o8.button = 0;
// 12771
o8.which = 0;
// 12772
o8.view = ow637880758;
// 12774
o8.target = o13;
// 12775
o8.shiftKey = false;
// 12776
o8.relatedTarget = o7;
// 12777
o8.metaKey = false;
// 12778
o8.eventPhase = 3;
// 12779
o8.currentTarget = o0;
// 12780
o8.ctrlKey = false;
// 12781
o8.cancelable = true;
// 12782
o8.bubbles = true;
// 12783
o8.altKey = false;
// 12784
o8.srcElement = o13;
// 12785
o8.relatedNode = void 0;
// 12786
o8.attrName = void 0;
// 12787
o8.attrChange = void 0;
// undefined
o8 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12817
f637880758_472.returns.push("");
// 12832
o8 = {};
// 12833
o8.type = "mouseover";
// 12834
o8.jQuery18309834662606008351 = void 0;
// 12838
o8.defaultPrevented = false;
// 12839
o8.returnValue = true;
// 12840
o8.getPreventDefault = void 0;
// 12841
o8.timeStamp = 1373482818456;
// 12842
o8.toElement = o7;
// 12843
o8.screenY = 119;
// 12844
o8.screenX = 591;
// 12845
o8.pageY = 20;
// 12846
o8.pageX = 579;
// 12847
o8.offsetY = 13;
// 12848
o8.offsetX = 1;
// 12849
o8.fromElement = o13;
// 12850
o8.clientY = 20;
// 12851
o8.clientX = 579;
// 12852
o8.buttons = void 0;
// 12853
o8.button = 0;
// 12854
o8.which = 0;
// 12855
o8.view = ow637880758;
// 12857
o8.target = o7;
// 12858
o8.shiftKey = false;
// 12859
o8.relatedTarget = o13;
// 12860
o8.metaKey = false;
// 12861
o8.eventPhase = 3;
// 12862
o8.currentTarget = o0;
// 12863
o8.ctrlKey = false;
// 12864
o8.cancelable = true;
// 12865
o8.bubbles = true;
// 12866
o8.altKey = false;
// 12867
o8.srcElement = o7;
// 12868
o8.relatedNode = void 0;
// 12869
o8.attrName = void 0;
// 12870
o8.attrChange = void 0;
// undefined
o8 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 12878
o7.disabled = false;
// 12883
o7.className = "search-input";
// 12885
o1.disabled = void 0;
// 12890
o1.className = "form-search js-search-form ";
// undefined
o1 = null;
// 12892
o5.disabled = void 0;
// 12897
o5.className = "";
// 12898
o5.getAttribute = f637880758_472;
// 12900
f637880758_472.returns.push(null);
// 12901
o1 = {};
// 12902
o5.parentNode = o1;
// undefined
o5 = null;
// 12903
o1.disabled = void 0;
// 12908
o1.className = "pull-right";
// 12909
o5 = {};
// 12910
o1.parentNode = o5;
// 12911
o5.disabled = void 0;
// 12916
o5.className = "container";
// 12917
o8 = {};
// 12918
o5.parentNode = o8;
// undefined
o5 = null;
// 12919
o8.disabled = void 0;
// 12924
o8.className = "global-nav-inner";
// 12925
o8.parentNode = o13;
// undefined
o8 = null;
// undefined
o13 = null;
// 12948
f637880758_472.returns.push("");
// 12963
o5 = {};
// 12964
o5.type = "mouseout";
// 12965
o5.jQuery18309834662606008351 = void 0;
// 12969
o5.defaultPrevented = false;
// 12970
o5.returnValue = true;
// 12971
o5.getPreventDefault = void 0;
// 12972
o5.timeStamp = 1373482818492;
// 12973
o5.toElement = null;
// 12974
o5.screenY = 98;
// 12975
o5.screenX = 623;
// 12976
o5.pageY = -1;
// 12977
o5.pageX = 611;
// 12978
o5.offsetY = -8;
// 12979
o5.offsetX = 33;
// 12980
o5.fromElement = o7;
// 12981
o5.clientY = -1;
// 12982
o5.clientX = 611;
// 12983
o5.buttons = void 0;
// 12984
o5.button = 0;
// 12985
o5.which = 0;
// 12986
o5.view = ow637880758;
// 12988
o5.target = o7;
// 12989
o5.shiftKey = false;
// 12990
o5.relatedTarget = null;
// 12991
o5.metaKey = false;
// 12992
o5.eventPhase = 3;
// 12993
o5.currentTarget = o0;
// 12994
o5.ctrlKey = false;
// 12995
o5.cancelable = true;
// 12996
o5.bubbles = true;
// 12997
o5.altKey = false;
// 12998
o5.srcElement = o7;
// undefined
o7 = null;
// 12999
o5.relatedNode = void 0;
// 13000
o5.attrName = void 0;
// 13001
o5.attrChange = void 0;
// undefined
o5 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13032
f637880758_472.returns.push(null);
// 13077
f637880758_472.returns.push("");
// 13092
o5 = {};
// 13093
o5.type = "mouseover";
// 13094
o5.jQuery18309834662606008351 = void 0;
// 13098
o5.defaultPrevented = false;
// 13099
o5.returnValue = true;
// 13100
o5.getPreventDefault = void 0;
// 13101
o5.timeStamp = 1373482818659;
// 13102
o7 = {};
// 13103
o5.toElement = o7;
// 13104
o5.screenY = 102;
// 13105
o5.screenX = 803;
// 13106
o5.pageY = 3;
// 13107
o5.pageX = 791;
// 13108
o5.offsetY = 3;
// 13109
o5.offsetX = 5;
// 13110
o5.fromElement = null;
// 13111
o5.clientY = 3;
// 13112
o5.clientX = 791;
// 13113
o5.buttons = void 0;
// 13114
o5.button = 0;
// 13115
o5.which = 0;
// 13116
o5.view = ow637880758;
// 13118
o5.target = o7;
// 13119
o5.shiftKey = false;
// 13120
o5.relatedTarget = null;
// 13121
o5.metaKey = false;
// 13122
o5.eventPhase = 3;
// 13123
o5.currentTarget = o0;
// 13124
o5.ctrlKey = false;
// 13125
o5.cancelable = true;
// 13126
o5.bubbles = true;
// 13127
o5.altKey = false;
// 13128
o5.srcElement = o7;
// 13129
o5.relatedNode = void 0;
// 13130
o5.attrName = void 0;
// 13131
o5.attrChange = void 0;
// undefined
o5 = null;
// 13132
o7.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13139
o7.disabled = void 0;
// 13144
o7.className = "dropdown-toggle dropdown-signin";
// 13145
o5 = {};
// 13146
o7.parentNode = o5;
// 13147
o5.disabled = void 0;
// 13152
o5.className = "dropdown js-session";
// 13153
o8 = {};
// 13154
o5.parentNode = o8;
// undefined
o5 = null;
// 13155
o8.disabled = void 0;
// 13160
o8.className = "nav secondary-nav session-dropdown";
// 13161
o8.parentNode = o1;
// undefined
o8 = null;
// undefined
o1 = null;
// 13205
f637880758_472.returns.push("");
// 13220
o1 = {};
// 13221
o1.type = "mouseout";
// 13222
o1.jQuery18309834662606008351 = void 0;
// 13226
o1.defaultPrevented = false;
// 13227
o1.returnValue = true;
// 13228
o1.getPreventDefault = void 0;
// 13229
o1.timeStamp = 1373482818668;
// 13230
o1.toElement = o11;
// 13231
o1.screenY = 160;
// 13232
o1.screenX = 983;
// 13233
o1.pageY = 61;
// 13234
o1.pageX = 971;
// 13235
o1.offsetY = 61;
// 13236
o1.offsetX = 185;
// 13237
o1.fromElement = o7;
// 13238
o1.clientY = 61;
// 13239
o1.clientX = 971;
// 13240
o1.buttons = void 0;
// 13241
o1.button = 0;
// 13242
o1.which = 0;
// 13243
o1.view = ow637880758;
// 13245
o1.target = o7;
// 13246
o1.shiftKey = false;
// 13247
o1.relatedTarget = o11;
// 13248
o1.metaKey = false;
// 13249
o1.eventPhase = 3;
// 13250
o1.currentTarget = o0;
// 13251
o1.ctrlKey = false;
// 13252
o1.cancelable = true;
// 13253
o1.bubbles = true;
// 13254
o1.altKey = false;
// 13255
o1.srcElement = o7;
// 13256
o1.relatedNode = void 0;
// 13257
o1.attrName = void 0;
// 13258
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13330
f637880758_472.returns.push("");
// 13345
o1 = {};
// 13346
o1.type = "mouseover";
// 13347
o1.jQuery18309834662606008351 = void 0;
// 13351
o1.defaultPrevented = false;
// 13352
o1.returnValue = true;
// 13353
o1.getPreventDefault = void 0;
// 13354
o1.timeStamp = 1373482818673;
// 13355
o1.toElement = o11;
// 13356
o1.screenY = 160;
// 13357
o1.screenX = 983;
// 13358
o1.pageY = 61;
// 13359
o1.pageX = 971;
// 13360
o1.offsetY = 61;
// 13361
o1.offsetX = 971;
// 13362
o1.fromElement = o7;
// 13363
o1.clientY = 61;
// 13364
o1.clientX = 971;
// 13365
o1.buttons = void 0;
// 13366
o1.button = 0;
// 13367
o1.which = 0;
// 13368
o1.view = ow637880758;
// 13370
o1.target = o11;
// 13371
o1.shiftKey = false;
// 13372
o1.relatedTarget = o7;
// 13373
o1.metaKey = false;
// 13374
o1.eventPhase = 3;
// 13375
o1.currentTarget = o0;
// 13376
o1.ctrlKey = false;
// 13377
o1.cancelable = true;
// 13378
o1.bubbles = true;
// 13379
o1.altKey = false;
// 13380
o1.srcElement = o11;
// 13381
o1.relatedNode = void 0;
// 13382
o1.attrName = void 0;
// 13383
o1.attrChange = void 0;
// undefined
o1 = null;
// 13384
o11.nodeType = 1;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13399
f637880758_472.returns.push(null);
// 13409
f637880758_472.returns.push("");
// 13424
o1 = {};
// 13425
o1.type = "mouseout";
// 13426
o1.jQuery18309834662606008351 = void 0;
// 13430
o1.defaultPrevented = false;
// 13431
o1.returnValue = true;
// 13432
o1.getPreventDefault = void 0;
// 13433
o1.timeStamp = 1373482818687;
// 13434
o1.toElement = null;
// 13435
o1.screenY = 215;
// 13436
o1.screenX = 1086;
// 13437
o1.pageY = 116;
// 13438
o1.pageX = 1074;
// 13439
o1.offsetY = 116;
// 13440
o1.offsetX = 1074;
// 13441
o1.fromElement = o11;
// 13442
o1.clientY = 116;
// 13443
o1.clientX = 1074;
// 13444
o1.buttons = void 0;
// 13445
o1.button = 0;
// 13446
o1.which = 0;
// 13447
o1.view = ow637880758;
// 13449
o1.target = o11;
// 13450
o1.shiftKey = false;
// 13451
o1.relatedTarget = null;
// 13452
o1.metaKey = false;
// 13453
o1.eventPhase = 3;
// 13454
o1.currentTarget = o0;
// 13455
o1.ctrlKey = false;
// 13456
o1.cancelable = true;
// 13457
o1.bubbles = true;
// 13458
o1.altKey = false;
// 13459
o1.srcElement = o11;
// 13460
o1.relatedNode = void 0;
// 13461
o1.attrName = void 0;
// 13462
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13479
f637880758_472.returns.push(null);
// 13489
f637880758_472.returns.push("");
// 13504
o1 = {};
// 13505
o1.type = "mouseover";
// 13506
o1.jQuery18309834662606008351 = void 0;
// 13510
o1.defaultPrevented = false;
// 13511
o1.returnValue = true;
// 13512
o1.getPreventDefault = void 0;
// 13513
o1.timeStamp = 1373482818973;
// 13514
o1.toElement = o11;
// 13515
o1.screenY = 387;
// 13516
o1.screenX = 1047;
// 13517
o1.pageY = 288;
// 13518
o1.pageX = 1035;
// 13519
o1.offsetY = 288;
// 13520
o1.offsetX = 1035;
// 13521
o1.fromElement = null;
// 13522
o1.clientY = 288;
// 13523
o1.clientX = 1035;
// 13524
o1.buttons = void 0;
// 13525
o1.button = 0;
// 13526
o1.which = 0;
// 13527
o1.view = ow637880758;
// 13529
o1.target = o11;
// 13530
o1.shiftKey = false;
// 13531
o1.relatedTarget = null;
// 13532
o1.metaKey = false;
// 13533
o1.eventPhase = 3;
// 13534
o1.currentTarget = o0;
// 13535
o1.ctrlKey = false;
// 13536
o1.cancelable = true;
// 13537
o1.bubbles = true;
// 13538
o1.altKey = false;
// 13539
o1.srcElement = o11;
// 13540
o1.relatedNode = void 0;
// 13541
o1.attrName = void 0;
// 13542
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13558
f637880758_472.returns.push(null);
// 13568
f637880758_472.returns.push("");
// 13583
o1 = {};
// 13584
o1.type = "mouseup";
// 13585
o1.jQuery18309834662606008351 = void 0;
// 13589
o1.defaultPrevented = false;
// 13590
o1.returnValue = true;
// 13591
o1.getPreventDefault = void 0;
// 13592
o1.timeStamp = 1373482819225;
// 13593
o1.toElement = o11;
// 13594
o1.screenY = 407;
// 13595
o1.screenX = 978;
// 13596
o1.pageY = 308;
// 13597
o1.pageX = 966;
// 13598
o1.offsetY = 308;
// 13599
o1.offsetX = 966;
// 13600
o1.fromElement = null;
// 13601
o1.clientY = 308;
// 13602
o1.clientX = 966;
// 13603
o1.buttons = void 0;
// 13604
o1.button = 0;
// 13605
o1.which = 1;
// 13606
o1.view = ow637880758;
// 13608
o1.target = o11;
// 13609
o1.shiftKey = false;
// 13610
o1.relatedTarget = null;
// 13611
o1.metaKey = false;
// 13612
o1.eventPhase = 3;
// 13613
o1.currentTarget = o0;
// 13614
o1.ctrlKey = false;
// 13615
o1.cancelable = true;
// 13616
o1.bubbles = true;
// 13617
o1.altKey = false;
// 13618
o1.srcElement = o11;
// 13619
o1.relatedNode = void 0;
// 13620
o1.attrName = void 0;
// 13621
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13634
o11.nodeName = "DIV";
// 13642
o12.nodeName = "DIV";
// 13650
o10.nodeName = "BODY";
// undefined
o10 = null;
// 13661
o1 = {};
// 13662
o1.type = "click";
// 13663
o1.jQuery18309834662606008351 = void 0;
// 13667
o1.defaultPrevented = false;
// 13668
o1.returnValue = true;
// 13669
o1.getPreventDefault = void 0;
// 13670
o1.timeStamp = 1373482819232;
// 13671
o1.toElement = o11;
// 13672
o1.screenY = 407;
// 13673
o1.screenX = 978;
// 13674
o1.pageY = 308;
// 13675
o1.pageX = 966;
// 13676
o1.offsetY = 308;
// 13677
o1.offsetX = 966;
// 13678
o1.fromElement = null;
// 13679
o1.clientY = 308;
// 13680
o1.clientX = 966;
// 13681
o1.buttons = void 0;
// 13682
o1.button = 0;
// 13683
o1.which = 1;
// 13684
o1.view = ow637880758;
// 13686
o1.target = o11;
// 13687
o1.shiftKey = false;
// 13688
o1.relatedTarget = null;
// 13689
o1.metaKey = false;
// 13690
o1.eventPhase = 3;
// 13691
o1.currentTarget = o0;
// 13692
o1.ctrlKey = false;
// 13693
o1.cancelable = true;
// 13694
o1.bubbles = true;
// 13695
o1.altKey = false;
// 13696
o1.srcElement = o11;
// 13697
o1.relatedNode = void 0;
// 13698
o1.attrName = void 0;
// 13699
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13708
o11.ownerDocument = o0;
// 13713
f637880758_529.returns.push(false);
// 13715
o12.ownerDocument = o0;
// 13716
o12.nodeType = 1;
// undefined
o12 = null;
// 13720
f637880758_529.returns.push(false);
// 13727
f637880758_529.returns.push(false);
// 13729
o6.ownerDocument = o0;
// undefined
o6 = null;
// 13734
f637880758_529.returns.push(false);
// 13743
f637880758_529.returns.push(false);
// 13750
f637880758_529.returns.push(false);
// 13757
f637880758_529.returns.push(false);
// 13764
f637880758_529.returns.push(false);
// 13772
f637880758_529.returns.push(false);
// 13779
f637880758_529.returns.push(false);
// 13786
f637880758_529.returns.push(false);
// 13793
f637880758_529.returns.push(false);
// 13802
f637880758_529.returns.push(false);
// 13809
f637880758_529.returns.push(false);
// 13816
f637880758_529.returns.push(false);
// 13823
f637880758_529.returns.push(false);
// 13832
o1 = {};
// 13833
f637880758_562.returns.push(o1);
// 13834
o5 = {};
// 13835
o1["0"] = o5;
// undefined
o5 = null;
// 13836
o1["1"] = o7;
// undefined
o7 = null;
// 13837
o5 = {};
// 13838
o1["2"] = o5;
// undefined
o5 = null;
// 13839
o5 = {};
// 13840
o1["3"] = o5;
// undefined
o5 = null;
// 13841
o5 = {};
// 13842
o1["4"] = o5;
// undefined
o5 = null;
// 13843
o5 = {};
// 13844
o1["5"] = o5;
// undefined
o5 = null;
// 13845
o5 = {};
// 13846
o1["6"] = o5;
// undefined
o5 = null;
// 13847
o5 = {};
// 13848
o1["7"] = o5;
// undefined
o5 = null;
// 13849
o5 = {};
// 13850
o1["8"] = o5;
// undefined
o5 = null;
// 13851
o5 = {};
// 13852
o1["9"] = o5;
// undefined
o5 = null;
// 13853
o5 = {};
// 13854
o1["10"] = o5;
// undefined
o5 = null;
// 13855
o5 = {};
// 13856
o1["11"] = o5;
// undefined
o5 = null;
// 13857
o5 = {};
// 13858
o1["12"] = o5;
// undefined
o5 = null;
// 13859
o5 = {};
// 13860
o1["13"] = o5;
// undefined
o5 = null;
// 13861
o5 = {};
// 13862
o1["14"] = o5;
// undefined
o5 = null;
// 13863
o5 = {};
// 13864
o1["15"] = o5;
// undefined
o5 = null;
// 13865
o5 = {};
// 13866
o1["16"] = o5;
// undefined
o5 = null;
// 13867
o5 = {};
// 13868
o1["17"] = o5;
// undefined
o5 = null;
// 13869
o5 = {};
// 13870
o1["18"] = o5;
// undefined
o5 = null;
// 13871
o5 = {};
// 13872
o1["19"] = o5;
// undefined
o5 = null;
// 13873
o5 = {};
// 13874
o1["20"] = o5;
// undefined
o5 = null;
// 13875
o5 = {};
// 13876
o1["21"] = o5;
// undefined
o5 = null;
// 13877
o5 = {};
// 13878
o1["22"] = o5;
// undefined
o5 = null;
// 13879
o1["23"] = void 0;
// undefined
o1 = null;
// 13884
o3.contains = f637880758_526;
// 13886
f637880758_526.returns.push(false);
// 13888
o3.className = "dropdown js-language-dropdown";
// 13890
// undefined
o3 = null;
// 13891
o1 = {};
// 13892
o1.type = "mouseout";
// 13893
o1.jQuery18309834662606008351 = void 0;
// 13897
o1.defaultPrevented = false;
// 13898
o1.returnValue = true;
// 13899
o1.getPreventDefault = void 0;
// 13900
o1.timeStamp = 1373482820244;
// 13901
o1.toElement = null;
// 13902
o1.screenY = 423;
// 13903
o1.screenX = 978;
// 13904
o1.pageY = 724;
// 13905
o1.pageX = 966;
// 13906
o1.offsetY = 724;
// 13907
o1.offsetX = 966;
// 13908
o1.fromElement = o11;
// 13909
o1.clientY = 324;
// 13910
o1.clientX = 966;
// 13911
o1.buttons = void 0;
// 13912
o1.button = 0;
// 13913
o1.which = 0;
// 13914
o1.view = ow637880758;
// 13916
o1.target = o11;
// 13917
o1.shiftKey = false;
// 13918
o1.relatedTarget = null;
// 13919
o1.metaKey = false;
// 13920
o1.eventPhase = 3;
// 13921
o1.currentTarget = o0;
// 13922
o1.ctrlKey = false;
// 13923
o1.cancelable = true;
// 13924
o1.bubbles = true;
// 13925
o1.altKey = false;
// 13926
o1.srcElement = o11;
// undefined
o11 = null;
// 13927
o1.relatedNode = void 0;
// 13928
o1.attrName = void 0;
// 13929
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo637880758_1_jQuery18309834662606008351.returns.push(1);
// 13946
f637880758_472.returns.push(null);
// 13956
f637880758_472.returns.push("");
// 13971
o1 = {};
// 13972
o1.type = "beforeunload";
// 13973
o1.jQuery18309834662606008351 = void 0;
// 13977
o1.defaultPrevented = false;
// 13978
o1.returnValue = true;
// 13979
o1.getPreventDefault = void 0;
// 13980
o1.timeStamp = 1373482826335;
// 13981
o1.which = void 0;
// 13982
o1.view = void 0;
// 13984
o1.target = o0;
// 13985
o1.shiftKey = void 0;
// 13986
o1.relatedTarget = void 0;
// 13987
o1.metaKey = void 0;
// 13988
o1.eventPhase = 2;
// 13989
o1.currentTarget = ow637880758;
// 13990
o1.ctrlKey = void 0;
// 13991
o1.cancelable = true;
// 13992
o1.bubbles = false;
// 13993
o1.altKey = void 0;
// 13994
o1.srcElement = o0;
// 13995
o1.relatedNode = void 0;
// 13996
o1.attrName = void 0;
// 13997
o1.attrChange = void 0;
// undefined
o1 = null;
// 13999
f637880758_2695 = function() { return f637880758_2695.returns[f637880758_2695.inst++]; };
f637880758_2695.returns = [];
f637880758_2695.inst = 0;
// 14000
o4.replaceState = f637880758_2695;
// undefined
o4 = null;
// 14001
o0.title = "Twitter / Search - #javascript";
// undefined
o0 = null;
// 14002
f637880758_2695.returns.push(undefined);
// 14003
// 0
JSBNG_Replay$ = function(real, cb) { if (!real) return;
// 987
geval("JSBNG__document.documentElement.className = ((((JSBNG__document.documentElement.className + \" \")) + JSBNG__document.documentElement.getAttribute(\"data-fouc-class-names\")));");
// 997
geval("(function() {\n    function f(a) {\n        a = ((a || window.JSBNG__event));\n        if (!a) {\n            return;\n        }\n    ;\n    ;\n        ((((!a.target && a.srcElement)) && (a.target = a.srcElement)));\n        if (!j(a)) {\n            return;\n        }\n    ;\n    ;\n        if (!JSBNG__document.JSBNG__addEventListener) {\n            var b = {\n            };\n            {\n                var fin0keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin0i = (0);\n                var c;\n                for (; (fin0i < fin0keys.length); (fin0i++)) {\n                    ((c) = (fin0keys[fin0i]));\n                    {\n                        b[c] = a[c];\n                    ;\n                    };\n                };\n            };\n        ;\n            a = b;\n        }\n    ;\n    ;\n        a.preventDefault = a.stopPropagation = a.stopImmediatePropagation = function() {\n        \n        };\n        d.push(a);\n        return !1;\n    };\n;\n    function g($) {\n        i();\n        for (var b = 0, c; c = d[b]; b++) {\n            var e = $(c.target);\n            if (((((c.type == \"click\")) && ((c.target.tagName.toLowerCase() == \"a\"))))) {\n                var f = $.data(e.get(0), \"events\"), g = ((f && f.click)), j = ((!c.target.hostname.match(a) || !c.target.href.match(/#$/)));\n                if (((!g && j))) {\n                    window.JSBNG__location = c.target.href;\n                    continue;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            e.trigger(c);\n        };\n    ;\n        window.swiftActionQueue.wasFlushed = !0;\n    };\n;\n    {\n        function i() {\n            ((e && JSBNG__clearTimeout(e)));\n            for (var a = 0; ((a < c.length)); a++) {\n                JSBNG__document[((\"JSBNG__on\" + c[a]))] = null;\n            ;\n            };\n        ;\n        };\n        ((window.top.JSBNG_Replay.s19277ddcd28db6dd01a1d67d562dfbbffa3c6a17_4.push)((i)));\n    };\n;\n    function j(c) {\n        var d = c.target.tagName.toLowerCase();\n        if (((d == \"label\"))) {\n            if (c.target.getAttribute(\"for\")) {\n                var e = JSBNG__document.getElementById(c.target.getAttribute(\"for\"));\n                if (((e.getAttribute(\"type\") == \"checkbox\"))) {\n                    return !1;\n                }\n            ;\n            ;\n            }\n             else for (var f = 0; ((f < c.target.childNodes.length)); f++) {\n                if (((((((c.target.childNodes[f].tagName || \"\")).toLowerCase() == \"input\")) && ((c.target.childNodes[f].getAttribute(\"type\") == \"checkbox\"))))) {\n                    return !1;\n                }\n            ;\n            ;\n            }\n        ;\n        }\n    ;\n    ;\n        if (((((((d == \"textarea\")) || ((((d == \"input\")) && ((c.target.getAttribute(\"type\") == \"text\")))))) || ((c.target.getAttribute(\"contenteditable\") == \"true\"))))) {\n            if (c.type.match(b)) {\n                return !1;\n            }\n        ;\n        }\n    ;\n    ;\n        return ((c.metaKey ? !1 : ((((((c.clientX && c.shiftKey)) && ((d == \"a\")))) ? !1 : ((((((c.target && c.target.hostname)) && !c.target.hostname.match(a))) ? !1 : !0))))));\n    };\n;\n    var a = /^([^\\.]+\\.)*twitter.com$/, b = /^key/, c = [\"click\",\"keydown\",\"keypress\",\"keyup\",], d = [], e = null;\n    for (var k = 0; ((k < c.length)); k++) {\n        JSBNG__document[((\"JSBNG__on\" + c[k]))] = f;\n    ;\n    };\n;\n    JSBNG__setTimeout(i, 10000);\n    window.swiftActionQueue = {\n        flush: g,\n        wasFlushed: !1\n    };\n})();");
// 1003
geval("(function() {\n    function a(a) {\n        a.target.setAttribute(\"data-in-composition\", \"true\");\n    };\n;\n    function b(a) {\n        a.target.removeAttribute(\"data-in-composition\");\n    };\n;\n    if (JSBNG__document.JSBNG__addEventListener) {\n        JSBNG__document.JSBNG__addEventListener(\"compositionstart\", a, !1);\n        JSBNG__document.JSBNG__addEventListener(\"compositionend\", b, !1);\n    }\n;\n;\n})();");
// 1010
geval("try {\n    JSBNG__document.domain = \"twitter.com\";\n    (function() {\n        function a() {\n            JSBNG__document.write = \"\";\n            window.JSBNG__top.JSBNG__location = window.JSBNG__self.JSBNG__location;\n            JSBNG__setTimeout(function() {\n                JSBNG__document.body.innerHTML = \"\";\n            }, 0);\n            window.JSBNG__self.JSBNG__onload = function(a) {\n                JSBNG__document.body.innerHTML = \"\";\n            };\n        };\n    ;\n        if (((window.JSBNG__top !== window.JSBNG__self))) {\n            try {\n                ((window.JSBNG__top.JSBNG__location.host || a()));\n            } catch (b) {\n                a();\n            };\n        }\n    ;\n    ;\n    })();\n    (function(a, b) {\n        function H(a) {\n            var b = G[a] = {\n            };\n            q.each(a.split(t), function(_, a) {\n                b[a] = !0;\n            });\n            return b;\n        };\n    ;\n        function K(a, c, d) {\n            if (((((d === b)) && ((a.nodeType === 1))))) {\n                var e = ((\"data-\" + c.replace(J, \"-$1\").toLowerCase()));\n                d = a.getAttribute(e);\n                if (((typeof d == \"string\"))) {\n                    try {\n                        d = ((((d === \"true\")) ? !0 : ((((d === \"false\")) ? !1 : ((((d === \"null\")) ? null : ((((((+d + \"\")) === d)) ? +d : ((I.test(d) ? q.parseJSON(d) : d))))))))));\n                    } catch (f) {\n                    \n                    };\n                ;\n                    q.data(a, c, d);\n                }\n                 else d = b;\n            ;\n            ;\n            }\n        ;\n        ;\n            return d;\n        };\n    ;\n        function L(a) {\n            var b;\n            {\n                var fin1keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin1i = (0);\n                (0);\n                for (; (fin1i < fin1keys.length); (fin1i++)) {\n                    ((b) = (fin1keys[fin1i]));\n                    {\n                        if (((((b === \"data\")) && q.isEmptyObject(a[b])))) {\n                            continue;\n                        }\n                    ;\n                    ;\n                        if (((b !== \"toJSON\"))) {\n                            return !1;\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n            return !0;\n        };\n    ;\n        function db() {\n            return !1;\n        };\n    ;\n        function eb() {\n            return !0;\n        };\n    ;\n        function kb(a) {\n            return ((((!a || !a.parentNode)) || ((a.parentNode.nodeType === 11))));\n        };\n    ;\n        function lb(a, b) {\n            do a = a[b]; while (((a && ((a.nodeType !== 1)))));\n            return a;\n        };\n    ;\n        function mb(a, b, c) {\n            b = ((b || 0));\n            if (q.isFunction(b)) {\n                return q.grep(a, function(a, d) {\n                    var e = !!b.call(a, d, a);\n                    return ((e === c));\n                });\n            }\n        ;\n        ;\n            if (b.nodeType) {\n                return q.grep(a, function(a, d) {\n                    return ((((a === b)) === c));\n                });\n            }\n        ;\n        ;\n            if (((typeof b == \"string\"))) {\n                var d = q.grep(a, function(a) {\n                    return ((a.nodeType === 1));\n                });\n                if (hb.test(b)) {\n                    return q.filter(b, d, !c);\n                }\n            ;\n            ;\n                b = q.filter(b, d);\n            }\n        ;\n        ;\n            return q.grep(a, function(a, d) {\n                return ((((q.inArray(a, b) >= 0)) === c));\n            });\n        };\n    ;\n        function nb(a) {\n            var b = ob.split(\"|\"), c = a.createDocumentFragment();\n            if (c.createElement) {\n                while (b.length) {\n                    c.createElement(b.pop());\n                ;\n                };\n            }\n        ;\n        ;\n            return c;\n        };\n    ;\n        function Fb(a, b) {\n            return ((a.getElementsByTagName(b)[0] || a.appendChild(a.ownerDocument.createElement(b))));\n        };\n    ;\n        function Gb(a, b) {\n            if (((((b.nodeType !== 1)) || !q.hasData(a)))) {\n                return;\n            }\n        ;\n        ;\n            var c, d, e, f = q._data(a), g = q._data(b, f), i = f.events;\n            if (i) {\n                delete g.handle;\n                g.events = {\n                };\n                {\n                    var fin2keys = ((window.top.JSBNG_Replay.forInKeys)((i))), fin2i = (0);\n                    (0);\n                    for (; (fin2i < fin2keys.length); (fin2i++)) {\n                        ((c) = (fin2keys[fin2i]));\n                        {\n                            for (d = 0, e = i[c].length; ((d < e)); d++) {\n                                q.JSBNG__event.add(b, c, i[c][d]);\n                            ;\n                            };\n                        ;\n                        };\n                    };\n                };\n            ;\n            }\n        ;\n        ;\n            ((g.data && (g.data = q.extend({\n            }, g.data))));\n        };\n    ;\n        function Hb(a, b) {\n            var c;\n            if (((b.nodeType !== 1))) {\n                return;\n            }\n        ;\n        ;\n            ((b.clearAttributes && b.clearAttributes()));\n            ((b.mergeAttributes && b.mergeAttributes(a)));\n            c = b.nodeName.toLowerCase();\n            if (((c === \"object\"))) {\n                ((b.parentNode && (b.outerHTML = a.outerHTML)));\n                ((((((q.support.html5Clone && a.innerHTML)) && !q.trim(b.innerHTML))) && (b.innerHTML = a.innerHTML)));\n            }\n             else if (((((c === \"input\")) && yb.test(a.type)))) {\n                b.defaultChecked = b.checked = a.checked;\n                ((((b.value !== a.value)) && (b.value = a.value)));\n            }\n             else ((((c === \"option\")) ? b.selected = a.defaultSelected : ((((((c === \"input\")) || ((c === \"textarea\")))) ? b.defaultValue = a.defaultValue : ((((((c === \"script\")) && ((b.text !== a.text)))) && (b.text = a.text)))))));\n            \n        ;\n        ;\n            b.removeAttribute(q.expando);\n        };\n    ;\n        function Ib(a) {\n            return ((((typeof a.getElementsByTagName != \"undefined\")) ? a.getElementsByTagName(\"*\") : ((((typeof a.querySelectorAll != \"undefined\")) ? a.querySelectorAll(\"*\") : []))));\n        };\n    ;\n        function Jb(a) {\n            ((yb.test(a.type) && (a.defaultChecked = a.checked)));\n        };\n    ;\n        function _b(a, b) {\n            if (((b in a))) {\n                return b;\n            }\n        ;\n        ;\n            var c = ((b.charAt(0).toUpperCase() + b.slice(1))), d = b, e = Zb.length;\n            while (e--) {\n                b = ((Zb[e] + c));\n                if (((b in a))) {\n                    return b;\n                }\n            ;\n            ;\n            };\n        ;\n            return d;\n        };\n    ;\n        function ac(a, b) {\n            a = ((b || a));\n            return ((((q.css(a, \"display\") === \"none\")) || !q.contains(a.ownerDocument, a)));\n        };\n    ;\n        function bc(a, b) {\n            var c, d, e = [], f = 0, g = a.length;\n            for (; ((f < g)); f++) {\n                c = a[f];\n                if (!c.style) {\n                    continue;\n                }\n            ;\n            ;\n                e[f] = q._data(c, \"olddisplay\");\n                if (b) {\n                    ((((!e[f] && ((c.style.display === \"none\")))) && (c.style.display = \"\")));\n                    ((((((c.style.display === \"\")) && ac(c))) && (e[f] = q._data(c, \"olddisplay\", fc(c.nodeName)))));\n                }\n                 else {\n                    d = Kb(c, \"display\");\n                    ((((!e[f] && ((d !== \"none\")))) && q._data(c, \"olddisplay\", d)));\n                }\n            ;\n            ;\n            };\n        ;\n            for (f = 0; ((f < g)); f++) {\n                c = a[f];\n                if (!c.style) {\n                    continue;\n                }\n            ;\n            ;\n                if (((((!b || ((c.style.display === \"none\")))) || ((c.style.display === \"\"))))) {\n                    c.style.display = ((b ? ((e[f] || \"\")) : \"none\"));\n                }\n            ;\n            ;\n            };\n        ;\n            return a;\n        };\n    ;\n        function cc(a, b, c) {\n            var d = Sb.exec(b);\n            return ((d ? ((Math.max(0, ((d[1] - ((c || 0))))) + ((d[2] || \"px\")))) : b));\n        };\n    ;\n        function dc(a, b, c, d) {\n            var e = ((((c === ((d ? \"border\" : \"JSBNG__content\")))) ? 4 : ((((b === \"width\")) ? 1 : 0)))), f = 0;\n            for (; ((e < 4)); e += 2) {\n                ((((c === \"margin\")) && (f += q.css(a, ((c + Yb[e])), !0))));\n                if (d) {\n                    ((((c === \"JSBNG__content\")) && (f -= ((parseFloat(Kb(a, ((\"padding\" + Yb[e])))) || 0)))));\n                    ((((c !== \"margin\")) && (f -= ((parseFloat(Kb(a, ((((\"border\" + Yb[e])) + \"Width\")))) || 0)))));\n                }\n                 else {\n                    f += ((parseFloat(Kb(a, ((\"padding\" + Yb[e])))) || 0));\n                    ((((c !== \"padding\")) && (f += ((parseFloat(Kb(a, ((((\"border\" + Yb[e])) + \"Width\")))) || 0)))));\n                }\n            ;\n            ;\n            };\n        ;\n            return f;\n        };\n    ;\n        function ec(a, b, c) {\n            var d = ((((b === \"width\")) ? a.offsetWidth : a.offsetHeight)), e = !0, f = ((q.support.boxSizing && ((q.css(a, \"boxSizing\") === \"border-box\"))));\n            if (((((d <= 0)) || ((d == null))))) {\n                d = Kb(a, b);\n                if (((((d < 0)) || ((d == null))))) {\n                    d = a.style[b];\n                }\n            ;\n            ;\n                if (Tb.test(d)) {\n                    return d;\n                }\n            ;\n            ;\n                e = ((f && ((q.support.boxSizingReliable || ((d === a.style[b]))))));\n                d = ((parseFloat(d) || 0));\n            }\n        ;\n        ;\n            return ((((d + dc(a, b, ((c || ((f ? \"border\" : \"JSBNG__content\")))), e))) + \"px\"));\n        };\n    ;\n        function fc(a) {\n            if (Vb[a]) {\n                return Vb[a];\n            }\n        ;\n        ;\n            var b = q(((((\"\\u003C\" + a)) + \"\\u003E\"))).appendTo(e.body), c = b.css(\"display\");\n            b.remove();\n            if (((((c === \"none\")) || ((c === \"\"))))) {\n                Lb = e.body.appendChild(((Lb || q.extend(e.createElement(\"div\"), {\n                    frameBorder: 0,\n                    width: 0,\n                    height: 0\n                }))));\n                if (((!Mb || !Lb.createElement))) {\n                    Mb = ((Lb.contentWindow || Lb.contentDocument)).JSBNG__document;\n                    Mb.write(\"\\u003C!doctype html\\u003E\\u003Chtml\\u003E\\u003Cbody\\u003E\");\n                    Mb.close();\n                }\n            ;\n            ;\n                b = Mb.body.appendChild(Mb.createElement(a));\n                c = Kb(b, \"display\");\n                e.body.removeChild(Lb);\n            }\n        ;\n        ;\n            Vb[a] = c;\n            return c;\n        };\n    ;\n        function lc(a, b, c, d) {\n            var e;\n            if (q.isArray(b)) {\n                q.each(b, function(b, e) {\n                    ((((c || hc.test(a))) ? d(a, e) : lc(((((((a + \"[\")) + ((((typeof e == \"object\")) ? b : \"\")))) + \"]\")), e, c, d)));\n                });\n            }\n             else {\n                if (((!c && ((q.type(b) === \"object\"))))) {\n                    {\n                        var fin3keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin3i = (0);\n                        (0);\n                        for (; (fin3i < fin3keys.length); (fin3i++)) {\n                            ((e) = (fin3keys[fin3i]));\n                            {\n                                lc(((((((a + \"[\")) + e)) + \"]\")), b[e], c, d);\n                            ;\n                            };\n                        };\n                    };\n                }\n                 else {\n                    d(a, b);\n                }\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n        function Cc(a) {\n            return function(b, c) {\n                if (((typeof b != \"string\"))) {\n                    c = b;\n                    b = \"*\";\n                }\n            ;\n            ;\n                var d, e, f, g = b.toLowerCase().split(t), i = 0, j = g.length;\n                if (q.isFunction(c)) {\n                    for (; ((i < j)); i++) {\n                        d = g[i];\n                        f = /^\\+/.test(d);\n                        ((f && (d = ((d.substr(1) || \"*\")))));\n                        e = a[d] = ((a[d] || []));\n                        e[((f ? \"unshift\" : \"push\"))](c);\n                    };\n                }\n            ;\n            ;\n            };\n        };\n    ;\n        function Dc(a, c, d, e, f, g) {\n            f = ((f || c.dataTypes[0]));\n            g = ((g || {\n            }));\n            g[f] = !0;\n            var i, j = a[f], k = 0, l = ((j ? j.length : 0)), m = ((a === yc));\n            for (; ((((k < l)) && ((m || !i)))); k++) {\n                i = j[k](c, d, e);\n                if (((typeof i == \"string\"))) {\n                    if (((!m || g[i]))) i = b;\n                     else {\n                        c.dataTypes.unshift(i);\n                        i = Dc(a, c, d, e, i, g);\n                    }\n                ;\n                }\n            ;\n            ;\n            };\n        ;\n            ((((((m || !i)) && !g[\"*\"])) && (i = Dc(a, c, d, e, \"*\", g))));\n            return i;\n        };\n    ;\n        function Ec(a, c) {\n            var d, e, f = ((q.ajaxSettings.flatOptions || {\n            }));\n            {\n                var fin4keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin4i = (0);\n                (0);\n                for (; (fin4i < fin4keys.length); (fin4i++)) {\n                    ((d) = (fin4keys[fin4i]));\n                    {\n                        ((((c[d] !== b)) && (((f[d] ? a : ((e || (e = {\n                        })))))[d] = c[d])));\n                    ;\n                    };\n                };\n            };\n        ;\n            ((e && q.extend(!0, a, e)));\n        };\n    ;\n        function Fc(a, c, d) {\n            var e, f, g, i, j = a.contents, k = a.dataTypes, l = a.responseFields;\n            {\n                var fin5keys = ((window.top.JSBNG_Replay.forInKeys)((l))), fin5i = (0);\n                (0);\n                for (; (fin5i < fin5keys.length); (fin5i++)) {\n                    ((f) = (fin5keys[fin5i]));\n                    {\n                        ((((f in d)) && (c[l[f]] = d[f])));\n                    ;\n                    };\n                };\n            };\n        ;\n            while (((k[0] === \"*\"))) {\n                k.shift();\n                ((((e === b)) && (e = ((a.mimeType || c.getResponseHeader(\"content-type\"))))));\n            };\n        ;\n            if (e) {\n                {\n                    var fin6keys = ((window.top.JSBNG_Replay.forInKeys)((j))), fin6i = (0);\n                    (0);\n                    for (; (fin6i < fin6keys.length); (fin6i++)) {\n                        ((f) = (fin6keys[fin6i]));\n                        {\n                            if (((j[f] && j[f].test(e)))) {\n                                k.unshift(f);\n                                break;\n                            }\n                        ;\n                        ;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            if (((k[0] in d))) g = k[0];\n             else {\n                {\n                    var fin7keys = ((window.top.JSBNG_Replay.forInKeys)((d))), fin7i = (0);\n                    (0);\n                    for (; (fin7i < fin7keys.length); (fin7i++)) {\n                        ((f) = (fin7keys[fin7i]));\n                        {\n                            if (((!k[0] || a.converters[((((f + \" \")) + k[0]))]))) {\n                                g = f;\n                                break;\n                            }\n                        ;\n                        ;\n                            ((i || (i = f)));\n                        };\n                    };\n                };\n            ;\n                g = ((g || i));\n            }\n        ;\n        ;\n            if (g) {\n                ((((g !== k[0])) && k.unshift(g)));\n                return d[g];\n            }\n        ;\n        ;\n        };\n    ;\n        function Gc(a, b) {\n            var c, d, e, f, g = a.dataTypes.slice(), i = g[0], j = {\n            }, k = 0;\n            ((a.dataFilter && (b = a.dataFilter(b, a.dataType))));\n            if (g[1]) {\n                {\n                    var fin8keys = ((window.top.JSBNG_Replay.forInKeys)((a.converters))), fin8i = (0);\n                    (0);\n                    for (; (fin8i < fin8keys.length); (fin8i++)) {\n                        ((c) = (fin8keys[fin8i]));\n                        {\n                            j[c.toLowerCase()] = a.converters[c];\n                        ;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            for (; e = g[++k]; ) {\n                if (((e !== \"*\"))) {\n                    if (((((i !== \"*\")) && ((i !== e))))) {\n                        c = ((j[((((i + \" \")) + e))] || j[((\"* \" + e))]));\n                        if (!c) {\n                            {\n                                var fin9keys = ((window.top.JSBNG_Replay.forInKeys)((j))), fin9i = (0);\n                                (0);\n                                for (; (fin9i < fin9keys.length); (fin9i++)) {\n                                    ((d) = (fin9keys[fin9i]));\n                                    {\n                                        f = d.split(\" \");\n                                        if (((f[1] === e))) {\n                                            c = ((j[((((i + \" \")) + f[0]))] || j[((\"* \" + f[0]))]));\n                                            if (c) {\n                                                if (((c === !0))) {\n                                                    c = j[d];\n                                                }\n                                                 else {\n                                                    if (((j[d] !== !0))) {\n                                                        e = f[0];\n                                                        g.splice(k--, 0, e);\n                                                    }\n                                                ;\n                                                }\n                                            ;\n                                            ;\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        }\n                    ;\n                    ;\n                        if (((c !== !0))) {\n                            if (((c && a[\"throws\"]))) {\n                                b = c(b);\n                            }\n                             else {\n                                try {\n                                    b = c(b);\n                                } catch (l) {\n                                    return {\n                                        state: \"parsererror\",\n                                        error: ((c ? l : ((((((\"No conversion from \" + i)) + \" to \")) + e))))\n                                    };\n                                };\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    i = e;\n                }\n            ;\n            ;\n            };\n        ;\n            return {\n                state: \"success\",\n                data: b\n            };\n        };\n    ;\n        function Oc() {\n            try {\n                return new a.JSBNG__XMLHttpRequest;\n            } catch (b) {\n            \n            };\n        ;\n        };\n    ;\n        function Pc() {\n            try {\n                return new a.ActiveXObject(\"Microsoft.XMLHTTP\");\n            } catch (b) {\n            \n            };\n        ;\n        };\n    ;\n        function Xc() {\n            JSBNG__setTimeout(function() {\n                Qc = b;\n            }, 0);\n            return Qc = q.now();\n        };\n    ;\n        function Yc(a, b) {\n            q.each(b, function(b, c) {\n                var d = ((Wc[b] || [])).concat(Wc[\"*\"]), e = 0, f = d.length;\n                for (; ((e < f)); e++) {\n                    if (d[e].call(a, b, c)) {\n                        return;\n                    }\n                ;\n                ;\n                };\n            ;\n            });\n        };\n    ;\n        function Zc(a, b, c) {\n            var d, e = 0, f = 0, g = Vc.length, i = q.Deferred().always(function() {\n                delete j.elem;\n            }), j = function() {\n                var b = ((Qc || Xc())), c = Math.max(0, ((((k.startTime + k.duration)) - b))), d = ((((c / k.duration)) || 0)), e = ((1 - d)), f = 0, g = k.tweens.length;\n                for (; ((f < g)); f++) {\n                    k.tweens[f].run(e);\n                ;\n                };\n            ;\n                i.notifyWith(a, [k,e,c,]);\n                if (((((e < 1)) && g))) {\n                    return c;\n                }\n            ;\n            ;\n                i.resolveWith(a, [k,]);\n                return !1;\n            }, k = i.promise({\n                elem: a,\n                props: q.extend({\n                }, b),\n                opts: q.extend(!0, {\n                    specialEasing: {\n                    }\n                }, c),\n                originalProperties: b,\n                originalOptions: c,\n                startTime: ((Qc || Xc())),\n                duration: c.duration,\n                tweens: [],\n                createTween: function(b, c, d) {\n                    var e = q.Tween(a, k.opts, b, c, ((k.opts.specialEasing[b] || k.opts.easing)));\n                    k.tweens.push(e);\n                    return e;\n                },\n                JSBNG__stop: function(b) {\n                    var c = 0, d = ((b ? k.tweens.length : 0));\n                    for (; ((c < d)); c++) {\n                        k.tweens[c].run(1);\n                    ;\n                    };\n                ;\n                    ((b ? i.resolveWith(a, [k,b,]) : i.rejectWith(a, [k,b,])));\n                    return this;\n                }\n            }), l = k.props;\n            $c(l, k.opts.specialEasing);\n            for (; ((e < g)); e++) {\n                d = Vc[e].call(k, a, l, k.opts);\n                if (d) {\n                    return d;\n                }\n            ;\n            ;\n            };\n        ;\n            Yc(k, l);\n            ((q.isFunction(k.opts.start) && k.opts.start.call(a, k)));\n            q.fx.timer(q.extend(j, {\n                anim: k,\n                queue: k.opts.queue,\n                elem: a\n            }));\n            return k.progress(k.opts.progress).done(k.opts.done, k.opts.complete).fail(k.opts.fail).always(k.opts.always);\n        };\n    ;\n        function $c(a, b) {\n            var c, d, e, f, g;\n            {\n                var fin10keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin10i = (0);\n                (0);\n                for (; (fin10i < fin10keys.length); (fin10i++)) {\n                    ((c) = (fin10keys[fin10i]));\n                    {\n                        d = q.camelCase(c);\n                        e = b[d];\n                        f = a[c];\n                        if (q.isArray(f)) {\n                            e = f[1];\n                            f = a[c] = f[0];\n                        }\n                    ;\n                    ;\n                        if (((c !== d))) {\n                            a[d] = f;\n                            delete a[c];\n                        }\n                    ;\n                    ;\n                        g = q.cssHooks[d];\n                        if (((g && ((\"expand\" in g))))) {\n                            f = g.expand(f);\n                            delete a[d];\n                            {\n                                var fin11keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin11i = (0);\n                                (0);\n                                for (; (fin11i < fin11keys.length); (fin11i++)) {\n                                    ((c) = (fin11keys[fin11i]));\n                                    {\n                                        if (!((c in a))) {\n                                            a[c] = f[c];\n                                            b[c] = e;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else b[d] = e;\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n        };\n    ;\n        function _c(a, b, c) {\n            var d, e, f, g, i, j, k, l, m, n = this, o = a.style, p = {\n            }, r = [], s = ((a.nodeType && ac(a)));\n            if (!c.queue) {\n                l = q._queueHooks(a, \"fx\");\n                if (((l.unqueued == null))) {\n                    l.unqueued = 0;\n                    m = l.empty.fire;\n                    l.empty.fire = function() {\n                        ((l.unqueued || m()));\n                    };\n                }\n            ;\n            ;\n                l.unqueued++;\n                n.always(function() {\n                    n.always(function() {\n                        l.unqueued--;\n                        ((q.queue(a, \"fx\").length || l.empty.fire()));\n                    });\n                });\n            }\n        ;\n        ;\n            if (((((a.nodeType === 1)) && ((((\"height\" in b)) || ((\"width\" in b))))))) {\n                c.overflow = [o.overflow,o.overflowX,o.overflowY,];\n                ((((((q.css(a, \"display\") === \"inline\")) && ((q.css(a, \"float\") === \"none\")))) && ((((!q.support.inlineBlockNeedsLayout || ((fc(a.nodeName) === \"inline\")))) ? o.display = \"inline-block\" : o.zoom = 1))));\n            }\n        ;\n        ;\n            if (c.overflow) {\n                o.overflow = \"hidden\";\n                ((q.support.shrinkWrapBlocks || n.done(function() {\n                    o.overflow = c.overflow[0];\n                    o.overflowX = c.overflow[1];\n                    o.overflowY = c.overflow[2];\n                })));\n            }\n        ;\n        ;\n            {\n                var fin12keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin12i = (0);\n                (0);\n                for (; (fin12i < fin12keys.length); (fin12i++)) {\n                    ((d) = (fin12keys[fin12i]));\n                    {\n                        f = b[d];\n                        if (Sc.exec(f)) {\n                            delete b[d];\n                            j = ((j || ((f === \"toggle\"))));\n                            if (((f === ((s ? \"hide\" : \"show\"))))) {\n                                continue;\n                            }\n                        ;\n                        ;\n                            r.push(d);\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n            g = r.length;\n            if (g) {\n                i = ((q._data(a, \"fxshow\") || q._data(a, \"fxshow\", {\n                })));\n                ((((\"hidden\" in i)) && (s = i.hidden)));\n                ((j && (i.hidden = !s)));\n                ((s ? q(a).show() : n.done(function() {\n                    q(a).hide();\n                })));\n                n.done(function() {\n                    var b;\n                    q.removeData(a, \"fxshow\", !0);\n                    {\n                        var fin13keys = ((window.top.JSBNG_Replay.forInKeys)((p))), fin13i = (0);\n                        (0);\n                        for (; (fin13i < fin13keys.length); (fin13i++)) {\n                            ((b) = (fin13keys[fin13i]));\n                            {\n                                q.style(a, b, p[b]);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                });\n                for (d = 0; ((d < g)); d++) {\n                    e = r[d];\n                    k = n.createTween(e, ((s ? i[e] : 0)));\n                    p[e] = ((i[e] || q.style(a, e)));\n                    if (!((e in i))) {\n                        i[e] = k.start;\n                        if (s) {\n                            k.end = k.start;\n                            k.start = ((((((e === \"width\")) || ((e === \"height\")))) ? 1 : 0));\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                };\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n        function ad(a, b, c, d, e) {\n            return new ad.prototype.init(a, b, c, d, e);\n        };\n    ;\n        function bd(a, b) {\n            var c, d = {\n                height: a\n            }, e = 0;\n            b = ((b ? 1 : 0));\n            for (; ((e < 4)); e += ((2 - b))) {\n                c = Yb[e];\n                d[((\"margin\" + c))] = d[((\"padding\" + c))] = a;\n            };\n        ;\n            ((b && (d.opacity = d.width = a)));\n            return d;\n        };\n    ;\n        function dd(a) {\n            return ((q.isWindow(a) ? a : ((((a.nodeType === 9)) ? ((a.defaultView || a.parentWindow)) : !1))));\n        };\n    ;\n        var c, d, e = a.JSBNG__document, f = a.JSBNG__location, g = a.JSBNG__navigator, i = a.jQuery, j = a.$, k = Array.prototype.push, l = Array.prototype.slice, m = Array.prototype.indexOf, n = Object.prototype.toString, o = Object.prototype.hasOwnProperty, p = String.prototype.trim, q = function(a, b) {\n            return new q.fn.init(a, b, c);\n        }, r = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source, s = /\\S/, t = /\\s+/, u = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, v = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/, w = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/, x = /^[\\],:{}\\s]*$/, y = /(?:^|:|,)(?:\\s*\\[)+/g, z = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g, A = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/g, B = /^-ms-/, C = /-([\\da-z])/gi, D = function(a, b) {\n            return ((b + \"\")).toUpperCase();\n        }, E = function() {\n            if (e.JSBNG__addEventListener) {\n                e.JSBNG__removeEventListener(\"DOMContentLoaded\", E, !1);\n                q.ready();\n            }\n             else if (((e.readyState === \"complete\"))) {\n                e.JSBNG__detachEvent(\"onreadystatechange\", E);\n                q.ready();\n            }\n            \n        ;\n        ;\n        }, F = {\n        };\n        q.fn = q.prototype = {\n            constructor: q,\n            init: function(a, c, d) {\n                var f, g, i, j;\n                if (!a) {\n                    return this;\n                }\n            ;\n            ;\n                if (a.nodeType) {\n                    this.context = this[0] = a;\n                    this.length = 1;\n                    return this;\n                }\n            ;\n            ;\n                if (((typeof a == \"string\"))) {\n                    ((((((((a.charAt(0) === \"\\u003C\")) && ((a.charAt(((a.length - 1))) === \"\\u003E\")))) && ((a.length >= 3)))) ? f = [null,a,null,] : f = v.exec(a)));\n                    if (((f && ((f[1] || !c))))) {\n                        if (f[1]) {\n                            c = ((((c instanceof q)) ? c[0] : c));\n                            j = ((((c && c.nodeType)) ? ((c.ownerDocument || c)) : e));\n                            a = q.parseHTML(f[1], j, !0);\n                            ((((w.test(f[1]) && q.isPlainObject(c))) && this.attr.call(a, c, !0)));\n                            return q.merge(this, a);\n                        }\n                    ;\n                    ;\n                        g = e.getElementById(f[2]);\n                        if (((g && g.parentNode))) {\n                            if (((g.id !== f[2]))) {\n                                return d.JSBNG__find(a);\n                            }\n                        ;\n                        ;\n                            this.length = 1;\n                            this[0] = g;\n                        }\n                    ;\n                    ;\n                        this.context = e;\n                        this.selector = a;\n                        return this;\n                    }\n                ;\n                ;\n                    return ((((!c || c.jquery)) ? ((c || d)).JSBNG__find(a) : this.constructor(c).JSBNG__find(a)));\n                }\n            ;\n            ;\n                if (q.isFunction(a)) {\n                    return d.ready(a);\n                }\n            ;\n            ;\n                if (((a.selector !== b))) {\n                    this.selector = a.selector;\n                    this.context = a.context;\n                }\n            ;\n            ;\n                return q.makeArray(a, this);\n            },\n            selector: \"\",\n            jquery: \"1.8.3\",\n            length: 0,\n            size: function() {\n                return this.length;\n            },\n            toArray: function() {\n                return l.call(this);\n            },\n            get: function(a) {\n                return ((((a == null)) ? this.toArray() : ((((a < 0)) ? this[((this.length + a))] : this[a]))));\n            },\n            pushStack: function(a, b, c) {\n                var d = q.merge(this.constructor(), a);\n                d.prevObject = this;\n                d.context = this.context;\n                ((((b === \"JSBNG__find\")) ? d.selector = ((((this.selector + ((this.selector ? \" \" : \"\")))) + c)) : ((b && (d.selector = ((((((((((this.selector + \".\")) + b)) + \"(\")) + c)) + \")\")))))));\n                return d;\n            },\n            each: function(a, b) {\n                return q.each(this, a, b);\n            },\n            ready: function(a) {\n                q.ready.promise().done(a);\n                return this;\n            },\n            eq: function(a) {\n                a = +a;\n                return ((((a === -1)) ? this.slice(a) : this.slice(a, ((a + 1)))));\n            },\n            first: function() {\n                return this.eq(0);\n            },\n            last: function() {\n                return this.eq(-1);\n            },\n            slice: function() {\n                return this.pushStack(l.apply(this, arguments), \"slice\", l.call(arguments).join(\",\"));\n            },\n            map: function(a) {\n                return this.pushStack(q.map(this, function(b, c) {\n                    return a.call(b, c, b);\n                }));\n            },\n            end: function() {\n                return ((this.prevObject || this.constructor(null)));\n            },\n            push: k,\n            sort: [].sort,\n            splice: [].splice\n        };\n        q.fn.init.prototype = q.fn;\n        q.extend = q.fn.extend = function() {\n            var a, c, d, e, f, g, i = ((arguments[0] || {\n            })), j = 1, k = arguments.length, l = !1;\n            if (((typeof i == \"boolean\"))) {\n                l = i;\n                i = ((arguments[1] || {\n                }));\n                j = 2;\n            }\n        ;\n        ;\n            ((((((typeof i != \"object\")) && !q.isFunction(i))) && (i = {\n            })));\n            if (((k === j))) {\n                i = this;\n                --j;\n            }\n        ;\n        ;\n            for (; ((j < k)); j++) {\n                if ((((a = arguments[j]) != null))) {\n                    {\n                        var fin14keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin14i = (0);\n                        (0);\n                        for (; (fin14i < fin14keys.length); (fin14i++)) {\n                            ((c) = (fin14keys[fin14i]));\n                            {\n                                d = i[c];\n                                e = a[c];\n                                if (((i === e))) {\n                                    continue;\n                                }\n                            ;\n                            ;\n                                if (((((l && e)) && ((q.isPlainObject(e) || (f = q.isArray(e))))))) {\n                                    if (f) {\n                                        f = !1;\n                                        g = ((((d && q.isArray(d))) ? d : []));\n                                    }\n                                     else g = ((((d && q.isPlainObject(d))) ? d : {\n                                    }));\n                                ;\n                                ;\n                                    i[c] = q.extend(l, g, e);\n                                }\n                                 else ((((e !== b)) && (i[c] = e)));\n                            ;\n                            ;\n                            };\n                        };\n                    };\n                }\n            ;\n            ;\n            };\n        ;\n            return i;\n        };\n        q.extend({\n            noConflict: function(b) {\n                ((((a.$ === q)) && (a.$ = j)));\n                ((((b && ((a.jQuery === q)))) && (a.jQuery = i)));\n                return q;\n            },\n            isReady: !1,\n            readyWait: 1,\n            holdReady: function(a) {\n                ((a ? q.readyWait++ : q.ready(!0)));\n            },\n            ready: function(a) {\n                if (((((a === !0)) ? --q.readyWait : q.isReady))) {\n                    return;\n                }\n            ;\n            ;\n                if (!e.body) {\n                    return JSBNG__setTimeout(q.ready, 1);\n                }\n            ;\n            ;\n                q.isReady = !0;\n                if (((((a !== !0)) && ((--q.readyWait > 0))))) {\n                    return;\n                }\n            ;\n            ;\n                d.resolveWith(e, [q,]);\n                ((q.fn.trigger && q(e).trigger(\"ready\").off(\"ready\")));\n            },\n            isFunction: function(a) {\n                return ((q.type(a) === \"function\"));\n            },\n            isArray: ((Array.isArray || function(a) {\n                return ((q.type(a) === \"array\"));\n            })),\n            isWindow: function(a) {\n                return ((((a != null)) && ((a == a.window))));\n            },\n            isNumeric: function(a) {\n                return ((!isNaN(parseFloat(a)) && isFinite(a)));\n            },\n            type: function(a) {\n                return ((((a == null)) ? String(a) : ((F[n.call(a)] || \"object\"))));\n            },\n            isPlainObject: function(a) {\n                if (((((((!a || ((q.type(a) !== \"object\")))) || a.nodeType)) || q.isWindow(a)))) {\n                    return !1;\n                }\n            ;\n            ;\n                try {\n                    if (((((a.constructor && !o.call(a, \"constructor\"))) && !o.call(a.constructor.prototype, \"isPrototypeOf\")))) {\n                        return !1;\n                    }\n                ;\n                ;\n                } catch (c) {\n                    return !1;\n                };\n            ;\n                var d;\n                {\n                    var fin15keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin15i = (0);\n                    (0);\n                    for (; (fin15i < fin15keys.length); (fin15i++)) {\n                        ((d) = (fin15keys[fin15i]));\n                        {\n                        ;\n                        };\n                    };\n                };\n            ;\n                return ((((d === b)) || o.call(a, d)));\n            },\n            isEmptyObject: function(a) {\n                var b;\n                {\n                    var fin16keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin16i = (0);\n                    (0);\n                    for (; (fin16i < fin16keys.length); (fin16i++)) {\n                        ((b) = (fin16keys[fin16i]));\n                        {\n                            return !1;\n                        };\n                    };\n                };\n            ;\n                return !0;\n            },\n            error: function(a) {\n                throw new Error(a);\n            },\n            parseHTML: function(a, b, c) {\n                var d;\n                if (((!a || ((typeof a != \"string\"))))) {\n                    return null;\n                }\n            ;\n            ;\n                if (((typeof b == \"boolean\"))) {\n                    c = b;\n                    b = 0;\n                }\n            ;\n            ;\n                b = ((b || e));\n                if (d = w.exec(a)) {\n                    return [b.createElement(d[1]),];\n                }\n            ;\n            ;\n                d = q.buildFragment([a,], b, ((c ? null : [])));\n                return q.merge([], ((d.cacheable ? q.clone(d.fragment) : d.fragment)).childNodes);\n            },\n            parseJSON: function(b) {\n                if (((!b || ((typeof b != \"string\"))))) {\n                    return null;\n                }\n            ;\n            ;\n                b = q.trim(b);\n                if (((a.JSON && a.JSON.parse))) {\n                    return a.JSON.parse(b);\n                }\n            ;\n            ;\n                if (x.test(b.replace(z, \"@\").replace(A, \"]\").replace(y, \"\"))) {\n                    return (new Function(((\"return \" + b))))();\n                }\n            ;\n            ;\n                q.error(((\"Invalid JSON: \" + b)));\n            },\n            parseXML: function(c) {\n                var d, e;\n                if (((!c || ((typeof c != \"string\"))))) {\n                    return null;\n                }\n            ;\n            ;\n                try {\n                    if (a.JSBNG__DOMParser) {\n                        e = new JSBNG__DOMParser;\n                        d = e.parseFromString(c, \"text/xml\");\n                    }\n                     else {\n                        d = new ActiveXObject(\"Microsoft.XMLDOM\");\n                        d.async = \"false\";\n                        d.loadXML(c);\n                    }\n                ;\n                ;\n                } catch (f) {\n                    d = b;\n                };\n            ;\n                ((((((!d || !d.documentElement)) || d.getElementsByTagName(\"parsererror\").length)) && q.error(((\"Invalid XML: \" + c)))));\n                return d;\n            },\n            noop: function() {\n            \n            },\n            globalEval: function(b) {\n                ((((b && s.test(b))) && ((a.execScript || function(b) {\n                    a.eval.call(a, b);\n                }))(b)));\n            },\n            camelCase: function(a) {\n                return a.replace(B, \"ms-\").replace(C, D);\n            },\n            nodeName: function(a, b) {\n                return ((a.nodeName && ((a.nodeName.toLowerCase() === b.toLowerCase()))));\n            },\n            each: function(a, c, d) {\n                var e, f = 0, g = a.length, i = ((((g === b)) || q.isFunction(a)));\n                if (d) {\n                    if (i) {\n                        {\n                            var fin17keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin17i = (0);\n                            (0);\n                            for (; (fin17i < fin17keys.length); (fin17i++)) {\n                                ((e) = (fin17keys[fin17i]));\n                                {\n                                    if (((c.apply(a[e], d) === !1))) {\n                                        break;\n                                    }\n                                ;\n                                ;\n                                };\n                            };\n                        };\n                    ;\n                    }\n                     else for (; ((f < g)); ) {\n                        if (((c.apply(a[f++], d) === !1))) {\n                            break;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                }\n                 else if (i) {\n                    {\n                        var fin18keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin18i = (0);\n                        (0);\n                        for (; (fin18i < fin18keys.length); (fin18i++)) {\n                            ((e) = (fin18keys[fin18i]));\n                            {\n                                if (((c.call(a[e], e, a[e]) === !1))) {\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        };\n                    };\n                ;\n                }\n                 else for (; ((f < g)); ) {\n                    if (((c.call(a[f], f, a[f++]) === !1))) {\n                        break;\n                    }\n                ;\n                ;\n                }\n                \n            ;\n            ;\n                return a;\n            },\n            trim: ((((p && !p.call(\"\\ufeff\\u00a0\"))) ? function(a) {\n                return ((((a == null)) ? \"\" : p.call(a)));\n            } : function(a) {\n                return ((((a == null)) ? \"\" : ((a + \"\")).replace(u, \"\")));\n            })),\n            makeArray: function(a, b) {\n                var c, d = ((b || []));\n                if (((a != null))) {\n                    c = q.type(a);\n                    ((((((((((((a.length == null)) || ((c === \"string\")))) || ((c === \"function\")))) || ((c === \"regexp\")))) || q.isWindow(a))) ? k.call(d, a) : q.merge(d, a)));\n                }\n            ;\n            ;\n                return d;\n            },\n            inArray: function(a, b, c) {\n                var d;\n                if (b) {\n                    if (m) {\n                        return m.call(b, a, c);\n                    }\n                ;\n                ;\n                    d = b.length;\n                    c = ((c ? ((((c < 0)) ? Math.max(0, ((d + c))) : c)) : 0));\n                    for (; ((c < d)); c++) {\n                        if (((((c in b)) && ((b[c] === a))))) {\n                            return c;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                return -1;\n            },\n            merge: function(a, c) {\n                var d = c.length, e = a.length, f = 0;\n                if (((typeof d == \"number\"))) {\n                    for (; ((f < d)); f++) {\n                        a[e++] = c[f];\n                    ;\n                    };\n                }\n                 else {\n                    while (((c[f] !== b))) {\n                        a[e++] = c[f++];\n                    ;\n                    };\n                }\n            ;\n            ;\n                a.length = e;\n                return a;\n            },\n            grep: function(a, b, c) {\n                var d, e = [], f = 0, g = a.length;\n                c = !!c;\n                for (; ((f < g)); f++) {\n                    d = !!b(a[f], f);\n                    ((((c !== d)) && e.push(a[f])));\n                };\n            ;\n                return e;\n            },\n            map: function(a, c, d) {\n                var e, f, g = [], i = 0, j = a.length, k = ((((a instanceof q)) || ((((((j !== b)) && ((typeof j == \"number\")))) && ((((((((((j > 0)) && a[0])) && a[((j - 1))])) || ((j === 0)))) || q.isArray(a)))))));\n                if (k) {\n                    for (; ((i < j)); i++) {\n                        e = c(a[i], i, d);\n                        ((((e != null)) && (g[g.length] = e)));\n                    };\n                }\n                 else {\n                    {\n                        var fin19keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin19i = (0);\n                        (0);\n                        for (; (fin19i < fin19keys.length); (fin19i++)) {\n                            ((f) = (fin19keys[fin19i]));\n                            {\n                                e = c(a[f], f, d);\n                                ((((e != null)) && (g[g.length] = e)));\n                            };\n                        };\n                    };\n                }\n            ;\n            ;\n                return g.concat.apply([], g);\n            },\n            guid: 1,\n            proxy: function(a, c) {\n                var d, e, f;\n                if (((typeof c == \"string\"))) {\n                    d = a[c];\n                    c = a;\n                    a = d;\n                }\n            ;\n            ;\n                if (!q.isFunction(a)) {\n                    return b;\n                }\n            ;\n            ;\n                e = l.call(arguments, 2);\n                f = function() {\n                    return a.apply(c, e.concat(l.call(arguments)));\n                };\n                f.guid = a.guid = ((a.guid || q.guid++));\n                return f;\n            },\n            access: function(a, c, d, e, f, g, i) {\n                var j, k = ((d == null)), l = 0, m = a.length;\n                if (((d && ((typeof d == \"object\"))))) {\n                    {\n                        var fin20keys = ((window.top.JSBNG_Replay.forInKeys)((d))), fin20i = (0);\n                        (0);\n                        for (; (fin20i < fin20keys.length); (fin20i++)) {\n                            ((l) = (fin20keys[fin20i]));\n                            {\n                                q.access(a, c, l, d[l], 1, g, e);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    f = 1;\n                }\n                 else if (((e !== b))) {\n                    j = ((((i === b)) && q.isFunction(e)));\n                    if (k) {\n                        if (j) {\n                            j = c;\n                            c = function(a, b, c) {\n                                return j.call(q(a), c);\n                            };\n                        }\n                         else {\n                            c.call(a, e);\n                            c = null;\n                        }\n                    ;\n                    }\n                ;\n                ;\n                    if (c) {\n                        for (; ((l < m)); l++) {\n                            c(a[l], d, ((j ? e.call(a[l], l, c(a[l], d)) : e)), i);\n                        ;\n                        };\n                    }\n                ;\n                ;\n                    f = 1;\n                }\n                \n            ;\n            ;\n                return ((f ? a : ((k ? c.call(a) : ((m ? c(a[0], d) : g))))));\n            },\n            now: function() {\n                return (new JSBNG__Date).getTime();\n            }\n        });\n        q.ready.promise = function(b) {\n            if (!d) {\n                d = q.Deferred();\n                if (((e.readyState === \"complete\"))) {\n                    JSBNG__setTimeout(q.ready, 1);\n                }\n                 else {\n                    if (e.JSBNG__addEventListener) {\n                        e.JSBNG__addEventListener(\"DOMContentLoaded\", E, !1);\n                        a.JSBNG__addEventListener(\"load\", q.ready, !1);\n                    }\n                     else {\n                        e.JSBNG__attachEvent(\"onreadystatechange\", E);\n                        a.JSBNG__attachEvent(\"JSBNG__onload\", q.ready);\n                        var c = !1;\n                        try {\n                            c = ((((a.JSBNG__frameElement == null)) && e.documentElement));\n                        } catch (f) {\n                        \n                        };\n                    ;\n                        ((((c && c.doScroll)) && function g() {\n                            if (!q.isReady) {\n                                try {\n                                    c.doScroll(\"left\");\n                                } catch (a) {\n                                    return JSBNG__setTimeout(g, 50);\n                                };\n                            ;\n                                q.ready();\n                            }\n                        ;\n                        ;\n                        }()));\n                    }\n                ;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            return d.promise(b);\n        };\n        q.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(a, b) {\n            F[((((\"[object \" + b)) + \"]\"))] = b.toLowerCase();\n        });\n        c = q(e);\n        var G = {\n        };\n        q.Callbacks = function(a) {\n            a = ((((typeof a == \"string\")) ? ((G[a] || H(a))) : q.extend({\n            }, a)));\n            var c, d, e, f, g, i, j = [], k = ((!a.once && [])), l = function(b) {\n                c = ((a.memory && b));\n                d = !0;\n                i = ((f || 0));\n                f = 0;\n                g = j.length;\n                e = !0;\n                for (; ((j && ((i < g)))); i++) {\n                    if (((((j[i].apply(b[0], b[1]) === !1)) && a.stopOnFalse))) {\n                        c = !1;\n                        break;\n                    }\n                ;\n                ;\n                };\n            ;\n                e = !1;\n                ((j && ((k ? ((k.length && l(k.shift()))) : ((c ? j = [] : m.disable()))))));\n            }, m = {\n                add: function() {\n                    if (j) {\n                        var b = j.length;\n                        (function d(b) {\n                            q.each(b, function(_, b) {\n                                var c = q.type(b);\n                                ((((c === \"function\")) ? ((((!a.unique || !m.has(b))) && j.push(b))) : ((((((b && b.length)) && ((c !== \"string\")))) && d(b)))));\n                            });\n                        })(arguments);\n                        if (e) {\n                            g = j.length;\n                        }\n                         else {\n                            if (c) {\n                                f = b;\n                                l(c);\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this;\n                },\n                remove: function() {\n                    ((j && q.each(arguments, function(_, a) {\n                        var b;\n                        while ((((b = q.inArray(a, j, b)) > -1))) {\n                            j.splice(b, 1);\n                            if (e) {\n                                ((((b <= g)) && g--));\n                                ((((b <= i)) && i--));\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    })));\n                    return this;\n                },\n                has: function(a) {\n                    return ((q.inArray(a, j) > -1));\n                },\n                empty: function() {\n                    j = [];\n                    return this;\n                },\n                disable: function() {\n                    j = k = c = b;\n                    return this;\n                },\n                disabled: function() {\n                    return !j;\n                },\n                lock: function() {\n                    k = b;\n                    ((c || m.disable()));\n                    return this;\n                },\n                locked: function() {\n                    return !k;\n                },\n                fireWith: function(a, b) {\n                    b = ((b || []));\n                    b = [a,((b.slice ? b.slice() : b)),];\n                    ((((j && ((!d || k)))) && ((e ? k.push(b) : l(b)))));\n                    return this;\n                },\n                fire: function() {\n                    m.fireWith(this, arguments);\n                    return this;\n                },\n                fired: function() {\n                    return !!d;\n                }\n            };\n            return m;\n        };\n        q.extend({\n            Deferred: function(a) {\n                var b = [[\"resolve\",\"done\",q.Callbacks(\"once memory\"),\"resolved\",],[\"reject\",\"fail\",q.Callbacks(\"once memory\"),\"rejected\",],[\"notify\",\"progress\",q.Callbacks(\"memory\"),],], c = \"pending\", d = {\n                    state: function() {\n                        return c;\n                    },\n                    always: function() {\n                        e.done(arguments).fail(arguments);\n                        return this;\n                    },\n                    then: function() {\n                        var a = arguments;\n                        return q.Deferred(function(c) {\n                            q.each(b, function(b, d) {\n                                var f = d[0], g = a[b];\n                                e[d[1]](((q.isFunction(g) ? function() {\n                                    var a = g.apply(this, arguments);\n                                    ((((a && q.isFunction(a.promise))) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[((f + \"With\"))](((((this === e)) ? c : this)), [a,])));\n                                } : c[f])));\n                            });\n                            a = null;\n                        }).promise();\n                    },\n                    promise: function(a) {\n                        return ((((a != null)) ? q.extend(a, d) : d));\n                    }\n                }, e = {\n                };\n                d.pipe = d.then;\n                q.each(b, function(a, f) {\n                    var g = f[2], i = f[3];\n                    d[f[1]] = g.add;\n                    ((i && g.add(function() {\n                        c = i;\n                    }, b[((a ^ 1))][2].disable, b[2][2].lock)));\n                    e[f[0]] = g.fire;\n                    e[((f[0] + \"With\"))] = g.fireWith;\n                });\n                d.promise(e);\n                ((a && a.call(e, e)));\n                return e;\n            },\n            when: function(a) {\n                var b = 0, c = l.call(arguments), d = c.length, e = ((((((d !== 1)) || ((a && q.isFunction(a.promise))))) ? d : 0)), f = ((((e === 1)) ? a : q.Deferred())), g = function(a, b, c) {\n                    return function(d) {\n                        b[a] = this;\n                        c[a] = ((((arguments.length > 1)) ? l.call(arguments) : d));\n                        ((((c === i)) ? f.notifyWith(b, c) : ((--e || f.resolveWith(b, c)))));\n                    };\n                }, i, j, k;\n                if (((d > 1))) {\n                    i = new Array(d);\n                    j = new Array(d);\n                    k = new Array(d);\n                    for (; ((b < d)); b++) {\n                        ((((c[b] && q.isFunction(c[b].promise))) ? c[b].promise().done(g(b, k, c)).fail(f.reject).progress(g(b, j, i)) : --e));\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                ((e || f.resolveWith(k, c)));\n                return f.promise();\n            }\n        });\n        q.support = function() {\n            var b, c, d, f, g, i, j, k, l, m, n, o = e.createElement(\"div\");\n            o.setAttribute(\"className\", \"t\");\n            o.innerHTML = \"  \\u003Clink/\\u003E\\u003Ctable\\u003E\\u003C/table\\u003E\\u003Ca href='/a'\\u003Ea\\u003C/a\\u003E\\u003Cinput type='checkbox'/\\u003E\";\n            c = o.getElementsByTagName(\"*\");\n            d = o.getElementsByTagName(\"a\")[0];\n            if (((((!c || !d)) || !c.length))) {\n                return {\n                };\n            }\n        ;\n        ;\n            f = e.createElement(\"select\");\n            g = f.appendChild(e.createElement(\"option\"));\n            i = o.getElementsByTagName(\"input\")[0];\n            d.style.cssText = \"top:1px;float:left;opacity:.5\";\n            b = {\n                leadingWhitespace: ((o.firstChild.nodeType === 3)),\n                tbody: !o.getElementsByTagName(\"tbody\").length,\n                htmlSerialize: !!o.getElementsByTagName(\"link\").length,\n                style: /top/.test(d.getAttribute(\"style\")),\n                hrefNormalized: ((d.getAttribute(\"href\") === \"/a\")),\n                opacity: /^0.5/.test(d.style.opacity),\n                cssFloat: !!d.style.cssFloat,\n                checkOn: ((i.value === \"JSBNG__on\")),\n                optSelected: g.selected,\n                getSetAttribute: ((o.className !== \"t\")),\n                enctype: !!e.createElement(\"form\").enctype,\n                html5Clone: ((e.createElement(\"nav\").cloneNode(!0).outerHTML !== \"\\u003C:nav\\u003E\\u003C/:nav\\u003E\")),\n                boxModel: ((e.compatMode === \"CSS1Compat\")),\n                submitBubbles: !0,\n                changeBubbles: !0,\n                focusinBubbles: !1,\n                deleteExpando: !0,\n                noCloneEvent: !0,\n                inlineBlockNeedsLayout: !1,\n                shrinkWrapBlocks: !1,\n                reliableMarginRight: !0,\n                boxSizingReliable: !0,\n                pixelPosition: !1\n            };\n            i.checked = !0;\n            b.noCloneChecked = i.cloneNode(!0).checked;\n            f.disabled = !0;\n            b.optDisabled = !g.disabled;\n            try {\n                delete o.test;\n            } catch (p) {\n                b.deleteExpando = !1;\n            };\n        ;\n            if (((((!o.JSBNG__addEventListener && o.JSBNG__attachEvent)) && o.fireEvent))) {\n                o.JSBNG__attachEvent(\"JSBNG__onclick\", n = function() {\n                    b.noCloneEvent = !1;\n                });\n                o.cloneNode(!0).fireEvent(\"JSBNG__onclick\");\n                o.JSBNG__detachEvent(\"JSBNG__onclick\", n);\n            }\n        ;\n        ;\n            i = e.createElement(\"input\");\n            i.value = \"t\";\n            i.setAttribute(\"type\", \"radio\");\n            b.radioValue = ((i.value === \"t\"));\n            i.setAttribute(\"checked\", \"checked\");\n            i.setAttribute(\"JSBNG__name\", \"t\");\n            o.appendChild(i);\n            j = e.createDocumentFragment();\n            j.appendChild(o.lastChild);\n            b.checkClone = j.cloneNode(!0).cloneNode(!0).lastChild.checked;\n            b.appendChecked = i.checked;\n            j.removeChild(i);\n            j.appendChild(o);\n            if (o.JSBNG__attachEvent) {\n                {\n                    var fin21keys = ((window.top.JSBNG_Replay.forInKeys)(({\n                        submit: !0,\n                        change: !0,\n                        focusin: !0\n                    }))), fin21i = (0);\n                    (0);\n                    for (; (fin21i < fin21keys.length); (fin21i++)) {\n                        ((l) = (fin21keys[fin21i]));\n                        {\n                            k = ((\"JSBNG__on\" + l));\n                            m = ((k in o));\n                            if (!m) {\n                                o.setAttribute(k, \"return;\");\n                                m = ((typeof o[k] == \"function\"));\n                            }\n                        ;\n                        ;\n                            b[((l + \"Bubbles\"))] = m;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            q(function() {\n                var c, d, f, g, i = \"padding:0;margin:0;border:0;display:block;overflow:hidden;\", j = e.getElementsByTagName(\"body\")[0];\n                if (!j) {\n                    return;\n                }\n            ;\n            ;\n                c = e.createElement(\"div\");\n                c.style.cssText = \"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\";\n                j.insertBefore(c, j.firstChild);\n                d = e.createElement(\"div\");\n                c.appendChild(d);\n                d.innerHTML = \"\\u003Ctable\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003E\\u003C/td\\u003E\\u003Ctd\\u003Et\\u003C/td\\u003E\\u003C/tr\\u003E\\u003C/table\\u003E\";\n                f = d.getElementsByTagName(\"td\");\n                f[0].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n                m = ((f[0].offsetHeight === 0));\n                f[0].style.display = \"\";\n                f[1].style.display = \"none\";\n                b.reliableHiddenOffsets = ((m && ((f[0].offsetHeight === 0))));\n                d.innerHTML = \"\";\n                d.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n                b.boxSizing = ((d.offsetWidth === 4));\n                b.doesNotIncludeMarginInBodyOffset = ((j.offsetTop !== 1));\n                if (a.JSBNG__getComputedStyle) {\n                    b.pixelPosition = ((((a.JSBNG__getComputedStyle(d, null) || {\n                    })).JSBNG__top !== \"1%\"));\n                    b.boxSizingReliable = ((((a.JSBNG__getComputedStyle(d, null) || {\n                        width: \"4px\"\n                    })).width === \"4px\"));\n                    g = e.createElement(\"div\");\n                    g.style.cssText = d.style.cssText = i;\n                    g.style.marginRight = g.style.width = \"0\";\n                    d.style.width = \"1px\";\n                    d.appendChild(g);\n                    b.reliableMarginRight = !parseFloat(((a.JSBNG__getComputedStyle(g, null) || {\n                    })).marginRight);\n                }\n            ;\n            ;\n                if (((typeof d.style.zoom != \"undefined\"))) {\n                    d.innerHTML = \"\";\n                    d.style.cssText = ((i + \"width:1px;padding:1px;display:inline;zoom:1\"));\n                    b.inlineBlockNeedsLayout = ((d.offsetWidth === 3));\n                    d.style.display = \"block\";\n                    d.style.overflow = \"visible\";\n                    d.innerHTML = \"\\u003Cdiv\\u003E\\u003C/div\\u003E\";\n                    d.firstChild.style.width = \"5px\";\n                    b.shrinkWrapBlocks = ((d.offsetWidth !== 3));\n                    c.style.zoom = 1;\n                }\n            ;\n            ;\n                j.removeChild(c);\n                c = d = f = g = null;\n            });\n            j.removeChild(o);\n            c = d = f = g = i = j = o = null;\n            return b;\n        }();\n        var I = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/, J = /([A-Z])/g;\n        q.extend({\n            cache: {\n            },\n            deletedIds: [],\n            uuid: 0,\n            expando: ((\"jQuery\" + ((q.fn.jquery + Math.JSBNG__random())).replace(/\\D/g, \"\"))),\n            noData: {\n                embed: !0,\n                object: \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n                applet: !0\n            },\n            hasData: function(a) {\n                a = ((a.nodeType ? q.cache[a[q.expando]] : a[q.expando]));\n                return ((!!a && !L(a)));\n            },\n            data: function(a, c, d, e) {\n                if (!q.acceptData(a)) {\n                    return;\n                }\n            ;\n            ;\n                var f, g, i = q.expando, j = ((typeof c == \"string\")), k = a.nodeType, l = ((k ? q.cache : a)), m = ((k ? a[i] : ((a[i] && i))));\n                if (((((((((!m || !l[m])) || ((!e && !l[m].data)))) && j)) && ((d === b))))) {\n                    return;\n                }\n            ;\n            ;\n                ((m || ((k ? a[i] = m = ((q.deletedIds.pop() || q.guid++)) : m = i))));\n                if (!l[m]) {\n                    l[m] = {\n                    };\n                    ((k || (l[m].toJSON = q.noop)));\n                }\n            ;\n            ;\n                if (((((typeof c == \"object\")) || ((typeof c == \"function\"))))) {\n                    ((e ? l[m] = q.extend(l[m], c) : l[m].data = q.extend(l[m].data, c)));\n                }\n            ;\n            ;\n                f = l[m];\n                if (!e) {\n                    ((f.data || (f.data = {\n                    })));\n                    f = f.data;\n                }\n            ;\n            ;\n                ((((d !== b)) && (f[q.camelCase(c)] = d)));\n                if (j) {\n                    g = f[c];\n                    ((((g == null)) && (g = f[q.camelCase(c)])));\n                }\n                 else g = f;\n            ;\n            ;\n                return g;\n            },\n            removeData: function(a, b, c) {\n                if (!q.acceptData(a)) {\n                    return;\n                }\n            ;\n            ;\n                var d, e, f, g = a.nodeType, i = ((g ? q.cache : a)), j = ((g ? a[q.expando] : q.expando));\n                if (!i[j]) {\n                    return;\n                }\n            ;\n            ;\n                if (b) {\n                    d = ((c ? i[j] : i[j].data));\n                    if (d) {\n                        if (!q.isArray(b)) {\n                            if (((b in d))) b = [b,];\n                             else {\n                                b = q.camelCase(b);\n                                ((((b in d)) ? b = [b,] : b = b.split(\" \")));\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                        for (e = 0, f = b.length; ((e < f)); e++) {\n                            delete d[b[e]];\n                        ;\n                        };\n                    ;\n                        if (!((c ? L : q.isEmptyObject))(d)) {\n                            return;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                if (!c) {\n                    delete i[j].data;\n                    if (!L(i[j])) {\n                        return;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                ((g ? q.cleanData([a,], !0) : ((((q.support.deleteExpando || ((i != i.window)))) ? delete i[j] : i[j] = null))));\n            },\n            _data: function(a, b, c) {\n                return q.data(a, b, c, !0);\n            },\n            acceptData: function(a) {\n                var b = ((a.nodeName && q.noData[a.nodeName.toLowerCase()]));\n                return ((!b || ((((b !== !0)) && ((a.getAttribute(\"classid\") === b))))));\n            }\n        });\n        q.fn.extend({\n            data: function(a, c) {\n                var d, e, f, g, i, j = this[0], k = 0, l = null;\n                if (((a === b))) {\n                    if (this.length) {\n                        l = q.data(j);\n                        if (((((j.nodeType === 1)) && !q._data(j, \"parsedAttrs\")))) {\n                            f = j.attributes;\n                            for (i = f.length; ((k < i)); k++) {\n                                g = f[k].JSBNG__name;\n                                if (!g.indexOf(\"data-\")) {\n                                    g = q.camelCase(g.substring(5));\n                                    K(j, g, l[g]);\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                            q._data(j, \"parsedAttrs\", !0);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return l;\n                }\n            ;\n            ;\n                if (((typeof a == \"object\"))) {\n                    return this.each(function() {\n                        q.data(this, a);\n                    });\n                }\n            ;\n            ;\n                d = a.split(\".\", 2);\n                d[1] = ((d[1] ? ((\".\" + d[1])) : \"\"));\n                e = ((d[1] + \"!\"));\n                return q.access(this, function(c) {\n                    if (((c === b))) {\n                        l = this.triggerHandler(((\"getData\" + e)), [d[0],]);\n                        if (((((l === b)) && j))) {\n                            l = q.data(j, a);\n                            l = K(j, a, l);\n                        }\n                    ;\n                    ;\n                        return ((((((l === b)) && d[1])) ? this.data(d[0]) : l));\n                    }\n                ;\n                ;\n                    d[1] = c;\n                    this.each(function() {\n                        var b = q(this);\n                        b.triggerHandler(((\"setData\" + e)), d);\n                        q.data(this, a, c);\n                        b.triggerHandler(((\"changeData\" + e)), d);\n                    });\n                }, null, c, ((arguments.length > 1)), null, !1);\n            },\n            removeData: function(a) {\n                return this.each(function() {\n                    q.removeData(this, a);\n                });\n            }\n        });\n        q.extend({\n            queue: function(a, b, c) {\n                var d;\n                if (a) {\n                    b = ((((b || \"fx\")) + \"queue\"));\n                    d = q._data(a, b);\n                    ((c && ((((!d || q.isArray(c))) ? d = q._data(a, b, q.makeArray(c)) : d.push(c)))));\n                    return ((d || []));\n                }\n            ;\n            ;\n            },\n            dequeue: function(a, b) {\n                b = ((b || \"fx\"));\n                var c = q.queue(a, b), d = c.length, e = c.shift(), f = q._queueHooks(a, b), g = function() {\n                    q.dequeue(a, b);\n                };\n                if (((e === \"inprogress\"))) {\n                    e = c.shift();\n                    d--;\n                }\n            ;\n            ;\n                if (e) {\n                    ((((b === \"fx\")) && c.unshift(\"inprogress\")));\n                    delete f.JSBNG__stop;\n                    e.call(a, g, f);\n                }\n            ;\n            ;\n                ((((!d && f)) && f.empty.fire()));\n            },\n            _queueHooks: function(a, b) {\n                var c = ((b + \"queueHooks\"));\n                return ((q._data(a, c) || q._data(a, c, {\n                    empty: q.Callbacks(\"once memory\").add(function() {\n                        q.removeData(a, ((b + \"queue\")), !0);\n                        q.removeData(a, c, !0);\n                    })\n                })));\n            }\n        });\n        q.fn.extend({\n            queue: function(a, c) {\n                var d = 2;\n                if (((typeof a != \"string\"))) {\n                    c = a;\n                    a = \"fx\";\n                    d--;\n                }\n            ;\n            ;\n                return ((((arguments.length < d)) ? q.queue(this[0], a) : ((((c === b)) ? this : this.each(function() {\n                    var b = q.queue(this, a, c);\n                    q._queueHooks(this, a);\n                    ((((((a === \"fx\")) && ((b[0] !== \"inprogress\")))) && q.dequeue(this, a)));\n                })))));\n            },\n            dequeue: function(a) {\n                return this.each(function() {\n                    q.dequeue(this, a);\n                });\n            },\n            delay: function(a, b) {\n                a = ((q.fx ? ((q.fx.speeds[a] || a)) : a));\n                b = ((b || \"fx\"));\n                return this.queue(b, function(b, c) {\n                    var d = JSBNG__setTimeout(b, a);\n                    c.JSBNG__stop = function() {\n                        JSBNG__clearTimeout(d);\n                    };\n                });\n            },\n            clearQueue: function(a) {\n                return this.queue(((a || \"fx\")), []);\n            },\n            promise: function(a, c) {\n                var d, e = 1, f = q.Deferred(), g = this, i = this.length, j = function() {\n                    ((--e || f.resolveWith(g, [g,])));\n                };\n                if (((typeof a != \"string\"))) {\n                    c = a;\n                    a = b;\n                }\n            ;\n            ;\n                a = ((a || \"fx\"));\n                while (i--) {\n                    d = q._data(g[i], ((a + \"queueHooks\")));\n                    if (((d && d.empty))) {\n                        e++;\n                        d.empty.add(j);\n                    }\n                ;\n                ;\n                };\n            ;\n                j();\n                return f.promise(c);\n            }\n        });\n        var M, N, O, P = /[\\t\\r\\n]/g, Q = /\\r/g, R = /^(?:button|input)$/i, S = /^(?:button|input|object|select|textarea)$/i, T = /^a(?:rea|)$/i, U = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, V = q.support.getSetAttribute;\n        q.fn.extend({\n            attr: function(a, b) {\n                return q.access(this, q.attr, a, b, ((arguments.length > 1)));\n            },\n            removeAttr: function(a) {\n                return this.each(function() {\n                    q.removeAttr(this, a);\n                });\n            },\n            prop: function(a, b) {\n                return q.access(this, q.prop, a, b, ((arguments.length > 1)));\n            },\n            removeProp: function(a) {\n                a = ((q.propFix[a] || a));\n                return this.each(function() {\n                    try {\n                        this[a] = b;\n                        delete this[a];\n                    } catch (c) {\n                    \n                    };\n                ;\n                });\n            },\n            addClass: function(a) {\n                var b, c, d, e, f, g, i;\n                if (q.isFunction(a)) {\n                    return this.each(function(b) {\n                        q(this).addClass(a.call(this, b, this.className));\n                    });\n                }\n            ;\n            ;\n                if (((a && ((typeof a == \"string\"))))) {\n                    b = a.split(t);\n                    for (c = 0, d = this.length; ((c < d)); c++) {\n                        e = this[c];\n                        if (((e.nodeType === 1))) {\n                            if (((!e.className && ((b.length === 1))))) e.className = a;\n                             else {\n                                f = ((((\" \" + e.className)) + \" \"));\n                                for (g = 0, i = b.length; ((g < i)); g++) {\n                                    ((((f.indexOf(((((\" \" + b[g])) + \" \"))) < 0)) && (f += ((b[g] + \" \")))));\n                                ;\n                                };\n                            ;\n                                e.className = q.trim(f);\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                return this;\n            },\n            removeClass: function(a) {\n                var c, d, e, f, g, i, j;\n                if (q.isFunction(a)) {\n                    return this.each(function(b) {\n                        q(this).removeClass(a.call(this, b, this.className));\n                    });\n                }\n            ;\n            ;\n                if (((((a && ((typeof a == \"string\")))) || ((a === b))))) {\n                    c = ((a || \"\")).split(t);\n                    for (i = 0, j = this.length; ((i < j)); i++) {\n                        e = this[i];\n                        if (((((e.nodeType === 1)) && e.className))) {\n                            d = ((((\" \" + e.className)) + \" \")).replace(P, \" \");\n                            for (f = 0, g = c.length; ((f < g)); f++) {\n                                while (((d.indexOf(((((\" \" + c[f])) + \" \"))) >= 0))) {\n                                    d = d.replace(((((\" \" + c[f])) + \" \")), \" \");\n                                ;\n                                };\n                            ;\n                            };\n                        ;\n                            e.className = ((a ? q.trim(d) : \"\"));\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                return this;\n            },\n            toggleClass: function(a, b) {\n                var c = typeof a, d = ((typeof b == \"boolean\"));\n                return ((q.isFunction(a) ? this.each(function(c) {\n                    q(this).toggleClass(a.call(this, c, this.className, b), b);\n                }) : this.each(function() {\n                    if (((c === \"string\"))) {\n                        var e, f = 0, g = q(this), i = b, j = a.split(t);\n                        while (e = j[f++]) {\n                            i = ((d ? i : !g.hasClass(e)));\n                            g[((i ? \"addClass\" : \"removeClass\"))](e);\n                        };\n                    ;\n                    }\n                     else if (((((c === \"undefined\")) || ((c === \"boolean\"))))) {\n                        ((this.className && q._data(this, \"__className__\", this.className)));\n                        this.className = ((((this.className || ((a === !1)))) ? \"\" : ((q._data(this, \"__className__\") || \"\"))));\n                    }\n                    \n                ;\n                ;\n                })));\n            },\n            hasClass: function(a) {\n                var b = ((((\" \" + a)) + \" \")), c = 0, d = this.length;\n                for (; ((c < d)); c++) {\n                    if (((((this[c].nodeType === 1)) && ((((((\" \" + this[c].className)) + \" \")).replace(P, \" \").indexOf(b) >= 0))))) {\n                        return !0;\n                    }\n                ;\n                ;\n                };\n            ;\n                return !1;\n            },\n            val: function(a) {\n                var c, d, e, f = this[0];\n                if (!arguments.length) {\n                    if (f) {\n                        c = ((q.valHooks[f.type] || q.valHooks[f.nodeName.toLowerCase()]));\n                        if (((((c && ((\"get\" in c)))) && (((d = c.get(f, \"value\")) !== b))))) {\n                            return d;\n                        }\n                    ;\n                    ;\n                        d = f.value;\n                        return ((((typeof d == \"string\")) ? d.replace(Q, \"\") : ((((d == null)) ? \"\" : d))));\n                    }\n                ;\n                ;\n                    return;\n                }\n            ;\n            ;\n                e = q.isFunction(a);\n                return this.each(function(d) {\n                    var f, g = q(this);\n                    if (((this.nodeType !== 1))) {\n                        return;\n                    }\n                ;\n                ;\n                    ((e ? f = a.call(this, d, g.val()) : f = a));\n                    ((((f == null)) ? f = \"\" : ((((typeof f == \"number\")) ? f += \"\" : ((q.isArray(f) && (f = q.map(f, function(a) {\n                        return ((((a == null)) ? \"\" : ((a + \"\"))));\n                    }))))))));\n                    c = ((q.valHooks[this.type] || q.valHooks[this.nodeName.toLowerCase()]));\n                    if (((((!c || !((\"set\" in c)))) || ((c.set(this, f, \"value\") === b))))) {\n                        this.value = f;\n                    }\n                ;\n                ;\n                });\n            }\n        });\n        q.extend({\n            valHooks: {\n                option: {\n                    get: function(a) {\n                        var b = a.attributes.value;\n                        return ((((!b || b.specified)) ? a.value : a.text));\n                    }\n                },\n                select: {\n                    get: function(a) {\n                        var b, c, d = a.options, e = a.selectedIndex, f = ((((a.type === \"select-one\")) || ((e < 0)))), g = ((f ? null : [])), i = ((f ? ((e + 1)) : d.length)), j = ((((e < 0)) ? i : ((f ? e : 0))));\n                        for (; ((j < i)); j++) {\n                            c = d[j];\n                            if (((((((c.selected || ((j === e)))) && ((q.support.optDisabled ? !c.disabled : ((c.getAttribute(\"disabled\") === null)))))) && ((!c.parentNode.disabled || !q.nodeName(c.parentNode, \"optgroup\")))))) {\n                                b = q(c).val();\n                                if (f) {\n                                    return b;\n                                }\n                            ;\n                            ;\n                                g.push(b);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        return g;\n                    },\n                    set: function(a, b) {\n                        var c = q.makeArray(b);\n                        q(a).JSBNG__find(\"option\").each(function() {\n                            this.selected = ((q.inArray(q(this).val(), c) >= 0));\n                        });\n                        ((c.length || (a.selectedIndex = -1)));\n                        return c;\n                    }\n                }\n            },\n            attrFn: {\n            },\n            attr: function(a, c, d, e) {\n                var f, g, i, j = a.nodeType;\n                if (((((((!a || ((j === 3)))) || ((j === 8)))) || ((j === 2))))) {\n                    return;\n                }\n            ;\n            ;\n                if (((e && q.isFunction(q.fn[c])))) {\n                    return q(a)[c](d);\n                }\n            ;\n            ;\n                if (((typeof a.getAttribute == \"undefined\"))) {\n                    return q.prop(a, c, d);\n                }\n            ;\n            ;\n                i = ((((j !== 1)) || !q.isXMLDoc(a)));\n                if (i) {\n                    c = c.toLowerCase();\n                    g = ((q.attrHooks[c] || ((U.test(c) ? N : M))));\n                }\n            ;\n            ;\n                if (((d !== b))) {\n                    if (((d === null))) {\n                        q.removeAttr(a, c);\n                        return;\n                    }\n                ;\n                ;\n                    if (((((((g && ((\"set\" in g)))) && i)) && (((f = g.set(a, d, c)) !== b))))) {\n                        return f;\n                    }\n                ;\n                ;\n                    a.setAttribute(c, ((d + \"\")));\n                    return d;\n                }\n            ;\n            ;\n                if (((((((g && ((\"get\" in g)))) && i)) && (((f = g.get(a, c)) !== null))))) {\n                    return f;\n                }\n            ;\n            ;\n                f = a.getAttribute(c);\n                return ((((f === null)) ? b : f));\n            },\n            removeAttr: function(a, b) {\n                var c, d, e, f, g = 0;\n                if (((b && ((a.nodeType === 1))))) {\n                    d = b.split(t);\n                    for (; ((g < d.length)); g++) {\n                        e = d[g];\n                        if (e) {\n                            c = ((q.propFix[e] || e));\n                            f = U.test(e);\n                            ((f || q.attr(a, e, \"\")));\n                            a.removeAttribute(((V ? e : c)));\n                            ((((f && ((c in a)))) && (a[c] = !1)));\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n            },\n            attrHooks: {\n                type: {\n                    set: function(a, b) {\n                        if (((R.test(a.nodeName) && a.parentNode))) {\n                            q.error(\"type property can't be changed\");\n                        }\n                         else {\n                            if (((((!q.support.radioValue && ((b === \"radio\")))) && q.nodeName(a, \"input\")))) {\n                                var c = a.value;\n                                a.setAttribute(\"type\", b);\n                                ((c && (a.value = c)));\n                                return b;\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                },\n                value: {\n                    get: function(a, b) {\n                        return ((((M && q.nodeName(a, \"button\"))) ? M.get(a, b) : ((((b in a)) ? a.value : null))));\n                    },\n                    set: function(a, b, c) {\n                        if (((M && q.nodeName(a, \"button\")))) {\n                            return M.set(a, b, c);\n                        }\n                    ;\n                    ;\n                        a.value = b;\n                    }\n                }\n            },\n            propFix: {\n                tabindex: \"tabIndex\",\n                readonly: \"readOnly\",\n                \"for\": \"htmlFor\",\n                class: \"className\",\n                maxlength: \"maxLength\",\n                cellspacing: \"cellSpacing\",\n                cellpadding: \"cellPadding\",\n                rowspan: \"rowSpan\",\n                colspan: \"colSpan\",\n                usemap: \"useMap\",\n                frameborder: \"frameBorder\",\n                contenteditable: \"contentEditable\"\n            },\n            prop: function(a, c, d) {\n                var e, f, g, i = a.nodeType;\n                if (((((((!a || ((i === 3)))) || ((i === 8)))) || ((i === 2))))) {\n                    return;\n                }\n            ;\n            ;\n                g = ((((i !== 1)) || !q.isXMLDoc(a)));\n                if (g) {\n                    c = ((q.propFix[c] || c));\n                    f = q.propHooks[c];\n                }\n            ;\n            ;\n                return ((((d !== b)) ? ((((((f && ((\"set\" in f)))) && (((e = f.set(a, d, c)) !== b)))) ? e : a[c] = d)) : ((((((f && ((\"get\" in f)))) && (((e = f.get(a, c)) !== null)))) ? e : a[c]))));\n            },\n            propHooks: {\n                tabIndex: {\n                    get: function(a) {\n                        var c = a.getAttributeNode(\"tabindex\");\n                        return ((((c && c.specified)) ? parseInt(c.value, 10) : ((((S.test(a.nodeName) || ((T.test(a.nodeName) && a.href)))) ? 0 : b))));\n                    }\n                }\n            }\n        });\n        N = {\n            get: function(a, c) {\n                var d, e = q.prop(a, c);\n                return ((((((e === !0)) || ((((((typeof e != \"boolean\")) && (d = a.getAttributeNode(c)))) && ((d.nodeValue !== !1)))))) ? c.toLowerCase() : b));\n            },\n            set: function(a, b, c) {\n                var d;\n                if (((b === !1))) q.removeAttr(a, c);\n                 else {\n                    d = ((q.propFix[c] || c));\n                    ((((d in a)) && (a[d] = !0)));\n                    a.setAttribute(c, c.toLowerCase());\n                }\n            ;\n            ;\n                return c;\n            }\n        };\n        if (!V) {\n            O = {\n                JSBNG__name: !0,\n                id: !0,\n                coords: !0\n            };\n            M = q.valHooks.button = {\n                get: function(a, c) {\n                    var d;\n                    d = a.getAttributeNode(c);\n                    return ((((d && ((O[c] ? ((d.value !== \"\")) : d.specified)))) ? d.value : b));\n                },\n                set: function(a, b, c) {\n                    var d = a.getAttributeNode(c);\n                    if (!d) {\n                        d = e.createAttribute(c);\n                        a.setAttributeNode(d);\n                    }\n                ;\n                ;\n                    return d.value = ((b + \"\"));\n                }\n            };\n            q.each([\"width\",\"height\",], function(a, b) {\n                q.attrHooks[b] = q.extend(q.attrHooks[b], {\n                    set: function(a, c) {\n                        if (((c === \"\"))) {\n                            a.setAttribute(b, \"auto\");\n                            return c;\n                        }\n                    ;\n                    ;\n                    }\n                });\n            });\n            q.attrHooks.contenteditable = {\n                get: M.get,\n                set: function(a, b, c) {\n                    ((((b === \"\")) && (b = \"false\")));\n                    M.set(a, b, c);\n                }\n            };\n        }\n    ;\n    ;\n        ((q.support.hrefNormalized || q.each([\"href\",\"src\",\"width\",\"height\",], function(a, c) {\n            q.attrHooks[c] = q.extend(q.attrHooks[c], {\n                get: function(a) {\n                    var d = a.getAttribute(c, 2);\n                    return ((((d === null)) ? b : d));\n                }\n            });\n        })));\n        ((q.support.style || (q.attrHooks.style = {\n            get: function(a) {\n                return ((a.style.cssText.toLowerCase() || b));\n            },\n            set: function(a, b) {\n                return a.style.cssText = ((b + \"\"));\n            }\n        })));\n        ((q.support.optSelected || (q.propHooks.selected = q.extend(q.propHooks.selected, {\n            get: function(a) {\n                var b = a.parentNode;\n                if (b) {\n                    b.selectedIndex;\n                    ((b.parentNode && b.parentNode.selectedIndex));\n                }\n            ;\n            ;\n                return null;\n            }\n        }))));\n        ((q.support.enctype || (q.propFix.enctype = \"encoding\")));\n        ((q.support.checkOn || q.each([\"radio\",\"checkbox\",], function() {\n            q.valHooks[this] = {\n                get: function(a) {\n                    return ((((a.getAttribute(\"value\") === null)) ? \"JSBNG__on\" : a.value));\n                }\n            };\n        })));\n        q.each([\"radio\",\"checkbox\",], function() {\n            q.valHooks[this] = q.extend(q.valHooks[this], {\n                set: function(a, b) {\n                    if (q.isArray(b)) {\n                        return a.checked = ((q.inArray(q(a).val(), b) >= 0));\n                    }\n                ;\n                ;\n                }\n            });\n        });\n        var W = /^(?:textarea|input|select)$/i, X = /^([^\\.]*|)(?:\\.(.+)|)$/, Y = /(?:^|\\s)hover(\\.\\S+|)\\b/, Z = /^key/, ab = /^(?:mouse|contextmenu)|click/, bb = /^(?:focusinfocus|focusoutblur)$/, cb = function(a) {\n            return ((q.JSBNG__event.special.hover ? a : a.replace(Y, \"mouseenter$1 mouseleave$1\")));\n        };\n        q.JSBNG__event = {\n            add: function(a, c, d, e, f) {\n                var g, i, j, k, l, m, n, o, p, r, s;\n                if (((((((((((a.nodeType === 3)) || ((a.nodeType === 8)))) || !c)) || !d)) || !(g = q._data(a))))) {\n                    return;\n                }\n            ;\n            ;\n                if (d.handler) {\n                    p = d;\n                    d = p.handler;\n                    f = p.selector;\n                }\n            ;\n            ;\n                ((d.guid || (d.guid = q.guid++)));\n                j = g.events;\n                ((j || (g.events = j = {\n                })));\n                i = g.handle;\n                if (!i) {\n                    g.handle = i = function(a) {\n                        return ((((((typeof q == \"undefined\")) || ((!!a && ((q.JSBNG__event.triggered === a.type)))))) ? b : q.JSBNG__event.dispatch.apply(i.elem, arguments)));\n                    };\n                    i.elem = a;\n                }\n            ;\n            ;\n                c = q.trim(cb(c)).split(\" \");\n                for (k = 0; ((k < c.length)); k++) {\n                    l = ((X.exec(c[k]) || []));\n                    m = l[1];\n                    n = ((l[2] || \"\")).split(\".\").sort();\n                    s = ((q.JSBNG__event.special[m] || {\n                    }));\n                    m = ((((f ? s.delegateType : s.bindType)) || m));\n                    s = ((q.JSBNG__event.special[m] || {\n                    }));\n                    o = q.extend({\n                        type: m,\n                        origType: l[1],\n                        data: e,\n                        handler: d,\n                        guid: d.guid,\n                        selector: f,\n                        needsContext: ((f && q.expr.match.needsContext.test(f))),\n                        namespace: n.join(\".\")\n                    }, p);\n                    r = j[m];\n                    if (!r) {\n                        r = j[m] = [];\n                        r.delegateCount = 0;\n                        if (((!s.setup || ((s.setup.call(a, e, n, i) === !1))))) {\n                            ((a.JSBNG__addEventListener ? a.JSBNG__addEventListener(m, i, !1) : ((a.JSBNG__attachEvent && a.JSBNG__attachEvent(((\"JSBNG__on\" + m)), i)))));\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    if (s.add) {\n                        s.add.call(a, o);\n                        ((o.handler.guid || (o.handler.guid = d.guid)));\n                    }\n                ;\n                ;\n                    ((f ? r.splice(r.delegateCount++, 0, o) : r.push(o)));\n                    q.JSBNG__event.global[m] = !0;\n                };\n            ;\n                a = null;\n            },\n            global: {\n            },\n            remove: function(a, b, c, d, e) {\n                var f, g, i, j, k, l, m, n, o, p, r, s = ((q.hasData(a) && q._data(a)));\n                if (((!s || !(n = s.events)))) {\n                    return;\n                }\n            ;\n            ;\n                b = q.trim(cb(((b || \"\")))).split(\" \");\n                for (f = 0; ((f < b.length)); f++) {\n                    g = ((X.exec(b[f]) || []));\n                    i = j = g[1];\n                    k = g[2];\n                    if (!i) {\n                        {\n                            var fin22keys = ((window.top.JSBNG_Replay.forInKeys)((n))), fin22i = (0);\n                            (0);\n                            for (; (fin22i < fin22keys.length); (fin22i++)) {\n                                ((i) = (fin22keys[fin22i]));\n                                {\n                                    q.JSBNG__event.remove(a, ((i + b[f])), c, d, !0);\n                                ;\n                                };\n                            };\n                        };\n                    ;\n                        continue;\n                    }\n                ;\n                ;\n                    o = ((q.JSBNG__event.special[i] || {\n                    }));\n                    i = ((((d ? o.delegateType : o.bindType)) || i));\n                    p = ((n[i] || []));\n                    l = p.length;\n                    k = ((k ? new RegExp(((((\"(^|\\\\.)\" + k.split(\".\").sort().join(\"\\\\.(?:.*\\\\.|)\"))) + \"(\\\\.|$)\"))) : null));\n                    for (m = 0; ((m < p.length)); m++) {\n                        r = p[m];\n                        if (((((((((e || ((j === r.origType)))) && ((!c || ((c.guid === r.guid)))))) && ((!k || k.test(r.namespace))))) && ((((!d || ((d === r.selector)))) || ((((d === \"**\")) && r.selector))))))) {\n                            p.splice(m--, 1);\n                            ((r.selector && p.delegateCount--));\n                            ((o.remove && o.remove.call(a, r)));\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    if (((((p.length === 0)) && ((l !== p.length))))) {\n                        ((((!o.teardown || ((o.teardown.call(a, k, s.handle) === !1)))) && q.removeEvent(a, i, s.handle)));\n                        delete n[i];\n                    }\n                ;\n                ;\n                };\n            ;\n                if (q.isEmptyObject(n)) {\n                    delete s.handle;\n                    q.removeData(a, \"events\", !0);\n                }\n            ;\n            ;\n            },\n            customEvent: {\n                getData: !0,\n                setData: !0,\n                changeData: !0\n            },\n            trigger: function(c, d, f, g) {\n                if (((!f || ((((f.nodeType !== 3)) && ((f.nodeType !== 8))))))) {\n                    var i, j, k, l, m, n, o, p, r, s, t = ((c.type || c)), u = [];\n                    if (bb.test(((t + q.JSBNG__event.triggered)))) {\n                        return;\n                    }\n                ;\n                ;\n                    if (((t.indexOf(\"!\") >= 0))) {\n                        t = t.slice(0, -1);\n                        j = !0;\n                    }\n                ;\n                ;\n                    if (((t.indexOf(\".\") >= 0))) {\n                        u = t.split(\".\");\n                        t = u.shift();\n                        u.sort();\n                    }\n                ;\n                ;\n                    if (((((!f || q.JSBNG__event.customEvent[t])) && !q.JSBNG__event.global[t]))) {\n                        return;\n                    }\n                ;\n                ;\n                    c = ((((typeof c == \"object\")) ? ((c[q.expando] ? c : new q.JSBNG__Event(t, c))) : new q.JSBNG__Event(t)));\n                    c.type = t;\n                    c.isTrigger = !0;\n                    c.exclusive = j;\n                    c.namespace = u.join(\".\");\n                    c.namespace_re = ((c.namespace ? new RegExp(((((\"(^|\\\\.)\" + u.join(\"\\\\.(?:.*\\\\.|)\"))) + \"(\\\\.|$)\"))) : null));\n                    n = ((((t.indexOf(\":\") < 0)) ? ((\"JSBNG__on\" + t)) : \"\"));\n                    if (!f) {\n                        i = q.cache;\n                        {\n                            var fin23keys = ((window.top.JSBNG_Replay.forInKeys)((i))), fin23i = (0);\n                            (0);\n                            for (; (fin23i < fin23keys.length); (fin23i++)) {\n                                ((k) = (fin23keys[fin23i]));\n                                {\n                                    ((((i[k].events && i[k].events[t])) && q.JSBNG__event.trigger(c, d, i[k].handle.elem, !0)));\n                                ;\n                                };\n                            };\n                        };\n                    ;\n                        return;\n                    }\n                ;\n                ;\n                    c.result = b;\n                    ((c.target || (c.target = f)));\n                    d = ((((d != null)) ? q.makeArray(d) : []));\n                    d.unshift(c);\n                    o = ((q.JSBNG__event.special[t] || {\n                    }));\n                    if (((o.trigger && ((o.trigger.apply(f, d) === !1))))) {\n                        return;\n                    }\n                ;\n                ;\n                    r = [[f,((o.bindType || t)),],];\n                    if (((((!g && !o.noBubble)) && !q.isWindow(f)))) {\n                        s = ((o.delegateType || t));\n                        l = ((bb.test(((s + t))) ? f : f.parentNode));\n                        for (m = f; l; l = l.parentNode) {\n                            r.push([l,s,]);\n                            m = l;\n                        };\n                    ;\n                        ((((m === ((f.ownerDocument || e)))) && r.push([((((m.defaultView || m.parentWindow)) || a)),s,])));\n                    }\n                ;\n                ;\n                    for (k = 0; ((((k < r.length)) && !c.isPropagationStopped())); k++) {\n                        l = r[k][0];\n                        c.type = r[k][1];\n                        p = ((((q._data(l, \"events\") || {\n                        }))[c.type] && q._data(l, \"handle\")));\n                        ((p && p.apply(l, d)));\n                        p = ((n && l[n]));\n                        ((((((((p && q.acceptData(l))) && p.apply)) && ((p.apply(l, d) === !1)))) && c.preventDefault()));\n                    };\n                ;\n                    c.type = t;\n                    if (((((((((((((((((!g && !c.isDefaultPrevented())) && ((!o._default || ((o._default.apply(f.ownerDocument, d) === !1)))))) && ((((t !== \"click\")) || !q.nodeName(f, \"a\"))))) && q.acceptData(f))) && n)) && f[t])) && ((((((t !== \"JSBNG__focus\")) && ((t !== \"JSBNG__blur\")))) || ((c.target.offsetWidth !== 0)))))) && !q.isWindow(f)))) {\n                        m = f[n];\n                        ((m && (f[n] = null)));\n                        q.JSBNG__event.triggered = t;\n                        f[t]();\n                        q.JSBNG__event.triggered = b;\n                        ((m && (f[n] = m)));\n                    }\n                ;\n                ;\n                    return c.result;\n                }\n            ;\n            ;\n                return;\n            },\n            dispatch: function(c) {\n                c = q.JSBNG__event.fix(((c || a.JSBNG__event)));\n                var d, e, f, g, i, j, k, m, n, o, p = ((((q._data(this, \"events\") || {\n                }))[c.type] || [])), r = p.delegateCount, s = l.call(arguments), t = ((!c.exclusive && !c.namespace)), u = ((q.JSBNG__event.special[c.type] || {\n                })), v = [];\n                s[0] = c;\n                c.delegateTarget = this;\n                if (((u.preDispatch && ((u.preDispatch.call(this, c) === !1))))) {\n                    return;\n                }\n            ;\n            ;\n                if (((r && ((!c.button || ((c.type !== \"click\"))))))) {\n                    for (f = c.target; ((f != this)); f = ((f.parentNode || this))) {\n                        if (((((f.disabled !== !0)) || ((c.type !== \"click\"))))) {\n                            i = {\n                            };\n                            k = [];\n                            for (d = 0; ((d < r)); d++) {\n                                m = p[d];\n                                n = m.selector;\n                                ((((i[n] === b)) && (i[n] = ((m.needsContext ? ((q(n, this).index(f) >= 0)) : q.JSBNG__find(n, this, null, [f,]).length)))));\n                                ((i[n] && k.push(m)));\n                            };\n                        ;\n                            ((k.length && v.push({\n                                elem: f,\n                                matches: k\n                            })));\n                        }\n                    ;\n                    ;\n                    };\n                }\n            ;\n            ;\n                ((((p.length > r)) && v.push({\n                    elem: this,\n                    matches: p.slice(r)\n                })));\n                for (d = 0; ((((d < v.length)) && !c.isPropagationStopped())); d++) {\n                    j = v[d];\n                    c.currentTarget = j.elem;\n                    for (e = 0; ((((e < j.matches.length)) && !c.isImmediatePropagationStopped())); e++) {\n                        m = j.matches[e];\n                        if (((((t || ((!c.namespace && !m.namespace)))) || ((c.namespace_re && c.namespace_re.test(m.namespace)))))) {\n                            c.data = m.data;\n                            c.handleObj = m;\n                            g = ((((q.JSBNG__event.special[m.origType] || {\n                            })).handle || m.handler)).apply(j.elem, s);\n                            if (((g !== b))) {\n                                c.result = g;\n                                if (((g === !1))) {\n                                    c.preventDefault();\n                                    c.stopPropagation();\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                };\n            ;\n                ((u.postDispatch && u.postDispatch.call(this, c)));\n                return c.result;\n            },\n            props: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n            fixHooks: {\n            },\n            keyHooks: {\n                props: \"char charCode key keyCode\".split(\" \"),\n                filter: function(a, b) {\n                    ((((a.which == null)) && (a.which = ((((b.charCode != null)) ? b.charCode : b.keyCode)))));\n                    return a;\n                }\n            },\n            mouseHooks: {\n                props: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n                filter: function(a, c) {\n                    var d, f, g, i = c.button, j = c.fromElement;\n                    if (((((a.pageX == null)) && ((c.clientX != null))))) {\n                        d = ((a.target.ownerDocument || e));\n                        f = d.documentElement;\n                        g = d.body;\n                        a.pageX = ((((c.clientX + ((((((f && f.scrollLeft)) || ((g && g.scrollLeft)))) || 0)))) - ((((((f && f.clientLeft)) || ((g && g.clientLeft)))) || 0))));\n                        a.pageY = ((((c.clientY + ((((((f && f.scrollTop)) || ((g && g.scrollTop)))) || 0)))) - ((((((f && f.clientTop)) || ((g && g.clientTop)))) || 0))));\n                    }\n                ;\n                ;\n                    ((((!a.relatedTarget && j)) && (a.relatedTarget = ((((j === a.target)) ? c.toElement : j)))));\n                    ((((!a.which && ((i !== b)))) && (a.which = ((((i & 1)) ? 1 : ((((i & 2)) ? 3 : ((((i & 4)) ? 2 : 0)))))))));\n                    return a;\n                }\n            },\n            fix: function(a) {\n                if (a[q.expando]) {\n                    return a;\n                }\n            ;\n            ;\n                var b, c, d = a, f = ((q.JSBNG__event.fixHooks[a.type] || {\n                })), g = ((f.props ? this.props.concat(f.props) : this.props));\n                a = q.JSBNG__Event(d);\n                for (b = g.length; b; ) {\n                    c = g[--b];\n                    a[c] = d[c];\n                };\n            ;\n                ((a.target || (a.target = ((d.srcElement || e)))));\n                ((((a.target.nodeType === 3)) && (a.target = a.target.parentNode)));\n                a.metaKey = !!a.metaKey;\n                return ((f.filter ? f.filter(a, d) : a));\n            },\n            special: {\n                load: {\n                    noBubble: !0\n                },\n                JSBNG__focus: {\n                    delegateType: \"focusin\"\n                },\n                JSBNG__blur: {\n                    delegateType: \"focusout\"\n                },\n                beforeunload: {\n                    setup: function(a, b, c) {\n                        ((q.isWindow(this) && (this.JSBNG__onbeforeunload = c)));\n                    },\n                    teardown: function(a, b) {\n                        ((((this.JSBNG__onbeforeunload === b)) && (this.JSBNG__onbeforeunload = null)));\n                    }\n                }\n            },\n            simulate: function(a, b, c, d) {\n                var e = q.extend(new q.JSBNG__Event, c, {\n                    type: a,\n                    isSimulated: !0,\n                    originalEvent: {\n                    }\n                });\n                ((d ? q.JSBNG__event.trigger(e, null, b) : q.JSBNG__event.dispatch.call(b, e)));\n                ((e.isDefaultPrevented() && c.preventDefault()));\n            }\n        };\n        q.JSBNG__event.handle = q.JSBNG__event.dispatch;\n        q.removeEvent = ((e.JSBNG__removeEventListener ? function(a, b, c) {\n            ((a.JSBNG__removeEventListener && a.JSBNG__removeEventListener(b, c, !1)));\n        } : function(a, b, c) {\n            var d = ((\"JSBNG__on\" + b));\n            if (a.JSBNG__detachEvent) {\n                ((((typeof a[d] == \"undefined\")) && (a[d] = null)));\n                a.JSBNG__detachEvent(d, c);\n            }\n        ;\n        ;\n        }));\n        q.JSBNG__Event = function(a, b) {\n            if (!((this instanceof q.JSBNG__Event))) {\n                return new q.JSBNG__Event(a, b);\n            }\n        ;\n        ;\n            if (((a && a.type))) {\n                this.originalEvent = a;\n                this.type = a.type;\n                this.isDefaultPrevented = ((((((a.defaultPrevented || ((a.returnValue === !1)))) || ((a.getPreventDefault && a.getPreventDefault())))) ? eb : db));\n            }\n             else this.type = a;\n        ;\n        ;\n            ((b && q.extend(this, b)));\n            this.timeStamp = ((((a && a.timeStamp)) || q.now()));\n            this[q.expando] = !0;\n        };\n        q.JSBNG__Event.prototype = {\n            preventDefault: function() {\n                this.isDefaultPrevented = eb;\n                var a = this.originalEvent;\n                if (!a) {\n                    return;\n                }\n            ;\n            ;\n                ((a.preventDefault ? a.preventDefault() : a.returnValue = !1));\n            },\n            stopPropagation: function() {\n                this.isPropagationStopped = eb;\n                var a = this.originalEvent;\n                if (!a) {\n                    return;\n                }\n            ;\n            ;\n                ((a.stopPropagation && a.stopPropagation()));\n                a.cancelBubble = !0;\n            },\n            stopImmediatePropagation: function() {\n                this.isImmediatePropagationStopped = eb;\n                this.stopPropagation();\n            },\n            isDefaultPrevented: db,\n            isPropagationStopped: db,\n            isImmediatePropagationStopped: db\n        };\n        q.each({\n            mouseenter: \"mouseover\",\n            mouseleave: \"mouseout\"\n        }, function(a, b) {\n            q.JSBNG__event.special[a] = {\n                delegateType: b,\n                bindType: b,\n                handle: function(a) {\n                    var c, d = this, e = a.relatedTarget, f = a.handleObj, g = f.selector;\n                    if (((!e || ((((e !== d)) && !q.contains(d, e)))))) {\n                        a.type = f.origType;\n                        c = f.handler.apply(this, arguments);\n                        a.type = b;\n                    }\n                ;\n                ;\n                    return c;\n                }\n            };\n        });\n        ((q.support.submitBubbles || (q.JSBNG__event.special.submit = {\n            setup: function() {\n                if (q.nodeName(this, \"form\")) {\n                    return !1;\n                }\n            ;\n            ;\n                q.JSBNG__event.add(this, \"click._submit keypress._submit\", function(a) {\n                    var c = a.target, d = ((((q.nodeName(c, \"input\") || q.nodeName(c, \"button\"))) ? c.form : b));\n                    if (((d && !q._data(d, \"_submit_attached\")))) {\n                        q.JSBNG__event.add(d, \"submit._submit\", function(a) {\n                            a._submit_bubble = !0;\n                        });\n                        q._data(d, \"_submit_attached\", !0);\n                    }\n                ;\n                ;\n                });\n            },\n            postDispatch: function(a) {\n                if (a._submit_bubble) {\n                    delete a._submit_bubble;\n                    ((((this.parentNode && !a.isTrigger)) && q.JSBNG__event.simulate(\"submit\", this.parentNode, a, !0)));\n                }\n            ;\n            ;\n            },\n            teardown: function() {\n                if (q.nodeName(this, \"form\")) {\n                    return !1;\n                }\n            ;\n            ;\n                q.JSBNG__event.remove(this, \"._submit\");\n            }\n        })));\n        ((q.support.changeBubbles || (q.JSBNG__event.special.change = {\n            setup: function() {\n                if (W.test(this.nodeName)) {\n                    if (((((this.type === \"checkbox\")) || ((this.type === \"radio\"))))) {\n                        q.JSBNG__event.add(this, \"propertychange._change\", function(a) {\n                            ((((a.originalEvent.propertyName === \"checked\")) && (this._just_changed = !0)));\n                        });\n                        q.JSBNG__event.add(this, \"click._change\", function(a) {\n                            ((((this._just_changed && !a.isTrigger)) && (this._just_changed = !1)));\n                            q.JSBNG__event.simulate(\"change\", this, a, !0);\n                        });\n                    }\n                ;\n                ;\n                    return !1;\n                }\n            ;\n            ;\n                q.JSBNG__event.add(this, \"beforeactivate._change\", function(a) {\n                    var b = a.target;\n                    if (((W.test(b.nodeName) && !q._data(b, \"_change_attached\")))) {\n                        q.JSBNG__event.add(b, \"change._change\", function(a) {\n                            ((((((this.parentNode && !a.isSimulated)) && !a.isTrigger)) && q.JSBNG__event.simulate(\"change\", this.parentNode, a, !0)));\n                        });\n                        q._data(b, \"_change_attached\", !0);\n                    }\n                ;\n                ;\n                });\n            },\n            handle: function(a) {\n                var b = a.target;\n                if (((((((((this !== b)) || a.isSimulated)) || a.isTrigger)) || ((((b.type !== \"radio\")) && ((b.type !== \"checkbox\"))))))) {\n                    return a.handleObj.handler.apply(this, arguments);\n                }\n            ;\n            ;\n            },\n            teardown: function() {\n                q.JSBNG__event.remove(this, \"._change\");\n                return !W.test(this.nodeName);\n            }\n        })));\n        ((q.support.focusinBubbles || q.each({\n            JSBNG__focus: \"focusin\",\n            JSBNG__blur: \"focusout\"\n        }, function(a, b) {\n            var c = 0, d = function(a) {\n                q.JSBNG__event.simulate(b, a.target, q.JSBNG__event.fix(a), !0);\n            };\n            q.JSBNG__event.special[b] = {\n                setup: function() {\n                    ((((c++ === 0)) && e.JSBNG__addEventListener(a, d, !0)));\n                },\n                teardown: function() {\n                    ((((--c === 0)) && e.JSBNG__removeEventListener(a, d, !0)));\n                }\n            };\n        })));\n        q.fn.extend({\n            JSBNG__on: function(a, c, d, e, f) {\n                var g, i;\n                if (((typeof a == \"object\"))) {\n                    if (((typeof c != \"string\"))) {\n                        d = ((d || c));\n                        c = b;\n                    }\n                ;\n                ;\n                    {\n                        var fin24keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin24i = (0);\n                        (0);\n                        for (; (fin24i < fin24keys.length); (fin24i++)) {\n                            ((i) = (fin24keys[fin24i]));\n                            {\n                                this.JSBNG__on(i, c, d, a[i], f);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    return this;\n                }\n            ;\n            ;\n                if (((((d == null)) && ((e == null))))) {\n                    e = c;\n                    d = c = b;\n                }\n                 else if (((e == null))) {\n                    if (((typeof c == \"string\"))) {\n                        e = d;\n                        d = b;\n                    }\n                     else {\n                        e = d;\n                        d = c;\n                        c = b;\n                    }\n                ;\n                }\n                \n            ;\n            ;\n                if (((e === !1))) {\n                    e = db;\n                }\n                 else {\n                    if (!e) {\n                        return this;\n                    }\n                ;\n                }\n            ;\n            ;\n                if (((f === 1))) {\n                    g = e;\n                    e = function(a) {\n                        q().off(a);\n                        return g.apply(this, arguments);\n                    };\n                    e.guid = ((g.guid || (g.guid = q.guid++)));\n                }\n            ;\n            ;\n                return this.each(function() {\n                    q.JSBNG__event.add(this, a, e, d, c);\n                });\n            },\n            one: function(a, b, c, d) {\n                return this.JSBNG__on(a, b, c, d, 1);\n            },\n            off: function(a, c, d) {\n                var e, f;\n                if (((((a && a.preventDefault)) && a.handleObj))) {\n                    e = a.handleObj;\n                    q(a.delegateTarget).off(((e.namespace ? ((((e.origType + \".\")) + e.namespace)) : e.origType)), e.selector, e.handler);\n                    return this;\n                }\n            ;\n            ;\n                if (((typeof a == \"object\"))) {\n                    {\n                        var fin25keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin25i = (0);\n                        (0);\n                        for (; (fin25i < fin25keys.length); (fin25i++)) {\n                            ((f) = (fin25keys[fin25i]));\n                            {\n                                this.off(f, c, a[f]);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    return this;\n                }\n            ;\n            ;\n                if (((((c === !1)) || ((typeof c == \"function\"))))) {\n                    d = c;\n                    c = b;\n                }\n            ;\n            ;\n                ((((d === !1)) && (d = db)));\n                return this.each(function() {\n                    q.JSBNG__event.remove(this, a, d, c);\n                });\n            },\n            bind: function(a, b, c) {\n                return this.JSBNG__on(a, null, b, c);\n            },\n            unbind: function(a, b) {\n                return this.off(a, null, b);\n            },\n            live: function(a, b, c) {\n                q(this.context).JSBNG__on(a, this.selector, b, c);\n                return this;\n            },\n            die: function(a, b) {\n                q(this.context).off(a, ((this.selector || \"**\")), b);\n                return this;\n            },\n            delegate: function(a, b, c, d) {\n                return this.JSBNG__on(b, a, c, d);\n            },\n            undelegate: function(a, b, c) {\n                return ((((arguments.length === 1)) ? this.off(a, \"**\") : this.off(b, ((a || \"**\")), c)));\n            },\n            trigger: function(a, b) {\n                return this.each(function() {\n                    q.JSBNG__event.trigger(a, b, this);\n                });\n            },\n            triggerHandler: function(a, b) {\n                if (this[0]) {\n                    return q.JSBNG__event.trigger(a, b, this[0], !0);\n                }\n            ;\n            ;\n            },\n            toggle: function(a) {\n                var b = arguments, c = ((a.guid || q.guid++)), d = 0, e = function(c) {\n                    var e = ((((q._data(this, ((\"lastToggle\" + a.guid))) || 0)) % d));\n                    q._data(this, ((\"lastToggle\" + a.guid)), ((e + 1)));\n                    c.preventDefault();\n                    return ((b[e].apply(this, arguments) || !1));\n                };\n                e.guid = c;\n                while (((d < b.length))) {\n                    b[d++].guid = c;\n                ;\n                };\n            ;\n                return this.click(e);\n            },\n            hover: function(a, b) {\n                return this.mouseenter(a).mouseleave(((b || a)));\n            }\n        });\n        q.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"), function(a, b) {\n            q.fn[b] = function(a, c) {\n                if (((c == null))) {\n                    c = a;\n                    a = null;\n                }\n            ;\n            ;\n                return ((((arguments.length > 0)) ? this.JSBNG__on(b, null, a, c) : this.trigger(b)));\n            };\n            ((Z.test(b) && (q.JSBNG__event.fixHooks[b] = q.JSBNG__event.keyHooks)));\n            ((ab.test(b) && (q.JSBNG__event.fixHooks[b] = q.JSBNG__event.mouseHooks)));\n        });\n        (function(a, b) {\n            function fb(a, b, c, d) {\n                c = ((c || []));\n                b = ((b || s));\n                var e, f, j, k, l = b.nodeType;\n                if (((!a || ((typeof a != \"string\"))))) {\n                    return c;\n                }\n            ;\n            ;\n                if (((((l !== 1)) && ((l !== 9))))) {\n                    return [];\n                }\n            ;\n            ;\n                j = g(b);\n                if (((!j && !d))) {\n                    if (e = Q.exec(a)) {\n                        if (k = e[1]) {\n                            if (((l === 9))) {\n                                f = b.getElementById(k);\n                                if (((!f || !f.parentNode))) {\n                                    return c;\n                                }\n                            ;\n                            ;\n                                if (((f.id === k))) {\n                                    c.push(f);\n                                    return c;\n                                }\n                            ;\n                            ;\n                            }\n                             else if (((((((b.ownerDocument && (f = b.ownerDocument.getElementById(k)))) && i(b, f))) && ((f.id === k))))) {\n                                c.push(f);\n                                return c;\n                            }\n                            \n                        ;\n                        ;\n                        }\n                         else {\n                            if (e[2]) {\n                                x.apply(c, y.call(b.getElementsByTagName(a), 0));\n                                return c;\n                            }\n                        ;\n                        ;\n                            if ((((((k = e[3]) && cb)) && b.getElementsByClassName))) {\n                                x.apply(c, y.call(b.getElementsByClassName(k), 0));\n                                return c;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    }\n                ;\n                }\n            ;\n            ;\n                return sb(a.replace(M, \"$1\"), b, c, d, j);\n            };\n        ;\n            function gb(a) {\n                return function(b) {\n                    var c = b.nodeName.toLowerCase();\n                    return ((((c === \"input\")) && ((b.type === a))));\n                };\n            };\n        ;\n            function hb(a) {\n                return function(b) {\n                    var c = b.nodeName.toLowerCase();\n                    return ((((((c === \"input\")) || ((c === \"button\")))) && ((b.type === a))));\n                };\n            };\n        ;\n            function ib(a) {\n                return A(function(b) {\n                    b = +b;\n                    return A(function(c, d) {\n                        var e, f = a([], c.length, b), g = f.length;\n                        while (g--) {\n                            ((c[e = f[g]] && (c[e] = !(d[e] = c[e]))));\n                        ;\n                        };\n                    ;\n                    });\n                });\n            };\n        ;\n            function jb(a, b, c) {\n                if (((a === b))) {\n                    return c;\n                }\n            ;\n            ;\n                var d = a.nextSibling;\n                while (d) {\n                    if (((d === b))) {\n                        return -1;\n                    }\n                ;\n                ;\n                    d = d.nextSibling;\n                };\n            ;\n                return 1;\n            };\n        ;\n            function kb(a, b) {\n                var c, d, f, g, i, j, k, l = D[p][((a + \" \"))];\n                if (l) {\n                    return ((b ? 0 : l.slice(0)));\n                }\n            ;\n            ;\n                i = a;\n                j = [];\n                k = e.preFilter;\n                while (i) {\n                    if (((!c || (d = N.exec(i))))) {\n                        ((d && (i = ((i.slice(d[0].length) || i)))));\n                        j.push(f = []);\n                    }\n                ;\n                ;\n                    c = !1;\n                    if (d = O.exec(i)) {\n                        f.push(c = new r(d.shift()));\n                        i = i.slice(c.length);\n                        c.type = d[0].replace(M, \" \");\n                    }\n                ;\n                ;\n                    {\n                        var fin26keys = ((window.top.JSBNG_Replay.forInKeys)((e.filter))), fin26i = (0);\n                        (0);\n                        for (; (fin26i < fin26keys.length); (fin26i++)) {\n                            ((g) = (fin26keys[fin26i]));\n                            {\n                                if ((((d = X[g].exec(i)) && ((!k[g] || (d = k[g](d))))))) {\n                                    f.push(c = new r(d.shift()));\n                                    i = i.slice(c.length);\n                                    c.type = g;\n                                    c.matches = d;\n                                }\n                            ;\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    if (!c) {\n                        break;\n                    }\n                ;\n                ;\n                };\n            ;\n                return ((b ? i.length : ((i ? fb.error(a) : D(a, j).slice(0)))));\n            };\n        ;\n            function lb(a, b, d) {\n                var e = b.dir, f = ((d && ((b.dir === \"parentNode\")))), g = v++;\n                return ((b.first ? function(b, c, d) {\n                    while (b = b[e]) {\n                        if (((f || ((b.nodeType === 1))))) {\n                            return a(b, c, d);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                } : function(b, d, i) {\n                    if (!i) {\n                        var j, k = ((((((u + \" \")) + g)) + \" \")), l = ((k + c));\n                        while (b = b[e]) {\n                            if (((f || ((b.nodeType === 1))))) {\n                                if ((((j = b[p]) === l))) {\n                                    return b.sizset;\n                                }\n                            ;\n                            ;\n                                if (((((typeof j == \"string\")) && ((j.indexOf(k) === 0))))) {\n                                    if (b.sizset) {\n                                        return b;\n                                    }\n                                ;\n                                ;\n                                }\n                                 else {\n                                    b[p] = l;\n                                    if (a(b, d, i)) {\n                                        b.sizset = !0;\n                                        return b;\n                                    }\n                                ;\n                                ;\n                                    b.sizset = !1;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    }\n                     else while (b = b[e]) {\n                        if (((f || ((b.nodeType === 1))))) {\n                            if (a(b, d, i)) {\n                                return b;\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                }));\n            };\n        ;\n            function mb(a) {\n                return ((((a.length > 1)) ? function(b, c, d) {\n                    var e = a.length;\n                    while (e--) {\n                        if (!a[e](b, c, d)) {\n                            return !1;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return !0;\n                } : a[0]));\n            };\n        ;\n            function nb(a, b, c, d, e) {\n                var f, g = [], i = 0, j = a.length, k = ((b != null));\n                for (; ((i < j)); i++) {\n                    if (f = a[i]) {\n                        if (((!c || c(f, d, e)))) {\n                            g.push(f);\n                            ((k && b.push(i)));\n                        }\n                    ;\n                    }\n                ;\n                ;\n                };\n            ;\n                return g;\n            };\n        ;\n            function ob(a, b, c, d, e, f) {\n                ((((d && !d[p])) && (d = ob(d))));\n                ((((e && !e[p])) && (e = ob(e, f))));\n                return A(function(f, g, i, j) {\n                    var k, l, m, n = [], o = [], p = g.length, q = ((f || rb(((b || \"*\")), ((i.nodeType ? [i,] : i)), []))), r = ((((a && ((f || !b)))) ? nb(q, n, a, i, j) : q)), s = ((c ? ((((e || ((f ? a : ((p || d)))))) ? [] : g)) : r));\n                    ((c && c(r, s, i, j)));\n                    if (d) {\n                        k = nb(s, o);\n                        d(k, [], i, j);\n                        l = k.length;\n                        while (l--) {\n                            if (m = k[l]) {\n                                s[o[l]] = !(r[o[l]] = m);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    }\n                ;\n                ;\n                    if (f) {\n                        if (((e || a))) {\n                            if (e) {\n                                k = [];\n                                l = s.length;\n                                while (l--) {\n                                    (((m = s[l]) && k.push(r[l] = m)));\n                                ;\n                                };\n                            ;\n                                e(null, s = [], k, j);\n                            }\n                        ;\n                        ;\n                            l = s.length;\n                            while (l--) {\n                                (((((m = s[l]) && (((k = ((e ? z.call(f, m) : n[l]))) > -1)))) && (f[k] = !(g[k] = m))));\n                            ;\n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        s = nb(((((s === g)) ? s.splice(p, s.length) : s)));\n                        ((e ? e(null, g, s, j) : x.apply(g, s)));\n                    }\n                ;\n                ;\n                });\n            };\n        ;\n            function pb(a) {\n                var b, c, d, f = a.length, g = e.relative[a[0].type], i = ((g || e.relative[\" \"])), j = ((g ? 1 : 0)), k = lb(function(a) {\n                    return ((a === b));\n                }, i, !0), l = lb(function(a) {\n                    return ((z.call(b, a) > -1));\n                }, i, !0), n = [function(a, c, d) {\n                    return ((((!g && ((d || ((c !== m)))))) || (((b = c).nodeType ? k(a, c, d) : l(a, c, d)))));\n                },];\n                for (; ((j < f)); j++) {\n                    if (c = e.relative[a[j].type]) n = [lb(mb(n), c),];\n                     else {\n                        c = e.filter[a[j].type].apply(null, a[j].matches);\n                        if (c[p]) {\n                            d = ++j;\n                            for (; ((d < f)); d++) {\n                                if (e.relative[a[d].type]) {\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                            return ob(((((j > 1)) && mb(n))), ((((j > 1)) && a.slice(0, ((j - 1))).join(\"\").replace(M, \"$1\"))), c, ((((j < d)) && pb(a.slice(j, d)))), ((((d < f)) && pb(a = a.slice(d)))), ((((d < f)) && a.join(\"\"))));\n                        }\n                    ;\n                    ;\n                        n.push(c);\n                    }\n                ;\n                ;\n                };\n            ;\n                return mb(n);\n            };\n        ;\n            function qb(a, b) {\n                var d = ((b.length > 0)), f = ((a.length > 0)), g = function(i, j, k, l, n) {\n                    var o, p, q, r = [], t = 0, v = \"0\", y = ((i && [])), z = ((n != null)), A = m, B = ((i || ((f && e.JSBNG__find.TAG(\"*\", ((((n && j.parentNode)) || j))))))), C = u += ((((A == null)) ? 1 : Math.E));\n                    if (z) {\n                        m = ((((j !== s)) && j));\n                        c = g.el;\n                    }\n                ;\n                ;\n                    for (; (((o = B[v]) != null)); v++) {\n                        if (((f && o))) {\n                            for (p = 0; q = a[p]; p++) {\n                                if (q(o, j, k)) {\n                                    l.push(o);\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                            if (z) {\n                                u = C;\n                                c = ++g.el;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (d) {\n                            (((o = ((!q && o))) && t--));\n                            ((i && y.push(o)));\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    t += v;\n                    if (((d && ((v !== t))))) {\n                        for (p = 0; q = b[p]; p++) {\n                            q(y, r, j, k);\n                        ;\n                        };\n                    ;\n                        if (i) {\n                            if (((t > 0))) {\n                                while (v--) {\n                                    ((((!y[v] && !r[v])) && (r[v] = w.call(l))));\n                                ;\n                                };\n                            }\n                        ;\n                        ;\n                            r = nb(r);\n                        }\n                    ;\n                    ;\n                        x.apply(l, r);\n                        ((((((((z && !i)) && ((r.length > 0)))) && ((((t + b.length)) > 1)))) && fb.uniqueSort(l)));\n                    }\n                ;\n                ;\n                    if (z) {\n                        u = C;\n                        m = A;\n                    }\n                ;\n                ;\n                    return y;\n                };\n                g.el = 0;\n                return ((d ? A(g) : g));\n            };\n        ;\n            function rb(a, b, c) {\n                var d = 0, e = b.length;\n                for (; ((d < e)); d++) {\n                    fb(a, b[d], c);\n                ;\n                };\n            ;\n                return c;\n            };\n        ;\n            function sb(a, b, c, d, f) {\n                var g, i, k, l, m, n = kb(a), o = n.length;\n                if (((!d && ((n.length === 1))))) {\n                    i = n[0] = n[0].slice(0);\n                    if (((((((((((i.length > 2)) && (((k = i[0]).type === \"ID\")))) && ((b.nodeType === 9)))) && !f)) && e.relative[i[1].type]))) {\n                        b = e.JSBNG__find.ID(k.matches[0].replace(W, \"\"), b, f)[0];\n                        if (!b) {\n                            return c;\n                        }\n                    ;\n                    ;\n                        a = a.slice(i.shift().length);\n                    }\n                ;\n                ;\n                    for (g = ((X.POS.test(a) ? -1 : ((i.length - 1)))); ((g >= 0)); g--) {\n                        k = i[g];\n                        if (e.relative[l = k.type]) {\n                            break;\n                        }\n                    ;\n                    ;\n                        if (m = e.JSBNG__find[l]) {\n                            if (d = m(k.matches[0].replace(W, \"\"), ((((S.test(i[0].type) && b.parentNode)) || b)), f)) {\n                                i.splice(g, 1);\n                                a = ((d.length && i.join(\"\")));\n                                if (!a) {\n                                    x.apply(c, y.call(d, 0));\n                                    return c;\n                                }\n                            ;\n                            ;\n                                break;\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                j(a, n)(d, b, f, c, S.test(a));\n                return c;\n            };\n        ;\n            function tb() {\n            \n            };\n        ;\n            var c, d, e, f, g, i, j, k, l, m, n = !0, o = \"undefined\", p = ((\"sizcache\" + Math.JSBNG__random())).replace(\".\", \"\"), r = String, s = a.JSBNG__document, t = s.documentElement, u = 0, v = 0, w = [].pop, x = [].push, y = [].slice, z = (([].indexOf || function(a) {\n                var b = 0, c = this.length;\n                for (; ((b < c)); b++) {\n                    if (((this[b] === a))) {\n                        return b;\n                    }\n                ;\n                ;\n                };\n            ;\n                return -1;\n            })), A = function(a, b) {\n                a[p] = ((((b == null)) || b));\n                return a;\n            }, B = function() {\n                var a = {\n                }, b = [];\n                return A(function(c, d) {\n                    ((((b.push(c) > e.cacheLength)) && delete a[b.shift()]));\n                    return a[((c + \" \"))] = d;\n                }, a);\n            }, C = B(), D = B(), E = B(), F = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\", G = \"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\", H = G.replace(\"w\", \"w#\"), I = \"([*^$|!~]?=)\", J = ((((((((((((((((((((((((((\"\\\\[\" + F)) + \"*(\")) + G)) + \")\")) + F)) + \"*(?:\")) + I)) + F)) + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\")) + H)) + \")|)|)\")) + F)) + \"*\\\\]\")), K = ((((((((\":(\" + G)) + \")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\")) + J)) + \")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\")), L = ((((((((\":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + F)) + \"*((?:-\\\\d)?\\\\d*)\")) + F)) + \"*\\\\)|)(?=[^-]|$)\")), M = new RegExp(((((((((\"^\" + F)) + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\")) + F)) + \"+$\")), \"g\"), N = new RegExp(((((((((\"^\" + F)) + \"*,\")) + F)) + \"*\"))), O = new RegExp(((((((((\"^\" + F)) + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f\\u003E+~])\")) + F)) + \"*\"))), P = new RegExp(K), Q = /^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/, R = /^:not/, S = /[\\x20\\t\\r\\n\\f]*[+~]/, T = /:not\\($/, U = /h\\d/i, V = /input|select|textarea|button/i, W = /\\\\(?!\\\\)/g, X = {\n                ID: new RegExp(((((\"^#(\" + G)) + \")\"))),\n                CLASS: new RegExp(((((\"^\\\\.(\" + G)) + \")\"))),\n                NAME: new RegExp(((((\"^\\\\[name=['\\\"]?(\" + G)) + \")['\\\"]?\\\\]\"))),\n                TAG: new RegExp(((((\"^(\" + G.replace(\"w\", \"w*\"))) + \")\"))),\n                ATTR: new RegExp(((\"^\" + J))),\n                PSEUDO: new RegExp(((\"^\" + K))),\n                POS: new RegExp(L, \"i\"),\n                CHILD: new RegExp(((((((((((((((((\"^:(only|nth|first|last)-child(?:\\\\(\" + F)) + \"*(even|odd|(([+-]|)(\\\\d*)n|)\")) + F)) + \"*(?:([+-]|)\")) + F)) + \"*(\\\\d+)|))\")) + F)) + \"*\\\\)|)\")), \"i\"),\n                needsContext: new RegExp(((((((\"^\" + F)) + \"*[\\u003E+~]|\")) + L)), \"i\")\n            }, Y = function(a) {\n                var b = s.createElement(\"div\");\n                try {\n                    return a(b);\n                } catch (c) {\n                    return !1;\n                } finally {\n                    b = null;\n                };\n            ;\n            }, Z = Y(function(a) {\n                a.appendChild(s.createComment(\"\"));\n                return !a.getElementsByTagName(\"*\").length;\n            }), ab = Y(function(a) {\n                a.innerHTML = \"\\u003Ca href='#'\\u003E\\u003C/a\\u003E\";\n                return ((((a.firstChild && ((typeof a.firstChild.getAttribute !== o)))) && ((a.firstChild.getAttribute(\"href\") === \"#\"))));\n            }), bb = Y(function(a) {\n                a.innerHTML = \"\\u003Cselect\\u003E\\u003C/select\\u003E\";\n                var b = typeof a.lastChild.getAttribute(\"multiple\");\n                return ((((b !== \"boolean\")) && ((b !== \"string\"))));\n            }), cb = Y(function(a) {\n                a.innerHTML = \"\\u003Cdiv class='hidden e'\\u003E\\u003C/div\\u003E\\u003Cdiv class='hidden'\\u003E\\u003C/div\\u003E\";\n                if (((!a.getElementsByClassName || !a.getElementsByClassName(\"e\").length))) {\n                    return !1;\n                }\n            ;\n            ;\n                a.lastChild.className = \"e\";\n                return ((a.getElementsByClassName(\"e\").length === 2));\n            }), db = Y(function(a) {\n                a.id = ((p + 0));\n                a.innerHTML = ((((((((\"\\u003Ca name='\" + p)) + \"'\\u003E\\u003C/a\\u003E\\u003Cdiv name='\")) + p)) + \"'\\u003E\\u003C/div\\u003E\"));\n                t.insertBefore(a, t.firstChild);\n                var b = ((s.getElementsByName && ((s.getElementsByName(p).length === ((2 + s.getElementsByName(((p + 0))).length))))));\n                d = !s.getElementById(p);\n                t.removeChild(a);\n                return b;\n            });\n            try {\n                y.call(t.childNodes, 0)[0].nodeType;\n            } catch (eb) {\n                y = function(a) {\n                    var b, c = [];\n                    for (; b = this[a]; a++) {\n                        c.push(b);\n                    ;\n                    };\n                ;\n                    return c;\n                };\n            };\n        ;\n            fb.matches = function(a, b) {\n                return fb(a, null, null, b);\n            };\n            fb.matchesSelector = function(a, b) {\n                return ((fb(b, null, null, [a,]).length > 0));\n            };\n            f = fb.getText = function(a) {\n                var b, c = \"\", d = 0, e = a.nodeType;\n                if (e) {\n                    if (((((((e === 1)) || ((e === 9)))) || ((e === 11))))) {\n                        if (((typeof a.textContent == \"string\"))) {\n                            return a.textContent;\n                        }\n                    ;\n                    ;\n                        for (a = a.firstChild; a; a = a.nextSibling) {\n                            c += f(a);\n                        ;\n                        };\n                    ;\n                    }\n                     else if (((((e === 3)) || ((e === 4))))) {\n                        return a.nodeValue;\n                    }\n                    \n                ;\n                ;\n                }\n                 else for (; b = a[d]; d++) {\n                    c += f(b);\n                ;\n                }\n            ;\n            ;\n                return c;\n            };\n            g = fb.isXML = function(a) {\n                var b = ((a && ((a.ownerDocument || a)).documentElement));\n                return ((b ? ((b.nodeName !== \"HTML\")) : !1));\n            };\n            i = fb.contains = ((t.contains ? function(a, b) {\n                var c = ((((a.nodeType === 9)) ? a.documentElement : a)), d = ((b && b.parentNode));\n                return ((((a === d)) || !!((((((d && ((d.nodeType === 1)))) && c.contains)) && c.contains(d)))));\n            } : ((t.compareDocumentPosition ? function(a, b) {\n                return ((b && !!((a.compareDocumentPosition(b) & 16))));\n            } : function(a, b) {\n                while (b = b.parentNode) {\n                    if (((b === a))) {\n                        return !0;\n                    }\n                ;\n                ;\n                };\n            ;\n                return !1;\n            }))));\n            fb.attr = function(a, b) {\n                var c, d = g(a);\n                ((d || (b = b.toLowerCase())));\n                if (c = e.attrHandle[b]) {\n                    return c(a);\n                }\n            ;\n            ;\n                if (((d || bb))) {\n                    return a.getAttribute(b);\n                }\n            ;\n            ;\n                c = a.getAttributeNode(b);\n                return ((c ? ((((typeof a[b] == \"boolean\")) ? ((a[b] ? b : null)) : ((c.specified ? c.value : null)))) : null));\n            };\n            e = fb.selectors = {\n                cacheLength: 50,\n                createPseudo: A,\n                match: X,\n                attrHandle: ((ab ? {\n                } : {\n                    href: function(a) {\n                        return a.getAttribute(\"href\", 2);\n                    },\n                    type: function(a) {\n                        return a.getAttribute(\"type\");\n                    }\n                })),\n                JSBNG__find: {\n                    ID: ((d ? function(a, b, c) {\n                        if (((((typeof b.getElementById !== o)) && !c))) {\n                            var d = b.getElementById(a);\n                            return ((((d && d.parentNode)) ? [d,] : []));\n                        }\n                    ;\n                    ;\n                    } : function(a, c, d) {\n                        if (((((typeof c.getElementById !== o)) && !d))) {\n                            var e = c.getElementById(a);\n                            return ((e ? ((((((e.id === a)) || ((((typeof e.getAttributeNode !== o)) && ((e.getAttributeNode(\"id\").value === a)))))) ? [e,] : b)) : []));\n                        }\n                    ;\n                    ;\n                    })),\n                    TAG: ((Z ? function(a, b) {\n                        if (((typeof b.getElementsByTagName !== o))) {\n                            return b.getElementsByTagName(a);\n                        }\n                    ;\n                    ;\n                    } : function(a, b) {\n                        var c = b.getElementsByTagName(a);\n                        if (((a === \"*\"))) {\n                            var d, e = [], f = 0;\n                            for (; d = c[f]; f++) {\n                                ((((d.nodeType === 1)) && e.push(d)));\n                            ;\n                            };\n                        ;\n                            return e;\n                        }\n                    ;\n                    ;\n                        return c;\n                    })),\n                    NAME: ((db && function(a, b) {\n                        if (((typeof b.getElementsByName !== o))) {\n                            return b.getElementsByName(JSBNG__name);\n                        }\n                    ;\n                    ;\n                    })),\n                    CLASS: ((cb && function(a, b, c) {\n                        if (((((typeof b.getElementsByClassName !== o)) && !c))) {\n                            return b.getElementsByClassName(a);\n                        }\n                    ;\n                    ;\n                    }))\n                },\n                relative: {\n                    \"\\u003E\": {\n                        dir: \"parentNode\",\n                        first: !0\n                    },\n                    \" \": {\n                        dir: \"parentNode\"\n                    },\n                    \"+\": {\n                        dir: \"previousSibling\",\n                        first: !0\n                    },\n                    \"~\": {\n                        dir: \"previousSibling\"\n                    }\n                },\n                preFilter: {\n                    ATTR: function(a) {\n                        a[1] = a[1].replace(W, \"\");\n                        a[3] = ((((a[4] || a[5])) || \"\")).replace(W, \"\");\n                        ((((a[2] === \"~=\")) && (a[3] = ((((\" \" + a[3])) + \" \")))));\n                        return a.slice(0, 4);\n                    },\n                    CHILD: function(a) {\n                        a[1] = a[1].toLowerCase();\n                        if (((a[1] === \"nth\"))) {\n                            ((a[2] || fb.error(a[0])));\n                            a[3] = +((a[3] ? ((a[4] + ((a[5] || 1)))) : ((2 * ((((a[2] === \"even\")) || ((a[2] === \"odd\"))))))));\n                            a[4] = +((((a[6] + a[7])) || ((a[2] === \"odd\"))));\n                        }\n                         else ((a[2] && fb.error(a[0])));\n                    ;\n                    ;\n                        return a;\n                    },\n                    PSEUDO: function(a) {\n                        var b, c;\n                        if (X.CHILD.test(a[0])) {\n                            return null;\n                        }\n                    ;\n                    ;\n                        if (a[3]) {\n                            a[2] = a[3];\n                        }\n                         else {\n                            if (b = a[4]) {\n                                if (((((P.test(b) && (c = kb(b, !0)))) && (c = ((b.indexOf(\")\", ((b.length - c))) - b.length)))))) {\n                                    b = b.slice(0, c);\n                                    a[0] = a[0].slice(0, c);\n                                }\n                            ;\n                            ;\n                                a[2] = b;\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                        return a.slice(0, 3);\n                    }\n                },\n                filter: {\n                    ID: ((d ? function(a) {\n                        a = a.replace(W, \"\");\n                        return function(b) {\n                            return ((b.getAttribute(\"id\") === a));\n                        };\n                    } : function(a) {\n                        a = a.replace(W, \"\");\n                        return function(b) {\n                            var c = ((((typeof b.getAttributeNode !== o)) && b.getAttributeNode(\"id\")));\n                            return ((c && ((c.value === a))));\n                        };\n                    })),\n                    TAG: function(a) {\n                        if (((a === \"*\"))) {\n                            return function() {\n                                return !0;\n                            };\n                        }\n                    ;\n                    ;\n                        a = a.replace(W, \"\").toLowerCase();\n                        return function(b) {\n                            return ((b.nodeName && ((b.nodeName.toLowerCase() === a))));\n                        };\n                    },\n                    CLASS: function(a) {\n                        var b = C[p][((a + \" \"))];\n                        return ((b || (((b = new RegExp(((((((((((((\"(^|\" + F)) + \")\")) + a)) + \"(\")) + F)) + \"|$)\")))) && C(a, function(a) {\n                            return b.test(((((a.className || ((((typeof a.getAttribute !== o)) && a.getAttribute(\"class\"))))) || \"\")));\n                        })))));\n                    },\n                    ATTR: function(a, b, c) {\n                        return function(d, e) {\n                            var f = fb.attr(d, a);\n                            if (((f == null))) {\n                                return ((b === \"!=\"));\n                            }\n                        ;\n                        ;\n                            if (!b) {\n                                return !0;\n                            }\n                        ;\n                        ;\n                            f += \"\";\n                            return ((((b === \"=\")) ? ((f === c)) : ((((b === \"!=\")) ? ((f !== c)) : ((((b === \"^=\")) ? ((c && ((f.indexOf(c) === 0)))) : ((((b === \"*=\")) ? ((c && ((f.indexOf(c) > -1)))) : ((((b === \"$=\")) ? ((c && ((f.substr(((f.length - c.length))) === c)))) : ((((b === \"~=\")) ? ((((((\" \" + f)) + \" \")).indexOf(c) > -1)) : ((((b === \"|=\")) ? ((((f === c)) || ((f.substr(0, ((c.length + 1))) === ((c + \"-\")))))) : !1))))))))))))));\n                        };\n                    },\n                    CHILD: function(a, b, c, d) {\n                        return ((((a === \"nth\")) ? function(a) {\n                            var b, e, f = a.parentNode;\n                            if (((((c === 1)) && ((d === 0))))) {\n                                return !0;\n                            }\n                        ;\n                        ;\n                            if (f) {\n                                e = 0;\n                                for (b = f.firstChild; b; b = b.nextSibling) {\n                                    if (((b.nodeType === 1))) {\n                                        e++;\n                                        if (((a === b))) {\n                                            break;\n                                        }\n                                    ;\n                                    ;\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                            }\n                        ;\n                        ;\n                            e -= d;\n                            return ((((e === c)) || ((((((e % c)) === 0)) && ((((e / c)) >= 0))))));\n                        } : function(b) {\n                            var c = b;\n                            switch (a) {\n                              case \"only\":\n                            \n                              case \"first\":\n                                while (c = c.previousSibling) {\n                                    if (((c.nodeType === 1))) {\n                                        return !1;\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                if (((a === \"first\"))) {\n                                    return !0;\n                                }\n                            ;\n                            ;\n                                c = b;\n                              case \"last\":\n                                while (c = c.nextSibling) {\n                                    if (((c.nodeType === 1))) {\n                                        return !1;\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                return !0;\n                            };\n                        ;\n                        }));\n                    },\n                    PSEUDO: function(a, b) {\n                        var c, d = ((((e.pseudos[a] || e.setFilters[a.toLowerCase()])) || fb.error(((\"unsupported pseudo: \" + a)))));\n                        if (d[p]) {\n                            return d(b);\n                        }\n                    ;\n                    ;\n                        if (((d.length > 1))) {\n                            c = [a,a,\"\",b,];\n                            return ((e.setFilters.hasOwnProperty(a.toLowerCase()) ? A(function(a, c) {\n                                var e, f = d(a, b), g = f.length;\n                                while (g--) {\n                                    e = z.call(a, f[g]);\n                                    a[e] = !(c[e] = f[g]);\n                                };\n                            ;\n                            }) : function(a) {\n                                return d(a, 0, c);\n                            }));\n                        }\n                    ;\n                    ;\n                        return d;\n                    }\n                },\n                pseudos: {\n                    not: A(function(a) {\n                        var b = [], c = [], d = j(a.replace(M, \"$1\"));\n                        return ((d[p] ? A(function(a, b, c, e) {\n                            var f, g = d(a, null, e, []), i = a.length;\n                            while (i--) {\n                                if (f = g[i]) {\n                                    a[i] = !(b[i] = f);\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                        }) : function(a, e, f) {\n                            b[0] = a;\n                            d(b, null, f, c);\n                            return !c.pop();\n                        }));\n                    }),\n                    has: A(function(a) {\n                        return function(b) {\n                            return ((fb(a, b).length > 0));\n                        };\n                    }),\n                    contains: A(function(a) {\n                        return function(b) {\n                            return ((((((b.textContent || b.innerText)) || f(b))).indexOf(a) > -1));\n                        };\n                    }),\n                    enabled: function(a) {\n                        return ((a.disabled === !1));\n                    },\n                    disabled: function(a) {\n                        return ((a.disabled === !0));\n                    },\n                    checked: function(a) {\n                        var b = a.nodeName.toLowerCase();\n                        return ((((((b === \"input\")) && !!a.checked)) || ((((b === \"option\")) && !!a.selected))));\n                    },\n                    selected: function(a) {\n                        ((a.parentNode && a.parentNode.selectedIndex));\n                        return ((a.selected === !0));\n                    },\n                    parent: function(a) {\n                        return !e.pseudos.empty(a);\n                    },\n                    empty: function(a) {\n                        var b;\n                        a = a.firstChild;\n                        while (a) {\n                            if (((((((a.nodeName > \"@\")) || (((b = a.nodeType) === 3)))) || ((b === 4))))) {\n                                return !1;\n                            }\n                        ;\n                        ;\n                            a = a.nextSibling;\n                        };\n                    ;\n                        return !0;\n                    },\n                    header: function(a) {\n                        return U.test(a.nodeName);\n                    },\n                    text: function(a) {\n                        var b, c;\n                        return ((((((a.nodeName.toLowerCase() === \"input\")) && (((b = a.type) === \"text\")))) && (((((c = a.getAttribute(\"type\")) == null)) || ((c.toLowerCase() === b))))));\n                    },\n                    radio: gb(\"radio\"),\n                    checkbox: gb(\"checkbox\"),\n                    file: gb(\"file\"),\n                    password: gb(\"password\"),\n                    image: gb(\"image\"),\n                    submit: hb(\"submit\"),\n                    reset: hb(\"reset\"),\n                    button: function(a) {\n                        var b = a.nodeName.toLowerCase();\n                        return ((((((b === \"input\")) && ((a.type === \"button\")))) || ((b === \"button\"))));\n                    },\n                    input: function(a) {\n                        return V.test(a.nodeName);\n                    },\n                    JSBNG__focus: function(a) {\n                        var b = a.ownerDocument;\n                        return ((((((a === b.activeElement)) && ((!b.hasFocus || b.hasFocus())))) && !!((((a.type || a.href)) || ~a.tabIndex))));\n                    },\n                    active: function(a) {\n                        return ((a === a.ownerDocument.activeElement));\n                    },\n                    first: ib(function() {\n                        return [0,];\n                    }),\n                    last: ib(function(a, b) {\n                        return [((b - 1)),];\n                    }),\n                    eq: ib(function(a, b, c) {\n                        return [((((c < 0)) ? ((c + b)) : c)),];\n                    }),\n                    even: ib(function(a, b) {\n                        for (var c = 0; ((c < b)); c += 2) {\n                            a.push(c);\n                        ;\n                        };\n                    ;\n                        return a;\n                    }),\n                    odd: ib(function(a, b) {\n                        for (var c = 1; ((c < b)); c += 2) {\n                            a.push(c);\n                        ;\n                        };\n                    ;\n                        return a;\n                    }),\n                    lt: ib(function(a, b, c) {\n                        for (var d = ((((c < 0)) ? ((c + b)) : c)); ((--d >= 0)); ) {\n                            a.push(d);\n                        ;\n                        };\n                    ;\n                        return a;\n                    }),\n                    gt: ib(function(a, b, c) {\n                        for (var d = ((((c < 0)) ? ((c + b)) : c)); ((++d < b)); ) {\n                            a.push(d);\n                        ;\n                        };\n                    ;\n                        return a;\n                    })\n                }\n            };\n            k = ((t.compareDocumentPosition ? function(a, b) {\n                if (((a === b))) {\n                    l = !0;\n                    return 0;\n                }\n            ;\n            ;\n                return ((((((!a.compareDocumentPosition || !b.compareDocumentPosition)) ? a.compareDocumentPosition : ((a.compareDocumentPosition(b) & 4)))) ? -1 : 1));\n            } : function(a, b) {\n                if (((a === b))) {\n                    l = !0;\n                    return 0;\n                }\n            ;\n            ;\n                if (((a.sourceIndex && b.sourceIndex))) {\n                    return ((a.sourceIndex - b.sourceIndex));\n                }\n            ;\n            ;\n                var c, d, e = [], f = [], g = a.parentNode, i = b.parentNode, j = g;\n                if (((g === i))) {\n                    return jb(a, b);\n                }\n            ;\n            ;\n                if (!g) {\n                    return -1;\n                }\n            ;\n            ;\n                if (!i) {\n                    return 1;\n                }\n            ;\n            ;\n                while (j) {\n                    e.unshift(j);\n                    j = j.parentNode;\n                };\n            ;\n                j = i;\n                while (j) {\n                    f.unshift(j);\n                    j = j.parentNode;\n                };\n            ;\n                c = e.length;\n                d = f.length;\n                for (var k = 0; ((((k < c)) && ((k < d)))); k++) {\n                    if (((e[k] !== f[k]))) {\n                        return jb(e[k], f[k]);\n                    }\n                ;\n                ;\n                };\n            ;\n                return ((((k === c)) ? jb(a, f[k], -1) : jb(e[k], b, 1)));\n            }));\n            [0,0,].sort(k);\n            n = !l;\n            fb.uniqueSort = function(a) {\n                var b, c = [], d = 1, e = 0;\n                l = n;\n                a.sort(k);\n                if (l) {\n                    for (; b = a[d]; d++) {\n                        ((((b === a[((d - 1))])) && (e = c.push(d))));\n                    ;\n                    };\n                ;\n                    while (e--) {\n                        a.splice(c[e], 1);\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                return a;\n            };\n            fb.error = function(a) {\n                throw new Error(((\"Syntax error, unrecognized expression: \" + a)));\n            };\n            j = fb.compile = function(a, b) {\n                var c, d = [], e = [], f = E[p][((a + \" \"))];\n                if (!f) {\n                    ((b || (b = kb(a))));\n                    c = b.length;\n                    while (c--) {\n                        f = pb(b[c]);\n                        ((f[p] ? d.push(f) : e.push(f)));\n                    };\n                ;\n                    f = E(a, qb(e, d));\n                }\n            ;\n            ;\n                return f;\n            };\n            ((s.querySelectorAll && function() {\n                var a, b = sb, c = /'|\\\\/g, d = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g, e = [\":focus\",], f = [\":active\",], i = ((((((((t.matchesSelector || t.mozMatchesSelector)) || t.webkitMatchesSelector)) || t.oMatchesSelector)) || t.msMatchesSelector));\n                Y(function(a) {\n                    a.innerHTML = \"\\u003Cselect\\u003E\\u003Coption selected=''\\u003E\\u003C/option\\u003E\\u003C/select\\u003E\";\n                    ((a.querySelectorAll(\"[selected]\").length || e.push(((((\"\\\\[\" + F)) + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\")))));\n                    ((a.querySelectorAll(\":checked\").length || e.push(\":checked\")));\n                });\n                Y(function(a) {\n                    a.innerHTML = \"\\u003Cp test=''\\u003E\\u003C/p\\u003E\";\n                    ((a.querySelectorAll(\"[test^='']\").length && e.push(((((\"[*^$]=\" + F)) + \"*(?:\\\"\\\"|'')\")))));\n                    a.innerHTML = \"\\u003Cinput type='hidden'/\\u003E\";\n                    ((a.querySelectorAll(\":enabled\").length || e.push(\":enabled\", \":disabled\")));\n                });\n                e = new RegExp(e.join(\"|\"));\n                sb = function(a, d, f, g, i) {\n                    if (((((!g && !i)) && !e.test(a)))) {\n                        var j, k, l = !0, m = p, n = d, o = ((((d.nodeType === 9)) && a));\n                        if (((((d.nodeType === 1)) && ((d.nodeName.toLowerCase() !== \"object\"))))) {\n                            j = kb(a);\n                            (((l = d.getAttribute(\"id\")) ? m = l.replace(c, \"\\\\$&\") : d.setAttribute(\"id\", m)));\n                            m = ((((\"[id='\" + m)) + \"'] \"));\n                            k = j.length;\n                            while (k--) {\n                                j[k] = ((m + j[k].join(\"\")));\n                            ;\n                            };\n                        ;\n                            n = ((((S.test(a) && d.parentNode)) || d));\n                            o = j.join(\",\");\n                        }\n                    ;\n                    ;\n                        if (o) {\n                            try {\n                                x.apply(f, y.call(n.querySelectorAll(o), 0));\n                                return f;\n                            } catch (q) {\n                            \n                            } finally {\n                                ((l || d.removeAttribute(\"id\")));\n                            };\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return b(a, d, f, g, i);\n                };\n                if (i) {\n                    Y(function(b) {\n                        a = i.call(b, \"div\");\n                        try {\n                            i.call(b, \"[test!='']:sizzle\");\n                            f.push(\"!=\", K);\n                        } catch (c) {\n                        \n                        };\n                    ;\n                    });\n                    f = new RegExp(f.join(\"|\"));\n                    fb.matchesSelector = function(b, c) {\n                        c = c.replace(d, \"='$1']\");\n                        if (((((!g(b) && !f.test(c))) && !e.test(c)))) {\n                            try {\n                                var j = i.call(b, c);\n                                if (((((j || a)) || ((b.JSBNG__document && ((b.JSBNG__document.nodeType !== 11))))))) {\n                                    return j;\n                                }\n                            ;\n                            ;\n                            } catch (k) {\n                            \n                            };\n                        }\n                    ;\n                    ;\n                        return ((fb(c, null, null, [b,]).length > 0));\n                    };\n                }\n            ;\n            ;\n            }()));\n            e.pseudos.nth = e.pseudos.eq;\n            e.filters = tb.prototype = e.pseudos;\n            e.setFilters = new tb;\n            fb.attr = q.attr;\n            q.JSBNG__find = fb;\n            q.expr = fb.selectors;\n            q.expr[\":\"] = q.expr.pseudos;\n            q.unique = fb.uniqueSort;\n            q.text = fb.getText;\n            q.isXMLDoc = fb.isXML;\n            q.contains = fb.contains;\n        })(a);\n        var fb = /Until$/, gb = /^(?:parents|prev(?:Until|All))/, hb = /^.[^:#\\[\\.,]*$/, ib = q.expr.match.needsContext, jb = {\n            children: !0,\n            contents: !0,\n            next: !0,\n            prev: !0\n        };\n        q.fn.extend({\n            JSBNG__find: function(a) {\n                var b, c, d, e, f, g, i = this;\n                if (((typeof a != \"string\"))) {\n                    return q(a).filter(function() {\n                        for (b = 0, c = i.length; ((b < c)); b++) {\n                            if (q.contains(i[b], this)) {\n                                return !0;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    });\n                }\n            ;\n            ;\n                g = this.pushStack(\"\", \"JSBNG__find\", a);\n                for (b = 0, c = this.length; ((b < c)); b++) {\n                    d = g.length;\n                    q.JSBNG__find(a, this[b], g);\n                    if (((b > 0))) {\n                        for (e = d; ((e < g.length)); e++) {\n                            for (f = 0; ((f < d)); f++) {\n                                if (((g[f] === g[e]))) {\n                                    g.splice(e--, 1);\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                        };\n                    }\n                ;\n                ;\n                };\n            ;\n                return g;\n            },\n            has: function(a) {\n                var b, c = q(a, this), d = c.length;\n                return this.filter(function() {\n                    for (b = 0; ((b < d)); b++) {\n                        if (q.contains(this, c[b])) {\n                            return !0;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                });\n            },\n            not: function(a) {\n                return this.pushStack(mb(this, a, !1), \"not\", a);\n            },\n            filter: function(a) {\n                return this.pushStack(mb(this, a, !0), \"filter\", a);\n            },\n            is: function(a) {\n                return ((!!a && ((((typeof a == \"string\")) ? ((ib.test(a) ? ((q(a, this.context).index(this[0]) >= 0)) : ((q.filter(a, this).length > 0)))) : ((this.filter(a).length > 0))))));\n            },\n            closest: function(a, b) {\n                var c, d = 0, e = this.length, f = [], g = ((((ib.test(a) || ((typeof a != \"string\")))) ? q(a, ((b || this.context))) : 0));\n                for (; ((d < e)); d++) {\n                    c = this[d];\n                    while (((((((c && c.ownerDocument)) && ((c !== b)))) && ((c.nodeType !== 11))))) {\n                        if (((g ? ((g.index(c) > -1)) : q.JSBNG__find.matchesSelector(c, a)))) {\n                            f.push(c);\n                            break;\n                        }\n                    ;\n                    ;\n                        c = c.parentNode;\n                    };\n                ;\n                };\n            ;\n                f = ((((f.length > 1)) ? q.unique(f) : f));\n                return this.pushStack(f, \"closest\", a);\n            },\n            index: function(a) {\n                return ((a ? ((((typeof a == \"string\")) ? q.inArray(this[0], q(a)) : q.inArray(((a.jquery ? a[0] : a)), this))) : ((((this[0] && this[0].parentNode)) ? this.prevAll().length : -1))));\n            },\n            add: function(a, b) {\n                var c = ((((typeof a == \"string\")) ? q(a, b) : q.makeArray(((((a && a.nodeType)) ? [a,] : a))))), d = q.merge(this.get(), c);\n                return this.pushStack(((((kb(c[0]) || kb(d[0]))) ? d : q.unique(d))));\n            },\n            addBack: function(a) {\n                return this.add(((((a == null)) ? this.prevObject : this.prevObject.filter(a))));\n            }\n        });\n        q.fn.andSelf = q.fn.addBack;\n        q.each({\n            parent: function(a) {\n                var b = a.parentNode;\n                return ((((b && ((b.nodeType !== 11)))) ? b : null));\n            },\n            parents: function(a) {\n                return q.dir(a, \"parentNode\");\n            },\n            parentsUntil: function(a, b, c) {\n                return q.dir(a, \"parentNode\", c);\n            },\n            next: function(a) {\n                return lb(a, \"nextSibling\");\n            },\n            prev: function(a) {\n                return lb(a, \"previousSibling\");\n            },\n            nextAll: function(a) {\n                return q.dir(a, \"nextSibling\");\n            },\n            prevAll: function(a) {\n                return q.dir(a, \"previousSibling\");\n            },\n            nextUntil: function(a, b, c) {\n                return q.dir(a, \"nextSibling\", c);\n            },\n            prevUntil: function(a, b, c) {\n                return q.dir(a, \"previousSibling\", c);\n            },\n            siblings: function(a) {\n                return q.sibling(((a.parentNode || {\n                })).firstChild, a);\n            },\n            children: function(a) {\n                return q.sibling(a.firstChild);\n            },\n            contents: function(a) {\n                return ((q.nodeName(a, \"div\") ? ((a.contentDocument || a.contentWindow.JSBNG__document)) : q.merge([], a.childNodes)));\n            }\n        }, function(a, b) {\n            q.fn[a] = function(c, d) {\n                var e = q.map(this, b, c);\n                ((fb.test(a) || (d = c)));\n                ((((d && ((typeof d == \"string\")))) && (e = q.filter(d, e))));\n                e = ((((((this.length > 1)) && !jb[a])) ? q.unique(e) : e));\n                ((((((this.length > 1)) && gb.test(a))) && (e = e.reverse())));\n                return this.pushStack(e, a, l.call(arguments).join(\",\"));\n            };\n        });\n        q.extend({\n            filter: function(a, b, c) {\n                ((c && (a = ((((\":not(\" + a)) + \")\")))));\n                return ((((b.length === 1)) ? ((q.JSBNG__find.matchesSelector(b[0], a) ? [b[0],] : [])) : q.JSBNG__find.matches(a, b)));\n            },\n            dir: function(a, c, d) {\n                var e = [], f = a[c];\n                while (((((f && ((f.nodeType !== 9)))) && ((((((d === b)) || ((f.nodeType !== 1)))) || !q(f).is(d)))))) {\n                    ((((f.nodeType === 1)) && e.push(f)));\n                    f = f[c];\n                };\n            ;\n                return e;\n            },\n            sibling: function(a, b) {\n                var c = [];\n                for (; a; a = a.nextSibling) {\n                    ((((((a.nodeType === 1)) && ((a !== b)))) && c.push(a)));\n                ;\n                };\n            ;\n                return c;\n            }\n        });\n        var ob = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\", pb = / jQuery\\d+=\"(?:null|\\d+)\"/g, qb = /^\\s+/, rb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi, sb = /<([\\w:]+)/, tb = /<tbody/i, ub = /<|&#?\\w+;/, vb = /<(?:script|style|link)/i, wb = /<(?:script|object|embed|option|style)/i, xb = new RegExp(((((\"\\u003C(?:\" + ob)) + \")[\\\\s/\\u003E]\")), \"i\"), yb = /^(?:checkbox|radio)$/, zb = /checked\\s*(?:[^=]|=\\s*.checked.)/i, Ab = /\\/(java|ecma)script/i, Bb = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)|[\\]\\-]{2}>\\s*$/g, Cb = {\n            option: [1,\"\\u003Cselect multiple='multiple'\\u003E\",\"\\u003C/select\\u003E\",],\n            legend: [1,\"\\u003Cfieldset\\u003E\",\"\\u003C/fieldset\\u003E\",],\n            thead: [1,\"\\u003Ctable\\u003E\",\"\\u003C/table\\u003E\",],\n            tr: [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\",\"\\u003C/tbody\\u003E\\u003C/table\\u003E\",],\n            td: [3,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\",\"\\u003C/tr\\u003E\\u003C/tbody\\u003E\\u003C/table\\u003E\",],\n            col: [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003C/tbody\\u003E\\u003Ccolgroup\\u003E\",\"\\u003C/colgroup\\u003E\\u003C/table\\u003E\",],\n            area: [1,\"\\u003Cmap\\u003E\",\"\\u003C/map\\u003E\",],\n            _default: [0,\"\",\"\",]\n        }, Db = nb(e), Eb = Db.appendChild(e.createElement(\"div\"));\n        Cb.optgroup = Cb.option;\n        Cb.tbody = Cb.tfoot = Cb.colgroup = Cb.caption = Cb.thead;\n        Cb.th = Cb.td;\n        ((q.support.htmlSerialize || (Cb._default = [1,\"X\\u003Cdiv\\u003E\",\"\\u003C/div\\u003E\",])));\n        q.fn.extend({\n            text: function(a) {\n                return q.access(this, function(a) {\n                    return ((((a === b)) ? q.text(this) : this.empty().append(((((this[0] && this[0].ownerDocument)) || e)).createTextNode(a))));\n                }, null, a, arguments.length);\n            },\n            wrapAll: function(a) {\n                if (q.isFunction(a)) {\n                    return this.each(function(b) {\n                        q(this).wrapAll(a.call(this, b));\n                    });\n                }\n            ;\n            ;\n                if (this[0]) {\n                    var b = q(a, this[0].ownerDocument).eq(0).clone(!0);\n                    ((this[0].parentNode && b.insertBefore(this[0])));\n                    b.map(function() {\n                        var a = this;\n                        while (((a.firstChild && ((a.firstChild.nodeType === 1))))) {\n                            a = a.firstChild;\n                        ;\n                        };\n                    ;\n                        return a;\n                    }).append(this);\n                }\n            ;\n            ;\n                return this;\n            },\n            wrapInner: function(a) {\n                return ((q.isFunction(a) ? this.each(function(b) {\n                    q(this).wrapInner(a.call(this, b));\n                }) : this.each(function() {\n                    var b = q(this), c = b.contents();\n                    ((c.length ? c.wrapAll(a) : b.append(a)));\n                })));\n            },\n            wrap: function(a) {\n                var b = q.isFunction(a);\n                return this.each(function(c) {\n                    q(this).wrapAll(((b ? a.call(this, c) : a)));\n                });\n            },\n            unwrap: function() {\n                return this.parent().each(function() {\n                    ((q.nodeName(this, \"body\") || q(this).replaceWith(this.childNodes)));\n                }).end();\n            },\n            append: function() {\n                return this.domManip(arguments, !0, function(a) {\n                    ((((((this.nodeType === 1)) || ((this.nodeType === 11)))) && this.appendChild(a)));\n                });\n            },\n            prepend: function() {\n                return this.domManip(arguments, !0, function(a) {\n                    ((((((this.nodeType === 1)) || ((this.nodeType === 11)))) && this.insertBefore(a, this.firstChild)));\n                });\n            },\n            before: function() {\n                if (!kb(this[0])) {\n                    return this.domManip(arguments, !1, function(a) {\n                        this.parentNode.insertBefore(a, this);\n                    });\n                }\n            ;\n            ;\n                if (arguments.length) {\n                    var a = q.clean(arguments);\n                    return this.pushStack(q.merge(a, this), \"before\", this.selector);\n                }\n            ;\n            ;\n            },\n            after: function() {\n                if (!kb(this[0])) {\n                    return this.domManip(arguments, !1, function(a) {\n                        this.parentNode.insertBefore(a, this.nextSibling);\n                    });\n                }\n            ;\n            ;\n                if (arguments.length) {\n                    var a = q.clean(arguments);\n                    return this.pushStack(q.merge(this, a), \"after\", this.selector);\n                }\n            ;\n            ;\n            },\n            remove: function(a, b) {\n                var c, d = 0;\n                for (; (((c = this[d]) != null)); d++) {\n                    if (((!a || q.filter(a, [c,]).length))) {\n                        if (((!b && ((c.nodeType === 1))))) {\n                            q.cleanData(c.getElementsByTagName(\"*\"));\n                            q.cleanData([c,]);\n                        }\n                    ;\n                    ;\n                        ((c.parentNode && c.parentNode.removeChild(c)));\n                    }\n                ;\n                ;\n                };\n            ;\n                return this;\n            },\n            empty: function() {\n                var a, b = 0;\n                for (; (((a = this[b]) != null)); b++) {\n                    ((((a.nodeType === 1)) && q.cleanData(a.getElementsByTagName(\"*\"))));\n                    while (a.firstChild) {\n                        a.removeChild(a.firstChild);\n                    ;\n                    };\n                ;\n                };\n            ;\n                return this;\n            },\n            clone: function(a, b) {\n                a = ((((a == null)) ? !1 : a));\n                b = ((((b == null)) ? a : b));\n                return this.map(function() {\n                    return q.clone(this, a, b);\n                });\n            },\n            html: function(a) {\n                return q.access(this, function(a) {\n                    var c = ((this[0] || {\n                    })), d = 0, e = this.length;\n                    if (((a === b))) {\n                        return ((((c.nodeType === 1)) ? c.innerHTML.replace(pb, \"\") : b));\n                    }\n                ;\n                ;\n                    if (((((((((((typeof a == \"string\")) && !vb.test(a))) && ((q.support.htmlSerialize || !xb.test(a))))) && ((q.support.leadingWhitespace || !qb.test(a))))) && !Cb[((sb.exec(a) || [\"\",\"\",]))[1].toLowerCase()]))) {\n                        a = a.replace(rb, \"\\u003C$1\\u003E\\u003C/$2\\u003E\");\n                        try {\n                            for (; ((d < e)); d++) {\n                                c = ((this[d] || {\n                                }));\n                                if (((c.nodeType === 1))) {\n                                    q.cleanData(c.getElementsByTagName(\"*\"));\n                                    c.innerHTML = a;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                            c = 0;\n                        } catch (f) {\n                        \n                        };\n                    ;\n                    }\n                ;\n                ;\n                    ((c && this.empty().append(a)));\n                }, null, a, arguments.length);\n            },\n            replaceWith: function(a) {\n                if (!kb(this[0])) {\n                    if (q.isFunction(a)) {\n                        return this.each(function(b) {\n                            var c = q(this), d = c.html();\n                            c.replaceWith(a.call(this, b, d));\n                        });\n                    }\n                ;\n                ;\n                    ((((typeof a != \"string\")) && (a = q(a).detach())));\n                    return this.each(function() {\n                        var b = this.nextSibling, c = this.parentNode;\n                        q(this).remove();\n                        ((b ? q(b).before(a) : q(c).append(a)));\n                    });\n                }\n            ;\n            ;\n                return ((this.length ? this.pushStack(q(((q.isFunction(a) ? a() : a))), \"replaceWith\", a) : this));\n            },\n            detach: function(a) {\n                return this.remove(a, !0);\n            },\n            domManip: function(a, c, d) {\n                a = [].concat.apply([], a);\n                var e, f, g, i, j = 0, k = a[0], l = [], m = this.length;\n                if (((((((!q.support.checkClone && ((m > 1)))) && ((typeof k == \"string\")))) && zb.test(k)))) {\n                    return this.each(function() {\n                        q(this).domManip(a, c, d);\n                    });\n                }\n            ;\n            ;\n                if (q.isFunction(k)) {\n                    return this.each(function(e) {\n                        var f = q(this);\n                        a[0] = k.call(this, e, ((c ? f.html() : b)));\n                        f.domManip(a, c, d);\n                    });\n                }\n            ;\n            ;\n                if (this[0]) {\n                    e = q.buildFragment(a, this, l);\n                    g = e.fragment;\n                    f = g.firstChild;\n                    ((((g.childNodes.length === 1)) && (g = f)));\n                    if (f) {\n                        c = ((c && q.nodeName(f, \"tr\")));\n                        for (i = ((e.cacheable || ((m - 1)))); ((j < m)); j++) {\n                            d.call(((((c && q.nodeName(this[j], \"table\"))) ? Fb(this[j], \"tbody\") : this[j])), ((((j === i)) ? g : q.clone(g, !0, !0))));\n                        ;\n                        };\n                    ;\n                    }\n                ;\n                ;\n                    g = f = null;\n                    ((l.length && q.each(l, function(a, b) {\n                        ((b.src ? ((q.ajax ? q.ajax({\n                            url: b.src,\n                            type: \"GET\",\n                            dataType: \"script\",\n                            async: !1,\n                            global: !1,\n                            throws: !0\n                        }) : q.error(\"no ajax\"))) : q.globalEval(((((((b.text || b.textContent)) || b.innerHTML)) || \"\")).replace(Bb, \"\"))));\n                        ((b.parentNode && b.parentNode.removeChild(b)));\n                    })));\n                }\n            ;\n            ;\n                return this;\n            }\n        });\n        q.buildFragment = function(a, c, d) {\n            var f, g, i, j = a[0];\n            c = ((c || e));\n            c = ((((!c.nodeType && c[0])) || c));\n            c = ((c.ownerDocument || c));\n            if (((((((((((((((((a.length === 1)) && ((typeof j == \"string\")))) && ((j.length < 512)))) && ((c === e)))) && ((j.charAt(0) === \"\\u003C\")))) && !wb.test(j))) && ((q.support.checkClone || !zb.test(j))))) && ((q.support.html5Clone || !xb.test(j)))))) {\n                g = !0;\n                f = q.fragments[j];\n                i = ((f !== b));\n            }\n        ;\n        ;\n            if (!f) {\n                f = c.createDocumentFragment();\n                q.clean(a, c, f, d);\n                ((g && (q.fragments[j] = ((i && f)))));\n            }\n        ;\n        ;\n            return {\n                fragment: f,\n                cacheable: g\n            };\n        };\n        q.fragments = {\n        };\n        q.each({\n            appendTo: \"append\",\n            prependTo: \"prepend\",\n            insertBefore: \"before\",\n            insertAfter: \"after\",\n            replaceAll: \"replaceWith\"\n        }, function(a, b) {\n            q.fn[a] = function(c) {\n                var d, e = 0, f = [], g = q(c), i = g.length, j = ((((this.length === 1)) && this[0].parentNode));\n                if (((((((j == null)) || ((((j && ((j.nodeType === 11)))) && ((j.childNodes.length === 1)))))) && ((i === 1))))) {\n                    g[b](this[0]);\n                    return this;\n                }\n            ;\n            ;\n                for (; ((e < i)); e++) {\n                    d = ((((e > 0)) ? this.clone(!0) : this)).get();\n                    q(g[e])[b](d);\n                    f = f.concat(d);\n                };\n            ;\n                return this.pushStack(f, a, g.selector);\n            };\n        });\n        q.extend({\n            clone: function(a, b, c) {\n                var d, e, f, g;\n                if (((((q.support.html5Clone || q.isXMLDoc(a))) || !xb.test(((((\"\\u003C\" + a.nodeName)) + \"\\u003E\")))))) g = a.cloneNode(!0);\n                 else {\n                    Eb.innerHTML = a.outerHTML;\n                    Eb.removeChild(g = Eb.firstChild);\n                }\n            ;\n            ;\n                if (((((((!q.support.noCloneEvent || !q.support.noCloneChecked)) && ((((a.nodeType === 1)) || ((a.nodeType === 11)))))) && !q.isXMLDoc(a)))) {\n                    Hb(a, g);\n                    d = Ib(a);\n                    e = Ib(g);\n                    for (f = 0; d[f]; ++f) {\n                        ((e[f] && Hb(d[f], e[f])));\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                if (b) {\n                    Gb(a, g);\n                    if (c) {\n                        d = Ib(a);\n                        e = Ib(g);\n                        for (f = 0; d[f]; ++f) {\n                            Gb(d[f], e[f]);\n                        ;\n                        };\n                    ;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                d = e = null;\n                return g;\n            },\n            clean: function(a, b, c, d) {\n                var f, g, i, j, k, l, m, n, o, p, r, s, t = ((((b === e)) && Db)), u = [];\n                if (((!b || ((typeof b.createDocumentFragment == \"undefined\"))))) {\n                    b = e;\n                }\n            ;\n            ;\n                for (f = 0; (((i = a[f]) != null)); f++) {\n                    ((((typeof i == \"number\")) && (i += \"\")));\n                    if (!i) {\n                        continue;\n                    }\n                ;\n                ;\n                    if (((typeof i == \"string\"))) {\n                        if (!ub.test(i)) i = b.createTextNode(i);\n                         else {\n                            t = ((t || nb(b)));\n                            m = b.createElement(\"div\");\n                            t.appendChild(m);\n                            i = i.replace(rb, \"\\u003C$1\\u003E\\u003C/$2\\u003E\");\n                            j = ((sb.exec(i) || [\"\",\"\",]))[1].toLowerCase();\n                            k = ((Cb[j] || Cb._default));\n                            l = k[0];\n                            m.innerHTML = ((((k[1] + i)) + k[2]));\n                            while (l--) {\n                                m = m.lastChild;\n                            ;\n                            };\n                        ;\n                            if (!q.support.tbody) {\n                                n = tb.test(i);\n                                o = ((((((j === \"table\")) && !n)) ? ((m.firstChild && m.firstChild.childNodes)) : ((((((k[1] === \"\\u003Ctable\\u003E\")) && !n)) ? m.childNodes : []))));\n                                for (g = ((o.length - 1)); ((g >= 0)); --g) {\n                                    ((((q.nodeName(o[g], \"tbody\") && !o[g].childNodes.length)) && o[g].parentNode.removeChild(o[g])));\n                                ;\n                                };\n                            ;\n                            }\n                        ;\n                        ;\n                            ((((!q.support.leadingWhitespace && qb.test(i))) && m.insertBefore(b.createTextNode(qb.exec(i)[0]), m.firstChild)));\n                            i = m.childNodes;\n                            m.parentNode.removeChild(m);\n                        }\n                    ;\n                    }\n                ;\n                ;\n                    ((i.nodeType ? u.push(i) : q.merge(u, i)));\n                };\n            ;\n                ((m && (i = m = t = null)));\n                if (!q.support.appendChecked) {\n                    for (f = 0; (((i = u[f]) != null)); f++) {\n                        ((q.nodeName(i, \"input\") ? Jb(i) : ((((typeof i.getElementsByTagName != \"undefined\")) && q.grep(i.getElementsByTagName(\"input\"), Jb)))));\n                    ;\n                    };\n                }\n            ;\n            ;\n                if (c) {\n                    r = function(a) {\n                        if (((!a.type || Ab.test(a.type)))) {\n                            return ((d ? d.push(((a.parentNode ? a.parentNode.removeChild(a) : a))) : c.appendChild(a)));\n                        }\n                    ;\n                    ;\n                    };\n                    for (f = 0; (((i = u[f]) != null)); f++) {\n                        if (((!q.nodeName(i, \"script\") || !r(i)))) {\n                            c.appendChild(i);\n                            if (((typeof i.getElementsByTagName != \"undefined\"))) {\n                                s = q.grep(q.merge([], i.getElementsByTagName(\"script\")), r);\n                                u.splice.apply(u, [((f + 1)),0,].concat(s));\n                                f += s.length;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n                return u;\n            },\n            cleanData: function(a, b) {\n                var c, d, e, f, g = 0, i = q.expando, j = q.cache, k = q.support.deleteExpando, l = q.JSBNG__event.special;\n                for (; (((e = a[g]) != null)); g++) {\n                    if (((b || q.acceptData(e)))) {\n                        d = e[i];\n                        c = ((d && j[d]));\n                        if (c) {\n                            if (c.events) {\n                                {\n                                    var fin27keys = ((window.top.JSBNG_Replay.forInKeys)((c.events))), fin27i = (0);\n                                    (0);\n                                    for (; (fin27i < fin27keys.length); (fin27i++)) {\n                                        ((f) = (fin27keys[fin27i]));\n                                        {\n                                            ((l[f] ? q.JSBNG__event.remove(e, f) : q.removeEvent(e, f, c.handle)));\n                                        ;\n                                        };\n                                    };\n                                };\n                            }\n                        ;\n                        ;\n                            if (j[d]) {\n                                delete j[d];\n                                ((k ? delete e[i] : ((e.removeAttribute ? e.removeAttribute(i) : e[i] = null))));\n                                q.deletedIds.push(d);\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                };\n            ;\n            }\n        });\n        (function() {\n            var a, b;\n            q.uaMatch = function(a) {\n                a = a.toLowerCase();\n                var b = ((((((((((/(chrome)[ \\/]([\\w.]+)/.exec(a) || /(webkit)[ \\/]([\\w.]+)/.exec(a))) || /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(a))) || /(msie) ([\\w.]+)/.exec(a))) || ((((a.indexOf(\"compatible\") < 0)) && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(a))))) || []));\n                return {\n                    browser: ((b[1] || \"\")),\n                    version: ((b[2] || \"0\"))\n                };\n            };\n            a = q.uaMatch(g.userAgent);\n            b = {\n            };\n            if (a.browser) {\n                b[a.browser] = !0;\n                b.version = a.version;\n            }\n        ;\n        ;\n            ((b.chrome ? b.webkit = !0 : ((b.webkit && (b.safari = !0)))));\n            q.browser = b;\n            q.sub = function() {\n                function a(b, c) {\n                    return new a.fn.init(b, c);\n                };\n            ;\n                q.extend(!0, a, this);\n                a.superclass = this;\n                a.fn = a.prototype = this();\n                a.fn.constructor = a;\n                a.sub = this.sub;\n                a.fn.init = function(d, e) {\n                    ((((((e && ((e instanceof q)))) && !((e instanceof a)))) && (e = a(e))));\n                    return q.fn.init.call(this, d, e, b);\n                };\n                a.fn.init.prototype = a.fn;\n                var b = a(e);\n                return a;\n            };\n        })();\n        var Kb, Lb, Mb, Nb = /alpha\\([^)]*\\)/i, Ob = /opacity=([^)]*)/, Pb = /^(top|right|bottom|left)$/, Qb = /^(none|table(?!-c[ea]).+)/, Rb = /^margin/, Sb = new RegExp(((((\"^(\" + r)) + \")(.*)$\")), \"i\"), Tb = new RegExp(((((\"^(\" + r)) + \")(?!px)[a-z%]+$\")), \"i\"), Ub = new RegExp(((((\"^([-+])=(\" + r)) + \")\")), \"i\"), Vb = {\n            BODY: \"block\"\n        }, Wb = {\n            position: \"absolute\",\n            visibility: \"hidden\",\n            display: \"block\"\n        }, Xb = {\n            letterSpacing: 0,\n            fontWeight: 400\n        }, Yb = [\"Top\",\"Right\",\"Bottom\",\"Left\",], Zb = [\"Webkit\",\"O\",\"Moz\",\"ms\",], $b = q.fn.toggle;\n        q.fn.extend({\n            css: function(a, c) {\n                return q.access(this, function(a, c, d) {\n                    return ((((d !== b)) ? q.style(a, c, d) : q.css(a, c)));\n                }, a, c, ((arguments.length > 1)));\n            },\n            show: function() {\n                return bc(this, !0);\n            },\n            hide: function() {\n                return bc(this);\n            },\n            toggle: function(a, b) {\n                var c = ((typeof a == \"boolean\"));\n                return ((((q.isFunction(a) && q.isFunction(b))) ? $b.apply(this, arguments) : this.each(function() {\n                    ((((c ? a : ac(this))) ? q(this).show() : q(this).hide()));\n                })));\n            }\n        });\n        q.extend({\n            cssHooks: {\n                opacity: {\n                    get: function(a, b) {\n                        if (b) {\n                            var c = Kb(a, \"opacity\");\n                            return ((((c === \"\")) ? \"1\" : c));\n                        }\n                    ;\n                    ;\n                    }\n                }\n            },\n            cssNumber: {\n                fillOpacity: !0,\n                fontWeight: !0,\n                lineHeight: !0,\n                opacity: !0,\n                orphans: !0,\n                widows: !0,\n                zIndex: !0,\n                zoom: !0\n            },\n            cssProps: {\n                float: ((q.support.cssFloat ? \"cssFloat\" : \"styleFloat\"))\n            },\n            style: function(a, c, d, e) {\n                if (((((((!a || ((a.nodeType === 3)))) || ((a.nodeType === 8)))) || !a.style))) {\n                    return;\n                }\n            ;\n            ;\n                var f, g, i, j = q.camelCase(c), k = a.style;\n                c = ((q.cssProps[j] || (q.cssProps[j] = _b(k, j))));\n                i = ((q.cssHooks[c] || q.cssHooks[j]));\n                if (((d === b))) {\n                    return ((((((i && ((\"get\" in i)))) && (((f = i.get(a, !1, e)) !== b)))) ? f : k[c]));\n                }\n            ;\n            ;\n                g = typeof d;\n                if (((((g === \"string\")) && (f = Ub.exec(d))))) {\n                    d = ((((((f[1] + 1)) * f[2])) + parseFloat(q.css(a, c))));\n                    g = \"number\";\n                }\n            ;\n            ;\n                if (((((d == null)) || ((((g === \"number\")) && isNaN(d)))))) {\n                    return;\n                }\n            ;\n            ;\n                ((((((g === \"number\")) && !q.cssNumber[j])) && (d += \"px\")));\n                if (((((!i || !((\"set\" in i)))) || (((d = i.set(a, d, e)) !== b))))) {\n                    try {\n                        k[c] = d;\n                    } catch (l) {\n                    \n                    };\n                }\n            ;\n            ;\n            },\n            css: function(a, c, d, e) {\n                var f, g, i, j = q.camelCase(c);\n                c = ((q.cssProps[j] || (q.cssProps[j] = _b(a.style, j))));\n                i = ((q.cssHooks[c] || q.cssHooks[j]));\n                ((((i && ((\"get\" in i)))) && (f = i.get(a, !0, e))));\n                ((((f === b)) && (f = Kb(a, c))));\n                ((((((f === \"normal\")) && ((c in Xb)))) && (f = Xb[c])));\n                if (((d || ((e !== b))))) {\n                    g = parseFloat(f);\n                    return ((((d || q.isNumeric(g))) ? ((g || 0)) : f));\n                }\n            ;\n            ;\n                return f;\n            },\n            swap: function(a, b, c) {\n                var d, e, f = {\n                };\n                {\n                    var fin28keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin28i = (0);\n                    (0);\n                    for (; (fin28i < fin28keys.length); (fin28i++)) {\n                        ((e) = (fin28keys[fin28i]));\n                        {\n                            f[e] = a.style[e];\n                            a.style[e] = b[e];\n                        };\n                    };\n                };\n            ;\n                d = c.call(a);\n                {\n                    var fin29keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin29i = (0);\n                    (0);\n                    for (; (fin29i < fin29keys.length); (fin29i++)) {\n                        ((e) = (fin29keys[fin29i]));\n                        {\n                            a.style[e] = f[e];\n                        ;\n                        };\n                    };\n                };\n            ;\n                return d;\n            }\n        });\n        ((a.JSBNG__getComputedStyle ? Kb = function(b, c) {\n            var d, e, f, g, i = a.JSBNG__getComputedStyle(b, null), j = b.style;\n            if (i) {\n                d = ((i.getPropertyValue(c) || i[c]));\n                ((((((d === \"\")) && !q.contains(b.ownerDocument, b))) && (d = q.style(b, c))));\n                if (((Tb.test(d) && Rb.test(c)))) {\n                    e = j.width;\n                    f = j.minWidth;\n                    g = j.maxWidth;\n                    j.minWidth = j.maxWidth = j.width = d;\n                    d = i.width;\n                    j.width = e;\n                    j.minWidth = f;\n                    j.maxWidth = g;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            return d;\n        } : ((e.documentElement.currentStyle && (Kb = function(a, b) {\n            var c, d, e = ((a.currentStyle && a.currentStyle[b])), f = a.style;\n            ((((((((e == null)) && f)) && f[b])) && (e = f[b])));\n            if (((Tb.test(e) && !Pb.test(b)))) {\n                c = f.left;\n                d = ((a.runtimeStyle && a.runtimeStyle.left));\n                ((d && (a.runtimeStyle.left = a.currentStyle.left)));\n                f.left = ((((b === \"fontSize\")) ? \"1em\" : e));\n                e = ((f.pixelLeft + \"px\"));\n                f.left = c;\n                ((d && (a.runtimeStyle.left = d)));\n            }\n        ;\n        ;\n            return ((((e === \"\")) ? \"auto\" : e));\n        })))));\n        q.each([\"height\",\"width\",], function(a, b) {\n            q.cssHooks[b] = {\n                get: function(a, c, d) {\n                    if (c) {\n                        return ((((((a.offsetWidth === 0)) && Qb.test(Kb(a, \"display\")))) ? q.swap(a, Wb, function() {\n                            return ec(a, b, d);\n                        }) : ec(a, b, d)));\n                    }\n                ;\n                ;\n                },\n                set: function(a, c, d) {\n                    return cc(a, c, ((d ? dc(a, b, d, ((q.support.boxSizing && ((q.css(a, \"boxSizing\") === \"border-box\"))))) : 0)));\n                }\n            };\n        });\n        ((q.support.opacity || (q.cssHooks.opacity = {\n            get: function(a, b) {\n                return ((Ob.test(((((((b && a.currentStyle)) ? a.currentStyle.filter : a.style.filter)) || \"\"))) ? ((((77546 * parseFloat(RegExp.$1))) + \"\")) : ((b ? \"1\" : \"\"))));\n            },\n            set: function(a, b) {\n                var c = a.style, d = a.currentStyle, e = ((q.isNumeric(b) ? ((((\"alpha(opacity=\" + ((b * 100)))) + \")\")) : \"\")), f = ((((((d && d.filter)) || c.filter)) || \"\"));\n                c.zoom = 1;\n                if (((((((b >= 1)) && ((q.trim(f.replace(Nb, \"\")) === \"\")))) && c.removeAttribute))) {\n                    c.removeAttribute(\"filter\");\n                    if (((d && !d.filter))) {\n                        return;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                c.filter = ((Nb.test(f) ? f.replace(Nb, e) : ((((f + \" \")) + e))));\n            }\n        })));\n        q(function() {\n            ((q.support.reliableMarginRight || (q.cssHooks.marginRight = {\n                get: function(a, b) {\n                    return q.swap(a, {\n                        display: \"inline-block\"\n                    }, function() {\n                        if (b) {\n                            return Kb(a, \"marginRight\");\n                        }\n                    ;\n                    ;\n                    });\n                }\n            })));\n            ((((!q.support.pixelPosition && q.fn.position)) && q.each([\"JSBNG__top\",\"left\",], function(a, b) {\n                q.cssHooks[b] = {\n                    get: function(a, c) {\n                        if (c) {\n                            var d = Kb(a, b);\n                            return ((Tb.test(d) ? ((q(a).position()[b] + \"px\")) : d));\n                        }\n                    ;\n                    ;\n                    }\n                };\n            })));\n        });\n        if (((q.expr && q.expr.filters))) {\n            q.expr.filters.hidden = function(a) {\n                return ((((((a.offsetWidth === 0)) && ((a.offsetHeight === 0)))) || ((!q.support.reliableHiddenOffsets && ((((((a.style && a.style.display)) || Kb(a, \"display\"))) === \"none\"))))));\n            };\n            q.expr.filters.visible = function(a) {\n                return !q.expr.filters.hidden(a);\n            };\n        }\n    ;\n    ;\n        q.each({\n            margin: \"\",\n            padding: \"\",\n            border: \"Width\"\n        }, function(a, b) {\n            q.cssHooks[((a + b))] = {\n                expand: function(c) {\n                    var d, e = ((((typeof c == \"string\")) ? c.split(\" \") : [c,])), f = {\n                    };\n                    for (d = 0; ((d < 4)); d++) {\n                        f[((((a + Yb[d])) + b))] = ((((e[d] || e[((d - 2))])) || e[0]));\n                    ;\n                    };\n                ;\n                    return f;\n                }\n            };\n            ((Rb.test(a) || (q.cssHooks[((a + b))].set = cc)));\n        });\n        var gc = /%20/g, hc = /\\[\\]$/, ic = /\\r?\\n/g, jc = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, kc = /^(?:select|textarea)/i;\n        q.fn.extend({\n            serialize: function() {\n                return q.param(this.serializeArray());\n            },\n            serializeArray: function() {\n                return this.map(function() {\n                    return ((this.elements ? q.makeArray(this.elements) : this));\n                }).filter(function() {\n                    return ((((this.JSBNG__name && !this.disabled)) && ((((this.checked || kc.test(this.nodeName))) || jc.test(this.type)))));\n                }).map(function(a, b) {\n                    var c = q(this).val();\n                    return ((((c == null)) ? null : ((q.isArray(c) ? q.map(c, function(a, c) {\n                        return {\n                            JSBNG__name: b.JSBNG__name,\n                            value: a.replace(ic, \"\\u000d\\u000a\")\n                        };\n                    }) : {\n                        JSBNG__name: b.JSBNG__name,\n                        value: c.replace(ic, \"\\u000d\\u000a\")\n                    }))));\n                }).get();\n            }\n        });\n        q.param = function(a, c) {\n            var d, e = [], f = function(a, b) {\n                b = ((q.isFunction(b) ? b() : ((((b == null)) ? \"\" : b))));\n                e[e.length] = ((((encodeURIComponent(a) + \"=\")) + encodeURIComponent(b)));\n            };\n            ((((c === b)) && (c = ((q.ajaxSettings && q.ajaxSettings.traditional)))));\n            if (((q.isArray(a) || ((a.jquery && !q.isPlainObject(a)))))) {\n                q.each(a, function() {\n                    f(this.JSBNG__name, this.value);\n                });\n            }\n             else {\n                {\n                    var fin30keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin30i = (0);\n                    (0);\n                    for (; (fin30i < fin30keys.length); (fin30i++)) {\n                        ((d) = (fin30keys[fin30i]));\n                        {\n                            lc(d, a[d], c, f);\n                        ;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            return e.join(\"&\").replace(gc, \"+\");\n        };\n        var mc, nc, oc = /#.*$/, pc = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm, qc = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/, rc = /^(?:GET|HEAD)$/, sc = /^\\/\\//, tc = /\\?/, uc = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, vc = /([?&])_=[^&]*/, wc = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/, xc = q.fn.load, yc = {\n        }, zc = {\n        }, Ac = (([\"*/\",] + [\"*\",]));\n        try {\n            nc = f.href;\n        } catch (Bc) {\n            nc = e.createElement(\"a\");\n            nc.href = \"\";\n            nc = nc.href;\n        };\n    ;\n        mc = ((wc.exec(nc.toLowerCase()) || []));\n        q.fn.load = function(a, c, d) {\n            if (((((typeof a != \"string\")) && xc))) {\n                return xc.apply(this, arguments);\n            }\n        ;\n        ;\n            if (!this.length) {\n                return this;\n            }\n        ;\n        ;\n            var e, f, g, i = this, j = a.indexOf(\" \");\n            if (((j >= 0))) {\n                e = a.slice(j, a.length);\n                a = a.slice(0, j);\n            }\n        ;\n        ;\n            if (q.isFunction(c)) {\n                d = c;\n                c = b;\n            }\n             else ((((c && ((typeof c == \"object\")))) && (f = \"POST\")));\n        ;\n        ;\n            q.ajax({\n                url: a,\n                type: f,\n                dataType: \"html\",\n                data: c,\n                complete: function(a, b) {\n                    ((d && i.each(d, ((g || [a.responseText,b,a,])))));\n                }\n            }).done(function(a) {\n                g = arguments;\n                i.html(((e ? q(\"\\u003Cdiv\\u003E\").append(a.replace(uc, \"\")).JSBNG__find(e) : a)));\n            });\n            return this;\n        };\n        q.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"), function(a, b) {\n            q.fn[b] = function(a) {\n                return this.JSBNG__on(b, a);\n            };\n        });\n        q.each([\"get\",\"post\",], function(a, c) {\n            q[c] = function(a, d, e, f) {\n                if (q.isFunction(d)) {\n                    f = ((f || e));\n                    e = d;\n                    d = b;\n                }\n            ;\n            ;\n                return q.ajax({\n                    type: c,\n                    url: a,\n                    data: d,\n                    success: e,\n                    dataType: f\n                });\n            };\n        });\n        q.extend({\n            getScript: function(a, c) {\n                return q.get(a, b, c, \"script\");\n            },\n            getJSON: function(a, b, c) {\n                return q.get(a, b, c, \"json\");\n            },\n            ajaxSetup: function(a, b) {\n                if (b) Ec(a, q.ajaxSettings);\n                 else {\n                    b = a;\n                    a = q.ajaxSettings;\n                }\n            ;\n            ;\n                Ec(a, b);\n                return a;\n            },\n            ajaxSettings: {\n                url: nc,\n                isLocal: qc.test(mc[1]),\n                global: !0,\n                type: \"GET\",\n                contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n                processData: !0,\n                async: !0,\n                accepts: {\n                    xml: \"application/xml, text/xml\",\n                    html: \"text/html\",\n                    text: \"text/plain\",\n                    json: \"application/json, text/javascript\",\n                    \"*\": Ac\n                },\n                contents: {\n                    xml: /xml/,\n                    html: /html/,\n                    json: /json/\n                },\n                responseFields: {\n                    xml: \"responseXML\",\n                    text: \"responseText\"\n                },\n                converters: {\n                    \"* text\": a.String,\n                    \"text html\": !0,\n                    \"text json\": q.parseJSON,\n                    \"text xml\": q.parseXML\n                },\n                flatOptions: {\n                    context: !0,\n                    url: !0\n                }\n            },\n            ajaxPrefilter: Cc(yc),\n            ajaxTransport: Cc(zc),\n            ajax: function(a, c) {\n                function z(a, c, f, j) {\n                    var l, t, u, v, x, z = c;\n                    if (((w === 2))) {\n                        return;\n                    }\n                ;\n                ;\n                    w = 2;\n                    ((i && JSBNG__clearTimeout(i)));\n                    g = b;\n                    e = ((j || \"\"));\n                    y.readyState = ((((a > 0)) ? 4 : 0));\n                    ((f && (v = Fc(m, y, f))));\n                    if (((((((a >= 200)) && ((a < 300)))) || ((a === 304))))) {\n                        if (m.ifModified) {\n                            x = y.getResponseHeader(\"Last-Modified\");\n                            ((x && (q.lastModified[d] = x)));\n                            x = y.getResponseHeader(\"Etag\");\n                            ((x && (q.etag[d] = x)));\n                        }\n                    ;\n                    ;\n                        if (((a === 304))) {\n                            z = \"notmodified\";\n                            l = !0;\n                        }\n                         else {\n                            l = Gc(m, v);\n                            z = l.state;\n                            t = l.data;\n                            u = l.error;\n                            l = !u;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        u = z;\n                        if (((!z || a))) {\n                            z = \"error\";\n                            ((((a < 0)) && (a = 0)));\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    y.JSBNG__status = a;\n                    y.statusText = ((((c || z)) + \"\"));\n                    ((l ? p.resolveWith(n, [t,z,y,]) : p.rejectWith(n, [y,z,u,])));\n                    y.statusCode(s);\n                    s = b;\n                    ((k && o.trigger(((\"ajax\" + ((l ? \"Success\" : \"Error\")))), [y,m,((l ? t : u)),])));\n                    r.fireWith(n, [y,z,]);\n                    if (k) {\n                        o.trigger(\"ajaxComplete\", [y,m,]);\n                        ((--q.active || q.JSBNG__event.trigger(\"ajaxStop\")));\n                    }\n                ;\n                ;\n                };\n            ;\n                if (((typeof a == \"object\"))) {\n                    c = a;\n                    a = b;\n                }\n            ;\n            ;\n                c = ((c || {\n                }));\n                var d, e, f, g, i, j, k, l, m = q.ajaxSetup({\n                }, c), n = ((m.context || m)), o = ((((((n !== m)) && ((n.nodeType || ((n instanceof q)))))) ? q(n) : q.JSBNG__event)), p = q.Deferred(), r = q.Callbacks(\"once memory\"), s = ((m.statusCode || {\n                })), u = {\n                }, v = {\n                }, w = 0, x = \"canceled\", y = {\n                    readyState: 0,\n                    setRequestHeader: function(a, b) {\n                        if (!w) {\n                            var c = a.toLowerCase();\n                            a = v[c] = ((v[c] || a));\n                            u[a] = b;\n                        }\n                    ;\n                    ;\n                        return this;\n                    },\n                    getAllResponseHeaders: function() {\n                        return ((((w === 2)) ? e : null));\n                    },\n                    getResponseHeader: function(a) {\n                        var c;\n                        if (((w === 2))) {\n                            if (!f) {\n                                f = {\n                                };\n                                while (c = pc.exec(e)) {\n                                    f[c[1].toLowerCase()] = c[2];\n                                ;\n                                };\n                            ;\n                            }\n                        ;\n                        ;\n                            c = f[a.toLowerCase()];\n                        }\n                    ;\n                    ;\n                        return ((((c === b)) ? null : c));\n                    },\n                    overrideMimeType: function(a) {\n                        ((w || (m.mimeType = a)));\n                        return this;\n                    },\n                    abort: function(a) {\n                        a = ((a || x));\n                        ((g && g.abort(a)));\n                        z(0, a);\n                        return this;\n                    }\n                };\n                p.promise(y);\n                y.success = y.done;\n                y.error = y.fail;\n                y.complete = r.add;\n                y.statusCode = function(a) {\n                    if (a) {\n                        var b;\n                        if (((w < 2))) {\n                            var fin31keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin31i = (0);\n                            (0);\n                            for (; (fin31i < fin31keys.length); (fin31i++)) {\n                                ((b) = (fin31keys[fin31i]));\n                                {\n                                    s[b] = [s[b],a[b],];\n                                ;\n                                };\n                            };\n                        }\n                         else {\n                            b = a[y.JSBNG__status];\n                            y.always(b);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this;\n                };\n                m.url = ((((a || m.url)) + \"\")).replace(oc, \"\").replace(sc, ((mc[1] + \"//\")));\n                m.dataTypes = q.trim(((m.dataType || \"*\"))).toLowerCase().split(t);\n                if (((m.crossDomain == null))) {\n                    j = wc.exec(m.url.toLowerCase());\n                    m.crossDomain = !((!j || ((((((j[1] === mc[1])) && ((j[2] === mc[2])))) && ((((j[3] || ((((j[1] === \"http:\")) ? 80 : 443)))) == ((mc[3] || ((((mc[1] === \"http:\")) ? 80 : 443))))))))));\n                }\n            ;\n            ;\n                ((((((m.data && m.processData)) && ((typeof m.data != \"string\")))) && (m.data = q.param(m.data, m.traditional))));\n                Dc(yc, m, c, y);\n                if (((w === 2))) {\n                    return y;\n                }\n            ;\n            ;\n                k = m.global;\n                m.type = m.type.toUpperCase();\n                m.hasContent = !rc.test(m.type);\n                ((((k && ((q.active++ === 0)))) && q.JSBNG__event.trigger(\"ajaxStart\")));\n                if (!m.hasContent) {\n                    if (m.data) {\n                        m.url += ((((tc.test(m.url) ? \"&\" : \"?\")) + m.data));\n                        delete m.data;\n                    }\n                ;\n                ;\n                    d = m.url;\n                    if (((m.cache === !1))) {\n                        var A = q.now(), B = m.url.replace(vc, ((\"$1_=\" + A)));\n                        m.url = ((B + ((((B === m.url)) ? ((((((tc.test(m.url) ? \"&\" : \"?\")) + \"_=\")) + A)) : \"\"))));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                ((((((((m.data && m.hasContent)) && ((m.contentType !== !1)))) || c.contentType)) && y.setRequestHeader(\"Content-Type\", m.contentType)));\n                if (m.ifModified) {\n                    d = ((d || m.url));\n                    ((q.lastModified[d] && y.setRequestHeader(\"If-Modified-Since\", q.lastModified[d])));\n                    ((q.etag[d] && y.setRequestHeader(\"If-None-Match\", q.etag[d])));\n                }\n            ;\n            ;\n                y.setRequestHeader(\"Accept\", ((((m.dataTypes[0] && m.accepts[m.dataTypes[0]])) ? ((m.accepts[m.dataTypes[0]] + ((((m.dataTypes[0] !== \"*\")) ? ((((\", \" + Ac)) + \"; q=0.01\")) : \"\")))) : m.accepts[\"*\"])));\n                {\n                    var fin32keys = ((window.top.JSBNG_Replay.forInKeys)((m.headers))), fin32i = (0);\n                    (0);\n                    for (; (fin32i < fin32keys.length); (fin32i++)) {\n                        ((l) = (fin32keys[fin32i]));\n                        {\n                            y.setRequestHeader(l, m.headers[l]);\n                        ;\n                        };\n                    };\n                };\n            ;\n                if (((!m.beforeSend || ((((m.beforeSend.call(n, y, m) !== !1)) && ((w !== 2))))))) {\n                    x = \"abort\";\n                    {\n                        var fin33keys = ((window.top.JSBNG_Replay.forInKeys)(({\n                            success: 1,\n                            error: 1,\n                            complete: 1\n                        }))), fin33i = (0);\n                        (0);\n                        for (; (fin33i < fin33keys.length); (fin33i++)) {\n                            ((l) = (fin33keys[fin33i]));\n                            {\n                                y[l](m[l]);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    g = Dc(zc, m, c, y);\n                    if (!g) z(-1, \"No Transport\");\n                     else {\n                        y.readyState = 1;\n                        ((k && o.trigger(\"ajaxSend\", [y,m,])));\n                        ((((m.async && ((m.timeout > 0)))) && (i = JSBNG__setTimeout(function() {\n                            y.abort(\"timeout\");\n                        }, m.timeout))));\n                        try {\n                            w = 1;\n                            g.send(u, z);\n                        } catch (C) {\n                            if (!((w < 2))) {\n                                throw C;\n                            }\n                        ;\n                        ;\n                            z(-1, C);\n                        };\n                    ;\n                    }\n                ;\n                ;\n                    return y;\n                }\n            ;\n            ;\n                return y.abort();\n            },\n            active: 0,\n            lastModified: {\n            },\n            etag: {\n            }\n        });\n        var Hc = [], Ic = /\\?/, Jc = /(=)\\?(?=&|$)|\\?\\?/, Kc = q.now();\n        q.ajaxSetup({\n            jsonp: \"callback\",\n            jsonpCallback: function() {\n                var a = ((Hc.pop() || ((((q.expando + \"_\")) + Kc++))));\n                this[a] = !0;\n                return a;\n            }\n        });\n        q.ajaxPrefilter(\"json jsonp\", function(c, d, e) {\n            var f, g, i, j = c.data, k = c.url, l = ((c.jsonp !== !1)), m = ((l && Jc.test(k))), n = ((((((((l && !m)) && ((typeof j == \"string\")))) && !((c.contentType || \"\")).indexOf(\"application/x-www-form-urlencoded\"))) && Jc.test(j)));\n            if (((((((c.dataTypes[0] === \"jsonp\")) || m)) || n))) {\n                f = c.jsonpCallback = ((q.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback));\n                g = a[f];\n                ((m ? c.url = k.replace(Jc, ((\"$1\" + f))) : ((n ? c.data = j.replace(Jc, ((\"$1\" + f))) : ((l && (c.url += ((((((((Ic.test(k) ? \"&\" : \"?\")) + c.jsonp)) + \"=\")) + f)))))))));\n                c.converters[\"script json\"] = function() {\n                    ((i || q.error(((f + \" was not called\")))));\n                    return i[0];\n                };\n                c.dataTypes[0] = \"json\";\n                a[f] = function() {\n                    i = arguments;\n                };\n                e.always(function() {\n                    a[f] = g;\n                    if (c[f]) {\n                        c.jsonpCallback = d.jsonpCallback;\n                        Hc.push(f);\n                    }\n                ;\n                ;\n                    ((((i && q.isFunction(g))) && g(i[0])));\n                    i = g = b;\n                });\n                return \"script\";\n            }\n        ;\n        ;\n        });\n        q.ajaxSetup({\n            accepts: {\n                script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n            },\n            contents: {\n                script: /javascript|ecmascript/\n            },\n            converters: {\n                \"text script\": function(a) {\n                    q.globalEval(a);\n                    return a;\n                }\n            }\n        });\n        q.ajaxPrefilter(\"script\", function(a) {\n            ((((a.cache === b)) && (a.cache = !1)));\n            if (a.crossDomain) {\n                a.type = \"GET\";\n                a.global = !1;\n            }\n        ;\n        ;\n        });\n        q.ajaxTransport(\"script\", function(a) {\n            if (a.crossDomain) {\n                var c, d = ((((e.head || e.getElementsByTagName(\"head\")[0])) || e.documentElement));\n                return {\n                    send: function(_, f) {\n                        c = e.createElement(\"script\");\n                        c.async = \"async\";\n                        ((a.scriptCharset && (c.charset = a.scriptCharset)));\n                        c.src = a.url;\n                        c.JSBNG__onload = c.onreadystatechange = function(_, a) {\n                            if (((((a || !c.readyState)) || /loaded|complete/.test(c.readyState)))) {\n                                c.JSBNG__onload = c.onreadystatechange = null;\n                                ((((d && c.parentNode)) && d.removeChild(c)));\n                                c = b;\n                                ((a || f(200, \"success\")));\n                            }\n                        ;\n                        ;\n                        };\n                        d.insertBefore(c, d.firstChild);\n                    },\n                    abort: function() {\n                        ((c && c.JSBNG__onload(0, 1)));\n                    }\n                };\n            }\n        ;\n        ;\n        });\n        var Lc, Mc = ((a.ActiveXObject ? function() {\n            {\n                var fin34keys = ((window.top.JSBNG_Replay.forInKeys)((Lc))), fin34i = (0);\n                var a;\n                for (; (fin34i < fin34keys.length); (fin34i++)) {\n                    ((a) = (fin34keys[fin34i]));\n                    {\n                        Lc[a](0, 1);\n                    ;\n                    };\n                };\n            };\n        ;\n        } : !1)), Nc = 0;\n        q.ajaxSettings.xhr = ((a.ActiveXObject ? function() {\n            return ((((!this.isLocal && Oc())) || Pc()));\n        } : Oc));\n        (function(a) {\n            q.extend(q.support, {\n                ajax: !!a,\n                cors: ((!!a && ((\"withCredentials\" in a))))\n            });\n        })(q.ajaxSettings.xhr());\n        ((q.support.ajax && q.ajaxTransport(function(c) {\n            if (((!c.crossDomain || q.support.cors))) {\n                var d;\n                return {\n                    send: function(e, f) {\n                        var g, i, j = c.xhr();\n                        ((c.username ? j.open(c.type, c.url, c.async, c.username, c.password) : j.open(c.type, c.url, c.async)));\n                        if (c.xhrFields) {\n                            {\n                                var fin35keys = ((window.top.JSBNG_Replay.forInKeys)((c.xhrFields))), fin35i = (0);\n                                (0);\n                                for (; (fin35i < fin35keys.length); (fin35i++)) {\n                                    ((i) = (fin35keys[fin35i]));\n                                    {\n                                        j[i] = c.xhrFields[i];\n                                    ;\n                                    };\n                                };\n                            };\n                        }\n                    ;\n                    ;\n                        ((((c.mimeType && j.overrideMimeType)) && j.overrideMimeType(c.mimeType)));\n                        ((((!c.crossDomain && !e[\"X-Requested-With\"])) && (e[\"X-Requested-With\"] = \"JSBNG__XMLHttpRequest\")));\n                        try {\n                            {\n                                var fin36keys = ((window.top.JSBNG_Replay.forInKeys)((e))), fin36i = (0);\n                                (0);\n                                for (; (fin36i < fin36keys.length); (fin36i++)) {\n                                    ((i) = (fin36keys[fin36i]));\n                                    {\n                                        j.setRequestHeader(i, e[i]);\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        } catch (_) {\n                        \n                        };\n                    ;\n                        j.send(((((c.hasContent && c.data)) || null)));\n                        d = function(_, a) {\n                            var e, i, k, l, m;\n                            try {\n                                if (((d && ((a || ((j.readyState === 4))))))) {\n                                    d = b;\n                                    if (g) {\n                                        j.onreadystatechange = q.noop;\n                                        ((Mc && delete Lc[g]));\n                                    }\n                                ;\n                                ;\n                                    if (a) ((((j.readyState !== 4)) && j.abort()));\n                                     else {\n                                        e = j.JSBNG__status;\n                                        k = j.getAllResponseHeaders();\n                                        l = {\n                                        };\n                                        m = j.responseXML;\n                                        ((((m && m.documentElement)) && (l.xml = m)));\n                                        try {\n                                            l.text = j.responseText;\n                                        } catch (n) {\n                                        \n                                        };\n                                    ;\n                                        try {\n                                            i = j.statusText;\n                                        } catch (n) {\n                                            i = \"\";\n                                        };\n                                    ;\n                                        ((((((!e && c.isLocal)) && !c.crossDomain)) ? e = ((l.text ? 200 : 404)) : ((((e === 1223)) && (e = 204)))));\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            } catch (o) {\n                                ((a || f(-1, o)));\n                            };\n                        ;\n                            ((l && f(e, i, l, k)));\n                        };\n                        if (!c.async) {\n                            d();\n                        }\n                         else {\n                            if (((j.readyState === 4))) JSBNG__setTimeout(d, 0);\n                             else {\n                                g = ++Nc;\n                                if (Mc) {\n                                    if (!Lc) {\n                                        Lc = {\n                                        };\n                                        q(a).unload(Mc);\n                                    }\n                                ;\n                                ;\n                                    Lc[g] = d;\n                                }\n                            ;\n                            ;\n                                j.onreadystatechange = d;\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    },\n                    abort: function() {\n                        ((d && d(0, 1)));\n                    }\n                };\n            }\n        ;\n        ;\n        })));\n        var Qc, Rc, Sc = /^(?:toggle|show|hide)$/, Tc = new RegExp(((((\"^(?:([-+])=|)(\" + r)) + \")([a-z%]*)$\")), \"i\"), Uc = /queueHooks$/, Vc = [_c,], Wc = {\n            \"*\": [function(a, b) {\n                var c, d, e = this.createTween(a, b), f = Tc.exec(b), g = e.cur(), i = ((+g || 0)), j = 1, k = 20;\n                if (f) {\n                    c = +f[2];\n                    d = ((f[3] || ((q.cssNumber[a] ? \"\" : \"px\"))));\n                    if (((((d !== \"px\")) && i))) {\n                        i = ((((q.css(e.elem, a, !0) || c)) || 1));\n                        do {\n                            j = ((j || \".5\"));\n                            i /= j;\n                            q.style(e.elem, a, ((i + d)));\n                        } while (((((((j !== (j = ((e.cur() / g))))) && ((j !== 1)))) && --k)));\n                    }\n                ;\n                ;\n                    e.unit = d;\n                    e.start = i;\n                    e.end = ((f[1] ? ((i + ((((f[1] + 1)) * c)))) : c));\n                }\n            ;\n            ;\n                return e;\n            },]\n        };\n        q.Animation = q.extend(Zc, {\n            tweener: function(a, b) {\n                if (q.isFunction(a)) {\n                    b = a;\n                    a = [\"*\",];\n                }\n                 else a = a.split(\" \");\n            ;\n            ;\n                var c, d = 0, e = a.length;\n                for (; ((d < e)); d++) {\n                    c = a[d];\n                    Wc[c] = ((Wc[c] || []));\n                    Wc[c].unshift(b);\n                };\n            ;\n            },\n            prefilter: function(a, b) {\n                ((b ? Vc.unshift(a) : Vc.push(a)));\n            }\n        });\n        q.Tween = ad;\n        ad.prototype = {\n            constructor: ad,\n            init: function(a, b, c, d, e, f) {\n                this.elem = a;\n                this.prop = c;\n                this.easing = ((e || \"swing\"));\n                this.options = b;\n                this.start = this.now = this.cur();\n                this.end = d;\n                this.unit = ((f || ((q.cssNumber[c] ? \"\" : \"px\"))));\n            },\n            cur: function() {\n                var a = ad.propHooks[this.prop];\n                return ((((a && a.get)) ? a.get(this) : ad.propHooks._default.get(this)));\n            },\n            run: function(a) {\n                var b, c = ad.propHooks[this.prop];\n                ((this.options.duration ? this.pos = b = q.easing[this.easing](a, ((this.options.duration * a)), 0, 1, this.options.duration) : this.pos = b = a));\n                this.now = ((((((this.end - this.start)) * b)) + this.start));\n                ((this.options.step && this.options.step.call(this.elem, this.now, this)));\n                ((((c && c.set)) ? c.set(this) : ad.propHooks._default.set(this)));\n                return this;\n            }\n        };\n        ad.prototype.init.prototype = ad.prototype;\n        ad.propHooks = {\n            _default: {\n                get: function(a) {\n                    var b;\n                    if (((((a.elem[a.prop] == null)) || ((!!a.elem.style && ((a.elem.style[a.prop] != null))))))) {\n                        b = q.css(a.elem, a.prop, !1, \"\");\n                        return ((((!b || ((b === \"auto\")))) ? 0 : b));\n                    }\n                ;\n                ;\n                    return a.elem[a.prop];\n                },\n                set: function(a) {\n                    ((q.fx.step[a.prop] ? q.fx.step[a.prop](a) : ((((a.elem.style && ((((a.elem.style[q.cssProps[a.prop]] != null)) || q.cssHooks[a.prop])))) ? q.style(a.elem, a.prop, ((a.now + a.unit))) : a.elem[a.prop] = a.now))));\n                }\n            }\n        };\n        ad.propHooks.scrollTop = ad.propHooks.scrollLeft = {\n            set: function(a) {\n                ((((a.elem.nodeType && a.elem.parentNode)) && (a.elem[a.prop] = a.now)));\n            }\n        };\n        q.each([\"toggle\",\"show\",\"hide\",], function(a, b) {\n            var c = q.fn[b];\n            q.fn[b] = function(d, e, f) {\n                return ((((((((d == null)) || ((typeof d == \"boolean\")))) || ((((!a && q.isFunction(d))) && q.isFunction(e))))) ? c.apply(this, arguments) : this.animate(bd(b, !0), d, e, f)));\n            };\n        });\n        q.fn.extend({\n            fadeTo: function(a, b, c, d) {\n                return this.filter(ac).css(\"opacity\", 0).show().end().animate({\n                    opacity: b\n                }, a, c, d);\n            },\n            animate: function(a, b, c, d) {\n                var e = q.isEmptyObject(a), f = q.speed(b, c, d), g = function() {\n                    var b = Zc(this, q.extend({\n                    }, a), f);\n                    ((e && b.JSBNG__stop(!0)));\n                };\n                return ((((e || ((f.queue === !1)))) ? this.each(g) : this.queue(f.queue, g)));\n            },\n            JSBNG__stop: function(a, c, d) {\n                var e = function(a) {\n                    var b = a.JSBNG__stop;\n                    delete a.JSBNG__stop;\n                    b(d);\n                };\n                if (((typeof a != \"string\"))) {\n                    d = c;\n                    c = a;\n                    a = b;\n                }\n            ;\n            ;\n                ((((c && ((a !== !1)))) && this.queue(((a || \"fx\")), [])));\n                return this.each(function() {\n                    var b = !0, c = ((((a != null)) && ((a + \"queueHooks\")))), f = q.timers, g = q._data(this);\n                    if (c) {\n                        ((((g[c] && g[c].JSBNG__stop)) && e(g[c])));\n                    }\n                     else {\n                        {\n                            var fin37keys = ((window.top.JSBNG_Replay.forInKeys)((g))), fin37i = (0);\n                            (0);\n                            for (; (fin37i < fin37keys.length); (fin37i++)) {\n                                ((c) = (fin37keys[fin37i]));\n                                {\n                                    ((((((g[c] && g[c].JSBNG__stop)) && Uc.test(c))) && e(g[c])));\n                                ;\n                                };\n                            };\n                        };\n                    }\n                ;\n                ;\n                    for (c = f.length; c--; ) {\n                        if (((((f[c].elem === this)) && ((((a == null)) || ((f[c].queue === a))))))) {\n                            f[c].anim.JSBNG__stop(d);\n                            b = !1;\n                            f.splice(c, 1);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    ((((b || !d)) && q.dequeue(this, a)));\n                });\n            }\n        });\n        q.each({\n            slideDown: bd(\"show\"),\n            slideUp: bd(\"hide\"),\n            slideToggle: bd(\"toggle\"),\n            fadeIn: {\n                opacity: \"show\"\n            },\n            fadeOut: {\n                opacity: \"hide\"\n            },\n            fadeToggle: {\n                opacity: \"toggle\"\n            }\n        }, function(a, b) {\n            q.fn[a] = function(a, c, d) {\n                return this.animate(b, a, c, d);\n            };\n        });\n        q.speed = function(a, b, c) {\n            var d = ((((a && ((typeof a == \"object\")))) ? q.extend({\n            }, a) : {\n                complete: ((((c || ((!c && b)))) || ((q.isFunction(a) && a)))),\n                duration: a,\n                easing: ((((c && b)) || ((((b && !q.isFunction(b))) && b))))\n            }));\n            d.duration = ((q.fx.off ? 0 : ((((typeof d.duration == \"number\")) ? d.duration : ((((d.duration in q.fx.speeds)) ? q.fx.speeds[d.duration] : q.fx.speeds._default))))));\n            if (((((d.queue == null)) || ((d.queue === !0))))) {\n                d.queue = \"fx\";\n            }\n        ;\n        ;\n            d.old = d.complete;\n            d.complete = function() {\n                ((q.isFunction(d.old) && d.old.call(this)));\n                ((d.queue && q.dequeue(this, d.queue)));\n            };\n            return d;\n        };\n        q.easing = {\n            linear: function(a) {\n                return a;\n            },\n            swing: function(a) {\n                return ((91581 - ((Math.cos(((a * Math.PI))) / 2))));\n            }\n        };\n        q.timers = [];\n        q.fx = ad.prototype.init;\n        q.fx.tick = function() {\n            var a, c = q.timers, d = 0;\n            Qc = q.now();\n            for (; ((d < c.length)); d++) {\n                a = c[d];\n                ((((!a() && ((c[d] === a)))) && c.splice(d--, 1)));\n            };\n        ;\n            ((c.length || q.fx.JSBNG__stop()));\n            Qc = b;\n        };\n        q.fx.timer = function(a) {\n            ((((((a() && q.timers.push(a))) && !Rc)) && (Rc = JSBNG__setInterval(q.fx.tick, q.fx.interval))));\n        };\n        q.fx.interval = 13;\n        q.fx.JSBNG__stop = function() {\n            JSBNG__clearInterval(Rc);\n            Rc = null;\n        };\n        q.fx.speeds = {\n            slow: 600,\n            fast: 200,\n            _default: 400\n        };\n        q.fx.step = {\n        };\n        ((((q.expr && q.expr.filters)) && (q.expr.filters.animated = function(a) {\n            return q.grep(q.timers, function(b) {\n                return ((a === b.elem));\n            }).length;\n        })));\n        var cd = /^(?:body|html)$/i;\n        q.fn.offset = function(a) {\n            if (arguments.length) {\n                return ((((a === b)) ? this : this.each(function(b) {\n                    q.offset.setOffset(this, a, b);\n                })));\n            }\n        ;\n        ;\n            var c, d, e, f, g, i, j, k = {\n                JSBNG__top: 0,\n                left: 0\n            }, l = this[0], m = ((l && l.ownerDocument));\n            if (!m) {\n                return;\n            }\n        ;\n        ;\n            if ((((d = m.body) === l))) {\n                return q.offset.bodyOffset(l);\n            }\n        ;\n        ;\n            c = m.documentElement;\n            if (!q.contains(c, l)) {\n                return k;\n            }\n        ;\n        ;\n            ((((typeof l.getBoundingClientRect != \"undefined\")) && (k = l.getBoundingClientRect())));\n            e = dd(m);\n            f = ((((c.clientTop || d.clientTop)) || 0));\n            g = ((((c.clientLeft || d.clientLeft)) || 0));\n            i = ((e.JSBNG__pageYOffset || c.scrollTop));\n            j = ((e.JSBNG__pageXOffset || c.scrollLeft));\n            return {\n                JSBNG__top: ((((k.JSBNG__top + i)) - f)),\n                left: ((((k.left + j)) - g))\n            };\n        };\n        q.offset = {\n            bodyOffset: function(a) {\n                var b = a.offsetTop, c = a.offsetLeft;\n                if (q.support.doesNotIncludeMarginInBodyOffset) {\n                    b += ((parseFloat(q.css(a, \"marginTop\")) || 0));\n                    c += ((parseFloat(q.css(a, \"marginLeft\")) || 0));\n                }\n            ;\n            ;\n                return {\n                    JSBNG__top: b,\n                    left: c\n                };\n            },\n            setOffset: function(a, b, c) {\n                var d = q.css(a, \"position\");\n                ((((d === \"static\")) && (a.style.position = \"relative\")));\n                var e = q(a), f = e.offset(), g = q.css(a, \"JSBNG__top\"), i = q.css(a, \"left\"), j = ((((((d === \"absolute\")) || ((d === \"fixed\")))) && ((q.inArray(\"auto\", [g,i,]) > -1)))), k = {\n                }, l = {\n                }, m, n;\n                if (j) {\n                    l = e.position();\n                    m = l.JSBNG__top;\n                    n = l.left;\n                }\n                 else {\n                    m = ((parseFloat(g) || 0));\n                    n = ((parseFloat(i) || 0));\n                }\n            ;\n            ;\n                ((q.isFunction(b) && (b = b.call(a, c, f))));\n                ((((b.JSBNG__top != null)) && (k.JSBNG__top = ((((b.JSBNG__top - f.JSBNG__top)) + m)))));\n                ((((b.left != null)) && (k.left = ((((b.left - f.left)) + n)))));\n                ((((\"using\" in b)) ? b.using.call(a, k) : e.css(k)));\n            }\n        };\n        q.fn.extend({\n            position: function() {\n                if (!this[0]) {\n                    return;\n                }\n            ;\n            ;\n                var a = this[0], b = this.offsetParent(), c = this.offset(), d = ((cd.test(b[0].nodeName) ? {\n                    JSBNG__top: 0,\n                    left: 0\n                } : b.offset()));\n                c.JSBNG__top -= ((parseFloat(q.css(a, \"marginTop\")) || 0));\n                c.left -= ((parseFloat(q.css(a, \"marginLeft\")) || 0));\n                d.JSBNG__top += ((parseFloat(q.css(b[0], \"borderTopWidth\")) || 0));\n                d.left += ((parseFloat(q.css(b[0], \"borderLeftWidth\")) || 0));\n                return {\n                    JSBNG__top: ((c.JSBNG__top - d.JSBNG__top)),\n                    left: ((c.left - d.left))\n                };\n            },\n            offsetParent: function() {\n                return this.map(function() {\n                    var a = ((this.offsetParent || e.body));\n                    while (((((a && !cd.test(a.nodeName))) && ((q.css(a, \"position\") === \"static\"))))) {\n                        a = a.offsetParent;\n                    ;\n                    };\n                ;\n                    return ((a || e.body));\n                });\n            }\n        });\n        q.each({\n            scrollLeft: \"JSBNG__pageXOffset\",\n            scrollTop: \"JSBNG__pageYOffset\"\n        }, function(a, c) {\n            var d = /Y/.test(c);\n            q.fn[a] = function(e) {\n                return q.access(this, function(a, e, f) {\n                    var g = dd(a);\n                    if (((f === b))) {\n                        return ((g ? ((((c in g)) ? g[c] : g.JSBNG__document.documentElement[e])) : a[e]));\n                    }\n                ;\n                ;\n                    ((g ? g.JSBNG__scrollTo(((d ? q(g).scrollLeft() : f)), ((d ? f : q(g).scrollTop()))) : a[e] = f));\n                }, a, e, arguments.length, null);\n            };\n        });\n        q.each({\n            Height: \"height\",\n            Width: \"width\"\n        }, function(a, c) {\n            q.each({\n                padding: ((\"JSBNG__inner\" + a)),\n                JSBNG__content: c,\n                \"\": ((\"JSBNG__outer\" + a))\n            }, function(d, e) {\n                q.fn[e] = function(e, f) {\n                    var g = ((arguments.length && ((d || ((typeof e != \"boolean\")))))), i = ((d || ((((((e === !0)) || ((f === !0)))) ? \"margin\" : \"border\"))));\n                    return q.access(this, function(c, d, e) {\n                        var f;\n                        if (q.isWindow(c)) {\n                            return c.JSBNG__document.documentElement[((\"client\" + a))];\n                        }\n                    ;\n                    ;\n                        if (((c.nodeType === 9))) {\n                            f = c.documentElement;\n                            return Math.max(c.body[((\"JSBNG__scroll\" + a))], f[((\"JSBNG__scroll\" + a))], c.body[((\"offset\" + a))], f[((\"offset\" + a))], f[((\"client\" + a))]);\n                        }\n                    ;\n                    ;\n                        return ((((e === b)) ? q.css(c, d, e, i) : q.style(c, d, e, i)));\n                    }, c, ((g ? e : b)), g, null);\n                };\n            });\n        });\n        a.jQuery = a.$ = q;\n        ((((((((typeof define == \"function\")) && define.amd)) && define.amd.jQuery)) && define(\"jquery\", [], function() {\n            return q;\n        })));\n    })(window);\n    (function(a) {\n        ((((typeof define == \"function\")) ? define(a) : ((((typeof YUI == \"function\")) ? YUI.add(\"es5\", a) : a()))));\n    })(function() {\n        ((Function.prototype.bind || (Function.prototype.bind = function(b) {\n            var c = this;\n            if (((typeof c != \"function\"))) {\n                throw new TypeError(((\"Function.prototype.bind called on incompatible \" + c)));\n            }\n        ;\n        ;\n            var e = d.call(arguments, 1), f = function() {\n                if (((this instanceof f))) {\n                    var a = function() {\n                    \n                    };\n                    a.prototype = c.prototype;\n                    var g = new a, i = c.apply(g, e.concat(d.call(arguments)));\n                    return ((((Object(i) === i)) ? i : g));\n                }\n            ;\n            ;\n                return c.apply(b, e.concat(d.call(arguments)));\n            };\n            return f;\n        })));\n        var a = Function.prototype.call, b = Array.prototype, c = Object.prototype, d = b.slice, e = a.bind(c.toString), f = a.bind(c.hasOwnProperty), g, i, j, k, l;\n        if (l = f(c, \"__defineGetter__\")) {\n            g = a.bind(c.__defineGetter__);\n            i = a.bind(c.__defineSetter__);\n            j = a.bind(c.__lookupGetter__);\n            k = a.bind(c.__lookupSetter__);\n        }\n    ;\n    ;\n        ((Array.isArray || (Array.isArray = function(b) {\n            return ((e(b) == \"[object Array]\"));\n        })));\n        ((Array.prototype.forEach || (Array.prototype.forEach = function(b) {\n            var c = v(this), d = arguments[1], f = -1, g = ((c.length >>> 0));\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError;\n            }\n        ;\n        ;\n            while (((++f < g))) {\n                ((((f in c)) && b.call(d, c[f], f, c)));\n            ;\n            };\n        ;\n        })));\n        ((Array.prototype.map || (Array.prototype.map = function(b) {\n            var c = v(this), d = ((c.length >>> 0)), f = Array(d), g = arguments[1];\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            for (var i = 0; ((i < d)); i++) {\n                ((((i in c)) && (f[i] = b.call(g, c[i], i, c))));\n            ;\n            };\n        ;\n            return f;\n        })));\n        ((Array.prototype.filter || (Array.prototype.filter = function(b) {\n            var c = v(this), d = ((c.length >>> 0)), f = [], g, i = arguments[1];\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            for (var j = 0; ((j < d)); j++) {\n                if (((j in c))) {\n                    g = c[j];\n                    ((b.call(i, g, j, c) && f.push(g)));\n                }\n            ;\n            ;\n            };\n        ;\n            return f;\n        })));\n        ((Array.prototype.every || (Array.prototype.every = function(b) {\n            var c = v(this), d = ((c.length >>> 0)), f = arguments[1];\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            for (var g = 0; ((g < d)); g++) {\n                if (((((g in c)) && !b.call(f, c[g], g, c)))) {\n                    return !1;\n                }\n            ;\n            ;\n            };\n        ;\n            return !0;\n        })));\n        ((Array.prototype.some || (Array.prototype.some = function(b) {\n            var c = v(this), d = ((c.length >>> 0)), f = arguments[1];\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            for (var g = 0; ((g < d)); g++) {\n                if (((((g in c)) && b.call(f, c[g], g, c)))) {\n                    return !0;\n                }\n            ;\n            ;\n            };\n        ;\n            return !1;\n        })));\n        ((Array.prototype.reduce || (Array.prototype.reduce = function(b) {\n            var c = v(this), d = ((c.length >>> 0));\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            if (((!d && ((arguments.length == 1))))) {\n                throw new TypeError(\"reduce of empty array with no initial value\");\n            }\n        ;\n        ;\n            var f = 0, g;\n            if (((arguments.length >= 2))) {\n                g = arguments[1];\n            }\n             else {\n                do {\n                    if (((f in c))) {\n                        g = c[f++];\n                        break;\n                    }\n                ;\n                ;\n                    if (((++f >= d))) {\n                        throw new TypeError(\"reduce of empty array with no initial value\");\n                    }\n                ;\n                ;\n                } while (!0);\n            }\n        ;\n        ;\n            for (; ((f < d)); f++) {\n                ((((f in c)) && (g = b.call(void 0, g, c[f], f, c))));\n            ;\n            };\n        ;\n            return g;\n        })));\n        ((Array.prototype.reduceRight || (Array.prototype.reduceRight = function(b) {\n            var c = v(this), d = ((c.length >>> 0));\n            if (((e(b) != \"[object Function]\"))) {\n                throw new TypeError(((b + \" is not a function\")));\n            }\n        ;\n        ;\n            if (((!d && ((arguments.length == 1))))) {\n                throw new TypeError(\"reduceRight of empty array with no initial value\");\n            }\n        ;\n        ;\n            var f, g = ((d - 1));\n            if (((arguments.length >= 2))) {\n                f = arguments[1];\n            }\n             else {\n                do {\n                    if (((g in c))) {\n                        f = c[g--];\n                        break;\n                    }\n                ;\n                ;\n                    if (((--g < 0))) {\n                        throw new TypeError(\"reduceRight of empty array with no initial value\");\n                    }\n                ;\n                ;\n                } while (!0);\n            }\n        ;\n        ;\n            do ((((g in this)) && (f = b.call(void 0, f, c[g], g, c)))); while (g--);\n            return f;\n        })));\n        ((Array.prototype.indexOf || (Array.prototype.indexOf = function(b) {\n            var c = v(this), d = ((c.length >>> 0));\n            if (!d) {\n                return -1;\n            }\n        ;\n        ;\n            var e = 0;\n            ((((arguments.length > 1)) && (e = t(arguments[1]))));\n            e = ((((e >= 0)) ? e : Math.max(0, ((d + e)))));\n            for (; ((e < d)); e++) {\n                if (((((e in c)) && ((c[e] === b))))) {\n                    return e;\n                }\n            ;\n            ;\n            };\n        ;\n            return -1;\n        })));\n        ((Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(b) {\n            var c = v(this), d = ((c.length >>> 0));\n            if (!d) {\n                return -1;\n            }\n        ;\n        ;\n            var e = ((d - 1));\n            ((((arguments.length > 1)) && (e = Math.min(e, t(arguments[1])))));\n            e = ((((e >= 0)) ? e : ((d - Math.abs(e)))));\n            for (; ((e >= 0)); e--) {\n                if (((((e in c)) && ((b === c[e]))))) {\n                    return e;\n                }\n            ;\n            ;\n            };\n        ;\n            return -1;\n        })));\n        if (!Object.keys) {\n            var m = !0, n = [\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\",], o = n.length;\n            {\n                var fin38keys = ((window.top.JSBNG_Replay.forInKeys)(({\n                    toString: null\n                }))), fin38i = (0);\n                var p;\n                for (; (fin38i < fin38keys.length); (fin38i++)) {\n                    ((p) = (fin38keys[fin38i]));\n                    {\n                        m = !1;\n                    ;\n                    };\n                };\n            };\n        ;\n            Object.keys = function w(a) {\n                if (((((((typeof a != \"object\")) && ((typeof a != \"function\")))) || ((a === null))))) {\n                    throw new TypeError(\"Object.keys called on a non-object\");\n                }\n            ;\n            ;\n                var w = [];\n                {\n                    var fin39keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin39i = (0);\n                    var b;\n                    for (; (fin39i < fin39keys.length); (fin39i++)) {\n                        ((b) = (fin39keys[fin39i]));\n                        {\n                            ((f(a, b) && w.push(b)));\n                        ;\n                        };\n                    };\n                };\n            ;\n                if (m) {\n                    for (var c = 0, d = o; ((c < d)); c++) {\n                        var e = n[c];\n                        ((f(a, e) && w.push(e)));\n                    };\n                }\n            ;\n            ;\n                return w;\n            };\n        }\n    ;\n    ;\n        if (((!JSBNG__Date.prototype.toISOString || (((new JSBNG__Date(-62198755200000)).toISOString().indexOf(\"-000001\") === -1))))) {\n            JSBNG__Date.prototype.toISOString = function() {\n                var b, c, d, e;\n                if (!isFinite(this)) {\n                    throw new RangeError(\"JSBNG__Date.prototype.toISOString called on non-finite value.\");\n                }\n            ;\n            ;\n                b = [((this.getUTCMonth() + 1)),this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds(),];\n                e = this.getUTCFullYear();\n                e = ((((((e < 0)) ? \"-\" : ((((e > 9999)) ? \"+\" : \"\")))) + ((\"00000\" + Math.abs(e))).slice(((((((0 <= e)) && ((e <= 9999)))) ? -4 : -6)))));\n                c = b.length;\n                while (c--) {\n                    d = b[c];\n                    ((((d < 10)) && (b[c] = ((\"0\" + d)))));\n                };\n            ;\n                return ((((((((((((((e + \"-\")) + b.slice(0, 2).join(\"-\"))) + \"T\")) + b.slice(2).join(\":\"))) + \".\")) + ((\"000\" + this.getUTCMilliseconds())).slice(-3))) + \"Z\"));\n            };\n        }\n    ;\n    ;\n        ((JSBNG__Date.now || (JSBNG__Date.now = function() {\n            return (new JSBNG__Date).getTime();\n        })));\n        ((JSBNG__Date.prototype.toJSON || (JSBNG__Date.prototype.toJSON = function(b) {\n            if (((typeof this.toISOString != \"function\"))) {\n                throw new TypeError(\"toISOString property is not callable\");\n            }\n        ;\n        ;\n            return this.toISOString();\n        })));\n        if (((!JSBNG__Date.parse || ((JSBNG__Date.parse(\"+275760-09-13T00:00:00.000Z\") !== 8640000000000000))))) {\n            JSBNG__Date = function(a) {\n                var b = function e(b, c, d, h, f, g, i) {\n                    var j = arguments.length;\n                    if (((this instanceof a))) {\n                        var k = ((((((j == 1)) && ((String(b) === b)))) ? new a(e.parse(b)) : ((((j >= 7)) ? new a(b, c, d, h, f, g, i) : ((((j >= 6)) ? new a(b, c, d, h, f, g) : ((((j >= 5)) ? new a(b, c, d, h, f) : ((((j >= 4)) ? new a(b, c, d, h) : ((((j >= 3)) ? new a(b, c, d) : ((((j >= 2)) ? new a(b, c) : ((((j >= 1)) ? new a(b) : new a))))))))))))))));\n                        k.constructor = e;\n                        return k;\n                    }\n                ;\n                ;\n                    return a.apply(this, arguments);\n                }, c = new RegExp(\"^(\\\\d{4}|[+-]\\\\d{6})(?:-(\\\\d{2})(?:-(\\\\d{2})(?:T(\\\\d{2}):(\\\\d{2})(?::(\\\\d{2})(?:\\\\.(\\\\d{3}))?)?(?:Z|(?:([-+])(\\\\d{2}):(\\\\d{2})))?)?)?)?$\");\n                {\n                    var fin40keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin40i = (0);\n                    var d;\n                    for (; (fin40i < fin40keys.length); (fin40i++)) {\n                        ((d) = (fin40keys[fin40i]));\n                        {\n                            b[d] = a[d];\n                        ;\n                        };\n                    };\n                };\n            ;\n                b.now = a.now;\n                b.UTC = a.UTC;\n                b.prototype = a.prototype;\n                b.prototype.constructor = b;\n                b.parse = function(d) {\n                    var e = c.exec(d);\n                    if (e) {\n                        e.shift();\n                        for (var f = 1; ((f < 7)); f++) {\n                            e[f] = +((e[f] || ((((f < 3)) ? 1 : 0))));\n                            ((((f == 1)) && e[f]--));\n                        };\n                    ;\n                        var g = +e.pop(), i = +e.pop(), j = e.pop(), k = 0;\n                        if (j) {\n                            if (((((i > 23)) || ((g > 59))))) {\n                                return NaN;\n                            }\n                        ;\n                        ;\n                            k = ((((((((i * 60)) + g)) * 60000)) * ((((j == \"+\")) ? -1 : 1))));\n                        }\n                    ;\n                    ;\n                        var l = +e[0];\n                        if (((((0 <= l)) && ((l <= 99))))) {\n                            e[0] = ((l + 400));\n                            return ((((a.UTC.apply(this, e) + k)) - 12622780800000));\n                        }\n                    ;\n                    ;\n                        return ((a.UTC.apply(this, e) + k));\n                    }\n                ;\n                ;\n                    return a.parse.apply(this, arguments);\n                };\n                return b;\n            }(JSBNG__Date);\n        }\n    ;\n    ;\n        var q = \"\\u0009\\u000a\\u000b\\u000c\\u000d \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";\n        if (((!String.prototype.trim || q.trim()))) {\n            q = ((((\"[\" + q)) + \"]\"));\n            var r = new RegExp(((((((\"^\" + q)) + q)) + \"*\"))), s = new RegExp(((((q + q)) + \"*$\")));\n            String.prototype.trim = function() {\n                if (((((this === undefined)) || ((this === null))))) {\n                    throw new TypeError(((((\"can't convert \" + this)) + \" to object\")));\n                }\n            ;\n            ;\n                return String(this).replace(r, \"\").replace(s, \"\");\n            };\n        }\n    ;\n    ;\n        var t = function(a) {\n            a = +a;\n            ((((a !== a)) ? a = 0 : ((((((((a !== 0)) && ((a !== ((1 / 0)))))) && ((a !== -Infinity)))) && (a = ((((((a > 0)) || -1)) * Math.floor(Math.abs(a)))))))));\n            return a;\n        }, u = ((\"a\"[0] != \"a\")), v = function(a) {\n            if (((a == null))) {\n                throw new TypeError(((((\"can't convert \" + a)) + \" to object\")));\n            }\n        ;\n        ;\n            return ((((((u && ((typeof a == \"string\")))) && a)) ? a.split(\"\") : Object(a)));\n        };\n    });\n    (function(a) {\n        ((((typeof define == \"function\")) ? define(a) : ((((typeof YUI == \"function\")) ? YUI.add(\"es5-sham\", a) : a()))));\n    })(function() {\n        function b(a) {\n            try {\n                Object.defineProperty(a, \"sentinel\", {\n                });\n                return ((\"sentinel\" in a));\n            } catch (b) {\n            \n            };\n        ;\n        };\n    ;\n        ((Object.getPrototypeOf || (Object.getPrototypeOf = function(b) {\n            return ((b.__proto__ || ((b.constructor ? b.constructor.prototype : prototypeOfObject))));\n        })));\n        if (!Object.getOwnPropertyDescriptor) {\n            var a = \"Object.getOwnPropertyDescriptor called on a non-object: \";\n            Object.getOwnPropertyDescriptor = function(c, d) {\n                if (((((((typeof c != \"object\")) && ((typeof c != \"function\")))) || ((c === null))))) {\n                    throw new TypeError(((a + c)));\n                }\n            ;\n            ;\n                if (!owns(c, d)) {\n                    return;\n                }\n            ;\n            ;\n                var e = {\n                    enumerable: !0,\n                    configurable: !0\n                };\n                if (supportsAccessors) {\n                    var f = c.__proto__;\n                    c.__proto__ = prototypeOfObject;\n                    var g = lookupGetter(c, d), i = lookupSetter(c, d);\n                    c.__proto__ = f;\n                    if (((g || i))) {\n                        ((g && (e.get = g)));\n                        ((i && (e.set = i)));\n                        return e;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                e.value = c[d];\n                return e;\n            };\n        }\n    ;\n    ;\n        ((Object.getOwnPropertyNames || (Object.getOwnPropertyNames = function(b) {\n            return Object.keys(b);\n        })));\n        ((Object.create || (Object.create = function(b, c) {\n            var d;\n            if (((b === null))) d = {\n                __proto__: null\n            };\n             else {\n                if (((typeof b != \"object\"))) {\n                    throw new TypeError(((((\"typeof prototype[\" + typeof b)) + \"] != 'object'\")));\n                }\n            ;\n            ;\n                var e = function() {\n                \n                };\n                e.prototype = b;\n                d = new e;\n                d.__proto__ = b;\n            }\n        ;\n        ;\n            ((((c !== void 0)) && Object.defineProperties(d, c)));\n            return d;\n        })));\n        if (Object.defineProperty) {\n            var c = b({\n            }), d = ((((typeof JSBNG__document == \"undefined\")) || b(JSBNG__document.createElement(\"div\"))));\n            if (((!c || !d))) {\n                var e = Object.defineProperty;\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        if (((!Object.defineProperty || e))) {\n            var f = \"Property description must be an object: \", g = \"Object.defineProperty called on non-object: \", i = \"getters & setters can not be defined on this javascript engine\";\n            Object.defineProperty = function(b, c, d) {\n                if (((((((typeof b != \"object\")) && ((typeof b != \"function\")))) || ((b === null))))) {\n                    throw new TypeError(((g + b)));\n                }\n            ;\n            ;\n                if (((((((typeof d != \"object\")) && ((typeof d != \"function\")))) || ((d === null))))) {\n                    throw new TypeError(((f + d)));\n                }\n            ;\n            ;\n                if (e) {\n                    try {\n                        return e.call(Object, b, c, d);\n                    } catch (j) {\n                    \n                    };\n                }\n            ;\n            ;\n                if (owns(d, \"value\")) if (((supportsAccessors && ((lookupGetter(b, c) || lookupSetter(b, c)))))) {\n                    var k = b.__proto__;\n                    b.__proto__ = prototypeOfObject;\n                    delete b[c];\n                    b[c] = d.value;\n                    b.__proto__ = k;\n                }\n                 else b[c] = d.value;\n                \n                 else {\n                    if (!supportsAccessors) {\n                        throw new TypeError(i);\n                    }\n                ;\n                ;\n                    ((owns(d, \"get\") && defineGetter(b, c, d.get)));\n                    ((owns(d, \"set\") && defineSetter(b, c, d.set)));\n                }\n            ;\n            ;\n                return b;\n            };\n        }\n    ;\n    ;\n        ((Object.defineProperties || (Object.defineProperties = function(b, c) {\n            {\n                var fin41keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin41i = (0);\n                var d;\n                for (; (fin41i < fin41keys.length); (fin41i++)) {\n                    ((d) = (fin41keys[fin41i]));\n                    {\n                        ((((owns(c, d) && ((d != \"__proto__\")))) && Object.defineProperty(b, d, c[d])));\n                    ;\n                    };\n                };\n            };\n        ;\n            return b;\n        })));\n        ((Object.seal || (Object.seal = function(b) {\n            return b;\n        })));\n        ((Object.freeze || (Object.freeze = function(b) {\n            return b;\n        })));\n        try {\n            Object.freeze(function() {\n            \n            });\n        } catch (j) {\n            Object.freeze = function(b) {\n                return function(c) {\n                    return ((((typeof c == \"function\")) ? c : b(c)));\n                };\n            }(Object.freeze);\n        };\n    ;\n        ((Object.preventExtensions || (Object.preventExtensions = function(b) {\n            return b;\n        })));\n        ((Object.isSealed || (Object.isSealed = function(b) {\n            return !1;\n        })));\n        ((Object.isFrozen || (Object.isFrozen = function(b) {\n            return !1;\n        })));\n        ((Object.isExtensible || (Object.isExtensible = function(b) {\n            if (((Object(b) !== b))) {\n                throw new TypeError;\n            }\n        ;\n        ;\n            var c = \"\";\n            while (owns(b, c)) {\n                c += \"?\";\n            ;\n            };\n        ;\n            b[c] = !0;\n            var d = owns(b, c);\n            delete b[c];\n            return d;\n        })));\n    });\n    (function(a, b) {\n        function t(a) {\n            for (var b = 1, c; c = arguments[b]; b++) {\n                {\n                    var fin42keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin42i = (0);\n                    var d;\n                    for (; (fin42i < fin42keys.length); (fin42i++)) {\n                        ((d) = (fin42keys[fin42i]));\n                        {\n                            a[d] = c[d];\n                        ;\n                        };\n                    };\n                };\n            ;\n            };\n        ;\n            return a;\n        };\n    ;\n        function u(a) {\n            return Array.prototype.slice.call(a);\n        };\n    ;\n        function w(a, b) {\n            for (var c = 0, d; d = a[c]; c++) {\n                if (((b == d))) {\n                    return c;\n                }\n            ;\n            ;\n            };\n        ;\n            return -1;\n        };\n    ;\n        function x() {\n            var a = u(arguments), b = [];\n            for (var c = 0, d = a.length; ((c < d)); c++) {\n                ((((a[c].length > 0)) && b.push(a[c].replace(/\\/$/, \"\"))));\n            ;\n            };\n        ;\n            return b.join(\"/\");\n        };\n    ;\n        function y(a, b, c) {\n            var d = b.split(\"/\"), e = a;\n            while (((d.length > 1))) {\n                var f = d.shift();\n                e = e[f] = ((e[f] || {\n                }));\n            };\n        ;\n            e[d[0]] = c;\n        };\n    ;\n        function z() {\n        \n        };\n    ;\n        function A(a, b) {\n            ((a && (this.id = this.path = this.resolvePath(a))));\n            this.originalPath = a;\n            this.force = !!b;\n        };\n    ;\n        function B(a, b) {\n            this.id = a;\n            this.path = this.resolvePath(a);\n            this.force = b;\n        };\n    ;\n        function C(a, b) {\n            this.id = a;\n            this.contents = b;\n            this.dep = O(a);\n            this.deps = [];\n            this.path = this.dep.path;\n        };\n    ;\n        function D(a, b) {\n            var d;\n            this.body = b;\n            if (!a) if (c) {\n                d = ((i || K()));\n                if (d) {\n                    this.setId(d.id);\n                    delete j[d.scriptId];\n                    this.then(function(a) {\n                        d.complete.call(d, a);\n                    });\n                }\n            ;\n            ;\n            }\n             else g = this;\n            \n             else {\n                this.setId(a);\n                (((d = p[((\"module_\" + this.id))]) && this.then(function(a) {\n                    d.complete.call(d, a);\n                })));\n            }\n        ;\n        ;\n        };\n    ;\n        function E(a) {\n            var b = [];\n            for (var c = 0, d; d = a[c]; c++) {\n                ((((d instanceof H)) ? b = b.concat(E(d.deps)) : ((((d instanceof B)) && b.push(d)))));\n            ;\n            };\n        ;\n            return b;\n        };\n    ;\n        function F() {\n            for (var a = 0, b; b = this.deps[a]; a++) {\n                if (b.forceFetch) b.forceFetch();\n                 else {\n                    b.force = !0;\n                    b.start();\n                }\n            ;\n            ;\n            };\n        ;\n            return this;\n        };\n    ;\n        function G(a) {\n            this.deps = a;\n            ((((this.deps.length == 0)) && this.complete()));\n        };\n    ;\n        function H(a) {\n            this.deps = a;\n        };\n    ;\n        function J() {\n            this.entries = {\n            };\n        };\n    ;\n        function K() {\n            {\n                var fin43keys = ((window.top.JSBNG_Replay.forInKeys)((d))), fin43i = (0);\n                var a;\n                for (; (fin43i < fin43keys.length); (fin43i++)) {\n                    ((a) = (fin43keys[fin43i]));\n                    {\n                        if (((d[a].readyState == \"interactive\"))) {\n                            return j[d[a].id];\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n        };\n    ;\n        function L() {\n            var a = u(arguments), b, c;\n            ((((typeof a[0] == \"string\")) && (b = a.shift())));\n            c = a.shift();\n            return new D(b, c);\n        };\n    ;\n        function M() {\n            var a = u(arguments), b;\n            ((((typeof a[((a.length - 1))] == \"function\")) && (b = a.pop())));\n            var c = new G(N(a));\n            ((b && c.then(b)));\n            return c;\n        };\n    ;\n        function N(a) {\n            var b = [];\n            for (var c = 0, d; d = a[c]; c++) {\n                ((((typeof d == \"string\")) && (d = O(d))));\n                ((v(d) && (d = new H(N(d)))));\n                b.push(d);\n            };\n        ;\n            return b;\n        };\n    ;\n        function O(a) {\n            var b, c;\n            for (var d = 0, e; e = M.matchers[d]; d++) {\n                var f = e[0], g = e[1];\n                if (b = a.match(f)) {\n                    return g(a);\n                }\n            ;\n            ;\n            };\n        ;\n            throw new Error(((a + \" was not recognised by loader\")));\n        };\n    ;\n        function Q() {\n            a.using = k;\n            a.provide = l;\n            a.loadrunner = m;\n            return P;\n        };\n    ;\n        function R(a) {\n            function d(b, d) {\n                c[d] = ((c[d] || {\n                }));\n                c[d][a] = {\n                    key: a,\n                    start: b.startTime,\n                    end: b.endTime,\n                    duration: ((b.endTime - ((b.startTime || (new JSBNG__Date).getTime())))),\n                    JSBNG__status: d,\n                    origin: b\n                };\n            };\n        ;\n            var b, c = {\n            };\n            if (((a && (((((b = o[a]) || (b = p[a]))) || (b = n[a])))))) {\n                return {\n                    start: b.startTime,\n                    end: b.endTime,\n                    duration: ((b.endTime - ((b.startTime || (new JSBNG__Date).getTime())))),\n                    origin: b\n                };\n            }\n        ;\n        ;\n            {\n                var fin44keys = ((window.top.JSBNG_Replay.forInKeys)((o))), fin44i = (0);\n                var a;\n                for (; (fin44i < fin44keys.length); (fin44i++)) {\n                    ((a) = (fin44keys[fin44i]));\n                    {\n                        d(o[a], \"met\");\n                    ;\n                    };\n                };\n            };\n        ;\n            {\n                var fin45keys = ((window.top.JSBNG_Replay.forInKeys)((p))), fin45i = (0);\n                var a;\n                for (; (fin45i < fin45keys.length); (fin45i++)) {\n                    ((a) = (fin45keys[fin45i]));\n                    {\n                        d(p[a], \"inProgress\");\n                    ;\n                    };\n                };\n            };\n        ;\n            {\n                var fin46keys = ((window.top.JSBNG_Replay.forInKeys)((n))), fin46i = (0);\n                var a;\n                for (; (fin46i < fin46keys.length); (fin46i++)) {\n                    ((a) = (fin46keys[fin46i]));\n                    {\n                        d(n[a], \"paused\");\n                    ;\n                    };\n                };\n            };\n        ;\n            return c;\n        };\n    ;\n        function S() {\n            n = {\n            };\n            o = {\n            };\n            p = {\n            };\n            M.bundles = new J;\n            B.exports = {\n            };\n            D.provided = {\n            };\n        };\n    ;\n        function T(a) {\n            return ((M.bundles.get(a) || undefined));\n        };\n    ;\n        var c = ((a.JSBNG__attachEvent && !a.JSBNG__opera)), d = b.getElementsByTagName(\"script\"), e, f = b.createElement(\"script\"), g, i, j = {\n        }, k = a.using, l = a.provide, m = a.loadrunner, n = {\n        }, o = {\n        }, p = {\n        };\n        for (var q = 0, r; r = d[q]; q++) {\n            if (r.src.match(/loadrunner\\.js(\\?|#|$)/)) {\n                e = r;\n                break;\n            }\n        ;\n        ;\n        };\n    ;\n        var s = function() {\n            var a = 0;\n            return function() {\n                return a++;\n            };\n        }(), v = ((Array.isArray || function(a) {\n            return ((a.constructor == Array));\n        }));\n        z.prototype.then = function(b) {\n            this.callbacks = ((this.callbacks || []));\n            this.callbacks.push(b);\n            ((this.completed ? b.apply(a, this.results) : ((((this.callbacks.length == 1)) && this.start()))));\n            return this;\n        };\n        z.prototype.key = function() {\n            ((this.id || (this.id = s())));\n            return ((\"dependency_\" + this.id));\n        };\n        z.prototype.start = function() {\n            var a = this, b, c;\n            this.startTime = (new JSBNG__Date).getTime();\n            if (b = o[this.key()]) {\n                this.complete.apply(this, b.results);\n            }\n             else {\n                if (c = p[this.key()]) {\n                    c.then(function() {\n                        a.complete.apply(a, arguments);\n                    });\n                }\n                 else {\n                    if (this.shouldFetch()) {\n                        p[this.key()] = this;\n                        this.fetch();\n                    }\n                     else {\n                        n[this.key()] = ((n[this.key()] || []));\n                        n[this.key()].push(this);\n                    }\n                ;\n                }\n            ;\n            }\n        ;\n        ;\n        };\n        z.prototype.shouldFetch = function() {\n            return !0;\n        };\n        z.prototype.complete = function() {\n            var b;\n            this.endTime = (new JSBNG__Date).getTime();\n            delete p[this.key()];\n            ((o[this.key()] || (o[this.key()] = this)));\n            if (!this.completed) {\n                this.results = u(arguments);\n                this.completed = !0;\n                if (this.callbacks) {\n                    for (var c = 0, d; d = this.callbacks[c]; c++) {\n                        d.apply(a, this.results);\n                    ;\n                    };\n                }\n            ;\n            ;\n                if (b = n[this.key()]) {\n                    for (var c = 0, e; e = b[c]; c++) {\n                        e.complete.apply(e, arguments);\n                    ;\n                    };\n                ;\n                    delete n[this.key()];\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n        };\n        A.autoFetch = !0;\n        A.xhrTransport = function() {\n            var a, b = this;\n            if (window.JSBNG__XMLHttpRequest) {\n                a = new window.JSBNG__XMLHttpRequest;\n            }\n             else {\n                try {\n                    a = new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n                } catch (c) {\n                    return new Error(\"XHR not found.\");\n                };\n            }\n        ;\n        ;\n            a.onreadystatechange = function() {\n                var c;\n                ((((a.readyState == 4)) && b.loaded(a.responseText)));\n            };\n            a.open(\"GET\", this.path, !0);\n            a.send(null);\n        };\n        A.scriptTagTransport = function() {\n            var b = f.cloneNode(!1), c = this;\n            this.scriptId = ((\"LR\" + s()));\n            b.id = this.scriptId;\n            b.type = \"text/javascript\";\n            b.async = !0;\n            b.JSBNG__onerror = function() {\n                throw new Error(((c.path + \" not loaded\")));\n            };\n            b.onreadystatechange = b.JSBNG__onload = function(b) {\n                b = ((a.JSBNG__event || b));\n                if (((((b.type == \"load\")) || ((w([\"loaded\",\"complete\",], this.readyState) > -1))))) {\n                    this.onreadystatechange = null;\n                    c.loaded();\n                }\n            ;\n            ;\n            };\n            b.src = this.path;\n            i = this;\n            d[0].parentNode.insertBefore(b, d[0]);\n            i = null;\n            j[this.scriptId] = this;\n        };\n        A.prototype = new z;\n        A.prototype.start = function() {\n            var a = this, b;\n            (((def = D.provided[this.originalPath]) ? def.then(function() {\n                a.complete();\n            }) : (((b = T(this.originalPath)) ? b.then(function() {\n                a.start();\n            }) : z.prototype.start.call(this)))));\n        };\n        A.prototype.resolvePath = function(a) {\n            a = a.replace(/^\\$/, ((M.path.replace(/\\/$/, \"\") + \"/\")));\n            return a;\n        };\n        A.prototype.key = function() {\n            return ((\"script_\" + this.id));\n        };\n        A.prototype.shouldFetch = function() {\n            return ((A.autoFetch || this.force));\n        };\n        A.prototype.fetch = A.scriptTagTransport;\n        A.prototype.loaded = function() {\n            this.complete();\n        };\n        B.exports = {\n        };\n        B.prototype = new A;\n        B.prototype.start = function() {\n            var a = this, b, c;\n            (((b = D.provided[this.id]) ? b.then(function(b) {\n                a.complete.call(a, b);\n            }) : (((c = T(this.id)) ? c.then(function() {\n                a.start();\n            }) : A.prototype.start.call(this)))));\n        };\n        B.prototype.key = function() {\n            return ((\"module_\" + this.id));\n        };\n        B.prototype.resolvePath = function(a) {\n            return x(M.path, ((a + \".js\")));\n        };\n        B.prototype.loaded = function() {\n            var a, b, d = this;\n            if (!c) {\n                a = g;\n                g = null;\n                if (a) {\n                    a.setId(this.id);\n                    a.then(function(a) {\n                        d.complete.call(d, a);\n                    });\n                }\n                 else if (!D.provided[this.id]) {\n                    throw new Error(((((\"Tried to load '\" + this.id)) + \"' as a module, but it didn't have a 'provide()' in it.\")));\n                }\n                \n            ;\n            ;\n            }\n        ;\n        ;\n        };\n        C.prototype = new A;\n        C.prototype.start = function() {\n            var a = this, b, c, d;\n            for (var e = 0, f = this.contents.length; ((e < f)); e++) {\n                c = O(this.contents[e]);\n                this.deps.push(c);\n                d = c.key();\n                ((((((!o[d] && !p[d])) && !n[d])) && (n[d] = this)));\n            };\n        ;\n            A.prototype.start.call(this);\n        };\n        C.prototype.loaded = function() {\n            var a, b, c = this, d, e;\n            for (var f = 0, g = this.deps.length; ((f < g)); f++) {\n                d = this.deps[f];\n                e = d.key();\n                delete n[e];\n                o[e] = this;\n            };\n        ;\n            A.prototype.loaded.call(this);\n        };\n        D.provided = {\n        };\n        D.prototype = new z;\n        D.prototype.key = function() {\n            ((this.id || (this.id = ((\"anon_\" + s())))));\n            return ((\"definition_\" + this.id));\n        };\n        D.prototype.setId = function(a) {\n            this.id = a;\n            D.provided[a] = this;\n        };\n        D.prototype.fetch = function() {\n            var a = this;\n            ((((typeof this.body == \"object\")) ? this.complete(this.body) : ((((typeof this.body == \"function\")) && this.body(function(b) {\n                a.complete(b);\n            })))));\n        };\n        D.prototype.complete = function(a) {\n            a = ((a || {\n            }));\n            ((this.id && (this.exports = B.exports[this.id] = a)));\n            z.prototype.complete.call(this, a);\n        };\n        G.prototype = new z;\n        G.prototype.fetch = function() {\n            function b() {\n                var b = [];\n                for (var c = 0, d; d = a.deps[c]; c++) {\n                    if (!d.completed) {\n                        return;\n                    }\n                ;\n                ;\n                    ((((d.results.length > 0)) && (b = b.concat(d.results))));\n                };\n            ;\n                a.complete.apply(a, b);\n            };\n        ;\n            var a = this;\n            for (var c = 0, d; d = this.deps[c]; c++) {\n                d.then(b);\n            ;\n            };\n        ;\n            return this;\n        };\n        G.prototype.forceFetch = F;\n        G.prototype.as = function(a) {\n            var b = this;\n            return this.then(function() {\n                var c = E(b.deps), d = {\n                };\n                for (var e = 0, f; f = c[e]; e++) {\n                    y(d, f.id, arguments[e]);\n                ;\n                };\n            ;\n                a.apply(this, [d,].concat(u(arguments)));\n            });\n        };\n        H.prototype = new z;\n        H.prototype.fetch = function() {\n            var a = this, b = 0, c = [];\n            (function d() {\n                var e = a.deps[b++];\n                ((e ? e.then(function(a) {\n                    ((((e.results.length > 0)) && (c = c.concat(e.results))));\n                    d();\n                }) : a.complete.apply(a, c)));\n            })();\n            return this;\n        };\n        H.prototype.forceFetch = F;\n        var I = [];\n        J.prototype.push = function(a) {\n            {\n                var fin47keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin47i = (0);\n                var b;\n                for (; (fin47i < fin47keys.length); (fin47i++)) {\n                    ((b) = (fin47keys[fin47i]));\n                    {\n                        I[b] = new C(b, a[b]);\n                        for (var c = 0, d; d = a[b][c]; c++) {\n                            this.entries[d] = I[b];\n                        ;\n                        };\n                    ;\n                    };\n                };\n            };\n        ;\n        };\n        J.prototype.get = function(a) {\n            return this.entries[a];\n        };\n        var P = function(a) {\n            return a(M, L, P);\n        };\n        P.Script = A;\n        P.Module = B;\n        P.Collection = G;\n        P.Sequence = H;\n        P.Definition = D;\n        P.Dependency = z;\n        P.noConflict = Q;\n        P.debug = R;\n        P.reset = S;\n        a.loadrunner = P;\n        a.using = M;\n        a.provide = L;\n        M.path = \"\";\n        M.bundles = new J;\n        M.matchers = [];\n        M.matchers.add = function(a, b) {\n            this.unshift([a,b,]);\n        };\n        M.matchers.add(/^(lr!)?[a-zA-Z0-9_\\/.-]+$/, function(a) {\n            var b = new B(a.replace(/^lr!/, \"\"));\n            return b;\n        });\n        M.matchers.add(/(^script!|\\.js$)/, function(a) {\n            var b = new A(a.replace(/^script!/, \"\"));\n            return b;\n        });\n        if (e) {\n            M.path = ((((e.getAttribute(\"data-path\") || e.src.split(/loadrunner\\.js/)[0])) || \"\"));\n            (((main = e.getAttribute(\"data-main\")) && M.apply(a, main.split(/\\s*,\\s*/)).then(function() {\n            \n            })));\n        }\n    ;\n    ;\n    })(this, JSBNG__document);\n    (function(a) {\n        loadrunner(function(b, c) {\n            function e(a, b) {\n                return new loadrunner.Definition(a, function(a) {\n                    a(b());\n                });\n            };\n        ;\n            var d;\n            a.deferred = e;\n            b.matchers.add(/(^script!|\\.js(!?)$)/, function(a) {\n                var b = !!a.match(/!$/);\n                a = a.replace(/!$/, \"\");\n                if (d = loadrunner.Definition.provided[a]) {\n                    return d;\n                }\n            ;\n            ;\n                var c = new loadrunner.Script(a, b);\n                ((b && c.start()));\n                return c;\n            });\n        });\n    })(this);\n    (function(a) {\n        loadrunner(function(b, c) {\n            function d(a) {\n                return Array.prototype.slice.call(a);\n            };\n        ;\n            function f(a, b) {\n                for (var c = 0, d; d = a[c]; c++) {\n                    if (((b == d))) {\n                        return c;\n                    }\n                ;\n                ;\n                };\n            ;\n                return -1;\n            };\n        ;\n            function g(a, b) {\n                var c = ((b.id || \"\")), d = c.split(\"/\");\n                d.pop();\n                var e = a.split(\"/\"), f = !1;\n                while (((((e[0] == \"..\")) && d.length))) {\n                    d.pop();\n                    e.shift();\n                    f = !0;\n                };\n            ;\n                if (((e[0] == \".\"))) {\n                    e.shift();\n                    f = !0;\n                }\n            ;\n            ;\n                ((f && (e = d.concat(e))));\n                return e.join(\"/\");\n            };\n        ;\n            function i(a, b) {\n                function d(a) {\n                    return loadrunner.Module.exports[g(a.replace(/^.+!/, \"\"), b)];\n                };\n            ;\n                var c = [];\n                for (var e = 0, f = a.length; ((e < f)); e++) {\n                    if (((a[e] == \"require\"))) {\n                        c.push(d);\n                        continue;\n                    }\n                ;\n                ;\n                    if (((a[e] == \"exports\"))) {\n                        b.exports = ((b.exports || {\n                        }));\n                        c.push(b.exports);\n                        continue;\n                    }\n                ;\n                ;\n                    if (((a[e] == \"module\"))) {\n                        c.push(b);\n                        continue;\n                    }\n                ;\n                ;\n                    c.push(d(a[e]));\n                };\n            ;\n                return c;\n            };\n        ;\n            function j() {\n                var a = d(arguments), c = [], j, k;\n                ((((typeof a[0] == \"string\")) && (j = a.shift())));\n                ((e(a[0]) && (c = a.shift())));\n                k = a.shift();\n                var l = new loadrunner.Definition(j, function(a) {\n                    function l() {\n                        var b = i(d(c), j), e;\n                        ((((typeof k == \"function\")) ? e = k.apply(j, b) : e = k));\n                        ((((typeof e == \"undefined\")) && (e = j.exports)));\n                        a(e);\n                    };\n                ;\n                    var e = [], j = this;\n                    for (var m = 0, n = c.length; ((m < n)); m++) {\n                        var o = c[m];\n                        ((((f([\"require\",\"exports\",\"module\",], o) == -1)) && e.push(g(o, j))));\n                    };\n                ;\n                    ((((e.length > 0)) ? b.apply(this, e.concat(l)) : l()));\n                });\n                return l;\n            };\n        ;\n            var e = ((Array.isArray || function(a) {\n                return ((a.constructor == Array));\n            }));\n            a.define = j;\n        });\n    })(this);\n    loadrunner(function(a, b, c, d) {\n        function e(a) {\n            this.id = this.path = a;\n        };\n    ;\n        e.loaded = {\n        };\n        e.prototype = new c.Dependency;\n        e.prototype.start = function() {\n            if (e.loaded[this.path]) this.complete();\n             else {\n                e.loaded[this.path] = !0;\n                this.load();\n            }\n        ;\n        ;\n        };\n        e.prototype.load = function() {\n            function j() {\n                if ((($(f).length > 0))) {\n                    return i();\n                }\n            ;\n            ;\n                c += 1;\n                ((((c < 200)) ? b = JSBNG__setTimeout(j, 50) : i()));\n            };\n        ;\n            function k() {\n                var d;\n                try {\n                    d = !!a.sheet.cssRules;\n                } catch (e) {\n                    c += 1;\n                    ((((c < 200)) ? b = JSBNG__setTimeout(k, 50) : i()));\n                    return;\n                };\n            ;\n                i();\n            };\n        ;\n            var a, b, c, d = JSBNG__document, e = this.path, f = ((((\"link[href=\\\"\" + e)) + \"\\\"]\")), g = $.browser;\n            if ((($(f).length > 0))) {\n                return this.complete();\n            }\n        ;\n        ;\n            var i = function() {\n                JSBNG__clearTimeout(b);\n                a.JSBNG__onload = a.JSBNG__onerror = null;\n                this.complete();\n            }.bind(this);\n            if (((g.webkit || g.mozilla))) {\n                c = 0;\n                if (g.webkit) j();\n                 else {\n                    a = d.createElement(\"style\");\n                    a.innerHTML = ((((\"@import \\\"\" + e)) + \"\\\";\"));\n                    k(a);\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (!a) {\n                a = d.createElement(\"link\");\n                a.setAttribute(\"rel\", \"stylesheet\");\n                a.setAttribute(\"href\", e);\n                a.setAttribute(\"charset\", \"utf-8\");\n            }\n        ;\n        ;\n            a.JSBNG__onload = a.JSBNG__onerror = i;\n            ((d.head || d.getElementsByTagName(\"head\")[0])).appendChild(a);\n        };\n        a.matchers.add(/^css!/, function(a) {\n            a = a.replace(/^css!/, \"\");\n            return new e(a);\n        });\n    });\n    using.aliases = {\n        \"$jasmine.b28c2693f489d65bb33ece420c8a7abea6b777c2.js\": [\"test/core/clock_spec\",\"test/core/parameterize_spec\",\"test/fixtures/news_onebox\",\"test/fixtures/user_search\",\"test/fixtures/saved_searches_dropdown\",\"test/fixtures/advanced_search\",\"test/fixtures/trends_location_dialog_api\",\"test/fixtures/resend_password_help\",\"test/fixtures/own_profile_header\",\"test/fixtures/profile_image_upload_dialog\",\"test/fixtures/trends_api\",\"test/fixtures/discover_stories\",\"test/fixtures/user_onebox\",\"test/fixtures/tweet_export_dialog\",\"test/fixtures/user_actions_chatty\",\"test/fixtures/settings_design_page\",\"test/fixtures/media_onebox\",\"test/app/utils/image_spec\",\"test/app/utils/setup_polling_with_backoff_spec\",\"test/app/utils/params_spec\",\"test/app/utils/cookie_spec\",\"test/app/utils/ellipsis_spec\",\"test/app/utils/oauth_popup_spec\",\"test/app/utils/image_thumbnail_spec\",\"test/app/utils/third_party_application_spec\",\"test/app/utils/querystring_spec\",\"test/app/utils/request_logger_spec\",\"test/app/utils/with_event_params_spec\",\"test/app/utils/drag_drop_helper_spec\",\"test/app/utils/time_spec\",\"test/app/utils/image_resize_spec\",\"test/app/utils/html_text_spec\",\"test/app/utils/sandboxed_ajax_spec\",\"test/app/utils/auth_token_spec\",\"test/app/utils/chrome_spec\",\"test/app/utils/with_session_spec\",\"test/app/utils/string_spec\",\"test/app/utils/tweet_helper_spec\",\"test/app/utils/typeahead_helpers_spec\",\"test/app/utils/hide_or_show_divider_spec\",\"test/app/helpers/log_client_events_spec\",\"test/app/helpers/second_data_component\",\"test/app/helpers/global_after_each_spec\",\"test/app/helpers/test_component\",\"test/app/helpers/describe_component_spec\",\"test/app/helpers/extra_jquery_helpers_spec\",\"test/app/helpers/test_module\",\"test/app/helpers/describe_mixin_spec\",\"test/app/helpers/ajax_respond_with_spec\",\"test/app/helpers/test_scribing_component\",\"test/app/helpers/describe_component_with_data_components_spec\",\"test/app/helpers/describe_module_spec\",\"test/app/helpers/first_data_component\",\"test/app/helpers/test_mixin\",\"test/app/data/with_data_spec\",\"test/app/data/trends_scribe_spec\",\"test/app/data/resend_password_help_scribe_spec\",\"test/app/data/tweet_actions_spec\",\"test/app/data/permalink_scribe_spec\",\"test/app/data/activity_popup_scribe_spec\",\"test/app/data/login_verification_spec\",\"test/app/data/item_actions_scribe_spec\",\"test/app/data/resend_password_spec\",\"test/app/data/user_search_spec\",\"test/app/data/who_to_follow_scribe_spec\",\"test/app/data/url_resolver_spec\",\"test/app/data/oembed_scribe_spec\",\"test/app/data/promoted_logger_spec\",\"test/app/data/login_scribe_spec\",\"test/app/data/user_actions_scribe_spec\",\"test/app/data/facets_timeline_spec\",\"test/app/data/typeahead_scribe_spec\",\"test/app/data/saved_searches_spec\",\"test/app/data/geo_spec\",\"test/app/data/tweet_actions_scribe_spec\",\"test/app/data/scribing_context_spec\",\"test/app/data/prompt_mobile_app_scribe_spec\",\"test/app/data/settings_spec\",\"test/app/data/trends_spec\",\"test/app/data/tweet_translation_spec\",\"test/app/data/oembed_spec\",\"test/app/data/search_input_scribe_spec\",\"test/app/data/list_follow_card_spec\",\"test/app/data/notifications_spec\",\"test/app/data/tweet_box_scribe_spec\",\"test/app/data/conversations_spec\",\"test/app/data/embed_stats_scribe_spec\",\"test/app/data/search_assistance_scribe_spec\",\"test/app/data/activity_popup_spec\",\"test/app/data/with_widgets_spec\",\"test/app/data/list_members_dashboard_spec\",\"test/app/data/frontpage_scribe_spec\",\"test/app/data/ttft_navigation_spec\",\"test/app/data/share_via_email_dialog_data_spec\",\"test/app/data/contact_import_scribe_spec\",\"test/app/data/profile_popup_spec\",\"test/app/data/direct_messages_spec\",\"test/app/data/profile_canopy_scribe_spec\",\"test/app/data/form_scribe_spec\",\"test/app/data/with_conversation_metadata_spec\",\"test/app/data/simple_event_scribe_spec\",\"test/app/data/email_banner_spec\",\"test/app/data/timeline_spec\",\"test/app/data/user_info_spec\",\"test/app/data/with_interaction_data_scribe_spec\",\"test/app/data/dm_poll_spec\",\"test/app/data/profile_social_proof_scribe_spec\",\"test/app/data/async_profile_spec\",\"test/app/data/gallery_scribe_spec\",\"test/app/data/lists_spec\",\"test/app/data/tweet_spec\",\"test/app/data/with_scribe_spec\",\"test/app/data/user_search_scribe_spec\",\"test/app/data/follower_request_spec\",\"test/app/data/user_completion_module_scribe_spec\",\"test/app/data/temporary_password_spec\",\"test/app/data/profile_popup_scribe_spec\",\"test/app/data/archive_navigator_scribe_spec\",\"test/app/data/notification_listener_spec\",\"test/app/data/embed_scribe_spec\",\"test/app/data/signup_click_scribe_spec\",\"test/app/data/contact_import_spec\",\"test/app/data/with_card_metadata_spec\",\"test/app/data/onebox_scribe_spec\",\"test/app/data/media_settings_spec\",\"test/app/data/page_visibility_scribe_spec\",\"test/app/data/inline_edit_scribe_spec\",\"test/app/data/story_scribe_spec\",\"test/app/data/signup_data_spec\",\"test/app/data/user_spec\",\"test/app/data/media_timeline_spec\",\"test/app/data/direct_messages_scribe_spec\",\"test/app/data/navigation_spec\",\"test/app/data/with_auth_token_spec\",\"test/app/data/suggested_users_spec\",\"test/app/data/promptbird_spec\",\"test/app/data/signup_scribe_spec\",\"test/app/data/who_to_tweet_spec\",\"test/app/data/who_to_follow_spec\",\"test/app/data/media_thumbnails_scribe_spec\",\"test/app/ui/message_drawer_spec\",\"test/app/ui/color_picker_spec\",\"test/app/ui/with_forgot_password_spec\",\"test/app/ui/theme_preview_spec\",\"test/app/ui/search_query_source_spec\",\"test/app/ui/signin_dropdown_spec\",\"test/app/ui/tooltips_spec\",\"test/app/ui/user_search_spec\",\"test/app/ui/search_input_spec\",\"test/app/ui/with_focus_highlight_spec\",\"test/app/ui/with_inline_image_editing_spec\",\"test/app/ui/user_completion_module_spec\",\"test/app/ui/validating_fieldset_spec\",\"test/app/ui/alert_banner_to_message_drawer_spec\",\"test/app/ui/protected_verified_dialog_spec\",\"test/app/ui/with_item_actions_spec\",\"test/app/ui/oauth_revoker_spec\",\"test/app/ui/with_profile_stats_spec\",\"test/app/ui/with_timestamp_updating_spec\",\"test/app/ui/geo_deletion_spec\",\"test/app/ui/permalink_keyboard_support_spec\",\"test/app/ui/drag_state_spec\",\"test/app/ui/tweet_box_spec\",\"test/app/ui/with_story_clicks_spec\",\"test/app/ui/temporary_password_button_spec\",\"test/app/ui/with_loading_indicator_spec\",\"test/app/ui/navigation_links_spec\",\"test/app/ui/profile_image_monitor_dom_spec\",\"test/app/ui/image_uploader_spec\",\"test/app/ui/with_dialog_spec\",\"test/app/ui/with_upload_photo_affordance_spec\",\"test/app/ui/with_import_services_spec\",\"test/app/ui/hidden_descendants_spec\",\"test/app/ui/list_follow_card_spec\",\"test/app/ui/password_dialog_spec\",\"test/app/ui/keyboard_shortcuts_spec\",\"test/app/ui/infinite_scroll_watcher_spec\",\"test/app/ui/signup_call_out_spec\",\"test/app/ui/capped_file_upload_spec\",\"test/app/ui/list_members_dashboard_spec\",\"test/app/ui/alert_banner_spec\",\"test/app/ui/with_select_all_spec\",\"test/app/ui/password_match_pair_spec\",\"test/app/ui/password_spec\",\"test/app/ui/login_verification_confirmation_dialog_spec\",\"test/app/ui/settings_controls_spec\",\"test/app/ui/profile_popup_spec\",\"test/app/ui/aria_event_logger_spec\",\"test/app/ui/tweet_injector_spec\",\"test/app/ui/page_title_spec\",\"test/app/ui/page_visibility_spec\",\"test/app/ui/captcha_dialog_spec\",\"test/app/ui/with_discover_expando_spec\",\"test/app/ui/direct_message_link_handler_spec\",\"test/app/ui/with_dropdown_spec\",\"test/app/ui/facets_spec\",\"test/app/ui/inline_edit_spec\",\"test/app/ui/dashboard_tweetbox_spec\",\"test/app/ui/timezone_detector_spec\",\"test/app/ui/email_confirmation_spec\",\"test/app/ui/with_removable_stream_items_spec\",\"test/app/ui/cookie_warning_spec\",\"test/app/ui/inline_profile_editing_initializor_spec\",\"test/app/ui/with_stream_users_spec\",\"test/app/ui/geo_picker_spec\",\"test/app/ui/image_selector_spec\",\"test/app/ui/with_position_spec\",\"test/app/ui/with_user_actions_spec\",\"test/app/ui/email_field_highlight_spec\",\"test/app/ui/with_rich_editor_spec\",\"test/app/ui/theme_picker_spec\",\"test/app/ui/tweet_box_thumbnails_spec\",\"test/app/ui/with_rtl_tweet_box_spec\",\"test/app/ui/login_verification_form_spec\",\"test/app/ui/direct_message_dialog_spec\",\"test/app/ui/profile_image_monitor_spec\",\"test/app/ui/with_image_selection_spec\",\"test/app/ui/with_tweet_actions_spec\",\"test/app/ui/embed_stats_spec\",\"test/app/ui/with_tweet_translation_spec\",\"test/app/ui/search_dropdown_spec\",\"test/app/ui/new_tweet_button_spec\",\"test/app/ui/impression_cookies_spec\",\"test/app/ui/field_edit_warning_spec\",\"test/app/ui/profile_edit_param_spec\",\"test/app/ui/hidden_ancestors_spec\",\"test/app/ui/advanced_search_spec\",\"test/app/ui/with_click_outside_spec\",\"test/app/ui/discover_spec\",\"test/app/ui/design_spec\",\"test/app/ui/tweet_dialog_spec\",\"test/app/ui/with_inline_image_options_spec\",\"test/app/ui/global_nav_spec\",\"test/app/ui/navigation_spec\",\"test/app/ui/toolbar_spec\",\"test/app/ui/suggested_users_spec\",\"test/app/ui/promptbird_spec\",\"test/app/ui/deactivated_spec\",\"test/app/ui/with_conversation_actions_spec\",\"test/app/ui/who_to_tweet_spec\",\"test/app/ui/with_text_polling_spec\",\"test/app/ui/password_strength_spec\",\"test/app/ui/inline_profile_editing_spec\",\"test/app/ui/user_dropdown_spec\",\"test/app/ui/with_interaction_data_spec\",\"test/app/ui/with_password_strength_spec\",\"test/app/utils/image/image_loader_spec\",\"test/app/utils/crypto/aes_spec\",\"test/app/utils/storage/with_crypto_spec\",\"test/app/utils/storage/with_expiry_spec\",\"test/app/utils/storage/custom_spec\",\"test/app/utils/storage/core_spec\",\"test/app/data/feedback/feedback_spec\",\"test/app/data/typeahead/with_cache_spec\",\"test/app/data/typeahead/with_external_event_listeners_spec\",\"test/app/data/typeahead/context_helper_datasource_spec\",\"test/app/data/typeahead/typeahead_spec\",\"test/app/data/typeahead/saved_searches_datasource_spec\",\"test/app/data/typeahead/trend_locations_datasource_spec\",\"test/app/data/typeahead/topics_datasource_spec\",\"test/app/data/typeahead/recent_searches_datasource_spec\",\"test/app/data/typeahead/accounts_datasource_spec\",\"test/app/data/who_to_follow/web_personalized_proxy_spec\",\"test/app/data/who_to_follow/web_personalized_scribe_spec\",\"test/app/data/settings/facebook_proxy_spec\",\"test/app/data/settings/login_verification_test_run_spec\",\"test/app/data/welcome/intro_scribe_spec\",\"test/app/data/welcome/lifeline_scribe_spec\",\"test/app/data/welcome/welcome_cards_scribe_spec\",\"test/app/data/welcome/interests_picker_scribe_spec\",\"test/app/data/welcome/invitations_scribe_spec\",\"test/app/data/welcome/welcome_data_spec\",\"test/app/data/welcome/preview_stream_scribe_spec\",\"test/app/data/welcome/flow_nav_scribe_spec\",\"test/app/data/welcome/users_cards_spec\",\"test/app/data/mobile_gallery/download_links_scribe_spec\",\"test/app/data/mobile_gallery/send_download_link_spec\",\"test/app/data/trends/recent_locations_spec\",\"test/app/data/trends/location_dialog_spec\",\"test/app/ui/gallery/with_gallery_spec\",\"test/app/ui/gallery/grid_spec\",\"test/app/ui/gallery/gallery_spec\",\"test/app/ui/gallery/with_grid_spec\",\"test/app/ui/dialogs/temporary_password_dialog_spec\",\"test/app/ui/dialogs/delete_tweet_dialog_spec\",\"test/app/ui/dialogs/embed_tweet_spec\",\"test/app/ui/dialogs/block_user_dialog_spec\",\"test/app/ui/dialogs/profile_edit_error_dialog_spec\",\"test/app/ui/dialogs/promptbird_invite_contacts_dialog_spec\",\"test/app/ui/dialogs/sensitive_flag_confirmation_spec\",\"test/app/ui/dialogs/in_product_help_dialog_spec\",\"test/app/ui/dialogs/iph_search_result_dialog_spec\",\"test/app/ui/dialogs/activity_popup_spec\",\"test/app/ui/dialogs/goto_user_dialog_spec\",\"test/app/ui/dialogs/signin_or_signup_spec\",\"test/app/ui/dialogs/retweet_dialog_spec\",\"test/app/ui/dialogs/profile_confirm_image_delete_dialog_spec\",\"test/app/ui/dialogs/list_membership_dialog_spec\",\"test/app/ui/dialogs/list_operations_dialog_spec\",\"test/app/ui/dialogs/confirm_dialog_spec\",\"test/app/ui/dialogs/with_modal_tweet_spec\",\"test/app/ui/dialogs/tweet_export_dialog_spec\",\"test/app/ui/dialogs/profile_image_upload_dialog_spec\",\"test/app/ui/dialogs/confirm_email_dialog_spec\",\"test/app/ui/feedback/feedback_report_link_handler_spec\",\"test/app/ui/feedback/feedback_dialog_spec\",\"test/app/ui/search/related_queries_spec\",\"test/app/ui/search/user_onebox_spec\",\"test/app/ui/search/news_onebox_spec\",\"test/app/ui/search/archive_navigator_spec\",\"test/app/ui/search/media_onebox_spec\",\"test/app/ui/search/spelling_corrections_spec\",\"test/app/ui/typeahead/context_helpers_renderer_spec\",\"test/app/ui/typeahead/recent_searches_renderer_spec\",\"test/app/ui/typeahead/typeahead_input_spec\",\"test/app/ui/typeahead/saved_searches_renderer_spec\",\"test/app/ui/typeahead/accounts_renderer_spec\",\"test/app/ui/typeahead/trend_locations_renderer_spec\",\"test/app/ui/typeahead/typeahead_dropdown_spec\",\"test/app/ui/typeahead/topics_renderer_spec\",\"test/app/ui/vit/verification_step_spec\",\"test/app/ui/vit/mobile_topbar_spec\",\"test/app/ui/profile/canopy_spec\",\"test/app/ui/profile/head_spec\",\"test/app/ui/profile/social_proof_spec\",\"test/app/ui/account/resend_password_controls_spec\",\"test/app/ui/account/resend_password_help_controls_spec\",\"test/app/ui/expando/with_expanding_containers_spec\",\"test/app/ui/expando/expanding_tweets_spec\",\"test/app/ui/expando/with_expanding_social_activity_spec\",\"test/app/ui/expando/expando_helpers_spec\",\"test/app/ui/expando/close_all_button_spec\",\"test/app/ui/signup/with_signup_validation_spec\",\"test/app/ui/signup/suggestions_spec\",\"test/app/ui/signup/signup_form_spec\",\"test/app/ui/signup/stream_end_signup_module_spec\",\"test/app/ui/signup/with_captcha_spec\",\"test/app/ui/media/with_hidden_display_spec\",\"test/app/ui/media/with_legacy_media_spec\",\"test/app/ui/media/with_legacy_embeds_spec\",\"test/app/ui/media/with_flag_action_spec\",\"test/app/ui/media/media_thumbnails_spec\",\"test/app/ui/media/with_legacy_icons_spec\",\"test/app/ui/media/card_thumbnails_spec\",\"test/app/ui/signup_download/next_and_skip_buttons_spec\",\"test/app/ui/signup_download/us_phone_number_checker_spec\",\"test/app/ui/who_to_follow/import_services_spec\",\"test/app/ui/who_to_follow/web_personalized_settings_spec\",\"test/app/ui/who_to_follow/matched_contacts_list_spec\",\"test/app/ui/who_to_follow/with_unmatched_contacts_spec\",\"test/app/ui/who_to_follow/who_to_follow_dashboard_spec\",\"test/app/ui/who_to_follow/find_friends_spec\",\"test/app/ui/who_to_follow/invite_form_spec\",\"test/app/ui/who_to_follow/with_invite_messages_spec\",\"test/app/ui/who_to_follow/who_to_follow_timeline_spec\",\"test/app/ui/who_to_follow/with_user_recommendations_spec\",\"test/app/ui/who_to_follow/web_personalized_signup_spec\",\"test/app/ui/who_to_follow/with_invite_preview_spec\",\"test/app/ui/settings/facebook_iframe_height_adjuster_spec\",\"test/app/ui/settings/with_cropper_spec\",\"test/app/ui/settings/tweet_export_spec\",\"test/app/ui/settings/facebook_login_spec\",\"test/app/ui/settings/facebook_connect_spec\",\"test/app/ui/settings/sms_phone_create_form_spec\",\"test/app/ui/settings/tweet_export_download_spec\",\"test/app/ui/settings/notifications_spec\",\"test/app/ui/settings/widgets_configurator_spec\",\"test/app/ui/settings/device_verified_form_spec\",\"test/app/ui/settings/change_photo_spec\",\"test/app/ui/settings/facebook_spinner_spec\",\"test/app/ui/settings/facebook_connection_conflict_spec\",\"test/app/ui/settings/sms_phone_verify_form_spec\",\"test/app/ui/settings/facebook_connected_spec\",\"test/app/ui/settings/facebook_missing_permissions_spec\",\"test/app/ui/settings/widgets_spec\",\"test/app/ui/settings/facebook_mismatched_connection_spec\",\"test/app/ui/settings/login_verification_sms_check_spec\",\"test/app/ui/timelines/event_timeline_spec\",\"test/app/ui/timelines/with_cursor_pagination_spec\",\"test/app/ui/timelines/user_timeline_spec\",\"test/app/ui/timelines/universal_timeline_spec\",\"test/app/ui/timelines/with_keyboard_navigation_spec\",\"test/app/ui/timelines/with_story_pagination_spec\",\"test/app/ui/timelines/with_polling_spec\",\"test/app/ui/timelines/discover_timeline_spec\",\"test/app/ui/timelines/follower_request_timeline_spec\",\"test/app/ui/timelines/with_pinned_stream_items_spec\",\"test/app/ui/timelines/with_most_recent_story_pagination_spec\",\"test/app/ui/timelines/with_preserved_scroll_position_spec\",\"test/app/ui/timelines/with_tweet_pagination_spec\",\"test/app/ui/timelines/tweet_timeline_spec\",\"test/app/ui/timelines/with_activity_supplements_spec\",\"test/app/ui/welcome/interests_header_search_spec\",\"test/app/ui/welcome/intro_video_spec\",\"test/app/ui/welcome/import_services_cards_spec\",\"test/app/ui/welcome/lifeline_device_follow_dialog_spec\",\"test/app/ui/welcome/with_similarities_spec\",\"test/app/ui/welcome/invite_dialog_spec\",\"test/app/ui/welcome/learn_dashboard_spec\",\"test/app/ui/welcome/interests_category_flow_nav_spec\",\"test/app/ui/welcome/profile_flow_nav_spec\",\"test/app/ui/welcome/profile_form_spec\",\"test/app/ui/welcome/custom_interest_spec\",\"test/app/ui/welcome/with_nav_buttons_spec\",\"test/app/ui/welcome/with_interests_spec\",\"test/app/ui/welcome/interests_picker_spec\",\"test/app/ui/welcome/with_more_results_spec\",\"test/app/ui/welcome/with_welcome_search_spec\",\"test/app/ui/welcome/users_cards_spec\",\"test/app/ui/welcome/internal_link_disabler_spec\",\"test/app/ui/mobile_gallery/gallery_buttons_spec\",\"test/app/ui/forms/select_box_spec\",\"test/app/ui/forms/with_submit_disable_spec\",\"test/app/ui/forms/input_with_placeholder_spec\",\"test/app/ui/forms/mobile_gallery_email_form_spec\",\"test/app/ui/forms/form_value_modification_spec\",\"test/app/ui/forms/element_group_toggler_spec\",\"test/app/ui/trends/trends_spec\",\"test/app/ui/trends/trends_dialog_spec\",\"test/app/ui/banners/email_banner_spec\",\"test/app/ui/promptbird/with_invite_contacts_spec\",\"test/app/ui/promptbird/with_invite_contacts\",\"test/app/utils/storage/array/with_max_elements_spec\",\"test/app/utils/storage/array/with_array_spec\",\"test/app/utils/storage/array/with_unique_elements_spec\",\"test/app/ui/timelines/conversations/ancestor_timeline_spec\",\"test/app/ui/timelines/conversations/descendant_timeline_spec\",\"test/app/ui/trends/dialog/nearby_trends_spec\",\"test/app/ui/trends/dialog/with_location_info_spec\",\"test/app/ui/trends/dialog/recent_trends_spec\",\"test/app/ui/trends/dialog/location_search_spec\",\"test/app/ui/trends/dialog/location_dropdown_spec\",\"test/app/ui/trends/dialog/dialog_spec\",\"test/app/ui/trends/dialog/current_location_spec\",\"test/app/ui/trends/dialog/with_location_list_picker_spec\",\"app/data/welcome/preview_stream_scribe\",\"app/ui/welcome/with_nav_buttons\",\"app/ui/welcome/interests_category_flow_nav\",\"app/ui/welcome/with_similarities\",],\n        \"$bundle/boot.2a31b60b327963d16b704386722149661e1cb6ea.js\": [\"app/data/geo\",\"app/data/tweet\",\"app/ui/tweet_dialog\",\"app/ui/new_tweet_button\",\"app/data/tweet_box_scribe\",\"lib/twitter-text\",\"app/ui/with_character_counter\",\"app/utils/with_event_params\",\"app/utils/caret\",\"app/ui/with_draft_tweets\",\"app/ui/with_text_polling\",\"app/ui/with_rtl_tweet_box\",\"app/ui/toolbar\",\"app/utils/tweet_helper\",\"app/utils/html_text\",\"app/ui/with_rich_editor\",\"app/ui/with_upload_photo_affordance\",\"$lib/jquery.swfobject.js\",\"app/utils/image\",\"app/utils/drag_drop_helper\",\"app/ui/with_drop_events\",\"app/ui/with_droppable_image\",\"app/ui/tweet_box\",\"app/utils/image_thumbnail\",\"app/ui/tweet_box_thumbnails\",\"app/utils/image_resize\",\"app/ui/with_image_selection\",\"app/ui/image_selector\",\"app/ui/typeahead/accounts_renderer\",\"app/ui/typeahead/saved_searches_renderer\",\"app/ui/typeahead/recent_searches_renderer\",\"app/ui/typeahead/topics_renderer\",\"app/ui/typeahead/trend_locations_renderer\",\"app/ui/typeahead/context_helpers_renderer\",\"app/utils/rtl_text\",\"app/ui/typeahead/typeahead_dropdown\",\"app/utils/event_support\",\"app/utils/string\",\"app/ui/typeahead/typeahead_input\",\"app/ui/with_click_outside\",\"app/ui/geo_picker\",\"app/ui/tweet_box_manager\",\"app/boot/tweet_boxes\",\"app/ui/user_dropdown\",\"app/ui/signin_dropdown\",\"app/ui/search_input\",\"app/utils/animate_window_scrolltop\",\"app/ui/global_nav\",\"app/ui/navigation_links\",\"app/data/search_input_scribe\",\"app/boot/top_bar\",\"app/ui/keyboard_shortcuts\",\"app/ui/dialogs/keyboard_shortcuts_dialog\",\"app/ui/dialogs/with_modal_tweet\",\"app/ui/dialogs/retweet_dialog\",\"app/ui/dialogs/delete_tweet_dialog\",\"app/ui/dialogs/block_user_dialog\",\"app/ui/dialogs/confirm_dialog\",\"app/ui/dialogs/confirm_email_dialog\",\"app/ui/dialogs/list_membership_dialog\",\"app/ui/dialogs/list_operations_dialog\",\"app/data/direct_messages\",\"app/data/direct_messages_scribe\",\"app/ui/direct_message_link_handler\",\"app/ui/with_timestamp_updating\",\"app/ui/direct_message_dialog\",\"app/boot/direct_messages\",\"app/data/profile_popup\",\"app/data/profile_popup_scribe\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",\"app/ui/with_profile_stats\",\"app/ui/with_handle_overflow\",\"app/ui/profile_popup\",\"app/data/profile_edit_btn_scribe\",\"app/data/user\",\"app/data/lists\",\"app/boot/profile_popup\",\"app/data/typeahead/with_cache\",\"app/utils/typeahead_helpers\",\"app/data/with_datasource_helpers\",\"app/data/typeahead/accounts_datasource\",\"app/data/typeahead/saved_searches_datasource\",\"app/data/typeahead/recent_searches_datasource\",\"app/data/typeahead/with_external_event_listeners\",\"app/data/typeahead/topics_datasource\",\"app/data/typeahead/context_helper_datasource\",\"app/data/typeahead/trend_locations_datasource\",\"app/data/typeahead/typeahead\",\"app/data/typeahead_scribe\",\"app/ui/dialogs/goto_user_dialog\",\"app/utils/setup_polling_with_backoff\",\"app/ui/page_title\",\"app/ui/feedback/with_feedback_tweet\",\"app/ui/feedback/feedback_stories\",\"app/ui/feedback/with_feedback_discover\",\"app/ui/feedback/feedback_dialog\",\"app/ui/feedback/feedback_report_link_handler\",\"app/data/feedback/feedback\",\"app/ui/search_query_source\",\"app/ui/banners/email_banner\",\"app/data/email_banner\",\"app/ui/media/phoenix_shim\",\"app/utils/twt\",\"app/ui/media/types\",\"$lib/easyXDM.js\",\"app/utils/easy_xdm\",\"app/utils/sandboxed_ajax\",\"app/ui/media/with_legacy_icons\",\"app/utils/third_party_application\",\"app/ui/media/legacy_embed\",\"app/ui/media/with_legacy_embeds\",\"app/ui/media/with_flag_action\",\"app/ui/media/with_hidden_display\",\"app/ui/media/with_legacy_media\",\"app/utils/image/image_loader\",\"app/ui/with_tweet_actions\",\"app/ui/gallery/gallery\",\"app/data/gallery_scribe\",\"app/data/share_via_email_dialog_data\",\"app/ui/dialogs/share_via_email_dialog\",\"app/data/with_widgets\",\"app/ui/dialogs/embed_tweet\",\"app/data/embed_scribe\",\"app/data/oembed\",\"app/data/oembed_scribe\",\"app/ui/with_drag_events\",\"app/ui/drag_state\",\"app/data/notification_listener\",\"app/data/dm_poll\",\"app/boot/app\",],\n        \"$bundle/frontpage.4fadf7a73f7269b9c27c826f2ebf9bed67255e74.js\": [\"app/data/frontpage_scribe\",\"app/ui/cookie_warning\",\"app/pages/frontpage\",\"app/data/login_scribe\",\"app/pages/login\",],\n        \"$bundle/signup.990c69542ff942eb94bd30c41f9c7c6d04997ca3.js\": [\"app/ui/signup/with_captcha\",\"app/utils/common_regexp\",\"app/ui/signup/with_signup_validation\",\"app/ui/signup/signup_form\",\"app/ui/with_password_strength\",\"app/data/signup_data\",\"app/data/settings\",\"app/data/signup_scribe\",\"app/ui/signup/suggestions\",\"app/ui/signup/small_print_expander\",\"app/ui/signup_download/us_phone_number_checker\",\"app/pages/signup/signup\",],\n        \"$bundle/timeline.b98b3cb4be7ab03238736d9d12f3be01e878d262.js\": [\"app/data/tweet_actions\",\"app/ui/expando/with_expanding_containers\",\"app/ui/expando/expando_helpers\",\"app/ui/gallery/with_gallery\",\"app/ui/with_tweet_translation\",\"app/ui/tweets\",\"app/ui/tweet_injector\",\"app/ui/expando/with_expanding_social_activity\",\"app/ui/expando/expanding_tweets\",\"app/ui/embed_stats\",\"app/data/url_resolver\",\"app/ui/media/with_native_media\",\"app/ui/media/media_tweets\",\"app/data/trends\",\"app/data/trends/location_dialog\",\"app/data/trends/recent_locations\",\"app/utils/scribe_event_initiators\",\"app/data/trends_scribe\",\"app/ui/trends/trends\",\"app/ui/trends/trends_dialog\",\"app/ui/trends/dialog/with_location_info\",\"app/ui/trends/dialog/location_dropdown\",\"app/ui/trends/dialog/location_search\",\"app/ui/trends/dialog/current_location\",\"app/ui/trends/dialog/with_location_list_picker\",\"app/ui/trends/dialog/nearby_trends\",\"app/ui/trends/dialog/recent_trends\",\"app/ui/trends/dialog/dialog\",\"app/boot/trends\",\"app/ui/infinite_scroll_watcher\",\"app/data/timeline\",\"app/boot/timeline\",\"app/data/activity_popup\",\"app/ui/dialogs/activity_popup\",\"app/data/activity_popup_scribe\",\"app/boot/activity_popup\",\"app/data/tweet_translation\",\"app/data/conversations\",\"app/data/media_settings\",\"app/ui/dialogs/sensitive_flag_confirmation\",\"app/ui/user_actions\",\"app/data/prompt_mobile_app_scribe\",\"app/boot/tweets\",\"app/boot/help_pips_enable\",\"app/data/help_pips\",\"app/data/help_pips_scribe\",\"app/ui/help_pip\",\"app/ui/help_pips_injector\",\"app/boot/help_pips\",\"app/ui/expando/close_all_button\",\"app/ui/timelines/with_keyboard_navigation\",\"app/ui/with_focus_highlight\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/utils/chrome\",\"app/ui/timelines/with_traveling_ptw\",\"app/ui/timelines/with_autoplaying_timeline\",\"app/ui/timelines/with_polling\",\"app/ui/timelines/with_new_items\",\"app/ui/timelines/with_tweet_pagination\",\"app/ui/timelines/with_preserved_scroll_position\",\"app/ui/timelines/with_activity_supplements\",\"app/ui/with_conversation_actions\",\"app/ui/timelines/with_pinned_stream_items\",\"app/ui/timelines/tweet_timeline\",\"app/boot/tweet_timeline\",\"app/ui/user_completion_module\",\"app/data/user_completion_module_scribe\",\"app/boot/user_completion_module\",\"app/ui/who_to_follow/with_user_recommendations\",\"app/ui/who_to_follow/who_to_follow_dashboard\",\"app/ui/who_to_follow/who_to_follow_timeline\",\"app/data/who_to_follow\",\"app/data/who_to_follow_scribe\",\"app/ui/profile/recent_connections_module\",\"app/ui/promptbird/with_invite_contacts\",\"app/ui/promptbird\",\"app/utils/oauth_popup\",\"app/data/promptbird\",\"app/data/promptbird_scribe\",\"app/ui/with_select_all\",\"app/ui/who_to_follow/with_invite_messages\",\"app/ui/who_to_follow/with_invite_preview\",\"app/ui/who_to_follow/with_unmatched_contacts\",\"app/ui/dialogs/promptbird_invite_contacts_dialog\",\"app/data/contact_import\",\"app/data/contact_import_scribe\",\"app/ui/with_import_services\",\"app/ui/who_to_follow/import_services\",\"app/ui/who_to_follow/import_loading_dialog\",\"app/ui/dashboard_tweetbox\",\"app/utils/boomerang\",\"app/ui/profile_stats\",\"app/pages/home\",\"app/boot/wtf_module\",\"app/data/who_to_tweet\",\"app/boot/connect\",\"app/ui/who_to_follow/with_list_resizing\",\"app/ui/who_to_follow/matched_contacts_list\",\"app/ui/who_to_follow/unmatched_contacts_list\",\"app/ui/who_to_tweet\",\"app/ui/with_loading_indicator\",\"app/ui/who_to_follow/find_friends\",\"app/pages/connect/interactions\",\"app/pages/connect/mentions\",\"app/pages/connect/network_activity\",\"app/ui/inline_edit\",\"app/data/async_profile\",\"$lib/jquery_ui.profile.js\",\"$lib/jquery_webcam.js\",\"app/ui/settings/with_cropper\",\"app/ui/settings/with_webcam\",\"app/utils/is_showing_avatar_options\",\"app/ui/dialogs/profile_image_upload_dialog\",\"app/ui/dialogs/profile_edit_error_dialog\",\"app/ui/dialogs/profile_confirm_image_delete_dialog\",\"app/ui/droppable_image\",\"app/ui/profile_image_monitor\",\"app/data/inline_edit_scribe\",\"app/data/settings/profile_image_upload_scribe\",\"app/data/drag_and_drop_scribe\",\"app/ui/settings/change_photo\",\"app/ui/image_uploader\",\"app/ui/inline_profile_editing_initializor\",\"app/utils/hide_or_show_divider\",\"app/ui/with_inline_image_options\",\"app/ui/with_inline_image_editing\",\"app/ui/inline_profile_editing\",\"app/data/settings\",\"app/ui/profile_edit_param\",\"app/ui/alert_banner_to_message_drawer\",\"app/boot/inline_edit\",\"app/ui/profile/canopy\",\"app/data/profile_canopy_scribe\",\"app/ui/profile/head\",\"app/data/profile_head_scribe\",\"app/ui/profile/social_proof\",\"app/data/profile_social_proof_scribe\",\"app/ui/media/card_thumbnails\",\"app/data/media_timeline\",\"app/data/media_thumbnails_scribe\",\"app/ui/suggested_users\",\"app/data/suggested_users\",\"app/ui/gallery/grid\",\"app/boot/profile\",\"app/pages/profile/tweets\",\"app/ui/timelines/with_cursor_pagination\",\"app/ui/with_stream_users\",\"app/ui/timelines/user_timeline\",\"app/boot/user_timeline\",\"app/ui/timelines/follower_request_timeline\",\"app/data/follower_request\",\"app/pages/profile/follower_requests\",\"app/pages/profile/followers\",\"app/pages/profile/following\",\"app/pages/profile/favorites\",\"app/ui/timelines/list_timeline\",\"app/boot/list_timeline\",\"app/pages/profile/lists\",\"app/ui/with_removable_stream_items\",\"app/ui/similar_to\",\"app/pages/profile/similar_to\",\"app/ui/facets\",\"app/data/facets_timeline\",\"app/ui/dialogs/iph_search_result_dialog\",\"app/ui/search/archive_navigator\",\"app/data/archive_navigator_scribe\",\"app/boot/search\",\"app/ui/timelines/with_story_pagination\",\"app/ui/gallery/with_grid\",\"app/ui/timelines/universal_timeline\",\"app/boot/universal_timeline\",\"app/data/user_search\",\"app/data/user_search_scribe\",\"app/ui/user_search\",\"app/data/saved_searches\",\"app/ui/search_dropdown\",\"app/data/story_scribe\",\"app/data/onebox_scribe\",\"app/ui/with_story_clicks\",\"$lib/jquery_autoellipsis.js\",\"app/utils/ellipsis\",\"app/ui/with_story_ellipsis\",\"app/ui/search/news_onebox\",\"app/ui/search/user_onebox\",\"app/ui/search/event_onebox\",\"app/ui/search/media_onebox\",\"app/ui/search/spelling_corrections\",\"app/ui/search/related_queries\",\"app/data/search_assistance_scribe\",\"app/data/timeline_controls_scribe\",\"app/pages/search/search\",\"app/ui/timelines/with_search_media_pagination\",\"app/ui/timelines/media_timeline\",\"app/boot/media_timeline\",\"app/pages/search/media\",\"app/pages/simple_t1\",],\n        \"$bundle/permalink.db92252904761daedf68bf11bbb2750235e32ce7.js\": [\"app/ui/permalink_keyboard_support\",\"app/ui/hidden_ancestors\",\"app/ui/hidden_descendants\",\"app/ui/dialogs/sms_codes\",\"app/ui/timelines/conversations/descendant_timeline\",\"app/ui/timelines/conversations/ancestor_timeline\",\"app/data/embed_stats_scribe\",\"app/data/permalink_scribe\",\"app/pages/permalink\",\"app/pages/permalink_photo\",],\n        \"$bundle/lists_permalink.6e3de5369fc1b6a20122d38d988602ec8ea6a3e1.js\": [\"app/ui/list_members_dashboard\",\"app/data/list_members_dashboard\",\"app/ui/list_follow_card\",\"app/data/list_follow_card\",\"app/boot/list_permalink\",\"app/pages/list/permalink_tweets\",\"app/pages/list/permalink_users\",],\n        \"$bundle/discover.814fb8dadcc0776c9fc9424643d16957d677e3c2.js\": [\"app/ui/discover_nav\",\"app/boot/discover\",\"app/ui/timelines/with_most_recent_story_pagination\",\"app/ui/timelines/discover_timeline\",\"app/boot/discover_timeline\",\"app/ui/with_discover_expando\",\"app/ui/discover\",\"app/pages/discover/discover\",\"app/ui/people_search_input\",\"app/boot/who_to_follow\",\"app/utils/common_regexp\",\"app/ui/who_to_follow/invite_form\",\"app/ui/who_to_follow/pymk_kicker\",\"app/ui/who_to_follow/wipe_addressbook_dialog\",\"app/pages/who_to_follow/import\",\"app/pages/who_to_follow/interests\",\"app/pages/who_to_follow/invite\",\"app/pages/who_to_follow/lifeline\",\"app/pages/who_to_follow/matches\",\"app/pages/who_to_follow/suggestions\",\"app/data/who_to_follow/web_personalized_scribe\",\"app/data/who_to_follow/web_personalized_proxy\",\"app/ui/who_to_follow/web_personalized_settings\",\"app/ui/who_to_follow/web_personalized_signup\",\"app/pages/who_to_follow/web_personalized\",],\n        \"$bundle/settings.746ec42b535d98004e7c1b839e01418210fb34ed.js\": [\"app/ui/alert_banner\",\"app/ui/forms/with_submit_disable\",\"app/ui/forms/form_value_modification\",\"app/boot/settings\",\"app/data/settings/account_scribe\",\"app/data/settings/login_verification_test_run\",\"app/data/form_scribe\",\"app/ui/with_forgot_password\",\"app/ui/password_dialog\",\"app/ui/settings/login_verification_sms_check\",\"app/ui/login_verification_confirmation_dialog\",\"app/ui/protected_verified_dialog\",\"app/ui/email_field_highlight\",\"app/ui/validating_fieldset\",\"app/ui/email_confirmation\",\"app/ui/settings/tweet_export\",\"app/ui/dialogs/tweet_export_dialog\",\"app/ui/timezone_detector\",\"app/ui/deactivated\",\"app/ui/geo_deletion\",\"app/ui/settings_controls\",\"app/pages/settings/account\",\"app/data/temporary_password\",\"app/data/settings/applications_scribe\",\"app/ui/dialogs/temporary_password_dialog\",\"app/ui/temporary_password_button\",\"app/ui/oauth_revoker\",\"app/pages/settings/applications\",\"app/data/settings/confirm_deactivation_scribe\",\"app/pages/settings/confirm_deactivation\",\"app/data/settings/design_scribe\",\"$lib/jquery_color_picker.js\",\"app/ui/color_picker\",\"app/ui/design\",\"app/ui/theme_preview\",\"app/ui/theme_picker\",\"app/pages/settings/design\",\"app/pages/settings/email_follow\",\"app/ui/settings/tweet_export_download\",\"app/pages/settings/tweet_export_download\",\"app/ui/settings/notifications\",\"app/pages/settings/notifications\",\"app/ui/password\",\"app/ui/password_match_pair\",\"app/ui/with_password_strength\",\"app/ui/password_strength\",\"app/pages/settings/password\",\"app/boot/avatar_uploading\",\"app/data/settings/profile_scribe\",\"app/ui/settings/facebook_iframe_height_adjuster\",\"app/ui/field_edit_warning\",\"app/ui/dialogs/in_product_help_dialog\",\"app/boot/header_upload\",\"app/ui/bio_box\",\"app/pages/settings/profile\",\"app/data/settings/facebook_proxy\",\"app/ui/settings/with_facebook_container\",\"app/ui/settings/facebook_spinner\",\"app/ui/settings/with_facebook_banner\",\"app/ui/settings/facebook_login\",\"app/ui/settings/facebook_connect\",\"app/ui/settings/facebook_missing_permissions\",\"app/ui/settings/facebook_mismatched_connection\",\"app/ui/settings/facebook_connection_conflict\",\"app/ui/settings/facebook_connected\",\"app/data/settings/facebook_scribe\",\"app/pages/settings/facebook\",\"app/data/settings/sms_scribe\",\"app/ui/forms/select_box\",\"app/ui/settings/sms_phone_create_form\",\"app/ui/forms/element_group_toggler\",\"app/ui/settings/device_verified_form\",\"app/ui/settings/sms_phone_verify_form\",\"app/pages/settings/sms\",\"app/ui/settings/widgets\",\"app/pages/settings/widgets\",\"app/ui/settings/widgets_configurator\",\"app/pages/settings/widgets_configurator\",],\n        \"$bundle/events.d9845cf638173afdb25220e5ab241f0f6c09021a.js\": [\"app/ui/media/media_thumbnails\",\"app/ui/timelines/event_timeline\",\"app/ui/page_visibility\",\"app/data/page_visibility_scribe\",\"app/pages/events/hashtag\",],\n        \"$bundle/accounts.0ca4815a3944f19c9eaeef0c85bf7984b25d3632.js\": [\"app/ui/account/password_reset_controls\",\"app/ui/password_match_pair\",\"app/ui/with_password_strength\",\"app/ui/password_strength\",\"app/pages/account/password_reset\",\"app/ui/captcha_dialog\",\"app/ui/account/resend_password_controls\",\"app/ui/validating_fieldset\",\"app/data/resend_password\",\"app/pages/account/resend_password\",\"app/ui/account/verify_personal_information_controls\",\"app/pages/account/verify_personal_information\",\"app/ui/account/verify_device_token_controls\",\"app/pages/account/verify_device_token\",\"app/ui/account/resend_password_help_controls\",\"app/data/resend_password_help\",\"app/data/resend_password_help_scribe\",\"app/pages/account/resend_password_help\",\"app/pages/account/errors\",],\n        \"$bundle/search.b7757a9e20dfb014aacc3cd4959de0a8058f4006.js\": [\"app/ui/dialogs/search_operators_dialog\",\"app/pages/search/home\",\"app/ui/advanced_search\",\"app/pages/search/advanced\",\"app/pages/search/users\",],\n        \"$bundle/vitonboarding.bc3a6ee0b7d3407a82a383148a420a678f6925af.js\": [\"$lib/jquery.hashchange.js\",\"app/ui/vit/verification_step\",\"app/ui/vit/mobile_topbar\",\"app/pages/vit/onboarding\",],\n        \"$bundle/mobile_gallery.db430b6898f0144b313838368d3e6edcee89eb6f.js\": [\"app/ui/dialogs/mobile_gallery_download_dialog\",\"app/ui/mobile_gallery/gallery_buttons\",\"app/ui/forms/mobile_gallery_email_form\",\"app/data/mobile_gallery/send_download_link\",\"app/pages/mobile_gallery/gallery\",\"app/pages/mobile_gallery/apps\",\"app/ui/mobile_gallery/firefox_tweet_button\",\"app/pages/mobile_gallery/firefox\",\"app/data/mobile_gallery/download_links_scribe\",\"app/pages/mobile_gallery/splash\",],\n        \"$bundle/signup_download.8c964a5fd99e25aca3f0844968e0379e4a42ed59.js\": [\"app/ui/signup_download/next_and_skip_buttons\",\"app/ui/signup_download/us_phone_number_checker\",\"app/pages/signup_download/download\",\"app/ui/signup_download/signup_phone_verify_form\",\"app/pages/signup_download/verify\",],\n        \"$bundle/welcome.0a6e0a3608c754e79a2a771e71faf0945c0627ad.js\": [\"app/data/welcome/invitations_scribe\",\"app/data/welcome/welcome_cards_scribe\",\"app/data/welcome/flow_nav_scribe\",\"app/data/welcome/preview_stream\",\"app/ui/welcome/invite_dialog\",\"app/ui/welcome/with_nav_buttons\",\"app/ui/welcome/header_progress\",\"app/ui/welcome/internal_link_disabler\",\"app/ui/welcome/learn_dashboard\",\"app/ui/welcome/learn_preview_timeline\",\"app/boot/welcome\",\"app/pages/welcome/import\",\"app/data/welcome/intro_scribe\",\"app/ui/welcome/flow_nav\",\"app/ui/welcome/intro_video\",\"app/ui/welcome/lifeline_device_follow_dialog\",\"app/pages/welcome/intro\",\"app/data/welcome/interests_picker_scribe\",\"app/ui/welcome/with_interests\",\"app/ui/welcome/custom_interest\",\"app/ui/welcome/interests_header_search\",\"app/ui/welcome/interests_picker\",\"app/data/welcome/welcome_data\",\"app/pages/welcome/interests\",\"app/data/welcome/users_cards\",\"app/ui/welcome/import_services_cards\",\"app/ui/welcome/with_card_scribe_context\",\"app/ui/welcome/with_more_results\",\"app/ui/welcome/with_welcome_search\",\"app/ui/welcome/users_cards\",\"app/pages/welcome/interests_category\",\"app/data/welcome/lifeline_scribe\",\"app/pages/welcome/lifeline\",\"app/boot/avatar_uploading\",\"app/ui/alert_banner\",\"app/ui/welcome/profile_flow_nav\",\"app/ui/welcome/profile_form\",\"app/pages/welcome/profile\",\"app/pages/welcome/recommendations\",],\n        \"$bundle/directory.5bb8717366f875004b902864cc429411910c67f8.js\": [\"app/ui/history_back\",\"app/pages/directory/directory\",],\n        \"$bundle/boomerang.ce977240704bc785401822f8d5486667b860593d.js\": [\"$lib/boomerang.js\",\"app/utils/boomerang_lib\",],\n        \"$bundle/sandbox.1a1d8d9e5b807e92548fba6d79824ebe5104b03a.js\": [\"$components/jquery/jquery.js\",\"$lib/easyXDM.js\",\"app/boot/sandbox\",],\n        \"$bundle/html2canvas.82a64ea2711e964e829140881de78438319774a0.js\": [\"$lib/html2canvas.js\",],\n        \"$bundle/loginverification.c610b4269b6c7632a1176cc616d0766fdfdcef42.js\": [\"app/ui/login_verification_form\",\"app/data/login_verification\",\"app/pages/login_verification_page\",]\n    };\n    define(\"components/flight/lib/utils\", [], function() {\n        var a = [], b = 100, c = {\n            isDomObj: function(a) {\n                return ((!!a.nodeType || ((a === window))));\n            },\n            toArray: function(b, c) {\n                return a.slice.call(b, c);\n            },\n            merge: function() {\n                var a = arguments.length, b = 0, c = new Array(((a + 1)));\n                for (; ((b < a)); b++) {\n                    c[((b + 1))] = arguments[b];\n                ;\n                };\n            ;\n                return ((((a === 0)) ? {\n                } : (c[0] = {\n                }, ((((c[((c.length - 1))] === !0)) && (c.pop(), c.unshift(!0)))), $.extend.apply(undefined, c))));\n            },\n            push: function(a, b, c) {\n                return ((a && Object.keys(((b || {\n                }))).forEach(function(d) {\n                    if (((a[d] && c))) {\n                        throw Error(((((\"utils.push attempted to overwrite '\" + d)) + \"' while running in protected mode\")));\n                    }\n                ;\n                ;\n                    ((((((typeof a[d] == \"object\")) && ((typeof b[d] == \"object\")))) ? this.push(a[d], b[d]) : a[d] = b[d]));\n                }, this))), a;\n            },\n            isEnumerable: function(a, b) {\n                return ((Object.keys(a).indexOf(b) > -1));\n            },\n            compose: function() {\n                var a = arguments;\n                return function() {\n                    var b = arguments;\n                    for (var c = ((a.length - 1)); ((c >= 0)); c--) {\n                        b = [a[c].apply(this, b),];\n                    ;\n                    };\n                ;\n                    return b[0];\n                };\n            },\n            uniqueArray: function(a) {\n                var b = {\n                }, c = [];\n                for (var d = 0, e = a.length; ((d < e)); ++d) {\n                    if (b.hasOwnProperty(a[d])) {\n                        continue;\n                    }\n                ;\n                ;\n                    c.push(a[d]), b[a[d]] = 1;\n                };\n            ;\n                return c;\n            },\n            debounce: function(a, c, d) {\n                ((((typeof c != \"number\")) && (c = b)));\n                var e, f;\n                return function() {\n                    var b = this, g = arguments, h = function() {\n                        e = null, ((d || (f = a.apply(b, g))));\n                    }, i = ((d && !e));\n                    return JSBNG__clearTimeout(e), e = JSBNG__setTimeout(h, c), ((i && (f = a.apply(b, g)))), f;\n                };\n            },\n            throttle: function(a, c) {\n                ((((typeof c != \"number\")) && (c = b)));\n                var d, e, f, g, h, i, j = this.debounce(function() {\n                    h = g = !1;\n                }, c);\n                return function() {\n                    d = this, e = arguments;\n                    var b = function() {\n                        f = null, ((h && (i = a.apply(d, e)))), j();\n                    };\n                    return ((f || (f = JSBNG__setTimeout(b, c)))), ((g ? h = !0 : (g = !0, i = a.apply(d, e)))), j(), i;\n                };\n            },\n            countThen: function(a, b) {\n                return function() {\n                    if (!--a) {\n                        return b.apply(this, arguments);\n                    }\n                ;\n                ;\n                };\n            },\n            delegate: function(a) {\n                return function(b, c) {\n                    var d = $(b.target), e;\n                    Object.keys(a).forEach(function(f) {\n                        if ((e = d.closest(f)).length) {\n                            return c = ((c || {\n                            })), c.el = e[0], a[f].apply(this, [b,c,]);\n                        }\n                    ;\n                    ;\n                    }, this);\n                };\n            }\n        };\n        return c;\n    });\n    define(\"components/flight/lib/registry\", [\"./utils\",], function(a) {\n        function b(a, b) {\n            var c, d, e, f = b.length;\n            return ((((typeof b[((f - 1))] == \"function\")) && (f -= 1, e = b[f]))), ((((typeof b[((f - 1))] == \"object\")) && (f -= 1))), ((((f == 2)) ? (c = b[0], d = b[1]) : (c = a.node, d = b[0]))), {\n                element: c,\n                type: d,\n                callback: e\n            };\n        };\n    ;\n        function c(a, b) {\n            return ((((((a.element == b.element)) && ((a.type == b.type)))) && ((((b.callback == null)) || ((a.callback == b.callback))))));\n        };\n    ;\n        function d() {\n            function d(b) {\n                this.component = b, this.attachedTo = [], this.instances = {\n                }, this.addInstance = function(a) {\n                    var b = new e(a);\n                    return this.instances[a.identity] = b, this.attachedTo.push(a.node), b;\n                }, this.removeInstance = function(b) {\n                    delete this.instances[b.identity];\n                    var c = this.attachedTo.indexOf(b.node);\n                    ((((c > -1)) && this.attachedTo.splice(c, 1))), ((Object.keys(this.instances).length || a.removeComponentInfo(this)));\n                }, this.isAttachedTo = function(a) {\n                    return ((this.attachedTo.indexOf(a) > -1));\n                };\n            };\n        ;\n            function e(b) {\n                this.instance = b, this.events = [], this.addBind = function(b) {\n                    this.events.push(b), a.events.push(b);\n                }, this.removeBind = function(a) {\n                    for (var b = 0, d; d = this.events[b]; b++) {\n                        ((c(d, a) && this.events.splice(b, 1)));\n                    ;\n                    };\n                ;\n                };\n            };\n        ;\n            var a = this;\n            (this.reset = function() {\n                this.components = [], this.allInstances = {\n                }, this.events = [];\n            }).call(this), this.addInstance = function(a) {\n                var b = this.findComponentInfo(a);\n                ((b || (b = new d(a.constructor), this.components.push(b))));\n                var c = b.addInstance(a);\n                return this.allInstances[a.identity] = c, b;\n            }, this.removeInstance = function(a) {\n                var b, c = this.findInstanceInfo(a), d = this.findComponentInfo(a);\n                ((d && d.removeInstance(a))), delete this.allInstances[a.identity];\n            }, this.removeComponentInfo = function(a) {\n                var b = this.components.indexOf(a);\n                ((((b > -1)) && this.components.splice(b, 1)));\n            }, this.findComponentInfo = function(a) {\n                var b = ((a.attachTo ? a : a.constructor));\n                for (var c = 0, d; d = this.components[c]; c++) {\n                    if (((d.component === b))) {\n                        return d;\n                    }\n                ;\n                ;\n                };\n            ;\n                return null;\n            }, this.findInstanceInfo = function(a) {\n                return ((this.allInstances[a.identity] || null));\n            }, this.findInstanceInfoByNode = function(a) {\n                var b = [];\n                return Object.keys(this.allInstances).forEach(function(c) {\n                    var d = this.allInstances[c];\n                    ((((d.instance.node === a)) && b.push(d)));\n                }, this), b;\n            }, this.JSBNG__on = function(c) {\n                var d = a.findInstanceInfo(this), e, f = arguments.length, g = 1, h = new Array(((f - 1)));\n                for (; ((g < f)); g++) {\n                    h[((g - 1))] = arguments[g];\n                ;\n                };\n            ;\n                if (d) {\n                    e = c.apply(null, h), ((e && (h[((h.length - 1))] = e)));\n                    var i = b(this, h);\n                    d.addBind(i);\n                }\n            ;\n            ;\n            }, this.off = function(d, e, f) {\n                var g = b(this, arguments), h = a.findInstanceInfo(this);\n                ((h && h.removeBind(g)));\n                for (var i = 0, j; j = a.events[i]; i++) {\n                    ((c(j, g) && a.events.splice(i, 1)));\n                ;\n                };\n            ;\n            }, a.trigger = new Function, this.teardown = function() {\n                a.removeInstance(this);\n            }, this.withRegistration = function() {\n                this.before(\"initialize\", function() {\n                    a.addInstance(this);\n                }), this.around(\"JSBNG__on\", a.JSBNG__on), this.after(\"off\", a.off), ((((window.DEBUG && DEBUG.enabled)) && this.after(\"trigger\", a.trigger))), this.after(\"teardown\", {\n                    obj: a,\n                    fnName: \"teardown\"\n                });\n            };\n        };\n    ;\n        return new d;\n    });\n    define(\"components/flight/tools/debug/debug\", [\"../../lib/registry\",\"../../lib/utils\",], function(a, b) {\n        function d(a, b, c) {\n            var c = ((c || {\n            })), e = ((c.obj || window)), g = ((c.path || ((((e == window)) ? \"window\" : \"\")))), h = Object.keys(e);\n            h.forEach(function(c) {\n                ((((f[a] || a))(b, e, c) && JSBNG__console.log([g,\".\",c,].join(\"\"), \"-\\u003E\", [\"(\",typeof e[c],\")\",].join(\"\"), e[c]))), ((((((((Object.prototype.toString.call(e[c]) == \"[object Object]\")) && ((e[c] != e)))) && ((g.split(\".\").indexOf(c) == -1)))) && d(a, b, {\n                    obj: e[c],\n                    path: [g,c,].join(\".\")\n                })));\n            });\n        };\n    ;\n        function e(a, b, c, e) {\n            ((((!b || ((typeof c == b)))) ? d(a, c, e) : JSBNG__console.error([c,\"must be\",b,].join(\" \"))));\n        };\n    ;\n        function g(a, b) {\n            e(\"JSBNG__name\", \"string\", a, b);\n        };\n    ;\n        function h(a, b) {\n            e(\"nameContains\", \"string\", a, b);\n        };\n    ;\n        function i(a, b) {\n            e(\"type\", \"function\", a, b);\n        };\n    ;\n        function j(a, b) {\n            e(\"value\", null, a, b);\n        };\n    ;\n        function k(a, b) {\n            e(\"valueCoerced\", null, a, b);\n        };\n    ;\n        function l(a, b) {\n            d(a, null, b);\n        };\n    ;\n        function p() {\n            var a = [].slice.call(arguments);\n            ((c.eventNames.length || (c.eventNames = m))), c.actions = ((a.length ? a : m)), t();\n        };\n    ;\n        function q() {\n            var a = [].slice.call(arguments);\n            ((c.actions.length || (c.actions = m))), c.eventNames = ((a.length ? a : m)), t();\n        };\n    ;\n        function r() {\n            c.actions = [], c.eventNames = [], t();\n        };\n    ;\n        function s() {\n            c.actions = m, c.eventNames = m, t();\n        };\n    ;\n        function t() {\n            ((window.JSBNG__localStorage && (JSBNG__localStorage.setItem(\"logFilter_eventNames\", c.eventNames), JSBNG__localStorage.setItem(\"logFilter_actions\", c.actions))));\n        };\n    ;\n        function u() {\n            var a = {\n                eventNames: ((((window.JSBNG__localStorage && JSBNG__localStorage.getItem(\"logFilter_eventNames\"))) || n)),\n                actions: ((((window.JSBNG__localStorage && JSBNG__localStorage.getItem(\"logFilter_actions\"))) || o))\n            };\n            return Object.keys(a).forEach(function(b) {\n                var c = a[b];\n                ((((((typeof c == \"string\")) && ((c !== m)))) && (a[b] = c.split(\",\"))));\n            }), a;\n        };\n    ;\n        var c, f = {\n            JSBNG__name: function(a, b, c) {\n                return ((a == c));\n            },\n            nameContains: function(a, b, c) {\n                return ((c.indexOf(a) > -1));\n            },\n            type: function(a, b, c) {\n                return ((b[c] instanceof a));\n            },\n            value: function(a, b, c) {\n                return ((b[c] === a));\n            },\n            valueCoerced: function(a, b, c) {\n                return ((b[c] == a));\n            }\n        }, m = \"all\", n = [], o = [], c = u();\n        return {\n            enable: function(a) {\n                this.enabled = !!a, ((((a && window.JSBNG__console)) && (JSBNG__console.info(\"Booting in DEBUG mode\"), JSBNG__console.info(\"You can configure event logging with DEBUG.events.logAll()/logNone()/logByName()/logByAction()\")))), window.DEBUG = this;\n            },\n            JSBNG__find: {\n                byName: g,\n                byNameContains: h,\n                byType: i,\n                byValue: j,\n                byValueCoerced: k,\n                custom: l\n            },\n            events: {\n                logFilter: c,\n                logByAction: p,\n                logByName: q,\n                logAll: s,\n                logNone: r\n            }\n        };\n    });\n    define(\"components/flight/lib/compose\", [\"./utils\",\"../tools/debug/debug\",], function(a, b) {\n        function f(a, b) {\n            if (!c) {\n                return;\n            }\n        ;\n        ;\n            var e = Object.create(null);\n            Object.keys(a).forEach(function(c) {\n                if (((d.indexOf(c) < 0))) {\n                    var f = Object.getOwnPropertyDescriptor(a, c);\n                    f.writable = b, e[c] = f;\n                }\n            ;\n            ;\n            }), Object.defineProperties(a, e);\n        };\n    ;\n        function g(a, b, d) {\n            var e;\n            if (((!c || !a.hasOwnProperty(b)))) {\n                d.call(a);\n                return;\n            }\n        ;\n        ;\n            e = Object.getOwnPropertyDescriptor(a, b).writable, Object.defineProperty(a, b, {\n                writable: !0\n            }), d.call(a), Object.defineProperty(a, b, {\n                writable: e\n            });\n        };\n    ;\n        function h(a, b) {\n            a.mixedIn = ((a.hasOwnProperty(\"mixedIn\") ? a.mixedIn : [])), b.forEach(function(b) {\n                ((((a.mixedIn.indexOf(b) == -1)) && (f(a, !1), b.call(a), a.mixedIn.push(b))));\n            }), f(a, !0);\n        };\n    ;\n        var c = ((b.enabled && !a.isEnumerable(Object, \"getOwnPropertyDescriptor\"))), d = [\"mixedIn\",];\n        if (c) {\n            try {\n                Object.getOwnPropertyDescriptor(Object, \"keys\");\n            } catch (e) {\n                c = !1;\n            };\n        }\n    ;\n    ;\n        return {\n            mixin: h,\n            unlockProperty: g\n        };\n    });\n    define(\"components/flight/lib/advice\", [\"./utils\",\"./compose\",], function(a, b) {\n        var c = {\n            around: function(a, b) {\n                return function() {\n                    var d = 0, e = arguments.length, f = new Array(((e + 1)));\n                    f[0] = a.bind(this);\n                    for (; ((d < e)); d++) {\n                        f[((d + 1))] = arguments[d];\n                    ;\n                    };\n                ;\n                    return b.apply(this, f);\n                };\n            },\n            before: function(a, b) {\n                var c = ((((typeof b == \"function\")) ? b : b.obj[b.fnName]));\n                return function() {\n                    return c.apply(this, arguments), a.apply(this, arguments);\n                };\n            },\n            after: function(a, b) {\n                var c = ((((typeof b == \"function\")) ? b : b.obj[b.fnName]));\n                return function() {\n                    var d = ((a.unbound || a)).apply(this, arguments);\n                    return c.apply(this, arguments), d;\n                };\n            },\n            withAdvice: function() {\n                [\"before\",\"after\",\"around\",].forEach(function(a) {\n                    this[a] = function(d, e) {\n                        b.unlockProperty(this, d, function() {\n                            return ((((typeof this[d] == \"function\")) ? this[d] = c[a](this[d], e) : this[d] = e));\n                        });\n                    };\n                }, this);\n            }\n        };\n        return c;\n    });\n    define(\"components/flight/lib/logger\", [\"./compose\",\"./utils\",], function(a, b) {\n        function d(a) {\n            var b = ((a.tagName ? a.tagName.toLowerCase() : a.toString())), c = ((a.className ? ((\".\" + a.className)) : \"\")), d = ((b + c));\n            return ((a.tagName ? [\"'\",\"'\",].join(d) : d));\n        };\n    ;\n        function e(a, b, e) {\n            var f, g, h, i, j, k, l, m;\n            ((((typeof e[((e.length - 1))] == \"function\")) && (h = e.pop(), h = ((h.unbound || h))))), ((((typeof e[((e.length - 1))] == \"object\")) && e.pop())), ((((e.length == 2)) ? (g = e[0], f = e[1]) : (g = b.$node[0], f = e[0]))), ((((window.DEBUG && window.DEBUG.enabled)) && (j = DEBUG.events.logFilter, l = ((((j.actions == \"all\")) || ((j.actions.indexOf(a) > -1)))), k = function(a) {\n                return ((a.test ? a : new RegExp(((((\"^\" + a.replace(/\\*/g, \".*\"))) + \"$\")))));\n            }, m = ((((j.eventNames == \"all\")) || j.eventNames.some(function(a) {\n                return k(a).test(f);\n            }))), ((((l && m)) && JSBNG__console.info(c[a], a, ((((\"[\" + f)) + \"]\")), d(g), b.constructor.describe.split(\" \").slice(0, 3).join(\" \")))))));\n        };\n    ;\n        function f() {\n            this.before(\"trigger\", function() {\n                e(\"trigger\", this, b.toArray(arguments));\n            }), this.before(\"JSBNG__on\", function() {\n                e(\"JSBNG__on\", this, b.toArray(arguments));\n            }), this.before(\"off\", function(a) {\n                e(\"off\", this, b.toArray(arguments));\n            });\n        };\n    ;\n        var c = {\n            JSBNG__on: \"\\u003C-\",\n            trigger: \"-\\u003E\",\n            off: \"x \"\n        };\n        return f;\n    });\n    define(\"components/flight/lib/component\", [\"./advice\",\"./utils\",\"./compose\",\"./registry\",\"./logger\",\"../tools/debug/debug\",], function(a, b, c, d, e, f) {\n        function i(a) {\n            a.events.slice().forEach(function(a) {\n                var b = [a.type,];\n                ((a.element && b.unshift(a.element))), ((((typeof a.callback == \"function\")) && b.push(a.callback))), this.off.apply(this, b);\n            }, a.instance);\n        };\n    ;\n        function j() {\n            i(d.findInstanceInfo(this));\n        };\n    ;\n        function k() {\n            var a = d.findComponentInfo(this);\n            ((a && Object.keys(a.instances).forEach(function(b) {\n                var c = a.instances[b];\n                c.instance.teardown();\n            })));\n        };\n    ;\n        function l(a, b) {\n            try {\n                window.JSBNG__postMessage(b, \"*\");\n            } catch (c) {\n                throw JSBNG__console.log(\"unserializable data for event\", a, \":\", b), new Error([\"The event\",a,\"on component\",this.toString(),\"was triggered with non-serializable data\",].join(\" \"));\n            };\n        ;\n        };\n    ;\n        function m() {\n            this.trigger = function() {\n                var a, b, c, d, e, g = ((arguments.length - 1)), h = arguments[g];\n                return ((((((typeof h != \"string\")) && ((!h || !h.defaultBehavior)))) && (g--, c = h))), ((((g == 1)) ? (a = $(arguments[0]), d = arguments[1]) : (a = this.$node, d = arguments[0]))), ((d.defaultBehavior && (e = d.defaultBehavior, d = $.JSBNG__Event(d.type)))), b = ((d.type || d)), ((((f.enabled && window.JSBNG__postMessage)) && l.call(this, b, c))), ((((typeof this.attr.eventData == \"object\")) && (c = $.extend(!0, {\n                }, this.attr.eventData, c)))), a.trigger(((d || b)), c), ((((e && !d.isDefaultPrevented())) && ((this[e] || e)).call(this))), a;\n            }, this.JSBNG__on = function() {\n                var a, c, d, e, f = ((arguments.length - 1)), g = arguments[f];\n                ((((typeof g == \"object\")) ? e = b.delegate(this.resolveDelegateRules(g)) : e = g)), ((((f == 2)) ? (a = $(arguments[0]), c = arguments[1]) : (a = this.$node, c = arguments[0])));\n                if (((((typeof e != \"function\")) && ((typeof e != \"object\"))))) {\n                    throw new Error(((((\"Unable to bind to '\" + c)) + \"' because the given callback is not a function or an object\")));\n                }\n            ;\n            ;\n                return d = e.bind(this), d.target = e, ((e.guid && (d.guid = e.guid))), a.JSBNG__on(c, d), e.guid = d.guid, d;\n            }, this.off = function() {\n                var a, b, c, d = ((arguments.length - 1));\n                return ((((typeof arguments[d] == \"function\")) && (c = arguments[d], d -= 1))), ((((d == 1)) ? (a = $(arguments[0]), b = arguments[1]) : (a = this.$node, b = arguments[0]))), a.off(b, c);\n            }, this.resolveDelegateRules = function(a) {\n                var b = {\n                };\n                return Object.keys(a).forEach(function(c) {\n                    if (((!c in this.attr))) {\n                        throw new Error(((((((((\"Component \\\"\" + this.toString())) + \"\\\" wants to listen on \\\"\")) + c)) + \"\\\" but no such attribute was defined.\")));\n                    }\n                ;\n                ;\n                    b[this.attr[c]] = a[c];\n                }, this), b;\n            }, this.defaultAttrs = function(a) {\n                ((b.push(this.defaults, a, !0) || (this.defaults = a)));\n            }, this.select = function(a) {\n                return this.$node.JSBNG__find(this.attr[a]);\n            }, this.initialize = $.noop, this.teardown = j;\n        };\n    ;\n        function n(a) {\n            var c = arguments.length, e = new Array(((c - 1)));\n            for (var f = 1; ((f < c)); f++) {\n                e[((f - 1))] = arguments[f];\n            ;\n            };\n        ;\n            if (!a) {\n                throw new Error(\"Component needs to be attachTo'd a jQuery object, native node or selector string\");\n            }\n        ;\n        ;\n            var g = b.merge.apply(b, e);\n            $(a).each(function(a, b) {\n                var c = ((b.jQuery ? b[0] : b)), e = d.findComponentInfo(this);\n                if (((e && e.isAttachedTo(c)))) {\n                    return;\n                }\n            ;\n            ;\n                new this(b, g);\n            }.bind(this));\n        };\n    ;\n        function o() {\n            function l(a, b) {\n                b = ((b || {\n                })), this.identity = h++;\n                if (!a) {\n                    throw new Error(\"Component needs a node\");\n                }\n            ;\n            ;\n                ((a.jquery ? (this.node = a[0], this.$node = a) : (this.node = a, this.$node = $(a)))), this.toString = l.toString, ((f.enabled && (this.describe = this.toString())));\n                var c = Object.create(b);\n                {\n                    var fin48keys = ((window.top.JSBNG_Replay.forInKeys)((this.defaults))), fin48i = (0);\n                    var d;\n                    for (; (fin48i < fin48keys.length); (fin48i++)) {\n                        ((d) = (fin48keys[fin48i]));\n                        {\n                            ((b.hasOwnProperty(d) || (c[d] = this.defaults[d])));\n                        ;\n                        };\n                    };\n                };\n            ;\n                this.attr = c, this.initialize.call(this, b);\n            };\n        ;\n            var b = arguments.length, i = new Array(((b + 3)));\n            for (var j = 0; ((j < b)); j++) {\n                i[j] = arguments[j];\n            ;\n            };\n        ;\n            return l.toString = function() {\n                var a = i.map(function(a) {\n                    if (((a.JSBNG__name == null))) {\n                        var b = a.toString().match(g);\n                        return ((((b && b[1])) ? b[1] : \"\"));\n                    }\n                ;\n                ;\n                    return ((((a.JSBNG__name != \"withBaseComponent\")) ? a.JSBNG__name : \"\"));\n                }).filter(Boolean).join(\", \");\n                return a;\n            }, ((f.enabled && (l.describe = l.toString()))), l.attachTo = n, l.teardownAll = k, ((f.enabled && i.unshift(e))), i.unshift(m, a.withAdvice, d.withRegistration), c.mixin(l.prototype, i), l;\n        };\n    ;\n        var g = /function (.*?)\\s?\\(/, h = 0;\n        return o.teardownAll = function() {\n            d.components.slice().forEach(function(a) {\n                a.component.teardownAll();\n            }), d.reset();\n        }, o;\n    });\n    define(\"core/component\", [\"module\",\"require\",\"exports\",\"components/flight/lib/component\",], function(module, require, exports) {\n        var flightComponent = require(\"components/flight/lib/component\");\n        module.exports = flightComponent;\n    });\n    define(\"core/registry\", [\"module\",\"require\",\"exports\",\"components/flight/lib/registry\",], function(module, require, exports) {\n        var flightRegistry = require(\"components/flight/lib/registry\");\n        module.exports = flightRegistry;\n    });\n    provide(\"core/clock\", function(a) {\n        using(\"core/component\", \"core/registry\", function(b, c) {\n            function h() {\n            \n            };\n        ;\n            function i() {\n                this.timers = [], this.clockComponent = function() {\n                    if (((!this.currentClock || !c.findInstanceInfo(this.currentClock)))) {\n                        this.reset(), this.currentClock = new d(JSBNG__document);\n                    }\n                ;\n                ;\n                    return this.currentClock;\n                }, this.trigger = function(a, b) {\n                    this.clockComponent().trigger(a, b);\n                }, this.reset = function() {\n                    this.timers = [];\n                }, this.tick = function() {\n                    this.timers.forEach(function(a) {\n                        a.tick(f);\n                    });\n                }, this.setTicker = function() {\n                    this.pause(), this.ticker = window.JSBNG__setInterval(this.tick.bind(this), f);\n                }, this.init = function() {\n                    this.clockComponent(), ((this.ticker || this.setTicker()));\n                }, this.clear = function(a) {\n                    ((a && this.timers.splice(this.timers.indexOf(a), 1)));\n                }, this.setTimeoutEvent = function(a, b, c) {\n                    if (((typeof a != \"string\"))) {\n                        return JSBNG__console.error(\"clock.setTimeoutEvent was passed a function instead of a string.\");\n                    }\n                ;\n                ;\n                    this.init();\n                    var d = new k(a, b, c);\n                    return this.timers.push(d), d;\n                }, this.JSBNG__clearTimeout = function(a) {\n                    ((((a instanceof k)) && this.clear(a)));\n                }, this.setIntervalEvent = function(a, b, c) {\n                    if (((typeof a != \"string\"))) {\n                        return JSBNG__console.error(\"clock.setIntervalEvent was passed a function instead of a string.\");\n                    }\n                ;\n                ;\n                    this.init();\n                    var d = new m(a, b, c);\n                    return this.timers.push(d), d;\n                }, this.JSBNG__clearInterval = function(a) {\n                    ((((a instanceof m)) && this.clear(a)));\n                }, this.resume = this.restart = this.setTicker, this.pause = function(a, b) {\n                    JSBNG__clearInterval(((this.ticker || 0)));\n                };\n            };\n        ;\n            function j() {\n                this.callback = function() {\n                    e.trigger(this.eventName, this.data);\n                }, this.clear = function() {\n                    e.clear(this);\n                }, this.pause = function() {\n                    this.paused = !0;\n                }, this.resume = function() {\n                    this.paused = !1;\n                }, this.tickUnlessPaused = this.tick, this.tick = function() {\n                    if (this.paused) {\n                        return;\n                    }\n                ;\n                ;\n                    this.tickUnlessPaused.apply(this, arguments);\n                };\n            };\n        ;\n            function k(a, b, c) {\n                this.countdown = b, this.eventName = a, this.data = c;\n            };\n        ;\n            function m(a, b, c) {\n                this.countdown = this.interval = this.maxInterval = this.initialInterval = b, this.backoffFactor = g, this.eventName = a, this.data = c;\n            };\n        ;\n            var d = b(h), e = new i, f = 1000, g = 2, l = function() {\n                this.tick = function(a) {\n                    this.countdown -= a, ((((this.countdown <= 0)) && (this.clear(), this.callback())));\n                };\n            };\n            l.call(k.prototype), j.call(k.prototype);\n            var n = function() {\n                this.tick = function(a) {\n                    this.countdown -= a;\n                    if (((this.countdown <= 0))) {\n                        this.callback();\n                        if (((this.interval < this.maxInterval))) {\n                            var b = ((Math.ceil(((((this.interval * this.backoffFactor)) / f))) * f));\n                            this.interval = Math.min(b, this.maxInterval);\n                        }\n                    ;\n                    ;\n                        this.countdown = this.interval;\n                    }\n                ;\n                ;\n                }, this.backoff = function(a, b) {\n                    this.maxInterval = a, this.backoffFactor = ((b || g)), ((((this.interval > this.maxInterval)) && (this.interval = a)));\n                }, this.cancelBackoff = function() {\n                    this.interval = this.maxInterval = this.initialInterval, this.countdown = Math.min(this.countdown, this.interval), this.resume();\n                };\n            };\n            n.call(m.prototype), j.call(m.prototype), a(e);\n        });\n    });\n    define(\"core/compose\", [\"module\",\"require\",\"exports\",\"components/flight/lib/compose\",], function(module, require, exports) {\n        var flightCompose = require(\"components/flight/lib/compose\");\n        module.exports = flightCompose;\n    });\n    define(\"core/advice\", [\"module\",\"require\",\"exports\",\"components/flight/lib/advice\",], function(module, require, exports) {\n        var flightAdvice = require(\"components/flight/lib/advice\");\n        module.exports = flightAdvice;\n    });\n    provide(\"core/parameterize\", function(a) {\n        function c(a, c, d) {\n            return ((c ? a.replace(b, function(a, b) {\n                if (b) {\n                    if (c[b]) {\n                        return c[b];\n                    }\n                ;\n                ;\n                    if (d) {\n                        throw new Error(((\"Cannot parameterize string, no replacement found for \" + b)));\n                    }\n                ;\n                ;\n                    return \"\";\n                }\n            ;\n            ;\n                return a;\n            }) : a));\n        };\n    ;\n        var b = /\\{\\{(.+?)\\}\\}/g;\n        a(c);\n    });\n    provide(\"core/i18n\", function(a) {\n        using(\"core/parameterize\", function(b) {\n            a(b);\n        });\n    });\n    define(\"core/logger\", [\"module\",\"require\",\"exports\",\"components/flight/lib/logger\",], function(module, require, exports) {\n        var flightLogger = require(\"components/flight/lib/logger\");\n        module.exports = flightLogger;\n    });\n    define(\"core/utils\", [\"module\",\"require\",\"exports\",\"components/flight/lib/utils\",], function(module, require, exports) {\n        var flightUtils = require(\"components/flight/lib/utils\");\n        module.exports = flightUtils;\n    });\n    define(\"debug/debug\", [\"module\",\"require\",\"exports\",\"components/flight/tools/debug/debug\",], function(module, require, exports) {\n        var flightDebug = require(\"components/flight/tools/debug/debug\");\n        module.exports = flightDebug;\n    });\n    provide(\"app/utils/auth_token\", function(a) {\n        var b;\n        a({\n            get: function() {\n                if (!b) {\n                    throw new Error(\"authToken should have been set!\");\n                }\n            ;\n            ;\n                return b;\n            },\n            set: function(a) {\n                b = a;\n            },\n            addTo: function(a, c) {\n                return a.authenticity_token = b, ((c && (a.post_authenticity_token = b))), a;\n            }\n        });\n    });\n    define(\"app/data/scribe_transport\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function ScribeTransport(a) {\n            this.SESSION_BUFFER_KEY = \"ScribeTransport\", this.SCRIBE_API_ENDPOINT = \"/i/jot\", this.options = {\n            }, ((a && (this.updateOptions(a), this.registerEventHandlers(a))));\n        };\n    ;\n        ScribeTransport.prototype = {\n            flush: function(a, b) {\n                if (((!a || !a.length))) {\n                    return;\n                }\n            ;\n            ;\n                ((((b === undefined)) && (b = !!this.options.sync)));\n                if (this.options.useAjax) {\n                    var c = {\n                        url: this.options.url,\n                        data: $.extend(this.ajaxParams(a), this.options.requestParameters),\n                        type: \"POST\",\n                        dataType: \"json\",\n                        async: !b\n                    };\n                    ((this.options.debug && (((this.options.debugHandler && (c.success = this.options.debugHandler))), c.data.debug = \"1\"))), $.ajax(c);\n                }\n                 else {\n                    var d = ((this.options.debug ? \"&debug=1\" : \"\"));\n                    (new JSBNG__Image).src = ((((((((((this.options.url + \"?q=\")) + (+(new JSBNG__Date)).toString().slice(-4))) + d)) + \"&\")) + this.imageParams(a)));\n                }\n            ;\n            ;\n                this.reset();\n            },\n            ajaxParams: function(a) {\n                if (((typeof a == \"string\"))) {\n                    return {\n                        log: ((((\"[\" + a)) + \"]\"))\n                    };\n                }\n            ;\n            ;\n                var b = this.options.encodeParameters;\n                return ((((b && ((typeof b == \"function\")))) ? b.apply(this, arguments) : {\n                    log: JSON.stringify(a)\n                }));\n            },\n            imageParams: function(a) {\n                if (((typeof a == \"string\"))) {\n                    return ((((\"log=%5B\" + a)) + \"%5D\"));\n                }\n            ;\n            ;\n                var b = this.options.encodeParameters;\n                return ((((b && ((typeof b == \"function\")))) ? b.apply(this, arguments) : ((\"log=\" + encodeURIComponent(JSON.stringify(a))))));\n            },\n            reset: function() {\n                ((this.options.bufferEvents && (this.skipUnloadFlush = !1, JSBNG__sessionStorage.removeItem(this.options.bufferKey))));\n            },\n            getBuffer: function() {\n                return ((JSBNG__sessionStorage.getItem(this.options.bufferKey) || \"\"));\n            },\n            send: function(a, b, c) {\n                if (((((!b || !a)) || ((this.options.bufferSize < 0))))) {\n                    return;\n                }\n            ;\n            ;\n                a._category_ = b;\n                if (((((c || !this.options.bufferEvents)) || !this.options.bufferSize))) this.flush([a,], c);\n                 else {\n                    var d = JSON.stringify(a);\n                    ((this.options.useAjax || (d = encodeURIComponent(d))));\n                    var e = this.getBuffer(), f = ((e + ((e ? ((this.SEPARATOR + d)) : d))));\n                    ((((this.options.bufferSize && this.fullBuffer(f))) ? ((this.options.useAjax ? this.flush(f) : (this.flush(e), JSBNG__sessionStorage.setItem(this.options.bufferKey, d)))) : JSBNG__sessionStorage.setItem(this.options.bufferKey, f)));\n                }\n            ;\n            ;\n                ((this.options.debug && $(JSBNG__document).trigger(((\"scribedata.\" + this.options.bufferKey)), a))), ((((this.options.metrics && ((a.event_info != \"debug\")))) && $(JSBNG__document).trigger(\"debugscribe\", a)));\n            },\n            fullBuffer: function(a) {\n                return ((a.length >= ((this.options.useAjax ? ((this.options.bufferSize * 2083)) : ((2050 - this.options.url.length))))));\n            },\n            updateOptions: function(a) {\n                this.options = $.extend({\n                }, this.options, a), ((this.options.requestParameters || (this.options.requestParameters = {\n                }))), ((((this.options.flushOnUnload === undefined)) && (this.options.flushOnUnload = !0))), ((this.options.bufferKey || (this.options.bufferKey = this.SESSION_BUFFER_KEY))), ((((this.options.bufferSize === 0)) && (this.options.bufferEvents = !1))), ((((this.options.useAjax === undefined)) && (this.options.useAjax = !0)));\n                if (((this.options.bufferEvents || ((this.options.bufferEvents == undefined))))) {\n                    try {\n                        JSBNG__sessionStorage.setItem(((this.SESSION_BUFFER_KEY + \".init\")), \"test\");\n                        var b = ((JSBNG__sessionStorage.getItem(((this.SESSION_BUFFER_KEY + \".init\"))) == \"test\"));\n                        JSBNG__sessionStorage.removeItem(((this.SESSION_BUFFER_KEY + \".init\"))), this.options.bufferEvents = b;\n                    } catch (c) {\n                        this.options.bufferEvents = !1;\n                    };\n                }\n            ;\n            ;\n                if (((this.options.debug && !this.options.debugHandler))) {\n                    var d = this;\n                    this.options.debugHandler = ((a.debugHandler || function(a) {\n                        $(JSBNG__document).trigger(((\"handlescribe.\" + d.options.bufferKey)), a);\n                    }));\n                }\n            ;\n            ;\n                var e = ((((window.JSBNG__location.protocol === \"https:\")) ? \"https:\" : \"http:\"));\n                ((((this.options.url === undefined)) ? ((this.options.useAjax ? this.options.url = this.SCRIBE_API_ENDPOINT : this.options.url = ((\"https://twitter.com\" + this.SCRIBE_API_ENDPOINT)))) : this.options.url = this.options.url.replace(/^[a-z]+:/g, e).replace(/\\/$/, \"\"))), ((((this.options.bufferEvents && ((this.options.bufferSize === undefined)))) && (this.options.bufferSize = 20)));\n            },\n            appHost: function() {\n                return window.JSBNG__location.host;\n            },\n            registerEventHandlers: function() {\n                var a = this, b = $(JSBNG__document);\n                if (this.options.bufferEvents) {\n                    b.JSBNG__on(((\"flushscribe.\" + a.options.bufferKey)), function(b) {\n                        a.flush(a.getBuffer(), !0);\n                    });\n                    if (this.options.flushOnUnload) {\n                        var c = function(b) {\n                            a.skipUnloadFlush = ((((!b || !b.match(/http/))) || !!b.match(new RegExp(((\"^https?://\" + a.appHost())), \"gi\")))), ((a.skipUnloadFlush && window.JSBNG__setTimeout(function() {\n                                a.skipUnloadFlush = !1;\n                            }, 3000)));\n                        };\n                        b.JSBNG__on(((\"mouseup.\" + this.options.bufferKey)), \"a\", function(a) {\n                            if (((((((((((this.getAttribute(\"target\") || a.button)) || a.metaKey)) || a.shiftKey)) || a.altKey)) || a.ctrlKey))) {\n                                return;\n                            }\n                        ;\n                        ;\n                            c(this.getAttribute(\"href\"));\n                        }), b.JSBNG__on(((\"submit.\" + this.options.bufferKey)), \"form\", function(a) {\n                            c(this.getAttribute(\"action\"));\n                        }), b.JSBNG__on(((\"uiNavigate.\" + this.options.bufferKey)), function(a, b) {\n                            c(b.url);\n                        }), $(window).JSBNG__on(((\"unload.\" + this.options.bufferKey)), function() {\n                            ((a.skipUnloadFlush || a.flush(a.getBuffer(), !0))), a.skipUnloadFlush = !1;\n                        });\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                this.SEPARATOR = ((this.options.useAjax ? \",\" : encodeURIComponent(\",\")));\n            },\n            destroy: function() {\n                this.flush(this.getBuffer()), $(JSBNG__document).off(((\"flushscribe.\" + this.options.bufferKey))), $(window).off(((\"unload.\" + this.options.bufferKey))), $(JSBNG__document).off(((\"mouseup.\" + this.options.bufferKey))), $(JSBNG__document).off(((\"submit.\" + this.options.bufferKey))), $(JSBNG__document).off(((\"uiNavigate.\" + this.options.bufferKey)));\n            }\n        }, module.exports = new ScribeTransport;\n    });\n    define(\"app/data/scribe_monitor\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function scribeMonitor() {\n            function a(a) {\n                if (((window.scribeConsole && window.scribeConsole.JSBNG__postMessage))) {\n                    var b = ((((window.JSBNG__location.protocol + \"//\")) + window.JSBNG__location.host));\n                    try {\n                        window.scribeConsole.JSBNG__postMessage(a, b);\n                    } catch (c) {\n                        var d = ((((\"ScribeMonitor.postToConsole - Scribe Console error or unserializable data [\" + a._category_)) + \"]\"));\n                        JSBNG__console.error(d, a);\n                    };\n                ;\n                }\n            ;\n            ;\n            };\n        ;\n            this.after(\"initialize\", function() {\n                this.JSBNG__on(\"keypress\", function(a) {\n                    if (((((((a.charCode == 205)) && a.shiftKey)) && a.altKey))) {\n                        var b = \"menubar=no,toolbar=no,personalbar=no,location=no,resizable=yes,status=no,dependent=yes,height=600,width=600,screenX=100,screenY=100,scrollbars=yes\", c = window.JSBNG__location.host;\n                        if (((!c || !c.match(/^(staging[0-9]+\\.[^\\.]+\\.twitter.com|twitter\\.com|localhost\\.twitter\\.com\\:[0-9]+)$/)))) {\n                            c = \"twitter.com\";\n                        }\n                    ;\n                    ;\n                        window.scribeConsole = window.open(((((((window.JSBNG__location.protocol + \"//\")) + c)) + \"/scribe/console\")), \"scribe_console\", b);\n                    }\n                ;\n                ;\n                }), this.JSBNG__on(\"scribedata.ScribeTransport handlescribe.ScribeTransport\", function(b, c) {\n                    a(c);\n                }), ((this.attr.scribesForScribeConsole && this.JSBNG__on(\"uiSwiftLoaded uiPageChanged\", function(b, c) {\n                    ((((((b.type == \"uiSwiftLoaded\")) || !c.fromCache)) && this.attr.scribesForScribeConsole.forEach(function(b) {\n                        b._category_ = \"client_event\", a(b);\n                    })));\n                })));\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\");\n        module.exports = defineComponent(scribeMonitor);\n    });\n    define(\"app/data/client_event\", [\"module\",\"require\",\"exports\",\"app/data/scribe_transport\",], function(module, require, exports) {\n        function ClientEvent(a) {\n            this.scribeContext = {\n            }, this.scribeData = {\n            }, this.scribe = function(b, c) {\n                var d = ((a || window.scribeTransport));\n                if (!d) {\n                    throw new Error(\"You must create a global scribeTransport variable or pass one into this constructor.\");\n                }\n            ;\n            ;\n                if (((((!b || ((typeof b != \"object\")))) || ((c && ((typeof c != \"object\"))))))) {\n                    throw new Error(\"Invalid terms or data hash argument when calling ClientEvent.scribe().\");\n                }\n            ;\n            ;\n                if (this.scribeContext) {\n                    var e = ((((typeof this.scribeContext == \"function\")) ? this.scribeContext() : this.scribeContext));\n                    b = $.extend({\n                    }, e, b);\n                }\n            ;\n            ;\n                {\n                    var fin49keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin49i = (0);\n                    var f;\n                    for (; (fin49i < fin49keys.length); (fin49i++)) {\n                        ((f) = (fin49keys[fin49i]));\n                        {\n                            b[f] = ((b[f] && ((\"\" + b[f])).toLowerCase().replace(/_?[^a-z0-9_]+_?/g, \"_\")));\n                        ;\n                        };\n                    };\n                };\n            ;\n                ((d.options.debug && $.each([\"client\",\"action\",], function(a, c) {\n                    if (!b[c]) {\n                        throw new Error(((((\"You must specify a \" + c)) + \" term in your client_event.\")));\n                    }\n                ;\n                ;\n                })));\n                var c = $.extend({\n                }, c);\n                if (this.scribeData) {\n                    var g = ((((typeof this.scribeData == \"function\")) ? this.scribeData() : this.scribeData));\n                    c = $.extend({\n                    }, g, c);\n                }\n            ;\n            ;\n                c.event_namespace = b, c.triggered_on = ((c.triggered_on || +(new JSBNG__Date))), c.format_version = ((c.format_version || 2)), d.send(c, \"client_event\");\n            };\n        };\n    ;\n        var scribeTransport = require(\"app/data/scribe_transport\");\n        module.exports = new ClientEvent(scribeTransport);\n    });\n    define(\"app/data/ddg\", [\"module\",\"require\",\"exports\",\"app/data/client_event\",], function(module, require, exports) {\n        function DDG(a, b) {\n            this.experiments = ((a || {\n            })), this.impressions = {\n            }, this.scribeExperiment = function(a, c, d) {\n                var e = $.extend({\n                    page: \"ddg\",\n                    section: a.experiment_key,\n                    component: \"\",\n                    element: \"\"\n                }, c);\n                d = ((d || {\n                })), d.experiment_key = a.experiment_key, d.bucket = a.bucket, d.version = a.version, ((b || window.clientEvent)).scribe(e, d);\n            }, this.impression = function(a) {\n                var b = this.experiments[a];\n                ((b && (a = b.experiment_key, ((this.impressions[a] || (this.scribeExperiment(b, {\n                    action: \"experiment\"\n                }), this.impressions[a] = !0))))));\n            }, this.track = function(a, b, c) {\n                if (!b) {\n                    throw new Error(\"You must specify an event name to track custom DDG events. Event names should be lower-case, snake_cased strings.\");\n                }\n            ;\n            ;\n                var d = this.experiments[a];\n                ((d && this.scribeExperiment(d, {\n                    element: b,\n                    action: \"track\"\n                }, c)));\n            }, this.bucket = function(a) {\n                var b = this.experiments[a];\n                return ((b ? b.bucket : \"\"));\n            };\n        };\n    ;\n        var clientEvent = require(\"app/data/client_event\");\n        module.exports = new DDG({\n        }, clientEvent);\n    });\n    define(\"app/utils/scribe_association_types\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        module.exports = {\n            associatedTweet: 1,\n            platformCardPublisher: 2,\n            platformCardCreator: 3,\n            conversationOrigin: 4,\n            associatedUser: 5,\n            associatedTimeline: 6\n        };\n    });\n    define(\"app/data/with_scribe\", [\"module\",\"require\",\"exports\",\"app/data/client_event\",\"core/utils\",], function(module, require, exports) {\n        function withScribe() {\n            function a(a) {\n                if (!a) {\n                    return;\n                }\n            ;\n            ;\n                a = ((a.sourceEventData ? a.sourceEventData : a));\n                if (((a.scribeContext || a.scribeData))) {\n                    return a;\n                }\n            ;\n            ;\n            };\n        ;\n            this.scribe = function() {\n                var b = Array.prototype.slice.call(arguments), c, d, e, f, g;\n                c = ((((typeof b[0] == \"string\")) ? {\n                    action: b[0]\n                } : b[0])), b.shift();\n                if (b[0]) {\n                    e = b[0], ((e.sourceEventData && (e = e.sourceEventData)));\n                    if (((e.scribeContext || e.scribeData))) {\n                        f = e.scribeContext, g = e.scribeData;\n                    }\n                ;\n                ;\n                    ((((((((b[0].scribeContext || b[0].scribeData)) || b[0].sourceEventData)) || ((b.length === 2)))) && b.shift()));\n                }\n            ;\n            ;\n                c = utils.merge({\n                }, f, c), d = ((((typeof b[0] == \"function\")) ? b[0].bind(this)(e) : b[0])), d = utils.merge({\n                }, g, d), this.transport(c, d);\n            }, this.scribeOnEvent = function(b, c, d) {\n                this.JSBNG__on(b, function(a, b) {\n                    b = ((b || {\n                    })), this.scribe(c, ((b.sourceEventData || b)), d);\n                });\n            }, this.transport = function(b, c) {\n                clientEvent.scribe(b, c);\n            };\n        };\n    ;\n        var clientEvent = require(\"app/data/client_event\"), utils = require(\"core/utils\");\n        module.exports = withScribe;\n    });\n    define(\"app/utils/with_session\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function withSession() {\n            this.setSessionItem = function(a, b) {\n                ((window.JSBNG__sessionStorage && JSBNG__sessionStorage.setItem(a, b)));\n            }, this.removeSessionItem = function(a) {\n                ((window.JSBNG__sessionStorage && JSBNG__sessionStorage.removeItem(a)));\n            }, this.getSessionItem = function(a) {\n                return ((window.JSBNG__sessionStorage && JSBNG__sessionStorage.getItem(a)));\n            }, this.setSessionObject = function(a, b) {\n                ((((b === undefined)) ? this.removeSessionItem(a) : this.setSessionItem(a, JSON.stringify(b))));\n            }, this.getSessionObject = function(a) {\n                var b = this.getSessionItem(a);\n                return ((((b === undefined)) ? b : JSON.parse(b)));\n            };\n        };\n    ;\n        module.exports = withSession;\n    });\n    define(\"app/utils/scribe_item_types\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        module.exports = {\n            tweet: 0,\n            promotedTweet: 1,\n            popularTweet: 2,\n            retweet: 10,\n            user: 3,\n            promotedUser: 4,\n            message: 6,\n            story: 7,\n            trend: 8,\n            promotedTrend: 9,\n            popularTrend: 15,\n            list: 11,\n            search: 12,\n            savedSearch: 13,\n            peopleSearch: 14\n        };\n    });\n    define(\"app/data/with_interaction_data_scribe\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/data/with_scribe\",\"app/utils/with_session\",\"app/utils/scribe_item_types\",\"app/utils/scribe_association_types\",\"app/data/client_event\",\"core/utils\",], function(module, require, exports) {\n        function withInteractionDataScribe() {\n            this.defaultAttrs({\n                profileClickContextExpirationMs: 600000,\n                profileClickContextSessionKey: \"profileClickContext\"\n            }), compose.mixin(this, [withScribe,withSession,]), this.scribeInteraction = function(a, b, c) {\n                if (((!a || !b))) {\n                    return;\n                }\n            ;\n            ;\n                ((((typeof a == \"string\")) && (a = {\n                    action: a\n                })));\n                var d = a.action;\n                if (!d) {\n                    return;\n                }\n            ;\n            ;\n                b = utils.merge(b, b.sourceEventData), a = this.getInteractionScribeContext(a, b);\n                var e = {\n                };\n                ((b.url && (e.url = b.url))), ((b.query && (e.query = b.query))), ((b.impressionId && (e.promoted = !0)));\n                var f = this.interactionItem(b);\n                ((f && (e.items = [f,])));\n                var g = this.interactionTarget(b, a);\n                ((g && (e.targets = [g,]))), c = utils.merge(e, c, b.scribeData), ((b.conversationOriginTweetId && (c.associations = ((c.associations || {\n                })), c.associations[associationTypes.conversationOrigin] = {\n                    association_id: b.conversationOriginTweetId,\n                    association_type: itemTypes.tweet\n                }))), ((((((d == \"profile_click\")) || ((d == \"mention_click\")))) && this.saveProfileClickContext(b)));\n                if (((((d == \"report_as_spam\")) || ((d == \"block\"))))) {\n                    var h = this.getUserActionAssociations(b);\n                    ((h && (c.associations = utils.merge(c.associations, h))));\n                }\n            ;\n            ;\n                this.scribe(a, b, c);\n            }, this.interactionItem = function(a) {\n                var b = {\n                };\n                if (((((a.position === 0)) || a.position))) {\n                    b.position = a.position;\n                }\n            ;\n            ;\n                ((a.impressionId && (b.promoted_id = a.impressionId)));\n                switch (a.itemType) {\n                  case \"user\":\n                    this.userDetails(b, a);\n                    break;\n                  case \"tweet\":\n                    this.tweetDetails(b, a), this.cardDetails(b, a), this.translationDetails(b, a), this.conversationDetails(b, a);\n                    break;\n                  case \"activity\":\n                    this.activityDetails(b, a), ((((a.activityType == \"follow\")) ? (this.userDetails(b, a), ((a.isNetworkActivity || (b.id = this.attr.userId)))) : ((a.listId ? this.listDetails(b, a) : (this.tweetDetails(b, a), this.cardDetails(b, a))))));\n                    break;\n                  case \"story\":\n                    this.storyDetails(b, a), ((a.tweetId ? this.tweetDetails(b, a) : ((a.userId ? this.userDetails(b, a) : b.item_type = itemTypes.story))));\n                };\n            ;\n                return b;\n            }, this.interactionTarget = function(a, b) {\n                if (this.isUserTarget(b.action)) {\n                    var c = ((((a.isMentionClick ? a.userId : a.targetUserId)) || a.userId));\n                    return this.userDetails({\n                    }, {\n                        userId: c\n                    });\n                }\n            ;\n            ;\n            }, this.tweetDetails = function(a, b) {\n                return a.id = b.tweetId, a.item_type = itemTypes.tweet, ((b.relevanceType && (a.is_popular_tweet = !0))), ((b.retweetId && (a.retweeting_tweet_id = b.retweetId))), a;\n            }, this.cardDetails = function(a, b) {\n                return ((b.cardItem && utils.push(a, b.cardItem))), a;\n            }, this.translationDetails = function(a, b) {\n                return a.dest = b.dest, a;\n            }, this.conversationDetails = function(a, b) {\n                ((b.isConversation && (a.description = \"focal\"))), ((b.isConversationComponent && (a.description = b.description, a.id = b.tweetId)));\n            }, this.userDetails = function(a, b) {\n                return a.id = ((b.containerUserId || b.userId)), a.item_type = itemTypes.user, ((b.feedbackToken && (a.token = b.feedbackToken))), a;\n            }, this.listDetails = function(a, b) {\n                return a.id = b.listId, a.item_type = itemTypes.list, a;\n            }, this.activityDetails = function(a, b) {\n                return a.activity_type = b.activityType, ((b.actingUserIds && (a.acting_user_ids = b.actingUserIds))), a;\n            }, this.storyDetails = function(a, b) {\n                return a.story_type = b.storyType, a.story_source = b.storySource, a.social_proof_type = b.socialProofType, a;\n            }, this.isUserTarget = function(a) {\n                return (([\"mention_click\",\"profile_click\",\"follow\",\"unfollow\",\"block\",\"unblock\",\"report_as_spam\",\"add_to_list\",\"dm\",].indexOf(a) != -1));\n            }, this.getInteractionScribeContext = function(a, b) {\n                return ((((((a.action == \"profile_click\")) && ((a.element === undefined)))) && (a.element = ((b.isPromotedBadgeClick ? \"promoted_badge\" : b.profileClickTarget))))), a;\n            }, this.scribeInteractiveResults = function(a, b, c, d) {\n                var e = [], f = !1;\n                ((((typeof a == \"string\")) && (a = {\n                    action: a\n                })));\n                if (((!a.action || !b))) {\n                    return;\n                }\n            ;\n            ;\n                ((b.length || (a.action = \"no_results\"))), b.forEach(function(a) {\n                    ((f || (f = !!a.impressionId))), e.push(this.interactionItem(a));\n                }.bind(this)), a = this.getInteractionScribeContext(a, c);\n                var g = {\n                };\n                ((((e && e.length)) && (g.items = e))), ((f && (g.promoted = !0))), this.scribe(a, c, utils.merge(g, d));\n            }, this.associationNamespace = function(a, b) {\n                var c = {\n                    page: a.page,\n                    section: a.section\n                };\n                return (((([\"conversation\",\"replies\",\"in_reply_to\",].indexOf(b) >= 0)) && (c.component = b))), c;\n            }, this.getProfileUserAssociations = function() {\n                var a = ((this.attr.profile_user && this.attr.profile_user.id_str)), b = null;\n                return ((a && (b = {\n                }, b[associationTypes.associatedUser] = {\n                    association_id: a,\n                    association_type: itemTypes.user,\n                    association_namespace: this.associationNamespace(clientEvent.scribeContext)\n                }))), b;\n            }, this.getProfileClickContextAssociations = function(a) {\n                var b = ((this.getSessionObject(this.attr.profileClickContextSessionKey) || null));\n                return ((((((((b && ((b.userId == a)))) && ((b.expires > (new JSBNG__Date).getTime())))) && b.associations)) || null));\n            }, this.saveProfileClickContext = function(a) {\n                var b = {\n                };\n                ((a.tweetId ? (b[associationTypes.associatedTweet] = {\n                    association_id: a.tweetId,\n                    association_type: itemTypes.tweet,\n                    association_namespace: this.associationNamespace(clientEvent.scribeContext, a.scribeContext.component)\n                }, ((a.conversationOriginTweetId && (b[associationTypes.conversationOrigin] = {\n                    association_id: a.conversationOriginTweetId,\n                    association_type: itemTypes.tweet\n                })))) : b = this.getProfileUserAssociations())), this.setSessionObject(this.attr.profileClickContextSessionKey, {\n                    userId: a.userId,\n                    associations: b,\n                    expires: (((new JSBNG__Date).getTime() + this.attr.profileClickContextExpirationMs))\n                });\n            }, this.getUserActionAssociations = function(a) {\n                var b = a.scribeContext.component, c;\n                return ((((((b == \"profile_dialog\")) || ((b == \"profile_follow_card\")))) ? c = this.getProfileClickContextAssociations(a.userId) : ((((b == \"user\")) ? c = this.getProfileUserAssociations() : c = null)))), c;\n            };\n        };\n    ;\n        var compose = require(\"core/compose\"), withScribe = require(\"app/data/with_scribe\"), withSession = require(\"app/utils/with_session\"), itemTypes = require(\"app/utils/scribe_item_types\"), associationTypes = require(\"app/utils/scribe_association_types\"), clientEvent = require(\"app/data/client_event\"), utils = require(\"core/utils\");\n        module.exports = withInteractionDataScribe;\n    });\n    define(\"app/utils/scribe_card_types\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        module.exports = {\n            photoTweet: 1,\n            photoCard: 2,\n            playerCard: 3,\n            summaryCard: 4,\n            promotionCard: 5,\n            plusCard: 6\n        };\n    });\n    define(\"app/data/with_card_metadata\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/scribe_association_types\",\"app/data/with_interaction_data_scribe\",\"app/utils/scribe_item_types\",\"app/utils/scribe_card_types\",], function(module, require, exports) {\n        function withCardMetadata() {\n            compose.mixin(this, [withInteractionDataScribe,]);\n            var a = \"Swift-1\";\n            this.cardAssociationsForData = function(a) {\n                var b = {\n                    associations: {\n                    }\n                };\n                return b.associations[associationTypes.platformCardPublisher] = {\n                    association_id: a.publisherUserId,\n                    association_type: itemTypes.user\n                }, b.associations[associationTypes.platformCardCreator] = {\n                    association_id: a.creatorUserId,\n                    association_type: itemTypes.user\n                }, b.message = a.cardUrl, b;\n            }, this.getCardDataFromTweet = function(a) {\n                var b = {\n                }, c = a.closest(\".tweet\"), d, e, f, g;\n                return (((d = c.closest(\".permalink-tweet-container\")).length || (d = $(c.attr(\"data-expanded-footer\"))))), b.tweetHasCard = c.hasClass(\"has-cards\"), g = !!d.JSBNG__find(\".card2\").length, b.interactionInsideCard = !1, ((g ? (b.tweetHasCard2 = g, b.tweetPreExpanded = c.hasClass(\"preexpanded\"), b.itemId = ((c.attr(\"data-item-id\") || null)), b.promotedId = ((c.attr(\"data-impression-id\") || null)), f = d.JSBNG__find(\".card2\"), b.cardName = f.attr(\"data-card2-name\"), b.cardUrl = f.JSBNG__find(\".card2-holder\").attr(\"data-card2-url\"), b.publisherUserId = this.getUserIdFromElement(f.JSBNG__find(\".card2-attribution\").JSBNG__find(\".js-user-profile-link\")), b.creatorUserId = this.getUserIdFromElement(f.JSBNG__find(\".card2-byline\").JSBNG__find(\".js-user-profile-link\")), b.interactionInsideCard = !!a.closest(\".card2\").length) : ((b.tweetHasCard && (e = d.JSBNG__find(\".cards-base\"), ((((e.length > 0)) && (b.cardType = e.data(\"card-type\"), b.cardUrl = e.data(\"card-url\"), b.publisherUserId = this.getUserIdFromElement(e.JSBNG__find(\".source .js-user-profile-link\")), b.creatorUserId = this.getUserIdFromElement(e.JSBNG__find(\".byline .js-user-profile-link\")), b.interactionInsideCard = this.interactionInsideCard(a))))))))), b;\n            }, this.interactionInsideCard = function(a) {\n                return !!a.closest(\".cards-base\").length;\n            }, this.scribeCardInteraction = function(a, b) {\n                ((b.tweetHasCard2 ? this.scribeCard2Interaction(a, b) : ((b.tweetHasCard && this.scribeClassicCardInteraction(a, b)))));\n            }, this.scribeClassicCardInteraction = function(a, b) {\n                var c = this.cardAssociationsForData(b);\n                this.scribeInteraction({\n                    element: ((((\"platform_\" + b.cardType)) + \"_card\")),\n                    action: a\n                }, b, c);\n            }, this.getCard2Item = function(b) {\n                return {\n                    item_type: itemTypes.tweet,\n                    id: b.itemId,\n                    promoted_id: b.promotedId,\n                    pre_expanded: ((b.tweetPreExpanded || !1)),\n                    card_type: cardTypes.plusCard,\n                    card_name: b.cardName,\n                    card_url: b.cardUrl,\n                    card_platform_key: a,\n                    publisher_id: b.publisherUserId\n                };\n            }, this.scribeCard2Interaction = function(a, b) {\n                var c = {\n                    items: [this.getCard2Item(b),]\n                };\n                this.scribeInteraction({\n                    element: \"platform_card\",\n                    action: a\n                }, b, c);\n            }, this.getUserIdFromElement = function(a) {\n                return ((a.length ? a.attr(\"data-user-id\") : null));\n            };\n        };\n    ;\n        var compose = require(\"core/compose\"), associationTypes = require(\"app/utils/scribe_association_types\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\"), itemTypes = require(\"app/utils/scribe_item_types\"), cardTypes = require(\"app/utils/scribe_card_types\");\n        module.exports = withCardMetadata;\n    });\n    define(\"app/data/with_conversation_metadata\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        module.exports = function() {\n            this.defaultAttrs({\n                hasConversationModuleClassAlt: \"has-conversation-module\",\n                conversationModuleSelectorAlt: \".conversation-module\",\n                rootClass: \"root\",\n                conversationRootTweetSelector: \".conversation-module .conversation-tweet-item.root .tweet\",\n                conversationAncestorTweetSelector: \".conversation-module .conversation-tweet-item:not(root) .tweet\"\n            }), this.getConversationAttrs = function(a) {\n                var b = {\n                };\n                if (a.hasClass(this.attr.hasConversationModuleClass)) {\n                    var c = a.closest(this.attr.conversationModuleSelector);\n                    b.isConversation = !0, b.conversationAncestors = c.attr(\"data-ancestors\").split(\",\");\n                }\n                 else ((a.hasClass(\"conversation-tweet\") && (b.isConversationComponent = !0, b.description = ((a.hasClass(this.attr.rootClass) ? \"root\" : \"ancestor\")))));\n            ;\n            ;\n                return b;\n            }, this.conversationComponentInteractionData = function(a, b) {\n                return {\n                    itemType: \"tweet\",\n                    tweetId: $(a).attr(\"data-item-id\"),\n                    description: b,\n                    isConversationComponent: !0\n                };\n            }, this.extraInteractionData = function(a) {\n                if (((a.JSBNG__find(this.attr.conversationModuleSelector).length > 0))) {\n                    var b = a.JSBNG__find(this.conversationRootTweetSelector).map(function(a, b) {\n                        return this.conversationComponentInteractionData(b, \"root\");\n                    }.bind(this)).get(), c = a.JSBNG__find(this.attr.conversationAncestorTweetSelector).map(function(a, b) {\n                        return this.conversationComponentInteractionData(b, \"ancestor\");\n                    }.bind(this)).get();\n                    return b.concat(c);\n                }\n            ;\n            ;\n                return [];\n            }, this.addConversationScribeContext = function(a, b) {\n                return ((((b && b.isConversation)) ? (a.component = \"conversation\", a.element = \"tweet\") : ((((b && b.isConversationComponent)) && (a.component = \"conversation\", a.element = b.description))))), a;\n            }, this.after(\"initialize\", function() {\n                ((this.attr.conversationModuleSelector || (this.attr.conversationModuleSelector = this.attr.conversationModuleSelectorAlt))), ((this.attr.hasConversationModuleClass || (this.attr.hasConversationModuleClass = this.attr.hasConversationModuleClassAlt)));\n            });\n        };\n    });\n    define(\"app/ui/with_interaction_data\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/utils\",\"app/data/with_card_metadata\",\"app/data/with_conversation_metadata\",], function(module, require, exports) {\n        function withInteractionData() {\n            compose.mixin(this, [withCardMetadata,withConversationMetadata,]), this.defaultAttrs({\n                genericInteractionItemSelector: \".js-stream-item\",\n                expandoContainerSelector: \".expanded-conversation\",\n                expandoAncestorSelector: \".ancestor\",\n                expandoDescendantSelector: \".descendant\",\n                streamItemContainerSelector: \".js-stream-item, .permalink\",\n                activityTargetSelector: \".activity-truncated-tweet .js-actionable-tweet, .js-activity-list_member_added [data-list-id]\",\n                activityItemSelector: \".js-activity\",\n                itemAvatarSelector: \".js-action-profile-avatar, .avatar.size48\",\n                itemSmallAvatarSelector: \".avatar.size24, .avatar.size32\",\n                itemMentionSelector: \".twitter-atreply\",\n                discoveryStoryItemSelector: \".js-story-item\",\n                discoveryStoryHeadlineSelector: \".js-news-headline a\",\n                originalTweetSelector: \".js-original-tweet[data-tweet-id]\",\n                promotedBadgeSelector: \".js-promoted-badge\",\n                elementContextSelector: \"[data-element-context]\",\n                componentContextSelector: \"[data-component-context]\",\n                scribeContextSelector: \"[data-scribe-context]\",\n                userTargetSelector: \".js-user-profile-link, .twitter-atreply\"\n            });\n            var a = {\n                feedbackToken: \"data-feedback-token\",\n                impressionId: \"data-impression-id\",\n                disclosureType: \"data-disclosure-type\",\n                impressionCookie: \"data-impression-cookie\",\n                relevanceType: \"data-relevance-type\",\n                associatedTweetId: \"data-associated-tweet-id\"\n            }, b = utils.merge({\n                tweetId: \"data-tweet-id\",\n                retweetId: \"data-retweet-id\",\n                isReplyTo: \"data-is-reply-to\",\n                hasParentTweet: \"data-has-parent-tweet\"\n            }, a), c = utils.merge({\n                activityType: \"data-activity-type\"\n            }, b), d = utils.merge({\n                storyType: \"data-story-type\",\n                query: \"data-query\",\n                url: \"data-url\",\n                storySource: \"data-source\",\n                storyMediaType: \"data-card-media-type\",\n                socialProofType: \"data-social-proof-type\"\n            }, b);\n            this.interactionDataWithCard = function(a, b) {\n                return this.interactionData(a, b, !0);\n            }, this.interactionData = function(a, b, c) {\n                var d = {\n                }, e = {\n                }, f = !!c, g = ((a.target ? $(a.target) : $(a)));\n                ((this.setItemType && this.setItemType(g))), b = ((b || {\n                })), ((this.attr.eventData && (d = this.attr.eventData.scribeContext, e = this.attr.eventData.scribeData)));\n                var h = utils.merge(this.getEventData(g, f), b), i = g.closest(this.attr.scribeContextSelector).data(\"scribe-context\");\n                ((i && (e = utils.merge(i, e)))), d = utils.merge({\n                }, d, this.getScribeContext(g, h));\n                if (((((this.attr.itemType == \"tweet\")) && (([\"replies\",\"conversation\",\"in_reply_to\",].indexOf(d.component) >= 0))))) {\n                    var j = g.closest(this.attr.streamItemContainerSelector).JSBNG__find(this.attr.originalTweetSelector);\n                    ((j.length && (h.conversationOriginTweetId = j.attr(\"data-tweet-id\"))));\n                }\n            ;\n            ;\n                return utils.merge({\n                    scribeContext: d,\n                    scribeData: e\n                }, h);\n            }, this.getScribeContext = function(a, b) {\n                var c = {\n                }, d = a.closest(this.attr.componentContextSelector).attr(\"data-component-context\");\n                ((d && (c.component = d)));\n                var e = a.closest(this.attr.elementContextSelector).attr(\"data-element-context\");\n                ((e && (c.element = e)));\n                if (((c.element || c.component))) {\n                    return c;\n                }\n            ;\n            ;\n            }, this.getInteractionItemPosition = function(a, b) {\n                if (((b && ((b.position >= 0))))) {\n                    return b.position;\n                }\n            ;\n            ;\n                var c = ((this.getItemPosition && this.getItemPosition(a)));\n                return ((((c >= 0)) ? c : (c = this.getExpandoPosition(a), ((((c != -1)) ? c : ((((a.attr(\"data-is-tweet-proof\") === \"true\")) ? this.getTweetProofPosition(a) : this.getStreamPosition(a))))))));\n            }, this.getExpandoPosition = function(a) {\n                var b, c = -1, d = a.closest(this.attr.expandoAncestorSelector), e = a.closest(this.attr.expandoDescendantSelector);\n                return ((d.length && (b = d.closest(this.attr.expandoContainerSelector), c = b.JSBNG__find(this.attr.expandoAncestorSelector).index(d)))), ((e.length && (b = e.closest(this.attr.expandoContainerSelector), c = b.JSBNG__find(this.attr.expandoDescendantSelector).index(e)))), ((a.closest(\".in-reply-to,.replies-to\").length && (b = a.closest(\".in-reply-to,.replies-to\"), c = b.JSBNG__find(\".tweet\").index(a.closest(\".tweet\"))))), c;\n            }, this.getTweetProofPosition = function(a) {\n                var b = a.closest(this.attr.trendItemSelector).index();\n                return ((((b != -1)) ? b : -1));\n            }, this.getStreamPosition = function(a) {\n                var b = a.closest(this.attr.genericInteractionItemSelector).index();\n                if (((b != -1))) {\n                    return b;\n                }\n            ;\n            ;\n            }, this.getEventData = function(c, d) {\n                var e, f;\n                switch (this.attr.itemType) {\n                  case \"activity\":\n                    return this.getActivityEventData(c);\n                  case \"story\":\n                    return this.getStoryEventData(c);\n                  case \"user\":\n                    return this.getDataAttrs(c, a);\n                  case \"tweet\":\n                    return f = utils.merge(this.getDataAttrs(c, b), this.getConversationAttrs(c)), ((d ? utils.merge(this.getCardAttrs(c), f) : f));\n                  case \"list\":\n                    return this.getDataAttrs(c, a);\n                  case \"trend\":\n                    return this.getDataAttrs(c, b);\n                  default:\n                    return JSBNG__console.warn(\"You must configure your UI component with an \\\"itemType\\\" attribute of activity, story, user, tweet, list, or trend in order for it to scribe properly.\"), {\n                    };\n                };\n            ;\n            }, this.getActivityEventData = function(a) {\n                var b = a.closest(this.attr.activityItemSelector), d = b.JSBNG__find(this.attr.activityTargetSelector);\n                ((d.length || (d = a)));\n                var e = this.getDataAttrs(a, c, d);\n                e.isNetworkActivity = !!a.closest(\".discover-stream\").length, ((e.activityType || ((e.isReplyTo ? e.activityType = \"reply\" : e.activityType = ((e.retweetId ? \"retweet\" : \"mention\"))))));\n                var f = [], g = ((e.isNetworkActivity ? \".stream-item-activity-header\" : \"ol.activity-supplement\"));\n                return b.JSBNG__find(((g + \" a[data-user-id]\"))).each(function() {\n                    f.push($(this).data(\"user-id\"));\n                }), ((f.length && (e.actingUserIds = f))), e;\n            }, this.getStoryEventData = function(a) {\n                var b = this.getDataAttrs(a, d), c = a.closest(this.attr.discoveryStoryItemSelector), e = c.JSBNG__find(this.attr.discoveryStoryHeadlineSelector).text();\n                return b.storyTitle = e.replace(/^\\s+|\\s+$/g, \"\"), b;\n            }, this.getTargetUserId = function(a) {\n                var b = a.closest(this.attr.userTargetSelector);\n                if (b.length) {\n                    return ((b.closest(\"[data-user-id]\").attr(\"data-user-id\") || b.JSBNG__find(\"[data-user-id]\").attr(\"data-user-id\")));\n                }\n            ;\n            ;\n            }, this.getDataAttrs = function(a, b, c) {\n                var d = {\n                };\n                c = ((c || a)), $.each(b, function(a, b) {\n                    ((c.is(((((\"[\" + b)) + \"]\"))) ? d[a] = c.attr(b) : d[a] = c.closest(((((\"[\" + b)) + \"]\"))).attr(b)));\n                }), d.isReplyTo = ((d.isReplyTo === \"true\")), d = utils.merge(d, {\n                    position: this.getInteractionItemPosition(a, d),\n                    isMentionClick: ((a.closest(this.attr.itemMentionSelector).length > 0)),\n                    isPromotedBadgeClick: ((a.closest(this.attr.promotedBadgeSelector).length > 0)),\n                    itemType: this.attr.itemType\n                }), ((a.is(this.attr.itemAvatarSelector) ? d.profileClickTarget = \"avatar\" : ((a.is(this.attr.itemSmallAvatarSelector) ? d.profileClickTarget = \"mini_avatar\" : d.profileClickTarget = \"screen_name\"))));\n                var e = this.getTargetUserId(a);\n                return ((e && (d.targetUserId = e))), d.userId = a.closest(\"[data-user-id]\").attr(\"data-user-id\"), d.containerUserId = c.closest(\"[data-user-id]\").attr(\"data-user-id\"), d;\n            }, this.getCardAttrs = function(a) {\n                var b = this.getCardDataFromTweet(a);\n                return ((b.tweetHasCard2 ? {\n                    cardItem: this.getCard2Item(b)\n                } : {\n                }));\n            };\n        };\n    ;\n        var compose = require(\"core/compose\"), utils = require(\"core/utils\"), withCardMetadata = require(\"app/data/with_card_metadata\"), withConversationMetadata = require(\"app/data/with_conversation_metadata\");\n        module.exports = withInteractionData;\n    });\n    define(\"app/data/tweet_actions_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/ui/with_interaction_data\",\"app/data/with_conversation_metadata\",\"app/data/with_interaction_data_scribe\",], function(module, require, exports) {\n        function tweetActionsScribe() {\n            this.scribeTweet = function(a) {\n                return function(b, c) {\n                    var d = this.addConversationScribeContext({\n                        action: a\n                    }, c.sourceEventData);\n                    this.scribeInteraction(d, utils.merge(c, c.sourceEventData));\n                }.bind(this);\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiReplyButtonTweetSuccess\", this.scribeTweet(\"reply\")), this.JSBNG__on(\"uiDidRetweetSuccess\", this.scribeTweet(\"retweet\")), this.JSBNG__on(\"uiDidDeleteTweet\", this.scribeTweet(\"delete\")), this.JSBNG__on(\"dataDidFavoriteTweet\", this.scribeTweet(\"favorite\")), this.JSBNG__on(\"dataDidUnfavoriteTweet\", this.scribeTweet(\"unfavorite\")), this.JSBNG__on(\"dataDidUnretweet\", this.scribeTweet(\"unretweet\")), this.JSBNG__on(\"uiPermalinkClick\", this.scribeTweet(\"permalink\")), this.JSBNG__on(\"uiDidShareViaEmailSuccess\", this.scribeTweet(\"share_via_email\")), this.JSBNG__on(\"dataTweetTranslationSuccess\", this.scribeTweet(\"translate\"));\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withInteractionData = require(\"app/ui/with_interaction_data\"), withConversationMetadata = require(\"app/data/with_conversation_metadata\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\");\n        module.exports = defineComponent(tweetActionsScribe, withInteractionData, withConversationMetadata, withInteractionDataScribe);\n    });\n    define(\"app/data/user_actions_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/scribe_item_types\",\"app/utils/scribe_association_types\",\"app/data/with_interaction_data_scribe\",], function(module, require, exports) {\n        function userActionsScribe() {\n            function a(a) {\n                var b = ((a && a.associatedTweetId)), c = {\n                };\n                if (!b) {\n                    return;\n                }\n            ;\n            ;\n                return c[associationTypes.associatedTweet] = {\n                    association_type: itemTypes.tweet,\n                    association_id: b\n                }, {\n                    associations: c\n                };\n            };\n        ;\n            this.defaultAttrs({\n                urlToActionMap: {\n                    \"/i/user/follow\": \"follow\",\n                    \"/i/user/unfollow\": \"unfollow\",\n                    \"/i/user/block\": \"block\",\n                    \"/i/user/unblock\": \"unblock\",\n                    \"/i/user/report_spam\": \"report_as_spam\",\n                    \"/i/user/hide\": \"dismiss\"\n                },\n                userActionToActionMap: {\n                    uiMentionAction: \"reply\",\n                    uiDmAction: \"dm\",\n                    uiListAction: \"add_to_list\",\n                    uiRetweetOnAction: {\n                        element: \"allow_retweets\",\n                        action: \"JSBNG__on\"\n                    },\n                    uiRetweetOffAction: {\n                        element: \"allow_retweets\",\n                        action: \"off\"\n                    },\n                    uiDeviceNotificationsOnAction: {\n                        element: \"mobile_notifications\",\n                        action: \"JSBNG__on\"\n                    },\n                    uiDeviceNotificationsOffAction: {\n                        element: \"mobile_notifications\",\n                        action: \"off\"\n                    },\n                    uiShowMobileNotificationsConfirm: {\n                        element: \"mobile_notifications\",\n                        action: \"failure\"\n                    },\n                    uiShowPushTweetsNotificationsConfirm: {\n                        element: \"mobile_notifications\",\n                        action: \"failure\"\n                    },\n                    uiEmailFollowAction: {\n                        element: \"email_follow\",\n                        action: \"email_follow\"\n                    },\n                    uiEmailUnfollowAction: {\n                        element: \"email_follow\",\n                        action: \"email_unfollow\"\n                    }\n                }\n            }), this.handleUserEvent = function(b, c) {\n                this.scribeInteraction(this.attr.urlToActionMap[c.requestUrl], c, a(c.sourceEventData)), ((c.isFollowBack && this.scribeInteraction(\"follow_back\", c, a(c.sourceEventData))));\n            }, this.handleAction = function(b, c) {\n                this.scribeInteraction(this.attr.userActionToActionMap[b.type], c, a(c));\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"dataFollowStateChange dataUserActionSuccess dataEmailFollow dataEmailUnfollow\", this.handleUserEvent), this.JSBNG__on(JSBNG__document, \"uiMentionAction uiListAction uiDmAction uiRetweetOnAction uiRetweetOffAction uiDeviceNotificationsOnAction uiDeviceNotificationsOffAction uiShowMobileNotificationsConfirm uiShowPushTweetsNotificationsConfirm uiEmailFollowAction uiEmailUnfollowAction\", this.handleAction);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), itemTypes = require(\"app/utils/scribe_item_types\"), associationTypes = require(\"app/utils/scribe_association_types\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\");\n        module.exports = defineComponent(userActionsScribe, withInteractionDataScribe);\n    });\n    define(\"app/data/item_actions_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_interaction_data_scribe\",\"app/data/with_conversation_metadata\",\"app/data/with_card_metadata\",], function(module, require, exports) {\n        function itemActionsScribe() {\n            this.handleNewerTimelineItems = function(a, b) {\n                this.scribeInteractiveResults({\n                    element: \"newer\",\n                    action: \"results\"\n                }, b.items, b);\n            }, this.handleRangeTimelineItems = function(a, b) {\n                this.scribeInteractiveResults({\n                    element: \"range\",\n                    action: \"results\"\n                }, b.items, b);\n            }, this.handleProfilePopup = function(a, b) {\n                var c = b.sourceEventData, d = ((c.isMentionClick ? \"mention_click\" : \"profile_click\"));\n                c.userId = b.user_id, ((c.interactionInsideCard ? this.scribeCardAction(d, a, c) : this.scribeInteraction(d, c)));\n            }, this.scribeItemAction = function(a, b, c) {\n                var d = this.addConversationScribeContext({\n                    action: a\n                }, c);\n                this.scribeInteraction(d, c);\n            }, this.scribeSearchTagClick = function(a, b) {\n                var c = ((((a.type == \"uiCashtagClick\")) ? \"cashtag\" : \"hashtag\"));\n                this.scribeInteraction({\n                    element: c,\n                    action: \"search\"\n                }, b);\n            }, this.scribeLinkClick = function(a, b) {\n                var c = {\n                };\n                ((b.tcoUrl && (c.message = b.tcoUrl))), ((((b.text && ((b.text.indexOf(\"pic.twitter.com\") == 0)))) && (b.url = ((\"http://\" + b.text))))), this.scribeInteraction(\"open_link\", b, c);\n            }, this.scribeCardAction = function(a, b, c) {\n                ((((c && c.tweetHasCard)) && this.scribeCardInteraction(a, c)));\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"uiHasInjectedNewTimeline\", this.handleNewerTimelineItems), this.JSBNG__on(JSBNG__document, \"uiHasInjectedRangeTimelineItems\", this.handleRangeTimelineItems), this.JSBNG__on(JSBNG__document, \"dataProfilePopupSuccess\", this.handleProfilePopup), this.JSBNG__on(JSBNG__document, \"uiItemSelected\", this.scribeItemAction.bind(this, \"select\")), this.JSBNG__on(JSBNG__document, \"uiItemDeselected\", this.scribeItemAction.bind(this, \"deselect\")), this.JSBNG__on(JSBNG__document, \"uiHashtagClick uiCashtagClick\", this.scribeSearchTagClick), this.JSBNG__on(JSBNG__document, \"uiItemLinkClick\", this.scribeLinkClick), this.JSBNG__on(JSBNG__document, \"uiCardInteractionLinkClick\", this.scribeCardAction.bind(this, \"click\")), this.JSBNG__on(JSBNG__document, \"uiCardExternalLinkClick\", this.scribeCardAction.bind(this, \"open_link\")), this.JSBNG__on(JSBNG__document, \"uiItemSelected\", this.scribeCardAction.bind(this, \"show\")), this.JSBNG__on(JSBNG__document, \"uiItemDeselected\", this.scribeCardAction.bind(this, \"hide\")), this.JSBNG__on(JSBNG__document, \"uiMapShow\", this.scribeItemAction.bind(this, \"show\")), this.JSBNG__on(JSBNG__document, \"uiMapClick\", this.scribeItemAction.bind(this, \"click\")), this.JSBNG__on(JSBNG__document, \"uiShareViaEmailDialogOpened\", this.scribeItemAction.bind(this, \"open\"));\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\"), withConversationMetadata = require(\"app/data/with_conversation_metadata\"), withCardMetadata = require(\"app/data/with_card_metadata\");\n        module.exports = defineComponent(itemActionsScribe, withInteractionDataScribe, withConversationMetadata, withCardMetadata);\n    });\n    define(\"app/utils/full_path\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function fullPath() {\n            return [JSBNG__location.pathname,JSBNG__location.search,].join(\"\");\n        };\n    ;\n        module.exports = fullPath;\n    });\n    define(\"app/data/navigation_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/client_event\",\"app/data/with_scribe\",\"app/utils/full_path\",], function(module, require, exports) {\n        function navigationScribe() {\n            this.scribeNav = function(a, b) {\n                this.scribe(\"JSBNG__navigate\", b, {\n                    url: b.url\n                });\n            }, this.scribeCachedImpression = function(a, b) {\n                ((b.fromCache && this.scribe(\"impression\")));\n            }, this.after(\"initialize\", function() {\n                clientEvent.internalReferer = fullPath(), this.JSBNG__on(\"uiNavigationLinkClick\", this.scribeNav), this.JSBNG__on(\"uiPageChanged\", this.scribeCachedImpression);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), clientEvent = require(\"app/data/client_event\"), withScribe = require(\"app/data/with_scribe\"), fullPath = require(\"app/utils/full_path\");\n        module.exports = defineComponent(navigationScribe, withScribe);\n    });\n    define(\"app/data/simple_event_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n        function simpleEventScribe() {\n            this.defaultAttrs({\n                eventToActionMap: {\n                    uiEnableEmailFollowAction: {\n                        action: \"enable\"\n                    },\n                    uiDisableEmailFollowAction: {\n                        action: \"disable\"\n                    }\n                }\n            }), this.scribeSimpleEvent = function(a, b) {\n                this.scribe(this.attr.eventToActionMap[a.type], b);\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiEnableEmailFollowAction\", this.scribeSimpleEvent), this.JSBNG__on(\"uiDisableEmailFollowAction\", this.scribeSimpleEvent);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n        module.exports = defineComponent(simpleEventScribe, withScribe);\n    });\n    define(\"app/boot/scribing\", [\"module\",\"require\",\"exports\",\"app/data/scribe_transport\",\"app/data/scribe_monitor\",\"app/data/client_event\",\"app/data/ddg\",\"app/data/tweet_actions_scribe\",\"app/data/user_actions_scribe\",\"app/data/item_actions_scribe\",\"app/data/navigation_scribe\",\"app/data/simple_event_scribe\",], function(module, require, exports) {\n        function initialize(a) {\n            var b = {\n                useAjax: !0,\n                bufferEvents: ((((((a.environment != \"development\")) && ((a.environment != \"staging\")))) && !a.preflight)),\n                flushOnUnload: ((a.environment != \"selenium\")),\n                bufferSize: ((((a.environment == \"selenium\")) ? ((1000 * a.scribeBufferSize)) : a.scribeBufferSize)),\n                debug: !!a.debugAllowed,\n                requestParameters: a.scribeParameters\n            };\n            scribeTransport.updateOptions(b), scribeTransport.registerEventHandlers(), clientEvent.scribeContext = {\n                client: \"web\",\n                page: a.pageName,\n                section: a.sectionName\n            }, clientEvent.scribeData = {\n                internal_referer: ((clientEvent.internalReferer || a.internalReferer)),\n                client_version: ((a.macawSwift ? \"macaw-swift\" : \"swift\"))\n            }, delete clientEvent.internalReferer, ((a.loggedIn || (clientEvent.scribeData.user_id = 0))), ddg.experiments = a.experiments, ((((((((a.environment != \"production\")) || a.preflight)) || a.scribesForScribeConsole)) && ScribeMonitor.attachTo(JSBNG__document, {\n                scribesForScribeConsole: a.scribesForScribeConsole\n            }))), TweetActionsScribe.attachTo(JSBNG__document, a), UserActionsScribe.attachTo(JSBNG__document, a), ItemActionsScribe.attachTo(JSBNG__document, a), NavigationScribe.attachTo(JSBNG__document, a), SimpleEventScribe.attachTo(JSBNG__document, a);\n        };\n    ;\n        var scribeTransport = require(\"app/data/scribe_transport\"), ScribeMonitor = require(\"app/data/scribe_monitor\"), clientEvent = require(\"app/data/client_event\"), ddg = require(\"app/data/ddg\"), TweetActionsScribe = require(\"app/data/tweet_actions_scribe\"), UserActionsScribe = require(\"app/data/user_actions_scribe\"), ItemActionsScribe = require(\"app/data/item_actions_scribe\"), NavigationScribe = require(\"app/data/navigation_scribe\"), SimpleEventScribe = require(\"app/data/simple_event_scribe\");\n        module.exports = initialize;\n    });\n    define(\"app/ui/navigation\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/full_path\",], function(module, require, exports) {\n        function navigation() {\n            this.defaultAttrs({\n                spinnerContainer: \"body\",\n                pushStateSelector: \"a.js-nav\",\n                pageContainer: \"#page-container\",\n                docContainer: \"#doc\",\n                globalHeadingSelector: \".global-nav h1\",\n                spinnerClass: \"pushing-state\",\n                spinnerSelector: \".pushstate-spinner\",\n                baseFoucClass: \"swift-loading\"\n            }), this.JSBNG__navigate = function(a) {\n                var b, c;\n                if (((((((a.shiftKey || a.ctrlKey)) || a.metaKey)) || ((((a.which != undefined)) && ((a.which > 1))))))) {\n                    return;\n                }\n            ;\n            ;\n                b = $(a.target), c = b.closest(this.attr.pushStateSelector), ((((c.length && !a.isDefaultPrevented())) && (this.trigger(c, \"uiNavigate\", {\n                    href: c.attr(\"href\")\n                }), a.preventDefault(), a.stopImmediatePropagation())));\n            }, this.updatePage = function(a, b, c) {\n                this.hideSpinner(), this.trigger(\"uiBeforePageChanged\", b), this.trigger(\"uiTeardown\", b), $(\"html\").attr(\"class\", ((((b.init_data.htmlClassNames + \" \")) + b.init_data.htmlFoucClassNames))), $(\"body\").attr(\"class\", b.body_class_names), this.select(\"docContainer\").attr(\"class\", b.doc_class_names), this.select(\"pageContainer\").attr(\"class\", b.page_container_class_names);\n                var d = ((((b.banners && !b.fromCache)) ? ((b.banners + b.page)) : b.page));\n                this.$node.JSBNG__find(b.init_data.viewContainer).html(d), ((b.isPopState || $(window).scrollTop(0))), using(b.module, function(a) {\n                    a(b.init_data), $(\"html\").removeClass(this.attr.baseFoucClass), this.trigger(\"uiPageChanged\", b);\n                }.bind(this));\n            }, this.showSpinner = function(a, b) {\n                this.select(\"spinnerContainer\").addClass(this.attr.spinnerClass);\n            }, this.hideSpinner = function(a, b) {\n                this.select(\"spinnerContainer\").removeClass(this.attr.spinnerClass);\n            }, this.addSpinner = function() {\n                ((this.select(\"spinnerSelector\").length || $(\"\\u003Cdiv class=\\\"pushstate-spinner\\\"\\u003E\\u003C/div\\u003E\").insertAfter(this.select(\"globalHeadingSelector\"))));\n            }, this.onPopState = function(a) {\n                ((a.originalEvent.state && (((isSafari && (JSBNG__document.body.style.display = \"none\", JSBNG__document.body.offsetHeight, JSBNG__document.body.style.display = \"block\"))), this.trigger(\"uiNavigate\", {\n                    isPopState: !0,\n                    href: fullPath()\n                }))));\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", this.JSBNG__navigate), this.JSBNG__on(window, \"popstate\", this.onPopState), this.JSBNG__on(\"uiSwiftLoaded\", this.addSpinner), this.JSBNG__on(\"dataPageRefresh\", this.updatePage), this.JSBNG__on(\"dataPageFetch\", this.showSpinner);\n            });\n        };\n    ;\n        var component = require(\"core/component\"), fullPath = require(\"app/utils/full_path\"), Navigation = component(navigation), isSafari = (($.browser.safari === !0));\n        module.exports = Navigation;\n    });\n    provide(\"app/utils/time\", function(a) {\n        function b(a) {\n            this.ms = a;\n        };\n    ;\n        function c(a) {\n            var c = {\n                seconds: new b(((a * 1000))),\n                minutes: new b(((((a * 1000)) * 60))),\n                hours: new b(((((((a * 1000)) * 60)) * 60))),\n                days: new b(((((((((a * 1000)) * 60)) * 60)) * 24)))\n            };\n            return c.second = c.seconds, c.minute = c.minutes, c.hour = c.hours, c.day = c.days, c;\n        };\n    ;\n        c.now = function() {\n            return (new JSBNG__Date).getTime();\n        }, b.prototype.fromNow = function() {\n            return new JSBNG__Date(((c.now() + this.ms)));\n        }, b.prototype.ago = function() {\n            return new JSBNG__Date(((c.now() - this.ms)));\n        }, b.prototype.getTime = b.prototype.valueOf = function() {\n            return this.ms;\n        }, a(c);\n    });\n    define(\"app/utils/storage/core\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/advice\",], function(module, require, exports) {\n        function JSBNG__localStorage() {\n            this.initialize = function(a) {\n                this.namespace = a, this.prefix = [\"__\",this.namespace,\"__:\",].join(\"\"), this.matcher = new RegExp(((\"^\" + this.prefix)));\n            }, this.getItem = function(a) {\n                return this.decode(window.JSBNG__localStorage.getItem(((this.prefix + a))));\n            }, this.setItem = function(a, b) {\n                try {\n                    return window.JSBNG__localStorage.setItem(((this.prefix + a)), this.encode(b));\n                } catch (c) {\n                    return ((((window.DEBUG && window.DEBUG.enabled)) && JSBNG__console.error(c))), undefined;\n                };\n            ;\n            }, this.removeItem = function(a) {\n                return window.JSBNG__localStorage.removeItem(((this.prefix + a)));\n            }, this.keys = function() {\n                var a = [];\n                for (var b = 0, c = window.JSBNG__localStorage.length, d; ((b < c)); b++) {\n                    d = window.JSBNG__localStorage.key(b), ((d.match(this.matcher) && a.push(d.replace(this.matcher, \"\"))));\n                ;\n                };\n            ;\n                return a;\n            }, this.clear = function() {\n                this.keys().forEach(function(a) {\n                    this.removeItem(a);\n                }, this);\n            }, this.clearAll = function() {\n                window.JSBNG__localStorage.clear();\n            };\n        };\n    ;\n        function userData() {\n            function b(b, c) {\n                var d = c.xmlDocument.documentElement;\n                a[b] = {\n                };\n                while (d.firstChild) {\n                    d.removeChild(d.firstChild);\n                ;\n                };\n            ;\n                c.save(b);\n            };\n        ;\n            function c(a) {\n                return JSBNG__document.getElementById(((\"__storage_\" + a)));\n            };\n        ;\n            var a = {\n            };\n            this.initialize = function(b) {\n                this.namespace = b, (((this.dataStore = c(this.namespace)) || this.createStorageElement())), this.xmlDoc = this.dataStore.xmlDocument, this.xmlDocEl = this.xmlDoc.documentElement, a[this.namespace] = ((a[this.namespace] || {\n                }));\n            }, this.createStorageElement = function() {\n                this.dataStore = JSBNG__document.createElement(\"div\"), this.dataStore.id = ((\"__storage_\" + this.namespace)), this.dataStore.style.display = \"none\", JSBNG__document.appendChild(this.dataStore), this.dataStore.addBehavior(\"#default#userData\"), this.dataStore.load(this.namespace);\n            }, this.getNodeByKey = function(b) {\n                var c = this.xmlDocEl.childNodes, d;\n                if (d = a[this.namespace][b]) {\n                    return d;\n                }\n            ;\n            ;\n                for (var e = 0, f = c.length; ((e < f)); e++) {\n                    d = c.item(e);\n                    if (((d.getAttribute(\"key\") == b))) {\n                        return a[this.namespace][b] = d, d;\n                    }\n                ;\n                ;\n                };\n            ;\n                return null;\n            }, this.getItem = function(a) {\n                var b = this.getNodeByKey(a), c = null;\n                return ((b && (c = b.getAttribute(\"value\")))), this.decode(c);\n            }, this.setItem = function(b, c) {\n                var d = this.getNodeByKey(b);\n                return ((d ? d.setAttribute(\"value\", this.encode(c)) : (d = this.xmlDoc.createNode(1, \"item\", \"\"), d.setAttribute(\"key\", b), d.setAttribute(\"value\", this.encode(c)), this.xmlDocEl.appendChild(d), a[this.namespace][b] = d))), this.dataStore.save(this.namespace), c;\n            }, this.removeItem = function(b) {\n                var c = this.getNodeByKey(b);\n                ((c && (this.xmlDocEl.removeChild(c), delete a[this.namespace][b]))), this.dataStore.save(this.namespace);\n            }, this.keys = function() {\n                var a = this.xmlDocEl.childNodes.length, b = [];\n                for (var c = 0; ((c < a)); c++) {\n                    b.push(this.xmlDocEl.childNodes[c].getAttribute(\"key\"));\n                ;\n                };\n            ;\n                return b;\n            }, this.clear = function() {\n                b(this.namespace, this.dataStore);\n            }, this.clearAll = function() {\n                {\n                    var fin50keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin50i = (0);\n                    var d;\n                    for (; (fin50i < fin50keys.length); (fin50i++)) {\n                        ((d) = (fin50keys[fin50i]));\n                        {\n                            b(d, c(d)), a[d] = {\n                            };\n                        ;\n                        };\n                    };\n                };\n            ;\n            };\n        };\n    ;\n        function noStorage() {\n            this.initialize = $.noop, this.getNodeByKey = function(a) {\n                return null;\n            }, this.getItem = function(a) {\n                return null;\n            }, this.setItem = function(a, b) {\n                return b;\n            }, this.removeItem = function(a) {\n                return null;\n            }, this.keys = function() {\n                return [];\n            }, this.clear = $.noop, this.clearAll = $.noop;\n        };\n    ;\n        function memory() {\n            this.initialize = function(a) {\n                this.namespace = a, ((memoryStore[this.namespace] || (memoryStore[this.namespace] = {\n                }))), this.store = memoryStore[this.namespace];\n            }, this.getItem = function(a) {\n                return ((this.store[a] ? this.decode(this.store[a]) : undefined));\n            }, this.setItem = function(a, b) {\n                return this.store[a] = this.encode(b);\n            }, this.removeItem = function(a) {\n                delete this.store[a];\n            }, this.keys = function() {\n                return Object.keys(this.store);\n            }, this.clear = function() {\n                this.store = memoryStore[this.namespace] = {\n                };\n            }, this.clearAll = function() {\n                memoryStore = {\n                };\n            };\n        };\n    ;\n        function browserStore() {\n            ((supportsLocalStorage() ? JSBNG__localStorage.call(this) : ((JSBNG__document.documentElement.addBehavior ? noStorage.call(this) : memory.call(this)))));\n        };\n    ;\n        function supportsLocalStorage() {\n            if (((doesLocalStorage === undefined))) {\n                try {\n                    window.JSBNG__localStorage.setItem(\"~~~~\", 1), window.JSBNG__localStorage.removeItem(\"~~~~\"), doesLocalStorage = !0;\n                } catch (a) {\n                    doesLocalStorage = !1;\n                };\n            }\n        ;\n        ;\n            return doesLocalStorage;\n        };\n    ;\n        function encoding() {\n            this.encode = function(a) {\n                return ((((a === undefined)) && (a = null))), JSON.stringify(a);\n            }, this.decode = function(a) {\n                return JSON.parse(a);\n            };\n        };\n    ;\n        function CoreStorage() {\n            ((arguments.length && this.initialize.apply(this, arguments)));\n        };\n    ;\n        var compose = require(\"core/compose\"), advice = require(\"core/advice\"), memoryStore = {\n        }, doesLocalStorage;\n        compose.mixin(CoreStorage.prototype, [encoding,browserStore,advice.withAdvice,]), CoreStorage.clearAll = CoreStorage.prototype.clearAll, module.exports = CoreStorage;\n    });\n    define(\"app/data/notifications\", [\"module\",\"require\",\"exports\",\"core/clock\",\"app/utils/storage/core\",\"app/utils/time\",], function(module, require, exports) {\n        function JSBNG__Notification(a, b, c, d) {\n            this.key = b, this.timestamp = 0, this.active = a, this.seenFirstResponse = !1, this.pollEvent = c, this.paramAdder = d;\n        };\n    ;\n        function Notifications() {\n            this.entries = [];\n        };\n    ;\n        var clock = require(\"core/clock\"), JSBNG__Storage = require(\"app/utils/storage/core\"), time = require(\"app/utils/time\"), pollDelay = 20000, storage = new JSBNG__Storage(\"DM\"), filteredEndpoints = [\"/i/users/recommendations\",\"/i/timeline\",\"/i/profiles/show\",\"/messages\",];\n        JSBNG__Notification.prototype = {\n            reset: function() {\n                this.timestamp = time.now();\n            },\n            isResponseValid: function(a) {\n                return ((((((((((this.active && a)) && a[this.key])) && a.notCached)) && ((a[this.key].JSBNG__status == \"ok\")))) && ((a[this.key].response !== null))));\n            },\n            update: function(a) {\n                ((this.isResponseValid(a) ? this.reset() : ((((!this.seenFirstResponse && this.pollEvent)) && $(JSBNG__document).trigger(this.pollEvent))))), this.seenFirstResponse = !0;\n            },\n            shouldPoll: function() {\n                return ((((time.now() - this.timestamp)) > pollDelay));\n            },\n            addParam: function(a) {\n                this.paramAdder(a);\n            }\n        }, Notifications.prototype = {\n            init: function(a) {\n                this.initialized = !0, this.dm = new JSBNG__Notification(a.notifications_dm, \"d\", \"uiDMPoll\", this.addDMData), this.connect = new JSBNG__Notification(a.notifications_timeline, \"t\", null, function() {\n                \n                }), this.spoonbill = new JSBNG__Notification(a.notifications_spoonbill, \"n\", null, function() {\n                \n                }), this.entries = [this.dm,this.connect,this.spoonbill,], ((a.notifications_dm_poll_scale && (pollDelay = ((a.notifications_dm_poll_scale * 1000)))));\n            },\n            getPollDelay: function() {\n                return pollDelay;\n            },\n            addDMData: function(a) {\n                a.oldest_unread_id = ((storage.getItem(\"oldestUnreadMessageId\") || 0));\n            },\n            updateNotificationState: function(a) {\n                this.entries.forEach(function(b) {\n                    b.update(a);\n                });\n            },\n            resetDMState: function(a, b) {\n                this.dm.reset();\n            },\n            shouldPoll: function() {\n                return ((this.initialized ? ((this.dm.active ? this.dm.shouldPoll() : !1)) : !1));\n            },\n            extraParameters: function(a) {\n                if (((!a || !this.shouldPoll()))) {\n                    return {\n                    };\n                }\n            ;\n            ;\n                var b = {\n                };\n                return ((filteredEndpoints.some(function(b) {\n                    return ((a.indexOf(b) == 0));\n                }) && this.entries.forEach(function(a) {\n                    a.addParam(b);\n                }))), b;\n            }\n        }, module.exports = new Notifications;\n    });\n    provide(\"app/utils/querystring\", function(a) {\n        function b(a) {\n            return encodeURIComponent(a).replace(/\\+/g, \"%2B\");\n        };\n    ;\n        function c(a) {\n            return decodeURIComponent(a.replace(/\\+/g, \" \"));\n        };\n    ;\n        function d(a) {\n            var c = [];\n            {\n                var fin51keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin51i = (0);\n                var d;\n                for (; (fin51i < fin51keys.length); (fin51i++)) {\n                    ((d) = (fin51keys[fin51i]));\n                    {\n                        ((((((a[d] !== null)) && ((typeof a[d] != \"undefined\")))) && c.push(((((b(d) + \"=\")) + b(a[d]))))));\n                    ;\n                    };\n                };\n            };\n        ;\n            return c.sort().join(\"&\");\n        };\n    ;\n        function e(a) {\n            var b = {\n            }, d, e, f, g;\n            if (a) {\n                d = a.split(\"&\");\n                for (g = 0; f = d[g]; g++) {\n                    e = f.split(\"=\"), ((((e.length == 2)) && (b[c(e[0])] = c(e[1]))));\n                ;\n                };\n            ;\n            }\n        ;\n        ;\n            return b;\n        };\n    ;\n        a({\n            decode: e,\n            encode: d,\n            encodePart: b,\n            decodePart: c\n        });\n    });\n    define(\"app/utils/params\", [\"module\",\"require\",\"exports\",\"app/utils/querystring\",], function(module, require, exports) {\n        var qs = require(\"app/utils/querystring\"), fromQuery = function(a) {\n            var b = a.search.substr(1);\n            return qs.decode(b);\n        }, fromFragment = function(a) {\n            var b = a.href, c = b.indexOf(\"#\"), d = ((((c < 0)) ? \"\" : b.substring(((c + 1)))));\n            return qs.decode(d);\n        }, combined = function(a) {\n            var b = {\n            }, c = fromQuery(a), d = fromFragment(a);\n            {\n                var fin52keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin52i = (0);\n                var e;\n                for (; (fin52i < fin52keys.length); (fin52i++)) {\n                    ((e) = (fin52keys[fin52i]));\n                    {\n                        ((c.hasOwnProperty(e) && (b[e] = c[e])));\n                    ;\n                    };\n                };\n            };\n        ;\n            {\n                var fin53keys = ((window.top.JSBNG_Replay.forInKeys)((d))), fin53i = (0);\n                var e;\n                for (; (fin53i < fin53keys.length); (fin53i++)) {\n                    ((e) = (fin53keys[fin53i]));\n                    {\n                        ((d.hasOwnProperty(e) && (b[e] = d[e])));\n                    ;\n                    };\n                };\n            };\n        ;\n            return b;\n        };\n        module.exports = {\n            combined: combined,\n            fromQuery: fromQuery,\n            fromFragment: fromFragment\n        };\n    });\n    define(\"app/data/with_auth_token\", [\"module\",\"require\",\"exports\",\"app/utils/auth_token\",\"core/utils\",], function(module, require, exports) {\n        function withAuthToken() {\n            this.addAuthToken = function(b) {\n                if (!authToken.get()) {\n                    throw \"addAuthToken requires a formAuthenticityToken\";\n                }\n            ;\n            ;\n                return b = ((b || {\n                })), utils.merge(b, {\n                    authenticity_token: authToken.get()\n                });\n            }, this.addPHXAuthToken = function(b) {\n                if (!authToken.get()) {\n                    throw \"addPHXAuthToken requires a formAuthenticityToken\";\n                }\n            ;\n            ;\n                return b = ((b || {\n                })), utils.merge(b, {\n                    post_authenticity_token: authToken.get()\n                });\n            }, this.getAuthToken = function() {\n                return this.attr.formAuthenticityToken;\n            };\n        };\n    ;\n        var authToken = require(\"app/utils/auth_token\"), utils = require(\"core/utils\");\n        module.exports = withAuthToken;\n    });\n    deferred(\"$lib/gibberish-aes.js\", function() {\n        (function(a) {\n            var b = function() {\n                var a = 14, c = 8, d = !1, e = function(a) {\n                    try {\n                        return unescape(encodeURIComponent(a));\n                    } catch (b) {\n                        throw \"Error on UTF-8 encode\";\n                    };\n                ;\n                }, f = function(a) {\n                    try {\n                        return decodeURIComponent(escape(a));\n                    } catch (b) {\n                        throw \"Bad Key\";\n                    };\n                ;\n                }, g = function(a) {\n                    var b = [], c, d;\n                    ((((a.length < 16)) && (c = ((16 - a.length)), b = [c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,])));\n                    for (d = 0; ((d < a.length)); d++) {\n                        b[d] = a[d];\n                    ;\n                    };\n                ;\n                    return b;\n                }, h = function(a, b) {\n                    var c = \"\", d, e;\n                    if (b) {\n                        d = a[15];\n                        if (((d > 16))) {\n                            throw \"Decryption error: Maybe bad key\";\n                        }\n                    ;\n                    ;\n                        if (((d == 16))) {\n                            return \"\";\n                        }\n                    ;\n                    ;\n                        for (e = 0; ((e < ((16 - d)))); e++) {\n                            c += String.fromCharCode(a[e]);\n                        ;\n                        };\n                    ;\n                    }\n                     else for (e = 0; ((e < 16)); e++) {\n                        c += String.fromCharCode(a[e]);\n                    ;\n                    }\n                ;\n                ;\n                    return c;\n                }, i = function(a) {\n                    var b = \"\", c;\n                    for (c = 0; ((c < a.length)); c++) {\n                        b += ((((((a[c] < 16)) ? \"0\" : \"\")) + a[c].toString(16)));\n                    ;\n                    };\n                ;\n                    return b;\n                }, j = function(a) {\n                    var b = [];\n                    return a.replace(/(..)/g, function(a) {\n                        b.push(parseInt(a, 16));\n                    }), b;\n                }, k = function(a) {\n                    a = e(a);\n                    var b = [], c;\n                    for (c = 0; ((c < a.length)); c++) {\n                        b[c] = a.charCodeAt(c);\n                    ;\n                    };\n                ;\n                    return b;\n                }, l = function(b) {\n                    switch (b) {\n                      case 128:\n                        a = 10, c = 4;\n                        break;\n                      case 192:\n                        a = 12, c = 6;\n                        break;\n                      case 256:\n                        a = 14, c = 8;\n                        break;\n                      default:\n                        throw ((\"Invalid Key Size Specified:\" + b));\n                    };\n                ;\n                }, m = function(a) {\n                    var b = [], c;\n                    for (c = 0; ((c < a)); c++) {\n                        b = b.concat(Math.floor(((Math.JSBNG__random() * 256))));\n                    ;\n                    };\n                ;\n                    return b;\n                }, n = function(d, e) {\n                    var f = ((((a >= 12)) ? 3 : 2)), g = [], h = [], i = [], j = [], k = d.concat(e), l;\n                    i[0] = b.Hash.MD5(k), j = i[0];\n                    for (l = 1; ((l < f)); l++) {\n                        i[l] = b.Hash.MD5(i[((l - 1))].concat(k)), j = j.concat(i[l]);\n                    ;\n                    };\n                ;\n                    return g = j.slice(0, ((4 * c))), h = j.slice(((4 * c)), ((((4 * c)) + 16))), {\n                        key: g,\n                        iv: h\n                    };\n                }, o = function(a, b, c) {\n                    b = x(b);\n                    var d = Math.ceil(((a.length / 16))), e = [], f, h = [];\n                    for (f = 0; ((f < d)); f++) {\n                        e[f] = g(a.slice(((f * 16)), ((((f * 16)) + 16))));\n                    ;\n                    };\n                ;\n                    ((((((a.length % 16)) === 0)) && (e.push([16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,]), d++)));\n                    for (f = 0; ((f < e.length)); f++) {\n                        e[f] = ((((f === 0)) ? w(e[f], c) : w(e[f], h[((f - 1))]))), h[f] = q(e[f], b);\n                    ;\n                    };\n                ;\n                    return h;\n                }, p = function(a, b, c, d) {\n                    b = x(b);\n                    var e = ((a.length / 16)), g = [], i, j = [], k = \"\";\n                    for (i = 0; ((i < e)); i++) {\n                        g.push(a.slice(((i * 16)), ((((i + 1)) * 16))));\n                    ;\n                    };\n                ;\n                    for (i = ((g.length - 1)); ((i >= 0)); i--) {\n                        j[i] = r(g[i], b), j[i] = ((((i === 0)) ? w(j[i], c) : w(j[i], g[((i - 1))])));\n                    ;\n                    };\n                ;\n                    for (i = 0; ((i < ((e - 1)))); i++) {\n                        k += h(j[i]);\n                    ;\n                    };\n                ;\n                    return k += h(j[i], !0), ((d ? k : f(k)));\n                }, q = function(b, c) {\n                    d = !1;\n                    var e = v(b, c, 0), f;\n                    for (f = 1; ((f < ((a + 1)))); f++) {\n                        e = s(e), e = t(e), ((((f < a)) && (e = u(e)))), e = v(e, c, f);\n                    ;\n                    };\n                ;\n                    return e;\n                }, r = function(b, c) {\n                    d = !0;\n                    var e = v(b, c, a), f;\n                    for (f = ((a - 1)); ((f > -1)); f--) {\n                        e = t(e), e = s(e), e = v(e, c, f), ((((f > 0)) && (e = u(e))));\n                    ;\n                    };\n                ;\n                    return e;\n                }, s = function(a) {\n                    var b = ((d ? B : A)), c = [], e;\n                    for (e = 0; ((e < 16)); e++) {\n                        c[e] = b[a[e]];\n                    ;\n                    };\n                ;\n                    return c;\n                }, t = function(a) {\n                    var b = [], c = ((d ? [0,13,10,7,4,1,14,11,8,5,2,15,12,9,6,3,] : [0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11,])), e;\n                    for (e = 0; ((e < 16)); e++) {\n                        b[e] = a[c[e]];\n                    ;\n                    };\n                ;\n                    return b;\n                }, u = function(a) {\n                    var b = [], c;\n                    if (!d) {\n                        for (c = 0; ((c < 4)); c++) {\n                            b[((c * 4))] = ((((((D[a[((c * 4))]] ^ E[a[((1 + ((c * 4))))]])) ^ a[((2 + ((c * 4))))])) ^ a[((3 + ((c * 4))))])), b[((1 + ((c * 4))))] = ((((((a[((c * 4))] ^ D[a[((1 + ((c * 4))))]])) ^ E[a[((2 + ((c * 4))))]])) ^ a[((3 + ((c * 4))))])), b[((2 + ((c * 4))))] = ((((((a[((c * 4))] ^ a[((1 + ((c * 4))))])) ^ D[a[((2 + ((c * 4))))]])) ^ E[a[((3 + ((c * 4))))]])), b[((3 + ((c * 4))))] = ((((((E[a[((c * 4))]] ^ a[((1 + ((c * 4))))])) ^ a[((2 + ((c * 4))))])) ^ D[a[((3 + ((c * 4))))]]));\n                        ;\n                        };\n                    }\n                     else {\n                        for (c = 0; ((c < 4)); c++) {\n                            b[((c * 4))] = ((((((I[a[((c * 4))]] ^ G[a[((1 + ((c * 4))))]])) ^ H[a[((2 + ((c * 4))))]])) ^ F[a[((3 + ((c * 4))))]])), b[((1 + ((c * 4))))] = ((((((F[a[((c * 4))]] ^ I[a[((1 + ((c * 4))))]])) ^ G[a[((2 + ((c * 4))))]])) ^ H[a[((3 + ((c * 4))))]])), b[((2 + ((c * 4))))] = ((((((H[a[((c * 4))]] ^ F[a[((1 + ((c * 4))))]])) ^ I[a[((2 + ((c * 4))))]])) ^ G[a[((3 + ((c * 4))))]])), b[((3 + ((c * 4))))] = ((((((G[a[((c * 4))]] ^ H[a[((1 + ((c * 4))))]])) ^ F[a[((2 + ((c * 4))))]])) ^ I[a[((3 + ((c * 4))))]]));\n                        ;\n                        };\n                    }\n                ;\n                ;\n                    return b;\n                }, v = function(a, b, c) {\n                    var d = [], e;\n                    for (e = 0; ((e < 16)); e++) {\n                        d[e] = ((a[e] ^ b[c][e]));\n                    ;\n                    };\n                ;\n                    return d;\n                }, w = function(a, b) {\n                    var c = [], d;\n                    for (d = 0; ((d < 16)); d++) {\n                        c[d] = ((a[d] ^ b[d]));\n                    ;\n                    };\n                ;\n                    return c;\n                }, x = function(b) {\n                    var d = [], e = [], f, g, h, i = [], j;\n                    for (f = 0; ((f < c)); f++) {\n                        g = [b[((4 * f))],b[((((4 * f)) + 1))],b[((((4 * f)) + 2))],b[((((4 * f)) + 3))],], d[f] = g;\n                    ;\n                    };\n                ;\n                    for (f = c; ((f < ((4 * ((a + 1)))))); f++) {\n                        d[f] = [];\n                        for (h = 0; ((h < 4)); h++) {\n                            e[h] = d[((f - 1))][h];\n                        ;\n                        };\n                    ;\n                        ((((((f % c)) === 0)) ? (e = y(z(e)), e[0] ^= C[((((f / c)) - 1))]) : ((((((c > 6)) && ((((f % c)) == 4)))) && (e = y(e))))));\n                        for (h = 0; ((h < 4)); h++) {\n                            d[f][h] = ((d[((f - c))][h] ^ e[h]));\n                        ;\n                        };\n                    ;\n                    };\n                ;\n                    for (f = 0; ((f < ((a + 1)))); f++) {\n                        i[f] = [];\n                        for (j = 0; ((j < 4)); j++) {\n                            i[f].push(d[((((f * 4)) + j))][0], d[((((f * 4)) + j))][1], d[((((f * 4)) + j))][2], d[((((f * 4)) + j))][3]);\n                        ;\n                        };\n                    ;\n                    };\n                ;\n                    return i;\n                }, y = function(a) {\n                    for (var b = 0; ((b < 4)); b++) {\n                        a[b] = A[a[b]];\n                    ;\n                    };\n                ;\n                    return a;\n                }, z = function(a) {\n                    var b = a[0], c;\n                    for (c = 0; ((c < 4)); c++) {\n                        a[c] = a[((c + 1))];\n                    ;\n                    };\n                ;\n                    return a[3] = b, a;\n                }, A = [99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22,], B = [82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125,], C = [1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,], D = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,27,25,31,29,19,17,23,21,11,9,15,13,3,1,7,5,59,57,63,61,51,49,55,53,43,41,47,45,35,33,39,37,91,89,95,93,83,81,87,85,75,73,79,77,67,65,71,69,123,121,127,125,115,113,119,117,107,105,111,109,99,97,103,101,155,153,159,157,147,145,151,149,139,137,143,141,131,129,135,133,187,185,191,189,179,177,183,181,171,169,175,173,163,161,167,165,219,217,223,221,211,209,215,213,203,201,207,205,195,193,199,197,251,249,255,253,243,241,247,245,235,233,239,237,227,225,231,229,], E = [0,3,6,5,12,15,10,9,24,27,30,29,20,23,18,17,48,51,54,53,60,63,58,57,40,43,46,45,36,39,34,33,96,99,102,101,108,111,106,105,120,123,126,125,116,119,114,113,80,83,86,85,92,95,90,89,72,75,78,77,68,71,66,65,192,195,198,197,204,207,202,201,216,219,222,221,212,215,210,209,240,243,246,245,252,255,250,249,232,235,238,237,228,231,226,225,160,163,166,165,172,175,170,169,184,187,190,189,180,183,178,177,144,147,150,149,156,159,154,153,136,139,142,141,132,135,130,129,155,152,157,158,151,148,145,146,131,128,133,134,143,140,137,138,171,168,173,174,167,164,161,162,179,176,181,182,191,188,185,186,251,248,253,254,247,244,241,242,227,224,229,230,239,236,233,234,203,200,205,206,199,196,193,194,211,208,213,214,223,220,217,218,91,88,93,94,87,84,81,82,67,64,69,70,79,76,73,74,107,104,109,110,103,100,97,98,115,112,117,118,127,124,121,122,59,56,61,62,55,52,49,50,35,32,37,38,47,44,41,42,11,8,13,14,7,4,1,2,19,16,21,22,31,28,25,26,], F = [0,9,18,27,36,45,54,63,72,65,90,83,108,101,126,119,144,153,130,139,180,189,166,175,216,209,202,195,252,245,238,231,59,50,41,32,31,22,13,4,115,122,97,104,87,94,69,76,171,162,185,176,143,134,157,148,227,234,241,248,199,206,213,220,118,127,100,109,82,91,64,73,62,55,44,37,26,19,8,1,230,239,244,253,194,203,208,217,174,167,188,181,138,131,152,145,77,68,95,86,105,96,123,114,5,12,23,30,33,40,51,58,221,212,207,198,249,240,235,226,149,156,135,142,177,184,163,170,236,229,254,247,200,193,218,211,164,173,182,191,128,137,146,155,124,117,110,103,88,81,74,67,52,61,38,47,16,25,2,11,215,222,197,204,243,250,225,232,159,150,141,132,187,178,169,160,71,78,85,92,99,106,113,120,15,6,29,20,43,34,57,48,154,147,136,129,190,183,172,165,210,219,192,201,246,255,228,237,10,3,24,17,46,39,60,53,66,75,80,89,102,111,116,125,161,168,179,186,133,140,151,158,233,224,251,242,205,196,223,214,49,56,35,42,21,28,7,14,121,112,107,98,93,84,79,70,], G = [0,11,22,29,44,39,58,49,88,83,78,69,116,127,98,105,176,187,166,173,156,151,138,129,232,227,254,245,196,207,210,217,123,112,109,102,87,92,65,74,35,40,53,62,15,4,25,18,203,192,221,214,231,236,241,250,147,152,133,142,191,180,169,162,246,253,224,235,218,209,204,199,174,165,184,179,130,137,148,159,70,77,80,91,106,97,124,119,30,21,8,3,50,57,36,47,141,134,155,144,161,170,183,188,213,222,195,200,249,242,239,228,61,54,43,32,17,26,7,12,101,110,115,120,73,66,95,84,247,252,225,234,219,208,205,198,175,164,185,178,131,136,149,158,71,76,81,90,107,96,125,118,31,20,9,2,51,56,37,46,140,135,154,145,160,171,182,189,212,223,194,201,248,243,238,229,60,55,42,33,16,27,6,13,100,111,114,121,72,67,94,85,1,10,23,28,45,38,59,48,89,82,79,68,117,126,99,104,177,186,167,172,157,150,139,128,233,226,255,244,197,206,211,216,122,113,108,103,86,93,64,75,34,41,52,63,14,5,24,19,202,193,220,215,230,237,240,251,146,153,132,143,190,181,168,163,], H = [0,13,26,23,52,57,46,35,104,101,114,127,92,81,70,75,208,221,202,199,228,233,254,243,184,181,162,175,140,129,150,155,187,182,161,172,143,130,149,152,211,222,201,196,231,234,253,240,107,102,113,124,95,82,69,72,3,14,25,20,55,58,45,32,109,96,119,122,89,84,67,78,5,8,31,18,49,60,43,38,189,176,167,170,137,132,147,158,213,216,207,194,225,236,251,246,214,219,204,193,226,239,248,245,190,179,164,169,138,135,144,157,6,11,28,17,50,63,40,37,110,99,116,121,90,87,64,77,218,215,192,205,238,227,244,249,178,191,168,165,134,139,156,145,10,7,16,29,62,51,36,41,98,111,120,117,86,91,76,65,97,108,123,118,85,88,79,66,9,4,19,30,61,48,39,42,177,188,171,166,133,136,159,146,217,212,195,206,237,224,247,250,183,186,173,160,131,142,153,148,223,210,197,200,235,230,241,252,103,106,125,112,83,94,73,68,15,2,21,24,59,54,33,44,12,1,22,27,56,53,34,47,100,105,126,115,80,93,74,71,220,209,198,203,232,229,242,255,180,185,174,163,128,141,154,151,], I = [0,14,28,18,56,54,36,42,112,126,108,98,72,70,84,90,224,238,252,242,216,214,196,202,144,158,140,130,168,166,180,186,219,213,199,201,227,237,255,241,171,165,183,185,147,157,143,129,59,53,39,41,3,13,31,17,75,69,87,89,115,125,111,97,173,163,177,191,149,155,137,135,221,211,193,207,229,235,249,247,77,67,81,95,117,123,105,103,61,51,33,47,5,11,25,23,118,120,106,100,78,64,82,92,6,8,26,20,62,48,34,44,150,152,138,132,174,160,178,188,230,232,250,244,222,208,194,204,65,79,93,83,121,119,101,107,49,63,45,35,9,7,21,27,161,175,189,179,153,151,133,139,209,223,205,195,233,231,245,251,154,148,134,136,162,172,190,176,234,228,246,248,210,220,206,192,122,116,102,104,66,76,94,80,10,4,22,24,50,60,46,32,236,226,240,254,212,218,200,198,156,146,128,142,164,170,184,182,12,2,16,30,52,58,40,38,124,114,96,110,68,74,88,86,55,57,43,37,15,1,19,29,71,73,91,85,127,113,99,109,215,217,203,197,239,225,243,253,167,169,187,181,159,145,131,141,], J = function(a, b, c) {\n                    var d = m(8), e = n(k(b), d), f = e.key, g = e.iv, h, i = [[83,97,108,116,101,100,95,95,].concat(d),];\n                    return ((c || (a = k(a)))), h = o(a, f, g), h = i.concat(h), M.encode(h);\n                }, K = function(a, b, c) {\n                    var d = M.decode(a), e = d.slice(8, 16), f = n(k(b), e), g = f.key, h = f.iv;\n                    return d = d.slice(16, d.length), a = p(d, g, h, c), a;\n                }, L = function(a) {\n                    function b(a, b) {\n                        return ((((a << b)) | ((a >>> ((32 - b))))));\n                    };\n                ;\n                    function c(a, b) {\n                        var c, d, e, f, g;\n                        return e = ((a & 2147483648)), f = ((b & 2147483648)), c = ((a & 1073741824)), d = ((b & 1073741824)), g = ((((a & 1073741823)) + ((b & 1073741823)))), ((((c & d)) ? ((((((g ^ 2147483648)) ^ e)) ^ f)) : ((((c | d)) ? ((((g & 1073741824)) ? ((((((g ^ 3221225472)) ^ e)) ^ f)) : ((((((g ^ 1073741824)) ^ e)) ^ f)))) : ((((g ^ e)) ^ f))))));\n                    };\n                ;\n                    function d(a, b, c) {\n                        return ((((a & b)) | ((~a & c))));\n                    };\n                ;\n                    function e(a, b, c) {\n                        return ((((a & c)) | ((b & ~c))));\n                    };\n                ;\n                    function f(a, b, c) {\n                        return ((((a ^ b)) ^ c));\n                    };\n                ;\n                    function g(a, b, c) {\n                        return ((b ^ ((a | ~c))));\n                    };\n                ;\n                    function h(a, e, f, g, h, i, j) {\n                        return a = c(a, c(c(d(e, f, g), h), j)), c(b(a, i), e);\n                    };\n                ;\n                    function i(a, d, f, g, h, i, j) {\n                        return a = c(a, c(c(e(d, f, g), h), j)), c(b(a, i), d);\n                    };\n                ;\n                    function j(a, d, e, g, h, i, j) {\n                        return a = c(a, c(c(f(d, e, g), h), j)), c(b(a, i), d);\n                    };\n                ;\n                    function k(a, d, e, f, h, i, j) {\n                        return a = c(a, c(c(g(d, e, f), h), j)), c(b(a, i), d);\n                    };\n                ;\n                    function l(a) {\n                        var b, c = a.length, d = ((c + 8)), e = ((((d - ((d % 64)))) / 64)), f = ((((e + 1)) * 16)), g = [], h = 0, i = 0;\n                        while (((i < c))) {\n                            b = ((((i - ((i % 4)))) / 4)), h = ((((i % 4)) * 8)), g[b] = ((g[b] | ((a[i] << h)))), i++;\n                        ;\n                        };\n                    ;\n                        return b = ((((i - ((i % 4)))) / 4)), h = ((((i % 4)) * 8)), g[b] = ((g[b] | ((128 << h)))), g[((f - 2))] = ((c << 3)), g[((f - 1))] = ((c >>> 29)), g;\n                    };\n                ;\n                    function m(a) {\n                        var b, c, d = [];\n                        for (c = 0; ((c <= 3)); c++) {\n                            b = ((((a >>> ((c * 8)))) & 255)), d = d.concat(b);\n                        ;\n                        };\n                    ;\n                        return d;\n                    };\n                ;\n                    var n = [], o, p, q, r, s, t, u, v, w, x = 7, y = 12, z = 17, A = 22, B = 5, C = 9, D = 14, E = 20, F = 4, G = 11, H = 16, I = 23, J = 6, K = 10, L = 15, M = 21;\n                    n = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878;\n                    for (o = 0; ((o < n.length)); o += 16) {\n                        p = t, q = u, r = v, s = w, t = h(t, u, v, w, n[((o + 0))], x, 3614090360), w = h(w, t, u, v, n[((o + 1))], y, 3905402710), v = h(v, w, t, u, n[((o + 2))], z, 606105819), u = h(u, v, w, t, n[((o + 3))], A, 3250441966), t = h(t, u, v, w, n[((o + 4))], x, 4118548399), w = h(w, t, u, v, n[((o + 5))], y, 1200080426), v = h(v, w, t, u, n[((o + 6))], z, 2821735955), u = h(u, v, w, t, n[((o + 7))], A, 4249261313), t = h(t, u, v, w, n[((o + 8))], x, 1770035416), w = h(w, t, u, v, n[((o + 9))], y, 2336552879), v = h(v, w, t, u, n[((o + 10))], z, 4294925233), u = h(u, v, w, t, n[((o + 11))], A, 2304563134), t = h(t, u, v, w, n[((o + 12))], x, 1804603682), w = h(w, t, u, v, n[((o + 13))], y, 4254626195), v = h(v, w, t, u, n[((o + 14))], z, 2792965006), u = h(u, v, w, t, n[((o + 15))], A, 1236535329), t = i(t, u, v, w, n[((o + 1))], B, 4129170786), w = i(w, t, u, v, n[((o + 6))], C, 3225465664), v = i(v, w, t, u, n[((o + 11))], D, 643717713), u = i(u, v, w, t, n[((o + 0))], E, 3921069994), t = i(t, u, v, w, n[((o + 5))], B, 3593408605), w = i(w, t, u, v, n[((o + 10))], C, 38016083), v = i(v, w, t, u, n[((o + 15))], D, 3634488961), u = i(u, v, w, t, n[((o + 4))], E, 3889429448), t = i(t, u, v, w, n[((o + 9))], B, 568446438), w = i(w, t, u, v, n[((o + 14))], C, 3275163606), v = i(v, w, t, u, n[((o + 3))], D, 4107603335), u = i(u, v, w, t, n[((o + 8))], E, 1163531501), t = i(t, u, v, w, n[((o + 13))], B, 2850285829), w = i(w, t, u, v, n[((o + 2))], C, 4243563512), v = i(v, w, t, u, n[((o + 7))], D, 1735328473), u = i(u, v, w, t, n[((o + 12))], E, 2368359562), t = j(t, u, v, w, n[((o + 5))], F, 4294588738), w = j(w, t, u, v, n[((o + 8))], G, 2272392833), v = j(v, w, t, u, n[((o + 11))], H, 1839030562), u = j(u, v, w, t, n[((o + 14))], I, 4259657740), t = j(t, u, v, w, n[((o + 1))], F, 2763975236), w = j(w, t, u, v, n[((o + 4))], G, 1272893353), v = j(v, w, t, u, n[((o + 7))], H, 4139469664), u = j(u, v, w, t, n[((o + 10))], I, 3200236656), t = j(t, u, v, w, n[((o + 13))], F, 681279174), w = j(w, t, u, v, n[((o + 0))], G, 3936430074), v = j(v, w, t, u, n[((o + 3))], H, 3572445317), u = j(u, v, w, t, n[((o + 6))], I, 76029189), t = j(t, u, v, w, n[((o + 9))], F, 3654602809), w = j(w, t, u, v, n[((o + 12))], G, 3873151461), v = j(v, w, t, u, n[((o + 15))], H, 530742520), u = j(u, v, w, t, n[((o + 2))], I, 3299628645), t = k(t, u, v, w, n[((o + 0))], J, 4096336452), w = k(w, t, u, v, n[((o + 7))], K, 1126891415), v = k(v, w, t, u, n[((o + 14))], L, 2878612391), u = k(u, v, w, t, n[((o + 5))], M, 4237533241), t = k(t, u, v, w, n[((o + 12))], J, 1700485571), w = k(w, t, u, v, n[((o + 3))], K, 2399980690), v = k(v, w, t, u, n[((o + 10))], L, 4293915773), u = k(u, v, w, t, n[((o + 1))], M, 2240044497), t = k(t, u, v, w, n[((o + 8))], J, 1873313359), w = k(w, t, u, v, n[((o + 15))], K, 4264355552), v = k(v, w, t, u, n[((o + 6))], L, 2734768916), u = k(u, v, w, t, n[((o + 13))], M, 1309151649), t = k(t, u, v, w, n[((o + 4))], J, 4149444226), w = k(w, t, u, v, n[((o + 11))], K, 3174756917), v = k(v, w, t, u, n[((o + 2))], L, 718787259), u = k(u, v, w, t, n[((o + 9))], M, 3951481745), t = c(t, p), u = c(u, q), v = c(v, r), w = c(w, s);\n                    ;\n                    };\n                ;\n                    return m(t).concat(m(u), m(v), m(w));\n                }, M = function() {\n                    var a = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", b = a.split(\"\"), c = function(a, c) {\n                        var d = [], e = \"\", f, g;\n                        totalChunks = Math.floor(((((a.length * 16)) / 3)));\n                        for (f = 0; ((f < ((a.length * 16)))); f++) {\n                            d.push(a[Math.floor(((f / 16)))][((f % 16))]);\n                        ;\n                        };\n                    ;\n                        for (f = 0; ((f < d.length)); f += 3) {\n                            e += b[((d[f] >> 2))], e += b[((((((d[f] & 3)) << 4)) | ((d[((f + 1))] >> 4))))], ((((d[((f + 1))] !== undefined)) ? e += b[((((((d[((f + 1))] & 15)) << 2)) | ((d[((f + 2))] >> 6))))] : e += \"=\")), ((((d[((f + 2))] !== undefined)) ? e += b[((d[((f + 2))] & 63))] : e += \"=\"));\n                        ;\n                        };\n                    ;\n                        g = ((e.slice(0, 64) + \"\\u000a\"));\n                        for (f = 1; ((f < Math.ceil(((e.length / 64))))); f++) {\n                            g += ((e.slice(((f * 64)), ((((f * 64)) + 64))) + ((((Math.ceil(((e.length / 64))) == ((f + 1)))) ? \"\" : \"\\u000a\"))));\n                        ;\n                        };\n                    ;\n                        return g;\n                    }, d = function(b) {\n                        b = b.replace(/\\n/g, \"\");\n                        var c = [], d = [], e = [], f;\n                        for (f = 0; ((f < b.length)); f += 4) {\n                            d[0] = a.indexOf(b.charAt(f)), d[1] = a.indexOf(b.charAt(((f + 1)))), d[2] = a.indexOf(b.charAt(((f + 2)))), d[3] = a.indexOf(b.charAt(((f + 3)))), e[0] = ((((d[0] << 2)) | ((d[1] >> 4)))), e[1] = ((((((d[1] & 15)) << 4)) | ((d[2] >> 2)))), e[2] = ((((((d[2] & 3)) << 6)) | d[3])), c.push(e[0], e[1], e[2]);\n                        ;\n                        };\n                    ;\n                        return c = c.slice(0, ((c.length - ((c.length % 16))))), c;\n                    };\n                    return ((((typeof Array.indexOf == \"function\")) && (a = b))), {\n                        encode: c,\n                        decode: d\n                    };\n                }();\n                return {\n                    size: l,\n                    h2a: j,\n                    expandKey: x,\n                    encryptBlock: q,\n                    decryptBlock: r,\n                    Decrypt: d,\n                    s2a: k,\n                    rawEncrypt: o,\n                    dec: K,\n                    openSSLKey: n,\n                    a2h: i,\n                    enc: J,\n                    Hash: {\n                        MD5: L\n                    },\n                    Base64: M\n                };\n            }();\n            a.GibberishAES = b;\n        })(window);\n    });\n    provide(\"app/utils/crypto/aes\", function(a) {\n        using(\"$lib/gibberish-aes.js\", function() {\n            var b = GibberishAES;\n            window.GibberishAES = null, a(b);\n        });\n    });\n    define(\"app/utils/storage/with_crypto\", [\"module\",\"require\",\"exports\",\"app/utils/crypto/aes\",], function(module, require, exports) {\n        function withCrypto() {\n            this.after(\"initialize\", function(a, b) {\n                this.secret = b;\n            }), this.around(\"getItem\", function(a, b) {\n                try {\n                    return a(b);\n                } catch (c) {\n                    return this.removeItem(b), null;\n                };\n            ;\n            }), this.around(\"decode\", function(a, b) {\n                return a(aes.dec(b, this.secret));\n            }), this.around(\"encode\", function(a, b) {\n                return aes.enc(a(b), this.secret);\n            });\n        };\n    ;\n        var aes = require(\"app/utils/crypto/aes\");\n        module.exports = withCrypto;\n    });\n    define(\"app/utils/storage/with_expiry\", [\"module\",\"require\",\"exports\",\"app/utils/storage/core\",], function(module, require, exports) {\n        function withExpiry() {\n            this.now = function() {\n                return (new JSBNG__Date).getTime();\n            }, this.isExpired = function(a) {\n                var b = this.ttl.getItem(a);\n                return ((((((typeof b == \"number\")) && ((this.now() > b)))) ? !0 : !1));\n            }, this.updateTTL = function(a, b) {\n                ((((typeof b == \"number\")) && this.ttl.setItem(a, ((this.now() + b)))));\n            }, this.getCacheAge = function(a, b) {\n                var c = this.ttl.getItem(a);\n                if (((c == null))) {\n                    return -1;\n                }\n            ;\n            ;\n                var d = ((c - b)), e = ((this.now() - d));\n                return ((((e < 0)) ? -1 : Math.floor(((e / 3600000)))));\n            }, this.after(\"initialize\", function() {\n                this.ttl = new JSBNG__Storage(((this.namespace + \"_ttl\")));\n            }), this.around(\"setItem\", function(a, b, c, d) {\n                return ((((typeof d == \"number\")) ? this.ttl.setItem(b, ((this.now() + d))) : this.ttl.removeItem(b))), a(b, c);\n            }), this.around(\"getItem\", function(a, b) {\n                var c = this.ttl.getItem(b);\n                return ((((((typeof c == \"number\")) && ((this.now() > c)))) && this.removeItem(b))), a(b);\n            }), this.after(\"removeItem\", function(a) {\n                this.ttl.removeItem(a);\n            }), this.after(\"clear\", function() {\n                this.ttl.clear();\n            });\n        };\n    ;\n        var JSBNG__Storage = require(\"app/utils/storage/core\");\n        module.exports = withExpiry;\n    });\n    define(\"app/utils/storage/array/with_array\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function withArray() {\n            this.getArray = function(a) {\n                return ((this.getItem(a) || []));\n            }, this.push = function(a, b) {\n                var c = this.getArray(a), d = c.push(b);\n                return this.setItem(a, c), d;\n            }, this.pushAll = function(a, b) {\n                var c = this.getArray(a);\n                return c.push.apply(c, b), this.setItem(a, c), c;\n            };\n        };\n    ;\n        module.exports = withArray;\n    });\n    define(\"app/utils/storage/array/with_max_elements\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/storage/array/with_array\",], function(module, require, exports) {\n        function withMaxElements() {\n            compose.mixin(this, [withArray,]), this.maxElements = {\n            }, this.getMaxElements = function(a) {\n                return ((this.maxElements[a] || 0));\n            }, this.setMaxElements = function(a, b) {\n                this.maxElements[a] = b;\n            }, this.before(\"push\", function(a, b) {\n                this.makeRoomFor(a, 1);\n            }), this.around(\"pushAll\", function(a, b, c) {\n                return c = ((c || [])), this.makeRoomFor(b, c.length), a(b, c.slice(Math.max(0, ((c.length - this.getMaxElements(b))))));\n            }), this.makeRoomFor = function(a, b) {\n                var c = this.getArray(a), d = ((((c.length + b)) - this.getMaxElements(a)));\n                ((((d > 0)) && (c.splice(0, d), this.setItem(a, c))));\n            };\n        };\n    ;\n        var compose = require(\"core/compose\"), withArray = require(\"app/utils/storage/array/with_array\");\n        module.exports = withMaxElements;\n    });\n    define(\"app/utils/storage/array/with_unique_elements\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/storage/array/with_array\",], function(module, require, exports) {\n        function withUniqueElements() {\n            compose.mixin(this, [withArray,]), this.before(\"push\", function(a, b) {\n                var c = this.getArray(a);\n                ((this.deleteElement(c, b) && this.setItem(a, c)));\n            }), this.around(\"pushAll\", function(a, b, c) {\n                c = ((c || []));\n                var d = this.getArray(b), e = !1, f = [], g = {\n                };\n                return c.forEach(function(a) {\n                    ((g[a] || (e = ((this.deleteElement(d, a) || e)), g[a] = !0, f.push(a))));\n                }, this), ((e && this.setItem(b, d))), a(b, f);\n            }), this.deleteElement = function(a, b) {\n                var c = -1;\n                return (((((c = a.indexOf(b)) >= 0)) ? (a.splice(c, 1), !0) : !1));\n            };\n        };\n    ;\n        var compose = require(\"core/compose\"), withArray = require(\"app/utils/storage/array/with_array\");\n        module.exports = withUniqueElements;\n    });\n    define(\"app/utils/storage/custom\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/storage/core\",\"app/utils/storage/with_crypto\",\"app/utils/storage/with_expiry\",\"app/utils/storage/array/with_array\",\"app/utils/storage/array/with_max_elements\",\"app/utils/storage/array/with_unique_elements\",], function(module, require, exports) {\n        function storageConstr(a) {\n            var b = Object.keys(a).filter(function(b) {\n                return a[b];\n            }).sort().join(\",\"), c;\n            if (c = lookup[b]) {\n                return c;\n            }\n        ;\n        ;\n            c = function() {\n                CoreStorage.apply(this, arguments);\n            }, c.prototype = new CoreStorage;\n            var d = [];\n            return ((a.withCrypto && d.push(withCrypto))), ((a.withExpiry && d.push(withExpiry))), ((a.withArray && d.push(withArray))), ((a.withUniqueElements && d.push(withUniqueElements))), ((a.withMaxElements && d.push(withMaxElements))), ((((d.length > 0)) && compose.mixin(c.prototype, d))), lookup[b] = c, c;\n        };\n    ;\n        var compose = require(\"core/compose\"), CoreStorage = require(\"app/utils/storage/core\"), withCrypto = require(\"app/utils/storage/with_crypto\"), withExpiry = require(\"app/utils/storage/with_expiry\"), withArray = require(\"app/utils/storage/array/with_array\"), withMaxElements = require(\"app/utils/storage/array/with_max_elements\"), withUniqueElements = require(\"app/utils/storage/array/with_unique_elements\"), lookup = {\n        };\n        module.exports = storageConstr;\n    });\n    define(\"app/data/with_data\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/i18n\",\"app/data/notifications\",\"app/utils/params\",\"app/data/with_auth_token\",\"app/utils/storage/custom\",\"app/utils/storage/core\",], function(module, require, exports) {\n        function initializeXhrStorage() {\n            ((xhrStorage || (xhrStorage = new CoreStorage(\"XHRNotes\"))));\n        };\n    ;\n        function withData() {\n            compose.mixin(this, [withAuthToken,]);\n            var a = [];\n            this.composeData = function(a, b) {\n                return a = ((a || {\n                })), ((b.eventData && (a.sourceEventData = b.eventData))), a;\n            }, this.callSuccessHandler = function(a, b, c) {\n                ((((typeof a == \"function\")) ? a(b) : this.trigger(a, b)));\n            }, this.callErrorHandler = function(a, b, c) {\n                ((((typeof a == \"function\")) ? a(b) : this.trigger(a, b)));\n            }, this.createSuccessHandler = function(b, c) {\n                return initializeXhrStorage(), function(d, e, f) {\n                    a.slice(a.indexOf(f), 1);\n                    var g = d, h = null, i = encodeURIComponent(c.url);\n                    if (((((d && d.hasOwnProperty(\"note\"))) && d.hasOwnProperty(\"JSBNG__inner\")))) {\n                        g = d.JSBNG__inner, h = d.note;\n                        var j = f.getResponseHeader(\"x-transaction\");\n                        ((((j && ((j != xhrStorage.getItem(i))))) && (h.notCached = !0, xhrStorage.setItem(i, j))));\n                    }\n                ;\n                ;\n                    g = this.composeData(g, c), ((c.cache_ttl && storage.setItem(i, {\n                        data: g,\n                        time: (new JSBNG__Date).getTime()\n                    }, c.cache_ttl))), this.callSuccessHandler(b, g, c), ((h && (notifications.updateNotificationState(h), ((h.notCached && this.trigger(\"dataNotificationsReceived\", h)))))), ((g.debug && this.trigger(\"dataSetDebugData\", g.debug)));\n                }.bind(this);\n            }, this.createErrorHandler = function(b, c) {\n                return function(d) {\n                    a.slice(a.indexOf(d), 1);\n                    var e;\n                    try {\n                        e = JSON.parse(d.responseText), ((((((e && e.message)) && !this.attr.noShowError)) && this.trigger(\"uiShowError\", e)));\n                    } catch (f) {\n                        e = {\n                            xhr: {\n                            }\n                        }, ((((d && d.statusText)) && (e.xhr.statusText = d.statusText)));\n                    };\n                ;\n                    ((e.message || (e.message = _(\"Internal server error.\")))), e = this.composeData(e, c), this.callErrorHandler(b, e, c);\n                }.bind(this);\n            }, this.sortData = function(a) {\n                if (((!a || ((typeof a != \"object\"))))) {\n                    return a;\n                }\n            ;\n            ;\n                var b = {\n                }, c = Object.keys(a).sort();\n                return c.forEach(function(c) {\n                    b[c] = a[c];\n                }), b;\n            }, this.extractParams = function(a, b) {\n                var c = {\n                }, d = params.fromQuery(b);\n                return Object.keys(d).forEach(function(b) {\n                    ((a[b] && (c[b] = d[b])));\n                }), c;\n            }, this.JSONRequest = function(b, c) {\n                var d;\n                if (b.cache_ttl) {\n                    ((storage || (storage = new StorageConstr(\"with_data\")))), d = storage.getItem(encodeURIComponent(b.url));\n                    if (((d && ((((new JSBNG__Date - d.time)) <= b.cache_ttl))))) {\n                        ((b.success && this.callSuccessHandler(b.success, d.data)));\n                        return;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                var e = ((((c == \"POST\")) || ((c == \"DELETE\"))));\n                ((((e && ((b.isMutation === !1)))) && (e = !1))), delete b.isMutation, ((((this.trigger && e)) && this.trigger(\"dataPageMutated\"))), [\"url\",].forEach(function(a) {\n                    if (!b.hasOwnProperty(a)) {\n                        throw new Error(((\"getJSONRequest called without required option: \" + a)), arguments);\n                    }\n                ;\n                ;\n                });\n                var f = ((b.data || {\n                })), g = b.headers;\n                (((([\"GET\",\"POST\",].indexOf(c) < 0)) && (f = $.extend({\n                    _method: c\n                }, f), c = \"POST\"))), ((((c == \"POST\")) && (f = this.addAuthToken(f), ((((g && g[\"X-PHX\"])) && (f = this.addPHXAuthToken(f)))))));\n                var h = $.extend({\n                    lang: !0\n                }, b.echoParams);\n                f = $.extend(f, this.extractParams(h, window.JSBNG__location)), ((b.success && (b.success = this.createSuccessHandler(b.success, b)))), ((b.error && (b.error = this.createErrorHandler(b.error, b)))), $.extend(f, notifications.extraParameters(b.url));\n                var i = $.ajax($.extend(b, {\n                    url: b.url,\n                    data: this.sortData(f),\n                    dataType: ((b.dataType || \"json\")),\n                    type: c\n                }));\n                return ((b.noAbortOnNavigate || a.push(i))), i;\n            }, this.get = function(a) {\n                return this.JSONRequest(a, \"GET\");\n            }, this.post = function(a) {\n                return this.JSONRequest(a, \"POST\");\n            }, this.destroy = function(a) {\n                return this.JSONRequest(a, \"DELETE\");\n            }, this.abortAllXHR = function() {\n                a.forEach(function(a) {\n                    ((((a && a.abort)) && a.abort()));\n                }), a = [];\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"dataBeforeNavigate\", this.abortAllXHR);\n            });\n        };\n    ;\n        var compose = require(\"core/compose\"), _ = require(\"core/i18n\"), notifications = require(\"app/data/notifications\"), params = require(\"app/utils/params\"), withAuthToken = require(\"app/data/with_auth_token\"), customStorage = require(\"app/utils/storage/custom\"), CoreStorage = require(\"app/utils/storage/core\"), StorageConstr = customStorage({\n            withExpiry: !0\n        }), storage, xhrStorage;\n        module.exports = withData;\n    });\n    define(\"app/data/navigation\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"core/registry\",\"app/utils/time\",\"app/utils/full_path\",\"app/data/with_data\",], function(module, require, exports) {\n        function navigationData() {\n            this.defaultAttrs({\n                viewContainer: \"#page-container\",\n                pushStateRequestHeaders: {\n                    \"X-Push-State-Request\": !0\n                },\n                pushState: !0,\n                pushStateSupported: !0,\n                pushStatePageLimit: 500000,\n                assetsBasePath: \"/\",\n                noTeardown: !0,\n                init_data: {\n                }\n            });\n            var a = /\\/a\\/(\\d+)/, b, c, d;\n            this.pageCache = {\n            }, this.pageCacheTTLs = {\n            }, this.pageCacheScroll = {\n            }, this.navigateUsingPushState = function(a, b) {\n                var e = fullPath();\n                d = b.href, c = b.isPopState;\n                if (((((!c && ((b.href == e)))) && this.pageCache[e]))) {\n                    return;\n                }\n            ;\n            ;\n                this.getPageData(b.href);\n            }, this.sweepPageCache = function() {\n                var a = time.now();\n                {\n                    var fin54keys = ((window.top.JSBNG_Replay.forInKeys)((this.pageCacheTTLs))), fin54i = (0);\n                    var b;\n                    for (; (fin54i < fin54keys.length); (fin54i++)) {\n                        ((b) = (fin54keys[fin54i]));\n                        {\n                            ((((a > this.pageCacheTTLs[b])) && (delete this.pageCache[b], delete this.pageCacheTTLs[b])));\n                        ;\n                        };\n                    };\n                };\n            ;\n            }, this.hasDeployTimestampChanged = function(b) {\n                var c = ((this.attr.assetsBasePath && this.attr.assetsBasePath.match(a))), d = ((b.init_data.assetsBasePath && b.init_data.assetsBasePath.match(a)));\n                return ((((c && d)) && ((d[1] != c[1]))));\n            }, this.getPageData = function(a) {\n                var b;\n                this.trigger(\"dataBeforeNavigate\"), ((this.attr.init_data.initialState && this.createInitialState())), this.sweepPageCache(), this.trigger(\"uiBeforeNewPageLoad\");\n                if (b = this.pageCache[a]) b.fromCache = !0, this.pageDataReceived(a, b);\n                 else {\n                    this.trigger(\"dataPageFetch\");\n                    var c = this.attr.pushStateRequestHeaders, e = this.pageCacheScroll[a];\n                    ((e && (c = utils.merge(c, {\n                        TopViewportItem: e.topItem\n                    })))), this.get({\n                        headers: c,\n                        url: a,\n                        success: function(b) {\n                            var c;\n                            if (((((b.init_data && b.page)) && b.module))) {\n                                c = b.init_data.href, b.href = c;\n                                if (!b.init_data.pushState) {\n                                    this.navigateTo(c);\n                                    return;\n                                }\n                            ;\n                            ;\n                                if (this.hasDeployTimestampChanged(b)) {\n                                    this.navigateTo(c);\n                                    return;\n                                }\n                            ;\n                            ;\n                                if (((b.init_data.viewContainer != this.attr.viewContainer))) {\n                                    this.attr.viewContainer = b.init_data.viewContainer, this.navigateTo(c);\n                                    return;\n                                }\n                            ;\n                            ;\n                                this.cacheState(c, b);\n                                if (((d != a))) {\n                                    return;\n                                }\n                            ;\n                            ;\n                                ((e && (b.scrollPosition = e))), this.pageDataReceived(c, b);\n                            }\n                             else this.navigateTo(((b.href || a)));\n                        ;\n                        ;\n                        }.bind(this),\n                        error: function(b) {\n                            this.navigateTo(a);\n                        }.bind(this)\n                    });\n                }\n            ;\n            ;\n            }, this.setTimelineScrollPosition = function(a, c) {\n                this.pageCacheScroll[b] = c;\n            }, this.updatePageState = function() {\n                var a = this.pageCache[b];\n                ((a && (a.page = this.select(\"viewContainer\").html(), this.pageCacheTTLs[b] = time(a.cache_ttl).seconds.fromNow().getTime(), ((((a.page.length > this.attr.pushStatePageLimit)) && (delete this.pageCache[b], delete this.pageCacheTTLs[b]))))));\n            }, this.cacheState = function(a, b) {\n                this.pageCache[a] = b, this.pageCacheTTLs[a] = time(b.cache_ttl).seconds.fromNow().getTime();\n            }, this.pageDataReceived = function(a, b) {\n                ((((a != fullPath())) && JSBNG__history.pushState({\n                }, b.title, a))), b.isPopState = c, this.trigger(\"dataPageRefresh\", b);\n            }, this.swiftTeardownAll = function() {\n                Object.keys(registry.allInstances).forEach(function(a) {\n                    var b = registry.allInstances[a].instance;\n                    ((b.attr.noTeardown || b.teardown()));\n                });\n            }, this.doTeardown = function(a, c) {\n                this.swiftTeardownAll(), ((((c.href != b)) && this.updatePageState()));\n            }, this.createInitialState = function() {\n                var a = utils.merge(this.attr.init_data.initialState, !0);\n                a.init_data = utils.merge(this.attr.init_data, !0), delete a.init_data.initialState, this.attr.init_data.initialState = null, this.cacheState(b, a), JSBNG__history.replaceState({\n                }, a.title, b);\n            }, this.resetPageCache = function(a, b) {\n                this.pageCache = {\n                }, this.pageCacheTTLs = {\n                };\n            }, this.removePageFromCache = function(a, b) {\n                var c = b.href;\n                ((this.pageCache[c] && (delete this.pageCache[c], delete this.pageCacheTTLs[c])));\n            }, this.navigateTo = function(a) {\n                JSBNG__location.href = a;\n            }, this.navigateUsingRedirect = function(a, c) {\n                var d = c.href;\n                ((((d != b)) && this.navigateTo(d)));\n            }, this.destroyCurrentPageState = function() {\n                JSBNG__history.replaceState(null, JSBNG__document.title, b);\n            }, this.resetStateVariables = function() {\n                b = fullPath(), c = !1, d = null;\n            }, this.after(\"initialize\", function() {\n                ((((this.attr.pushState && this.attr.pushStateSupported)) ? (this.JSBNG__on(\"uiSwiftLoaded uiPageChanged\", this.resetStateVariables), this.JSBNG__on(\"uiNavigate\", this.navigateUsingPushState), this.JSBNG__on(JSBNG__document, \"uiTimelineScrollSet\", this.setTimelineScrollPosition), this.JSBNG__on(\"uiTeardown\", this.doTeardown), this.JSBNG__on(JSBNG__document, \"dataPageMutated\", this.resetPageCache), this.JSBNG__on(JSBNG__document, \"uiPromotedLinkClick\", this.removePageFromCache), this.JSBNG__on(window, \"beforeunload\", this.destroyCurrentPageState)) : (this.JSBNG__on(\"uiSwiftLoaded\", this.resetStateVariables), this.JSBNG__on(\"uiNavigate\", this.navigateUsingRedirect))));\n            });\n        };\n    ;\n        var component = require(\"core/component\"), utils = require(\"core/utils\"), registry = require(\"core/registry\"), time = require(\"app/utils/time\"), fullPath = require(\"app/utils/full_path\"), withData = require(\"app/data/with_data\"), NavigationData = component(navigationData, withData);\n        module.exports = NavigationData;\n    });\n    define(\"app/ui/with_dropdown\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function withDropdown() {\n            this.toggleDisplay = function(a) {\n                this.$node.toggleClass(\"open\"), ((this.$node.hasClass(\"open\") && (this.activeEl = JSBNG__document.activeElement, this.trigger(\"uiDropdownOpened\")))), ((a && a.preventDefault()));\n            }, this.ignoreCloseEvent = !1, this.closeDropdown = function() {\n                this.$node.removeClass(\"open\");\n            }, this.closeAndRestoreFocus = function(a) {\n                this.closeDropdown(), ((this.activeEl && (a.preventDefault(), this.activeEl.JSBNG__focus(), this.activeEl = null)));\n            }, this.close = function(a) {\n                var b = $(this.attr.toggler);\n                if (((((((a.target === this.$node)) || ((this.$node.has(a.target).length > 0)))) && !this.isItemClick(a)))) {\n                    return;\n                }\n            ;\n            ;\n                if (((this.isItemClick(a) && this.ignoreCloseEvent))) {\n                    return;\n                }\n            ;\n            ;\n                this.closeDropdown();\n            }, this.isItemClick = function(a) {\n                return ((((!this.attr.itemSelector || !a)) ? !1 : (($(a.target).closest(this.attr.itemSelector).length > 0))));\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", {\n                    toggler: this.toggleDisplay\n                }), this.JSBNG__on(JSBNG__document, \"click\", this.close), this.JSBNG__on(JSBNG__document, \"uiCloseDropdowns uiNavigate\", this.closeDropdown), this.JSBNG__on(JSBNG__document, \"uiShortcutEsc\", this.closeAndRestoreFocus);\n            });\n        };\n    ;\n        module.exports = withDropdown;\n    });\n    define(\"app/ui/language_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dropdown\",], function(module, require, exports) {\n        function languageDropdown() {\n            this.defaultAttrs({\n                toggler: \".dropdown-toggle\"\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withDropdown = require(\"app/ui/with_dropdown\"), LanguageDropdown = defineComponent(languageDropdown, withDropdown);\n        module.exports = LanguageDropdown;\n    });\n    define(\"app/ui/google\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function googleAnalytics() {\n            this.defaultAttrs({\n                gaPageName: window.JSBNG__location.pathname\n            }), this.initGoogle = function() {\n                window._gaq = ((window._gaq || [])), window._gaq.push([\"_setAccount\",\"UA-30775-6\",], [\"_trackPageview\",this.attr.gaPageName,], [\"_setDomainName\",\"twitter.com\",]);\n                var a = JSBNG__document.getElementsByTagName(\"script\")[0], b = JSBNG__document.createElement(\"script\");\n                b.async = !0, b.src = ((((((JSBNG__document.JSBNG__location.protocol == \"https:\")) ? \"https://ssl\" : \"http://www\")) + \".google-analytics.com/ga.js\")), a.parentNode.insertBefore(b, a), this.off(\"uiSwiftLoaded\", this.initGoogle);\n            }, this.trackPageChange = function(a, b) {\n                b = b.init_data, window._gaq.push([\"_trackPageview\",((((b && b.gaPageName)) || window.JSBNG__location.pathname)),]);\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiSwiftLoaded\", this.initGoogle), this.JSBNG__on(\"uiPageChanged\", this.trackPageChange);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), GoogleAnalytics = defineComponent(googleAnalytics);\n        module.exports = GoogleAnalytics;\n    });\n    define(\"app/utils/cookie\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        module.exports = function(b, c, d) {\n            var e = $.extend({\n            }, d);\n            if (((((arguments.length > 1)) && ((String(c) !== \"[object Object]\"))))) {\n                if (((((c === null)) || ((c === undefined))))) {\n                    e.expires = -1, c = \"\";\n                }\n            ;\n            ;\n                if (((typeof e.expires == \"number\"))) {\n                    var f = e.expires, g = new JSBNG__Date((((new JSBNG__Date).getTime() + ((((((((f * 24)) * 60)) * 60)) * 1000)))));\n                    e.expires = g;\n                }\n            ;\n            ;\n                return c = String(c), JSBNG__document.cookie = [encodeURIComponent(b),\"=\",((e.raw ? c : encodeURIComponent(c))),((e.expires ? ((\"; expires=\" + e.expires.toUTCString())) : \"\")),((\"; path=\" + ((e.path || \"/\")))),((e.domain ? ((\"; domain=\" + e.domain)) : \"\")),((e.secure ? \"; secure\" : \"\")),].join(\"\");\n            }\n        ;\n        ;\n            e = ((c || {\n            }));\n            var h, i = ((e.raw ? function(a) {\n                return a;\n            } : decodeURIComponent));\n            return (((h = (new RegExp(((((\"(?:^|; )\" + encodeURIComponent(b))) + \"=([^;]*)\")))).exec(JSBNG__document.cookie)) ? i(h[1]) : null));\n        };\n    });\n    define(\"app/ui/impression_cookies\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/cookie\",], function(module, require, exports) {\n        function impressionCookies() {\n            this.defaultAttrs({\n                sendImpressionCookieSelector: \"a[data-send-impression-cookie]\",\n                link: \"a\"\n            }), this.setCookie = function(a, b) {\n                cookie(\"ic\", a, {\n                    expires: b\n                });\n            }, this.sendImpressionCookie = function(a, b) {\n                var c = b.el;\n                if (((((((!c || ((c.hostname != window.JSBNG__location.hostname)))) || !c.pathname)) || ((c.pathname.indexOf(\"/#!/\") == 0))))) {\n                    return;\n                }\n            ;\n            ;\n                var d = $(c), e = d.closest(\"[data-impression-cookie]\").attr(\"data-impression-cookie\");\n                if (!e) {\n                    return;\n                }\n            ;\n            ;\n                this.trigger(\"uiPromotedLinkClick\", {\n                    href: d.attr(\"href\")\n                });\n                var f = new JSBNG__Date, g = 60000, h = new JSBNG__Date(((f.getTime() + g)));\n                this.setCookie(e, h);\n            }, this.after(\"initialize\", function(a) {\n                this.JSBNG__on(\"click\", {\n                    sendImpressionCookieSelector: this.sendImpressionCookie\n                }), this.JSBNG__on(\"uiShowProfileNewWindow\", {\n                    link: this.sendImpressionCookie\n                });\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), cookie = require(\"app/utils/cookie\");\n        module.exports = defineComponent(impressionCookies);\n    });\n    define(\"app/data/promoted_logger\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n        function promotedLogger() {\n            this.defaultAttrs({\n                tweetHashtagLinkSelector: \".tweet .twitter-hashtag\",\n                tweetLinkSelector: \".tweet .twitter-timeline-link\"\n            }), this.logEvent = function(a, b) {\n                this.get({\n                    url: \"/i/promoted_content/log.json\",\n                    data: a,\n                    eventData: {\n                    },\n                    headers: {\n                        \"X-PHX\": !0\n                    },\n                    success: \"dataLogEventSuccess\",\n                    error: \"dataLogEventError\",\n                    async: !b,\n                    noAbortOnNavigate: !0\n                });\n            }, this.isEarnedMedia = function(a) {\n                return ((a == \"earned\"));\n            }, this.logPromotedTrendImpression = function(a, b) {\n                var c = b.items, d = b.source;\n                if (((d == \"clock\"))) {\n                    return;\n                }\n            ;\n            ;\n                var e = c.filter(function(a) {\n                    return !!a.promotedTrendId;\n                });\n                if (!e.length) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"i\",\n                    promoted_trend_id: e[0].promotedTrendId\n                });\n            }, this.logPromotedTrendClick = function(a, b) {\n                if (!b.promotedTrendId) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"c\",\n                    promoted_trend_id: b.promotedTrendId\n                }, !0);\n            }, this.logPromotedTweetImpression = function(a, b) {\n                var c = b.tweets.filter(function(a) {\n                    return a.impressionId;\n                });\n                c.forEach(function(a) {\n                    this.logEvent({\n                        JSBNG__event: \"impression\",\n                        impression_id: a.impressionId,\n                        earned: this.isEarnedMedia(a.disclosureType)\n                    });\n                }, this);\n            }, this.logPromotedTweetLinkClick = function(a) {\n                var b = $(a.target).closest(\"[data-impression-id]\").attr(\"data-impression-id\"), c = $(a.target).closest(\"[data-impression-id]\").attr(\"data-disclosure-type\");\n                if (!b) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"url_click\",\n                    impression_id: b,\n                    earned: this.isEarnedMedia(c)\n                }, !0);\n            }, this.logPromotedTweetHashtagClick = function(a) {\n                var b = $(a.target).closest(\"[data-impression-id]\").attr(\"data-impression-id\"), c = $(a.target).closest(\"[data-impression-id]\").attr(\"data-disclosure-type\");\n                if (!b) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"hashtag_click\",\n                    impression_id: b,\n                    earned: this.isEarnedMedia(c)\n                }, !0);\n            }, this.logPromotedUserImpression = function(a, b) {\n                var c = b.users.filter(function(a) {\n                    return a.impressionId;\n                });\n                c.forEach(function(a) {\n                    this.logEvent({\n                        JSBNG__event: \"impression\",\n                        impression_id: a.impressionId\n                    });\n                }, this);\n            }, this.logPromotedTweetShareViaEmail = function(a, b) {\n                var c = b.impressionId;\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                var d = this.isEarnedMedia(b.disclosureType);\n                this.logEvent({\n                    JSBNG__event: \"email_tweet\",\n                    impression_id: c,\n                    earned: d\n                });\n            }, this.logPromotedUserClick = function(a, b) {\n                var c = b.impressionId;\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                var d = this.isEarnedMedia(b.disclosureType);\n                ((((b.profileClickTarget === \"avatar\")) ? this.logEvent({\n                    JSBNG__event: \"profile_image_click\",\n                    impression_id: c,\n                    earned: d\n                }) : ((b.isMentionClick ? this.logEvent({\n                    JSBNG__event: \"user_mention_click\",\n                    impression_id: c,\n                    earned: d\n                }) : ((b.isPromotedBadgeClick ? this.logEvent({\n                    JSBNG__event: \"footer_profile\",\n                    impression_id: c,\n                    earned: d\n                }) : this.logEvent({\n                    JSBNG__event: \"screen_name_click\",\n                    impression_id: c,\n                    earned: d\n                })))))));\n            }, this.logPromotedUserDismiss = function(a, b) {\n                var c = b.impressionId;\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"dismiss\",\n                    impression_id: c\n                });\n            }, this.logPromotedTweetDismiss = function(a, b) {\n                var c = b.impressionId, d = b.disclosureType;\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"dismiss\",\n                    impression_id: c,\n                    earned: this.isEarnedMedia(d)\n                });\n            }, this.logPromotedTweetDetails = function(a, b) {\n                var c = b.impressionId, d = b.disclosureType;\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                this.logEvent({\n                    JSBNG__event: \"view_details\",\n                    impression_id: c,\n                    earned: this.isEarnedMedia(d)\n                });\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiTrendsDisplayed\", this.logPromotedTrendImpression), this.JSBNG__on(\"uiTrendSelected\", this.logPromotedTrendClick), this.JSBNG__on(\"uiTweetsDisplayed\", this.logPromotedTweetImpression), this.JSBNG__on(\"click\", {\n                    tweetLinkSelector: this.logPromotedTweetLinkClick,\n                    tweetHashtagLinkSelector: this.logPromotedTweetHashtagClick\n                }), this.JSBNG__on(\"uiHasExpandedTweet\", this.logPromotedTweetDetails), this.JSBNG__on(\"uiTweetDismissed\", this.logPromotedTweetDismiss), this.JSBNG__on(\"uiDidShareViaEmailSuccess\", this.logPromotedTweetShareViaEmail), this.JSBNG__on(\"uiUsersDisplayed\", this.logPromotedUserImpression), this.JSBNG__on(\"uiDismissUserRecommendation\", this.logPromotedUserDismiss), this.JSBNG__on(\"uiShowProfilePopup uiShowProfileNewWindow\", this.logPromotedUserClick);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), PromotedLogger = defineComponent(promotedLogger, withData);\n        module.exports = PromotedLogger;\n    });\n    define(\"app/ui/message_drawer\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function messageDrawer() {\n            this.defaultAttrs({\n                fadeTimeout: 2000,\n                closeSelector: \".dismiss\",\n                reloadSelector: \".js-reload\",\n                textSelector: \".message-text\",\n                bannersSelector: \"#banners\",\n                topOffset: 47\n            });\n            var a = function() {\n                this.$node.css(\"opacity\", 1).animate({\n                    opacity: 0\n                }, 1000, function() {\n                    this.closeMessage();\n                }.bind(this));\n            };\n            this.calculateFadeTimeout = function(a) {\n                var b = a.split(\" \").length, c = ((((((b * 1000)) / 5)) + 225));\n                return ((((c < this.attr.fadeTimeout)) ? this.attr.fadeTimeout : c));\n            }, this.showMessage = function(b, c) {\n                this.$node.css({\n                    opacity: 1,\n                    JSBNG__top: ((this.attr.topOffset + $(this.attr.bannersSelector).height()))\n                }), this.select(\"textSelector\").html(c.message), this.select(\"closeSelector\").hide(), this.$node.removeClass(\"hidden\"), JSBNG__clearTimeout(this.messageTimeout), this.$node.JSBNG__stop(), this.messageTimeout = JSBNG__setTimeout(a.bind(this), this.calculateFadeTimeout(c.message));\n            }, this.showError = function(a, b) {\n                this.$node.css(\"opacity\", 1), this.select(\"textSelector\").html(b.message), this.select(\"closeSelector\").show(), this.$node.removeClass(\"hidden\");\n            }, this.closeMessage = function(a) {\n                ((a && a.preventDefault())), this.$node.addClass(\"hidden\");\n            }, this.reloadPageHandler = function() {\n                this.reloadPage();\n            }, this.reloadPage = function() {\n                window.JSBNG__location.reload();\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"uiShowMessage\", this.showMessage), this.JSBNG__on(JSBNG__document, \"uiShowError\", this.showError), this.JSBNG__on(\"click\", {\n                    reloadSelector: this.reloadPageHandler,\n                    closeSelector: this.closeMessage\n                }), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.closeMessage);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), MessageDrawer = defineComponent(messageDrawer);\n        module.exports = MessageDrawer;\n    });\n    deferred(\"$lib/bootstrap_tooltip.js\", function() {\n        !function($) {\n            \"use strict\";\n            var a = function(a, b) {\n                this.init(\"tooltip\", a, b);\n            };\n            a.prototype = {\n                constructor: a,\n                init: function(a, b, c) {\n                    var d, e;\n                    this.type = a, this.$element = $(b), this.options = this.getOptions(c), this.enabled = !0, ((((this.options.trigger != \"manual\")) && (d = ((((this.options.trigger == \"hover\")) ? \"mouseenter\" : \"JSBNG__focus\")), e = ((((this.options.trigger == \"hover\")) ? \"mouseleave\" : \"JSBNG__blur\")), this.$element.JSBNG__on(d, this.options.selector, $.proxy(this.enter, this)), this.$element.JSBNG__on(e, this.options.selector, $.proxy(this.leave, this))))), ((this.options.selector ? this._options = $.extend({\n                    }, this.options, {\n                        trigger: \"manual\",\n                        selector: \"\"\n                    }) : this.fixTitle()));\n                },\n                getOptions: function(a) {\n                    return a = $.extend({\n                    }, $.fn[this.type].defaults, a, this.$element.data()), ((((a.delay && ((typeof a.delay == \"number\")))) && (a.delay = {\n                        show: a.delay,\n                        hide: a.delay\n                    }))), a;\n                },\n                enter: function(a) {\n                    var b = $(a.currentTarget)[this.type](this._options).data(this.type);\n                    ((((!b.options.delay || !b.options.delay.show)) ? b.show() : (b.hoverState = \"in\", JSBNG__setTimeout(function() {\n                        ((((b.hoverState == \"in\")) && b.show()));\n                    }, b.options.delay.show))));\n                },\n                leave: function(a) {\n                    var b = $(a.currentTarget)[this.type](this._options).data(this.type);\n                    ((((!b.options.delay || !b.options.delay.hide)) ? b.hide() : (b.hoverState = \"out\", JSBNG__setTimeout(function() {\n                        ((((b.hoverState == \"out\")) && b.hide()));\n                    }, b.options.delay.hide))));\n                },\n                show: function() {\n                    var a, b, c, d, e, f, g;\n                    if (((this.hasContent() && this.enabled))) {\n                        a = this.tip(), this.setContent(), ((this.options.animation && a.addClass(\"fade\"))), f = ((((typeof this.options.placement == \"function\")) ? this.options.placement.call(this, a[0], this.$element[0]) : this.options.placement)), b = /in/.test(f), a.remove().css({\n                            JSBNG__top: 0,\n                            left: 0,\n                            display: \"block\"\n                        }).appendTo(((b ? this.$element : JSBNG__document.body))), c = this.getPosition(b), d = a[0].offsetWidth, e = a[0].offsetHeight;\n                        switch (((b ? f.split(\" \")[1] : f))) {\n                          case \"bottom\":\n                            g = {\n                                JSBNG__top: ((c.JSBNG__top + c.height)),\n                                left: ((((c.left + ((c.width / 2)))) - ((d / 2))))\n                            };\n                            break;\n                          case \"JSBNG__top\":\n                            g = {\n                                JSBNG__top: ((c.JSBNG__top - e)),\n                                left: ((((c.left + ((c.width / 2)))) - ((d / 2))))\n                            };\n                            break;\n                          case \"left\":\n                            g = {\n                                JSBNG__top: ((((c.JSBNG__top + ((c.height / 2)))) - ((e / 2)))),\n                                left: ((c.left - d))\n                            };\n                            break;\n                          case \"right\":\n                            g = {\n                                JSBNG__top: ((((c.JSBNG__top + ((c.height / 2)))) - ((e / 2)))),\n                                left: ((c.left + c.width))\n                            };\n                        };\n                    ;\n                        a.css(g).addClass(f).addClass(\"in\");\n                    }\n                ;\n                ;\n                },\n                setContent: function() {\n                    var a = this.tip();\n                    a.JSBNG__find(\".tooltip-inner\").html(this.getTitle()), a.removeClass(\"fade in top bottom left right\");\n                },\n                hide: function() {\n                    function c() {\n                        var a = JSBNG__setTimeout(function() {\n                            b.off($.support.transition.end).remove();\n                        }, 500);\n                        b.one($.support.transition.end, function() {\n                            JSBNG__clearTimeout(a), b.remove();\n                        });\n                    };\n                ;\n                    var a = this, b = this.tip();\n                    b.removeClass(\"in\"), (((($.support.transition && this.$tip.hasClass(\"fade\"))) ? c() : b.remove()));\n                },\n                fixTitle: function() {\n                    var a = this.$element;\n                    ((((a.attr(\"title\") || ((typeof a.attr(\"data-original-title\") != \"string\")))) && a.attr(\"data-original-title\", ((a.attr(\"title\") || \"\"))).removeAttr(\"title\")));\n                },\n                hasContent: function() {\n                    return this.getTitle();\n                },\n                getPosition: function(a) {\n                    return $.extend({\n                    }, ((a ? {\n                        JSBNG__top: 0,\n                        left: 0\n                    } : this.$element.offset())), {\n                        width: this.$element[0].offsetWidth,\n                        height: this.$element[0].offsetHeight\n                    });\n                },\n                getTitle: function() {\n                    var a, b = this.$element, c = this.options;\n                    return a = ((b.attr(\"data-original-title\") || ((((typeof c.title == \"function\")) ? c.title.call(b[0]) : c.title)))), a = ((a || \"\")).toString().replace(/(^\\s*|\\s*$)/, \"\"), a;\n                },\n                tip: function() {\n                    return this.$tip = ((this.$tip || $(this.options.template)));\n                },\n                validate: function() {\n                    ((this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)));\n                },\n                enable: function() {\n                    this.enabled = !0;\n                },\n                disable: function() {\n                    this.enabled = !1;\n                },\n                toggleEnabled: function() {\n                    this.enabled = !this.enabled;\n                },\n                toggle: function() {\n                    this[((this.tip().hasClass(\"in\") ? \"hide\" : \"show\"))]();\n                }\n            }, $.fn.tooltip = function(b) {\n                return this.each(function() {\n                    var c = $(this), d = c.data(\"tooltip\"), e = ((((typeof b == \"object\")) && b));\n                    ((d || c.data(\"tooltip\", d = new a(this, e)))), ((((typeof b == \"string\")) && d[b]()));\n                });\n            }, $.fn.tooltip.Constructor = a, $.fn.tooltip.defaults = {\n                animation: !0,\n                delay: 0,\n                selector: !1,\n                placement: \"JSBNG__top\",\n                trigger: \"hover\",\n                title: \"\",\n                template: \"\\u003Cdiv class=\\\"tooltip\\\"\\u003E\\u003Cdiv class=\\\"tooltip-arrow\\\"\\u003E\\u003C/div\\u003E\\u003Cdiv class=\\\"tooltip-inner\\\"\\u003E\\u003C/div\\u003E\\u003C/div\\u003E\"\n            };\n        }(window.jQuery);\n    });\n    define(\"app/ui/tooltips\", [\"module\",\"require\",\"exports\",\"core/component\",\"$lib/bootstrap_tooltip.js\",], function(module, require, exports) {\n        function tooltips() {\n            this.defaultAttrs({\n                tooltipSelector: \".js-tooltip\"\n            }), this.hide = function() {\n                this.select(\"tooltipSelector\").tooltip(\"hide\");\n            }, this.after(\"initialize\", function() {\n                this.$node.tooltip({\n                    selector: this.attr.tooltipSelector\n                }), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged uiShowProfilePopup\", this.hide);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\");\n        require(\"$lib/bootstrap_tooltip.js\"), module.exports = defineComponent(tooltips);\n    });\n    define(\"app/data/ttft_navigation\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/scribe_transport\",], function(module, require, exports) {\n        function ttftNavigate() {\n            this.beforeNewPageLoad = function(a, b) {\n                this.log(\"beforeNewPageLoad\", a, b), time = {\n                    beforeNewPageLoad: +(new JSBNG__Date),\n                    source: {\n                        page: this.attr.pageName,\n                        action: this.attr.sectionName,\n                        path: window.JSBNG__location.pathname\n                    }\n                };\n            }, this.afterPageChanged = function(a, b) {\n                this.log(\"afterPageChanged\", a, b), time.afterPageChanged = +(new JSBNG__Date), this.fromCache = !!b.fromCache, this.hookTimelineListener(!0), this.timelineListener = JSBNG__setTimeout(function() {\n                    this.hookTimelineListener(!1), this.report();\n                }.bind(this), 1), time.ajaxCount = this.ajaxCountdown = $.active, (($.active && this.hookAjaxListener(!0)));\n            }, this.timelineRefreshRequest = function(a, b) {\n                JSBNG__clearTimeout(this.timelineListener), this.hookTimelineListener(!1), ((b.navigated && (this.listeningForTimeline = !0, this.hookTimelineResults(!0))));\n            }, this.timelineSuccess = function(a, b) {\n                this.log(\"timelineSuccess\", a, b), this.listeningForTimeline = !1, this.hookTimelineResults(!1), time.timelineSuccess = +(new JSBNG__Date), this.report();\n            }, this.timelineError = function(a, b) {\n                this.log(\"timelineError\", a, b), this.listeningForTimeline = !1, this.hookTimelineResults(!1), this.report();\n            }, this.ajaxComplete = function(a, b) {\n                ((--this.ajaxCountdown || (this.log(\"ajaxComplete\", a, b), this.hookAjaxListener(!1), time.ajaxComplete = +(new JSBNG__Date), this.report())));\n            }, this.report = function() {\n                if (((this.ajaxCountdown && time.ajaxCount))) {\n                    return;\n                }\n            ;\n            ;\n                if (((this.listeningForTimeline && !time.timelineSuccess))) {\n                    return;\n                }\n            ;\n            ;\n                var a = {\n                    event_name: \"route_time\",\n                    source_page: time.source.page,\n                    source_action: time.source.action,\n                    source_path: time.source.path,\n                    dest_page: this.attr.pageName,\n                    dest_action: this.attr.sectionName,\n                    dest_path: window.JSBNG__location.pathname,\n                    cached: this.fromCache,\n                    start_time: time.beforeNewPageLoad,\n                    stream_switch_time: time.afterPageChanged,\n                    stream_complete_time: ((time.timelineSuccess || time.afterPageChanged)),\n                    ajax_count: time.ajaxCount\n                };\n                ((time.ajaxCount && (a.ajax_complete_time = time.ajaxComplete))), this.scribeTransport.send(a, \"route_timing\"), this.log(a);\n            }, this.log = function() {\n            \n            }, this.time = function() {\n                return time;\n            }, this.scribeTransport = scribeTransport, this.hookAjaxListener = function(a) {\n                this[((a ? \"JSBNG__on\" : \"off\"))](\"ajaxComplete\", this.ajaxComplete);\n            }, this.hookTimelineListener = function(a) {\n                this[((a ? \"JSBNG__on\" : \"off\"))](\"uiTimelineShouldRefresh\", this.timelineRefreshRequest);\n            }, this.hookTimelineResults = function(a) {\n                this[((a ? \"JSBNG__on\" : \"off\"))](\"dataGotMoreTimelineItems\", this.timelineSuccess), this[((a ? \"JSBNG__on\" : \"off\"))](\"dataGotMoreTimelineItemsError\", this.timelineError);\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiBeforeNewPageLoad\", this.beforeNewPageLoad), this.JSBNG__on(\"uiPageChanged\", this.afterPageChanged);\n            });\n        };\n    ;\n        var component = require(\"core/component\"), scribeTransport = require(\"app/data/scribe_transport\");\n        module.exports = component(ttftNavigate);\n        var time = {\n        };\n    });\n    define(\"app/data/user_info\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        var user = {\n        }, userInfo = {\n            set: function(a) {\n                user.screenName = a.screenName, user.deciders = ((a.deciders || {\n                })), user.experiments = ((a.experiments || {\n                }));\n            },\n            reset: function() {\n                this.set({\n                    screenName: null,\n                    deciders: {\n                    },\n                    experiments: {\n                    }\n                });\n            },\n            user: user,\n            getDecider: function(a) {\n                return !!user.deciders[a];\n            },\n            getExperimentGroup: function(a) {\n                return user.experiments[a];\n            }\n        };\n        userInfo.reset(), module.exports = userInfo;\n    });\n    define(\"app/ui/aria_event_logger\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",], function(module, require, exports) {\n        function ariaEventLogger() {\n            this.MESSAGES = {\n                FAVORITED: _(\"Favorited\"),\n                UNFAVORITED: _(\"Unfavorited\"),\n                RETWEETED: _(\"Retweeted\"),\n                UNRETWEETED: _(\"Unretweeted\"),\n                EXPANDED: _(\"Expanded\"),\n                COLLAPSED: _(\"Collapsed\"),\n                RENDERING_CONVERSATION: _(\"Loading conversation.\"),\n                CONVERSATION_RENDERED: _(\"Conversation loaded. Press j or k to review Tweets.\"),\n                CONVERSATION_START: _(\"Conversation start.\"),\n                CONVERSATION_END: _(\"Conversation end.\"),\n                NEW_ITEMS_BAR_VISIBLE: _(\"New Tweets available. Press period to review them.\")\n            }, this.CLEAR_LOG_EVENTS = [\"uiPageChanged\",\"uiShortcutSelectPrev\",\"uiShortcutSelectNext\",\"uiSelectNext\",\"uiSelectItem\",\"uiShortcutGotoTopOfScreen\",\"uiSelectTopTweet\",].join(\" \"), this.createLog = function() {\n                var a = $(\"\\u003Cdiv id=\\\"sr-event-log\\\" class=\\\"visuallyhidden\\\" aria-live=\\\"assertive\\\"\\u003E\\u003C/div\\u003E\");\n                $(\"body\").append(a), this.$log = a;\n            }, this.logMessage = function(a, b) {\n                ((this.$log && (((b || (b = \"assertive\"))), ((((b != this.$log.attr(\"aria-live\"))) && this.$log.attr(\"aria-live\", b))), this.$log.append(((((\"\\u003Cp\\u003E\" + a)) + \"\\u003C/p\\u003E\"))), ((((this.$log.children().length > 3)) && this.$log.children().first().remove())))));\n            }, this.logEvent = function(a, b) {\n                return function() {\n                    this.logMessage(this.MESSAGES[a], b);\n                }.bind(this);\n            }, this.logConversationStart = function(a) {\n                var b = $(a.target);\n                ((((((b.closest(\".expanded-conversation\").length && !b.prev().length)) && b.next().length)) && this.logMessage(this.MESSAGES.CONVERSATION_START, \"polite\")));\n            }, this.logConversationEnd = function(a) {\n                var b = $(a.target);\n                ((((((b.closest(\".expanded-conversation\").length && !b.next().length)) && b.prev().length)) && this.logMessage(this.MESSAGES.CONVERSATION_END, \"polite\")));\n            }, this.logCharCountWarning = function(a, b) {\n                this.clearLog(), this.logMessage(b.charCount, \"polite\");\n            }, this.clearLog = function() {\n                ((this.$log && this.$log.html(\"\")));\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded\", this.createLog), this.JSBNG__on(JSBNG__document, \"uiDidFavoriteTweet dataFailedToUnfavoriteTweet\", this.logEvent(\"FAVORITED\")), this.JSBNG__on(JSBNG__document, \"uiDidUnfavoriteTweet dataFailedToFavoriteTweet\", this.logEvent(\"UNFAVORITED\")), this.JSBNG__on(JSBNG__document, \"uiDidRetweet dataFailedToUnretweet\", this.logEvent(\"RETWEETED\")), this.JSBNG__on(JSBNG__document, \"uiDidUnretweet dataFailedToRetweet\", this.logEvent(\"UNRETWEETED\")), this.JSBNG__on(JSBNG__document, \"uiHasExpandedTweet\", this.logEvent(\"EXPANDED\")), this.JSBNG__on(JSBNG__document, \"uiHasCollapsedTweet\", this.logEvent(\"COLLAPSED\")), this.JSBNG__on(JSBNG__document, \"uiRenderingExpandedConversation\", this.logEvent(\"RENDERING_CONVERSATION\", \"polite\")), this.JSBNG__on(JSBNG__document, \"uiExpandedConversationRendered\", this.logEvent(\"CONVERSATION_RENDERED\", \"polite\")), this.JSBNG__on(JSBNG__document, \"uiNextItemSelected\", this.logConversationEnd), this.JSBNG__on(JSBNG__document, \"uiPreviousItemSelected\", this.logConversationStart), this.JSBNG__on(JSBNG__document, \"uiNewItemsBarVisible\", this.logEvent(\"NEW_ITEMS_BAR_VISIBLE\")), this.JSBNG__on(JSBNG__document, \"uiCharCountWarningVisible\", this.logCharCountWarning), this.JSBNG__on(JSBNG__document, this.CLEAR_LOG_EVENTS, this.clearLog);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), ARIAEventLogger = defineComponent(ariaEventLogger);\n        module.exports = ARIAEventLogger;\n    });\n    define(\"app/boot/common\", [\"module\",\"require\",\"exports\",\"app/utils/auth_token\",\"app/boot/scribing\",\"app/ui/navigation\",\"app/data/navigation\",\"app/ui/language_dropdown\",\"app/ui/google\",\"app/ui/impression_cookies\",\"app/data/promoted_logger\",\"app/ui/message_drawer\",\"app/ui/tooltips\",\"app/data/ttft_navigation\",\"app/utils/cookie\",\"app/utils/querystring\",\"app/data/user_info\",\"app/ui/aria_event_logger\",], function(module, require, exports) {\n        function shimConsole(a) {\n            ((window.JSBNG__console || (window.JSBNG__console = {\n            }))), LOG_METHODS.forEach(function(b) {\n                if (((a || !JSBNG__console[b]))) {\n                    JSBNG__console[b] = NO_OP;\n                }\n            ;\n            ;\n            });\n        };\n    ;\n        function getLoginTime() {\n            return ((parseInt(querystring.decode(cookie(\"twll\")).l, 10) || 0));\n        };\n    ;\n        function verifySession() {\n            ((((getLoginTime() !== initialLoginTime)) && window.JSBNG__location.reload(!0)));\n        };\n    ;\n        var authToken = require(\"app/utils/auth_token\"), scribing = require(\"app/boot/scribing\"), NavigationUI = require(\"app/ui/navigation\"), NavigationData = require(\"app/data/navigation\"), LanguageDropdown = require(\"app/ui/language_dropdown\"), GoogleAnalytics = require(\"app/ui/google\"), ImpressionCookies = require(\"app/ui/impression_cookies\"), PromotedLogger = require(\"app/data/promoted_logger\"), MessageDrawer = require(\"app/ui/message_drawer\"), Tooltips = require(\"app/ui/tooltips\"), TTFTNavigation = require(\"app/data/ttft_navigation\"), cookie = require(\"app/utils/cookie\"), querystring = require(\"app/utils/querystring\"), userInfo = require(\"app/data/user_info\"), ARIAEventLogger = require(\"app/ui/aria_event_logger\"), ttftNavigationEnabled = !1, LOG_METHODS = [\"log\",\"warn\",\"debug\",\"info\",], NO_OP = function() {\n        \n        }, initialLoginTime = 0;\n        module.exports = function(b) {\n            var c = b.environment, d = (([\"production\",\"preflight\",].indexOf(c) > -1));\n            shimConsole(d), authToken.set(b.formAuthenticityToken), userInfo.set(b), ImpressionCookies.attachTo(JSBNG__document, {\n                noTeardown: !0\n            }), GoogleAnalytics.attachTo(JSBNG__document, {\n                noTeardown: !0\n            }), scribing(b), PromotedLogger.attachTo(JSBNG__document, {\n                noTeardown: !0\n            });\n            var e = ((!!window.JSBNG__history && !!JSBNG__history.pushState));\n            ((((b.pushState && e)) && NavigationUI.attachTo(JSBNG__document, {\n                viewContainer: b.viewContainer,\n                noTeardown: !0\n            }))), NavigationData.attachTo(JSBNG__document, {\n                init_data: b,\n                pushState: b.pushState,\n                pushStateSupported: e,\n                pushStatePageLimit: b.pushStatePageLimit,\n                assetsBasePath: b.assetsBasePath,\n                pushStateRequestHeaders: b.pushStateRequestHeaders,\n                viewContainer: b.viewContainer,\n                noTeardown: !0\n            }), Tooltips.attachTo(JSBNG__document, {\n                noTeardown: !0\n            }), MessageDrawer.attachTo(\"#message-drawer\", {\n                noTeardown: !0\n            }), ARIAEventLogger.attachTo(JSBNG__document, {\n                noTeardown: !0\n            }), ((b.loggedIn || LanguageDropdown.attachTo(\".js-language-dropdown\"))), ((((b.initialState && b.initialState.ttft_navigation)) && (ttftNavigationEnabled = !0))), ((ttftNavigationEnabled && TTFTNavigation.attachTo(JSBNG__document, {\n                pageName: b.pageName,\n                sectionName: b.sectionName\n            }))), ((b.loggedIn && (initialLoginTime = getLoginTime(), JSBNG__setInterval(verifySession, 10000))));\n        };\n    });\n    define(\"app/ui/with_position\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function Position() {\n            this.adjacent = function(a, b, c) {\n                var d, e;\n                c = ((c || {\n                })), d = e = b.offset(), e.gravity = c.gravity, e.weight = c.weight;\n                var f = {\n                    height: b.JSBNG__outerHeight(),\n                    width: b.JSBNG__outerWidth()\n                }, g = {\n                    height: a.JSBNG__outerHeight(),\n                    width: a.JSBNG__outerWidth()\n                }, h = {\n                    height: $(window).height(),\n                    width: $(window).width()\n                }, i = {\n                    height: $(\"body\").height(),\n                    width: $(\"body\").width()\n                };\n                return ((e.gravity || (e.gravity = \"vertical\"))), ((((\"vertical,north,south\".indexOf(e.gravity) != -1)) && (((((\"right,left,center\".indexOf(e.weight) == -1)) && (e.weight = ((((d.left > ((h.width / 2)))) ? \"right\" : \"left\"))))), ((((e.gravity == \"vertical\")) && (e.gravity = ((((((d.JSBNG__top + g.height)) > (($(window).scrollTop() + h.height)))) ? \"south\" : \"north\"))))), ((((c.position == \"relative\")) && (d = {\n                    left: 0,\n                    JSBNG__top: 0\n                }, e.left = 0))), ((((e.weight == \"right\")) ? e.left = ((((d.left - g.width)) + f.width)) : ((((e.weight == \"center\")) && (e.left = ((d.left - ((((g.width - f.width)) / 2))))))))), e.JSBNG__top = ((((e.gravity == \"north\")) ? ((d.JSBNG__top + f.height)) : ((d.JSBNG__top - g.height))))))), ((((\"horizontal,east,west\".indexOf(e.gravity) != -1)) && (((((\"top,bottom,center\".indexOf(e.weight) == -1)) && ((((((d.JSBNG__top - ((g.height / 2)))) < 0)) ? e.weight = \"JSBNG__top\" : ((((((d.JSBNG__top + ((g.height / 2)))) > Math.max(h.height, i.height))) ? e.weight = \"bottom\" : e.weight = \"center\")))))), ((((e.gravity == \"horizontal\")) && (e.gravity = ((((((d.left + ((f.width / 2)))) > ((h.width / 2)))) ? \"east\" : \"west\"))))), ((((c.position == \"relative\")) && (d = {\n                    left: 0,\n                    JSBNG__top: 0\n                }, e.JSBNG__top = 0))), ((((e.weight == \"center\")) ? e.JSBNG__top = ((((d.JSBNG__top + ((f.height / 2)))) - ((g.height / 2)))) : ((((e.weight == \"bottom\")) && (e.JSBNG__top = ((((d.JSBNG__top - g.height)) + f.height))))))), e.left = ((((e.gravity == \"west\")) ? ((d.left + f.width)) : ((d.left - g.width))))))), e;\n            };\n        };\n    ;\n        module.exports = Position;\n    });\n    define(\"app/ui/with_scrollbar_width\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n        function ScrollbarWidth() {\n            this.calculateScrollbarWidth = function() {\n                if ((($(\"#scrollbar-width\").length > 0))) {\n                    return;\n                }\n            ;\n            ;\n                var a = $(\"\\u003Cdiv class=\\\"modal-measure-scrollbar\\\"/\\u003E\").prependTo($(\"body\")), b = $(\"\\u003Cdiv class=\\\"inner\\\"/\\u003E\").appendTo(a), c = ((a.width() - b.width()));\n                a.remove(), $(\"head\").append(((((((((\"\\u003Cstyle id=\\\"scrollbar-width\\\"\\u003E        .compensate-for-scrollbar,        .modal-enabled,        .modal-enabled .global-nav-inner,        .profile-editing,        .profile-editing .global-nav-inner,        .gallery-enabled,        .grid-enabled,        .grid-enabled .global-nav-inner,        .gallery-enabled .global-nav-inner {          margin-right: \" + c)) + \"px      }         .grid-header {          right: \")) + c)) + \"px      }      \\u003C/style\\u003E\")));\n            };\n        };\n    ;\n        module.exports = ScrollbarWidth;\n    });\n    deferred(\"$lib/jquery.JSBNG__event.drag.js\", function() {\n        (function($) {\n            $.fn.drag = function(a, b, c) {\n                var d = ((((typeof a == \"string\")) ? a : \"\")), e = (($.isFunction(a) ? a : (($.isFunction(b) ? b : null))));\n                return ((((d.indexOf(\"drag\") !== 0)) && (d = ((\"drag\" + d))))), c = ((((((a == e)) ? b : c)) || {\n                })), ((e ? this.bind(d, c, e) : this.trigger(d)));\n            };\n            var a = $.JSBNG__event, b = a.special, c = b.drag = {\n                defaults: {\n                    which: 1,\n                    distance: 0,\n                    not: \":input\",\n                    handle: null,\n                    relative: !1,\n                    drop: !0,\n                    click: !1\n                },\n                datakey: \"dragdata\",\n                livekey: \"livedrag\",\n                add: function(b) {\n                    var d = $.data(this, c.datakey), e = ((b.data || {\n                    }));\n                    d.related += 1, ((((!d.live && b.selector)) && (d.live = !0, a.add(this, ((\"draginit.\" + c.livekey)), c.delegate)))), $.each(c.defaults, function(a, b) {\n                        ((((e[a] !== undefined)) && (d[a] = e[a])));\n                    });\n                },\n                remove: function() {\n                    $.data(this, c.datakey).related -= 1;\n                },\n                setup: function() {\n                    if ($.data(this, c.datakey)) {\n                        return;\n                    }\n                ;\n                ;\n                    var b = $.extend({\n                        related: 0\n                    }, c.defaults);\n                    $.data(this, c.datakey, b), a.add(this, \"mousedown\", c.init, b), ((this.JSBNG__attachEvent && this.JSBNG__attachEvent(\"JSBNG__ondragstart\", c.dontstart)));\n                },\n                teardown: function() {\n                    if ($.data(this, c.datakey).related) {\n                        return;\n                    }\n                ;\n                ;\n                    $.removeData(this, c.datakey), a.remove(this, \"mousedown\", c.init), a.remove(this, \"draginit\", c.delegate), c.textselect(!0), ((this.JSBNG__detachEvent && this.JSBNG__detachEvent(\"JSBNG__ondragstart\", c.dontstart)));\n                },\n                init: function(d) {\n                    var e = d.data, f;\n                    if (((((e.which > 0)) && ((d.which != e.which))))) {\n                        return;\n                    }\n                ;\n                ;\n                    if ($(d.target).is(e.not)) {\n                        return;\n                    }\n                ;\n                ;\n                    if (((e.handle && !$(d.target).closest(e.handle, d.currentTarget).length))) {\n                        return;\n                    }\n                ;\n                ;\n                    e.propagates = 1, e.interactions = [c.interaction(this, e),], e.target = d.target, e.pageX = d.pageX, e.pageY = d.pageY, e.dragging = null, f = c.hijack(d, \"draginit\", e);\n                    if (!e.propagates) {\n                        return;\n                    }\n                ;\n                ;\n                    return f = c.flatten(f), ((((f && f.length)) && (e.interactions = [], $.each(f, function() {\n                        e.interactions.push(c.interaction(this, e));\n                    })))), e.propagates = e.interactions.length, ((((((e.drop !== !1)) && b.drop)) && b.drop.handler(d, e))), c.textselect(!1), a.add(JSBNG__document, \"mousemove mouseup\", c.handler, e), !1;\n                },\n                interaction: function(a, b) {\n                    return {\n                        drag: a,\n                        callback: new c.callback,\n                        droppable: [],\n                        offset: (($(a)[((b.relative ? \"position\" : \"offset\"))]() || {\n                            JSBNG__top: 0,\n                            left: 0\n                        }))\n                    };\n                },\n                handler: function(d) {\n                    var e = d.data;\n                    switch (d.type) {\n                      case ((!e.dragging && \"mousemove\")):\n                        if (((((Math.pow(((d.pageX - e.pageX)), 2) + Math.pow(((d.pageY - e.pageY)), 2))) < Math.pow(e.distance, 2)))) {\n                            break;\n                        }\n                    ;\n                    ;\n                        d.target = e.target, c.hijack(d, \"dragstart\", e), ((e.propagates && (e.dragging = !0)));\n                      case \"mousemove\":\n                        if (e.dragging) {\n                            c.hijack(d, \"drag\", e);\n                            if (e.propagates) {\n                                ((((((e.drop !== !1)) && b.drop)) && b.drop.handler(d, e)));\n                                break;\n                            }\n                        ;\n                        ;\n                            d.type = \"mouseup\";\n                        }\n                    ;\n                    ;\n                    ;\n                      case \"mouseup\":\n                        a.remove(JSBNG__document, \"mousemove mouseup\", c.handler), ((e.dragging && (((((((e.drop !== !1)) && b.drop)) && b.drop.handler(d, e))), c.hijack(d, \"dragend\", e)))), c.textselect(!0), ((((((e.click === !1)) && e.dragging)) && ($.JSBNG__event.triggered = !0, JSBNG__setTimeout(function() {\n                            $.JSBNG__event.triggered = !1;\n                        }, 20), e.dragging = !1)));\n                    };\n                ;\n                },\n                delegate: function(b) {\n                    var d = [], e, f = (($.data(this, \"events\") || {\n                    }));\n                    return $.each(((f.live || [])), function(f, g) {\n                        if (((g.preType.indexOf(\"drag\") !== 0))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        e = $(b.target).closest(g.selector, b.currentTarget)[0];\n                        if (!e) {\n                            return;\n                        }\n                    ;\n                    ;\n                        a.add(e, ((((g.origType + \".\")) + c.livekey)), g.origHandler, g.data), (((($.inArray(e, d) < 0)) && d.push(e)));\n                    }), ((d.length ? $(d).bind(((\"dragend.\" + c.livekey)), function() {\n                        a.remove(this, ((\".\" + c.livekey)));\n                    }) : !1));\n                },\n                hijack: function(b, d, e, f, g) {\n                    if (!e) {\n                        return;\n                    }\n                ;\n                ;\n                    var h = {\n                        JSBNG__event: b.originalEvent,\n                        type: b.type\n                    }, i = ((d.indexOf(\"drop\") ? \"drag\" : \"drop\")), j, k = ((f || 0)), l, m, n, o = ((isNaN(f) ? e.interactions.length : f));\n                    b.type = d, b.originalEvent = null, e.results = [];\n                    do if (l = e.interactions[k]) {\n                        if (((((d !== \"dragend\")) && l.cancelled))) {\n                            continue;\n                        }\n                    ;\n                    ;\n                        n = c.properties(b, e, l), l.results = [], $(((((g || l[i])) || e.droppable))).each(function(f, g) {\n                            n.target = g, j = ((g ? a.handle.call(g, b, n) : null)), ((((j === !1)) ? (((((i == \"drag\")) && (l.cancelled = !0, e.propagates -= 1))), ((((d == \"drop\")) && (l[i][f] = null)))) : ((((d == \"dropinit\")) && l.droppable.push(((c.element(j) || g))))))), ((((d == \"dragstart\")) && (l.proxy = $(((c.element(j) || l.drag)))[0]))), l.results.push(j), delete b.result;\n                            if (((d !== \"dropinit\"))) {\n                                return j;\n                            }\n                        ;\n                        ;\n                        }), e.results[k] = c.flatten(l.results), ((((d == \"dropinit\")) && (l.droppable = c.flatten(l.droppable)))), ((((((d == \"dragstart\")) && !l.cancelled)) && n.update()));\n                    }\n                     while (((++k < o)));\n                    return b.type = h.type, b.originalEvent = h.JSBNG__event, c.flatten(e.results);\n                },\n                properties: function(a, b, d) {\n                    var e = d.callback;\n                    return e.drag = d.drag, e.proxy = ((d.proxy || d.drag)), e.startX = b.pageX, e.startY = b.pageY, e.deltaX = ((a.pageX - b.pageX)), e.deltaY = ((a.pageY - b.pageY)), e.originalX = d.offset.left, e.originalY = d.offset.JSBNG__top, e.offsetX = ((a.pageX - ((b.pageX - e.originalX)))), e.offsetY = ((a.pageY - ((b.pageY - e.originalY)))), e.drop = c.flatten(((d.drop || [])).slice()), e.available = c.flatten(((d.droppable || [])).slice()), e;\n                },\n                element: function(a) {\n                    if (((a && ((a.jquery || ((a.nodeType == 1))))))) {\n                        return a;\n                    }\n                ;\n                ;\n                },\n                flatten: function(a) {\n                    return $.map(a, function(a) {\n                        return ((((a && a.jquery)) ? $.makeArray(a) : ((((a && a.length)) ? c.flatten(a) : a))));\n                    });\n                },\n                textselect: function(a) {\n                    $(JSBNG__document)[((a ? \"unbind\" : \"bind\"))](\"selectstart\", c.dontstart).attr(\"unselectable\", ((a ? \"off\" : \"JSBNG__on\"))).css(\"MozUserSelect\", ((a ? \"\" : \"none\")));\n                },\n                dontstart: function() {\n                    return !1;\n                },\n                callback: function() {\n                \n                }\n            };\n            c.callback.prototype = {\n                update: function() {\n                    ((((b.drop && this.available.length)) && $.each(this.available, function(a) {\n                        b.drop.locate(this, a);\n                    })));\n                }\n            }, b.draginit = b.dragstart = b.dragend = c;\n        })(jQuery);\n    });\n    define(\"app/ui/with_dialog\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_scrollbar_width\",\"$lib/jquery.JSBNG__event.drag.js\",], function(module, require, exports) {\n        function withDialog() {\n            compose.mixin(this, [withScrollbarWidth,]), this.center = function(a) {\n                var b = $(window), c = {\n                    JSBNG__top: parseInt(((((b.height() - a.JSBNG__outerHeight())) / 2))),\n                    left: parseInt(((((b.width() - a.JSBNG__outerWidth())) / 2)))\n                };\n                return c;\n            }, this.windowHeight = function() {\n                return $(window).height();\n            }, this.scrollTop = function() {\n                return $(window).scrollTop();\n            }, this.position = function() {\n                var a = this.center(this.$dialog);\n                ((((this.attr.JSBNG__top != null)) && (a.JSBNG__top = this.attr.JSBNG__top))), ((((this.attr.left != null)) && (a.left = this.attr.left))), ((((this.attr.maxTop != null)) && (a.JSBNG__top = Math.min(a.JSBNG__top, this.attr.maxTop)))), ((((this.attr.maxLeft != null)) && (a.left = Math.min(a.left, this.attr.maxLeft)))), (((($(\"body\").attr(\"dir\") === \"rtl\")) ? this.$dialog.css({\n                    JSBNG__top: a.JSBNG__top,\n                    right: a.left\n                }) : this.$dialog.css({\n                    JSBNG__top: a.JSBNG__top,\n                    left: a.left\n                }))), ((((this.windowHeight() < this.$dialog.JSBNG__outerHeight())) ? (this.$dialog.css(\"position\", \"absolute\"), this.$dialog.css(\"JSBNG__top\", ((this.scrollTop() + \"px\")))) : ((((this.attr.fixed === !1)) && this.$dialog.css(\"JSBNG__top\", ((a.JSBNG__top + this.scrollTop())))))));\n            }, this.resize = function() {\n                ((this.attr.width && this.$dialog.css(\"width\", this.attr.width))), ((this.attr.height && this.$dialog.css(\"height\", this.attr.height)));\n            }, this.applyDraggability = function() {\n                if (!this.$dialog.hasClass(\"draggable\")) {\n                    return;\n                }\n            ;\n            ;\n                var a = this, b = {\n                    relative: !0,\n                    handle: \".modal-header\"\n                }, c = function(a, b) {\n                    (((($(\"body\").attr(\"dir\") === \"rtl\")) ? this.$dialog.css({\n                        JSBNG__top: b.offsetY,\n                        right: ((b.originalX - b.deltaX))\n                    }) : this.$dialog.css({\n                        JSBNG__top: b.offsetY,\n                        left: b.offsetX\n                    })));\n                };\n                this.$dialog.drag(\"start\", function() {\n                    a.$dialog.addClass(\"unselectable\"), $(\"#doc\").addClass(\"unselectable\");\n                }), this.$dialog.drag(\"end\", function() {\n                    a.$dialog.removeClass(\"unselectable\"), $(\"#doc\").removeClass(\"unselectable\");\n                }), this.$dialog.drag(c.bind(this), b);\n            }, this.setFocus = function() {\n                var a = this.$dialog.JSBNG__find(\".primary-btn\");\n                ((((a.length && a.is(\":not(:disabled)\"))) && a.JSBNG__focus()));\n            }, this.hasFocus = function() {\n                return (($.contains(this.node, JSBNG__document.activeElement) || ((this.node == JSBNG__document.activeElement))));\n            }, this.JSBNG__blur = function() {\n                ((this.hasFocus() && JSBNG__document.activeElement.JSBNG__blur()));\n            }, this.isOpen = function() {\n                if (((((window.DEBUG && window.DEBUG.enabled)) && ((this.openState !== this.$dialogContainer.is(\":visible\")))))) {\n                    throw new Error(\"Dialog markup and internal openState variable are out of sync.\");\n                }\n            ;\n            ;\n                return this.openState;\n            }, this.dialogVisible = function() {\n                this.trigger(\"uiDialogFadeInComplete\");\n            }, this.open = function() {\n                ((this.isOpen() || (this.openState = !0, this.$dialogContainer.fadeIn(\"fast\", this.dialogVisible.bind(this)), this.calculateScrollbarWidth(), $(\"body\").addClass(\"modal-enabled\"), this.resize(), this.position(), this.applyDraggability(), this.setFocus(), this.trigger(\"uiCloseDropdowns\"), this.trigger(\"uiDialogOpened\"))));\n            }, this.afterClose = function() {\n                (($(\".modal-container:visible\").length || $(\"body\").removeClass(\"modal-enabled\"))), this.openState = !1, this.trigger(\"uiDialogClosed\");\n            }, this.blurAndClose = function() {\n                this.JSBNG__blur(), this.$dialogContainer.fadeOut(\"fast\", this.afterClose.bind(this));\n            }, this.blurAndCloseImmediately = function() {\n                this.JSBNG__blur(), this.$dialogContainer.hide(), this.afterClose();\n            }, this.close = function() {\n                if (!this.isOpen()) {\n                    return;\n                }\n            ;\n            ;\n                this.trigger(this.node, {\n                    type: \"uiDialogCloseRequested\",\n                    defaultBehavior: \"blurAndClose\"\n                });\n            }, this.closeImmediately = function() {\n                ((this.isOpen() && this.blurAndCloseImmediately()));\n            }, this.triggerClicked = function(a) {\n                a.preventDefault(), this.open();\n            }, this.after(\"initialize\", function() {\n                this.openState = !1, this.$dialogContainer = ((this.$dialog || this.$node)), this.$dialog = this.$dialogContainer.JSBNG__find(\"div.modal\"), this.attr.closeSelector = ((this.attr.closeSelector || \".modal-close, .close-modal-background-target\")), this.JSBNG__on(this.select(\"closeSelector\"), \"click\", this.close), this.JSBNG__on(JSBNG__document, \"uiShortcutEsc uiCloseDialog\", this.close), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.closeImmediately), ((this.attr.triggerSelector && this.JSBNG__on(this.attr.triggerSelector, \"click\", this.triggerClicked)));\n            });\n        };\n    ;\n        var compose = require(\"core/compose\"), withScrollbarWidth = require(\"app/ui/with_scrollbar_width\");\n        require(\"$lib/jquery.JSBNG__event.drag.js\"), module.exports = withDialog;\n    });\n    define(\"app/ui/dialogs/signin_or_signup\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",], function(module, require, exports) {\n        function signinOrSignupDialog() {\n            this.defaultAttrs({\n                dialogSelector: \"#signin-or-signup\",\n                signupOnlyScreenNameSelector: \".modal-title.signup-only span\"\n            }), this.openSigninDialog = function(a, b) {\n                ((b.signUpOnly ? (this.$node.addClass(\"signup-only-dialog\"), this.select(\"dialogSelector\").addClass(\"signup-only\").removeClass(\"not-signup-only\"), ((b.screenName && this.select(\"signupOnlyScreenNameSelector\").text(b.screenName)))) : (this.$node.removeClass(\"signup-only-dialog\"), this.select(\"dialogSelector\").addClass(\"not-signup-only\").removeClass(\"signup-only\")))), this.open(), this.trigger(\"uiSigninOrSignupDialogOpened\");\n            }, this.notifyClosed = function() {\n                this.trigger(\"uiSigninOrSignupDialogClosed\");\n            }, this.after(\"initialize\", function(a) {\n                this.$dialog = this.select(\"dialogSelector\"), this.$dialog.JSBNG__find(\"form.signup\").bind(\"submit\", function() {\n                    this.trigger(\"uiSignupButtonClicked\");\n                }.bind(this)), this.JSBNG__on(JSBNG__document, \"uiOpenSigninOrSignupDialog\", this.openSigninDialog), this.JSBNG__on(JSBNG__document, \"uiCloseSigninOrSignupDialog\", this.close), this.JSBNG__on(this.$node, \"uiDialogClosed\", this.notifyClosed);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), SigninOrSignupDialog = defineComponent(signinOrSignupDialog, withDialog, withPosition);\n        module.exports = SigninOrSignupDialog;\n    });\n    define(\"app/ui/forms/input_with_placeholder\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function inputWithPlaceholder() {\n            this.defaultAttrs({\n                hidePlaceholderClassName: \"hasome\",\n                placeholder: \".holder\",\n                elementType: \"input\"\n            }), this.focusInput = function(a) {\n                this.$input.JSBNG__focus();\n            }, this.inputBlurred = function(a) {\n                if (((this.$input.val() == \"\"))) {\n                    return this.$node.removeClass(this.attr.hidePlaceholderClassName), !0;\n                }\n            ;\n            ;\n            }, this.checkForChange = function() {\n                ((this.inputBlurred() || this.inputChanged()));\n            }, this.inputChanged = function(a) {\n                this.$node.addClass(this.attr.hidePlaceholderClassName);\n            }, this.after(\"initialize\", function() {\n                this.$input = this.select(\"elementType\");\n                if (((this.$input.length != 1))) {\n                    throw new Error(\"InputWithPlaceholder must be attached to a container with exactly one input element inside of it\");\n                }\n            ;\n            ;\n                this.$placeholder = this.select(\"placeholder\");\n                if (((this.$placeholder.length != 1))) {\n                    throw new Error(\"InputWithPlaceholder must be attached to a container with exactly one placeholder element inside of it\");\n                }\n            ;\n            ;\n                this.JSBNG__on(this.$input, \"JSBNG__blur\", this.inputBlurred), this.JSBNG__on(this.$input, \"keydown paste\", this.inputChanged), this.JSBNG__on(this.$placeholder, \"click\", this.focusInput), this.JSBNG__on(this.$input, \"uiInputChanged\", this.checkForChange), this.checkForChange();\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), InputWithPlaceholder = defineComponent(inputWithPlaceholder);\n        module.exports = InputWithPlaceholder;\n    });\n    define(\"app/ui/signup_call_out\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function signupCallOut() {\n            this.after(\"initialize\", function() {\n                this.$node.bind(\"submit\", function() {\n                    this.trigger(\"uiSignupButtonClicked\");\n                }.bind(this));\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), SignupCallOut = defineComponent(signupCallOut);\n        module.exports = SignupCallOut;\n    });\n    define(\"app/data/signup_click_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n        function loggedOutScribe() {\n            this.scribeSignupClick = function(a, b) {\n                this.scribe({\n                    action: \"signup_click\"\n                }, b);\n            }, this.scribeSigninOrSignupDialogOpened = function(a, b) {\n                this.scribe({\n                    action: \"open\"\n                }, b);\n            }, this.scribeSigninOrSignupDialogClosed = function(a, b) {\n                this.scribe({\n                    action: \"close\"\n                }, b);\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"uiSignupButtonClicked\", this.scribeSignupClick), this.JSBNG__on(\"uiSigninOrSignupDialogOpened\", this.scribeSigninOrSignupDialogOpened), this.JSBNG__on(\"uiSigninOrSignupDialogClosed\", this.scribeSigninOrSignupDialogClosed);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n        module.exports = defineComponent(loggedOutScribe, withScribe);\n    });\n    define(\"app/ui/signup/stream_end_signup_module\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n        function streamEndSignupModule() {\n            this.triggerSignupClick = function() {\n                this.trigger(\"uiSignupButtonClicked\");\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", this.triggerSignupClick);\n            });\n        };\n    ;\n        var defineComponent = require(\"core/component\");\n        module.exports = defineComponent(streamEndSignupModule);\n    });\n    define(\"app/boot/logged_out\", [\"module\",\"require\",\"exports\",\"app/ui/dialogs/signin_or_signup\",\"app/ui/forms/input_with_placeholder\",\"app/ui/signup_call_out\",\"app/data/signup_click_scribe\",\"app/ui/signup/stream_end_signup_module\",], function(module, require, exports) {\n        var SigninOrSignupDialog = require(\"app/ui/dialogs/signin_or_signup\"), InputWithPlaceholder = require(\"app/ui/forms/input_with_placeholder\"), SignupCallOut = require(\"app/ui/signup_call_out\"), LoggedOutScribe = require(\"app/data/signup_click_scribe\"), StreamEndSignupModule = require(\"app/ui/signup/stream_end_signup_module\");\n        module.exports = function(b) {\n            InputWithPlaceholder.attachTo(\"#signin-or-signup-dialog .holding, .profile-signup-call-out .holding, .search-signup-call-out .holding\"), SigninOrSignupDialog.attachTo(\"#signin-or-signup-dialog\", {\n                eventData: {\n                    scribeContext: {\n                        component: \"auth_dialog\",\n                        element: \"unauth_follow\"\n                    }\n                }\n            }), SignupCallOut.attachTo(\".signup-call-out form.signup\", {\n                eventData: {\n                    scribeContext: {\n                        component: \"signup_callout\",\n                        element: \"form\"\n                    }\n                }\n            }), StreamEndSignupModule.attachTo(\".stream-end .signup-btn\", {\n                eventData: {\n                    scribeContext: {\n                        component: \"stream_end\",\n                        element: \"signup_button\"\n                    }\n                }\n            }), LoggedOutScribe.attachTo(JSBNG__document);\n        };\n    });\n    define(\"app/utils/ttft\", [\"module\",\"require\",\"exports\",\"app/data/scribe_transport\",], function(module, require, exports) {\n        function scribeTTFTData(a, b) {\n            if (((((!recorded && window.JSBNG__performance)) && a))) {\n                recorded = !0;\n                var c = a;\n                c.did_load = b, c.web_timings = $.extend({\n                }, window.JSBNG__performance.timing), ((c.web_timings.toJSON && delete c.web_timings.toJSON)), c.navigation = {\n                    type: window.JSBNG__performance.navigation.type,\n                    redirectCount: window.JSBNG__performance.navigation.redirectCount\n                }, c.referrer = JSBNG__document.referrer, scribeTransport.send(c, \"swift_time_to_first_tweet\", !1), using(\"app/utils/params\", function(a) {\n                    if (a.fromQuery(window.JSBNG__location).show_ttft) {\n                        var b = c.web_timings;\n                        $(JSBNG__document).trigger(\"uiShowError\", {\n                            message: ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\"\\u003Ctable width=80%\\u003E\\u003Cthead\\u003E\\u003Cth\\u003Emilestone\\u003Cth\\u003Etime\\u003Cth\\u003Ecumulative\\u003C/thead\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003Econnect:       \\u003Ctd\\u003E\" + ((b.connectEnd - b.navigationStart)))) + \"\\u003Ctd\\u003E\")) + ((b.connectEnd - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Eprocess:       \\u003Ctd\\u003E\")) + ((b.responseStart - b.connectEnd)))) + \"\\u003Ctd\\u003E\")) + ((b.responseStart - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Eresponse:      \\u003Ctd\\u003E\")) + ((b.responseEnd - b.responseStart)))) + \"\\u003Ctd\\u003E\")) + ((b.responseEnd - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Erender:        \\u003Ctd\\u003E\")) + ((c.client_record_time - b.responseEnd)))) + \"\\u003Ctd\\u003E\")) + ((c.client_record_time - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Einteractivity: \\u003Ctd\\u003E\")) + ((c.aq_empty_time - c.client_record_time)))) + \"\\u003Ctd\\u003E\")) + ((c.aq_empty_time - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Eajax_complete: \\u003Ctd\\u003E\")) + ((c.ajax_complete_time - c.aq_empty_time)))) + \"\\u003Ctd\\u003E\")) + ((c.ajax_complete_time - b.navigationStart)))) + \"\\u003C/tr\\u003E\")) + \"\\u003Ctr\\u003E\\u003Ctd\\u003Eajax_count:    \\u003Ctd\\u003E\")) + c.ajax_count)) + \"\\u003C/tr\\u003E\")) + \"\\u003C/tbody\\u003E\\u003C/table\\u003E\"))\n                        });\n                    }\n                ;\n                ;\n                });\n                try {\n                    delete window.ttft;\n                } catch (d) {\n                    window.ttft = undefined;\n                };\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n        function scribeMilestones(a) {\n            if (!window.ttftData) {\n                return;\n            }\n        ;\n        ;\n            var b = !0;\n            for (var c = 0; ((c < requiredMilestones.length)); ++c) {\n                if (!((requiredMilestones[c] in window.ttftData))) {\n                    b = !1;\n                    break;\n                }\n            ;\n            ;\n            };\n        ;\n            ((((a || b)) && scribeTTFTData(window.ttftData, b)));\n        };\n    ;\n        function onAjaxComplete(a, b, c) {\n            if (((c && ((c.url in newAjaxRequests))))) {\n                for (var d = 0; ((d < newAjaxRequests[c.url].length)); d++) {\n                    if (((c === newAjaxRequests[c.url][d]))) {\n                        newAjaxRequests[c.url].splice(d, 1);\n                        return;\n                    }\n                ;\n                ;\n                };\n            }\n        ;\n        ;\n            pendingAjaxCount--;\n            if (((((pendingAjaxCount == 0)) || (($.active == 0))))) {\n                unbindAjaxHandlers(), recordPendingAjaxComplete();\n            }\n        ;\n        ;\n        };\n    ;\n        function onAjaxSend(a, b, c) {\n            ((((c && c.url)) && (((newAjaxRequests[c.url] || (newAjaxRequests[c.url] = []))), newAjaxRequests[c.url].push(c))));\n        };\n    ;\n        function recordPendingAjaxComplete() {\n            recordMilestone(\"ajax_complete_time\", (new JSBNG__Date).getTime());\n        };\n    ;\n        function bindAjaxHandlers() {\n            $(JSBNG__document).bind(\"ajaxComplete\", onAjaxComplete), $(JSBNG__document).bind(\"ajaxSend\", onAjaxSend);\n        };\n    ;\n        function unbindAjaxHandlers() {\n            $(JSBNG__document).unbind(\"ajaxComplete\", onAjaxComplete), $(JSBNG__document).unbind(\"ajaxSend\", onAjaxSend);\n        };\n    ;\n        function startAjaxTracking() {\n            startingAjaxCount = pendingAjaxCount = $.active, recordMilestone(\"ajax_count\", startingAjaxCount), ((((startingAjaxCount == 0)) ? recordPendingAjaxComplete() : (unbindAjaxHandlers(), bindAjaxHandlers())));\n        };\n    ;\n        function recordMilestone(a, b) {\n            ((((window.ttftData && !window.ttftData[a])) && (window.ttftData[a] = b))), scribeMilestones(!1);\n        };\n    ;\n        var scribeTransport = require(\"app/data/scribe_transport\"), recorded = !1, requiredMilestones = [\"page\",\"client_record_time\",\"aq_empty_time\",\"ajax_complete_time\",\"ajax_count\",], startingAjaxCount = 0, pendingAjaxCount = 0, newAjaxRequests = {\n        };\n        window.ttft = {\n            recordMilestone: recordMilestone\n        }, scribeMilestones(!1), JSBNG__setTimeout(function() {\n            scribeMilestones(!0);\n        }, 45000), module.exports = {\n            startAjaxTracking: startAjaxTracking\n        };\n    });\n    function makePromptSpanPage(a) {\n        ((a.length && a.prependTo(\"#page-container\").css({\n            padding: 0,\n            border: 0\n        })));\n    };\n;\n    using.path = $(\"#swift-module-path\").val();\n    makePromptSpanPage($(\"div[data-prompt-id=\\\"262\\\"]\"));\n    ((using.aliases && using.bundles.push(using.aliases)));\n    $(\".loadrunner-alias\").each(function(a, b) {\n        using.bundles.push(JSON.parse($(b).val()));\n    });\n    using(\"debug/debug\", function(a) {\n        function b() {\n            function d() {\n                c.forEach(function(a) {\n                    a(b);\n                });\n                var a = $(JSBNG__document);\n                a.JSBNG__on(\"uiSwiftLoaded uiPageChanged\", function() {\n                    window.__swift_loaded = !0;\n                });\n                a.JSBNG__on(\"uiBeforeNewPageLoad\", function() {\n                    window.__swift_loaded = !1;\n                });\n                $(\"html\").removeClass(b.baseFoucClass);\n                a.trigger(\"uiSwiftLoaded\");\n                ((window.swiftActionQueue && window.swiftActionQueue.flush($)));\n                if (window.ttftData) {\n                    ((window.ttft && window.ttft.recordMilestone(\"aq_empty_time\", (new JSBNG__Date).getTime())));\n                    using(\"app/utils/ttft\", function(a) {\n                        a.startAjaxTracking();\n                    });\n                }\n            ;\n            ;\n            };\n        ;\n            var a = $(\"#init-data\").val(), b = JSON.parse(a), c = $.makeArray(arguments);\n            ((b.moreCSSBundle ? using(((\"css!\" + b.moreCSSBundle)), d) : d()));\n        };\n    ;\n        if ($(\"html\").hasClass(\"debug\")) {\n            window.DEBUG = a;\n            a.enable(!0);\n        }\n         else a.enable(!1);\n    ;\n    ;\n        var c = $(\"input.swift-boot-module\").map(function(a, b) {\n            return $(b).val();\n        }).toArray();\n        using.apply(this, c.concat(b));\n    });\n} catch (JSBNG_ex) {\n\n};");
// 1495
geval("define(\"app/data/tweet_actions\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function tweetActions() {\n        this.defaultAttrs({\n            successFromEndpoints: {\n                destroy: \"dataDidDeleteTweet\",\n                retweet: \"dataDidRetweet\",\n                favorite: \"dataDidFavoriteTweet\",\n                unretweet: \"dataDidUnretweet\",\n                unfavorite: \"dataDidUnfavoriteTweet\"\n            },\n            errorsFromEndpoints: {\n                destroy: \"dataFailedToDeleteTweet\",\n                retweet: \"dataFailedToRetweet\",\n                favorite: \"dataFailedToFavoriteTweet\",\n                unretweet: \"dataFailedToUnretweet\",\n                unfavorite: \"dataFailedToUnfavoriteTweet\"\n            }\n        }), this.takeAction = function(a, b, c) {\n            var d = function(b) {\n                ((((b && b.message)) && this.trigger(\"uiShowMessage\", {\n                    message: b.message\n                }))), this.trigger(this.attr.successFromEndpoints[a], b), this.trigger(JSBNG__document, \"dataGotProfileStats\", {\n                    stats: b.profile_stats\n                });\n            }, e;\n            ((((((((a === \"favorite\")) || ((a === \"retweet\")))) && ((\"retweetId\" in c)))) ? e = {\n                id: c.retweetId\n            } : e = {\n                id: c.id\n            })), ((c.impressionId && (e.impression_id = c.impressionId, ((c.disclosureType && (e.earned = ((c.disclosureType == \"earned\"))))))));\n            var f = {\n                destroy: \"DELETE\",\n                unretweet: \"DELETE\"\n            };\n            this.JSONRequest({\n                url: ((\"/i/tweet/\" + a)),\n                data: e,\n                eventData: c,\n                success: d.bind(this),\n                error: this.attr.errorsFromEndpoints[a]\n            }, ((f[a] || \"POST\")));\n        }, this.hitEndpoint = function(a) {\n            return this.takeAction.bind(this, a);\n        }, this.getTweet = function(a, b) {\n            var c = {\n                id: b.id\n            };\n            this.get({\n                url: \"/i/tweet/html\",\n                data: c,\n                eventData: b,\n                success: \"dataGotTweet\",\n                error: $.noop\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiDidRetweet\", this.hitEndpoint(\"retweet\")), this.JSBNG__on(\"uiDidUnretweet\", this.hitEndpoint(\"unretweet\")), this.JSBNG__on(\"uiDidDeleteTweet\", this.hitEndpoint(\"destroy\")), this.JSBNG__on(\"uiDidFavoriteTweet\", this.hitEndpoint(\"favorite\")), this.JSBNG__on(\"uiDidUnfavoriteTweet\", this.hitEndpoint(\"unfavorite\")), this.JSBNG__on(\"uiGetTweet\", this.getTweet);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), TweetActions = defineComponent(tweetActions, withData);\n    module.exports = TweetActions;\n});\ndefine(\"app/ui/expando/with_expanding_containers\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withExpandingContainers() {\n        this.MARGIN_ANIMATION_SPEED = 85, this.DETACHED_MARGIN = 8, this.defaultAttrs({\n            openClass: \"open\",\n            openSelector: \".open\",\n            afterExpandedClass: \"after-expanded\",\n            beforeExpandedClass: \"before-expanded\",\n            marginBreaking: !0\n        }), this.flipClassState = function(a, b, c) {\n            a.filter(((\".\" + b))).removeClass(b).addClass(c);\n        }, this.fixMarginForAdjacentItem = function(a) {\n            $(a.target).next().filter(this.attr.openSelector).css(\"margin-top\", this.DETACHED_MARGIN).prev().addClass(this.attr.beforeExpandedClass);\n        }, this.enterDetachedState = function(a, b) {\n            var c = a.prev(), d = a.next();\n            a.addClass(this.attr.openClass), ((this.attr.marginBreaking && a.animate({\n                marginTop: ((c.length ? this.DETACHED_MARGIN : 0)),\n                marginBottom: ((d.length ? this.DETACHED_MARGIN : 0))\n            }, {\n                duration: ((b ? 0 : this.MARGIN_ANIMATION_SPEED))\n            }))), c.addClass(this.attr.beforeExpandedClass), d.addClass(this.attr.afterExpandedClass);\n        }, this.exitDetachedState = function(a, b) {\n            var c = function() {\n                a.prev().removeClass(this.attr.beforeExpandedClass).end().next().removeClass(this.attr.afterExpandedClass);\n            }.bind(this);\n            a.removeClass(this.attr.openClass), ((this.attr.marginBreaking ? a.animate({\n                marginTop: 0,\n                marginBottom: 0\n            }, {\n                duration: ((b ? 0 : this.MARGIN_ANIMATION_SPEED)),\n                complete: c\n            }) : c()));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiHasInjectedTimelineItem uiShouldFixMargins\", this.fixMarginForAdjacentItem);\n        });\n    };\n;\n    module.exports = withExpandingContainers;\n});\ndefine(\"app/ui/expando/expando_helpers\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var SPEED_COEFFICIENT = 105, expandoHelpers = {\n        buildExpandoStruct: function(a) {\n            var b = a.$tweet, c = b.hasClass(a.originalClass), d = a.preexpanded, e = ((c ? b.closest(a.containingSelector) : b)), f = ((c ? e.get(0) : b.closest(\"li\").get(0))), g = b.closest(a.expansionSelector, f).get(0), h = ((g ? $(g) : $())), i = {\n                $tweet: b,\n                $container: e,\n                $scaffold: h,\n                $ancestors: $(),\n                $descendants: $(),\n                auto_expanded: b.hasClass(\"auto-expanded\"),\n                isTopLevel: c,\n                originalHeight: null,\n                animating: !1,\n                preexpanded: d,\n                skipAnimation: a.skipAnimation,\n                open: ((b.hasClass(a.openedTweetClass) && !d))\n            };\n            return i;\n        },\n        guessGoodSpeed: function() {\n            var a = Math.max.apply(Math, arguments);\n            return Math.round(((((4045 * Math.log(a))) * SPEED_COEFFICIENT)));\n        },\n        getNaturalHeight: function(a) {\n            var b = a.height(), c = a.height(\"auto\").height();\n            return a.height(b), c;\n        },\n        closeAllButPreserveScroll: function(a) {\n            var b = a.$scope.JSBNG__find(a.openSelector);\n            if (!b.length) {\n                return !1;\n            }\n        ;\n        ;\n            var c = $(window).scrollTop(), d = expandoHelpers.firstVisibleItemBelow(a.$scope, a.itemSelector, c);\n            if (((!d || !d.length))) {\n                return !1;\n            }\n        ;\n        ;\n            var e = d.offset().JSBNG__top;\n            b.each(a.callback);\n            var f = d.offset().JSBNG__top, g = ((e - f));\n            return $(window).scrollTop(((c - g))), g;\n        },\n        firstVisibleItemBelow: function(a, b, c) {\n            var d;\n            return a.JSBNG__find(b).each(function() {\n                var a = $(this);\n                if (((a.offset().JSBNG__top >= c))) {\n                    return d = a, !1;\n                }\n            ;\n            ;\n            }), d;\n        }\n    };\n    module.exports = expandoHelpers;\n});\ndefine(\"app/ui/gallery/with_gallery\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function() {\n        this.defaultAttrs({\n            mediaThumbnailSelector: \".media-thumbnail\",\n            previewClass: \"is-preview\"\n        }), this.expandPreview = function(a) {\n            var b = a.closest(this.attr.mediaThumbnailSelector);\n            if (b.hasClass(this.attr.previewClass)) {\n                var c = a.parents(\".tweet.with-media-preview:not(.opened-tweet)\");\n                if (c.length) {\n                    return this.trigger(c, \"uiExpandTweet\"), !0;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            return !1;\n        }, this.openMediaGallery = function(a) {\n            a.preventDefault(), a.stopPropagation();\n            var b = $(a.target);\n            ((this.expandPreview(b) || this.trigger(a.target, \"uiOpenGallery\", {\n                title: \"Photo\"\n            }))), this.trigger(\"uiMediaThumbnailClick\", {\n                url: b.attr(\"data-url\"),\n                mediaType: ((b.hasClass(\"video\") ? \"video\" : \"photo\"))\n            });\n        }, this.after(\"initialize\", function(a) {\n            ((((a.permalinkCardsGallery || a.timelineCardsGallery)) && this.JSBNG__on(\"click\", {\n                mediaThumbnailSelector: this.openMediaGallery\n            })));\n        });\n    };\n});\ndefine(\"app/ui/with_tweet_translation\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/tweet_helper\",\"app/ui/with_interaction_data\",\"app/utils/rtl_text\",\"core/i18n\",], function(module, require, exports) {\n    function withTweetTranslation() {\n        compose.mixin(this, [withInteractionData,]), this.defaultAttrs({\n            tweetSelector: \"div.tweet\",\n            tweetTranslationSelector: \".tweet-translation\",\n            tweetTranslationTextSelector: \".tweet-translation-text\",\n            translateTweetSelector: \".js-translate-tweet\",\n            translateLabelSelector: \".translate-label\",\n            permalinkContainerSelector: \".permalink-tweet-container\",\n            permalinkClass: \"permalink-tweet-container\"\n        }), this.handleTranslateTweetClick = function(a, b) {\n            var c, d;\n            c = $(a.target).closest(this.attr.tweetSelector);\n            if (((((a.type === \"uiTimelineNeedsTranslation\")) && c.closest(this.attr.permalinkContainerSelector).length))) {\n                return;\n            }\n        ;\n        ;\n            ((c.JSBNG__find(this.attr.tweetTranslationSelector).is(\":hidden\") && (d = this.interactionData(c), d.dest = JSBNG__document.documentElement.getAttribute(\"lang\"), this.trigger(c, \"uiNeedsTweetTranslation\", d))));\n        }, this.showTweetTranslation = function(a, b) {\n            var c;\n            ((b.item_html && (c = this.findTweetTranslation(b.id_str), c.JSBNG__find(this.attr.tweetTranslationTextSelector).html(b.item_html), c.show(), ((this.$node.hasClass(this.attr.permalinkClass) && this.$node.JSBNG__find(this.attr.translateTweetSelector).hide())))));\n        }, this.findTweetTranslation = function(a) {\n            var b = this.$node.JSBNG__find(((((((this.attr.tweetSelector + \"[data-tweet-id=\")) + a.replace(/\\D/g, \"\"))) + \"]\")));\n            return b.JSBNG__find(this.attr.tweetTranslationSelector);\n        }, this.showError = function(a, b) {\n            this.trigger(\"uiShowMessage\", {\n                message: _(\"Unable to translate this Tweet. Please try again later.\")\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"dataTweetTranslationSuccess\", this.showTweetTranslation), this.JSBNG__on(JSBNG__document, \"dataTweetTranslationError\", this.showError), this.JSBNG__on(JSBNG__document, \"uiTimelineNeedsTranslation\", this.handleTranslateTweetClick), this.JSBNG__on(\"click\", {\n                translateTweetSelector: this.handleTranslateTweetClick\n            });\n        });\n    };\n;\n    var compose = require(\"core/compose\"), tweetHelper = require(\"app/utils/tweet_helper\"), withInteractionData = require(\"app/ui/with_interaction_data\"), RTLText = require(\"app/utils/rtl_text\"), _ = require(\"core/i18n\");\n    module.exports = withTweetTranslation;\n});\ndefine(\"app/ui/tweets\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_tweet_actions\",\"app/ui/with_user_actions\",\"app/ui/gallery/with_gallery\",\"app/ui/with_item_actions\",\"app/ui/with_tweet_translation\",], function(module, require, exports) {\n    var defineComponent = require(\"core/component\"), withTweetActions = require(\"app/ui/with_tweet_actions\"), withUserActions = require(\"app/ui/with_user_actions\"), withGallery = require(\"app/ui/gallery/with_gallery\"), withItemActions = require(\"app/ui/with_item_actions\"), withTweetTranslation = require(\"app/ui/with_tweet_translation\");\n    module.exports = defineComponent(withUserActions, withTweetActions, withGallery, withItemActions, withTweetTranslation);\n});\ndefine(\"app/ui/tweet_injector\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function tweetInjector() {\n        this.defaultAttrs({\n            descendantClass: \"descendant\",\n            descendantScribeContext: \"replies\",\n            tweetSelector: \".tweet\"\n        }), this.insertTweet = function(a, b) {\n            var c = this.$node.closest(\".permalink\");\n            ((c.length && (c.addClass(\"has-replies\"), this.$node.closest(\".replies-to\").removeClass(\"hidden\"))));\n            var d = $(b.tweet_html);\n            d.JSBNG__find(this.attr.tweetSelector).addClass(this.attr.descendantClass).attr(\"data-component-context\", this.attr.descendantScribeContext);\n            var e;\n            ((this.attr.guard(b) && (e = this.$node.JSBNG__find(\".view-more-container\"), ((e.length ? d.insertBefore(e.closest(\"li\")) : this.$node.append(d))), this.trigger(\"uiTweetInserted\", b))));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataTweetSuccess\", this.insertTweet);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(tweetInjector);\n});\ndefine(\"app/ui/expando/with_expanding_social_activity\", [\"module\",\"require\",\"exports\",\"app/ui/expando/expando_helpers\",\"core/i18n\",\"app/utils/tweet_helper\",\"app/ui/tweets\",\"app/ui/tweet_injector\",], function(module, require, exports) {\n    function withExpandingSocialActivity() {\n        this.defaultAttrs({\n            animating: \"animating\",\n            socialProofSelector: \".js-tweet-stats-container\",\n            requestRetweetedSelector: \".request-retweeted-popup\",\n            requestFavoritedSelector: \".request-favorited-popup\",\n            targetTweetSelector: \".tweet\",\n            targetTitleSelector: \"[data-activity-popup-title]\",\n            inlineReplyTweetBoxFormSelector: \".inline-reply-tweetbox .tweet-form\",\n            inlineReplyTweetBoxFormCloneSrcSelector: \"#inline-reply-tweetbox .tweet-form\",\n            inlineReplyTweetboxSelector: \".inline-reply-tweetbox\",\n            inlineReplyUserImageSelector: \".inline-reply-user-image\",\n            permalinkTweetClasses: \"opened-tweet permalink-tweet\",\n            parentStreamItemSelector: \".stream-item\",\n            viewMoreContainerSelector: \".view-more-container\",\n            ancestorsSelector: \".ancestor-items\\u003Eli\",\n            descendantsSelector: \".tweets-wrapper\\u003Eli\"\n        }), this.calculateMargins = function(a) {\n            var b, c, d = 0, e = 0;\n            ((a.$ancestors.length && (c = a.$ancestors.first(), d = Math.abs(parseInt(c.css(\"marginTop\"), 10)), ((d || (d = ((a.$tweet.offset().JSBNG__top - c.offset().JSBNG__top))))))));\n            var f, g, h;\n            return ((a.$descendants.length && (f = a.$descendants.last(), e = Math.abs(parseInt(f.css(\"marginBottom\"), 10)), ((e || (b = a.$tweet.JSBNG__outerHeight(), g = f.JSBNG__outerHeight(), h = f.offset().JSBNG__top, e = ((((h + g)) - ((b + a.$tweet.offset().JSBNG__top)))))))))), {\n                JSBNG__top: d,\n                bottom: e\n            };\n        }, this.animateScaffoldHeight = function(a) {\n            var b = a.expando, c = a.marginTop, d = a.marginBottom, e = b.$ancestors.length, f = b.$descendants.length, g;\n            ((((a.noAnimation || ((!b.open && !b.animating)))) ? g = 0 : ((((e || f)) ? g = a.speed : g = expandoHelpers.guessGoodSpeed(Math.abs(((b.$scaffold.height() - a.height))))))));\n            var h = 1;\n            ((e && h++)), ((f && h++));\n            var i = function() {\n                h--, ((((h == 0)) && (b.animating = !1, ((e && b.$ancestors.first().css(\"marginTop\", \"\"))), ((f && b.$descendants.last().css(\"marginBottom\", \"\"))), ((a.complete && a.complete())))));\n            }.bind(this);\n            b.$scaffold.animate({\n                height: a.height\n            }, {\n                duration: g,\n                complete: i\n            }), ((e && b.$ancestors.first().animate({\n                marginTop: c\n            }, {\n                duration: g,\n                step: a.stepFn,\n                complete: i\n            }))), ((f && b.$descendants.last().animate({\n                marginBottom: d\n            }, {\n                duration: g,\n                complete: i\n            })));\n        }, this.animateTweetOpen = function(a) {\n            var b = a.expando, c = expandoHelpers.getNaturalHeight(b.$scaffold), d = this.calculateMargins(b), e = a.complete;\n            b.animating = !0, ((b.$ancestors.length && b.$ancestors.first().css(\"margin-top\", -d.JSBNG__top))), ((b.$descendants.length && b.$descendants.last().css(\"margin-bottom\", -d.bottom))), this.animateScaffoldHeight({\n                expando: b,\n                height: c,\n                noAnimation: a.noAnimation,\n                speed: expandoHelpers.guessGoodSpeed(d.JSBNG__top, d.bottom),\n                marginTop: 0,\n                marginBottom: 0,\n                complete: function() {\n                    b.$scaffold.height(\"auto\"), ((e && e()));\n                }.bind(this)\n            });\n        }, this.animateTweetClosed = function(a) {\n            var b = a.expando, c = this.calculateMargins(b), d = a.complete;\n            b.animating = !0, this.animateScaffoldHeight({\n                expando: b,\n                height: b.originalHeight,\n                noAnimation: a.noAnimation,\n                speed: expandoHelpers.guessGoodSpeed(c.JSBNG__top, c.bottom),\n                stepFn: a.stepFn,\n                marginTop: -c.JSBNG__top,\n                marginBottom: -c.bottom,\n                complete: function() {\n                    b.$scaffold.height(b.originalHeight), b.$container.css({\n                        \"margin-top\": \"\",\n                        \"margin-bottom\": \"\"\n                    }), ((d && d()));\n                }\n            });\n        }, this.initTweetsInConversation = function(a) {\n            ((((a.$container.closest(this.attr.parentStreamItemSelector).length && a.$scaffold.JSBNG__find(this.attr.inlineReplyTweetboxSelector).length)) && (Tweets.attachTo(a.$scaffold, {\n                screenName: this.attr.screenName,\n                loggedIn: this.attr.loggedIn,\n                itemType: a.$container.attr(\"data-item-type\")\n            }), ((this.attr.loggedIn && TweetInjector.attachTo(a.$scaffold, {\n                guard: function(b) {\n                    return ((b.in_reply_to_status_id == a.$tweet.attr(\"data-tweet-id\")));\n                }\n            }))))));\n        }, this.animateConversationEntrance = function(a, b) {\n            var c = $(a.target).data(\"expando\"), d = $(a.target).attr(\"focus-reply\");\n            $(a.target).removeAttr(\"focus-reply\"), ((c.$tweet.data(\"is-reply-to\") || (b.ancestors = \"\"))), c.$scaffold.height(c.$scaffold.JSBNG__outerHeight());\n            var e = $(b.ancestors), f = $(b.descendants);\n            c.$ancestors = e.JSBNG__find(this.attr.ancestorsSelector), c.$descendants = f.JSBNG__find(this.attr.descendantsSelector);\n            var g = ((c.$ancestors.length || c.$descendants.length));\n            ((g && this.trigger(c.$tweet, \"uiRenderingExpandedConversation\"))), c.$tweet.after(f.JSBNG__find(this.attr.inlineReplyTweetboxSelector)), c.$scaffold.prepend(c.$ancestors), c.$scaffold.append(c.$descendants);\n            var h = f.JSBNG__find(this.attr.viewMoreContainerSelector), i;\n            ((h.length && (i = $(\"\\u003Cli/\\u003E\"), h.appendTo(i), c.$scaffold.append(i), c.$descendants = c.$descendants.add(i))));\n            var j = this.renderInlineTweetbox(c, b.sourceEventData);\n            this.animateTweetOpen({\n                expando: c,\n                complete: function() {\n                    c.open = !0, c.$scaffold.removeClass(this.attr.animating), c.$scaffold.css(\"height\", \"auto\"), this.trigger(c.$tweet, \"uiTimelineNeedsTranslation\"), ((((d && j)) && this.trigger(j, \"uiExpandFocus\")));\n                }.bind(this)\n            }), this.initTweetsInConversation(c), ((g && this.trigger(c.$tweet, \"uiExpandedConversationRendered\")));\n        }, this.renderConversation = function(a, b) {\n            var c = $(a.target).data(\"expando\");\n            if (!c) {\n                return;\n            }\n        ;\n        ;\n            ((c.animating ? c.$scaffold.queue(function() {\n                this.animateConversationEntrance(a, b), c.$scaffold.dequeue();\n            }.bind(this)) : this.animateConversationEntrance(a, b)));\n        }, this.renderInlineTweetbox = function(a, b) {\n            var c, d = a.$scaffold.JSBNG__find(this.attr.inlineReplyTweetBoxFormSelector);\n            ((((d.length === 0)) && (d = $(this.attr.inlineReplyTweetBoxFormCloneSrcSelector).clone(), c = ((\"tweet-box-reply-to-\" + a.$tweet.attr(\"data-tweet-id\"))), d.JSBNG__find(\"textarea\").attr(\"id\", c), d.JSBNG__find(\"label\").attr(\"for\", c), a.$scaffold.JSBNG__find(this.attr.inlineReplyTweetboxSelector).empty(), d.appendTo(a.$scaffold.JSBNG__find(this.attr.inlineReplyTweetboxSelector)))));\n            var e = tweetHelper.extractMentionsForReply(a.$tweet, this.attr.screenName), f = ((((\"@\" + e.join(\" @\"))) + \" \"));\n            b = ((b || {\n            }));\n            var g = {\n                condensable: !0,\n                defaultText: f,\n                condensedText: _(\"Reply to {{screen_names}}\", {\n                    screen_names: f\n                }),\n                inReplyToTweetData: b,\n                inReplyToStatusId: a.$tweet.attr(\"data-tweet-id\"),\n                impressionId: a.$tweet.attr(\"data-impression-id\"),\n                disclosureType: a.$tweet.attr(\"data-disclosure-type\"),\n                eventData: {\n                    scribeContext: {\n                        component: \"tweet_box_inline_reply\"\n                    }\n                }\n            };\n            return ((b.itemType && (g.itemType = b.itemType))), this.trigger(d, \"uiInitTweetbox\", g), d;\n        }, this.renderEmptyConversation = function(a, b) {\n            this.renderConversation(a);\n        }, this.requestActivityPopup = function(a) {\n            var b = $(a.target), c = b.closest(this.attr.targetTweetSelector), d = !!b.closest(this.attr.requestRetweetedSelector).length;\n            a.preventDefault(), a.stopPropagation(), this.trigger(\"uiRequestActivityPopup\", {\n                titleHtml: b.closest(this.attr.targetTitleSelector).attr(\"data-activity-popup-title\"),\n                tweetHtml: $(\"\\u003Cdiv\\u003E\").html(c.clone().removeClass(this.attr.permalinkTweetClasses)).html(),\n                isRetweeted: d\n            });\n        }, this.renderSocialProof = function(a, b) {\n            var c = $(a.target).JSBNG__find(this.attr.socialProofSelector);\n            ((c.JSBNG__find(\".stats\").length || c.append(b.social_proof))), $(a.target).trigger(\"uiHasRenderedTweetSocialProof\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataTweetConversationResult\", this.renderConversation), this.JSBNG__on(JSBNG__document, \"dataTweetSocialProofResult\", this.renderSocialProof), this.JSBNG__on(\"click\", {\n                requestRetweetedSelector: this.requestActivityPopup,\n                requestFavoritedSelector: this.requestActivityPopup\n            });\n        });\n    };\n;\n    var expandoHelpers = require(\"app/ui/expando/expando_helpers\"), _ = require(\"core/i18n\"), tweetHelper = require(\"app/utils/tweet_helper\"), Tweets = require(\"app/ui/tweets\"), TweetInjector = require(\"app/ui/tweet_injector\");\n    module.exports = withExpandingSocialActivity;\n});\ndefine(\"app/ui/expando/expanding_tweets\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/ui/expando/with_expanding_containers\",\"app/ui/expando/with_expanding_social_activity\",\"app/ui/expando/expando_helpers\",\"app/utils/caret\",], function(module, require, exports) {\n    function expandingTweets() {\n        this.defaultAttrs({\n            playerCardIframeSelector: \".cards-base.cards-multimedia iframe, .card2 iframe\",\n            insideProxyTweet: \".proxy-tweet-container *\",\n            expandingTweetSelector: \".js-stream-tweet\",\n            topLevelTweetSelector: \".js-stream-tweet.original-tweet\",\n            tweetSelector: \".tweet\",\n            detailsSelector: \".js-tweet-details-dropdown\",\n            expansionSelector: \".expansion-container\",\n            expandedContentSelector: \".expanded-content\",\n            expansionClasses: \"expansion-container js-expansion-container animating\",\n            openedTweetClass: \"opened-tweet\",\n            originalTweetClass: \"original-tweet\",\n            withSocialProofClass: \"with-social-proof\",\n            expandoHandleSelector: \".js-open-close-tweet span\",\n            containingItemSelector: \".js-stream-item\",\n            preexpandedOpenTweetSelector: \"li.js-preexpanded div.opened-tweet\",\n            preexpandedTweetClass: \"preexpanded\",\n            expandedIframeDataStash: \"data-expando-iframe-media-url\",\n            jsLinkSelector: \".js-link\",\n            tweetFormSelector: \".tweet-form\",\n            withheldTweetClass: \"withheld-tweet\",\n            jsDetailsSelector: \".js-details\",\n            jsStreamItemSelector: \".js-stream-item\",\n            jsTranslateTweetSelector: \".js-translate-tweet\",\n            openedOriginalTweetSelector: \".js-original-tweet.opened-tweet\",\n            expandedConversationSelector: \".expanded-conversation\",\n            expandedConversationClass: \"expanded-conversation\",\n            inlineReplyTweetBoxSelector: \".inline-reply-tweetbox\",\n            openChildrenSelector: \".ancestor.opened-tweet,.descendant.opened-tweet\",\n            enableAnimation: !0,\n            SCROLL_TOP_OFFSET: 55,\n            MAX_PLAYER_WIDTH_IN_PIXELS: 435,\n            hasConversationModuleClass: \"has-conversation-module\",\n            conversationModuleSelector: \".conversation-module\",\n            conversationRootClass: \"conversation-root\",\n            hadConversationClass: \"had-conversation\",\n            animatingClass: \"animating\"\n        }), this.handleTweetClick = function(a, b) {\n            var c = $(b.el);\n            ((this.shouldExpandWhenTargetIs($(a.target), c) && (a.preventDefault(), ((this.handleConversationExpansion(c) || this.expandTweet(c))))));\n        }, this.handleConversationExpansion = function(a) {\n            if (a.hasClass(this.attr.conversationRootClass)) {\n                return a.trigger(\"uiExpandConversationRoot\"), !0;\n            }\n        ;\n        ;\n            if (a.closest(this.attr.containingItemSelector).hasClass(this.attr.hadConversationClass)) {\n                return a.trigger(\"uiRestoreConversationModule\"), !0;\n            }\n        ;\n        ;\n        }, this.shouldExpandWhenTargetIs = function(a, b) {\n            var c = b.hasClass(this.attr.withheldTweetClass), d = a.is(this.attr.expandoHandleSelector), e = ((a.closest(this.attr.jsDetailsSelector, b).length > 0)), f = ((a.closest(this.attr.jsTranslateTweetSelector, b).length > 0)), g = ((((!a.closest(\"a\", b).length && !a.closest(\"button\", b).length)) && !a.closest(this.attr.jsLinkSelector, b).length));\n            return ((((((((((d || g)) || e)) || f)) && !c)) && !this.selectedText()));\n        }, this.selectedText = function() {\n            return caret.JSBNG__getSelection();\n        }, this.resetCard = function(a, b) {\n            b = ((((b || a.data(\"expando\"))) || this.loadTweet(a)));\n            if (b.auto_expanded) {\n                return;\n            }\n        ;\n        ;\n            var c = this;\n            a.JSBNG__find(this.attr.playerCardIframeSelector).each(function(a, b) {\n                b.setAttribute(c.attr.expandedIframeDataStash, b.src), b.src = \"\";\n            });\n        }, this.expandItem = function(a, b) {\n            this.expandTweet($(a.target).JSBNG__find(this.attr.tweetSelector).eq(0), b);\n        }, this.expandTweetByReply = function(a, b) {\n            var c = $(a.target);\n            c.attr(\"focus-reply\", !0), b.focusReply = !0, this.expandTweet(c, b);\n        }, this.focusReplyTweetbox = function(a) {\n            var b = a.parent().JSBNG__find(this.attr.tweetFormSelector);\n            ((((b.length > 0)) && this.trigger(b, \"uiExpandFocus\")));\n        }, this.expandTweet = function(a, b) {\n            b = ((b || {\n            }));\n            var c = ((a.data(\"expando\") || this.loadTweet(a, b)));\n            if (c.open) {\n                if (b.focusReply) {\n                    this.focusReplyTweetbox(a);\n                    return;\n                }\n            ;\n            ;\n                this.closeTweet(a, c, b);\n            }\n             else this.openTweet(a, c, b);\n        ;\n        ;\n        }, this.collapseTweet = function(a, b) {\n            (($(b).hasClass(this.attr.openedTweetClass) && this.expandTweet($(b), {\n                noAnimation: !0\n            })));\n        }, this.loadTweet = function(a, b) {\n            b = ((b || {\n            }));\n            var c = ((b.expando || expandoHelpers.buildExpandoStruct({\n                $tweet: a,\n                preexpanded: b.preexpanded,\n                openedTweetClass: this.attr.openedTweetClass,\n                expansionSelector: this.attr.expansionSelector,\n                originalClass: this.attr.originalTweetClass,\n                containingSelector: this.attr.containingItemSelector\n            })));\n            a.data(\"expando\", c);\n            var d;\n            this.setOriginalHeight(a, c);\n            if (((((((!c.$descendants.length || !c.$ancestors.length)) || c.preexpanded)) || c.auto_expanded))) {\n                this.scaffoldForAnimation(a, c), delete b.focusReply, this.loadHtmlFragmentsFromAttributes(a, c, b), this.resizePlayerCards(a);\n            }\n        ;\n        ;\n            return c;\n        }, this.setOriginalHeight = function(a, b) {\n            a.removeClass(this.attr.openedTweetClass), b.originalHeight = a.JSBNG__outerHeight(), a.addClass(this.attr.openedTweetClass);\n        }, this.resizePlayerCard = function(a, b) {\n            var c = $(b), d = parseFloat(c.attr(\"width\"));\n            if (((d > this.attr.MAX_PLAYER_WIDTH_IN_PIXELS))) {\n                var e = parseFloat(c.attr(\"height\")), f = ((d / e)), g = ((this.attr.MAX_PLAYER_WIDTH_IN_PIXELS / f));\n                c.attr(\"width\", this.attr.MAX_PLAYER_WIDTH_IN_PIXELS), c.attr(\"height\", Math.floor(g));\n            }\n        ;\n        ;\n        }, this.resizePlayerCards = function(a) {\n            var b = a.JSBNG__find(this.attr.playerCardIframeSelector);\n            b.each(this.resizePlayerCard.bind(this));\n        }, this.loadPreexpandedTweet = function(a, b) {\n            var c = $(b), d = this.loadTweet(c, {\n                preexpanded: !0\n            });\n            this.openTweet(c, d, {\n                skipAnimation: !0\n            });\n            var e = $.trim(c.JSBNG__find(this.attr.expandedContentSelector).html());\n            ((e && c.attr(\"data-expanded-footer\", e))), this.JSBNG__on(b, \"uiHasAddedLegacyMediaIcon\", function() {\n                this.setOriginalHeight(c, d), this.trigger(b, \"uiWantsMediaForTweet\", {\n                });\n            });\n        }, this.createStepFn = function(a) {\n            var b = $(window), c = Math.abs(((a.from - a.to))), d = Math.min(a.from, a.to), e = a.expando.$container.offset().JSBNG__top, f = b.scrollTop(), g = ((((f + this.attr.SCROLL_TOP_OFFSET)) - e)), h = function(a) {\n                var e = ((a - d)), h = ((e / c));\n                ((((g > 0)) && b.scrollTop(((f - ((g * ((1 - h)))))))));\n            };\n            return h;\n        }, this.openTweet = function(a, b, c) {\n            ((b.isTopLevel && this.enterDetachedState(b.$container, c.skipAnimation))), this.beforeOpeningTweet(b);\n            if (((!this.attr.enableAnimation || c.skipAnimation))) {\n                return this.afterOpeningTweet(b);\n            }\n        ;\n        ;\n            this.trigger(a, \"uiHasExpandedTweet\", {\n                organicExpansion: !c.focusReply,\n                impressionId: a.closest(\"[data-impression-id]\").attr(\"data-impression-id\"),\n                disclosureType: a.closest(\"[data-impression-id]\").attr(\"data-disclosure-type\")\n            });\n            var d = {\n                expando: b\n            };\n            ((a.hasClass(this.attr.originalTweetClass) || (d.complete = function() {\n                this.afterOpeningTweet(b);\n            }.bind(this)))), this.animateTweetOpen(d);\n        }, this.beforeOpeningTweet = function(a) {\n            if (a.$tweet.is(this.attr.insideProxyTweet)) {\n                return;\n            }\n        ;\n        ;\n            ((a.auto_expanded || a.$tweet.JSBNG__find(((((\"iframe[\" + this.attr.expandedIframeDataStash)) + \"]\"))).each(function(a, b) {\n                var c = b.getAttribute(this.attr.expandedIframeDataStash);\n                ((!c || (b.src = c)));\n            }.bind(this)))), a.$tweet.addClass(this.attr.openedTweetClass);\n        }, this.afterOpeningTweet = function(a) {\n            if (a.$tweet.is(this.attr.insideProxyTweet)) {\n                return;\n            }\n        ;\n        ;\n            a.open = !0, a.$scaffold.removeClass(this.attr.animatingClass), a.$scaffold.css(\"height\", \"auto\"), a.$container.removeClass(this.attr.preexpandedTweetClass), this.trigger(a.$tweet, \"uiTimelineNeedsTranslation\");\n        }, this.removeExpando = function(a, b) {\n            var c = a.JSBNG__find(this.attr.jsDetailsSelector).is(JSBNG__document.activeElement), d, e;\n            ((((a.closest(\".supplement\").length || !b.isTopLevel)) ? d = b.$scaffold.parent() : d = a.closest(this.attr.jsStreamItemSelector))), ((a.hasClass(this.attr.hasConversationModuleClass) ? (e = a.closest(this.attr.conversationModuleSelector), e.JSBNG__find(\".descendant\").closest(\"li\").remove(), e.JSBNG__find(\".view-more-container\").closest(\"li\").remove(), e.JSBNG__find(this.attr.inlineReplyTweetBoxSelector).remove(), b.$scaffold.css(\"height\", \"auto\"), a.data(\"expando\", null)) : (e = a, d.html(e)))), d.removeClass(\"js-has-navigable-stream\"), ((c && d.JSBNG__find(this.attr.jsDetailsSelector).JSBNG__focus())), this.trigger(d, \"uiSelectItem\", {\n                setFocus: !c\n            });\n        }, this.closeTweet = function(a, b, c) {\n            ((b.isTopLevel && this.exitDetachedState(b.$container, c.noAnimation)));\n            var d = function() {\n                this.resetCard(a, b), b.open = !1, a.removeClass(this.attr.openedTweetClass), b.$scaffold.removeClass(this.attr.animatingClass), this.removeExpando(a, b), this.trigger(a, \"uiHasCollapsedTweet\");\n            }.bind(this), e = this.createStepFn({\n                expando: b,\n                to: b.originalHeight,\n                from: b.$scaffold.height()\n            });\n            b.$scaffold.addClass(this.attr.animatingClass), this.animateTweetClosed({\n                expando: b,\n                complete: d,\n                stepFn: e,\n                noAnimation: c.noAnimation\n            });\n        }, this.hasConversationModule = function(a) {\n            return a.hasClass(this.attr.hasConversationModuleClass);\n        }, this.shouldLoadFullConversation = function(a, b) {\n            return ((((b.isTopLevel && !b.preexpanded)) && !this.hasConversationModule(a)));\n        }, this.loadHtmlFragmentsFromAttributes = function(a, b, c) {\n            ((a.JSBNG__find(this.attr.detailsSelector).children().length || (a.JSBNG__find(this.attr.detailsSelector).append($(a.data(\"expanded-footer\"))), this.trigger(a, \"uiWantsMediaForTweet\"))));\n            var d = utils.merge(c, {\n                fullConversation: this.shouldLoadFullConversation(a, b),\n                descendantsOnly: this.hasConversationModule(a),\n                facepileMax: ((b.isTopLevel ? 7 : 6))\n            });\n            ((((b.isTopLevel && b.preexpanded)) && a.attr(\"data-use-reply-dialog\", \"true\"))), delete d.expando, this.trigger(a, \"uiNeedsTweetExpandedContent\", d);\n        }, this.scaffoldForAnimation = function(a, b) {\n            if (!this.attr.enableAnimation) {\n                return;\n            }\n        ;\n        ;\n            var c = a.JSBNG__find(this.attr.jsDetailsSelector).is(JSBNG__document.activeElement), d;\n            ((c && (d = JSBNG__document.activeElement)));\n            var e, f, g, h = {\n                class: this.attr.expansionClasses,\n                height: b.originalHeight\n            };\n            ((a.closest(this.attr.topLevelTweetSelector).length ? ((a.closest(this.attr.conversationModuleSelector).length ? (e = a.closest(this.attr.conversationModuleSelector), e.addClass(this.attr.expansionClasses), e.height(e.JSBNG__outerHeight()), b.originalHeight = e.JSBNG__outerHeight()) : (h[\"class\"] = [this.attr.expandedConversationClass,this.attr.expansionClasses,\"js-navigable-stream\",].join(\" \"), e = $(\"\\u003Col/\\u003E\", h), e.appendTo(a.parent()), f = $(\"\\u003Cli class=\\\"original-tweet-container\\\"/\\u003E\"), f.appendTo(e), b.$container.addClass(\"js-has-navigable-stream\"), a.appendTo(f), this.trigger(e.JSBNG__find(\".original-tweet-container\"), \"uiSelectItem\", {\n                setFocus: !c\n            })))) : (e = $(\"\\u003Cdiv/\\u003E\", h), e.appendTo(a.parent()), a.appendTo(e), g = e.parent().JSBNG__find(this.attr.inlineReplyTweetBoxSelector), ((g.length && g.appendTo(e)))))), ((d && d.JSBNG__focus())), b.$scaffold = e;\n        }, this.indicateSocialProof = function(a, b) {\n            var c = $(a.target);\n            ((b.social_proof && c.addClass(this.attr.withSocialProofClass)));\n        }, this.closeAllChildTweets = function(a) {\n            a.$scaffold.JSBNG__find(this.attr.openChildrenSelector).each(this.collapseTweet.bind(this));\n        }, this.closeAllTopLevelTweets = function() {\n            expandoHelpers.closeAllButPreserveScroll({\n                $scope: this.$node,\n                openSelector: this.attr.openedOriginalTweetSelector,\n                itemSelector: this.attr.jsStreamItemSelector,\n                callback: this.collapseTweet.bind(this)\n            });\n        }, this.fullyLoadPreexpandedTweets = function() {\n            this.select(\"preexpandedOpenTweetSelector\").each(this.loadPreexpandedTweet.bind(this));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"dataTweetSocialProofResult\", this.indicateSocialProof), this.JSBNG__on(\"uiShouldToggleExpandedState\", this.expandItem), this.JSBNG__on(\"uiPromotionCardUrlClick\", this.expandItem), this.JSBNG__on(\"click uiExpandTweet\", {\n                expandingTweetSelector: this.handleTweetClick\n            }), this.JSBNG__on(\"expandTweetByReply\", this.expandTweetByReply), this.JSBNG__on(\"uiWantsToCloseAllTweets\", this.closeAllTopLevelTweets), this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged uiHasInjectedNewTimeline\", this.fullyLoadPreexpandedTweets), this.before(\"teardown\", this.closeAllTopLevelTweets);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withExpandingContainers = require(\"app/ui/expando/with_expanding_containers\"), withExpandingSocialActivity = require(\"app/ui/expando/with_expanding_social_activity\"), expandoHelpers = require(\"app/ui/expando/expando_helpers\"), caret = require(\"app/utils/caret\");\n    module.exports = defineComponent(expandingTweets, withExpandingContainers, withExpandingSocialActivity);\n});\ndefine(\"app/ui/embed_stats\", [\"module\",\"require\",\"exports\",\"app/ui/with_item_actions\",\"core/component\",], function(module, require, exports) {\n    function embedStats() {\n        this.defaultAttrs({\n            permalinkSelector: \".permalink-tweet\",\n            embeddedLinkSelector: \".embed-stats-url-link\",\n            moreButtonSelector: \".embed-stats-more-button\",\n            moreStatsContainerSelector: \".embed-stats-more\",\n            itemType: \"user\"\n        }), this.expandMoreResults = function(a) {\n            this.select(\"moreButtonSelector\").hide(), this.select(\"moreStatsContainerSelector\").show(), this.trigger(\"uiExpandedMoreEmbeddedTweetLinks\", {\n                tweetId: this.tweetId\n            }), a.preventDefault();\n        }, this.clickLink = function(a) {\n            this.trigger(\"uiClickedEmbeddedTweetLink\", {\n                tweetId: this.tweetId,\n                url: (($(a.target).data(\"expanded-url\") || a.target.href))\n            });\n        }, this.after(\"initialize\", function() {\n            this.tweetId = this.select(\"permalinkSelector\").data(\"tweet-id\"), this.JSBNG__on(\"click\", {\n                embeddedLinkSelector: this.clickLink,\n                moreButtonSelector: this.expandMoreResults\n            });\n        });\n    };\n;\n    var withItemActions = require(\"app/ui/with_item_actions\"), defineComponent = require(\"core/component\");\n    module.exports = defineComponent(embedStats, withItemActions);\n});\ndefine(\"app/data/url_resolver\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function urlResolver() {\n        this.resolveLink = function(a, b) {\n            JSBNG__clearTimeout(this.batch);\n            var c = this.linksToResolve[b.url];\n            c = ((c || [])), c.push(a.target), this.linksToResolve[b.url] = c, this.batch = JSBNG__setTimeout(this.sendBatchRequest.bind(this), 0);\n        }, this.sendBatchRequest = function() {\n            var a = Object.keys(this.linksToResolve);\n            if (((a.length === 0))) {\n                return;\n            }\n        ;\n        ;\n            this.get({\n                data: {\n                    urls: a\n                },\n                eventData: {\n                },\n                url: \"/i/resolve.json\",\n                headers: {\n                    \"X-PHX\": !0\n                },\n                type: \"JSON\",\n                success: this.handleBatch.bind(this),\n                error: \"dataBatchRequestError\"\n            });\n        }, this.handleBatch = function(a) {\n            delete a.sourceEventData, Object.keys(a).forEach(function(b) {\n                ((this.linksToResolve[b] && this.linksToResolve[b].forEach(function(c) {\n                    this.trigger(c, \"dataDidResolveUrl\", {\n                        url: a[b]\n                    });\n                }, this))), delete this.linksToResolve[b];\n            }, this);\n        }, this.after(\"initialize\", function() {\n            this.linksToResolve = {\n            }, this.JSBNG__on(\"uiWantsLinkResolution\", this.resolveLink);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), UrlResolver = defineComponent(urlResolver, withData);\n    module.exports = UrlResolver;\n});\ndefine(\"app/ui/media/with_native_media\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withNativeMedia() {\n        this.defaultAttrs({\n            expandedContentHolderWithPreloadableMedia: \"div[data-expanded-footer].has-preloadable-media\"\n        }), this.preloadEmbeddedMedia = function(a) {\n            $(a.target).JSBNG__find(this.attr.expandedContentHolderWithPreloadableMedia).each(function(a, b) {\n                $(\"\\u003Cdiv/\\u003E\").append($(b).data(\"expanded-footer\")).remove();\n            });\n        }, this.after(\"initialize\", function() {\n            this.preloadEmbeddedMedia({\n                target: this.$node\n            }), this.JSBNG__on(\"uiHasInjectedTimelineItem\", this.preloadEmbeddedMedia);\n        });\n    };\n;\n    module.exports = withNativeMedia;\n});\nprovide(\"app/ui/media/media_tweets\", function(a) {\n    using(\"core/component\", \"app/ui/media/with_legacy_media\", \"app/ui/media/with_native_media\", function(b, c, d) {\n        var e = b(c, d);\n        a(e);\n    });\n});\ndefine(\"app/data/trends\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/setup_polling_with_backoff\",\"app/data/with_data\",], function(module, require, exports) {\n    function trendsData() {\n        this.defaultAttrs({\n            src: \"module\",\n            $backoffNode: $(window),\n            trendsPollingOptions: {\n                focusedInterval: 300000,\n                blurredInterval: 1200000,\n                eventData: {\n                    source: \"clock\"\n                }\n            }\n        }), this.makeTrendsRequest = function(a) {\n            var b = a.woeid, c = a.source, d = function(a) {\n                a.source = c, this.trigger(\"dataTrendsRefreshed\", a);\n            };\n            this.get({\n                url: \"/trends\",\n                eventData: a,\n                data: {\n                    k: this.currentCacheKey,\n                    woeid: b,\n                    pc: !0,\n                    personalized: a.personalized,\n                    src: this.attr.src\n                },\n                success: d.bind(this),\n                error: \"dataTrendsRefreshedError\"\n            });\n        }, this.makeTrendsDialogRequest = function(a, b) {\n            var c = {\n                woeid: a.woeid,\n                personalized: a.personalized,\n                pc: !0\n            }, d = function(a) {\n                this.trigger(\"dataGotTrendsDialog\", a), ((((this.currentWoeid && ((this.currentWoeid !== a.woeid)))) && this.trigger(\"dataTrendsLocationChanged\"))), this.currentWoeid = a.woeid, ((a.trends_cache_key && (this.currentCacheKey = a.trends_cache_key, this.trigger(\"dataPageMutated\")))), ((a.module_html && this.trigger(\"dataTrendsRefreshed\", a)));\n            }, e = ((b ? this.post : this.get));\n            e.call(this, {\n                url: \"/trends/dialog\",\n                eventData: a,\n                data: c,\n                success: d.bind(this),\n                error: \"dataGotTrendsDialogError\"\n            });\n        }, this.changeTrendsLocation = function(a, b) {\n            this.makeTrendsDialogRequest(b, !0);\n        }, this.refreshTrends = function(a, b) {\n            b = ((b || {\n            })), this.makeTrendsRequest(b);\n        }, this.getTrendsDialog = function(a, b) {\n            b = ((b || {\n            })), this.makeTrendsDialogRequest(b);\n        }, this.updateTrendsCacheKey = function(a, b) {\n            this.currentCacheKey = b.trendsCacheKey;\n        }, this.after(\"initialize\", function(a) {\n            this.currentCacheKey = a.trendsCacheKey, this.timer = setupPollingWithBackoff(\"uiRefreshTrends\", this.attr.$backoffNode, this.attr.trendsPollingOptions), this.JSBNG__on(\"uiWantsTrendsDialog\", this.getTrendsDialog), this.JSBNG__on(\"uiChangeTrendsLocation\", this.changeTrendsLocation), this.JSBNG__on(\"uiRefreshTrends\", this.refreshTrends), this.JSBNG__on(\"dataTempTrendsCacheKeyChanged\", this.updateTrendsCacheKey);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), setupPollingWithBackoff = require(\"app/utils/setup_polling_with_backoff\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(trendsData, withData);\n});\ndefine(\"app/data/trends/location_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function trendsLocationDialogData() {\n        this.getTrendsLocationDialog = function(a, b) {\n            var c = function(a) {\n                this.trigger(\"dataGotTrendsLocationDialog\", a), ((a.trendLocations && this.trigger(\"dataLoadedTrendLocations\", {\n                    trendLocations: a.trendLocations\n                })));\n            };\n            this.get({\n                url: \"/trends/location_dialog\",\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataGotTrendsLocationDialogError\"\n            });\n        }, this.updateTrendsLocation = function(a, b) {\n            var c = ((b.JSBNG__location || {\n            })), d = {\n                woeid: c.woeid,\n                personalized: b.personalized,\n                pc: !0\n            }, e = function(a) {\n                this.trigger(\"dataChangedTrendLocation\", {\n                    personalized: a.personalized,\n                    JSBNG__location: c\n                }), ((a.trends_cache_key && (this.trigger(\"dataTempTrendsCacheKeyChanged\", {\n                    trendsCacheKey: a.trends_cache_key\n                }), this.trigger(\"dataPageMutated\")))), ((a.module_html && this.trigger(\"dataTrendsRefreshed\", a)));\n            };\n            this.post({\n                url: \"/trends/dialog\",\n                eventData: b,\n                data: d,\n                success: e.bind(this),\n                error: \"dataGotTrendsLocationDialogError\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiWantsTrendsLocationDialog\", this.getTrendsLocationDialog), this.JSBNG__on(\"uiChangeLocation\", this.updateTrendsLocation);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(trendsLocationDialogData, withData);\n});\ndefine(\"app/data/trends/recent_locations\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/storage/custom\",\"app/data/with_data\",], function(module, require, exports) {\n    function trendsRecentLocations() {\n        this.defaultAttrs({\n            storageName: \"recent_trend_locations\",\n            storageKey: \"locations\",\n            maxRecentLocations: 5\n        }), this.initializeStorage = function() {\n            var a = customStorage({\n                withArray: !0,\n                withMaxElements: !0\n            });\n            this.storage = new a(this.attr.storageName), this.storage.setMaxElements(this.attr.storageKey, this.attr.maxRecentLocations);\n        }, this.getRecentTrendLocations = function() {\n            this.trigger(\"dataGotRecentTrendLocations\", {\n                trendLocations: this.storage.getArray(this.attr.storageKey)\n            });\n        }, this.saveRecentLocation = function(a, b) {\n            var c = ((b.JSBNG__location || {\n            }));\n            if (((!c.woeid || this.hasRecentLocation(c.woeid)))) {\n                return;\n            }\n        ;\n        ;\n            this.storage.push(this.attr.storageKey, c), this.getRecentTrendLocations();\n        }, this.hasRecentLocation = function(a) {\n            var b = this.storage.getArray(this.attr.storageKey);\n            return b.some(function(b) {\n                return ((b.woeid === a));\n            });\n        }, this.after(\"initialize\", function() {\n            this.initializeStorage(), this.JSBNG__on(\"uiWantsRecentTrendLocations\", this.getRecentTrendLocations), this.JSBNG__on(\"dataChangedTrendLocation\", this.saveRecentLocation);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), customStorage = require(\"app/utils/storage/custom\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(trendsRecentLocations, withData);\n});\ndefine(\"app/utils/scribe_event_initiators\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = {\n        clientSideUser: 0,\n        serverSideUser: 1,\n        clientSideApp: 2,\n        serverSideApp: 3\n    };\n});\ndefine(\"app/data/trends_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",\"app/utils/scribe_item_types\",\"app/utils/scribe_event_initiators\",], function(module, require, exports) {\n    function trendsScribe() {\n        this.scribeTrendClick = function(a, b) {\n            this.scribe(\"search\", b);\n        }, this.scribeTrendsResults = function(a, b) {\n            var c = [], d = ((b.initial ? \"initial\" : \"newer\")), e = {\n                element: d,\n                action: ((((b.items && b.items.length)) ? \"results\" : \"no_results\"))\n            }, f = {\n                referring_event: d\n            }, g = !1;\n            f.items = b.items.map(function(a, b) {\n                var c = {\n                    JSBNG__name: a.JSBNG__name,\n                    item_type: itemTypes.trend,\n                    item_query: a.JSBNG__name,\n                    position: b\n                };\n                return ((a.promotedTrendId && (c.promoted_id = a.promotedTrendId, g = !0))), c;\n            }), ((g && (f.promoted = g))), ((((b.source === \"clock\")) && (f.event_initiator = eventInitiators.clientSideApp))), this.scribe(e, b, f), ((b.initial && this.scribeTrendsImpression(b)));\n        }, this.scribeTrendsImpression = function(a) {\n            this.scribe(\"impression\", a);\n        }, this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiTrendsDialogOpened\", \"open\"), this.JSBNG__on(\"uiTrendSelected\", this.scribeTrendClick), this.JSBNG__on(\"uiTrendsDisplayed\", this.scribeTrendsResults);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), itemTypes = require(\"app/utils/scribe_item_types\"), eventInitiators = require(\"app/utils/scribe_event_initiators\");\n    module.exports = defineComponent(trendsScribe, withScribe);\n});\ndefine(\"app/ui/trends/trends\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/ddg\",\"app/utils/scribe_item_types\",\"app/ui/with_tweet_actions\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function trendsModule() {\n        this.defaultAttrs({\n            changeLinkSelector: \".change-trends\",\n            trendsInnerSelector: \".trends-inner\",\n            trendItemSelector: \".js-trend-item\",\n            promotedTweetProofSelector: \".tweet-proof-container.promoted-tweet\",\n            trendLinkItemSelector: \".js-trend-item a\",\n            eventTrendClass: \"event-trend\",\n            itemType: \"trend\"\n        }), this.openChangeTrendsDialog = function(a) {\n            this.trigger(\"uiShowTrendsLocationDialog\"), a.preventDefault();\n        }, this.updateModuleContent = function(a, b) {\n            var c = this.$node.hasClass(\"hidden\"), d = b.source;\n            this.select(\"trendsInnerSelector\").html(b.module_html), this.currentWoeid = b.woeid, this.$node.removeClass(\"hidden\");\n            var e = this.getTrendData(this.select(\"trendItemSelector\"));\n            this.trigger(\"uiTrendsDisplayed\", {\n                items: e,\n                initial: c,\n                source: d,\n                scribeData: {\n                    woeid: this.currentWoeid\n                }\n            });\n            var f = this.getPromotedTweetProofData(this.select(\"promotedTweetProofSelector\"));\n            this.trigger(\"uiTweetsDisplayed\", {\n                tweets: f\n            });\n        }, this.trendSelected = function(a, b) {\n            var c = $(b.el).closest(this.attr.trendItemSelector), d = this.getTrendData(c)[0], e = c.index(), f = {\n                JSBNG__name: d.JSBNG__name,\n                item_query: d.JSBNG__name,\n                position: e,\n                item_type: itemTypes.trend\n            }, g = {\n                position: e,\n                query: d.JSBNG__name,\n                url: c.JSBNG__find(\"a\").attr(\"href\"),\n                woeid: this.currentWoeid\n            };\n            ((d.promotedTrendId && (f.promoted_id = d.promotedTrendId, g.promoted = !0))), g.items = [f,], this.trigger(\"uiTrendSelected\", {\n                isPromoted: !!d.promotedTrendId,\n                promotedTrendId: d.promotedTrendId,\n                scribeContext: {\n                    element: \"trend\"\n                },\n                scribeData: g\n            }), this.trackTrendSelected(!!d.promotedTrendId, c.hasClass(this.attr.eventTrendClass));\n        }, this.trackTrendSelected = function(a, b) {\n            var c = ((b ? \"event_trend_click\" : ((a ? \"promoted_trend_click\" : \"trend_click\"))));\n            ddg.track(\"olympic_trends_320\", c);\n        }, this.getTrendData = function(a) {\n            return a.map(function() {\n                var a = $(this);\n                return {\n                    JSBNG__name: a.data(\"trend-name\"),\n                    promotedTrendId: a.data(\"promoted-trend-id\"),\n                    trendingEvent: a.hasClass(\"event-trend\")\n                };\n            }).toArray();\n        }, this.getPromotedTweetProofData = function(a) {\n            return a.map(function(a, b) {\n                return {\n                    impressionId: $(b).data(\"impression-id\")\n                };\n            }).toArray();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataTrendsRefreshed\", this.updateModuleContent), this.JSBNG__on(\"click\", {\n                changeLinkSelector: this.openChangeTrendsDialog,\n                trendLinkItemSelector: this.trendSelected\n            }), this.trigger(\"uiRefreshTrends\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), ddg = require(\"app/data/ddg\"), itemTypes = require(\"app/utils/scribe_item_types\"), withTweetActions = require(\"app/ui/with_tweet_actions\"), withItemActions = require(\"app/ui/with_item_actions\");\n    module.exports = defineComponent(trendsModule, withTweetActions, withItemActions);\n});\ndefine(\"app/ui/trends/trends_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",], function(module, require, exports) {\n    function trendsDialog() {\n        this.defaultAttrs({\n            contentSelector: \"#trends_dialog_content\",\n            trendItemSelector: \".js-trend-link\",\n            toggleSelector: \".customize-by-location\",\n            personalizedSelector: \".trends-personalized\",\n            byLocationSelector: \".trends-by-location\",\n            doneSelector: \".done\",\n            selectDefaultSelector: \".select-default\",\n            errorSelector: \".trends-dialog-error p\",\n            loadingSelector: \".loading\",\n            deciderPersonalizedTrends: !1\n        }), this.openTrendsDialog = function(a, b) {\n            this.trigger(\"uiTrendsDialogOpened\"), ((this.hasContent() ? this.selectActiveView() : this.trigger(\"uiWantsTrendsDialog\"))), this.$node.removeClass(\"has-error\"), this.open();\n        }, this.showPersonalizedView = function() {\n            this.select(\"byLocationSelector\").hide(), this.select(\"personalizedSelector\").show();\n        }, this.showLocationView = function() {\n            this.select(\"personalizedSelector\").hide(), this.select(\"byLocationSelector\").show();\n        }, this.updateDialogContent = function(a, b) {\n            var c = ((this.personalized && b.personalized));\n            this.personalized = b.personalized, this.currentWoeid = b.woeid;\n            if (((c && !this.hasError()))) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"contentSelector\").html(b.dialog_html), this.selectActiveView(), ((!b.personalized && this.markSelected(b.woeid)));\n        }, this.selectActiveView = function() {\n            ((this.isPersonalized() ? this.showPersonalizedView() : this.showLocationView()));\n        }, this.showError = function(a, b) {\n            this.select(\"byLocationSelector\").hide(), this.select(\"personalizedSelector\").hide(), this.$node.addClass(\"has-error\"), this.select(\"errorSelector\").html(b.message);\n        }, this.hasContent = function() {\n            return ((((this.select(\"loadingSelector\").length == 0)) && !this.hasError()));\n        }, this.hasError = function() {\n            return this.$node.hasClass(\"has-error\");\n        }, this.markSelected = function(a) {\n            this.select(\"trendItemSelector\").removeClass(\"selected\").filter(((((\"[data-woeid=\" + a)) + \"]\"))).addClass(\"selected\");\n        }, this.clearSelectedBreadcrumb = function() {\n            this.select(\"selectedBreadCrumbSelector\").removeClass(\"checkmark\");\n        }, this.changeSelectedItem = function(a, b) {\n            var c = $(b.el).data(\"woeid\");\n            if (((this.isPersonalized() || ((c !== this.currentWoeid))))) {\n                this.markSelected(c), this.trigger(\"uiChangeTrendsLocation\", {\n                    woeid: c\n                });\n            }\n        ;\n        ;\n            a.preventDefault();\n        }, this.selectDefault = function(a, b) {\n            var c = !!$(a.target).data(\"personalized\"), b = {\n            };\n            ((c ? b.personalized = !0 : b.woeid = 1)), this.trigger(\"uiChangeTrendsLocation\", b), this.close();\n        }, this.toggleView = function(a, b) {\n            ((this.select(\"personalizedSelector\").is(\":visible\") ? this.showLocationView() : this.showPersonalizedView()));\n        }, this.isPersonalized = function() {\n            return ((this.attr.deciderPersonalizedTrends && this.personalized));\n        }, this.after(\"initialize\", function() {\n            this.select(\"byLocationSelector\").hide(), this.select(\"personalizedSelector\").hide(), this.JSBNG__on(JSBNG__document, \"uiShowTrendsLocationDialog\", this.openTrendsDialog), this.JSBNG__on(JSBNG__document, \"dataGotTrendsDialog\", this.updateDialogContent), this.JSBNG__on(JSBNG__document, \"dataGotTrendsDialogError\", this.showError), this.JSBNG__on(\"click\", {\n                trendItemSelector: this.changeSelectedItem,\n                toggleSelector: this.toggleView,\n                doneSelector: this.close,\n                selectDefaultSelector: this.selectDefault\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\");\n    module.exports = defineComponent(trendsDialog, withDialog, withPosition);\n});\ndefine(\"app/ui/trends/dialog/with_location_info\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withLocationInfo() {\n        this.defaultAttrs({\n            JSBNG__location: {\n            },\n            personalized: !1\n        }), this.setLocationInfo = function(a, b) {\n            this.personalized = !!b.personalized, this.JSBNG__location = ((b.JSBNG__location || {\n            })), this.trigger(\"uiLocationInfoUpdated\");\n        }, this.changeLocationInfo = function(a) {\n            this.trigger(\"uiChangeLocation\", {\n                JSBNG__location: a\n            });\n        }, this.setPersonalizedTrends = function() {\n            this.trigger(\"uiChangeLocation\", {\n                personalized: !0\n            });\n        }, this.before(\"initialize\", function() {\n            this.personalized = this.attr.personalized, this.JSBNG__location = this.attr.JSBNG__location;\n        }), this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataChangedTrendLocation\", this.setLocationInfo);\n        });\n    };\n;\n    module.exports = withLocationInfo;\n});\ndefine(\"app/ui/trends/dialog/location_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/trends/dialog/with_location_info\",], function(module, require, exports) {\n    function trendsLocationDropdown() {\n        this.defaultAttrs({\n            regionsSelector: \"select[name=\\\"regions\\\"]\",\n            citiesSelector: \"select[name=\\\"cities\\\"]\"\n        }), this.initializeCities = function() {\n            this.citiesByRegionWoeid = {\n            };\n            var a = this.$cities.JSBNG__find(\"option\");\n            a.each(function(a, b) {\n                var c = $(b), d = c.data(\"woeid\");\n                ((this.citiesByRegionWoeid[d] || (this.citiesByRegionWoeid[d] = []))), this.citiesByRegionWoeid[d].push(c);\n            }.bind(this));\n        }, this.updateDropdown = function() {\n            var a = this.$regions.val(), b = ((this.citiesByRegionWoeid[a] || \"\"));\n            this.$cities.empty(), this.$cities.html(b);\n        }, this.updateRegion = function() {\n            this.updateDropdown();\n            var a = this.$cities.children().first();\n            ((a.length && (a.prop(\"selected\", !0), a.change())));\n        }, this.updateCity = function() {\n            var a = this.$cities.JSBNG__find(\"option:selected\"), b = parseInt(a.val(), 10), c = a.data(\"JSBNG__name\");\n            this.currentSelection = b, this.changeLocationInfo({\n                woeid: b,\n                JSBNG__name: c\n            });\n        }, this.possiblyClearSelection = function() {\n            ((((this.currentSelection != this.JSBNG__location.woeid)) && this.reset()));\n        }, this.reset = function() {\n            this.currentSelection = null;\n            var a = this.$regions.JSBNG__find(\"option[value=\\\"\\\"]\");\n            a.prop(\"selected\", !0), this.updateDropdown();\n        }, this.after(\"initialize\", function() {\n            this.$regions = this.select(\"regionsSelector\"), this.$cities = this.select(\"citiesSelector\"), this.initializeCities(), this.JSBNG__on(this.$regions, \"change\", this.updateRegion), this.JSBNG__on(this.$cities, \"change\", this.updateCity), this.JSBNG__on(JSBNG__document, \"uiTrendsDialogReset\", this.reset), this.JSBNG__on(\"uiLocationInfoUpdated\", this.possiblyClearSelection), this.updateDropdown();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withLocationInfo = require(\"app/ui/trends/dialog/with_location_info\");\n    module.exports = defineComponent(trendsLocationDropdown, withLocationInfo);\n});\ndefine(\"app/ui/trends/dialog/location_search\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/trends/dialog/with_location_info\",\"app/ui/typeahead/typeahead_dropdown\",\"app/ui/typeahead/typeahead_input\",], function(module, require, exports) {\n    function trendsLocationSearch() {\n        this.defaultAttrs({\n            inputSelector: \"input.trends-location-search-input\"\n        }), this.executeTypeaheadSelection = function(a, b) {\n            if (((b.item.woeid == -1))) {\n                this.trigger(\"uiTrendsLocationSearchNoResults\");\n                return;\n            }\n        ;\n        ;\n            this.currentSelection = b.item, this.changeLocationInfo({\n                woeid: b.item.woeid,\n                JSBNG__name: b.item.JSBNG__name\n            });\n        }, this.possiblyClearSelection = function() {\n            ((((this.currentSelection && ((this.currentSelection.woeid != this.JSBNG__location.woeid)))) && this.reset()));\n        }, this.reset = function(a, b) {\n            this.currentSelection = null, this.$input.val(\"\");\n        }, this.after(\"initialize\", function() {\n            this.$input = this.select(\"inputSelector\"), this.JSBNG__on(\"uiTypeaheadItemSelected uiTypeaheadItemComplete\", this.executeTypeaheadSelection), this.JSBNG__on(\"uiLocationInfoUpdated\", this.possiblyClearSelection), this.JSBNG__on(JSBNG__document, \"uiTrendsDialogReset\", this.reset), TypeaheadInput.attachTo(this.$node, {\n                inputSelector: this.attr.inputSelector\n            }), TypeaheadDropdown.attachTo(this.$node, {\n                inputSelector: this.attr.inputSelector,\n                blockLinkActions: !0,\n                datasourceRenders: [[\"trendLocations\",[\"trendLocations\",],],],\n                deciders: this.attr.typeaheadData,\n                eventData: {\n                    scribeContext: {\n                        component: \"trends_location_search\"\n                    }\n                }\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withLocationInfo = require(\"app/ui/trends/dialog/with_location_info\"), TypeaheadDropdown = require(\"app/ui/typeahead/typeahead_dropdown\"), TypeaheadInput = require(\"app/ui/typeahead/typeahead_input\");\n    module.exports = defineComponent(trendsLocationSearch, withLocationInfo);\n});\ndefine(\"app/ui/trends/dialog/current_location\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/trends/dialog/with_location_info\",], function(module, require, exports) {\n    function trendsCurrentLocation() {\n        this.defaultAttrs({\n            personalizedSelector: \".js-location-personalized\",\n            nonpersonalizedSelector: \".js-location-nonpersonalized\",\n            currentLocationSelector: \".current-location\"\n        }), this.updateView = function() {\n            var a = !!this.personalized;\n            ((a || this.select(\"currentLocationSelector\").text(this.JSBNG__location.JSBNG__name))), this.select(\"nonpersonalizedSelector\").toggle(!a), this.select(\"personalizedSelector\").toggle(a);\n        }, this.after(\"initialize\", function() {\n            this.updateView(), this.JSBNG__on(\"uiLocationInfoUpdated\", this.updateView);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withLocationInfo = require(\"app/ui/trends/dialog/with_location_info\");\n    module.exports = defineComponent(trendsCurrentLocation, withLocationInfo);\n});\ndefine(\"app/ui/trends/dialog/with_location_list_picker\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/trends/dialog/with_location_info\",], function(module, require, exports) {\n    function withLocationListPicker() {\n        compose.mixin(this, [withLocationInfo,]), this.defaultAttrs({\n            locationSelector: \".trend-location-picker-item\",\n            selectedAttr: \"selected\"\n        }), this.selectLocation = function(a, b) {\n            a.preventDefault();\n            var c = $(b.el), d = {\n                woeid: c.data(\"woeid\"),\n                JSBNG__name: c.data(\"JSBNG__name\")\n            };\n            this.changeLocationInfo(d), this.showSelected(d.woeid, !1);\n        }, this.showSelected = function(a, b) {\n            var c = this.select(\"locationSelector\");\n            c.removeClass(this.attr.selectedAttr), ((((!b && a)) && c.filter(((((\"[data-woeid=\\\"\" + a)) + \"\\\"]\"))).addClass(this.attr.selectedAttr)));\n        }, this.locationInfoUpdated = function() {\n            this.showSelected(this.JSBNG__location.woeid, this.personalized);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiLocationInfoUpdated\", this.locationInfoUpdated), this.JSBNG__on(\"click\", {\n                locationSelector: this.selectLocation\n            }), this.showSelected(this.JSBNG__location.woeid, this.personalized);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withLocationInfo = require(\"app/ui/trends/dialog/with_location_info\");\n    module.exports = withLocationListPicker;\n});\ndefine(\"app/ui/trends/dialog/nearby_trends\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/trends/dialog/with_location_list_picker\",], function(module, require, exports) {\n    function trendsNearby() {\n    \n    };\n;\n    var defineComponent = require(\"core/component\"), withLocationListPicker = require(\"app/ui/trends/dialog/with_location_list_picker\");\n    module.exports = defineComponent(trendsNearby, withLocationListPicker);\n});\ndefine(\"app/ui/trends/dialog/recent_trends\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/trends/dialog/with_location_list_picker\",], function(module, require, exports) {\n    function trendsRecent() {\n        this.defaultAttrs({\n            listContainerSelector: \".trend-location-picker\"\n        }), this.loadTrendLocations = function(a, b) {\n            var c = b.trendLocations;\n            this.$list.empty(), c.forEach(function(a) {\n                var b = this.$template.clone(!1), c = b.JSBNG__find(\"button\");\n                c.text(a.JSBNG__name), c.attr(\"data-woeid\", a.woeid), c.attr(\"data-name\", a.JSBNG__name), this.$list.append(b);\n            }, this), this.$node.toggle(((c.length > 0)));\n        }, this.after(\"initialize\", function() {\n            this.$list = this.select(\"listContainerSelector\"), this.$template = this.$list.JSBNG__find(\"li:first\").clone(!1), this.JSBNG__on(JSBNG__document, \"dataGotRecentTrendLocations\", this.loadTrendLocations), this.trigger(\"uiWantsRecentTrendLocations\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withLocationListPicker = require(\"app/ui/trends/dialog/with_location_list_picker\");\n    module.exports = defineComponent(trendsRecent, withLocationListPicker);\n});\ndefine(\"app/ui/trends/dialog/dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/ui/trends/dialog/location_dropdown\",\"app/ui/trends/dialog/location_search\",\"app/ui/trends/dialog/current_location\",\"app/ui/trends/dialog/nearby_trends\",\"app/ui/trends/dialog/recent_trends\",\"app/ui/trends/dialog/with_location_info\",], function(module, require, exports) {\n    function trendsLocationDialog() {\n        this.defaultAttrs({\n            contentSelector: \"#trends_dialog_content\",\n            quickSelectSelector: \"#trend-locations-quick-select\",\n            dropdownSelector: \"#trend-locations-dropdown-select\",\n            personalizedSelector: \".trends-personalized\",\n            nonPersonalizedSelector: \".trends-by-location\",\n            changeTrendsSelector: \".customize-by-location\",\n            showDropdownSelector: \".js-show-dropdown-select\",\n            showQuickSelectSelector: \".js-show-quick-select\",\n            searchSelector: \".trends-search-locations\",\n            nearbySelector: \".trends-nearby-locations\",\n            recentSelector: \".trends-recent-locations\",\n            currentLocationSelector: \".trends-current-location\",\n            loadingSelector: \"#trend-locations-loading\",\n            defaultSelector: \".select-default\",\n            doneSelector: \".done\",\n            errorSelector: \".trends-dialog-error p\",\n            errorClass: \"has-error\"\n        }), this.JSBNG__openDialog = function(a, b) {\n            this.trigger(\"uiTrendsDialogOpened\"), ((this.initialized ? this.setCurrentView() : (this.trigger(\"uiWantsTrendsLocationDialog\"), this.initialized = !0))), this.$node.removeClass(\"has-error\"), this.open();\n        }, this.setCurrentView = function() {\n            ((this.personalized ? this.showPersonalizedView() : this.showNonpersonalizedView()));\n        }, this.showPersonalizedView = function() {\n            this.select(\"nonPersonalizedSelector\").hide(), this.select(\"personalizedSelector\").show();\n        }, this.showNonpersonalizedView = function() {\n            this.select(\"personalizedSelector\").hide(), this.select(\"nonPersonalizedSelector\").show();\n        }, this.showQuickSelectContainer = function(a, b) {\n            this.showNonpersonalizedView(), this.select(\"dropdownSelector\").hide(), this.select(\"quickSelectSelector\").show();\n        }, this.showDropdownContainer = function(a, b) {\n            this.showNonpersonalizedView(), this.select(\"quickSelectSelector\").hide(), this.select(\"dropdownSelector\").show();\n        }, this.hideViews = function() {\n            this.select(\"personalizedSelector\").hide(), this.select(\"nonPersonalizedSelector\").hide();\n        }, this.showError = function(a, b) {\n            this.hideViews(), this.hideLoading(), this.initialized = !1, this.$node.addClass(this.attr.errorClass), this.select(\"errorSelector\").html(b.message);\n        }, this.selectDefault = function(a, b) {\n            var c = $(a.target), d = !!c.data(\"personalized\");\n            ((d ? this.setPersonalizedTrends() : this.changeLocationInfo({\n                JSBNG__name: c.data(\"JSBNG__name\"),\n                woeid: c.data(\"woeid\")\n            }))), this.close();\n        }, this.reset = function(a, b) {\n            this.showQuickSelectContainer(), this.trigger(\"uiTrendsDialogReset\");\n        }, this.initializeDialog = function(a, b) {\n            this.select(\"contentSelector\").html(b.dialog_html), this.setLocationInfo(a, b), this.initializeComponents(), this.setCurrentView();\n        }, this.showLoading = function() {\n            this.select(\"loadingSelector\").show();\n        }, this.hideLoading = function() {\n            this.select(\"loadingSelector\").hide();\n        }, this.initializeComponents = function(a, b) {\n            CurrentLocation.attachTo(this.attr.currentLocationSelector, {\n                JSBNG__location: this.JSBNG__location,\n                personalized: this.personalized\n            }), LocationSearch.attachTo(this.attr.searchSelector, {\n                typeaheadData: this.attr.typeaheadData\n            }), LocationDropdown.attachTo(this.attr.dropdownSelector), NearbyTrends.attachTo(this.attr.nearbySelector, {\n                JSBNG__location: this.JSBNG__location,\n                personalized: this.personalized\n            }), RecentTrends.attachTo(this.attr.recentSelector, {\n                JSBNG__location: this.JSBNG__location,\n                personalized: this.personalized\n            });\n        }, this.after(\"initialize\", function() {\n            this.hideViews(), this.JSBNG__on(\"uiChangeLocation\", this.showLoading), this.JSBNG__on(\"uiTrendsLocationSearchNoResults\", this.showDropdownContainer), this.JSBNG__on(JSBNG__document, \"uiShowTrendsLocationDialog\", this.JSBNG__openDialog), this.JSBNG__on(JSBNG__document, \"uiDialogClosed\", this.reset), this.JSBNG__on(JSBNG__document, \"dataGotTrendsLocationDialog\", this.initializeDialog), this.JSBNG__on(JSBNG__document, \"dataGotTrendsLocationDialogError\", this.showError), this.JSBNG__on(\"uiLocationInfoUpdated\", this.hideLoading), this.JSBNG__on(\"click\", {\n                doneSelector: this.close,\n                defaultSelector: this.selectDefault,\n                changeTrendsSelector: this.showNonpersonalizedView,\n                showDropdownSelector: this.showDropdownContainer,\n                showQuickSelectSelector: this.showQuickSelectContainer\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), LocationDropdown = require(\"app/ui/trends/dialog/location_dropdown\"), LocationSearch = require(\"app/ui/trends/dialog/location_search\"), CurrentLocation = require(\"app/ui/trends/dialog/current_location\"), NearbyTrends = require(\"app/ui/trends/dialog/nearby_trends\"), RecentTrends = require(\"app/ui/trends/dialog/recent_trends\"), withLocationInfo = require(\"app/ui/trends/dialog/with_location_info\");\n    module.exports = defineComponent(trendsLocationDialog, withDialog, withPosition, withLocationInfo);\n});\ndefine(\"app/boot/trends\", [\"module\",\"require\",\"exports\",\"app/data/trends\",\"app/data/trends/location_dialog\",\"app/data/trends/recent_locations\",\"app/data/trends_scribe\",\"app/ui/trends/trends\",\"app/ui/trends/trends_dialog\",\"app/ui/trends/dialog/dialog\",], function(module, require, exports) {\n    var TrendsData = require(\"app/data/trends\"), TrendsLocationDialogData = require(\"app/data/trends/location_dialog\"), TrendsRecentLocationsData = require(\"app/data/trends/recent_locations\"), TrendsScribe = require(\"app/data/trends_scribe\"), TrendsModule = require(\"app/ui/trends/trends\"), TrendsDialog = require(\"app/ui/trends/trends_dialog\"), TrendsLocationDialog = require(\"app/ui/trends/dialog/dialog\");\n    module.exports = function(b) {\n        TrendsScribe.attachTo(JSBNG__document, b), TrendsData.attachTo(JSBNG__document, b), TrendsModule.attachTo(\".module.trends\", {\n            loggedIn: b.loggedIn,\n            eventData: {\n                scribeContext: {\n                    component: \"trends\"\n                }\n            }\n        }), ((b.trendsLocationDialogEnabled ? (TrendsLocationDialogData.attachTo(JSBNG__document, b), TrendsRecentLocationsData.attachTo(JSBNG__document, b), TrendsLocationDialog.attachTo(\"#trends_dialog\", {\n            typeaheadData: b.typeaheadData,\n            eventData: {\n                scribeContext: {\n                    component: \"trends_location_dialog\"\n                }\n            }\n        })) : TrendsDialog.attachTo(\"#trends_dialog\", {\n            deciderPersonalizedTrends: b.decider_personalized_trends,\n            eventData: {\n                scribeContext: {\n                    component: \"trends_dialog\"\n                }\n            }\n        })));\n    };\n});\ndefine(\"app/ui/infinite_scroll_watcher\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",], function(module, require, exports) {\n    function infiniteScrollWatcher() {\n        var a = 0, b = 1;\n        this.checkScrollPosition = function() {\n            var c = this.$content.height(), d = !1;\n            ((((this.inTriggerRange(a) && ((((c > this.lastTriggeredHeight)) || this.lastTriggeredFrom(b))))) ? (this.trigger(\"uiNearTheTop\"), this.lastTriggerFrom = a, d = !0) : ((((this.inTriggerRange(b) && ((((c > this.lastTriggeredHeight)) || this.lastTriggeredFrom(a))))) && (this.trigger(\"uiNearTheBottom\"), this.lastTriggerFrom = b, d = !0))))), ((d && (this.lastTriggeredHeight = c)));\n        }, this.inTriggerRange = function(c) {\n            var d = this.$content.height(), e = this.$node.scrollTop(), f = ((e + this.$node.height())), g = Math.abs(Math.min(((f - d)), 0)), h = ((this.$node.height() / 2));\n            return ((((((e < h)) && ((c == a)))) || ((((g < h)) && ((c == b))))));\n        }, this.lastTriggeredFrom = function(a) {\n            return ((this.lastTriggerFrom === a));\n        }, this.resetScrollState = function() {\n            this.lastTriggeredHeight = 0, this.lastTriggerFrom = -1;\n        }, this.after(\"initialize\", function(a) {\n            this.resetScrollState(), this.$content = ((a.contentSelector ? this.select(\"contentSelector\") : $(JSBNG__document))), this.JSBNG__on(\"JSBNG__scroll\", utils.throttle(this.checkScrollPosition.bind(this), 100)), this.JSBNG__on(\"uiTimelineReset\", this.resetScrollState);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), InfiniteScrollWatcher = defineComponent(infiniteScrollWatcher);\n    module.exports = InfiniteScrollWatcher;\n});\ndefine(\"app/data/timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_data\",], function(module, require, exports) {\n    function timeline() {\n        this.defaultAttrs({\n            defaultAjaxData: {\n                include_entities: 1,\n                include_available_features: 1\n            },\n            noShowError: !0\n        }), this.requestItems = function(a, b) {\n            var c = function(b) {\n                this.trigger(a.target, \"dataGotMoreTimelineItems\", b);\n            }, d = function(b) {\n                this.trigger(a.target, \"dataGotMoreTimelineItemsError\", b);\n            }, e = {\n            };\n            ((((b && b.fromPolling)) && (e[\"X-Twitter-Polling\"] = !0)));\n            var f = {\n                since_id: b.since_id,\n                max_id: b.max_id,\n                cursor: b.cursor,\n                is_forward: b.is_forward,\n                latent_count: b.latent_count,\n                composed_count: b.composed_count,\n                include_new_items_bar: b.include_new_items_bar,\n                preexpanded_id: b.preexpanded_id,\n                interval: b.interval,\n                count: b.count,\n                timeline_empty: b.timeline_empty\n            };\n            ((b.query && (f.q = b.query))), ((b.curated_timeline_since_id && (f.curated_timeline_since_id = b.curated_timeline_since_id))), ((b.scroll_cursor && (f.scroll_cursor = b.scroll_cursor))), ((b.refresh_cursor && (f.refresh_cursor = b.refresh_cursor))), this.get({\n                url: this.attr.endpoint,\n                headers: e,\n                data: utils.merge(this.attr.defaultAjaxData, f),\n                eventData: b,\n                success: c.bind(this),\n                error: d.bind(this)\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"uiWantsMoreTimelineItems\", this.requestItems);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(timeline, withData);\n});\ndefine(\"app/boot/timeline\", [\"module\",\"require\",\"exports\",\"app/ui/infinite_scroll_watcher\",\"app/data/timeline\",], function(module, require, exports) {\n    function initialize(a) {\n        ((a.no_global_infinite_scroll || InfiniteScrollWatcher.attachTo(window))), TimelineData.attachTo(JSBNG__document, a);\n    };\n;\n    var InfiniteScrollWatcher = require(\"app/ui/infinite_scroll_watcher\"), TimelineData = require(\"app/data/timeline\");\n    module.exports = initialize;\n});\ndefine(\"app/data/activity_popup\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function activityPopupData() {\n        this.defaultAttrs({\n            noShowError: !0\n        }), this.getUsers = function(a, b) {\n            var c = ((b.isRetweeted ? \"/i/activity/retweeted_popup\" : \"/i/activity/favorited_popup\"));\n            this.get({\n                url: c,\n                data: {\n                    id: b.tweetId\n                },\n                eventData: b,\n                success: \"dataActivityPopupSuccess\",\n                error: \"dataActivityPopupError\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiFetchActivityPopup\", this.getUsers);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(activityPopupData, withData);\n});\ndefine(\"app/ui/dialogs/activity_popup\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/ui/with_position\",\"app/ui/with_dialog\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function activityPopup() {\n        this.defaultAttrs({\n            itemType: \"user\",\n            titleSelector: \".modal-title\",\n            tweetSelector: \".activity-tweet\",\n            contentSelector: \".activity-content\",\n            openDropdownSelector: \".user-dropdown.open .dropdown-menu\",\n            usersSelector: \".activity-popup-users\"\n        }), this.setTitle = function(a) {\n            this.select(\"titleSelector\").html(a);\n        }, this.setContent = function(a) {\n            this.$node.toggleClass(\"has-content\", !!a), this.select(\"contentSelector\").html(a);\n        }, this.requestPopup = function(a, b) {\n            this.attr.eventData = utils.merge(this.attr.eventData, {\n                scribeContext: {\n                    component: ((b.isRetweeted ? \"retweeted_dialog\" : \"favorited_dialog\"))\n                }\n            }, !0), this.setTitle(b.titleHtml);\n            var c = $(b.tweetHtml);\n            this.select(\"tweetSelector\").html(c), this.setContent(\"\"), this.open(), this.trigger(\"uiFetchActivityPopup\", {\n                tweetId: c.attr(\"data-tweet-id\"),\n                isRetweeted: b.isRetweeted\n            });\n        }, this.updateUsers = function(a, b) {\n            this.setTitle(b.htmlTitle), this.setContent(b.htmlUsers);\n            var c = this.select(\"usersSelector\");\n            ((((c.height() >= parseInt(c.css(\"max-height\"), 10))) && c.addClass(\"dropdown-threshold\")));\n        }, this.showError = function(a, b) {\n            this.setContent($(\"\\u003Cp\\u003E\").addClass(\"error\").html(b.message));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiRequestActivityPopup\", this.requestPopup), this.JSBNG__on(JSBNG__document, \"dataActivityPopupSuccess\", this.updateUsers), this.JSBNG__on(JSBNG__document, \"dataActivityPopupError\", this.showError), this.JSBNG__on(JSBNG__document, \"uiShowProfilePopup uiOpenTweetDialogWithOptions uiNeedsDMDialog uiOpenSigninOrSignupDialog\", this.close);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\");\n    module.exports = defineComponent(activityPopup, withDialog, withPosition, withUserActions, withItemActions);\n});\ndefine(\"app/data/activity_popup_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function activityPopupScribe() {\n        this.scribeActivityPopupOpen = function(a, b) {\n            var c = b.sourceEventData;\n            this.scribe(\"open\", b, {\n                item_ids: [c.tweetId,],\n                item_count: 1\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataActivityPopupSuccess\", this.scribeActivityPopupOpen);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(activityPopupScribe, withScribe);\n});\ndefine(\"app/boot/activity_popup\", [\"module\",\"require\",\"exports\",\"app/data/activity_popup\",\"app/ui/dialogs/activity_popup\",\"app/data/activity_popup_scribe\",], function(module, require, exports) {\n    function initialize(a) {\n        ActivityPopupData.attachTo(JSBNG__document, a), ActivityPopupScribe.attachTo(JSBNG__document, a), ActivityPopup.attachTo(activityPopupSelector, a);\n    };\n;\n    var ActivityPopupData = require(\"app/data/activity_popup\"), ActivityPopup = require(\"app/ui/dialogs/activity_popup\"), ActivityPopupScribe = require(\"app/data/activity_popup_scribe\"), activityPopupSelector = \"#activity-popup-dialog\";\n    module.exports = initialize;\n});\ndefine(\"app/data/tweet_translation\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function tweetTranslation() {\n        this.getTweetTranslation = function(a, b) {\n            var c = function(a) {\n                ((((a && a.message)) && this.trigger(\"uiShowMessage\", {\n                    message: a.message\n                }))), this.trigger(\"dataTweetTranslationSuccess\", a);\n            }, d = function(a, c, d) {\n                this.trigger(\"dataTweetTranslationError\", {\n                    id: b.id,\n                    JSBNG__status: c,\n                    errorThrown: d\n                });\n            }, e = {\n                id: b.tweetId,\n                dest: b.dest\n            };\n            this.get({\n                url: \"/i/translations/show.json\",\n                data: e,\n                headers: {\n                    \"X-Phx\": !0\n                },\n                eventData: b,\n                success: c.bind(this),\n                error: d.bind(this)\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsTweetTranslation\", this.getTweetTranslation);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), TweetTranslation = defineComponent(tweetTranslation, withData);\n    module.exports = TweetTranslation;\n});\ndefine(\"app/data/conversations\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function conversations() {\n        this.requestExpansion = function(a, b) {\n            var c = function(b) {\n                this.trigger(a.target, \"dataTweetConversationResult\", b), this.trigger(a.target, \"dataTweetSocialProofResult\", b);\n            }, d = function(b, c, d) {\n                this.trigger(a.target, \"dataTweetExpansionError\", {\n                    JSBNG__status: c,\n                    errorThrown: d\n                });\n            }, e = [\"social_proof\",];\n            ((b.fullConversation ? e.push(\"ancestors\", \"descendants\") : ((b.descendantsOnly && e.push(\"descendants\")))));\n            var f = {\n                include: e\n            };\n            ((b.facepileMax && (f.facepile_max = b.facepileMax)));\n            var g = window.JSBNG__location.search.match(/[?&]js_maps=([^&]+)/);\n            ((g && (f.js_maps = g[1]))), this.get({\n                url: ((\"/i/expanded/batch/\" + encodeURIComponent($(a.target).attr(\"data-tweet-id\")))),\n                data: f,\n                eventData: b,\n                success: c.bind(this),\n                error: d.bind(this)\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsTweetExpandedContent\", this.requestExpansion);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), Conversations = defineComponent(conversations, withData);\n    module.exports = Conversations;\n});\ndefine(\"app/data/media_settings\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"core/i18n\",], function(module, require, exports) {\n    function mediaSettings() {\n        this.flagMedia = function(a, b) {\n            this.post({\n                url: \"/i/expanded/flag_possibly_sensitive\",\n                eventData: b,\n                data: b,\n                success: \"dataFlaggedMediaResult\",\n                error: \"dataFlaggedMediaError\"\n            });\n        }, this.updateViewPossiblySensitive = function(a, b) {\n            this.post({\n                url: \"/i/expanded/update_view_possibly_sensitive\",\n                eventData: b,\n                data: b,\n                success: \"dataUpdatedViewPossiblySensitiveResult\",\n                error: \"dataUpdatedViewPossiblySensitiveError\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiFlagMedia\", this.flagMedia), this.JSBNG__on(\"uiUpdateViewPossiblySensitive\", this.updateViewPossiblySensitive), this.JSBNG__on(\"dataUpdatedViewPossiblySensitiveResult\", function() {\n                this.trigger(\"uiShowMessage\", {\n                    message: _(\"Your media display settings have been changed.\")\n                });\n            }), this.JSBNG__on(\"dataUpdatedViewPossiblySensitiveError\", function() {\n                this.trigger(\"uiShowError\", {\n                    message: _(\"Couldn't set inline media settings.\")\n                });\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(mediaSettings, withData);\n});\ndefine(\"app/ui/dialogs/sensitive_flag_confirmation\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",], function(module, require, exports) {\n    function flagDialog() {\n        this.defaultAttrs({\n            dialogSelector: \"#sensitive_flag_dialog\",\n            cancelSelector: \"#cancel_flag_confirmation\",\n            submitSelector: \"#submit_flag_confirmation\",\n            settingsSelector: \"#sensitive-settings-checkbox\",\n            illegalSelector: \"#sensitive-illegal-checkbox\"\n        }), this.flag = function() {\n            ((this.select(\"settingsSelector\").attr(\"checked\") && this.trigger(\"uiUpdateViewPossiblySensitive\", {\n                do_show: !1\n            }))), ((this.select(\"illegalSelector\").attr(\"checked\") && this.trigger(\"uiFlagMedia\", {\n                id: this.$dialog.attr(\"data-tweet-id\")\n            }))), this.close();\n        }, this.openWithId = function(b, c) {\n            this.$dialog.attr(\"data-tweet-id\", c.id), this.open();\n        }, this.after(\"initialize\", function(a) {\n            this.$dialog = this.select(\"dialogSelector\"), this.JSBNG__on(JSBNG__document, \"uiFlagConfirmation\", this.openWithId), this.JSBNG__on(\"click\", {\n                submitSelector: this.flag,\n                cancelSelector: this.close\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\");\n    module.exports = defineComponent(flagDialog, withDialog, withPosition);\n});\ndefine(\"app/ui/user_actions\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_user_actions\",], function(module, require, exports) {\n    function userActions() {\n    \n    };\n;\n    var defineComponent = require(\"core/component\"), withUserActions = require(\"app/ui/with_user_actions\");\n    module.exports = defineComponent(userActions, withUserActions);\n});\ndefine(\"app/data/prompt_mobile_app_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function mobileAppPromptScribe() {\n        this.scribeOnClick = function(a, b) {\n            var c = a.target;\n            ((((c.getAttribute(\"id\") == \"iphone_download\")) ? this.scribe({\n                component: \"promptbird_262\",\n                element: \"iphone_download\",\n                action: \"click\"\n            }) : ((((c.getAttribute(\"id\") == \"android_download\")) ? this.scribe({\n                component: \"promptbird_262\",\n                element: \"android_download\",\n                action: \"click\"\n            }) : ((((c.className == \"dismiss-white\")) && this.scribe({\n                component: \"promptbird_262\",\n                action: \"dismiss\"\n            })))))));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", this.scribeOnClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(mobileAppPromptScribe, withScribe);\n});\ndefine(\"app/boot/tweets\", [\"module\",\"require\",\"exports\",\"app/boot/activity_popup\",\"app/data/tweet_actions\",\"app/data/tweet_translation\",\"app/data/conversations\",\"app/data/media_settings\",\"app/ui/dialogs/sensitive_flag_confirmation\",\"app/ui/expando/expanding_tweets\",\"app/ui/media/media_tweets\",\"app/data/url_resolver\",\"app/ui/user_actions\",\"app/data/prompt_mobile_app_scribe\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a, b) {\n        activityPopupBoot(b), TweetActionsData.attachTo(JSBNG__document, b), TweetTranslationData.attachTo(JSBNG__document, b), ConversationsData.attachTo(JSBNG__document, b), MediaSettingsData.attachTo(JSBNG__document, b), UrlResolver.attachTo(JSBNG__document), ExpandingTweets.attachTo(a, b), ((b.excludeUserActions || UserActions.attachTo(a, utils.merge(b, {\n            genericItemSelector: \".js-stream-item\"\n        })))), MediaTweets.attachTo(a, b), SensitiveFlagConfirmationDialog.attachTo(JSBNG__document), MobileAppPromptScribe.attachTo($(\"div[data-prompt-id=262]\"));\n    };\n;\n    var activityPopupBoot = require(\"app/boot/activity_popup\"), TweetActionsData = require(\"app/data/tweet_actions\"), TweetTranslationData = require(\"app/data/tweet_translation\"), ConversationsData = require(\"app/data/conversations\"), MediaSettingsData = require(\"app/data/media_settings\"), SensitiveFlagConfirmationDialog = require(\"app/ui/dialogs/sensitive_flag_confirmation\"), ExpandingTweets = require(\"app/ui/expando/expanding_tweets\"), MediaTweets = require(\"app/ui/media/media_tweets\"), UrlResolver = require(\"app/data/url_resolver\"), UserActions = require(\"app/ui/user_actions\"), MobileAppPromptScribe = require(\"app/data/prompt_mobile_app_scribe\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/boot/help_pips_enable\", [\"module\",\"require\",\"exports\",\"app/utils/cookie\",\"app/utils/storage/core\",], function(module, require, exports) {\n    function initialize(a) {\n        var b = new JSBNG__Storage(\"help_pips\"), c = +(new JSBNG__Date);\n        b.clear(), b.setItem(\"until\", ((c + 1209600000))), cookie(\"help_pips\", null);\n    };\n;\n    var cookie = require(\"app/utils/cookie\"), JSBNG__Storage = require(\"app/utils/storage/core\");\n    module.exports = initialize;\n});\ndefine(\"app/data/help_pips\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function helpPipsData() {\n        this.defaultAttrs({\n            noShowError: !0\n        }), this.loadHelpPips = function(a, b) {\n            var c = function(a) {\n                this.trigger(\"dataHelpPipsLoaded\", {\n                    pips: a\n                });\n            }.bind(this), d = function(a) {\n                this.trigger(\"dataHelpPipsError\");\n            }.bind(this);\n            this.get({\n                url: \"/i/help/pips\",\n                data: {\n                },\n                eventData: b,\n                success: c,\n                error: d\n            });\n        }, this.after(\"initialize\", function() {\n            this.loadHelpPips();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(helpPipsData, withData);\n});\ndefine(\"app/data/help_pips_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function helpPipsScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiHelpPipIconAdded\", \"impression\"), this.scribeOnEvent(\"uiHelpPipIconClicked\", \"open\"), this.scribeOnEvent(\"uiHelpPipPromptFollowed\", \"success\"), this.scribeOnEvent(\"uiHelpPipExplainTriggered\", \"show\"), this.scribeOnEvent(\"uiHelpPipExplainClicked\", \"dismiss\"), this.scribeOnEvent(\"uiHelpPipExplainFollowed\", \"complete\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(helpPipsScribe, withScribe);\n});\ndefine(\"app/ui/help_pip\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function helpPip() {\n        this.explainTriggered = function(a) {\n            var b = $(a.target).closest(\".js-stream-item\");\n            if (!b.length) {\n                return;\n            }\n        ;\n        ;\n            if (((this.pip.matcher && ((b.JSBNG__find(this.pip.matcher).length == 0))))) {\n                return;\n            }\n        ;\n        ;\n            if (((this.state == \"icon\"))) this.trigger(\"uiHelpPipExplainTriggered\");\n             else {\n                if (((this.state != \"JSBNG__prompt\"))) {\n                    return;\n                }\n            ;\n            ;\n                this.trigger(\"uiHelpPipPromptFollowed\");\n            }\n        ;\n        ;\n            this.showState(\"explain\", b);\n        }, this.dismissTriggered = function(a) {\n            var b = $(a.target).closest(\".js-stream-item\");\n            if (((((b.length && this.pip.matcher)) && ((b.JSBNG__find(this.pip.matcher).length == 0))))) {\n                return;\n            }\n        ;\n        ;\n            ((((((!b.length || ((b[0] == this.$streamItem[0])))) && ((this.state == \"explain\")))) && this.trigger(\"uiHelpPipExplainFollowed\"))), this.dismiss();\n        }, this.clicked = function(a) {\n            ((((this.state == \"icon\")) ? (this.trigger(\"uiHelpPipIconClicked\"), this.showState(\"JSBNG__prompt\")) : ((((this.state == \"explain\")) && (this.trigger(\"uiHelpPipExplainClicked\"), this.dismiss())))));\n        }, this.showState = function(a, b) {\n            if (((((a == \"JSBNG__prompt\")) && !this.pip.html.JSBNG__prompt))) {\n                return this.showState(\"explain\", b);\n            }\n        ;\n        ;\n            b = ((b || this.$streamItem));\n            if (((this.state == a))) {\n                return;\n            }\n        ;\n        ;\n            ((((((this.state == \"icon\")) && ((((a == \"JSBNG__prompt\")) || ((a == \"explain\")))))) && this.trigger(\"uiHelpPipOpened\", {\n                pip: this.pip\n            }))), ((((this.$streamItem[0] != b[0])) && this.unhighlight())), this.state = a, this.$streamItem = b;\n            var c = this.$pip.JSBNG__find(\".js-pip\");\n            c.prependTo(this.$pip.parent()).fadeOut(\"fast\", function() {\n                c.remove();\n                var b = this.pip.html[a], d = this.pip[((a + \"Highlight\"))];\n                this.$pip.html(b).fadeIn(\"fast\"), ((((d && ((d != \"remove\")))) ? this.highlight(d) : this.unhighlight(((d == \"remove\")))));\n            }.bind(this)), this.$pip.hide().prependTo(b);\n        }, this.dismiss = function() {\n            ((this.$streamItem && this.unhighlight())), this.$pip.fadeOut(function() {\n                this.remove(), this.teardown(), this.trigger(\"uiHelpPipDismissed\");\n            }.bind(this));\n        }, this.highlight = function(a) {\n            if (this.$streamItem.JSBNG__find(a).is(\".stork-highlighted\")) {\n                return;\n            }\n        ;\n        ;\n            this.unhighlight(), this.$streamItem.JSBNG__find(a).each(function() {\n                var a = $(this), b = $(\"\\u003Cspan\\u003E\").addClass(\"stork-highlight-background\"), c = $(\"\\u003Cspan\\u003E\").addClass(\"stork-highlight-container\").css({\n                    width: a.JSBNG__outerWidth(),\n                    height: a.JSBNG__outerHeight()\n                });\n                a.wrap(c).before(b).addClass(\"stork-highlighted\"), b.fadeIn();\n            });\n        }, this.unhighlight = function(a) {\n            this.$streamItem.JSBNG__find(\".stork-highlighted\").each(function() {\n                var b = $(this), c = b.parent().JSBNG__find(\".stork-highlight-background\"), d = function() {\n                    c.remove(), b.unwrap();\n                };\n                b.removeClass(\"stork-highlighted\"), ((a ? d() : c.fadeOut(d)));\n            });\n        }, this.remove = function() {\n            this.$pip.remove();\n        }, this.after(\"initialize\", function(a) {\n            this.state = \"icon\", this.pip = a.pip, this.$streamItem = a.$streamItem, this.$pip = $(\"\\u003Cdiv\\u003E\\u003C/div\\u003E\").html(this.pip.html.icon), this.$pip.hide().prependTo(this.$streamItem).fadeIn(\"fast\"), this.JSBNG__on(this.$pip, \"click\", this.clicked), this.trigger(\"uiHelpPipIconAdded\"), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.remove), ((this.pip.explainOn && (((((typeof this.pip.explainOn == \"string\")) && (this.pip.explainOn = {\n                JSBNG__event: this.pip.explainOn\n            }))), ((this.pip.explainOn.selector ? this.JSBNG__on(this.$node.JSBNG__find(this.pip.explainOn.selector), this.pip.explainOn.JSBNG__event, this.explainTriggered) : this.JSBNG__on(this.pip.explainOn.JSBNG__event, this.explainTriggered)))))), ((this.pip.dismissOn && (((((typeof this.pip.dismissOn == \"string\")) && (this.pip.dismissOn = {\n                JSBNG__event: this.pip.dismissOn\n            }))), ((this.pip.dismissOn.selector ? this.JSBNG__on(this.$node.JSBNG__find(this.pip.dismissOn.selector), this.pip.dismissOn.JSBNG__event, this.dismissTriggered) : this.JSBNG__on(this.pip.dismissOn.JSBNG__event, this.dismissTriggered))))));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(helpPip);\n});\ndefine(\"app/ui/help_pips_injector\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/help_pip\",\"app/utils/storage/core\",], function(module, require, exports) {\n    function helpPipsInjector() {\n        this.defaultAttrs({\n            pipSelector: \".js-pip\",\n            tweetSelector: \".js-stream-item\"\n        }), this.pipsLoaded = function(a, b) {\n            this.pips = b.pips, this.injectPips();\n        }, this.tweetsDisplayed = function(a) {\n            this.injectPips();\n        }, this.pipOpened = function(a, b) {\n            this.storage.setItem(b.pip.category, !0);\n        }, this.pipDismissed = function(a) {\n            this.injectPips();\n        }, this.injectPips = function() {\n            if (!this.pips) {\n                return;\n            }\n        ;\n        ;\n            if (this.select(\"pipSelector\").length) {\n                return;\n            }\n        ;\n        ;\n            var a = this.pips.filter(function(a) {\n                return !this.storage.getItem(a.category);\n            }.bind(this)), b = this.select(\"tweetSelector\").slice(0, 10);\n            b.each(function(b, c) {\n                var d = $(c), e = !1;\n                if (((d.attr(\"data-promoted\") || ((d.JSBNG__find(\"[data-promoted]\").length > 0))))) {\n                    return;\n                }\n            ;\n            ;\n                $.each(a, function(a, b) {\n                    if (d.JSBNG__find(b.matcher).length) {\n                        return HelpPip.attachTo(this.$node, {\n                            $streamItem: d,\n                            pip: b,\n                            eventData: {\n                                scribeContext: {\n                                    component: \"stork\",\n                                    element: b.id\n                                }\n                            }\n                        }), e = !0, !1;\n                    }\n                ;\n                ;\n                }.bind(this));\n                if (e) {\n                    return !1;\n                }\n            ;\n            ;\n            }.bind(this));\n        }, this.after(\"initialize\", function() {\n            this.deferredDisplays = [], this.storage = new JSBNG__Storage(\"help_pips\"), this.JSBNG__on(JSBNG__document, \"uiTweetsDisplayed\", this.tweetsDisplayed), this.JSBNG__on(JSBNG__document, \"dataHelpPipsLoaded\", this.pipsLoaded), this.JSBNG__on(\"uiHelpPipDismissed\", this.pipDismissed), this.JSBNG__on(\"uiHelpPipOpened\", this.pipOpened);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), HelpPip = require(\"app/ui/help_pip\"), JSBNG__Storage = require(\"app/utils/storage/core\");\n    module.exports = defineComponent(helpPipsInjector);\n});\ndefine(\"app/boot/help_pips\", [\"module\",\"require\",\"exports\",\"app/utils/cookie\",\"app/utils/storage/core\",\"app/boot/help_pips_enable\",\"app/data/help_pips\",\"app/data/help_pips_scribe\",\"app/ui/help_pips_injector\",], function(module, require, exports) {\n    function initialize(a) {\n        var b = new JSBNG__Storage(\"help_pips\"), c = +(new JSBNG__Date);\n        ((cookie(\"help_pips\") && enableHelpPips())), ((((((b.getItem(\"until\") || 0)) > c)) && (HelpPipsData.attachTo(JSBNG__document), HelpPipsInjector.attachTo(\"#timeline\"), HelpPipsScribe.attachTo(JSBNG__document))));\n    };\n;\n    var cookie = require(\"app/utils/cookie\"), JSBNG__Storage = require(\"app/utils/storage/core\"), enableHelpPips = require(\"app/boot/help_pips_enable\"), HelpPipsData = require(\"app/data/help_pips\"), HelpPipsScribe = require(\"app/data/help_pips_scribe\"), HelpPipsInjector = require(\"app/ui/help_pips_injector\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/expando/close_all_button\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function closeAllButton() {\n        this.incrementOpenCount = function() {\n            this.toggleButton(++this.openCount);\n        }, this.decrementOpenCount = function() {\n            this.toggleButton(--this.openCount);\n        }, this.toggleButton = function(a) {\n            this.$node[((((a > 0)) ? \"fadeIn\" : \"fadeOut\"))](200);\n        }, this.broadcastClose = function(a) {\n            a.preventDefault(), this.trigger(this.attr.where, this.attr.closeAllEvent);\n        }, this.readOpenCountFromTimeline = function() {\n            this.openCount = $(this.attr.where).JSBNG__find(\".open\").length, this.toggleButton(this.openCount);\n        }, this.hide = function() {\n            this.$node.hide();\n        }, this.after(\"initialize\", function(a) {\n            this.openCount = 0, this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.readOpenCountFromTimeline), this.JSBNG__on(a.where, a.addEvent, this.incrementOpenCount), this.JSBNG__on(a.where, a.subtractEvent, this.decrementOpenCount), this.JSBNG__on(\"click\", this.broadcastClose), this.JSBNG__on(JSBNG__document, \"uiShortcutCloseAll\", this.broadcastClose), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.hide);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(closeAllButton);\n});\ndefine(\"app/ui/timelines/with_keyboard_navigation\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withKeyboardNavigation() {\n        this.defaultAttrs({\n            selectedClass: \"selected-stream-item\",\n            selectedSelector: \".selected-stream-item\",\n            unselectableClass: \"js-unselectable-stream-item\",\n            firstItemSelector: \".js-stream-item:first-child:not(.js-unselectable-stream-item)\",\n            ownTweetSelector: \".my-tweet\",\n            replyLinkSelector: \"div.tweet ul.js-actions a.js-action-reply\",\n            profileCardSelector: \".profile-card\",\n            streamTweetSelector: \".js-stream-tweet\",\n            activityMentionClass: \"js-activity-mention\",\n            activityReplyClass: \"js-activity-reply\",\n            pushStateSelector: \"a.js-nav\",\n            navigationActiveClass: \"js-navigation-active\"\n        }), this.moveSelection = function(a) {\n            var b = $(a.target);\n            if (b.closest(this.attr.selectedSelector).length) {\n                return;\n            }\n        ;\n        ;\n            var c;\n            ((b.closest(\".js-expansion-container\") ? c = b.closest(\"li\") : c = b.closest(this.attr.genericItemSelector))), ((b.closest(this.attr.pushStateSelector).length && (this.$linkClicked = c, JSBNG__clearTimeout(this.linkTimer), this.linkTimer = JSBNG__setTimeout(function() {\n                this.$linkClicked = $();\n            }.bind(this), 0)))), ((this.$selected.length && this.selectItem(c)));\n        }, this.clearSelection = function() {\n            this.$selected.removeClass(this.attr.selectedClass), this.$selected = $();\n        }, this.selectTopItem = function() {\n            this.clearSelection(), this.trigger(\"uiInjectNewItems\"), this.selectAdjacentItem(\"next\");\n        }, this.injectAndPossiblySelectTopItem = function() {\n            var a = this.$selected.length;\n            ((a && this.clearSelection())), this.trigger(\"uiInjectNewItems\"), ((a && this.selectAdjacentItem(\"next\")));\n        }, this.selectPrevItem = function() {\n            this.selectAdjacentItem(\"prev\");\n        }, this.selectNextItem = function(a, b) {\n            this.selectAdjacentItem(\"next\", b);\n        }, this.selectNextItemNotFrom = function(a) {\n            var b = \"next\", c = this.$selected;\n            while (((this.getUserId() == a))) {\n                this.selectAdjacentItem(b);\n                if (((c == this.$selected))) {\n                    if (((b != \"next\"))) {\n                        return;\n                    }\n                ;\n                ;\n                    b = \"prev\";\n                }\n                 else c = this.$selected;\n            ;\n            ;\n            };\n        ;\n        }, this.getAdjacentParentItem = function(a, b) {\n            var c = a.closest(\".js-navigable-stream\"), d = a;\n            if (c.length) {\n                a = c.closest(\".stream-item\"), d = a[b]();\n                if (!d.length) {\n                    return this.getAdjacentParentItem(a, b);\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            return d;\n        }, this.getAdjacentChildItem = function(a, b) {\n            var c = a, d = c.hasClass(\"js-has-navigable-stream\"), e = ((((b == \"next\")) ? \"first-child\" : \"last-child\"));\n            return ((((c.length && d)) ? (c = c.JSBNG__find(\".js-navigable-stream\").eq(0).JSBNG__find(((\"\\u003Eli:\" + e))), this.getAdjacentChildItem(c, b)) : c));\n        }, this.selectAdjacentItem = function(a, b) {\n            var c;\n            ((this.$selected.length ? c = this.$selected[a]() : c = this.select(\"firstItemSelector\").eq(0))), ((c.length || (c = this.getAdjacentParentItem(this.$selected, a)))), c = this.getAdjacentChildItem(c, a);\n            if (((c.length && c.hasClass(this.attr.unselectableClass)))) {\n                return this.$selected = c, this.selectAdjacentItem(a, b);\n            }\n        ;\n        ;\n            this.selectItem(c), this.setARIALabel(), this.focusSelected(), ((((c.length && ((!b || !b.maintainPosition)))) && this.adjustScrollForSelectedItem()));\n            var d = ((((a == \"next\")) ? \"uiNextItemSelected\" : \"uiPreviousItemSelected\"));\n            this.trigger(this.$selected, d);\n        }, this.selectItem = function(a) {\n            var b = this.$selected;\n            if (((!a.length || ((b == a))))) {\n                return;\n            }\n        ;\n        ;\n            this.$selected = a, this.$node.JSBNG__find(this.attr.selectedSelector).removeClass(this.attr.selectedClass), b.removeClass(this.attr.selectedClass), b.removeAttr(\"tabIndex\"), b.removeAttr(\"aria-labelledby\"), this.$selected.addClass(this.attr.selectedClass);\n        }, this.setARIALabel = function() {\n            var a = this.$selected.JSBNG__find(\".tweet\"), b = ((a.attr(\"id\") || ((\"tweet-\" + a.attr(\"data-tweet-id\"))))), c = [], d = [\".stream-item-header\",\".tweet-text\",\".context\",];\n            ((a.hasClass(\"favorited\") && d.push(\".tweet-actions .unfavorite\"))), ((a.hasClass(\"retweeted\") && d.push(\".tweet-actions .undo-retweet\"))), d.push(\".expanded-content\"), a.JSBNG__find(d.join()).each(function(a, d) {\n                var e = d.id;\n                ((e || (e = ((((b + \"-\")) + a)), d.setAttribute(\"id\", e)))), c.push(e);\n            }), this.$selected.attr(\"aria-labelledby\", c.join(\" \"));\n        }, this.focusSelected = function() {\n            this.$selected.attr(\"tabIndex\", -1).JSBNG__focus();\n        }, this.deselect = function(a) {\n            var b = (([\"HTML\",\"BODY\",].indexOf(a.target.tagName) != -1)), c = ((((a.target.id == \"page-outer\")) && !$(a.target).parents(\"#page-container\").length));\n            ((((b || c)) && this.clearSelection()));\n        }, this.favoriteItem = function() {\n            this.trigger(this.$selected, \"uiDidFavoriteTweetToggle\");\n        }, this.retweetItem = function() {\n            ((this.itemSelectedIsMine() || this.trigger(this.$selected, \"uiDidRetweetTweetToggle\")));\n        }, this.replyItem = function() {\n            var a = this.$selected.JSBNG__find(this.attr.replyLinkSelector).first();\n            this.trigger(a, \"uiDidReplyTweetToggle\");\n        }, this.blockUser = function() {\n            this.takeAction(\"uiOpenBlockUserDialog\");\n        }, this.unblockUser = function() {\n            this.takeAction(\"uiUnblockAction\");\n        }, this.takeAction = function(a) {\n            ((((!this.itemSelectedIsMine() && this.itemSelectedIsBlockable())) && this.trigger(this.$selected, a, {\n                userId: this.getUserId(),\n                username: this.getUsername(),\n                fromShortcut: !0\n            })));\n        }, this.getUserId = function() {\n            return this.$selected.JSBNG__find(this.attr.streamTweetSelector).attr(\"data-user-id\");\n        }, this.getUsername = function() {\n            return this.$selected.JSBNG__find(this.attr.streamTweetSelector).attr(\"data-name\");\n        }, this.itemSelectedIsMine = function() {\n            return (($(this.$selected).JSBNG__find(this.attr.ownTweetSelector).length > 0));\n        }, this.itemSelectedIsBlockable = function() {\n            return (((((($(this.$selected).children(this.attr.streamTweetSelector).length > 0)) || $(this.$selected).hasClass(this.attr.activityReplyClass))) || $(this.$selected).hasClass(this.attr.activityMentionClass)));\n        }, this.updateAfterBlock = function(a, b) {\n            (((($(this.attr.profileCardSelector).size() === 0)) && (this.selectNextItemNotFrom(b.userId), this.trigger(\"uiRemoveTweetsFromUser\", b))));\n        }, this.adjustScrollForItem = function(a) {\n            ((a.length && $(window).scrollTop(((a.offset().JSBNG__top - (($(window).height() / 2)))))));\n        }, this.notifyExpansionRequest = function() {\n            this.trigger(this.$selected, \"uiShouldToggleExpandedState\");\n        }, this.adjustScrollForSelectedItem = function() {\n            this.adjustScrollForItem(this.$selected);\n        }, this.processActiveNavigation = function() {\n            var a = 2;\n            JSBNG__setTimeout(this.removeActiveNavigationClass.bind(this), ((a * 1000)));\n        }, this.setNavigationActive = function() {\n            this.$linkClicked.addClass(this.attr.navigationActiveClass);\n        }, this.removeActiveNavigationClass = function() {\n            var a = this.$node.JSBNG__find(((\".\" + this.attr.navigationActiveClass)));\n            a.removeClass(this.attr.navigationActiveClass);\n        }, this.handleEvent = function(a) {\n            return function() {\n                (($(\"body\").hasClass(\"modal-enabled\") || this[a].apply(this, arguments)));\n            };\n        }, this.changeSelection = function(a, b) {\n            var c = $(a.target);\n            ((this.$selected.length && (this.selectItem(c), ((((b && b.setFocus)) && (this.setARIALabel(), this.focusSelected()))))));\n        }, this.after(\"initialize\", function() {\n            this.$selected = this.$node.JSBNG__find(this.attr.selectedSelector), this.$linkClicked = $(), this.JSBNG__on(JSBNG__document, \"uiShortcutSelectPrev\", this.handleEvent(\"selectPrevItem\")), this.JSBNG__on(JSBNG__document, \"uiShortcutSelectNext uiSelectNext\", this.handleEvent(\"selectNextItem\")), this.JSBNG__on(JSBNG__document, \"uiSelectItem\", this.handleEvent(\"changeSelection\")), this.JSBNG__on(JSBNG__document, \"uiShortcutEnter\", this.handleEvent(\"notifyExpansionRequest\")), this.JSBNG__on(JSBNG__document, \"uiShortcutGotoTopOfScreen uiSelectTopTweet\", this.handleEvent(\"selectTopItem\")), this.JSBNG__on(JSBNG__document, \"uiGotoTopOfScreen\", this.handleEvent(\"injectAndPossiblySelectTopItem\")), this.JSBNG__on(JSBNG__document, \"uiShortcutFavorite\", this.handleEvent(\"favoriteItem\")), this.JSBNG__on(JSBNG__document, \"uiShortcutRetweet\", this.handleEvent(\"retweetItem\")), this.JSBNG__on(JSBNG__document, \"uiShortcutReply\", this.handleEvent(\"replyItem\")), this.JSBNG__on(JSBNG__document, \"uiShortcutBlock\", this.handleEvent(\"blockUser\")), this.JSBNG__on(JSBNG__document, \"uiShortcutUnblock\", this.handleEvent(\"unblockUser\")), this.JSBNG__on(JSBNG__document, \"uiUpdateAfterBlock\", this.updateAfterBlock), this.JSBNG__on(JSBNG__document, \"uiRemovedSomeTweets\", this.adjustScrollForSelectedItem), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged uiClearSelection\", this.clearSelection), this.JSBNG__on(JSBNG__document, \"uiPageChanged\", this.processActiveNavigation), this.JSBNG__on(\"click\", {\n                genericItemSelector: this.moveSelection\n            }), this.JSBNG__on(JSBNG__document, \"uiNavigate\", this.setNavigationActive), this.JSBNG__on(JSBNG__document, \"click\", this.deselect);\n        });\n    };\n;\n    module.exports = withKeyboardNavigation;\n});\ndefine(\"app/ui/with_focus_highlight\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function focusHighlight() {\n        this.defaultAttrs({\n            focusClass: \"JSBNG__focus\",\n            focusContainerSelector: \".tweet\"\n        }), this.addFocusStyle = function(a, b) {\n            $(b.el).addClass(this.attr.focusClass);\n        }, this.removeFocusStyle = function(a, b) {\n            JSBNG__setTimeout(function() {\n                var a = b.el, c = JSBNG__document.activeElement;\n                ((((!$.contains(a, c) && ((a != c)))) && $(a).removeClass(this.attr.focusClass)));\n            }.bind(this), 0);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"focusin\", {\n                focusContainerSelector: this.addFocusStyle\n            }), this.JSBNG__on(\"focusout\", {\n                focusContainerSelector: this.removeFocusStyle\n            });\n        });\n    };\n;\n    module.exports = focusHighlight;\n});\ndefine(\"app/ui/timelines/with_base_timeline\", [\"module\",\"require\",\"exports\",\"app/ui/timelines/with_keyboard_navigation\",\"app/ui/with_interaction_data\",\"app/utils/scribe_event_initiators\",\"app/ui/with_focus_highlight\",\"core/compose\",\"app/utils/animate_window_scrolltop\",], function(module, require, exports) {\n    function withBaseTimeline() {\n        compose.mixin(this, [withKeyboardNavigation,withInteractionData,withFocusHighLight,]), this.defaultAttrs({\n            containerSelector: \".stream-container\",\n            itemsSelector: \"#stream-items-id\",\n            genericItemSelector: \".js-stream-item\",\n            timelineEndSelector: \".timeline-end\",\n            backToTopSelector: \".back-to-top\",\n            lastItemSelector: \".stream-item:last\",\n            streamItemContentsSelector: \".js-actionable-tweet, .js-actionable-user, .js-activity, .js-story-item\"\n        }), this.findFirstItemContent = function(a) {\n            var b = a.JSBNG__find(this.attr.streamItemContentsSelector);\n            return b = b.not(\".conversation-tweet\"), $(b[0]);\n        }, this.injectItems = function(a, b, c, d) {\n            var e = $(\"\\u003Cdiv/\\u003E\").html(b).children();\n            return ((((e.length > 0)) && this.select(\"timelineEndSelector\").addClass(\"has-items\"))), this.select(\"itemsSelector\")[a](e), this.reportInjectedItems(e, c, d), e;\n        }, this.removeDuplicates = function(a) {\n            var b = [];\n            return a.filter(function(a) {\n                return ((a.tweetId ? ((((b.indexOf(a.tweetId) === -1)) ? (b.push(a.tweetId), !0) : !1)) : !0));\n            });\n        }, this.reportInjectedItems = function(a, b, c) {\n            var d = [];\n            a.each(function(a, c) {\n                if (((((((b === \"uiHasInjectedNewTimeline\")) || ((b === \"uiHasInjectedOldTimelineItems\")))) || ((b === \"uiHasInjectedRangeTimelineItems\"))))) {\n                    d = d.concat(this.extraInteractionData($(c))), d.push(this.interactionData(this.findFirstItemContent($(c))));\n                }\n            ;\n            ;\n                this.trigger(c, \"uiHasInjectedTimelineItem\");\n            }.bind(this)), d = this.removeDuplicates(d);\n            var e = {\n            };\n            if (((((((b === \"uiHasInjectedNewTimeline\")) || ((b === \"uiHasInjectedOldTimelineItems\")))) || ((b === \"uiHasInjectedRangeTimelineItems\"))))) {\n                e = {\n                    scribeContext: {\n                        component: ((this.attr.itemType && ((this.attr.itemType + \"_stream\"))))\n                    },\n                    scribeData: {\n                    },\n                    items: d\n                }, ((((c && c.autoplay)) && (e.scribeData.event_initiator = eventInitiators.clientSideApp)));\n            }\n        ;\n        ;\n            this.trigger(\"uiWantsToRefreshTimestamps\"), this.trigger(b, e);\n        }, this.inspectItemsFromServer = function(a, b) {\n            ((this.isOldItem(b) ? this.injectOldItems(b) : ((this.isNewItem(b) ? this.notifyNewItems(b) : ((this.wasRangeRequest(b) && this.injectRangeItems(b)))))));\n        }, this.investigateDataError = function(a, b) {\n            var c = b.sourceEventData;\n            if (!c) {\n                return;\n            }\n        ;\n        ;\n            ((this.wasRangeRequest(c) ? this.notifyRangeItemsError(b) : ((this.wasNewItemsRequest(c) || ((this.wasOldItemsRequest(c) && this.notifyOldItemsError(b)))))));\n        }, this.possiblyShowBackToTop = function() {\n            var a = this.select(\"lastItemSelector\").position();\n            ((((a && ((a.JSBNG__top >= $(window).height())))) && this.select(\"backToTopSelector\").show()));\n        }, this.scrollToTop = function() {\n            animateWinScrollTop(0, \"fast\");\n        }, this.getTimelinePosition = function(a) {\n            return a.closest(this.attr.genericItemSelector).index();\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"dataGotMoreTimelineItems\", this.inspectItemsFromServer), this.JSBNG__on(\"dataGotMoreTimelineItemsError\", this.investigateDataError), this.JSBNG__on(\"click\", {\n                backToTopSelector: this.scrollToTop\n            }), this.possiblyShowBackToTop();\n        });\n    };\n;\n    var withKeyboardNavigation = require(\"app/ui/timelines/with_keyboard_navigation\"), withInteractionData = require(\"app/ui/with_interaction_data\"), eventInitiators = require(\"app/utils/scribe_event_initiators\"), withFocusHighLight = require(\"app/ui/with_focus_highlight\"), compose = require(\"core/compose\"), animateWinScrollTop = require(\"app/utils/animate_window_scrolltop\");\n    module.exports = withBaseTimeline;\n});\ndefine(\"app/ui/timelines/with_old_items\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withOldItems() {\n        this.defaultAttrs({\n            endOfStreamSelector: \".stream-footer\",\n            errorMessageSelector: \".stream-fail-container\",\n            tryAgainSelector: \".try-again-after-whale\",\n            allowInfiniteScroll: !0\n        }), this.getOldItems = function() {\n            ((((this.shouldGetOldItems() && !this.requestInProgress)) && (this.requestInProgress = !0, this.trigger(\"uiWantsMoreTimelineItems\", this.getOldItemsData()))));\n        }, this.injectOldItems = function(a) {\n            this.hideWhaleEnd(), this.resetStateVariables(a), ((a.has_more_items ? this.showMoreSpinner() : this.hideMoreSpinner()));\n            var b = this.$document.height();\n            this.injectItems(((this.attr.isBackward ? \"prepend\" : \"append\")), a.items_html, \"uiHasInjectedOldTimelineItems\"), ((this.attr.isBackward ? (this.$window.scrollTop(((this.$document.height() - b))), ((a.has_more_items || this.select(\"endOfStreamSelector\").remove()))) : this.possiblyShowBackToTop())), this.requestInProgress = !1;\n        }, this.notifyOldItemsError = function(a) {\n            this.showWhaleEnd(), this.requestInProgress = !1;\n        }, this.showWhaleEnd = function() {\n            this.select(\"errorMessageSelector\").show(), this.select(\"endOfStreamSelector\").hide();\n        }, this.hideWhaleEnd = function() {\n            this.select(\"errorMessageSelector\").hide(), this.select(\"endOfStreamSelector\").show();\n        }, this.showMoreSpinner = function() {\n            this.select(\"timelineEndSelector\").addClass(\"has-more-items\");\n        }, this.hideMoreSpinner = function() {\n            this.select(\"timelineEndSelector\").removeClass(\"has-more-items\");\n        }, this.tryAgainAfterWhale = function(a) {\n            a.preventDefault(), this.hideWhaleEnd(), this.getOldItems();\n        }, this.after(\"initialize\", function(a) {\n            this.requestInProgress = !1, ((this.attr.allowInfiniteScroll && this.JSBNG__on(window, ((this.attr.isBackward ? \"uiNearTheTop\" : \"uiNearTheBottom\")), this.getOldItems))), this.$document = $(JSBNG__document), this.$window = $(window), this.JSBNG__on(\"click\", {\n                tryAgainSelector: this.tryAgainAfterWhale\n            });\n        });\n    };\n;\n    module.exports = withOldItems;\n});\ndefine(\"app/utils/chrome\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var chrome = {\n        globalYOffset: null,\n        selectors: {\n            globalNav: \".global-nav\"\n        },\n        getGlobalYOffset: function() {\n            return ((((chrome.globalYOffset === null)) && (chrome.globalYOffset = $(chrome.selectors.globalNav).height()))), chrome.globalYOffset;\n        },\n        getCanvasYOffset: function(a) {\n            return ((a.offset().JSBNG__top - chrome.getGlobalYOffset()));\n        }\n    };\n    module.exports = chrome;\n});\ndefine(\"app/ui/timelines/with_traveling_ptw\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withTravelingPTw() {\n        this.closePromotedItem = function(a) {\n            ((a.hasClass(\"open\") && this.trigger(a, \"uiShouldToggleExpandedState\", {\n                noAnimation: !0\n            })));\n        }, this.transferClass = function(a, b, c) {\n            ((a.hasClass(b) && (a.removeClass(b), c.addClass(b))));\n        }, this.repositionPromotedItem = function(a) {\n            var b = this.$promotedItem;\n            this.transferClass(b, \"before-expanded\", b.prev()), this.transferClass(b, \"after-expanded\", b.next()), a.call(this, b.detach()), this.transferClass(b.next(), \"after-expanded\", \"prev\");\n        }, this.after(\"initialize\", function(a) {\n            this.travelingPromoted = a.travelingPromoted, this.$promotedItem = this.$node.JSBNG__find(\".promoted-tweet\").first().closest(\".stream-item\");\n        }), this.movePromotedToTop = function() {\n            if (this.autoplay) {\n                return;\n            }\n        ;\n        ;\n            this.repositionPromotedItem(function(a) {\n                var b = this.$node.JSBNG__find(this.attr.streamItemsSelector).children().first();\n                b[((b.hasClass(\"open\") ? \"after\" : \"before\"))](a);\n            });\n        };\n    };\n;\n    module.exports = withTravelingPTw;\n});\ndefine(\"app/ui/timelines/with_autoplaying_timeline\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/chrome\",\"app/ui/timelines/with_traveling_ptw\",\"app/utils/animate_window_scrolltop\",], function(module, require, exports) {\n    function withAutoplayingTimeline() {\n        compose.mixin(this, [withTravelingPTw,]);\n        var a = 700, b = 750, c = 300;\n        this.defaultAttrs({\n            autoplayControlSelector: \".autoplay-control .play-pause\",\n            streamItemsSelector: \".stream-items\",\n            socialProofSelector: \".tweet-stats-container\",\n            autoplayMarkerSelector: \".stream-autoplay-marker\",\n            notificationBarOpacity: 94796\n        }), this.autoplayNewItems = function(a, b) {\n            if (!a) {\n                return;\n            }\n        ;\n        ;\n            var c = this.$window.scrollTop(), d = ((c + this.$window.height())), e = ((this.$promotedItem.length && ((this.$promotedItem.offset().JSBNG__top > d)))), f = this.injectNewItems({\n            }, {\n                autoplay: !0\n            });\n            ((((this.travelingPTw && e)) && this.repositionPromotedItem(function(a) {\n                f.first().before(a), f = f.add(a), this.trigger(a, \"uiShouldFixMargins\");\n            })));\n            var g = f.first().offset().JSBNG__top, h = ((((g > c)) && ((g < d)))), i = this.$container.offset().JSBNG__top, j = ((((f.last().next().offset().JSBNG__top - i)) + 1));\n            if (h) this.$container.css(\"marginTop\", -j), this.animateBlockOfItems(f);\n             else {\n                var k = chrome.getGlobalYOffset(), l = ((this.$notification.is(\":visible\") ? k : -100));\n                this.showingAutoplayMarker = !1, this.setScrollerScrollTop(((c + j))), this.$notification.show().JSBNG__find(\".text\").text($(a).text()).end().css({\n                    JSBNG__top: l,\n                    opacity: this.attr.notificationBarOpacity\n                }).animate({\n                    JSBNG__top: k\n                }, {\n                    duration: 500,\n                    complete: function() {\n                        var a = this.newItemsXLine;\n                        this.newItemsXLine = ((((a > 0)) ? ((a + j)) : ((i + j)))), this.showingAutoplayMarker = !0, this.latentItems.count = b;\n                    }.bind(this)\n                });\n            }\n        ;\n        ;\n        }, this.animateBlockOfItems = function(b) {\n            var c = this.$window.scrollTop(), d = parseFloat(this.$container.css(\"marginTop\")), e = -b.first().position().JSBNG__top;\n            this.isAnimating = !0, this.$container.parent().css(\"overflow\", \"hidden\"), this.$container.animate({\n                marginTop: 0\n            }, {\n                duration: ((a + Math.abs(d))),\n                step: function(a) {\n                    ((this.lockedTimelineScroll && this.setScrollerScrollTop(((c + Math.abs(((d - Math.ceil(a)))))))));\n                }.bind(this),\n                complete: function() {\n                    this.$container.parent().css(\"overflow\", \"inherit\"), this.isAnimating = !1, this.afterAnimationQueue.forEach(function(a) {\n                        a.call(this);\n                    }, this), this.afterAnimationQueue = [];\n                }.bind(this)\n            });\n        }, this.handleSocialProofPops = function(a) {\n            var b = $(a.target).closest(\".stream-item\");\n            if (((this.lastClickedItem && ((b[0] === this.lastClickedItem))))) {\n                return;\n            }\n        ;\n        ;\n            var c = $(a.target).JSBNG__find(this.attr.socialProofSelector).hide(), d = function() {\n                var a = b.next().offset().JSBNG__top;\n                c.show();\n                var d = b.next().offset().JSBNG__top, e = this.$window.scrollTop();\n                ((((this.lockedTimelineScroll || ((e > d)))) && this.setScrollerScrollTop(((e + ((d - a)))))));\n            }.bind(this);\n            ((this.isAnimating ? this.afterAnimationQueue.push(d) : d()));\n        }, this.animateScrollToTop = function() {\n            var a = ((this.$container.offset().JSBNG__top - 150)), d = {\n                duration: b\n            };\n            ((this.attr.overflowScroll ? this.$node.animate({\n                scrollTop: a\n            }, d) : animateWinScrollTop(a, d))), this.$notification.animate({\n                JSBNG__top: -200,\n                opacity: 0\n            }, {\n                duration: c\n            });\n        }, this.setScrollerScrollTop = function(a) {\n            var b = ((this.attr.overflowScroll ? this.$node : $(window)));\n            b.scrollTop(a);\n        }, this.removeAutoplayMarkerOnScroll = function() {\n            var a, b = function() {\n                ((this.showingAutoplayMarker ? (this.showingAutoplayMarker = !1, this.$notification.fadeOut(200)) : ((((((this.newItemsXLine > 0)) && ((this.$window.scrollTop() < this.newItemsXLine)))) && (this.newItemsXLine = 0, this.latentItems.count = 0)))));\n            }.bind(this);\n            this.$window.JSBNG__scroll(function(c) {\n                if (!this.autoplay) {\n                    return;\n                }\n            ;\n            ;\n                JSBNG__clearTimeout(a), a = JSBNG__setTimeout(b, 0);\n            }.bind(this));\n        }, this.toggleAutoplay = function(a) {\n            $(\".tooltip\").remove(), (($(a.target).parent().toggleClass(\"paused\").hasClass(\"paused\") ? this.disableAutoplay() : this.reenableAutoplay()));\n        }, this.disableAutoplay = function() {\n            this.autoplay = !1, this.trigger(\"uiHasDisabledAutoplay\");\n        }, this.reenableAutoplay = function() {\n            this.autoplay = !0, this.lockedTimelineScroll = !1, this.trigger(\"uiHasEnabledAutoplay\");\n            var a = this.select(\"newItemsBarSelector\");\n            a.animate({\n                marginTop: -a.JSBNG__outerHeight(),\n                opacity: 0\n            }, {\n                duration: 225,\n                complete: this.autoplayNewItems.bind(this, a.html())\n            });\n        }, this.enableAutoplay = function(a) {\n            this.autoplay = !0, this.travelingPTw = a.travelingPTw, this.lockedTimelineScroll = !1, this.afterAnimationQueue = [], this.newItemsXLine = 0, this.$container = this.select(\"streamItemsSelector\"), this.$notification = this.select(\"autoplayMarkerSelector\"), this.$window = ((a.overflowScroll ? this.$node : $(window))), this.JSBNG__on(\"mouseover\", function() {\n                this.lockedTimelineScroll = !0;\n            }), this.JSBNG__on(\"mouseleave\", function() {\n                this.lockedTimelineScroll = !1;\n            }), this.JSBNG__on(\"uiHasRenderedTweetSocialProof\", this.handleSocialProofPops), this.JSBNG__on(\"uiHasExpandedTweet\", function(a) {\n                this.lastClickedItem = $(a.target).data(\"expando\").$container.get(0);\n            }), this.JSBNG__on(\"click\", {\n                autoplayControlSelector: this.toggleAutoplay,\n                autoplayMarkerSelector: this.animateScrollToTop\n            }), this.removeAutoplayMarkerOnScroll(), this.$notification.width(this.$notification.width()).css(\"position\", \"fixed\");\n        }, this.after(\"initialize\", function(a) {\n            ((a.autoplay && this.enableAutoplay(a)));\n        });\n    };\n;\n    var compose = require(\"core/compose\"), chrome = require(\"app/utils/chrome\"), withTravelingPTw = require(\"app/ui/timelines/with_traveling_ptw\"), animateWinScrollTop = require(\"app/utils/animate_window_scrolltop\");\n    module.exports = withAutoplayingTimeline;\n});\ndefine(\"app/ui/timelines/with_polling\", [\"module\",\"require\",\"exports\",\"core/utils\",\"app/utils/setup_polling_with_backoff\",], function(module, require, exports) {\n    function withPolling() {\n        this.defaultAttrs({\n            pollingWatchNode: $(window),\n            pollingEnabled: !0\n        }), this.pausePolling = function() {\n            this.pollingTimer.pause(), this.pollingPaused = !0;\n        }, this.resetPolling = function() {\n            this.backoffEmptyResponseCount = 0, this.pollingPaused = !1;\n        }, this.pollForNewItems = function(a, b) {\n            this.trigger(\"uiTimelineShouldRefresh\", {\n                injectImmediately: !1,\n                interval: this.pollingTimer.interval,\n                fromPolling: !0\n            });\n        }, this.onGotMoreTimelineItems = function(a, b) {\n            if (!((((((this.attr.pollingOptions && this.attr.pollingOptions.pauseAfterBackoff)) && b)) && b.sourceEventData))) {\n                return;\n            }\n        ;\n        ;\n            var c = b.sourceEventData;\n            ((c.fromPolling && ((((this.isNewItem(b) || ((c.interval < this.attr.pollingOptions.blurredInterval)))) ? this.resetPolling() : ((((++this.backoffEmptyResponseCount >= this.attr.pollingOptions.backoffEmptyResponseLimit)) && this.pausePolling()))))));\n        }, this.modifyNewItemsData = function(a) {\n            var b = a();\n            return ((((this.pollingPaused && this.attr.pollingOptions)) ? (this.resetPolling(), utils.merge(b, {\n                count: this.attr.pollingOptions.resumeItemCount\n            })) : b));\n        }, this.possiblyRefreshBeforeInject = function(a, b, c) {\n            return ((((((this.pollingPaused && b)) && ((b.type === \"click\")))) && this.trigger(\"uiTimelineShouldRefresh\", {\n                injectImmediately: !0\n            }))), a(b, c);\n        }, this.around(\"getNewItemsData\", this.modifyNewItemsData), this.around(\"injectNewItems\", this.possiblyRefreshBeforeInject), this.after(\"initialize\", function() {\n            if (!this.attr.pollingEnabled) {\n                return;\n            }\n        ;\n        ;\n            this.JSBNG__on(JSBNG__document, \"uiTimelinePollForNewItems\", this.pollForNewItems), this.JSBNG__on(JSBNG__document, \"dataGotMoreTimelineItems\", this.onGotMoreTimelineItems), this.pollingTimer = setupPollingWithBackoff(\"uiTimelinePollForNewItems\", this.attr.pollingWatchNode, this.attr.pollingOptions), this.resetPolling();\n        });\n    };\n;\n    var utils = require(\"core/utils\"), setupPollingWithBackoff = require(\"app/utils/setup_polling_with_backoff\");\n    module.exports = withPolling;\n});\ndefine(\"app/ui/timelines/with_new_items\", [\"module\",\"require\",\"exports\",\"core/utils\",\"core/compose\",\"app/utils/chrome\",\"app/ui/timelines/with_autoplaying_timeline\",\"app/ui/timelines/with_polling\",], function(module, require, exports) {\n    function withNewItems() {\n        this.injectNewItems = function(a, b) {\n            if (!this.latentItems.html) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"newItemsBarSelector\").remove();\n            var c = this.injectItems(\"prepend\", this.latentItems.html, \"uiHasInjectedNewTimeline\", b);\n            return this.resetLatentItems(), c;\n        }, this.handleNewItemsBarClick = function(a, b) {\n            this.injectNewItems(a, b), this.trigger(\"uiRefreshUserRecsOnNewTweets\");\n        }, compose.mixin(this, [withAutoplayingTimeline,withPolling,]), this.defaultAttrs({\n            newItemsBarSelector: \".js-new-tweets-bar\",\n            streamItemSelector: \".stream-item\",\n            refreshOnReturn: !0\n        }), this.getNewItems = function(a, b) {\n            this.trigger(\"uiWantsMoreTimelineItems\", utils.merge({\n                include_new_items_bar: ((!b || !b.injectImmediately)),\n                latent_count: this.latentItems.count,\n                composed_count: Object.keys(this.composedThenInjectedTweetIds).length\n            }, this.getNewItemsData(), b));\n        }, this.notifyNewItems = function(a) {\n            if (!a.items_html) {\n                return;\n            }\n        ;\n        ;\n            var b = ((a.sourceEventData || {\n            }));\n            this.resetStateVariables(a);\n            var c = ((this.attr.injectComposedTweets && this.removeComposedTweetsFromPayload(a)));\n            if (!a.items_html) {\n                return;\n            }\n        ;\n        ;\n            this.latentItems.html = ((a.items_html + ((this.latentItems.html || \"\"))));\n            if (a.new_tweets_bar_html) {\n                var d, e = a.new_tweets_bar_alternate_html;\n                ((((((((this.attr.injectComposedTweets && ((c > 0)))) && e)) && e[((c - 1))])) ? d = $(e[((c - 1))]) : d = $(a.new_tweets_bar_html))), this.latentItems.count = d.children().first().data(\"item-count\"), ((this.autoplay ? this.autoplayNewItems(a.new_tweets_bar_html, this.latentItems.count) : ((b.injectImmediately || this.updateNewItemsBar(d))))), this.trigger(\"uiAddPageCount\", {\n                    count: this.latentItems.count\n                });\n            }\n        ;\n        ;\n            ((((b.injectImmediately || b.timeline_empty)) && this.trigger(\"uiInjectNewItems\"))), ((b.scrollToTop && this.scrollToTop())), ((b.selectTopTweet && this.trigger(\"uiSelectTopTweet\")));\n        }, this.removeComposedTweetsFromPayload = function(a) {\n            var b = this.composedThenInjectedTweetIds, c = $(a.items_html).filter(this.attr.streamItemSelector);\n            if (((c.length == 0))) {\n                return 0;\n            }\n        ;\n        ;\n            var d = 0, e = c.filter(function(a, c) {\n                var e = $(c).attr(\"data-item-id\");\n                return ((((e in b)) ? (d++, delete b[e], !1) : !0));\n            });\n            return a.items_html = $(\"\\u003Cdiv/\\u003E\").append(e).html(), d;\n        }, this.updateNewItemsBar = function(a) {\n            var b = this.select(\"newItemsBarSelector\"), c = this.select(\"containerSelector\"), d = $(window).scrollTop(), e = chrome.getCanvasYOffset(c);\n            ((b.length ? (b.parent().remove(), a.prependTo(c)) : (a.hide().prependTo(c), ((((d > e)) ? (a.show(), $(\"html, body\").scrollTop(((d + a.height())))) : a.slideDown()))))), this.trigger(\"uiNewItemsBarVisible\");\n        }, this.resetLatentItems = function() {\n            this.latentItems = {\n                count: 0,\n                html: \"\"\n            };\n        }, this.refreshOnNavigate = function(a, b) {\n            ((((b.fromCache && this.attr.refreshOnReturn)) && this.trigger(\"uiTimelineShouldRefresh\", {\n                navigated: !0\n            })));\n        }, this.refreshAndSelectTopTweet = function(a, b) {\n            this.trigger(\"uiTimelineShouldRefresh\", {\n                injectImmediately: !0,\n                selectTopTweet: !0\n            });\n        }, this.injectComposedTweet = function(a, b) {\n            if (b.in_reply_to_status_id) {\n                return;\n            }\n        ;\n        ;\n            this.injectNewItems();\n            var c = $(b.tweet_html).filter(this.attr.streamItemSelector).first().attr(\"data-item-id\");\n            if (this.$node.JSBNG__find(((((\".original-tweet[data-tweet-id='\" + c)) + \"']:first\"))).length) {\n                return;\n            }\n        ;\n        ;\n            this.latentItems.html = b.tweet_html, this.injectNewItems(), this.composedThenInjectedTweetIds[b.tweet_id] = !0;\n        }, this.refreshAndInjectImmediately = function(a, b) {\n            this.trigger(\"uiTimelineShouldRefresh\", {\n                injectImmediately: !0,\n                selectTopTweet: ((this.$selected.length == 1))\n            });\n        }, this.resetCacheOfComposedInjectedTweets = function(a, b) {\n            this.composedThenInjectedTweetIds = composedThenInjectedTweetIds = {\n            };\n        }, this.after(\"initialize\", function(a) {\n            this.composedThenInjectedTweetIds = composedThenInjectedTweetIds, this.resetLatentItems(), this.JSBNG__on(\"uiInjectNewItems\", this.injectNewItems), this.JSBNG__on(JSBNG__document, \"uiTimelineShouldRefresh\", this.getNewItems), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.injectNewItems), this.JSBNG__on(JSBNG__document, \"uiPageChanged\", this.refreshOnNavigate), this.JSBNG__on(JSBNG__document, \"uiGotoTopOfScreen\", this.refreshAndInjectImmediately), this.JSBNG__on(JSBNG__document, \"uiShortcutGotoTopOfScreen\", this.refreshAndSelectTopTweet), this.JSBNG__on(JSBNG__document, \"dataPageMutated\", this.resetCacheOfComposedInjectedTweets), ((this.attr.injectComposedTweets && this.JSBNG__on(JSBNG__document, \"dataTweetSuccess\", this.injectComposedTweet))), this.JSBNG__on(\"click\", {\n                newItemsBarSelector: this.handleNewItemsBarClick\n            });\n        });\n    };\n;\n    var utils = require(\"core/utils\"), compose = require(\"core/compose\"), chrome = require(\"app/utils/chrome\"), withAutoplayingTimeline = require(\"app/ui/timelines/with_autoplaying_timeline\"), withPolling = require(\"app/ui/timelines/with_polling\"), composedThenInjectedTweetIds = {\n    };\n    module.exports = withNewItems;\n});\ndefine(\"app/ui/timelines/with_tweet_pagination\", [\"module\",\"require\",\"exports\",\"app/utils/string\",], function(module, require, exports) {\n    function withTweetPagination() {\n        this.isOldItem = function(a) {\n            return ((a.max_id && ((!this.max_id || ((string.compare(this.max_id, a.max_id) >= 0))))));\n        }, this.isNewItem = function(a) {\n            return ((a.since_id && ((!this.since_id || ((string.compare(this.since_id, a.since_id) < 0))))));\n        }, this.wasRangeRequest = function(a) {\n            return ((a.max_id && a.since_id));\n        }, this.wasNewItemsRequest = function(a) {\n            return a.since_id;\n        }, this.wasOldItemsRequest = function(a) {\n            return a.max_id;\n        }, this.shouldGetOldItems = function() {\n            var a = ((((typeof this.max_id != \"undefined\")) && ((this.max_id !== null))));\n            return ((!a || ((this.max_id != \"-1\"))));\n        }, this.getOldItemsData = function() {\n            return {\n                max_id: this.max_id,\n                query: this.query\n            };\n        }, this.getRangeItemsData = function(a, b) {\n            return {\n                since_id: a,\n                max_id: b,\n                query: this.query\n            };\n        }, this.getNewItemsData = function() {\n            var a = {\n                since_id: this.since_id,\n                query: this.query\n            };\n            return ((((this.select(\"itemsSelector\").children().length == 0)) && (a.timeline_empty = !0))), a;\n        }, this.resetStateVariables = function(a) {\n            [\"max_id\",\"since_id\",\"query\",].forEach(function(b, c) {\n                ((((typeof a[b] != \"undefined\")) && (this[b] = a[b], ((((((b == \"max_id\")) || ((b == \"since_id\")))) && this.select(\"containerSelector\").attr(((\"data-\" + b.replace(\"_\", \"-\"))), this[b]))))));\n            }, this);\n        }, this.after(\"initialize\", function(a) {\n            this.since_id = ((this.select(\"containerSelector\").attr(\"data-since-id\") || undefined)), this.max_id = ((this.select(\"containerSelector\").attr(\"data-max-id\") || undefined)), this.query = ((a.query || \"\"));\n        });\n    };\n;\n    var string = require(\"app/utils/string\");\n    module.exports = withTweetPagination;\n});\ndefine(\"app/ui/timelines/with_preserved_scroll_position\", [\"module\",\"require\",\"exports\",\"core/utils\",\"core/i18n\",\"app/utils/string\",\"app/data/user_info\",\"core/compose\",], function(module, require, exports) {\n    function withPreservedScrollPosition() {\n        this.defaultAttrs({\n            firstTweetSelector: \".stream-items .js-stream-item:first-child\",\n            listSelector: \".stream-items:not(.conversation-module)\",\n            tearClass: \"tear\",\n            tearSelector: \".tear\",\n            tearProcessingClass: \"tear-processing\",\n            tearProcessingSelector: \".tear-processing\",\n            currentScrollPosClass: \"current-scroll-pos\",\n            currentScrollPosSelector: \".current-scroll-pos\",\n            topOfViewportTweetSelector: \".top-of-viewport-tweet\",\n            countAboveTear: 10,\n            countBelowTearAboveCurrent: 3,\n            countBelowCurrent: 10,\n            preservedScrollEnabled: !1\n        }), this.findTweetAtTop = function() {\n            var a = $(), b = $(window).scrollTop();\n            return this.select(\"genericItemSelector\").each(function(c, d) {\n                var e = $(d);\n                if (((e.offset().JSBNG__top > b))) {\n                    return a = e, !1;\n                }\n            ;\n            ;\n            }), a;\n        }, this.findNearestRealTweet = function(a, b) {\n            while (((a.length && ((a.JSBNG__find(\"[data-promoted=true]\").length || a.hasClass(this.attr.tearClass)))))) {\n                a = a[b]();\n            ;\n            };\n        ;\n            return a;\n        }, this.findSiblingTweets = function(a, b, c) {\n            var d = $(), e = a, f = 0;\n            while ((((e = e[b]()).length && ((f < c))))) {\n                if (((!e.is(\"[data-item-type=tweet]\") && ((b == \"prev\"))))) {\n                    break;\n                }\n            ;\n            ;\n                d = d.add(e), f++;\n            };\n        ;\n            return d;\n        }, this.getTweetId = function(a) {\n            var b = a.JSBNG__find(\".tweet\").attr(\"data-retweet-id\");\n            return ((b ? b : a.attr(\"data-item-id\")));\n        }, this.recordTweetAtTop = function() {\n            var a = this.findTweetAtTop();\n            if (a.length) {\n                var b = this.getTweetId(this.findNearestRealTweet(a, \"next\")), c = ((a.offset().JSBNG__top - $(window).scrollTop()));\n                a.addClass(this.attr.currentScrollPosClass), a.attr(\"data-offset\", c), this.trigger(\"uiTimelineScrollSet\", {\n                    topItem: b,\n                    offset: c\n                });\n            }\n        ;\n        ;\n        }, this.trimTimeline = function() {\n            var a = this.select(\"currentScrollPosSelector\"), b = this.select(\"firstTweetSelector\"), c, d;\n            ((a.length || (a = b)));\n            if (!a.length) {\n                return;\n            }\n        ;\n        ;\n            d = $(), d = d.add(a), d = d.add(this.findSiblingTweets(a, \"next\", this.attr.countBelowCurrent)), d = d.add(this.findSiblingTweets(a, \"prev\", this.attr.countBelowTearAboveCurrent)), c = d.first();\n            if (((c.index() >= this.attr.countAboveTear))) {\n                var e = $(TEAR_HTML);\n                c.before(e), d = d.add(e);\n            }\n        ;\n        ;\n            ((((this.attr.countAboveTear > 0)) && (d = d.add(b), d = d.add(this.findSiblingTweets(b, \"next\", ((this.attr.countAboveTear - 1)))))));\n            var f = this.findNearestRealTweet(d.last(), \"prev\");\n            this.select(\"containerSelector\").attr(\"data-max-id\", string.subtractOne(this.getTweetId(f))), this.select(\"listSelector\").html(d);\n        }, this.restorePosition = function(a, b) {\n            var c = {\n            }, d = 0;\n            ((((b && b.fromCache)) ? (c = this.select(\"currentScrollPosSelector\"), d = ((-1 * c.attr(\"data-offset\")))) : ((((b && b.scrollPosition)) && (c = this.select(\"topOfViewportTweetSelector\"), d = ((-1 * b.scrollPosition.offset)))))));\n            var e, f, g;\n            ((c.length && (f = $(window).scrollLeft(), g = ((c.offset().JSBNG__top + d)), window.JSBNG__scrollTo(f, g), c.removeClass(this.attr.currentScrollPosClass), $(JSBNG__document).one(\"JSBNG__scroll\", function() {\n                window.JSBNG__scrollTo(f, g);\n            }))));\n        }, this.expandTear = function(a, b, c) {\n            var d = $(a.target);\n            ((d.hasClass(this.attr.tearClass) || (d = d.closest(this.attr.tearSelector)))), d.addClass(this.attr.tearProcessingClass);\n            var e = this.findNearestRealTweet(d.prev(), \"prev\"), f = this.findNearestRealTweet(d.next(), \"next\"), g = this.getTweetId(f), h = this.getTweetId(e);\n            d.attr(\"data-prev-id\", h), d.attr(\"data-next-id\", g), this.trigger(\"uiWantsMoreTimelineItems\", this.getRangeItemsData(string.subtractOne(g), h));\n        }, this.injectRangeItems = function(a) {\n            var b = this.select(\"tearSelector\"), c = $(a.items_html);\n            b.each(function(b, d) {\n                var e = $(d), f = e.attr(\"data-prev-id\"), g = e.attr(\"data-next-id\"), h = !0;\n                ((((a.since_id == f)) && (((((f == this.getTweetId(c.first()))) && (c = c.not(c.first())))), ((((g == this.getTweetId(c.last()))) && (c = c.not(c.last()), h = !1))), c.hide(), e.before(c), e.removeClass(this.attr.tearProcessingClass), ((h || e.remove())), c.filter(\".js-stream-item\").slideDown(\"fast\"), this.reportInjectedItems(c, \"uiHasInjectedRangeTimelineItems\"))));\n            }.bind(this));\n        }, this.notifyRangeItemsError = function(a) {\n            this.select(\"tearProcessingSelector\").removeClass(this.attr.tearProcessingClass);\n        }, this.after(\"initialize\", function() {\n            var a = userInfo.getExperimentGroup(\"home_timeline_snapback_951\"), b = userInfo.getExperimentGroup(\"web_conversations\"), c = ((((a && ((a.bucket == \"preserve\")))) || ((((b && ((b.experiment_key == \"conversations_on_home_timeline_785\")))) && ((b.bucket != \"control\")))))), d = userInfo.getDecider(\"preserve_scroll_position\");\n            ((((this.attr.preservedScrollEnabled && ((c || d)))) && (this.preserveScrollPosition = !0, this.JSBNG__on(JSBNG__document, \"uiPageChanged\", this.restorePosition), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.recordTweetAtTop), this.before(\"teardown\", this.trimTimeline), this.JSBNG__on(\"click\", {\n                tearSelector: this.expandTear\n            }))));\n        });\n    };\n;\n    var utils = require(\"core/utils\"), _ = require(\"core/i18n\"), string = require(\"app/utils/string\"), userInfo = require(\"app/data/user_info\"), compose = require(\"core/compose\"), TEAR_HTML = ((((\"\\u003Cli class=\\\"tear stream-item\\\"\\u003E\\u003Cbutton class=\\\"tear-inner btn-link\\\" type=\\\"button\\\"\\u003E\\u003Cspan class=\\\"tear-text\\\"\\u003E\" + _(\"Load more tweets\"))) + \"\\u003C/span\\u003E\\u003C/button\\u003E\\u003C/li\\u003E\"));\n    module.exports = withPreservedScrollPosition;\n});\ndefine(\"app/ui/timelines/with_activity_supplements\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withActivitySupplements() {\n        this.defaultAttrs({\n            networkActivityPageViewAllToggle: \".stream-item-activity-network\",\n            viewAllSupplementsButton: \"button.view-all-supplements\",\n            interactionsPageViewAllToggle: \".stream-item-activity-me button.view-all-supplements\",\n            additionalStreamItemsSelector: \".sub-stream-item-showing,.sub-stream-item-hidden\",\n            additionalNetworkActivityItems: \".hidden-supplement, .hidden-supplement-expanded\",\n            hiddenSupplement: \"hidden-supplement\",\n            visibleSupplement: \"hidden-supplement-expanded\",\n            hiddenSubItem: \"sub-stream-item-hidden\",\n            visibleSubItem: \"sub-stream-item-showing\",\n            visibleSupplementSelector: \".visible-supplement\"\n        }), this.toggleSupplementTrigger = function(a) {\n            var b = a.hasClass(\"show\");\n            return a.toggleClass(\"hide\", b).toggleClass(\"show\", !b), b;\n        }, this.toggleInteractionsSupplements = function(a, b) {\n            var c = $(b.el), d = this.toggleSupplementTrigger(c);\n            this.toggleSubStreamItemsVisibility(c.parent(), d);\n        }, this.toggleNetworkActivitySupplements = function(a, b) {\n            if ((($(a.target).closest(\".supplement\").length > 0))) {\n                return;\n            }\n        ;\n        ;\n            var c = $(b.el), d = this.toggleSupplementTrigger(c.JSBNG__find(this.attr.viewAllSupplementsButton));\n            ((d || this.trigger(c.JSBNG__find(\".activity-supplement \\u003E .stream-item.open\"), \"uiShouldToggleExpandedState\"))), this.toggleSubStreamItemsVisibility(c, d), c.JSBNG__find(this.attr.additionalNetworkActivityItems).toggleClass(\"hidden-supplement\", !d).toggleClass(\"hidden-supplement-expanded\", d);\n            var e = c.closest(\".js-stream-item\"), f;\n            ((d ? (e.addClass(\"js-has-navigable-stream\"), f = e.JSBNG__find(\".activity-supplement .stream-item:first-child\"), e.JSBNG__find(\".activity-supplement \\u003E .js-unselectable-stream-item\").removeClass(\"js-unselectable-stream-item\"), this.trigger(f, \"uiSelectItem\", {\n                setFocus: !0\n            })) : (e.removeClass(\"js-has-navigable-stream\"), e.JSBNG__find(\".activity-supplement \\u003E .hidden-supplement\").addClass(\"js-unselectable-stream-item\"), this.trigger(e, \"uiSelectItem\", {\n                setFocus: !0\n            }))));\n        }, this.toggleSubStreamItemsVisibility = function(a, b) {\n            a.JSBNG__find(this.attr.additionalStreamItemsSelector).toggleClass(\"sub-stream-item-hidden\", !b).toggleClass(\"sub-stream-item-showing\", b);\n        }, this.selectAndFocusTopLevelStreamItem = function(a, b) {\n            var c = $(b.el), d = c.hasClass(\"js-has-navigable-stream\"), e = this.select(\"viewAllSupplementsButton\").hasClass(\"show\"), f = c.closest(\".js-stream-item\");\n            ((((e && !d)) && (a.stopPropagation(), f.removeClass(\"js-has-navigable-stream\"), this.trigger(f, \"uiSelectItem\", {\n                setFocus: !0\n            }))));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"click\", {\n                interactionsPageViewAllToggle: this.toggleInteractionsSupplements,\n                networkActivityPageViewAllToggle: this.toggleNetworkActivitySupplements\n            }), this.JSBNG__on(\"uiSelectItem\", {\n                visibleSupplementSelector: this.selectAndFocusTopLevelStreamItem\n            });\n        });\n    };\n;\n    module.exports = withActivitySupplements;\n});\ndefine(\"app/ui/with_conversation_actions\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function() {\n        this.defaultAttrs({\n            conversationModuleSelector: \".conversation-module\",\n            hasConversationModuleSelector: \".tweet.has-conversation-module\",\n            viewMoreSelector: \"a.view-more\",\n            missingTweetsLinkSelector: \"a.missing-tweets-link\",\n            conversationRootSelector: \"li.conversation-root\",\n            repliesCountSelector: \".replies-count\",\n            otherRepliesSelector: \".other-replies\",\n            topLevelStreamItemSelector: \".stream-item:not(.conversation-tweet-item)\",\n            afterExpandedClass: \"after-expanded\",\n            beforeExpandedClass: \"before-expanded\",\n            repliesCountClass: \"replies-count\",\n            visuallyHiddenClass: \"visuallyhidden\",\n            conversationRootClass: \"conversation-root\",\n            originalTweetClass: \"original-tweet\",\n            hadConversationClass: \"had-conversation\",\n            conversationHtmlKey: \"conversationHtml\",\n            restoreConversationDelay: 100,\n            animationTime: 200\n        }), this.dedupAndCollapse = function(a, b) {\n            this.dedupConversations(), this.collapseConversations(((b && b.tweets)));\n        }, this.dedupConversations = function() {\n            var a = this.select(\"conversationModuleSelector\");\n            a.each(function(a, b) {\n                if (!b.parentNode) {\n                    return;\n                }\n            ;\n            ;\n                var c = $(b).attr(\"data-ancestors\").split(\",\"), d = $(this.idsToSelector(c));\n                d.addClass(\"to-be-removed\"), d.prev().removeClass(this.attr.beforeExpandedClass).end().next().removeClass(this.attr.afterExpandedClass);\n                var e = this;\n                d.slideUp(function() {\n                    var a = $(this);\n                    ((a.hasClass(e.attr.selectedClass) && e.trigger(\"uiSelectNext\", {\n                        maintainPosition: !0\n                    }))), JSBNG__setTimeout(function() {\n                        a.remove();\n                    }, 0);\n                });\n            }.bind(this));\n        }, this.idToSelector = function(a) {\n            return ((\"#stream-item-tweet-\" + a));\n        }, this.idsToSelector = function(a) {\n            return a.map(this.idToSelector).join(\",\");\n        }, this.collapseConversations = function(a) {\n            var b;\n            if (a) {\n                var c = a.map(function(a) {\n                    return a.tweetId;\n                }), d = this.$node.JSBNG__find(this.idsToSelector(c));\n                b = d.JSBNG__find(this.attr.conversationModuleSelector);\n            }\n             else b = this.select(\"conversationModuleSelector\");\n        ;\n        ;\n            var e = {\n            }, f = {\n            };\n            b.get().reverse().forEach(function(a) {\n                var b = $(a), c = b.attr(\"data-ancestors\"), d = b.JSBNG__find(\".conversation-root .tweet\").attr(\"data-item-id\");\n                ((((!b.hasClass(\"dont-collapse\") && !b.hasClass(\"to-be-removed\"))) && ((e[c] ? this.collapseAncestors(b) : ((f[d] && this.collapseRoot(b))))))), e[c] = !0, f[d] = !0;\n            }.bind(this));\n        }, this.expandConversationHandler = function(a, b) {\n            a.preventDefault();\n            var c = $(a.target).closest(this.attr.conversationModuleSelector);\n            this.expandConversation(c), c.addClass(\"dont-collapse\");\n        }, this.expandConversation = function(a) {\n            ((((a.JSBNG__find(\".conversation-tweet-item.conversation-ancestor:visible\").length > 0)) ? this.expandRoot(a) : this.expandAncestors(a)));\n        }, this.expandAncestors = function(a) {\n            var b = a.JSBNG__find(\".conversation-header\"), c = a.JSBNG__find(\".conversation-tweet-item, .missing-tweets-bar\"), d = a.JSBNG__find(\".original-tweet-item\");\n            this.slideAndFadeContent(b, c, d);\n        }, this.expandRoot = function(a) {\n            var b = a.JSBNG__find(\".conversation-header\"), c = a.JSBNG__find(\".conversation-tweet-item.conversation-root, .missing-tweets-bar\"), d = a.JSBNG__find(\".conversation-tweet-item.conversation-ancestor:not(.conversation-root):first\");\n            ((((d.length === 0)) && (d = a.JSBNG__find(\".original-tweet-item\")))), this.slideAndFadeContent(b, c, d);\n        }, this.collapseAncestors = function(a) {\n            var b = a.JSBNG__find(\".conversation-tweet-item, .missing-tweets-bar\"), c = a.JSBNG__find(\".conversation-header\"), d = a.JSBNG__find(\".original-tweet-item\");\n            this.slideAndFadeContent(b, c, d);\n        }, this.collapseRoot = function(a) {\n            var b = a.JSBNG__find(\".conversation-tweet-item.conversation-root, .missing-tweets-bar\"), c = a.JSBNG__find(\".conversation-header\"), d = a.JSBNG__find(\".conversation-tweet-item.conversation-ancestor:not(.conversation-root):first\");\n            ((((d.length === 0)) && (d = a.JSBNG__find(\".original-tweet-item\")))), this.slideAndFadeContent(b, c, d);\n        }, this.slideAndFadeContent = function(a, b, c) {\n            if (a.is(\":hidden\")) {\n                return;\n            }\n        ;\n        ;\n            var d = c.offset().JSBNG__top, e = this.getCombinedHeight(a);\n            a.hide();\n            var f = c.offset().JSBNG__top;\n            b.show();\n            var g = this.getCombinedHeight(b), h = c.offset().JSBNG__top;\n            this.setAbsolutePosition(b), b.hide(), a.show(), this.setAbsolutePosition(a);\n            var i = ((d - f)), j = ((d - h));\n            c.css(\"paddingTop\", e), a.fadeOut(this.attr.animationTime), b.fadeIn(this.attr.animationTime), c.animate({\n                paddingTop: g\n            }, this.attr.animationTime, function() {\n                this.resetCss(a), this.resetCss(b), this.resetCss(c);\n            }.bind(this));\n        }, this.resetCss = function(a) {\n            var b = {\n                position: \"\",\n                JSBNG__top: \"\",\n                width: \"\",\n                height: \"\",\n                paddingTop: \"\"\n            };\n            a.css(b);\n        }, this.setAbsolutePosition = function(a) {\n            a.get().reverse().forEach(function(a) {\n                var b = $(a), c = b.width(), d = b.height();\n                b.css({\n                    position: \"absolute\",\n                    JSBNG__top: b.position().JSBNG__top\n                }), b.width(c), b.height(d);\n            });\n        }, this.getCombinedHeight = function(a) {\n            var b = 0;\n            return a.each(function() {\n                b += $(this).JSBNG__outerHeight();\n            }), b;\n        }, this.convertRootToStandardTweet = function(a) {\n            a.data(this.attr.conversationHtmlKey, a.html());\n            var b = a.JSBNG__find(this.attr.conversationRootSelector);\n            a.empty().addClass(this.attr.hadConversationClass).html(b.html());\n            var c = a.JSBNG__find(this.attr.tweetSelector);\n            c.addClass(this.attr.originalTweetClass).removeClass(this.attr.conversationRootClass);\n        }, this.restoreConversation = function(a, b) {\n            var c = this.streamItemFromEvent(a), d = c.data(this.attr.conversationHtmlKey);\n            ((d && (c.html(d), c.removeClass(this.attr.hadConversationClass), c.data(this.attr.conversationHtmlKey, null))));\n        }, this.expandConversationRoot = function(a, b) {\n            a.preventDefault();\n            var c = this.streamItemFromEvent(a);\n            this.convertRootToStandardTweet(c), c.trigger(\"uiShouldToggleExpandedState\");\n        }, this.collapseRootAndRestoreConversation = function(a, b) {\n            var c = this.streamItemFromEvent(a);\n            c.trigger(\"uiShouldToggleExpandedState\"), JSBNG__setTimeout(function() {\n                this.restoreConversation(a, b);\n            }.bind(this), this.attr.restoreConversationDelay);\n        }, this.streamItemFromEvent = function(a) {\n            return $(a.target).closest(this.attr.topLevelStreamItemSelector);\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiHasInjectedNewTimeline uiHasInjectedOldTimelineItems\", this.dedupAndCollapse), this.JSBNG__on(\"click\", {\n                viewMoreSelector: this.expandConversationHandler,\n                missingTweetsLinkSelector: this.expandConversationRoot\n            }), this.JSBNG__on(\"uiExpandConversationRoot\", this.expandConversationRoot), this.JSBNG__on(\"uiRestoreConversationModule\", this.collapseRootAndRestoreConversation), this.dedupAndCollapse();\n        });\n    };\n});\ndefine(\"app/ui/timelines/with_pinned_stream_items\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withPinnedStreamItems() {\n        this.defaultAttrs({\n            pinnedStreamItemSelector: \"li.js-pinned\"\n        }), this.keepPinnedStreamItemsOnTop = function() {\n            if (!this.$pinnedStreamItems.length) {\n                return;\n            }\n        ;\n        ;\n            var a = this.$pinnedStreamItems.first(), b = this.$pinnedStreamItems.last(), c = this.$items.children().first(), d = a.prev(), e = b.next();\n            a.css(\"margin-top\", \"0\"), ((a.hasClass(\"open\") && d.removeClass(\"before-expanded\"))), ((b.hasClass(\"open\") && (e.removeClass(\"after-expanded\"), c.addClass(\"after-expanded\")))), this.$items.prepend(this.$pinnedStreamItems.detach());\n        }, this.after(\"initialize\", function(a) {\n            this.$items = this.select(\"itemsSelector\"), this.$pinnedStreamItems = this.select(\"pinnedStreamItemSelector\"), this.JSBNG__on(\"uiHasInjectedNewTimeline\", this.keepPinnedStreamItemsOnTop);\n        });\n    };\n;\n    module.exports = withPinnedStreamItems;\n});\ndefine(\"app/ui/timelines/tweet_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/ui/timelines/with_new_items\",\"app/ui/timelines/with_tweet_pagination\",\"app/ui/timelines/with_preserved_scroll_position\",\"app/ui/timelines/with_activity_supplements\",\"app/ui/with_timestamp_updating\",\"app/ui/with_tweet_actions\",\"app/ui/with_tweet_translation\",\"app/ui/with_conversation_actions\",\"app/ui/with_item_actions\",\"app/ui/timelines/with_traveling_ptw\",\"app/ui/timelines/with_pinned_stream_items\",\"app/ui/gallery/with_gallery\",], function(module, require, exports) {\n    function tweetTimeline() {\n        this.defaultAttrs({\n            itemType: \"tweet\"\n        }), this.reportInitialTweetsDisplayed = function() {\n            var b = this.select(\"genericItemSelector\"), c = [], d = function(b, d) {\n                var e = this.interactionData(this.findFirstItemContent($(d)));\n                ((this.attr.reinjectedPromotedTweets && (e.impressionId = undefined))), c.push(e);\n            }.bind(this);\n            for (var e = 0, f = b.length; ((e < f)); e++) {\n                d(e, b[e]);\n            ;\n            };\n        ;\n            var g = {\n                scribeContext: {\n                    component: \"stream\"\n                },\n                tweets: c\n            };\n            this.trigger(\"uiTweetsDisplayed\", g);\n        }, this.reportTweetsDisplayed = function(a, b) {\n            b.tweets = b.items, this.trigger(\"uiTweetsDisplayed\", b);\n        }, this.removeTweetsFromUser = function(a, b) {\n            var c = this.$node.JSBNG__find(((((\"[data-user-id=\" + b.userId)) + \"]\")));\n            c.parent().remove(), this.trigger(\"uiRemovedSomeTweets\");\n        }, this.after(\"initialize\", function(a) {\n            this.attr.reinjectedPromotedTweets = a.reinjectedPromotedTweets, this.reportInitialTweetsDisplayed(), this.JSBNG__on(\"uiHasInjectedNewTimeline uiHasInjectedOldTimelineItems uiHasInjectedRangeTimelineItems\", this.reportTweetsDisplayed), this.JSBNG__on(\"uiRemoveTweetsFromUser\", this.removeTweetsFromUser);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withBaseTimeline = require(\"app/ui/timelines/with_base_timeline\"), withOldItems = require(\"app/ui/timelines/with_old_items\"), withNewItems = require(\"app/ui/timelines/with_new_items\"), withTweetPagination = require(\"app/ui/timelines/with_tweet_pagination\"), withPreservedScrollPosition = require(\"app/ui/timelines/with_preserved_scroll_position\"), withActivitySupplements = require(\"app/ui/timelines/with_activity_supplements\"), withTimestampUpdating = require(\"app/ui/with_timestamp_updating\"), withTweetActions = require(\"app/ui/with_tweet_actions\"), withTweetTranslation = require(\"app/ui/with_tweet_translation\"), withConversationActions = require(\"app/ui/with_conversation_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withTravelingPtw = require(\"app/ui/timelines/with_traveling_ptw\"), withPinnedStreamItems = require(\"app/ui/timelines/with_pinned_stream_items\"), withGallery = require(\"app/ui/gallery/with_gallery\");\n    module.exports = defineComponent(tweetTimeline, withBaseTimeline, withTweetPagination, withPreservedScrollPosition, withOldItems, withNewItems, withTimestampUpdating, withTweetActions, withTweetTranslation, withConversationActions, withItemActions, withTravelingPtw, withPinnedStreamItems, withActivitySupplements, withGallery);\n});\ndefine(\"app/boot/tweet_timeline\", [\"module\",\"require\",\"exports\",\"app/boot/timeline\",\"app/boot/tweets\",\"app/boot/help_pips\",\"app/ui/expando/close_all_button\",\"app/ui/timelines/tweet_timeline\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a, b, c, d) {\n        var e = utils.merge(a, {\n            endpoint: b,\n            itemType: c,\n            eventData: {\n                scribeContext: {\n                    component: ((d || c))\n                }\n            }\n        });\n        timelineBoot(e), tweetsBoot(\"#timeline\", e), ((e.help_pips_decider && helpPipsBoot(e))), CloseAllButton.attachTo(\"#close-all-button\", {\n            addEvent: \"uiHasExpandedTweet\",\n            subtractEvent: \"uiHasCollapsedTweet\",\n            where: \"#timeline\",\n            closeAllEvent: \"uiWantsToCloseAllTweets\"\n        }), TweetTimeline.attachTo(\"#timeline\", utils.merge(e, {\n            tweetItemSelector: \"div.original-tweet, .conversation-tweet-item div.tweet\"\n        }));\n    };\n;\n    var timelineBoot = require(\"app/boot/timeline\"), tweetsBoot = require(\"app/boot/tweets\"), helpPipsBoot = require(\"app/boot/help_pips\"), CloseAllButton = require(\"app/ui/expando/close_all_button\"), TweetTimeline = require(\"app/ui/timelines/tweet_timeline\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/user_completion_module\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function userCompletionModule() {\n        this.defaultAttrs({\n            completeProfileSelector: \"#complete-profile-step\",\n            confirmEmailSelector: \"#confirm-email-step[href=#]:not(.completed)\",\n            confirmEmailInboxLinkSelector: \"#confirm-email-step[href!=#]:not(.completed)\",\n            followAccountsSelector: \"#follow-accounts-step\"\n        }), this.openConfirmEmailDialog = function() {\n            this.trigger(\"uiOpenConfirmEmailDialog\");\n        }, this.resendConfirmationEmail = function() {\n            this.trigger(\"uiResendConfirmationEmail\");\n        }, this.setCompleteProfileStepCompleted = function(a, b) {\n            ((((b.sourceEventData.uploadType == \"avatar\")) && this.setStepCompleted(\"completeProfileSelector\")));\n        }, this.setFollowAccountsStepCompleted = function() {\n            this.setStepCompleted(\"followAccountsSelector\");\n        }, this.setStepCompleted = function(a) {\n            this.select(a).removeClass(\"selected\").addClass(\"completed\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataImageEnqueued\", this.setCompleteProfileStepCompleted), this.JSBNG__on(JSBNG__document, \"uiDidReachTargetFollowingCount\", this.setFollowAccountsStepCompleted), this.JSBNG__on(\"click\", {\n                confirmEmailSelector: this.openConfirmEmailDialog,\n                confirmEmailInboxLinkSelector: this.resendConfirmationEmail\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(userCompletionModule);\n});\ndefine(\"app/data/user_completion_module_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function userCompletionModuleScribe() {\n        this.defaultAttrs({\n            userCompletionStepSelector: \".user-completion-step:not(.completed)\"\n        }), this.scribeStepClick = function(a, b) {\n            var c = $(a.target).data(\"scribe-element\");\n            this.scribe({\n                component: \"user_completion\",\n                element: c,\n                action: \"click\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                userCompletionStepSelector: this.scribeStepClick\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(userCompletionModuleScribe, withScribe);\n});\ndefine(\"app/boot/user_completion_module\", [\"module\",\"require\",\"exports\",\"app/ui/user_completion_module\",\"app/data/user_completion_module_scribe\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a) {\n        var b = \"#user-completion-module\", c = utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"user_completion\"\n                }\n            }\n        });\n        UserCompletionModule.attachTo(b, c), UserCompletionModuleScribe.attachTo(b, c);\n    };\n;\n    var UserCompletionModule = require(\"app/ui/user_completion_module\"), UserCompletionModuleScribe = require(\"app/data/user_completion_module_scribe\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/who_to_follow/with_user_recommendations\", [\"module\",\"require\",\"exports\",\"core/utils\",\"$lib/bootstrap_tooltip.js\",], function(module, require, exports) {\n    function withUserRecommendations() {\n        this.defaultAttrs({\n            refreshAnimationDuration: 200,\n            cycleTimeout: 1000,\n            experimentCycleTimeout: 300,\n            wtfOptions: {\n            },\n            selfPromotedAccountHtml: \"\",\n            $accountPriorToPreview: null,\n            wtfRefreshOnNewTweets: !1,\n            recListSelector: \".js-recommended-followers\",\n            recSelector: \".js-actionable-user\",\n            refreshRecsSelector: \".js-refresh-suggestions\",\n            similarToContainerSelector: \".js-expanded-similar-to\",\n            expandedContainerSelector: \".js-expanded-container\",\n            itemType: \"user\"\n        }), this.refreshRecommendations = function(a, b) {\n            if (!this.currentlyRefreshing) {\n                this.currentlyRefreshing = !0;\n                var c = ((this.getVisibleIds(null, !0).length || this.attr.wtfOptions.limit));\n                this.trigger(\"uiRefreshUserRecommendations\", utils.merge(this.attr.wtfOptions, {\n                    excluded: this.getVisibleIds(),\n                    limit: c,\n                    refreshType: a.type\n                })), this.hideRecommendations();\n            }\n        ;\n        ;\n        }, this.getUserRecommendations = function(a, b) {\n            this.trigger(\"uiGetUserRecommendations\", utils.merge(this.attr.wtfOptions, ((a || {\n            })))), this.hideRecommendations();\n        }, this.hideRecommendations = function() {\n            this.animateContentOut(this.select(\"recListSelector\"), \"animationCallback\");\n        }, this.handleRecommendationsResponse = function(a, b) {\n            if (this.disabled) {\n                return;\n            }\n        ;\n        ;\n            b = ((b || {\n            }));\n            var c = b.user_recommendations_html;\n            if (c) {\n                var d = this.currentlyRefreshingUser(b);\n                this.$node.addClass(\"has-content\");\n                if (this.shouldExpandWtf(b)) {\n                    var e = $(c), f = e.filter(this.attr.recSelector).first(), g = e.filter(this.attr.expandedContainerSelector);\n                    ((d && this.animateContentIn(d, \"animationCallback\", $(\"\\u003Cdiv\\u003E\").append(f).html(), {\n                        modOp: \"replaceWith\",\n                        scribeCallback: function() {\n                            ((this.currentlyExpanding ? this.pendingScribe = !0 : this.reportUsersDisplayed(b)));\n                        }.bind(this)\n                    }))), ((g.size() && this.animateExpansion(g, b)));\n                }\n                 else {\n                    var h = this.select(\"recListSelector\"), i;\n                    ((d && (h = d, i = \"replaceWith\"))), this.animateContentIn(h, \"animationCallback\", c, {\n                        modOp: i,\n                        scribeCallback: function() {\n                            this.reportUsersDisplayed(b);\n                        }.bind(this)\n                    });\n                }\n            ;\n            ;\n            }\n             else this.handleEmptyRefreshResponse(a, b), this.trigger(\"uiGotEmptyRecommendationsResponse\", b);\n        ;\n        ;\n        }, this.handleRefreshError = function(a, b) {\n            this.handleEmptyRefreshResponse(a, b);\n        }, this.handleEmptyRefreshResponse = function(a, b) {\n            if (!this.select(\"recSelector\").length) {\n                return;\n            }\n        ;\n        ;\n            var c = this.select(\"recListSelector\"), d = this.currentlyRefreshingUser(b);\n            ((d && (c = d))), this.animateContentIn(c, \"animationCallback\", c.html());\n        }, this.getVisibleIds = function(a, b) {\n            var c = this.select(\"recSelector\").not(a);\n            return ((b || (c = c.not(\".promoted-account\")))), c.map(function() {\n                return $(this).attr(\"data-user-id\");\n            }).toArray();\n        }, this.originalItemCount = function() {\n            return $(this.attr.recListSelector).children(this.attr.recSelector).length;\n        }, this.doAfterFollowAction = function(a, b) {\n            if (((this.disabled || ((b.newState != \"following\"))))) {\n                return;\n            }\n        ;\n        ;\n            var c = ((this.expandBucket ? this.attr.experimentCycleTimeout : this.attr.cycleTimeout));\n            JSBNG__setTimeout(function() {\n                if (this.currentlyRefreshing) {\n                    return;\n                }\n            ;\n            ;\n                var a = this.select(\"recSelector\").filter(((((\"[data-user-id='\" + b.userId)) + \"']\")));\n                if (!a.length) {\n                    return;\n                }\n            ;\n            ;\n                this.cycleRecommendation(a, b);\n            }.bind(this), c);\n        }, this.isInSimilarToSection = function(a) {\n            return !!a.closest(this.attr.similarToContainerSelector).length;\n        }, this.cycleRecommendation = function(a, b) {\n            this.animateContentOut(a, \"animationCallback\");\n            var c = utils.merge(this.attr.wtfOptions, {\n                limit: 1,\n                visible: this.getVisibleIds(a),\n                refreshUserId: b.userId\n            });\n            ((this.isInSimilarToSection(a) && (c.user_id = this.select(\"similarToContainerSelector\").data(\"similar-to-user-id\")))), this.trigger(\"uiGetUserRecommendations\", c);\n        }, this.animateExpansion = function(a, b) {\n            var c = this.select(\"recListSelector\"), d = this.select(\"expandedContainerSelector\"), e = function() {\n                ((this.pendingScribe && (this.reportUsersDisplayed(b), this.pendingScribe = !1))), this.currentlyExpanding = !1;\n            };\n            ((d.length ? d.html(a.html()) : c.append(a))), ((a.is(\":visible\") ? e.bind(this)() : a.slideDown(\"slow\", e.bind(this))));\n        }, this.animateContentIn = function(a, b, c, d) {\n            if (!a.length) {\n                return;\n            }\n        ;\n        ;\n            d = ((d || {\n            }));\n            var e = function() {\n                ((a.is(this.attr.recListSelector) && (this.currentlyRefreshing = !1))), a[((d.modOp || \"html\"))](c).animate({\n                    opacity: 1\n                }, this.attr.refreshAnimationDuration), ((d.scribeCallback && d.scribeCallback()));\n            }.bind(this);\n            ((a.is(\":animated\") ? this[b] = e : e()));\n        }, this.animateContentOut = function(a, b) {\n            a.animate({\n                opacity: 0\n            }, {\n                duration: this.attr.refreshAnimationDuration,\n                complete: function() {\n                    ((this[b] && this[b]())), this[b] = null;\n                }.bind(this)\n            });\n        }, this.getItemPosition = function(a) {\n            var b = this.originalItemCount();\n            return ((this.isInSimilarToSection(a) ? ((((b + a.closest(this.attr.recSelector).index())) - 1)) : ((a.closest(this.attr.expandedContainerSelector).length ? ((b + a.closest(this.attr.recSelector).index())) : a.closest(this.attr.recSelector).index()))));\n        }, this.currentlyRefreshingUser = function(a) {\n            return ((((((!a || !a.sourceEventData)) || !a.sourceEventData.refreshUserId)) ? null : this.select(\"recSelector\").filter(((((\"[data-user-id=\" + a.sourceEventData.refreshUserId)) + \"]\")))));\n        }, this.shouldExpandWtf = function(a) {\n            return !!((((a && a.sourceEventData)) && a.sourceEventData.get_replacement));\n        }, this.getUsersDisplayed = function() {\n            var a = this.select(\"recSelector\"), b = [];\n            return a.each(function(a, c) {\n                var d = $(c);\n                b.push({\n                    id: d.attr(\"data-user-id\"),\n                    impressionId: d.attr(\"data-impression-id\")\n                });\n            }), b;\n        }, this.reportUsersDisplayed = function(a) {\n            var b = this.getUsersDisplayed();\n            this.trigger(\"uiUsersDisplayed\", {\n                users: b\n            }), this.trigger(\"uiDidGetRecommendations\", a);\n        }, this.verifyInitialRecommendations = function() {\n            ((this.hasRecommendations() ? this.reportUsersDisplayed({\n                initialResults: !0\n            }) : this.getUserRecommendations({\n                initialResults: !0\n            })));\n        }, this.hasRecommendations = function() {\n            return ((this.select(\"recSelector\").length > 0));\n        }, this.storeSelfPromotedAccount = function(a, b) {\n            ((b.html && (this.selfPromotedAccountHtml = b.html)));\n        }, this.replaceUser = function(a, b) {\n            a.tooltip(\"hide\"), ((a.parent().hasClass(\"preview-wrapper\") && a.unwrap())), a.replaceWith(b);\n        }, this.replaceUserAnimation = function(a, b) {\n            a.tooltip(\"hide\"), this.before(\"teardown\", function() {\n                this.replaceUser(a, b);\n            });\n            var c = $(\"\\u003Cdiv/\\u003E\", {\n                class: a.attr(\"class\"),\n                style: a.attr(\"style\")\n            }).addClass(\"preview-wrapper\");\n            a.wrap(c);\n            var d = a.css(\"minHeight\");\n            a.css({\n                minHeight: 0\n            }).slideUp(70, function() {\n                b.attr(\"style\", a.attr(\"style\")), a.replaceWith(b), b.delay(350).slideDown(70, function() {\n                    b.css({\n                        minHeight: d\n                    }), b.unwrap(), JSBNG__setTimeout(function() {\n                        b.tooltip(\"show\"), JSBNG__setTimeout(function() {\n                            b.tooltip(\"hide\");\n                        }, 8000);\n                    }, 500);\n                });\n            });\n        }, this.handlePreviewPromotedAccount = function() {\n            if (this.disabled) {\n                return;\n            }\n        ;\n        ;\n            if (this.selfPromotedAccountHtml) {\n                var a = $(this.selfPromotedAccountHtml), b = this.select(\"recSelector\").first();\n                this.attr.$accountPriorToPreview = b.clone(), this.replaceUserAnimation(b, a), a.JSBNG__find(\"a\").JSBNG__on(\"click\", function(a) {\n                    a.preventDefault(), a.stopPropagation();\n                });\n            }\n        ;\n        ;\n        }, this.maybeRestoreAccountPriorToPreview = function() {\n            var a = this.attr.$accountPriorToPreview;\n            if (!a) {\n                return;\n            }\n        ;\n        ;\n            this.replaceUser(this.select(\"recSelector\").first(), a), this.attr.$accountPriorToPreview = null;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataDidGetUserRecommendations\", this.handleRecommendationsResponse), this.JSBNG__on(JSBNG__document, \"dataFailedToGetUserRecommendations\", this.handleRefreshError), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange\", this.doAfterFollowAction), this.JSBNG__on(\"click\", {\n                refreshRecsSelector: this.refreshRecommendations\n            }), this.JSBNG__on(JSBNG__document, \"dataDidGetSelfPromotedAccount\", this.storeSelfPromotedAccount), this.JSBNG__on(JSBNG__document, \"uiPromptbirdPreviewPromotedAccount\", this.handlePreviewPromotedAccount), this.JSBNG__on(JSBNG__document, \"uiPromptbirdDismissPrompt\", this.maybeRestoreAccountPriorToPreview), ((this.attr.wtfRefreshOnNewTweets && this.JSBNG__on(JSBNG__document, \"uiRefreshUserRecsOnNewTweets uiPageChanged\", this.refreshRecommendations)));\n        });\n    };\n;\n    var utils = require(\"core/utils\");\n    require(\"$lib/bootstrap_tooltip.js\"), module.exports = withUserRecommendations;\n});\ndefine(\"app/ui/who_to_follow/who_to_follow_dashboard\", [\"module\",\"require\",\"exports\",\"core/i18n\",\"core/utils\",\"core/component\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",\"app/ui/who_to_follow/with_user_recommendations\",], function(module, require, exports) {\n    function whoToFollowDashboard() {\n        this.defaultAttrs({\n            dashboardSelector: \".dashboard-user-recommendations\",\n            recUserSelector: \".dashboard-user-recommendations .js-actionable-user\",\n            dismissRecSelector: \".dashboard-user-recommendations .js-actionable-user .js-action-dismiss\",\n            viewAllSelector: \".js-view-all-link\",\n            interestsSelector: \".js-interests-link\",\n            findFriendsSelector: \".js-find-friends-link\"\n        }), this.dismissRecommendation = function(a, b) {\n            if (!this.currentlyRefreshing) {\n                this.currentlyDismissing = !0;\n                var c = $(a.target).closest(this.attr.recSelector), d = c.attr(\"data-user-id\");\n                this.trigger(\"uiDismissUserRecommendation\", {\n                    recommended_user_id: d,\n                    impressionId: c.attr(\"data-impression-id\"),\n                    excluded: [d,],\n                    visible: this.getVisibleIds(c),\n                    token: c.attr(\"data-feedback-token\"),\n                    dismissable: this.attr.wtfOptions.dismissable,\n                    refreshUserId: d\n                }), this.animateContentOut(c, \"animationCallback\");\n            }\n        ;\n        ;\n        }, this.handleDismissResponse = function(a, b) {\n            b = ((b || {\n            })), this.currentlyDismissing = !1;\n            if (b.user_recommendations_html) {\n                var c = this.currentlyRefreshingUser(b), d = $(b.user_recommendations_html), e = this.getItemPosition(c);\n                this.animateContentIn(c, \"animationCallback\", b.user_recommendations_html, {\n                    modOp: \"replaceWith\",\n                    scribeCallback: function() {\n                        var a = {\n                            oldUser: this.interactionData(c, {\n                                position: e\n                            })\n                        };\n                        ((d.length && (a.newUser = this.interactionData(d, {\n                            position: e\n                        })))), this.trigger(\"uiDidDismissUserRecommendation\", a);\n                    }.bind(this)\n                });\n            }\n             else this.handleEmptyDismissResponse();\n        ;\n        ;\n        }, this.handleDismissError = function(a, b) {\n            var c = this.currentlyRefreshingUser(b);\n            ((c && c.remove())), this.handleEmptyDismissResponse();\n        }, this.handleEmptyDismissResponse = function() {\n            ((this.select(\"recSelector\").length || (this.trigger(\"uiShowMessage\", {\n                message: _(\"You have no more recommendations today!\")\n            }), this.$node.remove())));\n        }, this.enable = function() {\n            this.disabled = !1, this.refreshRecommendations({\n                type: \"empty-timeline\"\n            }), this.$node.show();\n        }, this.initRecommendations = function() {\n            ((this.disabled ? this.$node.hide() : this.verifyInitialRecommendations()));\n        }, this.reset = function() {\n            ((((this.currentlyRefreshing || this.currentlyDismissing)) ? this.select(\"dashboardSelector\").html(\"\") : (this.select(\"dashboardSelector\").css(\"opacity\", 1), this.select(\"recUserSelector\").css(\"opacity\", 1))));\n        }, this.expandWhoToFollow = function(a, b) {\n            this.currentlyExpanding = !0;\n            var c = utils.merge(this.attr.wtfOptions, {\n                limit: 3,\n                visible: this.getVisibleIds(a),\n                refreshUserId: b.userId,\n                get_replacement: !0\n            });\n            this.trigger(\"uiGetUserRecommendations\", c);\n        }, this.triggerLinkClickScribes = function(a) {\n            var b = this, c = {\n                interests_link: this.attr.interestsSelector,\n                import_link: this.attr.findFriendsSelector,\n                view_all_link: this.attr.viewAllSelector,\n                refresh_link: this.attr.refreshRecsSelector\n            }, d = $(a.target);\n            $.each(c, function(a, c) {\n                ((d.is(c) && b.trigger(JSBNG__document, \"uiClickedWtfLink\", {\n                    element: a\n                })));\n            });\n        }, this.after(\"initialize\", function() {\n            this.disabled = ((this.attr.wtfOptions ? this.attr.wtfOptions.disabled : !1)), this.JSBNG__on(JSBNG__document, \"dataDidDismissRecommendation\", this.handleDismissResponse), this.JSBNG__on(JSBNG__document, \"dataFailedToDismissUserRecommendation\", this.handleDismissError), this.JSBNG__on(JSBNG__document, \"uiDidHideEmptyTimelineModule\", this.enable), this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.initRecommendations), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.reset), this.JSBNG__on(\"click\", {\n                dismissRecSelector: this.dismissRecommendation,\n                interestsSelector: this.triggerLinkClickScribes,\n                viewAllSelector: this.triggerLinkClickScribes,\n                findFriendsSelector: this.triggerLinkClickScribes,\n                refreshRecsSelector: this.triggerLinkClickScribes\n            }), this.around(\"cycleRecommendation\", function(a, b, c) {\n                ((((((((this.attr.wtfOptions.display_location === \"wtf-component\")) && !this.currentlyExpanding)) && ((this.getVisibleIds(null, !0).length <= 3)))) ? this.expandWhoToFollow(b, c) : a(b, c)));\n            });\n        });\n    };\n;\n    var _ = require(\"core/i18n\"), utils = require(\"core/utils\"), defineComponent = require(\"core/component\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withUserRecommendations = require(\"app/ui/who_to_follow/with_user_recommendations\");\n    module.exports = defineComponent(whoToFollowDashboard, withUserActions, withItemActions, withUserRecommendations);\n});\ndefine(\"app/ui/who_to_follow/who_to_follow_timeline\", [\"module\",\"require\",\"exports\",\"core/i18n\",\"core/component\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",\"app/ui/who_to_follow/with_user_recommendations\",], function(module, require, exports) {\n    function whoToFollowTimeline() {\n        this.defaultAttrs({\n            doneButtonSelector: \".empty-timeline .js-done\",\n            headerTextSelector: \".empty-timeline .header-text\",\n            targetFollowingCount: 5,\n            titles: {\n                0: _(\"Here are some people you might enjoy following.\"),\n                1: _(\"Victory! That\\u2019s 1.\"),\n                2: _(\"Congratulations! That\\u2019s 2.\"),\n                3: _(\"Excellent! You\\u2019re making progress.\"),\n                4: _(\"Good work! You\\u2019ve almost reached 5.\"),\n                5: _(\"Yee-haw! That\\u2019s 5 follows. Now you\\u2019re on a roll.\")\n            }\n        }), this.dismissAllRecommendations = function(a, b) {\n            var c = $(b.el);\n            if (c.is(\":disabled\")) {\n                return;\n            }\n        ;\n        ;\n            var d = this.getVisibleIds();\n            this.trigger(\"uiDidDismissEmptyTimelineRecommendations\", {\n                userIds: d\n            }), this.trigger(\"uiDidHideEmptyTimelineModule\"), this.$node.remove();\n        }, this.refreshDoneButtonState = function() {\n            if (((this.followingCount >= this.attr.targetFollowingCount))) {\n                var a = this.select(\"doneButtonSelector\");\n                a.attr(\"disabled\", !1), this.trigger(\"uiDidReachTargetFollowingCount\");\n            }\n        ;\n        ;\n        }, this.refreshTitle = function() {\n            var a = this.attr.titles[this.followingCount.toString()];\n            this.select(\"headerTextSelector\").text(a);\n        }, this.refreshTimeline = function() {\n            this.trigger(\"uiTimelineShouldRefresh\", {\n                injectImmediately: !0\n            });\n        }, this.increaseFollowingCount = function() {\n            this.followingCount++;\n        }, this.decreaseFollowingCount = function() {\n            this.followingCount--;\n        }, this.initRecommendations = function() {\n            this.followingCount = this.attr.wtfOptions.followingCount, this.verifyInitialRecommendations();\n        }, this.after(\"initialize\", function() {\n            this.attr.wtfOptions = ((this.attr.emptyTimelineOptions || {\n            })), this.JSBNG__on(JSBNG__document, \"uiFollowAction\", this.increaseFollowingCount), this.JSBNG__on(JSBNG__document, \"uiUnfollowAction\", this.decreaseFollowingCount), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange\", this.refreshDoneButtonState), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange\", this.refreshTitle), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange\", this.refreshTimeline), this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.initRecommendations), this.JSBNG__on(\"click\", {\n                doneButtonSelector: this.dismissAllRecommendations\n            });\n        });\n    };\n;\n    var _ = require(\"core/i18n\"), defineComponent = require(\"core/component\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withUserRecommendations = require(\"app/ui/who_to_follow/with_user_recommendations\");\n    module.exports = defineComponent(whoToFollowTimeline, withUserActions, withItemActions, withUserRecommendations);\n});\ndefine(\"app/data/who_to_follow\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/utils/storage/custom\",\"app/data/with_data\",], function(module, require, exports) {\n    function whoToFollowData() {\n        this.defaults = {\n            maxExcludedRecsInLocalStorage: 100,\n            endpoints: {\n                users: {\n                    url: \"/i/users/recommendations\",\n                    method: \"GET\",\n                    successEvent: \"dataDidGetUserRecommendations\",\n                    errorEvent: \"dataFailedToGetUserRecommendations\"\n                },\n                dismiss: {\n                    url: \"/i/users/recommendations/hide\",\n                    method: \"POST\",\n                    successEvent: \"dataDidDismissRecommendation\",\n                    errorEvent: \"dataFailedToDismissUserRecommendation\"\n                },\n                promoted_self: {\n                    url: \"/i/users/promoted_self\",\n                    method: \"GET\",\n                    successEvent: \"dataDidGetSelfPromotedAccount\",\n                    errorEvent: \"dataFailedToGetSelfPromotedAccount\"\n                }\n            }\n        }, this.refreshEndpoint = function(a) {\n            return this.hitEndpoint(a, {\n                \"Cache-Control\": \"max-age=0\",\n                Pragma: \"no-cache\"\n            });\n        }, this.hitEndpoint = function(a, b) {\n            var b = ((b || {\n            })), c = this.defaults.endpoints[a];\n            return function(a, d) {\n                d = ((d || {\n                })), d.excluded = ((d.excluded || []));\n                var e = ((d.visible || []));\n                delete d.visible, this.JSONRequest({\n                    type: c.method,\n                    url: c.url,\n                    headers: b,\n                    dataType: \"json\",\n                    data: utils.merge(d, {\n                        excluded: this.storage.pushAll(\"excluded\", d.excluded).concat(e).join(\",\")\n                    }),\n                    eventData: d,\n                    success: c.successEvent,\n                    error: c.errorEvent\n                }, c.method);\n            }.bind(this);\n        }, this.excludeUsers = function(a, b) {\n            this.storage.pushAll(\"excluded\", b.userIds), this.trigger(\"dataDidExcludeUserRecommendations\", b);\n        }, this.excludeFollowed = function(a, b) {\n            b = ((b || {\n            })), ((((((b.newState === \"following\")) && b.userId)) && this.storage.push(\"excluded\", b.userId)));\n        }, this.after(\"initialize\", function(a) {\n            var b = customStorage({\n                withArray: !0,\n                withMaxElements: !0,\n                withUniqueElements: !0\n            });\n            this.storage = new b(\"excluded_wtf_recs\"), this.storage.setMaxElements(\"excluded\", this.attr.maxExcludedRecsInLocalStorage), this.JSBNG__on(JSBNG__document, \"uiRefreshUserRecommendations\", this.refreshEndpoint(\"users\")), this.JSBNG__on(JSBNG__document, \"uiGetUserRecommendations\", this.hitEndpoint(\"users\")), this.JSBNG__on(JSBNG__document, \"uiDismissUserRecommendation\", this.hitEndpoint(\"dismiss\")), this.JSBNG__on(JSBNG__document, \"uiDidDismissEmptyTimelineRecommendations\", this.excludeUsers), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange\", this.excludeFollowed), this.JSBNG__on(JSBNG__document, \"uiGotPromptbirdDashboardProfile\", this.hitEndpoint(\"promoted_self\"));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), customStorage = require(\"app/utils/storage/custom\"), withData = require(\"app/data/with_data\"), WhoToFollowData = defineComponent(whoToFollowData, withData);\n    module.exports = WhoToFollowData;\n});\ndefine(\"app/data/who_to_follow_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_interaction_data\",\"app/data/with_interaction_data_scribe\",\"core/utils\",], function(module, require, exports) {\n    function whoToFollowScribe() {\n        this.defaultAttrs({\n            userSelector: \".js-actionable-user\",\n            itemType: \"user\"\n        }), this.scribeDismissRecommendation = function(a, b) {\n            this.scribeInteraction(\"dismiss\", b.oldUser), ((b.newUser && this.scribeInteraction({\n                element: \"replace\",\n                action: \"results\"\n            }, b.newUser, {\n                referring_event: \"replace\"\n            })));\n        }, this.scribeRecommendationResults = function(a, b) {\n            var c = [];\n            ((a.emptyResponse || this.$node.JSBNG__find(this.attr.userSelector).map(function(a, b) {\n                c.push(this.interactionData($(b), {\n                    position: a\n                }));\n            }.bind(this))));\n            var d = ((a.emptyResponse ? \"no_results\" : \"results\"));\n            this.scribeInteractiveResults({\n                element: b,\n                action: d\n            }, c, a, {\n                referring_event: b\n            });\n        }, this.scribeRecommendations = function(a, b) {\n            var c = ((b.sourceEventData || {\n            })), d = ((b.initialResults || c.initialResults));\n            ((d ? (this.scribeRecommendationResults(b, \"initial\"), ((b.emptyResponse || this.scribeRecommendationImpression(b)))) : (this.scribe({\n                action: \"refresh\"\n            }, b, {\n                event_info: c.refreshType\n            }), this.scribeRecommendationResults(b, \"newer\"))));\n        }, this.scribeEmptyRecommendationsResponse = function(a, b) {\n            this.scribeRecommendations(a, utils.merge(b, {\n                emptyResponse: !0\n            }));\n        }, this.scribeRecommendationImpression = function(a) {\n            this.scribe(\"impression\", a);\n        }, this.scribeLinkClicks = function(a, b) {\n            this.scribe({\n                component: \"user_recommendations\",\n                element: b.element,\n                action: \"click\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiDidDismissUserRecommendation\", this.scribeDismissRecommendation), this.JSBNG__on(JSBNG__document, \"uiDidGetRecommendations\", this.scribeRecommendations), this.JSBNG__on(JSBNG__document, \"uiGotEmptyRecommendationsResponse\", this.scribeEmptyRecommendationsResponse), this.JSBNG__on(JSBNG__document, \"uiClickedWtfLink\", this.scribeLinkClicks);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withInteractionData = require(\"app/ui/with_interaction_data\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(whoToFollowScribe, withInteractionData, withInteractionDataScribe);\n});\ndefine(\"app/ui/profile/recent_connections_module\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function recentConnectionsModule() {\n        this.defaultAttrs({\n            itemType: \"user\"\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\");\n    module.exports = defineComponent(recentConnectionsModule, withUserActions, withItemActions);\n});\ndefine(\"app/ui/promptbird/with_invite_contacts\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withInviteContacts() {\n        this.defaultAttrs({\n            inviteContactsSelector: \".invite_contacts_prompt.prompt + .promptbird-action-bar .call-to-action\"\n        }), this.doInviteContacts = function(b, c) {\n            b.preventDefault(), this.trigger(\"uiPromptbirdShowInviteContactsDialog\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                inviteContactsSelector: this.doInviteContacts\n            });\n        });\n    };\n;\n    module.exports = withInviteContacts;\n});\ndefine(\"app/ui/promptbird\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/promptbird/with_invite_contacts\",\"app/ui/tweet_dialog\",], function(module, require, exports) {\n    function promptbirdPrompt() {\n        this.defaultAttrs({\n            promptSelector: \".JSBNG__prompt\",\n            languageSelector: \".language\",\n            callToActionSelector: \".call-to-action\",\n            callToActionDismissSelector: \".call-to-action.dismiss-prompt\",\n            delayedDismissSelector: \".js-follow-btn\",\n            dismissSelector: \"a.js-dismiss\",\n            setLanguageSelector: \".call-to-action.set-language\",\n            oneClickImportSelector: \".call-to-action.one-click-import-button\",\n            inlineImportButtonSelector: \".service-links a.service-link\",\n            promptMentionTweetComposeSelector: \".show_tweet_dialog.promptbird-action-bar a.call-to-action\",\n            deviceFollowSelector: \".device-follow.promptbird-action-bar a.call-to-action\",\n            dashboardProfilePromptSelector: \".gain_followers_prompt\",\n            previewPromotedAccountSelector: \".gain_followers_prompt .preview-promoted-account\",\n            followPromptCallToActionSelector: \"div.promptbird-action-bar.user-actions.not-following \\u003E button.js-follow-btn\"\n        }), this.importCallbackUrl = function() {\n            return ((((((window.JSBNG__location.protocol + \"//\")) + window.JSBNG__location.host)) + \"/who_to_follow/matches\"));\n        }, this.promptLanguage = function() {\n            return this.select(\"languageSelector\").attr(\"data-language\");\n        }, this.dismissPrompt = function(a, b) {\n            a.preventDefault(), this.trigger(\"uiPromptbirdDismissPrompt\", {\n                scribeContext: this.scribeContext(),\n                prompt_id: this.$node.data(\"prompt-id\")\n            }), this.$node.remove();\n        }, this.doPromptMentionTweetCompose = function(a, b) {\n            a.preventDefault();\n            var c = this.$node.JSBNG__find(\"a.call-to-action\").data(\"screenname\"), d = this.$node.JSBNG__find(\"a.call-to-action\").data(\"title\");\n            this.trigger(\"uiPromptMentionTweetCompose\", {\n                screenName: c,\n                title: d,\n                scribeContext: this.scribeContext()\n            });\n        }, this.doDeviceFollow = function(a, b) {\n            a.preventDefault();\n            var c = this.$node.JSBNG__find(\".call-to-action\").data(\"user-id\");\n            this.trigger(\"uiDeviceNotificationsOnAction\", {\n                userId: c,\n                scribeContext: this.scribeContext()\n            });\n        }, this.delayedDismissPrompt = function(b, c) {\n            this.trigger(\"uiPromptbirdDismissPrompt\", {\n                prompt_id: this.$node.data(\"prompt-id\")\n            });\n            var d = this.$node;\n            JSBNG__setTimeout(function() {\n                d.remove();\n            }, 1000);\n        }, this.setLanguage = function(a, b) {\n            this.trigger(\"uiPromptbirdSetLanguage\", {\n                lang: this.promptLanguage()\n            });\n        }, this.doOneClickImport = function(a, b) {\n            a.preventDefault();\n            var c = this.$node.JSBNG__find(\"span.one-click-import-button\").data(\"email\"), d = ((\"/invitations/oauth_launch?email=\" + encodeURIComponent(c))), e = this.$node.data(\"prompt-id\"), b = {\n                triggerEvent: !0,\n                url: d\n            };\n            ((((e === 46)) && (b.width = 880, b.height = 550))), this.trigger(\"uiPromptbirdDoOneClickImport\", b);\n        }, this.doInlineContactImport = function(a, b) {\n            a.preventDefault();\n            var c = $(a.target);\n            this.trigger(\"uiPromptbirdDoInlineContactImport\", {\n                url: c.data(\"url\"),\n                width: c.data(\"width\"),\n                height: c.data(\"height\"),\n                popup: c.data(\"popup\"),\n                serviceName: c.JSBNG__find(\"strong.service-name\").data(\"service-id\"),\n                callbackUrl: this.importCallbackUrl()\n            });\n        }, this.clickAndDismissPrompt = function(a, b) {\n            this.trigger(\"uiPromptbirdDismissPrompt\", {\n                scribeContext: this.scribeContext(),\n                prompt_id: this.$node.data(\"prompt-id\")\n            }), this.$node.remove();\n        }, this.generateClickEvent = function(a, b) {\n            this.trigger(\"uiPromptbirdClick\", {\n                scribeContext: this.scribeContext(),\n                prompt_id: this.$node.data(\"prompt-id\")\n            }), this.$node.hide();\n        }, this.clickPreviewPromotedAccount = function(a, b) {\n            a.preventDefault(), this.trigger(\"uiPromptbirdPreviewPromotedAccount\", {\n                scribeContext: this.scribeContext()\n            });\n        }, this.showDashboardProfilePrompt = function() {\n            this.$node.slideDown(\"fast\"), this.trigger(\"uiShowDashboardProfilePromptbird\", {\n                scribeContext: this.scribeContext()\n            });\n        }, this.maybeInitDashboardProfilePrompt = function() {\n            if (((this.select(\"dashboardProfilePromptSelector\").length === 0))) {\n                return;\n            }\n        ;\n        ;\n            this.JSBNG__on(JSBNG__document, \"uiDidGetRecommendations\", function() {\n                this.trigger(\"uiGotPromptbirdDashboardProfile\"), this.JSBNG__on(JSBNG__document, \"dataDidGetSelfPromotedAccount\", this.showDashboardProfilePrompt);\n            });\n        }, this.scribeContext = function() {\n            return {\n                component: ((\"promptbird_\" + this.$node.data(\"prompt-id\")))\n            };\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                callToActionSelector: this.generateClickEvent,\n                callToActionDismissSelector: this.clickAndDismissPrompt,\n                dismissSelector: this.dismissPrompt,\n                delayedDismissSelector: this.delayedDismissPrompt,\n                setLanguageSelector: this.setLanguage,\n                oneClickImportSelector: this.doOneClickImport,\n                inlineImportButtonSelector: this.doInlineContactImport,\n                previewPromotedAccountSelector: this.clickPreviewPromotedAccount,\n                promptMentionTweetComposeSelector: this.doPromptMentionTweetCompose,\n                followPromptCallToActionSelector: this.generateClickEvent,\n                deviceFollowSelector: this.doDeviceFollow\n            }), this.JSBNG__on(JSBNG__document, \"uiPromptbirdInviteContactsSuccess\", this.dismissPrompt), this.maybeInitDashboardProfilePrompt();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withInviteContacts = require(\"app/ui/promptbird/with_invite_contacts\"), tweetDialog = require(\"app/ui/tweet_dialog\");\n    module.exports = defineComponent(promptbirdPrompt, withInviteContacts);\n});\ndefine(\"app/utils/oauth_popup\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function(a) {\n        var b = a.url, c = ((((b.indexOf(\"?\") == -1)) ? \"?\" : \"&\"));\n        ((a.callbackUrl ? b += ((((c + \"callback_hash=\")) + encodeURIComponent(a.callbackUrl))) : ((a.triggerEvent && (b += ((c + \"trigger_event=true\")))))));\n        var d = $(window), e = ((((window.JSBNG__screenY || window.JSBNG__screenTop)) || 0)), f = ((((window.JSBNG__screenX || window.JSBNG__screenLeft)) || 0)), g = ((((((d.height() - 500)) / 2)) + e)), h = ((((((d.width() - 500)) / 2)) + f)), a = {\n            width: ((a.width ? a.width : 500)),\n            height: ((a.height ? a.height : 500)),\n            JSBNG__top: g,\n            left: h,\n            JSBNG__toolbar: \"no\",\n            JSBNG__location: \"yes\"\n        }, i = $.param(a).replace(/&/g, \",\");\n        window.open(b, \"twitter_oauth\", i).JSBNG__focus();\n    };\n});\ndefine(\"app/data/promptbird\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/utils/oauth_popup\",], function(module, require, exports) {\n    function promptbirdData() {\n        this.languageChanged = function(a, b) {\n            window.JSBNG__location.reload();\n        }, this.changeLanguage = function(a, b) {\n            var c = {\n                lang: b.lang\n            };\n            this.post({\n                url: \"/settings/account/set_language\",\n                eventData: c,\n                data: c,\n                success: \"dataPromptbirdLanguageChangeSuccess\",\n                error: \"dataPromptbirdLanguageChangeFailure\"\n            });\n        }, this.dismissPrompt = function(a, b) {\n            var c = {\n                prompt_id: b.prompt_id\n            };\n            this.post({\n                url: \"/users/dismiss_prompt\",\n                headers: {\n                    \"X-PHX\": !0\n                },\n                eventData: c,\n                data: c,\n                success: \"dataPromptbirdPromptDismissed\",\n                error: \"dataPromptbirdPromptDismissalError\"\n            });\n        }, this.clickPrompt = function(a, b) {\n            var c = {\n                prompt_id: b.prompt_id\n            };\n            this.post({\n                url: \"/users/click_prompt\",\n                headers: {\n                    \"X-PHX\": !0\n                },\n                eventData: c,\n                data: c,\n                success: \"dataPromptbirdPromptClicked\",\n                error: \"dataPromptbirdPromptClickError\"\n            });\n        }, this.doOneClickImport = function(a, b) {\n            oauthPopup(b), this.trigger(\"dataPromptbirdDidOneClickImport\", b);\n        }, this.doInlineContactImport = function(a, b) {\n            var c = b.url;\n            ((c && ((b.popup ? oauthPopup({\n                url: c,\n                width: b.width,\n                height: b.height,\n                callbackUrl: b.callbackUrl\n            }) : window.open(c, \"_blank\").JSBNG__focus()))));\n        }, this.onPromptMentionTweetCompose = function(a, b) {\n            this.trigger(\"uiOpenTweetDialog\", b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiPromptbirdSetLanguage\", this.changeLanguage), this.JSBNG__on(\"uiPromptbirdDismissPrompt\", this.dismissPrompt), this.JSBNG__on(\"uiPromptbirdClick\", this.clickPrompt), this.JSBNG__on(\"uiPromptbirdDoOneClickImport\", this.doOneClickImport), this.JSBNG__on(\"dataPromptbirdLanguageChangeSuccess\", this.languageChanged), this.JSBNG__on(\"uiPromptbirdDoInlineContactImport\", this.doInlineContactImport), this.JSBNG__on(\"uiPromptMentionTweetCompose\", this.onPromptMentionTweetCompose);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), oauthPopup = require(\"app/utils/oauth_popup\");\n    module.exports = defineComponent(promptbirdData, withData);\n});\ndefine(\"app/data/promptbird_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function promptbirdScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiPromptbirdClick\", {\n                action: \"click\"\n            }), this.scribeOnEvent(\"uiPromptbirdPreviewPromotedAccount\", {\n                action: \"preview\"\n            }), this.scribeOnEvent(\"uiPromptbirdDismissPrompt\", {\n                action: \"dismiss\"\n            }), this.scribeOnEvent(\"uiShowDashboardProfilePromptbird\", {\n                action: \"show\"\n            }), this.scribeOnEvent(\"uiPromptMentionTweetCompose\", {\n                action: \"show\"\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(promptbirdScribe, withScribe);\n});\ndefine(\"app/ui/with_select_all\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withSelectAll() {\n        this.defaultAttrs({\n        }), this.checkboxChanged = function(a) {\n            var b = this.select(\"checkboxSelector\"), c = this.select(\"checkedCheckboxSelector\");\n            this.select(\"actionButtonSelector\").attr(\"disabled\", ((c.length == 0))), this.select(\"selectAllSelector\").attr(\"checked\", ((c.length == b.length))), this.trigger(\"uiListSelectionChanged\");\n        }, this.selectAllChanged = function() {\n            var a = this.select(\"selectAllSelector\");\n            this.select(\"checkboxSelector\").attr(\"checked\", a.is(\":checked\")), this.select(\"actionButtonSelector\").attr(\"disabled\", !a.is(\":checked\")), this.trigger(\"uiListSelectionChanged\");\n        }, this.after(\"initialize\", function() {\n            this.attr.checkedCheckboxSelector = ((this.attr.checkboxSelector + \":checked\")), this.JSBNG__on(\"change\", {\n                checkboxSelector: this.checkboxChanged,\n                selectAllSelector: this.selectAllChanged\n            });\n        });\n    };\n;\n    module.exports = withSelectAll;\n});\ndefine(\"app/ui/who_to_follow/with_invite_messages\", [\"module\",\"require\",\"exports\",\"core/i18n\",], function(module, require, exports) {\n    function withInviteMessages() {\n        this.defaultAttrs({\n            showMessageOnSuccess: !0\n        }), this.showSuccessMessage = function(a, b) {\n            var c = this.select(\"actionButtonSelector\"), d = c.data(\"done-href\");\n            if (d) {\n                this.trigger(\"uiNavigate\", {\n                    href: d\n                });\n                return;\n            }\n        ;\n        ;\n            var e, f;\n            ((b ? (e = b.invited.length, f = _(\"We let {{count}} of your contacts know about Twitter.\", {\n                count: e\n            })) : (e = -1, f = _(\"We let your contacts know about Twitter.\")))), ((this.attr.showMessageOnSuccess && this.trigger(\"uiShowMessage\", {\n                message: f\n            }))), this.trigger(\"uiInviteFinished\", {\n                count: e\n            });\n        }, this.showFailureMessage = function(a, b) {\n            var c = ((((b.errors && b.errors[0])) && b.errors[0].code));\n            switch (c) {\n              case 47:\n                this.trigger(\"uiShowError\", {\n                    message: _(\"We couldn't send invitations to any of those addresses.\")\n                });\n                break;\n              case 37:\n                this.trigger(\"uiShowError\", {\n                    message: _(\"There was an error emailing your contacts. Please try again later.\")\n                });\n                break;\n              default:\n                this.showSuccessMessage(a);\n            };\n        ;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataInviteContactsSuccess\", this.showSuccessMessage), this.JSBNG__on(JSBNG__document, \"dataInviteContactsFailure\", this.showFailureMessage);\n        });\n    };\n;\n    var _ = require(\"core/i18n\");\n    module.exports = withInviteMessages;\n});\ndefine(\"app/ui/who_to_follow/with_invite_preview\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withInvitePreview() {\n        this.defaultAttrs({\n            previewInviteSelector: \".js-preview-invite\"\n        }), this.previewInvite = function(a, b) {\n            a.preventDefault(), window.open(\"/invitations/email_preview\", \"invitation_email_preview\", \"height=550,width=740\"), this.trigger(\"uiPreviewInviteOpened\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                previewInviteSelector: this.previewInvite\n            });\n        });\n    };\n;\n    module.exports = withInvitePreview;\n});\ndefine(\"app/ui/who_to_follow/with_unmatched_contacts\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_select_all\",\"app/ui/who_to_follow/with_invite_messages\",\"app/ui/who_to_follow/with_invite_preview\",], function(module, require, exports) {\n    function withUnmatchedContacts() {\n        compose.mixin(this, [withSelectAll,withInviteMessages,withInvitePreview,]), this.defaultAttrs({\n            checkboxSelector: \".contact-checkbox\",\n            selectAllSelector: \".select-all-contacts\",\n            actionButtonSelector: \".js-invite\"\n        }), this.inviteChecked = function() {\n            var a = [], b = this.select(\"checkedCheckboxSelector\");\n            b.each(function() {\n                var b = $(this), c = b.closest(\"label\").JSBNG__find(\".contact-item-name\").text(), d = {\n                    email: b.val()\n                };\n                ((((c != d.email)) && (d.JSBNG__name = c))), a.push(d);\n            }), this.select(\"actionButtonSelector\").attr(\"disabled\", !0), this.trigger(\"uiInviteContacts\", {\n                invitable: this.select(\"checkboxSelector\").length,\n                contacts: a,\n                scribeContext: {\n                    component: this.attr.inviteContactsComponent\n                }\n            });\n        }, this.reenableActionButton = function() {\n            this.select(\"actionButtonSelector\").attr(\"disabled\", !1);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"change\", {\n                checkboxSelector: this.checkboxChanged,\n                selectAllSelector: this.selectAllChanged\n            }), this.JSBNG__on(\"click\", {\n                actionButtonSelector: this.inviteChecked\n            }), this.JSBNG__on(JSBNG__document, \"dataInviteContactsSuccess dataInviteContactsFailure\", this.reenableActionButton);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withSelectAll = require(\"app/ui/with_select_all\"), withInviteMessages = require(\"app/ui/who_to_follow/with_invite_messages\"), withInvitePreview = require(\"app/ui/who_to_follow/with_invite_preview\");\n    module.exports = withUnmatchedContacts;\n});\ndefine(\"app/ui/dialogs/promptbird_invite_contacts_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",\"app/ui/who_to_follow/with_unmatched_contacts\",], function(module, require, exports) {\n    function promptbirdInviteContactsDialog() {\n        this.defaultAttrs({\n            contactSelector: \".contact-item\",\n            inviteContactsComponent: \"invite_contacts_promptbird\"\n        }), this.contactCheckboxChanged = function(a) {\n            var b = $(a.target);\n            b.closest(this.attr.contactSelector).toggleClass(\"selected\", b.is(\":checked\"));\n        }, this.contactSelectAllChanged = function() {\n            var a = this.select(\"selectAllSelector\");\n            this.select(\"contactSelector\").toggleClass(\"selected\", a.is(\":checked\"));\n        }, this.inviteSuccess = function(a, b) {\n            this.close(), this.trigger(\"uiPromptbirdInviteContactsSuccess\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"change\", {\n                checkboxSelector: this.contactCheckboxChanged,\n                selectAllSelector: this.contactSelectAllChanged\n            }), this.JSBNG__on(JSBNG__document, \"uiPromptbirdShowInviteContactsDialog\", this.open), this.JSBNG__on(JSBNG__document, \"uiInviteFinished\", this.inviteSuccess), this.JSBNG__on(JSBNG__document, \"dataInviteContactsFailure\", this.close);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), withUnmatchedContacts = require(\"app/ui/who_to_follow/with_unmatched_contacts\");\n    module.exports = defineComponent(promptbirdInviteContactsDialog, withDialog, withPosition, withUnmatchedContacts);\n});\ndefine(\"app/data/contact_import\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function contactImportData() {\n        this.contactImportStatus = function(a, b) {\n            this.get({\n                url: \"/who_to_follow/import/status\",\n                data: {\n                },\n                eventData: b,\n                success: \"dataContactImportStatusSuccess\",\n                error: \"dataContactImportStatusFailure\"\n            });\n        }, this.contactImportFollow = function(a, b) {\n            var c = {\n                user_ids: ((b.includeIds || [])),\n                unchecked_user_ids: ((b.excludeIds || []))\n            };\n            this.post({\n                url: \"/find_sources/contacts/follow_some.json\",\n                data: c,\n                eventData: b,\n                headers: {\n                    \"X-PHX\": !0\n                },\n                success: this.handleContactImportSuccess.bind(this),\n                error: \"dataContactImportFollowFailure\"\n            });\n        }, this.handleContactImportSuccess = function(a) {\n            a.followed_ids.forEach(function(a) {\n                this.trigger(\"dataBulkFollowStateChange\", {\n                    userId: a,\n                    newState: \"following\"\n                });\n            }.bind(this)), a.requested_ids.forEach(function(a) {\n                this.trigger(\"dataBulkFollowStateChange\", {\n                    userId: a,\n                    newState: \"pending\"\n                });\n            }.bind(this)), this.trigger(\"dataContactImportFollowSuccess\", a);\n        }, this.inviteContacts = function(a, b) {\n            var c = b.contacts.map(function(a) {\n                return ((a.JSBNG__name ? ((((((((\"\\\"\" + a.JSBNG__name.replace(/\"/g, \"\\\\\\\"\"))) + \"\\\" \\u003C\")) + a.email)) + \"\\u003E\")) : a.email));\n            });\n            this.post({\n                url: \"/users/send_invites_by_email\",\n                data: {\n                    addresses: c.join(\",\"),\n                    source: \"contact_import\"\n                },\n                eventData: b,\n                success: \"dataInviteContactsSuccess\",\n                error: \"dataInviteContactsFailure\"\n            });\n        }, this.wipeAddressbook = function(a, b) {\n            this.post({\n                url: \"/users/wipe_addressbook.json\",\n                headers: {\n                    \"X-PHX\": !0\n                },\n                data: {\n                },\n                eventData: b,\n                success: \"dataWipeAddressbookSuccess\",\n                error: \"dataWipeAddressbookFailure\"\n            });\n        }, this.unmatchedContacts = function(a, b) {\n            this.get({\n                url: \"/welcome/unmatched_contacts\",\n                data: {\n                },\n                eventData: b,\n                success: \"dataUnmatchedContactsSuccess\",\n                error: \"dataUnmatchedContactsFailure\"\n            });\n        }, this.getMatchesModule = function(a, b) {\n            function c(a) {\n                ((a.html && this.trigger(\"dataContactImportMatchesSuccess\", a)));\n            };\n        ;\n            this.get({\n                url: \"/who_to_follow/matches\",\n                data: {\n                },\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataContactImportMatchesFailure\"\n            });\n        }, this.inviteModule = function(a, b) {\n            function c(a) {\n                ((a.html && this.trigger(\"dataInviteModuleSuccess\", a)));\n            };\n        ;\n            this.get({\n                url: \"/who_to_follow/invite\",\n                data: {\n                },\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataInviteModuleFailure\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiWantsContactImportStatus\", this.contactImportStatus), this.JSBNG__on(JSBNG__document, \"uiContactImportFollow\", this.contactImportFollow), this.JSBNG__on(JSBNG__document, \"uiWantsUnmatchedContacts\", this.unmatchedContacts), this.JSBNG__on(JSBNG__document, \"uiInviteContacts\", this.inviteContacts), this.JSBNG__on(JSBNG__document, \"uiWantsAddressbookWiped\", this.wipeAddressbook), this.JSBNG__on(JSBNG__document, \"uiWantsContactImportMatches\", this.getMatchesModule), this.JSBNG__on(JSBNG__document, \"uiWantsInviteModule\", this.inviteModule);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(contactImportData, withData);\n});\ndefine(\"app/data/contact_import_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function contactImportScribe() {\n        this.scribeServiceLaunch = function(a, b) {\n            this.scribe({\n                component: \"import_service_stream\",\n                action: \"launch_service\"\n            }, {\n                query: b.service\n            });\n        }, this.scribePreviewInviteOpened = function(a, b) {\n            this.scribe({\n                component: \"invite_friends\",\n                element: \"preview_invite_link\",\n                action: \"click\"\n            });\n        }, this.scribeFollowSuccess = function(a, b) {\n            this.scribe({\n                component: \"stream_header\",\n                action: \"follow\"\n            }, {\n                item_count: b.followed_ids.length,\n                item_ids: b.followed_ids,\n                event_value: b.followed_ids.length,\n                event_info: \"follow_all\"\n            });\n        }, this.scribeInvitationSuccess = function(a, b) {\n            var c = b.sourceEventData, d = b.sourceEventData.scribeContext;\n            ((((c.invitable !== undefined)) && this.scribe(utils.merge({\n            }, d, {\n                action: \"invitable\"\n            }), {\n                item_count: c.invitable\n            }))), this.scribe(utils.merge({\n            }, d, {\n                action: \"invited\"\n            }), {\n                item_count: c.contacts.length,\n                event_value: c.contacts.length\n            });\n        }, this.scribeInvitationFailure = function(a, b) {\n            var c = b.sourceEventData, d = b.sourceEventData.scribeContext, e = ((((b.errors && b.errors[0])) && b.errors[0].code));\n            this.scribe(utils.merge({\n            }, d, {\n                action: \"error\"\n            }), {\n                item_count: c.contacts.length,\n                status_code: e\n            });\n        }, this.scribeLinkClick = function(a, b) {\n            var c = a.target.className;\n            ((((c.indexOf(\"find-friends-btn\") != -1)) && this.scribe({\n                component: \"empty_timeline\",\n                element: \"find_friends_link\",\n                action: \"click\"\n            })));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiImportServiceLaunched\", this.scribeServiceLaunch), this.JSBNG__on(\"uiPreviewInviteOpened\", this.scribePreviewInviteOpened), this.JSBNG__on(\"dataContactImportFollowSuccess\", this.scribeFollowSuccess), this.JSBNG__on(\"dataInviteContactsSuccess\", this.scribeInvitationSuccess), this.JSBNG__on(\"dataInviteContactsFailure\", this.scribeInvitationFailure), this.JSBNG__on(\"click\", this.scribeLinkClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(contactImportScribe, withScribe);\n});\ndefine(\"app/ui/with_import_services\", [\"module\",\"require\",\"exports\",\"core/i18n\",\"app/utils/oauth_popup\",], function(module, require, exports) {\n    function withImportServices() {\n        this.launchService = function(a) {\n            var b = $(a.target).closest(this.attr.launchServiceSelector);\n            this.oauthPopup({\n                url: b.data(\"url\"),\n                triggerEvent: !0,\n                width: b.data(\"width\"),\n                height: b.data(\"height\")\n            }), this.trigger(\"uiImportServiceLaunched\", {\n                service: b.data(\"service\")\n            });\n        }, this.importDeniedFailure = function() {\n            this.trigger(\"uiShowError\", {\n                message: _(\"You denied Twitter's access to your contact information.\")\n            });\n        }, this.importMissingFailure = function() {\n            this.trigger(\"uiShowError\", {\n                message: _(\"An error occurred validating your credentials.\")\n            });\n        }, this.after(\"initialize\", function() {\n            this.oauthPopup = oauthPopup, this.JSBNG__on(JSBNG__document, \"uiOauthImportDenied\", this.importDeniedFailure), this.JSBNG__on(JSBNG__document, \"uiOauthImportMissing\", this.importMissingFailure), this.JSBNG__on(\"click\", {\n                launchServiceSelector: this.launchService\n            });\n        });\n    };\n;\n    var _ = require(\"core/i18n\"), oauthPopup = require(\"app/utils/oauth_popup\");\n    module.exports = withImportServices;\n});\ndefine(\"app/ui/who_to_follow/import_services\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_import_services\",], function(module, require, exports) {\n    function importServices() {\n        this.defaultAttrs({\n            launchServiceSelector: \".js-service-row\",\n            matchesHref: \"/who_to_follow/matches\",\n            redirectOnSuccess: !0\n        }), this.importSuccess = function() {\n            this.trigger(\"uiOpenImportLoadingDialog\"), this.startPolling();\n        }, this.dialogCancelled = function() {\n            this.stopPolling();\n        }, this.startPolling = function() {\n            this.pollingCount = 0, this.interval = window.JSBNG__setInterval(this.checkForContacts.bind(this), 3000);\n        }, this.stopPolling = function() {\n            ((this.interval && (window.JSBNG__clearInterval(this.interval), this.interval = null))), this.trigger(\"uiCloseDialog\");\n        }, this.checkForContacts = function() {\n            ((((this.pollingCount++ > 15)) ? (this.trigger(\"uiShowError\", {\n                message: _(\"Loading seems to be taking a while. Please wait a moment and try again.\")\n            }), this.stopPolling()) : this.trigger(\"uiWantsContactImportStatus\")));\n        }, this.hasStatus = function(a, b) {\n            ((b.done && (this.stopPolling(), ((b.error ? this.trigger(\"uiShowError\", {\n                message: b.message\n            }) : ((this.attr.redirectOnSuccess ? this.trigger(\"uiNavigate\", {\n                href: this.attr.matchesHref\n            }) : this.trigger(\"uiWantsContactImportMatches\"))))))));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiOauthImportSuccess\", this.importSuccess), this.JSBNG__on(JSBNG__document, \"uiImportLoadingDialogCancelled\", this.dialogCancelled), this.JSBNG__on(JSBNG__document, \"dataContactImportStatusSuccess\", this.hasStatus), ((a.hasUserCompletionModule && (this.attr.matchesHref += \"?from_num=1\")));\n        }), this.after(\"teardown\", function() {\n            this.stopPolling();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withImportServices = require(\"app/ui/with_import_services\");\n    module.exports = defineComponent(importServices, withImportServices);\n});\ndefine(\"app/ui/who_to_follow/import_loading_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function importLoadingDialog() {\n        this.defaultAttrs({\n            closeSelector: \".modal-close\"\n        }), this.after(\"afterClose\", function() {\n            this.trigger(\"uiImportLoadingDialogCancelled\");\n        }), this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiOpenImportLoadingDialog\", this.open);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\");\n    module.exports = defineComponent(importLoadingDialog, withDialog, withPosition);\n});\ndefine(\"app/ui/dashboard_tweetbox\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",], function(module, require, exports) {\n    function dashboardTweetbox() {\n        this.defaultAttrs({\n            hasDefaultText: !0,\n            tweetFormSelector: \".tweet-form\",\n            defaultTextFrom: \"data-screen-name\",\n            prependText: \"@\"\n        }), this.openTweetBox = function() {\n            var a = this.attr.prependText, b = ((this.$node.attr(this.attr.defaultTextFrom) || \"\")), c = this.select(\"tweetFormSelector\");\n            this.trigger(c, \"uiInitTweetbox\", utils.merge({\n                draftTweetId: this.attr.draftTweetId,\n                condensable: !0,\n                condensedText: ((a + b)),\n                defaultText: ((this.attr.hasDefaultText ? ((((a + b)) + \" \")) : \"\"))\n            }, {\n                eventData: this.attr.eventData\n            }));\n        }, this.after(\"initialize\", function() {\n            this.openTweetBox();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(dashboardTweetbox);\n});\ndefine(\"app/utils/boomerang\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/clock\",\"app/data/scribe_transport\",], function(module, require, exports) {\n    function Boomerang() {\n        this.initializeBoomerang = function() {\n            var a = {\n                allow_ssl: !0,\n                autorun: !1,\n                user_ip: this.attr.ip,\n                BW: {\n                    base_url: this.attr.baseUrl,\n                    cookie: ((this.attr.force ? null : \"BA\"))\n                }\n            }, b = function(a) {\n                ((((((a && a.bw)) || this.attr.inTest)) && this.scribeBoomerangResults(a)));\n                try {\n                    delete window.BOOMR;\n                } catch (b) {\n                    window.BOOMR = undefined;\n                };\n            ;\n            }.bind(this);\n            using(\"app/utils/boomerang_lib\", function() {\n                delete BOOMR.plugins.RT, BOOMR.init(a), BOOMR.subscribe(\"before_beacon\", b), clock.setTimeoutEvent(\"boomerangStart\", 10000);\n            });\n        }, this.scribeBoomerangResults = function(a) {\n            var b = parseInt(((a.bw / 1024)), 10), c = parseInt(((((a.bw_err * 100)) / a.bw)), 10), d = parseInt(((((a.lat_err * 100)) / a.lat)), 10);\n            scribeTransport.send({\n                event_name: \"measurement\",\n                load_time_ms: a.t_done,\n                bandwidth_kbytes: b,\n                bandwidth_error_percent: c,\n                latency_ms: a.lat,\n                latency_error_percent: d,\n                product: \"webclient\",\n                base_url: this.attr.baseUrl\n            }, \"boomerang\"), ((this.attr.force && this.trigger(\"uiShowError\", {\n                message: ((((((((((((((\"Bandwidth: \" + b)) + \" KB/s &plusmn; \")) + c)) + \"%\\u003Cbr /\\u003ELatency: \")) + a.lat)) + \" ms &plusmn; \")) + a.lat_err))\n            })));\n        }, this.startBoomerang = function() {\n            BOOMR.page_ready();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(window, \"load\", this.initializeBoomerang), this.JSBNG__on(\"boomerangStart\", this.startBoomerang);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), clock = require(\"core/clock\"), scribeTransport = require(\"app/data/scribe_transport\");\n    module.exports = defineComponent(Boomerang);\n});\ndefine(\"app/ui/profile_stats\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_profile_stats\",], function(module, require, exports) {\n    var defineComponent = require(\"core/component\"), withProfileStats = require(\"app/ui/with_profile_stats\");\n    module.exports = defineComponent(withProfileStats);\n});\ndefine(\"app/pages/home\", [\"module\",\"require\",\"exports\",\"app/boot/app\",\"app/boot/trends\",\"app/boot/tweet_timeline\",\"app/boot/user_completion_module\",\"app/ui/who_to_follow/who_to_follow_dashboard\",\"app/ui/who_to_follow/who_to_follow_timeline\",\"app/data/who_to_follow\",\"app/data/who_to_follow_scribe\",\"app/ui/profile/recent_connections_module\",\"app/ui/promptbird\",\"app/data/promptbird\",\"app/data/promptbird_scribe\",\"app/ui/dialogs/promptbird_invite_contacts_dialog\",\"app/data/contact_import\",\"app/data/contact_import_scribe\",\"app/data/contact_import\",\"app/ui/who_to_follow/import_services\",\"app/ui/who_to_follow/import_loading_dialog\",\"app/ui/dashboard_tweetbox\",\"app/utils/boomerang\",\"core/utils\",\"core/i18n\",\"app/ui/profile_stats\",], function(module, require, exports) {\n    var bootApp = require(\"app/boot/app\"), trendsBoot = require(\"app/boot/trends\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\"), userCompletionModuleBoot = require(\"app/boot/user_completion_module\"), WhoToFollowDashboard = require(\"app/ui/who_to_follow/who_to_follow_dashboard\"), WhoToFollowTimeline = require(\"app/ui/who_to_follow/who_to_follow_timeline\"), WhoToFollowData = require(\"app/data/who_to_follow\"), WhoToFollowScribe = require(\"app/data/who_to_follow_scribe\"), RecentConnectionsModule = require(\"app/ui/profile/recent_connections_module\"), PromptbirdUI = require(\"app/ui/promptbird\"), PromptbirdData = require(\"app/data/promptbird\"), PromptbirdScribe = require(\"app/data/promptbird_scribe\"), PromptbirdInviteContactsDialog = require(\"app/ui/dialogs/promptbird_invite_contacts_dialog\"), ContactImport = require(\"app/data/contact_import\"), ContactImportScribe = require(\"app/data/contact_import_scribe\"), ContactImportData = require(\"app/data/contact_import\"), ImportServices = require(\"app/ui/who_to_follow/import_services\"), ImportLoadingDialog = require(\"app/ui/who_to_follow/import_loading_dialog\"), DashboardTweetbox = require(\"app/ui/dashboard_tweetbox\"), Boomerang = require(\"app/utils/boomerang\"), utils = require(\"core/utils\"), _ = require(\"core/i18n\"), ProfileStats = require(\"app/ui/profile_stats\");\n    module.exports = function(a) {\n        bootApp(a), trendsBoot(a), tweetTimelineBoot(utils.merge(a, {\n            preservedScrollEnabled: !0\n        }), a.timeline_url, \"tweet\", \"tweet\"), userCompletionModuleBoot(a);\n        var b = utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"user_recommendations\"\n                }\n            }\n        }), c = \".promptbird\", d = utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    section: \"JSBNG__home\"\n                }\n            }\n        });\n        PromptbirdData.attachTo(JSBNG__document, d), PromptbirdUI.attachTo(c, d), PromptbirdScribe.attachTo(c, d);\n        var e = $(c).data(\"prompt-id\");\n        ((((((((e === 46)) || ((e === 49)))) || ((e === 50)))) ? (ContactImportData.attachTo(JSBNG__document), ContactImportScribe.attachTo(JSBNG__document), ImportServices.attachTo(c), ImportLoadingDialog.attachTo(\"#import-loading-dialog\")) : ((((e === 223)) && (PromptbirdInviteContactsDialog.attachTo(\"#promptbird-invite-contacts-dialog\", d), ContactImport.attachTo(JSBNG__document, d), ContactImportScribe.attachTo(JSBNG__document, d)))))), WhoToFollowDashboard.attachTo(\".dashboard .js-wtf-module\", b), WhoToFollowScribe.attachTo(\".dashboard .js-wtf-module\", b), ((a.emptyTimelineOptions.emptyTimelineModule && WhoToFollowTimeline.attachTo(\"#empty-timeline-recommendations\", b))), WhoToFollowScribe.attachTo(\"#empty-timeline-recommendations\", b), WhoToFollowData.attachTo(JSBNG__document, b), RecentConnectionsModule.attachTo(\".dashboard .recent-followers-module\", a, {\n            eventData: {\n                scribeContext: {\n                    component: \"recent_followers\"\n                }\n            }\n        }), DashboardTweetbox.attachTo(\".home-tweet-box\", {\n            draftTweetId: \"JSBNG__home\",\n            prependText: _(\"Compose new Tweet...\"),\n            hasDefaultText: !1,\n            eventData: {\n                scribeContext: {\n                    component: \"tweet_box\"\n                }\n            }\n        }), ProfileStats.attachTo(\".dashboard .mini-profile\"), ((a.boomr && Boomerang.attachTo(JSBNG__document, a.boomr)));\n    };\n});\ndefine(\"app/boot/wtf_module\", [\"module\",\"require\",\"exports\",\"app/ui/who_to_follow/who_to_follow_dashboard\",\"app/data/who_to_follow\",\"app/data/who_to_follow_scribe\",\"core/utils\",], function(module, require, exports) {\n    var WhoToFollowDashboard = require(\"app/ui/who_to_follow/who_to_follow_dashboard\"), WhoToFollowData = require(\"app/data/who_to_follow\"), WhoToFollowScribe = require(\"app/data/who_to_follow_scribe\"), utils = require(\"core/utils\");\n    module.exports = function(b) {\n        var c = utils.merge(b, {\n            eventData: {\n                scribeContext: {\n                    component: \"user_recommendations\"\n                }\n            }\n        });\n        WhoToFollowDashboard.attachTo(\".dashboard .js-wtf-module\", c), WhoToFollowData.attachTo(JSBNG__document, c), WhoToFollowScribe.attachTo(\".dashboard .js-wtf-module\", c);\n    };\n});\ndefine(\"app/data/who_to_tweet\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function whoToTweetData() {\n        this.whoToTweetModule = function(a, b) {\n            function c(a) {\n                ((a.html && this.trigger(\"dataWhoToTweetModuleSuccess\", a)));\n            };\n        ;\n            this.get({\n                url: ((((\"/\" + b.screen_name)) + \"/following/users\")),\n                data: {\n                    who_to_tweet: !0\n                },\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataInviteModuleFailure\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiWantsWhoToTweetModule\", this.whoToTweetModule);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(whoToTweetData, withData);\n});\ndefine(\"app/boot/connect\", [\"module\",\"require\",\"exports\",\"app/boot/app\",\"app/boot/trends\",\"app/boot/wtf_module\",\"app/data/contact_import\",\"app/data/contact_import_scribe\",\"app/data/who_to_tweet\",], function(module, require, exports) {\n    function initialize(a) {\n        bootApp(a), whoToFollowModule(a), ContactImportData.attachTo(JSBNG__document, a), ContactImportScribe.attachTo(JSBNG__document, a), WhoToTweetData.attachTo(JSBNG__document, a), bootTrends(a);\n    };\n;\n    var bootApp = require(\"app/boot/app\"), bootTrends = require(\"app/boot/trends\"), whoToFollowModule = require(\"app/boot/wtf_module\"), ContactImportData = require(\"app/data/contact_import\"), ContactImportScribe = require(\"app/data/contact_import_scribe\"), WhoToTweetData = require(\"app/data/who_to_tweet\"), wtfSelector = \".dashboard .js-wtf-module\", timelineSelector = \"#timeline\";\n    module.exports = initialize;\n});\ndefine(\"app/ui/who_to_follow/with_list_resizing\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/utils\",\"app/ui/with_scrollbar_width\",], function(module, require, exports) {\n    function withListResizing() {\n        compose.mixin(this, [withScrollbarWidth,]), this.defaultAttrs({\n            backToTopSelector: \".back-to-top\",\n            listSelector: \".scrolling-user-list\",\n            listFooterSelector: \".user-list-footer\",\n            minHeight: 300\n        }), this.scrollToTop = function(a) {\n            a.preventDefault(), a.stopImmediatePropagation(), this.select(\"listSelector\").animate({\n                scrollTop: 0\n            });\n        }, this.initUi = function() {\n            this.calculateScrollbarWidth();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.initUi), this.JSBNG__on(\"click\", {\n                backToTopSelector: this.scrollToTop\n            });\n        });\n    };\n;\n    var compose = require(\"core/compose\"), utils = require(\"core/utils\"), withScrollbarWidth = require(\"app/ui/with_scrollbar_width\");\n    module.exports = withListResizing;\n});\ndefine(\"app/ui/who_to_follow/matched_contacts_list\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_select_all\",\"app/ui/who_to_follow/with_list_resizing\",], function(module, require, exports) {\n    function matchedContactsList() {\n        this.defaultAttrs({\n            selectedCounterSelector: \".js-follow-count\",\n            listItemSelector: \".listview-find-friends-result\",\n            checkboxSelector: \".js-action-checkbox\",\n            selectAllSelector: \"#select_all_matches\",\n            actionButtonSelector: \".js-follow-all\"\n        }), this.updateSelection = function() {\n            var a = this;\n            this.select(\"checkboxSelector\").each(function() {\n                $(this).closest(a.attr.listItemSelector).toggleClass(\"selected\", this.checked);\n            });\n            var b = this.select(\"selectAllSelector\");\n            ((b.is(\":checked\") && (this.invisibleSelected = !0)));\n            var c = b.val(), d = this.select(\"checkboxSelector\").length, e = this.select(\"checkedCheckboxSelector\").length, f = ((d - e)), g;\n            ((this.invisibleSelected ? g = ((c - f)) : g = e)), this.select(\"selectedCounterSelector\").text(g), this.select(\"actionButtonSelector\").attr(\"disabled\", ((g == 0)));\n        }, this.maybeDeselectInvisible = function(a, b) {\n            this.invisibleSelected = a.target.checked;\n        }, this.maybeCheckNewItem = function(a) {\n            if (this.invisibleSelected) {\n                var b = $(a.target);\n                b.JSBNG__find(this.attr.listItemSelector).addClass(\"selected\"), b.JSBNG__find(this.attr.checkboxSelector).attr(\"checked\", \"checked\");\n            }\n        ;\n        ;\n        }, this.initSelections = function() {\n            ((this.select(\"selectAllSelector\").is(\":checked\") && (this.select(\"checkboxSelector\").attr(\"checked\", \"checked\"), this.select(\"listItemSelector\").addClass(\"selected\"))));\n        }, this.followAll = function() {\n            var a = this.invisibleSelected, b = {\n                excludeIds: [],\n                includeIds: []\n            };\n            this.select(\"checkboxSelector\").each(function() {\n                var c = this.checked, d = $(this).closest(\"[data-user-id]\").data(\"user-id\");\n                ((((a && !c)) ? b.excludeIds.push(d) : ((((!a && c)) && b.includeIds.push(d)))));\n            }), this.select(\"actionButtonSelector\").addClass(\"loading\").attr(\"disabled\", !0), this.trigger(\"uiContactImportFollow\", b);\n        }, this.removeLoading = function() {\n            this.select(\"actionButtonSelector\").removeClass(\"loading\").attr(\"disabled\", !1);\n        }, this.displaySuccess = function(a, b) {\n            this.removeLoading(), ((this.attr.findFriendsInline ? this.trigger(\"uiWantsWhoToTweetModule\", {\n                screen_name: this.$node.data(\"screen-name\")\n            }) : this.trigger(\"uiNavigate\", {\n                href: ((\"/who_to_follow/invite?followed_count=\" + b.followed_ids.length))\n            })));\n        }, this.displayError = function() {\n            this.removeLoading(), this.trigger(\"uiShowError\", {\n                message: _(\"There was an error following your contacts.\")\n            });\n        }, this.displayMatches = function(a, b) {\n            if (((!b || !b.html))) {\n                return;\n            }\n        ;\n        ;\n            this.$node.html(b.html), this.initSelections();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.initSelections), this.JSBNG__on(\"uiListSelectionChanged\", this.updateSelection), this.JSBNG__on(\"change\", {\n                selectAllSelector: this.maybeDeselectInvisible\n            }), this.JSBNG__on(\"uiHasInjectedTimelineItem\", this.maybeCheckNewItem), this.JSBNG__on(JSBNG__document, \"dataContactImportFollowSuccess\", this.displaySuccess), this.JSBNG__on(JSBNG__document, \"dataContactImportFollowFailure\", this.displayError), this.JSBNG__on(JSBNG__document, \"dataContactImportMatchesSuccess\", this.displayMatches), this.JSBNG__on(\"click\", {\n                actionButtonSelector: this.followAll\n            }), this.invisibleSelected = !0;\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withSelectAll = require(\"app/ui/with_select_all\"), withListResizing = require(\"app/ui/who_to_follow/with_list_resizing\");\n    module.exports = defineComponent(matchedContactsList, withSelectAll, withListResizing);\n});\ndefine(\"app/ui/who_to_follow/unmatched_contacts_list\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/who_to_follow/with_list_resizing\",\"app/ui/who_to_follow/with_unmatched_contacts\",], function(module, require, exports) {\n    function unmatchedContactsList() {\n        this.defaultAttrs({\n            selectedCounterSelector: \".js-selected-count\",\n            listItemSelector: \".stream-item\",\n            hideLinkSelector: \".js-hide\"\n        }), this.updateSelection = function() {\n            var a = this;\n            this.select(\"checkboxSelector\").each(function() {\n                $(this).closest(a.attr.listItemSelector).toggleClass(\"selected\", this.checked);\n            });\n            var b = this.select(\"checkedCheckboxSelector\").length;\n            this.select(\"selectedCounterSelector\").text(b), this.select(\"actionButtonSelector\").attr(\"disabled\", ((b == 0)));\n        }, this.redirectToSuggestions = function(a, b) {\n            this.trigger(\"uiNavigate\", {\n                href: ((\"/who_to_follow/suggestions?invited_count=\" + b.count))\n            });\n        }, this.hide = function() {\n            this.$node.hide();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiListSelectionChanged\", this.updateSelection), this.JSBNG__on(\"uiInviteFinished\", this.redirectToSuggestions), this.JSBNG__on(\"click\", {\n                hideLinkSelector: this.hide\n            }), this.attr.showMessageOnSuccess = !1;\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withListResizing = require(\"app/ui/who_to_follow/with_list_resizing\"), withUnmatchedContacts = require(\"app/ui/who_to_follow/with_unmatched_contacts\");\n    module.exports = defineComponent(unmatchedContactsList, withListResizing, withUnmatchedContacts);\n});\ndefine(\"app/ui/who_to_tweet\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/ddg\",\"app/ui/with_user_actions\",], function(module, require, exports) {\n    function whoToTweet() {\n        this.defaultAttrs({\n            tweetToButtonSelector: \".js-tweet-to-btn\"\n        }), this.tweetToUser = function(a, b) {\n            var c = $(a.target).closest(\".user-actions\");\n            this.mentionUser(c);\n        }, this.trackEvent = function(a) {\n            ((((a.type == \"uiTweetSent\")) && ddg.track(\"find_friends_on_empty_connect_635\", \"tweet_sent\")));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiTweetSent\", this.trackEvent), this.JSBNG__on(\"click\", {\n                tweetToButtonSelector: this.tweetToUser\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), ddg = require(\"app/data/ddg\"), withUserActions = require(\"app/ui/with_user_actions\");\n    module.exports = defineComponent(whoToTweet, withUserActions);\n});\ndefine(\"app/ui/with_loading_indicator\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withLoadingIndicator() {\n        this.defaultAttrs({\n            spinnerContainer: \"body\",\n            spinnerClass: \"pushing-state\"\n        }), this.showSpinner = function(a, b) {\n            this.select(\"spinnerContainer\").addClass(this.attr.spinnerClass);\n        }, this.hideSpinner = function(a, b) {\n            this.select(\"spinnerContainer\").removeClass(this.attr.spinnerClass);\n        };\n    };\n;\n    module.exports = withLoadingIndicator;\n});\ndefine(\"app/ui/who_to_follow/find_friends\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/ddg\",\"app/ui/who_to_follow/import_loading_dialog\",\"app/ui/who_to_follow/import_services\",\"app/ui/who_to_follow/matched_contacts_list\",\"app/ui/infinite_scroll_watcher\",\"app/ui/who_to_follow/unmatched_contacts_list\",\"app/ui/who_to_tweet\",\"app/ui/who_to_follow/with_invite_preview\",\"app/ui/with_select_all\",\"app/ui/with_loading_indicator\",], function(module, require, exports) {\n    function findFriends() {\n        this.defaultAttrs({\n            importLoadingDialogSelector: \"#import-loading-dialog\",\n            launchContainerSelector: \".empty-connect\",\n            findFriendsSelector: \".find-friends-container\",\n            findFriendsButtonSelector: \".find-friends-btn\",\n            scrollListSelector: \".scrolling-user-list\",\n            scrollListContentSelector: \".stream\",\n            unmatchedContactsSelector: \".content-main.invite-module\",\n            launchServiceSelector: \".js-launch-service\",\n            inviteLinkSelector: \".matches .skip-link\",\n            skipInvitesLinkSelector: \".invite-module .skip-link\",\n            checkboxSelector: \".contact-checkbox\",\n            selectAllSelector: \".select-all-contacts\",\n            whoToTweetModuleSelector: \"#who-to-tweet\"\n        }), this.showInviteModule = function(a, b) {\n            this.select(\"findFriendsSelector\").html(b.html), UnmatchedContactsList.attachTo(this.attr.unmatchedContactsSelector, {\n                hideLinkSelector: this.attr.skipInvitesLinkSelector\n            }), ddg.track(\"find_friends_on_empty_connect_635\", \"invite_module_view\");\n        }, this.showWhoToTweetModule = function(a, b) {\n            this.select(\"findFriendsSelector\").html(b.html), WhoToTweet.attachTo(this.attr.whoToTweetModuleSelector);\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"dataInviteModuleSuccess\", this.showInviteModule), this.JSBNG__on(JSBNG__document, \"dataWhoToTweetModuleSuccess\", this.showWhoToTweetModule), this.JSBNG__on(JSBNG__document, \"dataContactImportMatchesSuccess dataInviteModuleSuccess dataInviteModuleFailure dataWhoToTweetModuleSuccess dataWhoToTweetModuleFailure\", this.hideSpinner), this.JSBNG__on(JSBNG__document, \"uiWantsContactImportMatches uiWantsInviteModule uiWantsWhoToTweetModule\", this.showSpinner), this.JSBNG__on(\"click\", {\n                inviteLinkSelector: function() {\n                    this.trigger(\"uiWantsInviteModule\"), ddg.track(\"find_friends_on_empty_connect_635\", \"skip_link_click\");\n                },\n                findFriendsButtonSelector: function() {\n                    ddg.track(\"find_friends_on_empty_connect_635\", \"find_friends_click\");\n                }\n            }), ImportLoadingDialog.attachTo(this.attr.importLoadingDialogSelector, a), ImportServices.attachTo(this.attr.launchContainerSelector, {\n                launchServiceSelector: this.attr.launchServiceSelector,\n                redirectOnSuccess: !1\n            }), MatchedContactsList.attachTo(this.attr.findFriendsSelector, utils.merge(a, {\n                findFriendsInline: !0\n            })), InfiniteScrollWatcher.attachTo(this.attr.scrollListSelector, {\n                contentSelector: this.attr.scrollListContentSelector\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), ddg = require(\"app/data/ddg\"), ImportLoadingDialog = require(\"app/ui/who_to_follow/import_loading_dialog\"), ImportServices = require(\"app/ui/who_to_follow/import_services\"), MatchedContactsList = require(\"app/ui/who_to_follow/matched_contacts_list\"), InfiniteScrollWatcher = require(\"app/ui/infinite_scroll_watcher\"), UnmatchedContactsList = require(\"app/ui/who_to_follow/unmatched_contacts_list\"), WhoToTweet = require(\"app/ui/who_to_tweet\"), withInvitePreview = require(\"app/ui/who_to_follow/with_invite_preview\"), withSelectAll = require(\"app/ui/with_select_all\"), withLoadingIndicator = require(\"app/ui/with_loading_indicator\");\n    module.exports = defineComponent(findFriends, withInvitePreview, withSelectAll, withLoadingIndicator);\n});\ndefine(\"app/pages/connect/interactions\", [\"module\",\"require\",\"exports\",\"app/boot/connect\",\"app/boot/tweet_timeline\",\"app/ui/who_to_follow/find_friends\",], function(module, require, exports) {\n    var connectBoot = require(\"app/boot/connect\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\"), FindFriends = require(\"app/ui/who_to_follow/find_friends\");\n    module.exports = function(a) {\n        connectBoot(a), tweetTimelineBoot(a, \"/i/connect/timeline\", \"activity\", \"stream\"), (($(\"body.find_friends_on_empty_connect_635\").length && FindFriends.attachTo(JSBNG__document, a)));\n    };\n});\ndefine(\"app/pages/connect/mentions\", [\"module\",\"require\",\"exports\",\"app/boot/connect\",\"app/boot/tweet_timeline\",], function(module, require, exports) {\n    var connectBoot = require(\"app/boot/connect\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\");\n    module.exports = function(a) {\n        connectBoot(a), tweetTimelineBoot(a, \"/mentions/timeline\", \"tweet\");\n    };\n});\ndefine(\"app/pages/connect/network_activity\", [\"module\",\"require\",\"exports\",\"app/boot/connect\",\"app/boot/tweet_timeline\",], function(module, require, exports) {\n    var connectBoot = require(\"app/boot/connect\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\");\n    module.exports = function(a) {\n        a.containingItemSelector = \".supplement\", a.marginBreaking = !1, connectBoot(a), tweetTimelineBoot(a, \"/activity/timeline\", \"activity\", \"stream\");\n    };\n});\ndefine(\"app/ui/inline_edit\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function inlineEdit() {\n        this.defaultAttrs({\n            editableFieldSelector: \".editable-field\",\n            profileFieldSelector: \".profile-field\",\n            placeholderSelector: \".placeholder\",\n            padding: 20\n        }), this.syncDimensions = function() {\n            var a = this.getDimensions(this.currentText());\n            if (this.isTextArea) {\n                var b = Math.ceil(((a.height / this.lineHeight)));\n                this.$editableField.attr(\"rows\", b);\n            }\n             else this.$editableField.width(((a.width + this.padding)));\n        ;\n        ;\n        }, this.saveOldValues = function() {\n            this.oldTextValue = this.editableFieldValue(), this.oldHtmlValue = this.$profileField.html();\n        }, this.resetProfileField = function() {\n            this.$profileField.html(this.oldHtmlValue);\n        }, this.resetToOldValues = function() {\n            this.$editableField.val(this.oldTextValue).trigger(\"uiInputChanged\"), this.resetProfileField();\n        }, this.syncValue = function() {\n            var a = this.editableFieldValue();\n            ((((this.oldTextValue !== a)) && (this.setProfileField(), this.trigger(\"uiInlineEditSave\", {\n                newValue: a,\n                field: this.$editableField.attr(\"JSBNG__name\")\n            }))));\n        }, this.setProfileField = function() {\n            var a = this.editableFieldValue();\n            ((((this.truncateLength && ((a.length > this.truncateLength)))) && (a = ((a.substr(0, this.truncateLength) + \"\\u2026\"))))), this.$profileField.text(a);\n        }, this.currentText = function() {\n            return ((this.editableFieldValue() || this.getPlaceholderText()));\n        }, this.editableFieldValue = function() {\n            return this.$editableField.val();\n        }, this.addPadding = function() {\n            this.padding = this.attr.padding;\n        }, this.removePadding = function() {\n            this.padding = 0;\n        }, this.getDimensions = function(a) {\n            return ((this.truncateLength && (a = a.substr(0, this.truncateLength)))), ((((this.prevText !== a)) && (this.measureDimensions(a), this.prevText = a))), {\n                width: this.width,\n                height: this.height\n            };\n        }, this.measureDimensions = function(a) {\n            var b = this.$profileField.clone();\n            b.text(a), b.css(\"white-space\", \"pre-wrap\"), this.$profileField.replaceWith(b), this.height = b.height(), this.width = b.width(), b.replaceWith(this.$profileField);\n        }, this.preventNewlineAndLeadingSpace = function(a) {\n            if (((((a.keyCode === 13)) || ((((a.keyCode === 32)) && !this.editableFieldValue()))))) {\n                a.preventDefault(), a.stopImmediatePropagation();\n            }\n        ;\n        ;\n        }, this.getPlaceholderText = function() {\n            return this.$placeholder.text();\n        }, this.after(\"initialize\", function() {\n            this.$editableField = this.select(\"editableFieldSelector\"), this.$profileField = this.select(\"profileFieldSelector\"), this.$placeholder = this.select(\"placeholderSelector\"), this.lineHeight = parseInt(this.$profileField.css(\"line-height\"), 10), this.isTextArea = this.$editableField.is(\"textarea\"), this.truncateLength = parseInt(this.$editableField.attr(\"data-truncate-length\"), 10), this.padding = 0, this.syncDimensions(), this.JSBNG__on(JSBNG__document, \"uiNeedsTextPreview\", this.setProfileField), this.JSBNG__on(JSBNG__document, \"uiEditProfileSaveFields\", this.syncValue), this.JSBNG__on(JSBNG__document, \"uiEditProfileStart\", this.saveOldValues), this.JSBNG__on(JSBNG__document, \"uiEditProfileCancel\", this.resetToOldValues), this.JSBNG__on(JSBNG__document, \"uiEditProfileStart\", this.syncDimensions), this.JSBNG__on(JSBNG__document, \"uiShowProfileEditError\", this.resetProfileField), this.JSBNG__on(this.$editableField, \"keydown\", this.preventNewlineAndLeadingSpace), ((this.isTextArea || (this.JSBNG__on(this.$editableField, \"JSBNG__focus\", this.addPadding), this.JSBNG__on(this.$editableField, \"JSBNG__blur\", this.removePadding)))), this.JSBNG__on(this.$editableField, \"keyup focus blur update paste\", this.syncDimensions);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(inlineEdit);\n});\ndefine(\"app/data/async_profile\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function asyncProfileData() {\n        this.defaultAttrs({\n            noShowError: !0\n        }), this.saveField = function(a, b) {\n            this.fields[b.field] = b.newValue;\n        }, this.clearFields = function() {\n            this.fields = {\n            };\n        }, this.saveFields = function(a, b) {\n            function c(a) {\n                if (((a.error === !0))) {\n                    return d.call(this, a);\n                }\n            ;\n            ;\n                this.trigger(\"dataInlineEditSaveSuccess\", a), this.clearFields();\n            };\n        ;\n            function d(a) {\n                this.trigger(\"dataInlineEditSaveError\", a), this.clearFields();\n            };\n        ;\n            a.preventDefault(), ((((Object.keys(this.fields).length > 0)) ? (this.trigger(\"dataInlineEditSaveStarted\", {\n            }), this.fields.page_context = this.attr.pageName, this.fields.section_context = this.attr.sectionName, this.post({\n                url: \"/i/profiles/update\",\n                data: this.fields,\n                eventData: b,\n                success: c.bind(this),\n                error: d.bind(this)\n            })) : this.trigger(\"dataInlineEditSaveSuccess\")));\n        }, this.after(\"initialize\", function() {\n            this.fields = {\n            }, this.JSBNG__on(\"uiInlineEditSave\", this.saveField), this.JSBNG__on(\"uiEditProfileSave\", this.saveFields);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(asyncProfileData, withData);\n});\ndeferred(\"$lib/jquery_ui.profile.js\", function() {\n    (function($, a) {\n        function b(a, b) {\n            var d = a.nodeName.toLowerCase();\n            if (((\"area\" === d))) {\n                var e = a.parentNode, f = e.JSBNG__name, g;\n                return ((((((!a.href || !f)) || ((e.nodeName.toLowerCase() !== \"map\")))) ? !1 : (g = $(((((\"img[usemap=#\" + f)) + \"]\")))[0], ((!!g && c(g))))));\n            }\n        ;\n        ;\n            return ((((/input|select|textarea|button|object/.test(d) ? !a.disabled : ((((\"a\" == d)) ? ((a.href || b)) : b)))) && c(a)));\n        };\n    ;\n        function c(a) {\n            return !$(a).parents().andSelf().filter(function() {\n                return (((($.curCSS(this, \"visibility\") === \"hidden\")) || $.expr.filters.hidden(this)));\n            }).length;\n        };\n    ;\n        $.ui = (($.ui || {\n        }));\n        if ($.ui.version) {\n            return;\n        }\n    ;\n    ;\n        $.extend($.ui, {\n            version: \"1.8.22\",\n            keyCode: {\n                ALT: 18,\n                BACKSPACE: 8,\n                CAPS_LOCK: 20,\n                COMMA: 188,\n                COMMAND: 91,\n                COMMAND_LEFT: 91,\n                COMMAND_RIGHT: 93,\n                CONTROL: 17,\n                DELETE: 46,\n                DOWN: 40,\n                END: 35,\n                ENTER: 13,\n                ESCAPE: 27,\n                HOME: 36,\n                INSERT: 45,\n                LEFT: 37,\n                MENU: 93,\n                NUMPAD_ADD: 107,\n                NUMPAD_DECIMAL: 110,\n                NUMPAD_DIVIDE: 111,\n                NUMPAD_ENTER: 108,\n                NUMPAD_MULTIPLY: 106,\n                NUMPAD_SUBTRACT: 109,\n                PAGE_DOWN: 34,\n                PAGE_UP: 33,\n                PERIOD: 190,\n                RIGHT: 39,\n                SHIFT: 16,\n                SPACE: 32,\n                TAB: 9,\n                UP: 38,\n                WINDOWS: 91\n            }\n        }), $.fn.extend({\n            propAttr: (($.fn.prop || $.fn.attr)),\n            _focus: $.fn.JSBNG__focus,\n            JSBNG__focus: function(a, b) {\n                return ((((typeof a == \"number\")) ? this.each(function() {\n                    var c = this;\n                    JSBNG__setTimeout(function() {\n                        $(c).JSBNG__focus(), ((b && b.call(c)));\n                    }, a);\n                }) : this._focus.apply(this, arguments)));\n            },\n            scrollParent: function() {\n                var a;\n                return (((((($.browser.msie && /(static|relative)/.test(this.css(\"position\")))) || /absolute/.test(this.css(\"position\")))) ? a = this.parents().filter(function() {\n                    return ((/(relative|absolute|fixed)/.test($.curCSS(this, \"position\", 1)) && /(auto|scroll)/.test((((($.curCSS(this, \"overflow\", 1) + $.curCSS(this, \"overflow-y\", 1))) + $.curCSS(this, \"overflow-x\", 1))))));\n                }).eq(0) : a = this.parents().filter(function() {\n                    return /(auto|scroll)/.test((((($.curCSS(this, \"overflow\", 1) + $.curCSS(this, \"overflow-y\", 1))) + $.curCSS(this, \"overflow-x\", 1))));\n                }).eq(0))), ((((/fixed/.test(this.css(\"position\")) || !a.length)) ? $(JSBNG__document) : a));\n            },\n            zIndex: function(b) {\n                if (((b !== a))) {\n                    return this.css(\"zIndex\", b);\n                }\n            ;\n            ;\n                if (this.length) {\n                    var c = $(this[0]), d, e;\n                    while (((c.length && ((c[0] !== JSBNG__document))))) {\n                        d = c.css(\"position\");\n                        if (((((((d === \"absolute\")) || ((d === \"relative\")))) || ((d === \"fixed\"))))) {\n                            e = parseInt(c.css(\"zIndex\"), 10);\n                            if (((!isNaN(e) && ((e !== 0))))) {\n                                return e;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        c = c.parent();\n                    };\n                ;\n                }\n            ;\n            ;\n                return 0;\n            },\n            disableSelection: function() {\n                return this.bind((((($.support.selectstart ? \"selectstart\" : \"mousedown\")) + \".ui-disableSelection\")), function(a) {\n                    a.preventDefault();\n                });\n            },\n            enableSelection: function() {\n                return this.unbind(\".ui-disableSelection\");\n            }\n        }), (($(\"\\u003Ca\\u003E\").JSBNG__outerWidth(1).jquery || $.each([\"Width\",\"Height\",], function(b, c) {\n            function g(a, b, c, e) {\n                return $.each(d, function() {\n                    b -= ((parseFloat($.curCSS(a, ((\"padding\" + this)), !0)) || 0)), ((c && (b -= ((parseFloat($.curCSS(a, ((((\"border\" + this)) + \"Width\")), !0)) || 0))))), ((e && (b -= ((parseFloat($.curCSS(a, ((\"margin\" + this)), !0)) || 0)))));\n                }), b;\n            };\n        ;\n            var d = ((((c === \"Width\")) ? [\"Left\",\"Right\",] : [\"Top\",\"Bottom\",])), e = c.toLowerCase(), f = {\n                JSBNG__innerWidth: $.fn.JSBNG__innerWidth,\n                JSBNG__innerHeight: $.fn.JSBNG__innerHeight,\n                JSBNG__outerWidth: $.fn.JSBNG__outerWidth,\n                JSBNG__outerHeight: $.fn.JSBNG__outerHeight\n            };\n            $.fn[((\"JSBNG__inner\" + c))] = function(b) {\n                return ((((b === a)) ? f[((\"JSBNG__inner\" + c))].call(this) : this.each(function() {\n                    $(this).css(e, ((g(this, b) + \"px\")));\n                })));\n            }, $.fn[((\"JSBNG__outer\" + c))] = function(a, b) {\n                return ((((typeof a != \"number\")) ? f[((\"JSBNG__outer\" + c))].call(this, a) : this.each(function() {\n                    $(this).css(e, ((g(this, a, !0, b) + \"px\")));\n                })));\n            };\n        }))), $.extend($.expr[\":\"], {\n            data: (($.expr.createPseudo ? $.expr.createPseudo(function(a) {\n                return function(b) {\n                    return !!$.data(b, a);\n                };\n            }) : function(a, b, c) {\n                return !!$.data(a, c[3]);\n            })),\n            focusable: function(a) {\n                return b(a, !isNaN($.attr(a, \"tabindex\")));\n            },\n            tabbable: function(a) {\n                var c = $.attr(a, \"tabindex\"), d = isNaN(c);\n                return ((((d || ((c >= 0)))) && b(a, !d)));\n            }\n        }), $(function() {\n            var a = JSBNG__document.body, b = a.appendChild(b = JSBNG__document.createElement(\"div\"));\n            b.offsetHeight, $.extend(b.style, {\n                minHeight: \"100px\",\n                height: \"auto\",\n                padding: 0,\n                borderWidth: 0\n            }), $.support.minHeight = ((b.offsetHeight === 100)), $.support.selectstart = ((\"onselectstart\" in b)), a.removeChild(b).style.display = \"none\";\n        }), (($.curCSS || ($.curCSS = $.css))), $.extend($.ui, {\n            plugin: {\n                add: function(a, b, c) {\n                    var d = $.ui[a].prototype;\n                    {\n                        var fin55keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin55i = (0);\n                        var e;\n                        for (; (fin55i < fin55keys.length); (fin55i++)) {\n                            ((e) = (fin55keys[fin55i]));\n                            {\n                                d.plugins[e] = ((d.plugins[e] || [])), d.plugins[e].push([b,c[e],]);\n                            ;\n                            };\n                        };\n                    };\n                ;\n                },\n                call: function(a, b, c) {\n                    var d = a.plugins[b];\n                    if (((!d || !a.element[0].parentNode))) {\n                        return;\n                    }\n                ;\n                ;\n                    for (var e = 0; ((e < d.length)); e++) {\n                        ((a.options[d[e][0]] && d[e][1].apply(a.element, c)));\n                    ;\n                    };\n                ;\n                }\n            },\n            contains: function(a, b) {\n                return ((JSBNG__document.compareDocumentPosition ? ((a.compareDocumentPosition(b) & 16)) : ((((a !== b)) && a.contains(b)))));\n            },\n            hasScroll: function(a, b) {\n                if ((($(a).css(\"overflow\") === \"hidden\"))) {\n                    return !1;\n                }\n            ;\n            ;\n                var c = ((((b && ((b === \"left\")))) ? \"scrollLeft\" : \"scrollTop\")), d = !1;\n                return ((((a[c] > 0)) ? !0 : (a[c] = 1, d = ((a[c] > 0)), a[c] = 0, d)));\n            },\n            isOverAxis: function(a, b, c) {\n                return ((((a > b)) && ((a < ((b + c))))));\n            },\n            isOver: function(a, b, c, d, e, f) {\n                return (($.ui.isOverAxis(a, c, e) && $.ui.isOverAxis(b, d, f)));\n            }\n        });\n    })(jQuery), function($, a) {\n        if ($.cleanData) {\n            var b = $.cleanData;\n            $.cleanData = function(a) {\n                for (var c = 0, d; (((d = a[c]) != null)); c++) {\n                    try {\n                        $(d).triggerHandler(\"remove\");\n                    } catch (e) {\n                    \n                    };\n                ;\n                };\n            ;\n                b(a);\n            };\n        }\n         else {\n            var c = $.fn.remove;\n            $.fn.remove = function(a, b) {\n                return this.each(function() {\n                    return ((b || ((((!a || $.filter(a, [this,]).length)) && $(\"*\", this).add([this,]).each(function() {\n                        try {\n                            $(this).triggerHandler(\"remove\");\n                        } catch (a) {\n                        \n                        };\n                    ;\n                    }))))), c.call($(this), a, b);\n                });\n            };\n        }\n    ;\n    ;\n        $.widget = function(a, b, c) {\n            var d = a.split(\".\")[0], e;\n            a = a.split(\".\")[1], e = ((((d + \"-\")) + a)), ((c || (c = b, b = $.Widget))), $.expr[\":\"][e] = function(b) {\n                return !!$.data(b, a);\n            }, $[d] = (($[d] || {\n            })), $[d][a] = function(a, b) {\n                ((arguments.length && this._createWidget(a, b)));\n            };\n            var f = new b;\n            f.options = $.extend(!0, {\n            }, f.options), $[d][a].prototype = $.extend(!0, f, {\n                namespace: d,\n                widgetName: a,\n                widgetEventPrefix: (($[d][a].prototype.widgetEventPrefix || a)),\n                widgetBaseClass: e\n            }, c), $.widget.bridge(a, $[d][a]);\n        }, $.widget.bridge = function(b, c) {\n            $.fn[b] = function(d) {\n                var e = ((typeof d == \"string\")), f = Array.prototype.slice.call(arguments, 1), g = this;\n                return d = ((((!e && f.length)) ? $.extend.apply(null, [!0,d,].concat(f)) : d)), ((((e && ((d.charAt(0) === \"_\")))) ? g : (((e ? this.each(function() {\n                    var c = $.data(this, b), e = ((((c && $.isFunction(c[d]))) ? c[d].apply(c, f) : c));\n                    if (((((e !== c)) && ((e !== a))))) {\n                        return g = e, !1;\n                    }\n                ;\n                ;\n                }) : this.each(function() {\n                    var a = $.data(this, b);\n                    ((a ? a.option(((d || {\n                    })))._init() : $.data(this, b, new c(d, this))));\n                }))), g)));\n            };\n        }, $.Widget = function(a, b) {\n            ((arguments.length && this._createWidget(a, b)));\n        }, $.Widget.prototype = {\n            widgetName: \"widget\",\n            widgetEventPrefix: \"\",\n            options: {\n                disabled: !1\n            },\n            _createWidget: function(a, b) {\n                $.data(b, this.widgetName, this), this.element = $(b), this.options = $.extend(!0, {\n                }, this.options, this._getCreateOptions(), a);\n                var c = this;\n                this.element.bind(((\"remove.\" + this.widgetName)), function() {\n                    c.destroy();\n                }), this._create(), this._trigger(\"create\"), this._init();\n            },\n            _getCreateOptions: function() {\n                return (($.metadata && $.metadata.get(this.element[0])[this.widgetName]));\n            },\n            _create: function() {\n            \n            },\n            _init: function() {\n            \n            },\n            destroy: function() {\n                this.element.unbind(((\".\" + this.widgetName))).removeData(this.widgetName), this.widget().unbind(((\".\" + this.widgetName))).removeAttr(\"aria-disabled\").removeClass(((((this.widgetBaseClass + \"-disabled \")) + \"ui-state-disabled\")));\n            },\n            widget: function() {\n                return this.element;\n            },\n            option: function(b, c) {\n                var d = b;\n                if (((arguments.length === 0))) {\n                    return $.extend({\n                    }, this.options);\n                }\n            ;\n            ;\n                if (((typeof b == \"string\"))) {\n                    if (((c === a))) {\n                        return this.options[b];\n                    }\n                ;\n                ;\n                    d = {\n                    }, d[b] = c;\n                }\n            ;\n            ;\n                return this._setOptions(d), this;\n            },\n            _setOptions: function(a) {\n                var b = this;\n                return $.each(a, function(a, c) {\n                    b._setOption(a, c);\n                }), this;\n            },\n            _setOption: function(a, b) {\n                return this.options[a] = b, ((((a === \"disabled\")) && this.widget()[((b ? \"addClass\" : \"removeClass\"))](((((((this.widgetBaseClass + \"-disabled\")) + \" \")) + \"ui-state-disabled\"))).attr(\"aria-disabled\", b))), this;\n            },\n            enable: function() {\n                return this._setOption(\"disabled\", !1);\n            },\n            disable: function() {\n                return this._setOption(\"disabled\", !0);\n            },\n            _trigger: function(a, b, c) {\n                var d, e, f = this.options[a];\n                c = ((c || {\n                })), b = $.JSBNG__Event(b), b.type = ((((a === this.widgetEventPrefix)) ? a : ((this.widgetEventPrefix + a)))).toLowerCase(), b.target = this.element[0], e = b.originalEvent;\n                if (e) {\n                    {\n                        var fin56keys = ((window.top.JSBNG_Replay.forInKeys)((e))), fin56i = (0);\n                        (0);\n                        for (; (fin56i < fin56keys.length); (fin56i++)) {\n                            ((d) = (fin56keys[fin56i]));\n                            {\n                                ((((d in b)) || (b[d] = e[d])));\n                            ;\n                            };\n                        };\n                    };\n                }\n            ;\n            ;\n                return this.element.trigger(b, c), !(((($.isFunction(f) && ((f.call(this.element[0], b, c) === !1)))) || b.isDefaultPrevented()));\n            }\n        };\n    }(jQuery), function($, a) {\n        var b = !1;\n        $(JSBNG__document).mouseup(function(a) {\n            b = !1;\n        }), $.widget(\"ui.mouse\", {\n            options: {\n                cancel: \":input,option\",\n                distance: 1,\n                delay: 0\n            },\n            _mouseInit: function() {\n                var a = this;\n                this.element.bind(((\"mousedown.\" + this.widgetName)), function(b) {\n                    return a._mouseDown(b);\n                }).bind(((\"click.\" + this.widgetName)), function(b) {\n                    if (((!0 === $.data(b.target, ((a.widgetName + \".preventClickEvent\")))))) {\n                        return $.removeData(b.target, ((a.widgetName + \".preventClickEvent\"))), b.stopImmediatePropagation(), !1;\n                    }\n                ;\n                ;\n                }), this.started = !1;\n            },\n            _mouseDestroy: function() {\n                this.element.unbind(((\".\" + this.widgetName))), $(JSBNG__document).unbind(((\"mousemove.\" + this.widgetName)), this._mouseMoveDelegate).unbind(((\"mouseup.\" + this.widgetName)), this._mouseUpDelegate);\n            },\n            _mouseDown: function(a) {\n                if (b) {\n                    return;\n                }\n            ;\n            ;\n                ((this._mouseStarted && this._mouseUp(a))), this._mouseDownEvent = a;\n                var c = this, d = ((a.which == 1)), e = ((((((typeof this.options.cancel == \"string\")) && a.target.nodeName)) ? $(a.target).closest(this.options.cancel).length : !1));\n                if (((((!d || e)) || !this._mouseCapture(a)))) {\n                    return !0;\n                }\n            ;\n            ;\n                this.mouseDelayMet = !this.options.delay, ((this.mouseDelayMet || (this._mouseDelayTimer = JSBNG__setTimeout(function() {\n                    c.mouseDelayMet = !0;\n                }, this.options.delay))));\n                if (((this._mouseDistanceMet(a) && this._mouseDelayMet(a)))) {\n                    this._mouseStarted = ((this._mouseStart(a) !== !1));\n                    if (!this._mouseStarted) {\n                        return a.preventDefault(), !0;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                return ((((!0 === $.data(a.target, ((this.widgetName + \".preventClickEvent\"))))) && $.removeData(a.target, ((this.widgetName + \".preventClickEvent\"))))), this._mouseMoveDelegate = function(a) {\n                    return c._mouseMove(a);\n                }, this._mouseUpDelegate = function(a) {\n                    return c._mouseUp(a);\n                }, $(JSBNG__document).bind(((\"mousemove.\" + this.widgetName)), this._mouseMoveDelegate).bind(((\"mouseup.\" + this.widgetName)), this._mouseUpDelegate), a.preventDefault(), b = !0, !0;\n            },\n            _mouseMove: function(a) {\n                return ((((((!$.browser.msie || ((JSBNG__document.documentMode >= 9)))) || !!a.button)) ? ((this._mouseStarted ? (this._mouseDrag(a), a.preventDefault()) : (((((this._mouseDistanceMet(a) && this._mouseDelayMet(a))) && (this._mouseStarted = ((this._mouseStart(this._mouseDownEvent, a) !== !1)), ((this._mouseStarted ? this._mouseDrag(a) : this._mouseUp(a)))))), !this._mouseStarted))) : this._mouseUp(a)));\n            },\n            _mouseUp: function(a) {\n                return $(JSBNG__document).unbind(((\"mousemove.\" + this.widgetName)), this._mouseMoveDelegate).unbind(((\"mouseup.\" + this.widgetName)), this._mouseUpDelegate), ((this._mouseStarted && (this._mouseStarted = !1, ((((a.target == this._mouseDownEvent.target)) && $.data(a.target, ((this.widgetName + \".preventClickEvent\")), !0))), this._mouseStop(a)))), !1;\n            },\n            _mouseDistanceMet: function(a) {\n                return ((Math.max(Math.abs(((this._mouseDownEvent.pageX - a.pageX))), Math.abs(((this._mouseDownEvent.pageY - a.pageY)))) >= this.options.distance));\n            },\n            _mouseDelayMet: function(a) {\n                return this.mouseDelayMet;\n            },\n            _mouseStart: function(a) {\n            \n            },\n            _mouseDrag: function(a) {\n            \n            },\n            _mouseStop: function(a) {\n            \n            },\n            _mouseCapture: function(a) {\n                return !0;\n            }\n        });\n    }(jQuery), function($, a) {\n        $.widget(\"ui.draggable\", $.ui.mouse, {\n            widgetEventPrefix: \"drag\",\n            options: {\n                addClasses: !0,\n                appendTo: \"parent\",\n                axis: !1,\n                connectToSortable: !1,\n                containment: !1,\n                cursor: \"auto\",\n                cursorAt: !1,\n                grid: !1,\n                handle: !1,\n                helper: \"original\",\n                iframeFix: !1,\n                opacity: !1,\n                refreshPositions: !1,\n                revert: !1,\n                revertDuration: 500,\n                scope: \"default\",\n                JSBNG__scroll: !0,\n                scrollSensitivity: 20,\n                scrollSpeed: 20,\n                snap: !1,\n                snapMode: \"both\",\n                snapTolerance: 20,\n                stack: !1,\n                zIndex: !1\n            },\n            _create: function() {\n                ((((((this.options.helper == \"original\")) && !/^(?:r|a|f)/.test(this.element.css(\"position\")))) && (this.element[0].style.position = \"relative\"))), ((this.options.addClasses && this.element.addClass(\"ui-draggable\"))), ((this.options.disabled && this.element.addClass(\"ui-draggable-disabled\"))), this._mouseInit();\n            },\n            destroy: function() {\n                if (!this.element.data(\"draggable\")) {\n                    return;\n                }\n            ;\n            ;\n                return this.element.removeData(\"draggable\").unbind(\".draggable\").removeClass(\"ui-draggable ui-draggable-dragging ui-draggable-disabled\"), this._mouseDestroy(), this;\n            },\n            _mouseCapture: function(a) {\n                var b = this.options;\n                return ((((((this.helper || b.disabled)) || $(a.target).is(\".ui-resizable-handle\"))) ? !1 : (this.handle = this._getHandle(a), ((this.handle ? (((b.iframeFix && $(((((b.iframeFix === !0)) ? \"div\" : b.iframeFix))).each(function() {\n                    $(\"\\u003Cdiv class=\\\"ui-draggable-iframeFix\\\" style=\\\"background: #fff;\\\"\\u003E\\u003C/div\\u003E\").css({\n                        width: ((this.offsetWidth + \"px\")),\n                        height: ((this.offsetHeight + \"px\")),\n                        position: \"absolute\",\n                        opacity: \"0.001\",\n                        zIndex: 1000\n                    }).css($(this).offset()).appendTo(\"body\");\n                }))), !0) : !1)))));\n            },\n            _mouseStart: function(a) {\n                var b = this.options;\n                return this.helper = this._createHelper(a), this.helper.addClass(\"ui-draggable-dragging\"), this._cacheHelperProportions(), (($.ui.ddmanager && ($.ui.ddmanager.current = this))), this._cacheMargins(), this.cssPosition = this.helper.css(\"position\"), this.scrollParent = this.helper.scrollParent(), this.offset = this.positionAbs = this.element.offset(), this.offset = {\n                    JSBNG__top: ((this.offset.JSBNG__top - this.margins.JSBNG__top)),\n                    left: ((this.offset.left - this.margins.left))\n                }, $.extend(this.offset, {\n                    click: {\n                        left: ((a.pageX - this.offset.left)),\n                        JSBNG__top: ((a.pageY - this.offset.JSBNG__top))\n                    },\n                    parent: this._getParentOffset(),\n                    relative: this._getRelativeOffset()\n                }), this.originalPosition = this.position = this._generatePosition(a), this.originalPageX = a.pageX, this.originalPageY = a.pageY, ((b.cursorAt && this._adjustOffsetFromHelper(b.cursorAt))), ((b.containment && this._setContainment())), ((((this._trigger(\"start\", a) === !1)) ? (this._clear(), !1) : (this._cacheHelperProportions(), (((($.ui.ddmanager && !b.dropBehaviour)) && $.ui.ddmanager.prepareOffsets(this, a))), this._mouseDrag(a, !0), (($.ui.ddmanager && $.ui.ddmanager.dragStart(this, a))), !0)));\n            },\n            _mouseDrag: function(a, b) {\n                this.position = this._generatePosition(a), this.positionAbs = this._convertPositionTo(\"absolute\");\n                if (!b) {\n                    var c = this._uiHash();\n                    if (((this._trigger(\"drag\", a, c) === !1))) {\n                        return this._mouseUp({\n                        }), !1;\n                    }\n                ;\n                ;\n                    this.position = c.position;\n                }\n            ;\n            ;\n                if (((!this.options.axis || ((this.options.axis != \"y\"))))) {\n                    this.helper[0].style.left = ((this.position.left + \"px\"));\n                }\n            ;\n            ;\n                if (((!this.options.axis || ((this.options.axis != \"x\"))))) {\n                    this.helper[0].style.JSBNG__top = ((this.position.JSBNG__top + \"px\"));\n                }\n            ;\n            ;\n                return (($.ui.ddmanager && $.ui.ddmanager.drag(this, a))), !1;\n            },\n            _mouseStop: function(a) {\n                var b = !1;\n                (((($.ui.ddmanager && !this.options.dropBehaviour)) && (b = $.ui.ddmanager.drop(this, a)))), ((this.dropped && (b = this.dropped, this.dropped = !1)));\n                var c = this.element[0], d = !1;\n                while (((c && (c = c.parentNode)))) {\n                    ((((c == JSBNG__document)) && (d = !0)));\n                ;\n                };\n            ;\n                if (((!d && ((this.options.helper === \"original\"))))) {\n                    return !1;\n                }\n            ;\n            ;\n                if (((((((((((this.options.revert == \"invalid\")) && !b)) || ((((this.options.revert == \"valid\")) && b)))) || ((this.options.revert === !0)))) || (($.isFunction(this.options.revert) && this.options.revert.call(this.element, b)))))) {\n                    var e = this;\n                    $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {\n                        ((((e._trigger(\"JSBNG__stop\", a) !== !1)) && e._clear()));\n                    });\n                }\n                 else ((((this._trigger(\"JSBNG__stop\", a) !== !1)) && this._clear()));\n            ;\n            ;\n                return !1;\n            },\n            _mouseUp: function(a) {\n                return ((((this.options.iframeFix === !0)) && $(\"div.ui-draggable-iframeFix\").each(function() {\n                    this.parentNode.removeChild(this);\n                }))), (($.ui.ddmanager && $.ui.ddmanager.dragStop(this, a))), $.ui.mouse.prototype._mouseUp.call(this, a);\n            },\n            cancel: function() {\n                return ((this.helper.is(\".ui-draggable-dragging\") ? this._mouseUp({\n                }) : this._clear())), this;\n            },\n            _getHandle: function(a) {\n                var b = ((((!this.options.handle || !$(this.options.handle, this.element).length)) ? !0 : !1));\n                return $(this.options.handle, this.element).JSBNG__find(\"*\").andSelf().each(function() {\n                    ((((this == a.target)) && (b = !0)));\n                }), b;\n            },\n            _createHelper: function(a) {\n                var b = this.options, c = (($.isFunction(b.helper) ? $(b.helper.apply(this.element[0], [a,])) : ((((b.helper == \"clone\")) ? this.element.clone().removeAttr(\"id\") : this.element))));\n                return ((c.parents(\"body\").length || c.appendTo(((((b.appendTo == \"parent\")) ? this.element[0].parentNode : b.appendTo))))), ((((((c[0] != this.element[0])) && !/(fixed|absolute)/.test(c.css(\"position\")))) && c.css(\"position\", \"absolute\"))), c;\n            },\n            _adjustOffsetFromHelper: function(a) {\n                ((((typeof a == \"string\")) && (a = a.split(\" \")))), (($.isArray(a) && (a = {\n                    left: +a[0],\n                    JSBNG__top: ((+a[1] || 0))\n                }))), ((((\"left\" in a)) && (this.offset.click.left = ((a.left + this.margins.left))))), ((((\"right\" in a)) && (this.offset.click.left = ((((this.helperProportions.width - a.right)) + this.margins.left))))), ((((\"JSBNG__top\" in a)) && (this.offset.click.JSBNG__top = ((a.JSBNG__top + this.margins.JSBNG__top))))), ((((\"bottom\" in a)) && (this.offset.click.JSBNG__top = ((((this.helperProportions.height - a.bottom)) + this.margins.JSBNG__top)))));\n            },\n            _getParentOffset: function() {\n                this.offsetParent = this.helper.offsetParent();\n                var a = this.offsetParent.offset();\n                ((((((((this.cssPosition == \"absolute\")) && ((this.scrollParent[0] != JSBNG__document)))) && $.ui.contains(this.scrollParent[0], this.offsetParent[0]))) && (a.left += this.scrollParent.scrollLeft(), a.JSBNG__top += this.scrollParent.scrollTop())));\n                if (((((this.offsetParent[0] == JSBNG__document.body)) || ((((this.offsetParent[0].tagName && ((this.offsetParent[0].tagName.toLowerCase() == \"html\")))) && $.browser.msie))))) {\n                    a = {\n                        JSBNG__top: 0,\n                        left: 0\n                    };\n                }\n            ;\n            ;\n                return {\n                    JSBNG__top: ((a.JSBNG__top + ((parseInt(this.offsetParent.css(\"borderTopWidth\"), 10) || 0)))),\n                    left: ((a.left + ((parseInt(this.offsetParent.css(\"borderLeftWidth\"), 10) || 0))))\n                };\n            },\n            _getRelativeOffset: function() {\n                if (((this.cssPosition == \"relative\"))) {\n                    var a = this.element.position();\n                    return {\n                        JSBNG__top: ((((a.JSBNG__top - ((parseInt(this.helper.css(\"JSBNG__top\"), 10) || 0)))) + this.scrollParent.scrollTop())),\n                        left: ((((a.left - ((parseInt(this.helper.css(\"left\"), 10) || 0)))) + this.scrollParent.scrollLeft()))\n                    };\n                }\n            ;\n            ;\n                return {\n                    JSBNG__top: 0,\n                    left: 0\n                };\n            },\n            _cacheMargins: function() {\n                this.margins = {\n                    left: ((parseInt(this.element.css(\"marginLeft\"), 10) || 0)),\n                    JSBNG__top: ((parseInt(this.element.css(\"marginTop\"), 10) || 0)),\n                    right: ((parseInt(this.element.css(\"marginRight\"), 10) || 0)),\n                    bottom: ((parseInt(this.element.css(\"marginBottom\"), 10) || 0))\n                };\n            },\n            _cacheHelperProportions: function() {\n                this.helperProportions = {\n                    width: this.helper.JSBNG__outerWidth(),\n                    height: this.helper.JSBNG__outerHeight()\n                };\n            },\n            _setContainment: function() {\n                var a = this.options;\n                ((((a.containment == \"parent\")) && (a.containment = this.helper[0].parentNode)));\n                if (((((a.containment == \"JSBNG__document\")) || ((a.containment == \"window\"))))) {\n                    this.containment = [((((a.containment == \"JSBNG__document\")) ? 0 : (((($(window).scrollLeft() - this.offset.relative.left)) - this.offset.parent.left)))),((((a.containment == \"JSBNG__document\")) ? 0 : (((($(window).scrollTop() - this.offset.relative.JSBNG__top)) - this.offset.parent.JSBNG__top)))),((((((((((a.containment == \"JSBNG__document\")) ? 0 : $(window).scrollLeft())) + $(((((a.containment == \"JSBNG__document\")) ? JSBNG__document : window))).width())) - this.helperProportions.width)) - this.margins.left)),((((((((((a.containment == \"JSBNG__document\")) ? 0 : $(window).scrollTop())) + (($(((((a.containment == \"JSBNG__document\")) ? JSBNG__document : window))).height() || JSBNG__document.body.parentNode.scrollHeight)))) - this.helperProportions.height)) - this.margins.JSBNG__top)),];\n                }\n            ;\n            ;\n                if (((!/^(document|window|parent)$/.test(a.containment) && ((a.containment.constructor != Array))))) {\n                    var b = $(a.containment), c = b[0];\n                    if (!c) {\n                        return;\n                    }\n                ;\n                ;\n                    var d = b.offset(), e = (($(c).css(\"overflow\") != \"hidden\"));\n                    this.containment = [((((parseInt($(c).css(\"borderLeftWidth\"), 10) || 0)) + ((parseInt($(c).css(\"paddingLeft\"), 10) || 0)))),((((parseInt($(c).css(\"borderTopWidth\"), 10) || 0)) + ((parseInt($(c).css(\"paddingTop\"), 10) || 0)))),((((((((((((e ? Math.max(c.scrollWidth, c.offsetWidth) : c.offsetWidth)) - ((parseInt($(c).css(\"borderLeftWidth\"), 10) || 0)))) - ((parseInt($(c).css(\"paddingRight\"), 10) || 0)))) - this.helperProportions.width)) - this.margins.left)) - this.margins.right)),((((((((((((e ? Math.max(c.scrollHeight, c.offsetHeight) : c.offsetHeight)) - ((parseInt($(c).css(\"borderTopWidth\"), 10) || 0)))) - ((parseInt($(c).css(\"paddingBottom\"), 10) || 0)))) - this.helperProportions.height)) - this.margins.JSBNG__top)) - this.margins.bottom)),], this.relative_container = b;\n                }\n                 else ((((a.containment.constructor == Array)) && (this.containment = a.containment)));\n            ;\n            ;\n            },\n            _convertPositionTo: function(a, b) {\n                ((b || (b = this.position)));\n                var c = ((((a == \"absolute\")) ? 1 : -1)), d = this.options, e = ((((((this.cssPosition != \"absolute\")) || ((((this.scrollParent[0] != JSBNG__document)) && !!$.ui.contains(this.scrollParent[0], this.offsetParent[0]))))) ? this.scrollParent : this.offsetParent)), f = /(html|body)/i.test(e[0].tagName);\n                return {\n                    JSBNG__top: ((((((b.JSBNG__top + ((this.offset.relative.JSBNG__top * c)))) + ((this.offset.parent.JSBNG__top * c)))) - (((((($.browser.safari && (($.browser.version < 526)))) && ((this.cssPosition == \"fixed\")))) ? 0 : ((((((this.cssPosition == \"fixed\")) ? -this.scrollParent.scrollTop() : ((f ? 0 : e.scrollTop())))) * c)))))),\n                    left: ((((((b.left + ((this.offset.relative.left * c)))) + ((this.offset.parent.left * c)))) - (((((($.browser.safari && (($.browser.version < 526)))) && ((this.cssPosition == \"fixed\")))) ? 0 : ((((((this.cssPosition == \"fixed\")) ? -this.scrollParent.scrollLeft() : ((f ? 0 : e.scrollLeft())))) * c))))))\n                };\n            },\n            _generatePosition: function(a) {\n                var b = this.options, c = ((((((this.cssPosition != \"absolute\")) || ((((this.scrollParent[0] != JSBNG__document)) && !!$.ui.contains(this.scrollParent[0], this.offsetParent[0]))))) ? this.scrollParent : this.offsetParent)), d = /(html|body)/i.test(c[0].tagName), e = a.pageX, f = a.pageY;\n                if (this.originalPosition) {\n                    var g;\n                    if (this.containment) {\n                        if (this.relative_container) {\n                            var h = this.relative_container.offset();\n                            g = [((this.containment[0] + h.left)),((this.containment[1] + h.JSBNG__top)),((this.containment[2] + h.left)),((this.containment[3] + h.JSBNG__top)),];\n                        }\n                         else g = this.containment;\n                    ;\n                    ;\n                        ((((((a.pageX - this.offset.click.left)) < g[0])) && (e = ((g[0] + this.offset.click.left))))), ((((((a.pageY - this.offset.click.JSBNG__top)) < g[1])) && (f = ((g[1] + this.offset.click.JSBNG__top))))), ((((((a.pageX - this.offset.click.left)) > g[2])) && (e = ((g[2] + this.offset.click.left))))), ((((((a.pageY - this.offset.click.JSBNG__top)) > g[3])) && (f = ((g[3] + this.offset.click.JSBNG__top)))));\n                    }\n                ;\n                ;\n                    if (b.grid) {\n                        var i = ((b.grid[1] ? ((this.originalPageY + ((Math.round(((((f - this.originalPageY)) / b.grid[1]))) * b.grid[1])))) : this.originalPageY));\n                        f = ((g ? ((((((((i - this.offset.click.JSBNG__top)) < g[1])) || ((((i - this.offset.click.JSBNG__top)) > g[3])))) ? ((((((i - this.offset.click.JSBNG__top)) < g[1])) ? ((i + b.grid[1])) : ((i - b.grid[1])))) : i)) : i));\n                        var j = ((b.grid[0] ? ((this.originalPageX + ((Math.round(((((e - this.originalPageX)) / b.grid[0]))) * b.grid[0])))) : this.originalPageX));\n                        e = ((g ? ((((((((j - this.offset.click.left)) < g[0])) || ((((j - this.offset.click.left)) > g[2])))) ? ((((((j - this.offset.click.left)) < g[0])) ? ((j + b.grid[0])) : ((j - b.grid[0])))) : j)) : j));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                return {\n                    JSBNG__top: ((((((((f - this.offset.click.JSBNG__top)) - this.offset.relative.JSBNG__top)) - this.offset.parent.JSBNG__top)) + (((((($.browser.safari && (($.browser.version < 526)))) && ((this.cssPosition == \"fixed\")))) ? 0 : ((((this.cssPosition == \"fixed\")) ? -this.scrollParent.scrollTop() : ((d ? 0 : c.scrollTop())))))))),\n                    left: ((((((((e - this.offset.click.left)) - this.offset.relative.left)) - this.offset.parent.left)) + (((((($.browser.safari && (($.browser.version < 526)))) && ((this.cssPosition == \"fixed\")))) ? 0 : ((((this.cssPosition == \"fixed\")) ? -this.scrollParent.scrollLeft() : ((d ? 0 : c.scrollLeft()))))))))\n                };\n            },\n            _clear: function() {\n                this.helper.removeClass(\"ui-draggable-dragging\"), ((((((this.helper[0] != this.element[0])) && !this.cancelHelperRemoval)) && this.helper.remove())), this.helper = null, this.cancelHelperRemoval = !1;\n            },\n            _trigger: function(a, b, c) {\n                return c = ((c || this._uiHash())), $.ui.plugin.call(this, a, [b,c,]), ((((a == \"drag\")) && (this.positionAbs = this._convertPositionTo(\"absolute\")))), $.Widget.prototype._trigger.call(this, a, b, c);\n            },\n            plugins: {\n            },\n            _uiHash: function(a) {\n                return {\n                    helper: this.helper,\n                    position: this.position,\n                    originalPosition: this.originalPosition,\n                    offset: this.positionAbs\n                };\n            }\n        }), $.extend($.ui.draggable, {\n            version: \"1.8.22\"\n        }), $.ui.plugin.add(\"draggable\", \"connectToSortable\", {\n            start: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = c.options, e = $.extend({\n                }, b, {\n                    item: c.element\n                });\n                c.sortables = [], $(d.connectToSortable).each(function() {\n                    var b = $.data(this, \"sortable\");\n                    ((((b && !b.options.disabled)) && (c.sortables.push({\n                        instance: b,\n                        shouldRevert: b.options.revert\n                    }), b.refreshPositions(), b._trigger(\"activate\", a, e))));\n                });\n            },\n            JSBNG__stop: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = $.extend({\n                }, b, {\n                    item: c.element\n                });\n                $.each(c.sortables, function() {\n                    ((this.instance.isOver ? (this.instance.isOver = 0, c.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, ((this.shouldRevert && (this.instance.options.revert = !0))), this.instance._mouseStop(a), this.instance.options.helper = this.instance.options._helper, ((((c.options.helper == \"original\")) && this.instance.currentItem.css({\n                        JSBNG__top: \"auto\",\n                        left: \"auto\"\n                    })))) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger(\"deactivate\", a, d))));\n                });\n            },\n            drag: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = this, e = function(a) {\n                    var b = this.offset.click.JSBNG__top, c = this.offset.click.left, d = this.positionAbs.JSBNG__top, e = this.positionAbs.left, f = a.height, g = a.width, h = a.JSBNG__top, i = a.left;\n                    return $.ui.isOver(((d + b)), ((e + c)), h, i, f, g);\n                };\n                $.each(c.sortables, function(e) {\n                    this.instance.positionAbs = c.positionAbs, this.instance.helperProportions = c.helperProportions, this.instance.offset.click = c.offset.click, ((this.instance._intersectsWith(this.instance.containerCache) ? (((this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = $(d).clone().removeAttr(\"id\").appendTo(this.instance.element).data(\"sortable-item\", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function() {\n                        return b.helper[0];\n                    }, a.target = this.instance.currentItem[0], this.instance._mouseCapture(a, !0), this.instance._mouseStart(a, !0, !0), this.instance.offset.click.JSBNG__top = c.offset.click.JSBNG__top, this.instance.offset.click.left = c.offset.click.left, this.instance.offset.parent.left -= ((c.offset.parent.left - this.instance.offset.parent.left)), this.instance.offset.parent.JSBNG__top -= ((c.offset.parent.JSBNG__top - this.instance.offset.parent.JSBNG__top)), c._trigger(\"toSortable\", a), c.dropped = this.instance.element, c.currentItem = c.element, this.instance.fromOutside = c))), ((this.instance.currentItem && this.instance._mouseDrag(a)))) : ((this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger(\"out\", a, this.instance._uiHash(this.instance)), this.instance._mouseStop(a, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), ((this.instance.placeholder && this.instance.placeholder.remove())), c._trigger(\"fromSortable\", a), c.dropped = !1)))));\n                });\n            }\n        }), $.ui.plugin.add(\"draggable\", \"cursor\", {\n            start: function(a, b) {\n                var c = $(\"body\"), d = $(this).data(\"draggable\").options;\n                ((c.css(\"cursor\") && (d._cursor = c.css(\"cursor\")))), c.css(\"cursor\", d.cursor);\n            },\n            JSBNG__stop: function(a, b) {\n                var c = $(this).data(\"draggable\").options;\n                ((c._cursor && $(\"body\").css(\"cursor\", c._cursor)));\n            }\n        }), $.ui.plugin.add(\"draggable\", \"opacity\", {\n            start: function(a, b) {\n                var c = $(b.helper), d = $(this).data(\"draggable\").options;\n                ((c.css(\"opacity\") && (d._opacity = c.css(\"opacity\")))), c.css(\"opacity\", d.opacity);\n            },\n            JSBNG__stop: function(a, b) {\n                var c = $(this).data(\"draggable\").options;\n                ((c._opacity && $(b.helper).css(\"opacity\", c._opacity)));\n            }\n        }), $.ui.plugin.add(\"draggable\", \"JSBNG__scroll\", {\n            start: function(a, b) {\n                var c = $(this).data(\"draggable\");\n                ((((((c.scrollParent[0] != JSBNG__document)) && ((c.scrollParent[0].tagName != \"HTML\")))) && (c.overflowOffset = c.scrollParent.offset())));\n            },\n            drag: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = c.options, e = !1;\n                if (((((c.scrollParent[0] != JSBNG__document)) && ((c.scrollParent[0].tagName != \"HTML\"))))) {\n                    if (((!d.axis || ((d.axis != \"x\"))))) {\n                        ((((((((c.overflowOffset.JSBNG__top + c.scrollParent[0].offsetHeight)) - a.pageY)) < d.scrollSensitivity)) ? c.scrollParent[0].scrollTop = e = ((c.scrollParent[0].scrollTop + d.scrollSpeed)) : ((((((a.pageY - c.overflowOffset.JSBNG__top)) < d.scrollSensitivity)) && (c.scrollParent[0].scrollTop = e = ((c.scrollParent[0].scrollTop - d.scrollSpeed)))))));\n                    }\n                ;\n                ;\n                    if (((!d.axis || ((d.axis != \"y\"))))) {\n                        ((((((((c.overflowOffset.left + c.scrollParent[0].offsetWidth)) - a.pageX)) < d.scrollSensitivity)) ? c.scrollParent[0].scrollLeft = e = ((c.scrollParent[0].scrollLeft + d.scrollSpeed)) : ((((((a.pageX - c.overflowOffset.left)) < d.scrollSensitivity)) && (c.scrollParent[0].scrollLeft = e = ((c.scrollParent[0].scrollLeft - d.scrollSpeed)))))));\n                    }\n                ;\n                ;\n                }\n                 else {\n                    if (((!d.axis || ((d.axis != \"x\"))))) {\n                        ((((((a.pageY - $(JSBNG__document).scrollTop())) < d.scrollSensitivity)) ? e = $(JSBNG__document).scrollTop((($(JSBNG__document).scrollTop() - d.scrollSpeed))) : (((((($(window).height() - ((a.pageY - $(JSBNG__document).scrollTop())))) < d.scrollSensitivity)) && (e = $(JSBNG__document).scrollTop((($(JSBNG__document).scrollTop() + d.scrollSpeed))))))));\n                    }\n                ;\n                ;\n                    if (((!d.axis || ((d.axis != \"y\"))))) {\n                        ((((((a.pageX - $(JSBNG__document).scrollLeft())) < d.scrollSensitivity)) ? e = $(JSBNG__document).scrollLeft((($(JSBNG__document).scrollLeft() - d.scrollSpeed))) : (((((($(window).width() - ((a.pageX - $(JSBNG__document).scrollLeft())))) < d.scrollSensitivity)) && (e = $(JSBNG__document).scrollLeft((($(JSBNG__document).scrollLeft() + d.scrollSpeed))))))));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                ((((((((e !== !1)) && $.ui.ddmanager)) && !d.dropBehaviour)) && $.ui.ddmanager.prepareOffsets(c, a)));\n            }\n        }), $.ui.plugin.add(\"draggable\", \"snap\", {\n            start: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = c.options;\n                c.snapElements = [], $(((((d.snap.constructor != String)) ? ((d.snap.items || \":data(draggable)\")) : d.snap))).each(function() {\n                    var a = $(this), b = a.offset();\n                    ((((this != c.element[0])) && c.snapElements.push({\n                        item: this,\n                        width: a.JSBNG__outerWidth(),\n                        height: a.JSBNG__outerHeight(),\n                        JSBNG__top: b.JSBNG__top,\n                        left: b.left\n                    })));\n                });\n            },\n            drag: function(a, b) {\n                var c = $(this).data(\"draggable\"), d = c.options, e = d.snapTolerance, f = b.offset.left, g = ((f + c.helperProportions.width)), h = b.offset.JSBNG__top, i = ((h + c.helperProportions.height));\n                for (var j = ((c.snapElements.length - 1)); ((j >= 0)); j--) {\n                    var k = c.snapElements[j].left, l = ((k + c.snapElements[j].width)), m = c.snapElements[j].JSBNG__top, n = ((m + c.snapElements[j].height));\n                    if (!((((((((((((((((k - e)) < f)) && ((f < ((l + e)))))) && ((((m - e)) < h)))) && ((h < ((n + e)))))) || ((((((((((k - e)) < f)) && ((f < ((l + e)))))) && ((((m - e)) < i)))) && ((i < ((n + e)))))))) || ((((((((((k - e)) < g)) && ((g < ((l + e)))))) && ((((m - e)) < h)))) && ((h < ((n + e)))))))) || ((((((((((k - e)) < g)) && ((g < ((l + e)))))) && ((((m - e)) < i)))) && ((i < ((n + e))))))))) {\n                        ((((c.snapElements[j].snapping && c.options.snap.release)) && c.options.snap.release.call(c.element, a, $.extend(c._uiHash(), {\n                            snapItem: c.snapElements[j].item\n                        })))), c.snapElements[j].snapping = !1;\n                        continue;\n                    }\n                ;\n                ;\n                    if (((d.snapMode != \"JSBNG__inner\"))) {\n                        var o = ((Math.abs(((m - i))) <= e)), p = ((Math.abs(((n - h))) <= e)), q = ((Math.abs(((k - g))) <= e)), r = ((Math.abs(((l - f))) <= e));\n                        ((o && (b.position.JSBNG__top = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: ((m - c.helperProportions.height)),\n                            left: 0\n                        }).JSBNG__top - c.margins.JSBNG__top))))), ((p && (b.position.JSBNG__top = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: n,\n                            left: 0\n                        }).JSBNG__top - c.margins.JSBNG__top))))), ((q && (b.position.left = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: 0,\n                            left: ((k - c.helperProportions.width))\n                        }).left - c.margins.left))))), ((r && (b.position.left = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: 0,\n                            left: l\n                        }).left - c.margins.left)))));\n                    }\n                ;\n                ;\n                    var s = ((((((o || p)) || q)) || r));\n                    if (((d.snapMode != \"JSBNG__outer\"))) {\n                        var o = ((Math.abs(((m - h))) <= e)), p = ((Math.abs(((n - i))) <= e)), q = ((Math.abs(((k - f))) <= e)), r = ((Math.abs(((l - g))) <= e));\n                        ((o && (b.position.JSBNG__top = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: m,\n                            left: 0\n                        }).JSBNG__top - c.margins.JSBNG__top))))), ((p && (b.position.JSBNG__top = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: ((n - c.helperProportions.height)),\n                            left: 0\n                        }).JSBNG__top - c.margins.JSBNG__top))))), ((q && (b.position.left = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: 0,\n                            left: k\n                        }).left - c.margins.left))))), ((r && (b.position.left = ((c._convertPositionTo(\"relative\", {\n                            JSBNG__top: 0,\n                            left: ((l - c.helperProportions.width))\n                        }).left - c.margins.left)))));\n                    }\n                ;\n                ;\n                    ((((((!c.snapElements[j].snapping && ((((((((o || p)) || q)) || r)) || s)))) && c.options.snap.snap)) && c.options.snap.snap.call(c.element, a, $.extend(c._uiHash(), {\n                        snapItem: c.snapElements[j].item\n                    })))), c.snapElements[j].snapping = ((((((((o || p)) || q)) || r)) || s));\n                };\n            ;\n            }\n        }), $.ui.plugin.add(\"draggable\", \"stack\", {\n            start: function(a, b) {\n                var c = $(this).data(\"draggable\").options, d = $.makeArray($(c.stack)).sort(function(a, b) {\n                    return ((((parseInt($(a).css(\"zIndex\"), 10) || 0)) - ((parseInt($(b).css(\"zIndex\"), 10) || 0))));\n                });\n                if (!d.length) {\n                    return;\n                }\n            ;\n            ;\n                var e = ((parseInt(d[0].style.zIndex) || 0));\n                $(d).each(function(a) {\n                    this.style.zIndex = ((e + a));\n                }), this[0].style.zIndex = ((e + d.length));\n            }\n        }), $.ui.plugin.add(\"draggable\", \"zIndex\", {\n            start: function(a, b) {\n                var c = $(b.helper), d = $(this).data(\"draggable\").options;\n                ((c.css(\"zIndex\") && (d._zIndex = c.css(\"zIndex\")))), c.css(\"zIndex\", d.zIndex);\n            },\n            JSBNG__stop: function(a, b) {\n                var c = $(this).data(\"draggable\").options;\n                ((c._zIndex && $(b.helper).css(\"zIndex\", c._zIndex)));\n            }\n        });\n    }(jQuery), function($, a) {\n        var b = 5;\n        $.widget(\"ui.slider\", $.ui.mouse, {\n            widgetEventPrefix: \"slide\",\n            options: {\n                animate: !1,\n                distance: 0,\n                max: 100,\n                min: 0,\n                JSBNG__orientation: \"horizontal\",\n                range: !1,\n                step: 1,\n                value: 0,\n                values: null\n            },\n            _create: function() {\n                var a = this, c = this.options, d = this.element.JSBNG__find(\".ui-slider-handle\").addClass(\"ui-state-default ui-corner-all\"), e = \"\\u003Ca class='ui-slider-handle ui-state-default ui-corner-all' href='#'\\u003E\\u003C/a\\u003E\", f = ((((c.values && c.values.length)) || 1)), g = [];\n                this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this.element.addClass(((((((((((\"ui-slider ui-slider-\" + this.JSBNG__orientation)) + \" ui-widget\")) + \" ui-widget-content\")) + \" ui-corner-all\")) + ((c.disabled ? \" ui-slider-disabled ui-disabled\" : \"\"))))), this.range = $([]), ((c.range && (((((c.range === !0)) && (((c.values || (c.values = [this._valueMin(),this._valueMin(),]))), ((((c.values.length && ((c.values.length !== 2)))) && (c.values = [c.values[0],c.values[0],])))))), this.range = $(\"\\u003Cdiv\\u003E\\u003C/div\\u003E\").appendTo(this.element).addClass(((\"ui-slider-range ui-widget-header\" + ((((((c.range === \"min\")) || ((c.range === \"max\")))) ? ((\" ui-slider-range-\" + c.range)) : \"\"))))))));\n                for (var h = d.length; ((h < f)); h += 1) {\n                    g.push(e);\n                ;\n                };\n            ;\n                this.handles = d.add($(g.join(\"\")).appendTo(a.element)), this.handle = this.handles.eq(0), this.handles.add(this.range).filter(\"a\").click(function(a) {\n                    a.preventDefault();\n                }).hover(function() {\n                    ((c.disabled || $(this).addClass(\"ui-state-hover\")));\n                }, function() {\n                    $(this).removeClass(\"ui-state-hover\");\n                }).JSBNG__focus(function() {\n                    ((c.disabled ? $(this).JSBNG__blur() : ($(\".ui-slider .ui-state-focus\").removeClass(\"ui-state-focus\"), $(this).addClass(\"ui-state-focus\"))));\n                }).JSBNG__blur(function() {\n                    $(this).removeClass(\"ui-state-focus\");\n                }), this.handles.each(function(a) {\n                    $(this).data(\"index.ui-slider-handle\", a);\n                }), this.handles.keydown(function(c) {\n                    var d = $(this).data(\"index.ui-slider-handle\"), e, f, g, h;\n                    if (a.options.disabled) {\n                        return;\n                    }\n                ;\n                ;\n                    switch (c.keyCode) {\n                      case $.ui.keyCode.HOME:\n                    \n                      case $.ui.keyCode.END:\n                    \n                      case $.ui.keyCode.PAGE_UP:\n                    \n                      case $.ui.keyCode.PAGE_DOWN:\n                    \n                      case $.ui.keyCode.UP:\n                    \n                      case $.ui.keyCode.RIGHT:\n                    \n                      case $.ui.keyCode.DOWN:\n                    \n                      case $.ui.keyCode.LEFT:\n                        c.preventDefault();\n                        if (!a._keySliding) {\n                            a._keySliding = !0, $(this).addClass(\"ui-state-active\"), e = a._start(c, d);\n                            if (((e === !1))) {\n                                return;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    h = a.options.step, ((((a.options.values && a.options.values.length)) ? f = g = a.values(d) : f = g = a.value()));\n                    switch (c.keyCode) {\n                      case $.ui.keyCode.HOME:\n                        g = a._valueMin();\n                        break;\n                      case $.ui.keyCode.END:\n                        g = a._valueMax();\n                        break;\n                      case $.ui.keyCode.PAGE_UP:\n                        g = a._trimAlignValue(((f + ((((a._valueMax() - a._valueMin())) / b)))));\n                        break;\n                      case $.ui.keyCode.PAGE_DOWN:\n                        g = a._trimAlignValue(((f - ((((a._valueMax() - a._valueMin())) / b)))));\n                        break;\n                      case $.ui.keyCode.UP:\n                    \n                      case $.ui.keyCode.RIGHT:\n                        if (((f === a._valueMax()))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        g = a._trimAlignValue(((f + h)));\n                        break;\n                      case $.ui.keyCode.DOWN:\n                    \n                      case $.ui.keyCode.LEFT:\n                        if (((f === a._valueMin()))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        g = a._trimAlignValue(((f - h)));\n                    };\n                ;\n                    a._slide(c, d, g);\n                }).keyup(function(b) {\n                    var c = $(this).data(\"index.ui-slider-handle\");\n                    ((a._keySliding && (a._keySliding = !1, a._stop(b, c), a._change(b, c), $(this).removeClass(\"ui-state-active\"))));\n                }), this._refreshValue(), this._animateOff = !1;\n            },\n            destroy: function() {\n                return this.handles.remove(), this.range.remove(), this.element.removeClass(\"ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all\").removeData(\"slider\").unbind(\".slider\"), this._mouseDestroy(), this;\n            },\n            _mouseCapture: function(a) {\n                var b = this.options, c, d, e, f, g, h, i, j, k;\n                return ((b.disabled ? !1 : (this.elementSize = {\n                    width: this.element.JSBNG__outerWidth(),\n                    height: this.element.JSBNG__outerHeight()\n                }, this.elementOffset = this.element.offset(), c = {\n                    x: a.pageX,\n                    y: a.pageY\n                }, d = this._normValueFromMouse(c), e = ((((this._valueMax() - this._valueMin())) + 1)), g = this, this.handles.each(function(a) {\n                    var b = Math.abs(((d - g.values(a))));\n                    ((((e > b)) && (e = b, f = $(this), h = a)));\n                }), ((((((b.range === !0)) && ((this.values(1) === b.min)))) && (h += 1, f = $(this.handles[h])))), i = this._start(a, h), ((((i === !1)) ? !1 : (this._mouseSliding = !0, g._handleIndex = h, f.addClass(\"ui-state-active\").JSBNG__focus(), j = f.offset(), k = !$(a.target).parents().andSelf().is(\".ui-slider-handle\"), this._clickOffset = ((k ? {\n                    left: 0,\n                    JSBNG__top: 0\n                } : {\n                    left: ((((a.pageX - j.left)) - ((f.width() / 2)))),\n                    JSBNG__top: ((((((((((a.pageY - j.JSBNG__top)) - ((f.height() / 2)))) - ((parseInt(f.css(\"borderTopWidth\"), 10) || 0)))) - ((parseInt(f.css(\"borderBottomWidth\"), 10) || 0)))) + ((parseInt(f.css(\"marginTop\"), 10) || 0))))\n                })), ((this.handles.hasClass(\"ui-state-hover\") || this._slide(a, h, d))), this._animateOff = !0, !0))))));\n            },\n            _mouseStart: function(a) {\n                return !0;\n            },\n            _mouseDrag: function(a) {\n                var b = {\n                    x: a.pageX,\n                    y: a.pageY\n                }, c = this._normValueFromMouse(b);\n                return this._slide(a, this._handleIndex, c), !1;\n            },\n            _mouseStop: function(a) {\n                return this.handles.removeClass(\"ui-state-active\"), this._mouseSliding = !1, this._stop(a, this._handleIndex), this._change(a, this._handleIndex), this._handleIndex = null, this._clickOffset = null, this._animateOff = !1, !1;\n            },\n            _detectOrientation: function() {\n                this.JSBNG__orientation = ((((this.options.JSBNG__orientation === \"vertical\")) ? \"vertical\" : \"horizontal\"));\n            },\n            _normValueFromMouse: function(a) {\n                var b, c, d, e, f;\n                return ((((this.JSBNG__orientation === \"horizontal\")) ? (b = this.elementSize.width, c = ((((a.x - this.elementOffset.left)) - ((this._clickOffset ? this._clickOffset.left : 0))))) : (b = this.elementSize.height, c = ((((a.y - this.elementOffset.JSBNG__top)) - ((this._clickOffset ? this._clickOffset.JSBNG__top : 0))))))), d = ((c / b)), ((((d > 1)) && (d = 1))), ((((d < 0)) && (d = 0))), ((((this.JSBNG__orientation === \"vertical\")) && (d = ((1 - d))))), e = ((this._valueMax() - this._valueMin())), f = ((this._valueMin() + ((d * e)))), this._trimAlignValue(f);\n            },\n            _start: function(a, b) {\n                var c = {\n                    handle: this.handles[b],\n                    value: this.value()\n                };\n                return ((((this.options.values && this.options.values.length)) && (c.value = this.values(b), c.values = this.values()))), this._trigger(\"start\", a, c);\n            },\n            _slide: function(a, b, c) {\n                var d, e, f;\n                ((((this.options.values && this.options.values.length)) ? (d = this.values(((b ? 0 : 1))), ((((((((this.options.values.length === 2)) && ((this.options.range === !0)))) && ((((((b === 0)) && ((c > d)))) || ((((b === 1)) && ((c < d)))))))) && (c = d))), ((((c !== this.values(b))) && (e = this.values(), e[b] = c, f = this._trigger(\"slide\", a, {\n                    handle: this.handles[b],\n                    value: c,\n                    values: e\n                }), d = this.values(((b ? 0 : 1))), ((((f !== !1)) && this.values(b, c, !0))))))) : ((((c !== this.value())) && (f = this._trigger(\"slide\", a, {\n                    handle: this.handles[b],\n                    value: c\n                }), ((((f !== !1)) && this.value(c))))))));\n            },\n            _stop: function(a, b) {\n                var c = {\n                    handle: this.handles[b],\n                    value: this.value()\n                };\n                ((((this.options.values && this.options.values.length)) && (c.value = this.values(b), c.values = this.values()))), this._trigger(\"JSBNG__stop\", a, c);\n            },\n            _change: function(a, b) {\n                if (((!this._keySliding && !this._mouseSliding))) {\n                    var c = {\n                        handle: this.handles[b],\n                        value: this.value()\n                    };\n                    ((((this.options.values && this.options.values.length)) && (c.value = this.values(b), c.values = this.values()))), this._trigger(\"change\", a, c);\n                }\n            ;\n            ;\n            },\n            value: function(a) {\n                if (arguments.length) {\n                    this.options.value = this._trimAlignValue(a), this._refreshValue(), this._change(null, 0);\n                    return;\n                }\n            ;\n            ;\n                return this._value();\n            },\n            values: function(a, b) {\n                var c, d, e;\n                if (((arguments.length > 1))) {\n                    this.options.values[a] = this._trimAlignValue(b), this._refreshValue(), this._change(null, a);\n                    return;\n                }\n            ;\n            ;\n                if (!arguments.length) {\n                    return this._values();\n                }\n            ;\n            ;\n                if (!$.isArray(arguments[0])) {\n                    return ((((this.options.values && this.options.values.length)) ? this._values(a) : this.value()));\n                }\n            ;\n            ;\n                c = this.options.values, d = arguments[0];\n                for (e = 0; ((e < c.length)); e += 1) {\n                    c[e] = this._trimAlignValue(d[e]), this._change(null, e);\n                ;\n                };\n            ;\n                this._refreshValue();\n            },\n            _setOption: function(a, b) {\n                var c, d = 0;\n                (($.isArray(this.options.values) && (d = this.options.values.length))), $.Widget.prototype._setOption.apply(this, arguments);\n                switch (a) {\n                  case \"disabled\":\n                    ((b ? (this.handles.filter(\".ui-state-focus\").JSBNG__blur(), this.handles.removeClass(\"ui-state-hover\"), this.handles.propAttr(\"disabled\", !0), this.element.addClass(\"ui-disabled\")) : (this.handles.propAttr(\"disabled\", !1), this.element.removeClass(\"ui-disabled\"))));\n                    break;\n                  case \"JSBNG__orientation\":\n                    this._detectOrientation(), this.element.removeClass(\"ui-slider-horizontal ui-slider-vertical\").addClass(((\"ui-slider-\" + this.JSBNG__orientation))), this._refreshValue();\n                    break;\n                  case \"value\":\n                    this._animateOff = !0, this._refreshValue(), this._change(null, 0), this._animateOff = !1;\n                    break;\n                  case \"values\":\n                    this._animateOff = !0, this._refreshValue();\n                    for (c = 0; ((c < d)); c += 1) {\n                        this._change(null, c);\n                    ;\n                    };\n                ;\n                    this._animateOff = !1;\n                };\n            ;\n            },\n            _value: function() {\n                var a = this.options.value;\n                return a = this._trimAlignValue(a), a;\n            },\n            _values: function(a) {\n                var b, c, d;\n                if (arguments.length) {\n                    return b = this.options.values[a], b = this._trimAlignValue(b), b;\n                }\n            ;\n            ;\n                c = this.options.values.slice();\n                for (d = 0; ((d < c.length)); d += 1) {\n                    c[d] = this._trimAlignValue(c[d]);\n                ;\n                };\n            ;\n                return c;\n            },\n            _trimAlignValue: function(a) {\n                if (((a <= this._valueMin()))) {\n                    return this._valueMin();\n                }\n            ;\n            ;\n                if (((a >= this._valueMax()))) {\n                    return this._valueMax();\n                }\n            ;\n            ;\n                var b = ((((this.options.step > 0)) ? this.options.step : 1)), c = ((((a - this._valueMin())) % b)), d = ((a - c));\n                return ((((((Math.abs(c) * 2)) >= b)) && (d += ((((c > 0)) ? b : -b))))), parseFloat(d.toFixed(5));\n            },\n            _valueMin: function() {\n                return this.options.min;\n            },\n            _valueMax: function() {\n                return this.options.max;\n            },\n            _refreshValue: function() {\n                var a = this.options.range, b = this.options, c = this, d = ((this._animateOff ? !1 : b.animate)), e, f = {\n                }, g, h, i, j;\n                ((((this.options.values && this.options.values.length)) ? this.handles.each(function(a, h) {\n                    e = ((((((c.values(a) - c._valueMin())) / ((c._valueMax() - c._valueMin())))) * 100)), f[((((c.JSBNG__orientation === \"horizontal\")) ? \"left\" : \"bottom\"))] = ((e + \"%\")), $(this).JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))](f, b.animate), ((((c.options.range === !0)) && ((((c.JSBNG__orientation === \"horizontal\")) ? (((((a === 0)) && c.range.JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))]({\n                        left: ((e + \"%\"))\n                    }, b.animate))), ((((a === 1)) && c.range[((d ? \"animate\" : \"css\"))]({\n                        width: ((((e - g)) + \"%\"))\n                    }, {\n                        queue: !1,\n                        duration: b.animate\n                    })))) : (((((a === 0)) && c.range.JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))]({\n                        bottom: ((e + \"%\"))\n                    }, b.animate))), ((((a === 1)) && c.range[((d ? \"animate\" : \"css\"))]({\n                        height: ((((e - g)) + \"%\"))\n                    }, {\n                        queue: !1,\n                        duration: b.animate\n                    })))))))), g = e;\n                }) : (h = this.value(), i = this._valueMin(), j = this._valueMax(), e = ((((j !== i)) ? ((((((h - i)) / ((j - i)))) * 100)) : 0)), f[((((c.JSBNG__orientation === \"horizontal\")) ? \"left\" : \"bottom\"))] = ((e + \"%\")), this.handle.JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))](f, b.animate), ((((((a === \"min\")) && ((this.JSBNG__orientation === \"horizontal\")))) && this.range.JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))]({\n                    width: ((e + \"%\"))\n                }, b.animate))), ((((((a === \"max\")) && ((this.JSBNG__orientation === \"horizontal\")))) && this.range[((d ? \"animate\" : \"css\"))]({\n                    width: ((((100 - e)) + \"%\"))\n                }, {\n                    queue: !1,\n                    duration: b.animate\n                }))), ((((((a === \"min\")) && ((this.JSBNG__orientation === \"vertical\")))) && this.range.JSBNG__stop(1, 1)[((d ? \"animate\" : \"css\"))]({\n                    height: ((e + \"%\"))\n                }, b.animate))), ((((((a === \"max\")) && ((this.JSBNG__orientation === \"vertical\")))) && this.range[((d ? \"animate\" : \"css\"))]({\n                    height: ((((100 - e)) + \"%\"))\n                }, {\n                    queue: !1,\n                    duration: b.animate\n                }))))));\n            }\n        }), $.extend($.ui.slider, {\n            version: \"1.8.22\"\n        });\n    }(jQuery);\n});\ndeferred(\"$lib/jquery_webcam.js\", function() {\n    (function($) {\n        var a = {\n            extern: null,\n            append: !0,\n            width: 320,\n            height: 240,\n            mode: \"callback\",\n            swffile: \"jscam.swf\",\n            quality: 85,\n            debug: function() {\n            \n            },\n            onCapture: function() {\n            \n            },\n            onTick: function() {\n            \n            },\n            onSave: function() {\n            \n            },\n            onCameraStart: function() {\n            \n            },\n            onCameraStop: function() {\n            \n            },\n            onLoad: function() {\n            \n            },\n            onDetect: function() {\n            \n            }\n        };\n        window.webcam = a, $.fn.webcam = function(b) {\n            if (((typeof b == \"object\"))) {\n                {\n                    var fin57keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin57i = (0);\n                    var c;\n                    for (; (fin57i < fin57keys.length); (fin57i++)) {\n                        ((c) = (fin57keys[fin57i]));\n                        {\n                            ((((b[c] !== undefined)) && (a[c] = b[c])));\n                        ;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            var d = ((((((((((((((((((((((((\"\\u003Cobject id=\\\"XwebcamXobjectX\\\" type=\\\"application/x-shockwave-flash\\\" data=\\\"\" + a.swffile)) + \"\\\" width=\\\"\")) + a.width)) + \"\\\" height=\\\"\")) + a.height)) + \"\\\"\\u003E\\u003Cparam name=\\\"movie\\\" value=\\\"\")) + a.swffile)) + \"\\\" /\\u003E\\u003Cparam name=\\\"FlashVars\\\" value=\\\"mode=\")) + a.mode)) + \"&amp;quality=\")) + a.quality)) + \"\\\" /\\u003E\\u003Cparam name=\\\"allowScriptAccess\\\" value=\\\"always\\\" /\\u003E\\u003C/object\\u003E\"));\n            ((((null !== a.extern)) ? $(a.extern)[((a.append ? \"append\" : \"html\"))](d) : this[((a.append ? \"append\" : \"html\"))](d))), (_register = function(b) {\n                var c = JSBNG__document.getElementById(\"XwebcamXobjectX\");\n                ((((c.capture !== undefined)) ? (a.capture = function(a) {\n                    try {\n                        return c.capture(a);\n                    } catch (b) {\n                    \n                    };\n                ;\n                }, a.save = function(a) {\n                    try {\n                        return c.save(a);\n                    } catch (b) {\n                    \n                    };\n                ;\n                }, a.onLoad()) : ((((0 == b)) ? a.debug(\"error\", \"Flash movie not yet registered!\") : window.JSBNG__setTimeout(_register, ((1000 * ((4 - b)))), ((b - 1)))))));\n            })(3);\n        };\n    })(jQuery);\n});\ndefine(\"app/ui/settings/with_cropper\", [\"module\",\"require\",\"exports\",\"$lib/jquery_ui.profile.js\",\"$lib/jquery_webcam.js\",], function(module, require, exports) {\n    function odd(a) {\n        return ((((a % 2)) != 0));\n    };\n;\n    function Cropper() {\n        this.dataFromBase64URL = function(a) {\n            return a.slice(((a.indexOf(\",\") + 1)));\n        }, this.determineCrop = function() {\n            var a = this.select(\"cropImageSelector\"), b = this.select(\"cropMaskSelector\"), c = a.offset(), d = b.offset(), e = ((this.attr.originalWidth / a.width())), f = ((((d.JSBNG__top - c.JSBNG__top)) + this.attr.maskPadding)), g = ((((d.left - c.left)) + this.attr.maskPadding)), h = ((((((d.left + this.attr.maskPadding)) > c.left)) ? ((d.left + this.attr.maskPadding)) : c.left)), i = ((((((d.JSBNG__top + this.attr.maskPadding)) > c.JSBNG__top)) ? ((d.JSBNG__top + this.attr.maskPadding)) : c.JSBNG__top)), j = ((((((((d.left + b.width())) - this.attr.maskPadding)) < ((c.left + a.width())))) ? ((((d.left + b.width())) - this.attr.maskPadding)) : ((c.left + a.width())))), k = ((((((((d.JSBNG__top + b.height())) - this.attr.maskPadding)) < ((c.JSBNG__top + a.height())))) ? ((((d.JSBNG__top + b.height())) - this.attr.maskPadding)) : ((c.JSBNG__top + a.height()))));\n            return {\n                maskWidth: ((b.width() - ((2 * this.attr.maskPadding)))),\n                maskHeight: ((b.height() - ((2 * this.attr.maskPadding)))),\n                imageLeft: Math.round(((e * ((((g >= 0)) ? g : 0))))),\n                imageTop: Math.round(((e * ((((f >= 0)) ? f : 0))))),\n                imageWidth: Math.round(((e * ((j - h))))),\n                imageHeight: Math.round(((e * ((k - i))))),\n                maskY: ((((f < 0)) ? -f : 0)),\n                maskX: ((((g < 0)) ? -g : 0))\n            };\n        }, this.determineImageType = function(a) {\n            return ((((a.substr(a.indexOf(\",\"), 4).indexOf(\",/9j\") == 0)) ? \"image/jpeg\" : \"image/png\"));\n        }, this.canvasToDataURL = function(a, b) {\n            return ((((b == \"image/jpeg\")) ? a.toDataURL(\"image/jpeg\", 235327) : a.toDataURL(\"image/png\")));\n        }, this.prepareCropImage = function() {\n            var a = this.select(\"cropImageSelector\");\n            this.$cropImage = $(\"\\u003Cimg\\u003E\"), this.$cropImage.attr(\"src\", a.attr(\"src\")), this.JSBNG__on(this.$cropImage, \"load\", this.cropImageReady);\n        }, this.cropImageReady = function() {\n            this.trigger(\"uiCropImageReady\");\n        }, this.clientsideCrop = function(a) {\n            var b = this.select(\"drawSurfaceSelector\"), c = this.select(\"cropImageSelector\"), d = this.determineImageType(c.attr(\"src\")), e = b[0].getContext(\"2d\"), f = a.maskHeight, g = a.maskWidth, h = a.maskX, i = a.maskY;\n            this.$cropImage.height(this.attr.originalHeight), this.$cropImage.width(this.attr.originalWidth);\n            if (((((a.imageWidth >= this.attr.maximumWidth)) || ((a.imageHeight >= this.attr.maximumHeight))))) {\n                f = this.attr.maximumHeight, g = this.attr.maximumWidth, h = Math.round(((a.maskX * ((this.attr.maximumWidth / a.imageWidth))))), i = Math.round(((a.maskY * ((this.attr.maximumHeight / a.imageHeight)))));\n            }\n        ;\n        ;\n            return e.canvas.width = g, e.canvas.height = f, e.fillStyle = \"white\", e.fillRect(0, 0, g, f), e.drawImage(this.$cropImage[0], a.imageLeft, a.imageTop, a.imageWidth, a.imageHeight, h, i, g, f), {\n                fileData: this.dataFromBase64URL(this.canvasToDataURL(b[0], d)),\n                offsetTop: 0,\n                offsetLeft: 0,\n                width: e.canvas.width,\n                height: e.canvas.height\n            };\n        }, this.cropDimensions = function() {\n            var a = this.select(\"cropMaskSelector\"), b = a.offset();\n            return {\n                JSBNG__top: b.JSBNG__top,\n                left: b.left,\n                maskWidth: a.width(),\n                maskHeight: a.height(),\n                cropWidth: ((a.width() - ((2 * this.attr.maskPadding)))),\n                cropHeight: ((a.height() - ((2 * this.attr.maskPadding))))\n            };\n        }, this.centerImage = function() {\n            var a = this.cropDimensions(), b = this.select(\"cropImageSelector\"), c = b.width(), d = b.height(), e = ((c / d));\n            ((((((((c >= d)) && ((a.cropWidth >= a.cropHeight)))) && ((e >= ((a.cropWidth / a.cropHeight)))))) ? (d = a.cropHeight, c = Math.round(((c * ((d / this.attr.originalHeight)))))) : (c = a.cropWidth, d = Math.round(((d * ((c / this.attr.originalWidth)))))))), b.width(c), b.height(d), b.offset({\n                JSBNG__top: ((((((a.maskHeight / 2)) - ((d / 2)))) + a.JSBNG__top)),\n                left: ((((((a.maskWidth / 2)) - ((c / 2)))) + a.left))\n            });\n        }, this.onDragStart = function(a, b) {\n            this.attr.imageStartOffset = this.select(\"cropImageSelector\").offset();\n        }, this.onDragHandler = function(a, b) {\n            this.select(\"cropImageSelector\").offset({\n                JSBNG__top: ((((this.attr.imageStartOffset.JSBNG__top + b.position.JSBNG__top)) - b.originalPosition.JSBNG__top)),\n                left: ((((this.attr.imageStartOffset.left + b.position.left)) - b.originalPosition.left))\n            });\n        }, this.onDragStop = function(a, b) {\n            this.select(\"cropOverlaySelector\").offset(this.select(\"cropMaskSelector\").offset());\n        }, this.imageLoaded = function(a, b) {\n            function h(a) {\n                var b = c.offset(), d = Math.round(((b.left + ((c.width() / 2))))), e = Math.round(((b.JSBNG__top + ((c.height() / 2))))), h = Math.round(((f * ((1 + ((a.value / 100))))))), i = Math.round(((g * ((1 + ((a.value / 100)))))));\n                h = ((odd(h) ? h += 1 : h)), i = ((odd(i) ? i += 1 : i)), c.height(h), c.width(i), c.offset({\n                    JSBNG__top: Math.round(((e - ((h / 2))))),\n                    left: Math.round(((d - ((i / 2)))))\n                });\n            };\n        ;\n            var c = this.select(\"cropImageSelector\"), d = this.select(\"cropOverlaySelector\"), e = this.select(\"cropperSliderSelector\");\n            this.attr.originalHeight = c.height(), this.attr.originalWidth = c.width(), this.centerImage();\n            var f = c.height(), g = c.width();\n            e.slider({\n                value: 0,\n                max: 100,\n                min: 0,\n                slide: function(a, b) {\n                    h(b);\n                }\n            }), e.slider(\"option\", \"value\", 0), d.draggable({\n                drag: this.onDragHandler.bind(this),\n                JSBNG__stop: this.onDragStop.bind(this),\n                start: this.onDragStart.bind(this),\n                containment: this.attr.cropContainerSelector\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(this.attr.cropImageSelector, \"load\", this.imageLoaded);\n        });\n    };\n;\n    require(\"$lib/jquery_ui.profile.js\"), require(\"$lib/jquery_webcam.js\"), module.exports = Cropper;\n});\ndefine(\"app/ui/settings/with_webcam\", [\"module\",\"require\",\"exports\",\"$lib/jquery_ui.profile.js\",\"$lib/jquery_webcam.js\",], function(module, require, exports) {\n    function Webcam() {\n        this.doJsCam = function() {\n            $(this.attr.webcamContainerSelector).webcam({\n                width: 320,\n                height: 240,\n                mode: \"callback\",\n                swffile: \"/flash/jscam.swf\",\n                onLoad: this.jsCamLoad.bind(this),\n                onCameraStart: this.jsCamCameraStart.bind(this),\n                onCameraStop: this.jsCamCameraStop.bind(this),\n                onCapture: this.jsCamCapture.bind(this),\n                onSave: this.jsCamSave.bind(this),\n                debug: this.jsCamDebug\n            });\n        }, this.jsCamLoad = function() {\n            var a = this.select(\"webcamCanvasSelector\")[0].getContext(\"2d\");\n            this.image = a.getImageData(0, 0, 320, 240), this.pos = 0;\n        }, this.jsCamCameraStart = function() {\n            this.select(\"captureWebcamSelector\").attr(\"disabled\", !1);\n        }, this.jsCamCameraStop = function() {\n            this.select(\"captureWebcamSelector\").attr(\"disabled\", !0);\n        }, this.jsCamCapture = function() {\n            window.webcam.save();\n        }, this.jsCamSave = function(a) {\n            var b = this.select(\"webcamCanvasSelector\")[0].getContext(\"2d\"), c = a.split(\";\"), d = this.image;\n            for (var e = 0; ((e < 320)); e++) {\n                var f = parseInt(c[e]);\n                d.data[((this.pos + 0))] = ((((f >> 16)) & 255)), d.data[((this.pos + 1))] = ((((f >> 8)) & 255)), d.data[((this.pos + 2))] = ((f & 255)), d.data[((this.pos + 3))] = 255, this.pos += 4;\n            };\n        ;\n            if (((this.pos >= 307200))) {\n                var g = this.select(\"webcamCanvasSelector\")[0], h = this.select(\"cropImageSelector\")[0];\n                b.putImageData(d, 0, 0), h.src = g.toDataURL(\"image/png\"), this.pos = 0, this.trigger(\"jsCamCapture\");\n            }\n        ;\n        ;\n        }, this.jsCamDebug = function(a, b) {\n        \n        };\n    };\n;\n    require(\"$lib/jquery_ui.profile.js\"), require(\"$lib/jquery_webcam.js\"), module.exports = Webcam;\n});\ndefine(\"app/utils/is_showing_avatar_options\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function() {\n        return $(\"body\").hasClass(\"show-avatar-options\");\n    };\n});\ndefine(\"app/ui/dialogs/profile_image_upload_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/settings/with_cropper\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/ui/settings/with_webcam\",\"app/utils/is_showing_avatar_options\",\"core/i18n\",\"$lib/jquery_ui.profile.js\",\"$lib/jquery_webcam.js\",], function(module, require, exports) {\n    function profileImageUpload() {\n        this.defaultAttrs({\n            webcamTitle: _(\"Smile!\"),\n            titleSelector: \".modal-title\",\n            profileImageCropDivSelector: \".image-upload-crop\",\n            profileImageWebcamDivSelector: \".image-upload-webcam\",\n            cancelSelector: \".profile-image-cancel\",\n            saveSelector: \".profile-image-save\",\n            cropperSliderSelector: \".cropper-slider\",\n            cropImageSelector: \".crop-image\",\n            cropMaskSelector: \".cropper-mask\",\n            cropOverlaySelector: \".cropper-overlay\",\n            captureWebcamSelector: \".profile-image-capture-webcam\",\n            webcamContainerSelector: \".webcam-container\",\n            webcamCanvasSelector: \".webcam-canvas\",\n            imageNameSelector: \"#choose-photo div.photo-selector input.file-name\",\n            imageDataSelector: \"#choose-photo div.photo-selector input.file-data\",\n            imageUploadSpinnerSelector: \".image-upload-spinner\",\n            maskPadding: 40,\n            JSBNG__top: 50,\n            uploadType: \"\",\n            drawSurfaceSelector: \".drawsurface\",\n            saveEvent: \"uiProfileImageSave\",\n            successEvent: \"dataProfileImageSuccess\",\n            errorEvent: \"dataProfileImageFailure\",\n            showSuccessMessage: !0,\n            maximumWidth: 256,\n            maximumHeight: 256,\n            fileName: \"\"\n        }), this.showCropper = function(a) {\n            this.setTitle(this.attr.originalTitle), this.select(\"captureWebcamSelector\").hide(), this.select(\"saveSelector\").show(), this.attr.fileName = a, this.clearForm(), JSBNG__document.body.JSBNG__focus(), this.trigger(\"uiShowingCropper\", {\n                scribeElement: this.getScribeElement()\n            });\n        }, this.setScribeElement = function(a) {\n            this.scribeElement = a;\n        }, this.getScribeElement = function() {\n            return ((this.scribeElement || \"upload\"));\n        }, this.reset = function() {\n            this.select(\"cropImageSelector\").attr(\"src\", \"\"), this.select(\"cropImageSelector\").attr(\"style\", \"\"), this.select(\"webcamContainerSelector\").empty(), this.select(\"cancelSelector\").show(), this.select(\"saveSelector\").attr(\"disabled\", !1).hide(), this.$node.removeClass(\"saving\"), this.select(\"profileImageWebcamDivSelector\").hide(), this.select(\"profileImageCropDivSelector\").hide(), this.select(\"captureWebcamSelector\").hide();\n        }, this.swapVisibility = function(a, b) {\n            this.$node.JSBNG__find(a).hide(), this.$node.JSBNG__find(b).show();\n        }, this.haveImageSelected = function(a, b) {\n            var c = $(this.attr.imageNameSelector).attr(\"value\"), d = ((\"data:image/jpeg;base64,\" + $(this.attr.imageDataSelector).attr(\"value\")));\n            this.gotImageData(b.uploadType, c, d), this.trigger(\"uiCloseDropdowns\");\n        }, this.gotImageData = function(a, b, c, d) {\n            ((((((a !== \"background\")) && ((this.attr.uploadType == a)))) && (this.JSBNG__openDialog(), this.trigger(\"uiUploadReceived\"), this.select(\"cropImageSelector\").attr(\"src\", c), this.select(\"profileImageCropDivSelector\").show(), this.setScribeElement(\"upload\"), this.showCropper(b), ((d && this.trigger(\"uiDropped\"))))));\n        }, this.JSBNG__openDialog = function() {\n            this.open(), this.reset();\n        }, this.setTitle = function(a) {\n            this.select(\"titleSelector\").text(a);\n        }, this.showWebcam = function(a, b) {\n            if (((this.attr.uploadType != b.uploadType))) {\n                return;\n            }\n        ;\n        ;\n            this.setTitle(this.attr.webcamTitle), this.JSBNG__openDialog(), this.select(\"profileImageWebcamDivSelector\").show(), this.select(\"captureWebcamSelector\").show(), this.doJsCam(), this.trigger(\"uiShowingWebcam\");\n        }, this.takePhoto = function() {\n            webcam.capture();\n        }, this.webcamCaptured = function() {\n            this.swapVisibility(this.attr.profileImageWebcamDivSelector, this.attr.profileImageCropDivSelector), this.setScribeElement(\"webcam\"), $(this.attr.imageDataSelector).attr(\"value\", this.dataFromBase64URL(this.select(\"cropImageSelector\").attr(\"src\"))), $(this.attr.imageNameSelector).attr(\"value\", \"webcam-cap.png\"), this.showCropper();\n        }, this.save = function(a, b) {\n            if (this.$node.hasClass(\"saving\")) {\n                return;\n            }\n        ;\n        ;\n            return this.prepareCropImage(), a.preventDefault(), !1;\n        }, this.readyToCrop = function() {\n            var a = this.determineCrop(), b = this.clientsideCrop(a);\n            b.fileName = this.attr.fileName, b.uploadType = this.attr.uploadType, b.scribeElement = this.getScribeElement(), this.trigger(\"uiImageSave\", b), this.enterSavingState();\n        }, this.enterSavingState = function() {\n            this.select(\"imageUploadSpinnerSelector\").css(\"height\", this.select(\"profileImageCropDivSelector\").height()), this.$node.addClass(\"saving\"), this.select(\"saveSelector\").attr(\"disabled\", !0), this.select(\"cancelSelector\").hide();\n        }, this.uploadSuccess = function(a, b) {\n            if (((((b && b.sourceEventData)) && ((b.sourceEventData.uploadType != this.attr.uploadType))))) {\n                return;\n            }\n        ;\n        ;\n            if (this.attr.showSuccessMessage) {\n                var c = {\n                    avatar: _(\"avatar\"),\n                    header: _(\"header\"),\n                    background: _(\"background\")\n                }, d = ((c[this.attr.uploadType] || this.attr.uploadType));\n                this.trigger(\"uiAlertBanner\", {\n                    message: _(\"Your {{uploadType}} was published successfully.\", {\n                        uploadType: d\n                    })\n                });\n            }\n        ;\n        ;\n            this.trigger(\"uiProfileImagePublished\", {\n                scribeElement: this.getScribeElement()\n            }), this.close();\n        }, this.uploadFailed = function(a, b) {\n            if (((((b && b.sourceEventData)) && ((b.sourceEventData.uploadType != this.attr.uploadType))))) {\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiProfileImageDialogFailure\", {\n                scribeElement: this.getScribeElement()\n            }), this.trigger(\"uiAlertBanner\", {\n                message: b.message\n            }), this.close();\n        }, this.clearForm = function() {\n            $(this.attr.imageDataSelector).removeAttr(\"value\"), $(this.attr.imageNameSelector).removeAttr(\"value\");\n        }, this.interceptGotProfileImageData = function(a, b) {\n            ((((((b.uploadType == \"header\")) && isShowingAvatarOptions())) && (b.uploadType = \"avatar\"))), this.gotImageData(b.uploadType, b.JSBNG__name, b.contents, b.wasDropped);\n        }, this.after(\"initialize\", function() {\n            this.attr.originalTitle = this.select(\"titleSelector\").text(), this.JSBNG__on(JSBNG__document, \"uiCropperWebcam\", this.showWebcam), this.JSBNG__on(JSBNG__document, \"uiImagePickerFileReady\", this.haveImageSelected), this.JSBNG__on(\"jsCamCapture\", this.webcamCaptured), this.JSBNG__on(this.select(\"captureWebcamSelector\"), \"click\", this.takePhoto), this.JSBNG__on(this.select(\"saveSelector\"), \"click\", this.save), this.JSBNG__on(\"uiCropImageReady\", this.readyToCrop), this.JSBNG__on(JSBNG__document, \"dataImageEnqueued\", this.close), this.JSBNG__on(JSBNG__document, \"uiImageUploadSuccess\", this.uploadSuccess), this.JSBNG__on(JSBNG__document, \"uiImageUploadFailure dataImageFailedToEnqueue\", this.uploadFailed), this.JSBNG__on(JSBNG__document, \"uiGotProfileImageData\", this.interceptGotProfileImageData), this.JSBNG__on(this.attr.cancelSelector, \"click\", function(a, b) {\n                this.close();\n            }), this.JSBNG__on(\"uiDialogClosed\", function() {\n                this.clearForm(), this.reset(), this.trigger(\"uiProfileImageDialogClose\");\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withCropper = require(\"app/ui/settings/with_cropper\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), withWebcam = require(\"app/ui/settings/with_webcam\"), isShowingAvatarOptions = require(\"app/utils/is_showing_avatar_options\"), _ = require(\"core/i18n\");\n    require(\"$lib/jquery_ui.profile.js\"), require(\"$lib/jquery_webcam.js\"), module.exports = defineComponent(profileImageUpload, withCropper, withDialog, withPosition, withWebcam);\n});\ndefine(\"app/ui/dialogs/profile_edit_error_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function profileEditErrorDialog() {\n        this.defaultAttrs({\n            okaySelector: \".ok-btn\",\n            messageSelector: \".profile-message\",\n            updateErrorMessage: _(\"There was an error updating your profile.\")\n        }), this.closeDialog = function(a, b) {\n            this.close();\n        }, this.showError = function(a, b) {\n            var c = ((b.message || this.attr.updateErrorMessage));\n            this.select(\"messageSelector\").html(c), this.open();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiShowProfileEditError\", this.showError), this.JSBNG__on(\"click\", {\n                okaySelector: this.closeDialog\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withDialog = require(\"app/ui/with_dialog\"), ProfileEditErrorDialog = defineComponent(profileEditErrorDialog, withDialog);\n    module.exports = ProfileEditErrorDialog;\n});\ndefine(\"app/ui/dialogs/profile_confirm_image_delete_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function profileConfirmImageDeleteDialog() {\n        this.defaultAttrs({\n            removeSelector: \".ok-btn\",\n            cancelSelector: \".cancel-btn\",\n            uploadType: \"\"\n        }), this.removeImage = function() {\n            this.disableButtons(), this.trigger(\"uiDeleteImage\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.triggerHideDeleteLink = function() {\n            this.trigger(\"uiHideDeleteLink\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.disableButtons = function() {\n            this.select(\"removeSelector\").attr(\"disabled\", !0), this.select(\"cancelSelector\").JSBNG__stop(!0, !0).fadeOut();\n        }, this.enableButtons = function() {\n            this.select(\"removeSelector\").removeAttr(\"disabled\"), this.select(\"cancelSelector\").JSBNG__stop(!0, !0).show();\n        }, this.showConfirm = function(a, b) {\n            ((((b.uploadType === this.attr.uploadType)) && this.open()));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiConfirmDeleteImage\", this.showConfirm), this.JSBNG__on(JSBNG__document, \"dataDeleteImageSuccess\", this.close), this.JSBNG__on(\"uiDialogClosed\", this.enableButtons), this.JSBNG__on(JSBNG__document, \"dataDeleteImageFailure\", this.enableButtons), this.JSBNG__on(JSBNG__document, \"dataDeleteImageSuccess\", this.triggerHideDeleteLink), this.JSBNG__on(\"click\", {\n                cancelSelector: this.close,\n                removeSelector: this.removeImage\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withDialog = require(\"app/ui/with_dialog\");\n    module.exports = defineComponent(profileConfirmImageDeleteDialog, withDialog);\n});\ndefine(\"app/ui/droppable_image\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_drop_events\",\"app/utils/image\",], function(module, require, exports) {\n    function droppableImage() {\n        this.defaultAttrs({\n            uploadType: \"\"\n        }), this.triggerGotProfileImageData = function(a, b) {\n            this.trigger(\"uiGotProfileImageData\", {\n                JSBNG__name: a,\n                contents: b,\n                uploadType: this.attr.uploadType,\n                wasDropped: !0\n            });\n        }, this.getDroppedImageData = function(a, b) {\n            if (!this.editing) {\n                return;\n            }\n        ;\n        ;\n            a.stopImmediatePropagation();\n            var c = b.file;\n            image.getFileData(c.JSBNG__name, c, this.triggerGotProfileImageData.bind(this));\n        }, this.allowDrop = function(a) {\n            this.editing = ((a.type === \"uiEditProfileStart\"));\n        }, this.after(\"initialize\", function() {\n            this.editing = !1, this.JSBNG__on(JSBNG__document, \"uiEditProfileStart uiEditProfileEnd\", this.allowDrop), this.JSBNG__on(\"uiDrop\", this.getDroppedImageData);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDropEvents = require(\"app/ui/with_drop_events\"), image = require(\"app/utils/image\");\n    module.exports = defineComponent(droppableImage, withDropEvents);\n});\ndefine(\"app/ui/profile_image_monitor\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/cookie\",\"core/clock\",], function(module, require, exports) {\n    function profileImageMonitor() {\n        this.defaultAttrs({\n            isProcessingCookie: \"image_processing_complete_key\",\n            pollInterval: 2000,\n            uploadType: \"avatar\",\n            spinnerUrl: undefined,\n            spinnerSelector: \".preview-spinner\",\n            thumbnailSelector: \"#avatar_preview\",\n            miniAvatarThumbnailSelector: \".mini-profile .avatar\",\n            deleteButtonSelector: \"#delete-image\",\n            deleteFormSelector: \"#profile_image_delete_form\"\n        }), this.startPollingUploadStatus = function(a, b) {\n            if (this.ignoreEvent(a, b)) {\n                return;\n            }\n        ;\n        ;\n            this.stopPollingUploadStatus(), this.uploadCheckTimer = clock.setIntervalEvent(\"uiCheckImageUploadStatus\", this.attr.pollInterval, {\n                uploadType: this.attr.uploadType,\n                key: cookie(this.attr.isProcessingCookie)\n            }), this.setThumbsLoading();\n        }, this.stopPollingUploadStatus = function() {\n            ((this.uploadCheckTimer && clock.JSBNG__clearInterval(this.uploadCheckTimer)));\n        }, this.setThumbsLoading = function(a, b) {\n            if (this.ignoreUIEvent(a, b)) {\n                return;\n            }\n        ;\n        ;\n            this.updateThumbs(this.attr.spinnerUrl);\n        }, this.updateThumbs = function(a) {\n            ((((this.attr.uploadType == \"avatar\")) ? ($(this.attr.thumbnailSelector).attr(\"src\", a), $(this.attr.miniAvatarThumbnailSelector).attr(\"src\", a)) : ((((this.attr.uploadType == \"header\")) && $(this.attr.thumbnailSelector).css(\"background-image\", ((a ? ((((\"url(\" + a)) + \")\")) : \"none\")))))));\n        }, this.checkUploadStatus = function(a, b) {\n            if ((((($(\"html\").hasClass(\"debug\") || ((b.JSBNG__status == \"processing\")))) || this.ignoreEvent(a, b)))) {\n                return;\n            }\n        ;\n        ;\n            this.handleUploadComplete(b.JSBNG__status), ((b.JSBNG__status && this.trigger(\"uiImageUploadSuccess\", b)));\n        }, this.handleUploadComplete = function(a) {\n            this.stopPollingUploadStatus(), cookie(this.attr.isProcessingCookie, null, {\n                path: \"/\"\n            }), this.updateThumbs(a);\n        }, this.handleImageDelete = function(a, b) {\n            if (this.ignoreEvent(a, b)) {\n                return;\n            }\n        ;\n        ;\n            this.handleUploadComplete(b.JSBNG__status);\n        }, this.handleFailedUpload = function(a, b) {\n            if (this.ignoreEvent(a, b)) {\n                return;\n            }\n        ;\n        ;\n            this.stopPollingUploadStatus(), this.restoreInitialThumbnail(), this.trigger(\"uiImageUploadFailure\", ((b || {\n            })));\n        }, this.deleteProfileImage = function(a, b) {\n            return a.preventDefault(), $(this.attr.deleteFormSelector).submit(), !1;\n        }, this.saveInitialThumbnail = function() {\n            ((((this.attr.uploadType == \"avatar\")) ? this.initialThumbnail = $(this.attr.thumbnailSelector).attr(\"src\") : ((((this.attr.uploadType == \"header\")) && (this.initialThumbnail = $(this.attr.thumbnailSelector).css(\"background-image\"))))));\n        }, this.restoreInitialThumbnail = function() {\n            ((((this.attr.uploadType == \"avatar\")) ? ($(this.attr.thumbnailSelector).attr(\"src\", this.initialThumbnail), $(this.attr.miniAvatarThumbnailSelector).attr(\"src\", this.initialThumbnail)) : ((((this.attr.uploadType == \"header\")) && $(this.attr.thumbnailSelector).css(\"background-image\", this.initialThumbnail)))));\n        }, this.ignoreEvent = function(a, b) {\n            return ((((b && b.sourceEventData)) && ((b.sourceEventData.uploadType != this.attr.uploadType))));\n        }, this.ignoreUIEvent = function(a, b) {\n            return ((b && ((b.uploadType != this.attr.uploadType))));\n        }, this.after(\"initialize\", function() {\n            this.attr.spinnerUrl = this.select(\"spinnerSelector\").attr(\"src\"), ((cookie(this.attr.isProcessingCookie) ? this.startPollingUploadStatus() : this.saveInitialThumbnail())), this.JSBNG__on(JSBNG__document, \"dataImageEnqueued\", this.startPollingUploadStatus), this.JSBNG__on(JSBNG__document, \"dataHasImageUploadStatus\", this.checkUploadStatus), this.JSBNG__on(JSBNG__document, \"dataDeleteImageSuccess\", this.handleImageDelete), this.JSBNG__on(JSBNG__document, \"dataFailedToGetImageUploadStatus\", this.handleFailedUpload), this.JSBNG__on(JSBNG__document, \"uiDeleteImage\", this.setThumbsLoading), this.JSBNG__on(this.attr.deleteButtonSelector, \"click\", this.deleteProfileImage);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), cookie = require(\"app/utils/cookie\"), clock = require(\"core/clock\");\n    module.exports = defineComponent(profileImageMonitor);\n});\ndefine(\"app/data/inline_edit_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function inlineEditScribe() {\n        this.defaultAttrs({\n            scribeContext: {\n                component: \"inline_edit\"\n            }\n        }), this.scribeAction = function(a) {\n            var b = utils.merge(this.attr.scribeContext, {\n                action: a\n            });\n            return function(a, c) {\n                this.scribe(b, c);\n            };\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiEditProfileStart\", this.scribeAction(\"edit\")), this.JSBNG__on(\"uiEditProfileCancel\", this.scribeAction(\"cancel\")), this.JSBNG__on(\"dataInlineEditSaveSuccess\", this.scribeAction(\"success\")), this.JSBNG__on(\"dataInlineEditSaveError\", this.scribeAction(\"error\"));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\"), InlineEditScribe = defineComponent(inlineEditScribe, withScribe);\n    module.exports = InlineEditScribe;\n});\ndefine(\"app/data/settings/profile_image_upload_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function profileImageUploadScribe() {\n        this.scribeEvent = function(a, b) {\n            this.scribe(utils.merge(a.scribeContext, b));\n        }, this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiUploadReceived\", {\n                element: \"upload\",\n                action: \"complete\"\n            }), this.scribeOnEvent(\"uiShowingWebcam\", {\n                element: \"webcam\",\n                action: \"impression\"\n            }), this.scribeOnEvent(\"jsCamCapture\", {\n                element: \"webcam\",\n                action: \"complete\"\n            }), this.scribeOnEvent(\"uiProfileImageDialogClose\", {\n                action: \"close\"\n            }), this.JSBNG__on(\"uiImageSave\", function(a, b) {\n                this.scribeEvent(b, {\n                    element: ((\"crop_\" + b.scribeElement)),\n                    action: \"complete\"\n                });\n            }), this.JSBNG__on(\"uiShowingCropper\", function(a, b) {\n                this.scribeEvent(b, {\n                    element: ((\"crop_\" + b.scribeElement)),\n                    action: \"impression\"\n                });\n            }), this.JSBNG__on(\"uiProfileImagePublished\", function(a, b) {\n                this.scribeEvent(b, {\n                    element: ((\"save_\" + b.scribeElement)),\n                    action: \"complete\"\n                });\n            }), this.JSBNG__on(\"uiProfileImageDialogFailure\", function(a, b) {\n                this.scribeEvent(b, {\n                    element: ((\"save_\" + b.scribeElement)),\n                    action: \"failure\"\n                });\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\"), ProfileImageUploadScribe = defineComponent(profileImageUploadScribe, withScribe);\n    module.exports = ProfileImageUploadScribe;\n});\ndefine(\"app/data/drag_and_drop_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function dragAndDropScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiDropped\", {\n                action: \"drag_and_drop\"\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(dragAndDropScribe, withScribe);\n});\ndefine(\"app/ui/settings/change_photo\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dropdown\",\"app/data/with_scribe\",\"app/utils/image\",\"core/utils\",\"core/i18n\",], function(module, require, exports) {\n    function changePhoto() {\n        this.defaultAttrs({\n            uploadType: \"avatar\",\n            swfSelector: \"div.webcam-detect.swf-container\",\n            toggler: \"button.choose-photo-button\",\n            chooseExistingSelector: \"#photo-choose-existing\",\n            chooseWebcamSelector: \"#photo-choose-webcam\",\n            deleteImageSelector: \"#photo-delete-image\",\n            itemSelector: \"li.dropdown-link\",\n            firstItemSelector: \"li.dropdown-link:nth-child(2)\",\n            caretSelector: \".dropdown-caret\",\n            photoSelector: \"div.photo-selector\",\n            showDeleteSuccessMessage: !0,\n            alwaysOpen: !1,\n            confirmDelete: !1\n        }), this.webcamDetectorSwfPath = \"/flash/WebcamDetector.swf\", this.isUsingFlashUploader = function() {\n            return ((image.hasFlash() && !image.hasFileReader()));\n        }, this.isFirefox36 = function() {\n            var a = $.browser;\n            return ((a.mozilla && ((a.version.slice(0, 3) == \"1.9\"))));\n        }, this.needsMenuHeldOpen = function() {\n            return ((this.isUsingFlashUploader() || this.isFirefox36()));\n        }, this.openWebCamDialog = function(a) {\n            a.preventDefault(), ((this.needsMenuHeldOpen() && (this.ignoreCloseEvent = !1))), this.trigger(\"uiCropperWebcam\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.webcamDetected = function() {\n            var a = this.select(\"chooseWebcamSelector\");\n            this.updateDropdownItemVisibility(a, !a.hasClass(\"no-webcam\"));\n        }, this.dropdownOpened = function(a, b) {\n            var c = ((((b && b.scribeContext)) || this.attr.eventData.scribeContext));\n            this.scribe(utils.merge(c, {\n                action: \"open\"\n            })), ((this.needsMenuHeldOpen() && (this.ignoreCloseEvent = !0)));\n        }, this.setupWebcamDetection = function() {\n            var a = this.select(\"swfSelector\");\n            ((image.hasFlash() && (((window.webcam && (window.webcam.onDetect = this.webcamDetected.bind(this)))), a.css(\"width\", \"0\"), a.css(\"height\", \"0\"), a.css(\"overflow\", \"hidden\"), a.flash({\n                swf: this.webcamDetectorSwfPath,\n                height: 1,\n                width: 1,\n                wmode: \"transparent\",\n                AllowScriptAccess: \"sameDomain\"\n            }))));\n        }, this.deleteImage = function() {\n            if (((this.attr.uploadType !== \"background\"))) {\n                ((this.needsMenuHeldOpen() && (this.ignoreCloseEvent = !1)));\n                var a = ((this.attr.confirmDelete ? \"uiConfirmDeleteImage\" : \"uiDeleteImage\"));\n                this.trigger(a, {\n                    uploadType: this.attr.uploadType\n                });\n            }\n             else this.hideFileName();\n        ;\n        ;\n            ((this.attr.confirmDelete || this.hideDeleteLink()));\n        }, this.handleDeleteImageSuccess = function(a, b) {\n            ((((b.message && this.attr.showDeleteSuccessMessage)) && this.trigger(\"uiAlertBanner\", b)));\n        }, this.handleDeleteImageFailure = function(a, b) {\n            if (((b.sourceEventData.uploadType != this.attr.uploadType))) {\n                return;\n            }\n        ;\n        ;\n            b.message = ((b.message || _(\"Sorry! Something went wrong deleting your {{uploadType}}. Please try again.\", this.attr))), this.trigger(\"uiAlertBanner\", b), this.showDeleteLink();\n        }, this.showDeleteLinkForTargetedButton = function(a, b) {\n            ((((((b.uploadType == this.attr.uploadType)) && ((b.uploadType == \"background\")))) && this.showDeleteLink()));\n        }, this.showDeleteLink = function() {\n            this.updateDropdownItemVisibility(this.select(\"deleteImageSelector\"), !0);\n        }, this.hideDeleteLink = function(a, b) {\n            if (((((b && b.uploadType)) && ((b.uploadType !== this.attr.uploadType))))) {\n                return;\n            }\n        ;\n        ;\n            this.updateDropdownItemVisibility(this.select(\"deleteImageSelector\"), !1);\n        }, this.showFileName = function(a, b) {\n            this.$node.siblings(\".display-file-requirement\").hide(), this.$node.siblings(\".display-file-name\").text(b.fileName).show();\n        }, this.hideFileName = function() {\n            this.$node.siblings(\".display-file-requirement\").show(), this.$node.siblings(\".display-file-name\").hide();\n        }, this.updateDropdownItemVisibility = function(a, b) {\n            ((b ? a.show() : a.hide())), this.updateMenuHierarchy();\n        }, this.upliftFilePicker = function() {\n            var a = this.select(\"photoSelector\");\n            this.select(\"toggler\").hide(), a.JSBNG__find(\"button\").attr(\"disabled\", !1), a.appendTo(this.$node);\n        }, this.moveFilePickerBackIntoMenu = function() {\n            var a = this.select(\"photoSelector\");\n            a.appendTo(this.select(\"chooseExistingSelector\")), this.select(\"toggler\").show();\n        }, this.updateMenuHierarchy = function() {\n            if (this.attr.alwaysOpen) {\n                return;\n            }\n        ;\n        ;\n            ((((this.availableDropdownItems().length == 1)) ? this.upliftFilePicker() : this.moveFilePickerBackIntoMenu()));\n        }, this.availableDropdownItems = function() {\n            return this.select(\"itemSelector\").filter(function() {\n                return (($(this).css(\"display\") != \"none\"));\n            });\n        }, this.addCaretHover = function() {\n            this.select(\"caretSelector\").addClass(\"hover\");\n        }, this.removeCaretHover = function() {\n            this.select(\"caretSelector\").removeClass(\"hover\");\n        }, this.after(\"initialize\", function() {\n            ((((this.attr.uploadType == \"avatar\")) && this.setupWebcamDetection())), this.JSBNG__on(JSBNG__document, \"click\", this.close), this.JSBNG__on(JSBNG__document, \"uiNavigate\", this.close), this.JSBNG__on(JSBNG__document, \"uiImageUploadSuccess\", this.showDeleteLink), this.JSBNG__on(JSBNG__document, \"uiImagePickerFileReady\", this.showDeleteLinkForTargetedButton), this.JSBNG__on(JSBNG__document, \"uiFileNameReady\", this.showFileName), this.JSBNG__on(JSBNG__document, \"uiHideDeleteLink\", this.hideDeleteLink), this.JSBNG__on(JSBNG__document, \"dataImageEnqueued\", this.hideDeleteLink), this.JSBNG__on(JSBNG__document, \"dataDeleteImageSuccess\", this.handleDeleteImageSuccess), this.JSBNG__on(JSBNG__document, \"dataDeleteImageFailure\", this.handleDeleteImageFailure), this.JSBNG__on(\"uiDropdownOpened\", this.dropdownOpened), this.JSBNG__on(\"click\", {\n                chooseWebcamSelector: this.openWebCamDialog,\n                deleteImageSelector: this.deleteImage\n            }), this.JSBNG__on(\"mouseover\", {\n                firstItemSelector: this.addCaretHover\n            }), this.JSBNG__on(\"mouseout\", {\n                firstItemSelector: this.removeCaretHover\n            });\n            if (this.attr.alwaysOpen) {\n                var a = [\"toggleDisplay\",\"closeDropdown\",\"closeAndRestoreFocus\",\"close\",];\n                a.forEach(function(a) {\n                    this.around(a, $.noop);\n                }.bind(this));\n            }\n        ;\n        ;\n            this.around(\"toggleDisplay\", function(a, b) {\n                var c = this.availableDropdownItems();\n                ((((((((c.length == 1)) && !this.$node.hasClass(\"open\"))) && !this.isItemClick(b))) ? c.click() : a(b)));\n            }), this.updateMenuHierarchy();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDropdown = require(\"app/ui/with_dropdown\"), withScribe = require(\"app/data/with_scribe\"), image = require(\"app/utils/image\"), utils = require(\"core/utils\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(changePhoto, withDropdown, withScribe);\n});\ndefine(\"app/ui/image_uploader\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/image\",\"app/ui/with_image_selection\",\"app/data/with_scribe\",\"core/i18n\",], function(module, require, exports) {\n    function imageUploader() {\n        this.defaults = {\n            swfHeight: 30,\n            swfWidth: 274,\n            uploadType: \"\",\n            fileNameTextSelector: \".photo-file-name\"\n        }, this.updateFileNameText = function(a, b) {\n            var c = this.truncate(b.fileName, 18);\n            this.select(\"fileNameSelector\").val(b.fileName), this.select(\"fileNameTextSelector\").text(c), this.trigger(\"uiFileNameReady\", {\n                fileName: c\n            });\n        }, this.addFileError = function(a) {\n            ((((a == \"tooLarge\")) ? this.trigger(\"uiAlertBanner\", {\n                message: this.attr.fileTooBigMessage\n            }) : ((((((a == \"notImage\")) || ((a == \"ioError\")))) && this.trigger(\"uiAlertBanner\", {\n                message: _(\"You did not select an image.\")\n            }))))), this.scribe({\n                component: \"profile_image\",\n                element: \"upload\",\n                action: \"failure\"\n            }), ((((typeof this.attr.onError == \"function\")) && this.attr.onError())), this.reset();\n        }, this.gotImageData = function(a, b) {\n            this.gotResizedImageData(a, b);\n        }, this.truncate = function(a, b) {\n            if (((a.length <= b))) {\n                return a;\n            }\n        ;\n        ;\n            var c = Math.ceil(((b / 2))), d = Math.floor(((b / 2))), e = a.substr(0, c), f = a.substr(((a.length - d)), d);\n            return ((((e + \"\\u2026\")) + f));\n        }, this.loadSwf = function(a, b) {\n            image.loadPhotoSelectorSwf(this.select(\"swfSelector\"), a, b, this.attr.swfHeight, this.attr.swfWidth, this.attr.maxSizeInBytes);\n        }, this.initializeButton = function() {\n            this.select(\"buttonSelector\").attr(\"disabled\", !1);\n        }, this.resetUploader = function() {\n            this.select(\"fileNameSelector\").val(\"\"), this.select(\"fileNameTextSelector\").text(_(\"No file selected\"));\n        }, this.after(\"initialize\", function() {\n            this.maxSizeInBytes = this.attr.maxSizeInBytes, this.initializeButton(), this.JSBNG__on(this.$node, \"uiTweetBoxShowPreview\", this.updateFileNameText), this.JSBNG__on(\"uiResetUploader\", this.resetUploader);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), image = require(\"app/utils/image\"), withImageSelection = require(\"app/ui/with_image_selection\"), withScribe = require(\"app/data/with_scribe\"), _ = require(\"core/i18n\"), ImageUploader = defineComponent(imageUploader, withImageSelection, withScribe);\n    module.exports = ImageUploader;\n});\ndefine(\"app/ui/inline_profile_editing_initializor\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/image\",], function(module, require, exports) {\n    function inlineProfileEditingInitializor() {\n        this.defaultAttrs({\n            profileEditingCSSBundle: \"\"\n        }), this.supportsInlineEditing = function() {\n            return image.supportsCropper();\n        }, this.initializeInlineProfileEditing = function(a, b) {\n            ((this.supportsInlineEditing() ? using(((\"css!\" + this.attr.profileEditingCSSBundle)), this.triggerStart.bind(this, b.scribeElement)) : this.trigger(\"uiNavigate\", {\n                href: \"/settings/profile\"\n            })));\n        }, this.triggerStart = function(a) {\n            this.trigger(\"uiEditProfileStart\", {\n                scribeContext: {\n                    element: a\n                }\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiEditProfileInitialize\", this.initializeInlineProfileEditing);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), image = require(\"app/utils/image\");\n    module.exports = defineComponent(inlineProfileEditingInitializor);\n});\ndefine(\"app/utils/hide_or_show_divider\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function(b, c, d, e) {\n        var f = b.JSBNG__find(c), g = !!$.trim(b.JSBNG__find(d).text()), h = !!$.trim(b.JSBNG__find(e).text());\n        ((((g && h)) ? f.show() : f.hide()));\n    };\n});\ndefine(\"app/ui/with_inline_image_options\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_upload_photo_affordance\",\"app/utils/is_showing_avatar_options\",], function(module, require, exports) {\n    function withInlineImageOptions() {\n        compose.mixin(this, [withUploadPhotoAffordance,]), this.defaultAttrs({\n            editHeaderSelector: \".edit-header-target\",\n            editAvatarSelector: \".profile-picture\",\n            profileHeaderMaskSelector: \".profile-header-mask\",\n            cancelOptionsSelector: \".cancel-options\",\n            changePhotoSelector: \"#choose-photo\",\n            changeHeaderSelector: \"#choose-header\"\n        }), this.optionsEnabled = function() {\n            this.canShowOptions = !0;\n        }, this.optionsDisabled = function() {\n            this.canShowOptions = !1;\n        }, this.toggleAvatarOptions = function(a) {\n            a.preventDefault(), ((isShowingAvatarOptions() ? this.hideAvatarOptions() : this.showAvatarOptions()));\n        }, this.showAvatarOptions = function() {\n            ((((this.canShowOptions && !isShowingAvatarOptions())) && (this.$body.addClass(\"show-avatar-options\"), this.select(\"changePhotoSelector\").trigger(\"uiDropdownOpened\"))));\n        }, this.hideAvatarOptions = function() {\n            this.$body.removeClass(\"show-avatar-options\");\n        }, this.showHeaderOptions = function() {\n            ((((this.canShowOptions && !this.$body.hasClass(\"show-header-options\"))) && (this.$body.addClass(\"show-header-options\"), this.select(\"changeHeaderSelector\").trigger(\"uiDropdownOpened\"))));\n        }, this.hideHeaderOptions = function() {\n            this.$body.removeClass(\"show-header-options\");\n        }, this.hideOptions = function() {\n            this.hideHeaderOptions(), this.hideAvatarOptions();\n        }, this.after(\"initialize\", function() {\n            this.$body = $(\"body\"), this.JSBNG__on(\"click\", {\n                editAvatarSelector: this.toggleAvatarOptions,\n                editHeaderSelector: this.showHeaderOptions,\n                profileHeaderMaskSelector: this.hideOptions,\n                cancelOptionsSelector: this.hideOptions\n            }), this.JSBNG__on(\"uiEditProfileStart\", this.optionsEnabled), this.JSBNG__on(\"uiEditProfileEnd\", this.optionsDisabled), this.JSBNG__on(\"uiProfileHeaderUpdated\", this.hideOptions), this.JSBNG__on(\"uiProfileAvatarUpdated\", this.hideOptions), this.JSBNG__on(JSBNG__document, \"uiShortcutEsc\", this.hideOptions), this.JSBNG__on(JSBNG__document, \"uiShowEditAvatarOptions\", this.showAvatarOptions);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withUploadPhotoAffordance = require(\"app/ui/with_upload_photo_affordance\"), isShowingAvatarOptions = require(\"app/utils/is_showing_avatar_options\");\n    module.exports = withInlineImageOptions;\n});\ndefine(\"app/ui/with_inline_image_editing\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/utils/hide_or_show_divider\",\"app/ui/with_inline_image_options\",], function(module, require, exports) {\n    function withInlineImageEditing() {\n        compose.mixin(this, [withInlineImageOptions,]), this.defaultAttrs({\n            headerImageUploadDialogSelector: \"#header_image_upload_dialog\",\n            headerCropperSelector: \"#header_image_upload_dialog .cropper-mask\",\n            avatarSelector: \".avatar:first\",\n            avatarContainerSelector: \".profile-picture:first\",\n            profileHeaderInnerSelector: \".profile-header-inner:first\",\n            avatarPlaceholderSelector: \".profile-picture-placeholder\",\n            removeFromPreview: \".profile-editing-dialogs, .edit-header-target, input, label, textarea, .controls, .inline-edit-icon\"\n        }), this.editHeaderModeOn = function() {\n            this.addPreviewToHeaderUpload(), this.$body.addClass(\"profile-header-editing\"), this.hideHeaderOptions();\n        }, this.editHeaderModeOff = function() {\n            this.$body.removeClass(\"profile-header-editing\"), this.removeHeaderPreview();\n        }, this.removeHeaderPreview = function() {\n            ((this.$headerPreview && this.$headerPreview.remove()));\n        }, this.addPreviewToHeaderUpload = function() {\n            this.removeHeaderPreview(), this.trigger(\"uiNeedsTextPreview\");\n            var a = this.$headerPreview = this.$node.clone();\n            a.JSBNG__find(this.attr.profileHeaderInnerSelector).css(\"background-image\", \"none\"), hideOrShowDivider(a, this.attr.dividerSelector, this.attr.locationSelector, this.attr.urlProfileFieldSelector), a.JSBNG__find(this.attr.removeFromPreview).remove(), this.select(\"headerCropperSelector\").prepend(a);\n        }, this.updateImage = function(a, b) {\n            var c = ((\"data:image/jpeg;base64,\" + b.fileData));\n            ((((b.uploadType === \"header\")) ? this.updateHeader(c) : ((((b.uploadType === \"avatar\")) && (this.select(\"avatarSelector\").attr(\"src\", c), this.showAvatar())))));\n        }, this.updateHeader = function(a) {\n            this.select(\"profileHeaderInnerSelector\").css({\n                \"background-size\": \"100% 100%\",\n                \"background-image\": ((((\"url(\" + a)) + \")\"))\n            }), this.trigger(\"uiProfileHeaderUpdated\");\n        }, this.useDefaultHeader = function() {\n            var a = this.select(\"profileHeaderInnerSelector\").attr(\"data-default-background-image\");\n            this.updateHeader(a);\n        }, this.showAvatar = function() {\n            this.select(\"avatarContainerSelector\").removeClass(\"hidden\"), this.select(\"avatarPlaceholderSelector\").addClass(\"hidden\"), this.trigger(\"uiProfileAvatarUpdated\");\n        }, this.showAvatarPlaceholder = function() {\n            this.select(\"avatarContainerSelector\").addClass(\"hidden\"), this.select(\"avatarPlaceholderSelector\").removeClass(\"hidden\"), this.trigger(\"uiProfileAvatarUpdated\");\n        }, this.showDefaultImage = function(a, b) {\n            ((this.isOfType(\"avatar\", b) && this.showAvatarPlaceholder())), ((this.isOfType(\"header\", b) && this.useDefaultHeader()));\n        }, this.isOfType = function(a, b) {\n            return ((((b && b.sourceEventData)) && ((b.sourceEventData.uploadType === a))));\n        }, this.after(\"initialize\", function() {\n            this.$body = $(\"body\"), this.JSBNG__on(\"uiDialogOpened\", {\n                headerImageUploadDialogSelector: this.editHeaderModeOn\n            }), this.JSBNG__on(\"uiDialogClosed\", {\n                headerImageUploadDialogSelector: this.editHeaderModeOff\n            }), this.JSBNG__on(JSBNG__document, \"uiImageSave\", this.updateImage), this.JSBNG__on(JSBNG__document, \"dataDeleteImageSuccess\", this.showDefaultImage);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), hideOrShowDivider = require(\"app/utils/hide_or_show_divider\"), withInlineImageOptions = require(\"app/ui/with_inline_image_options\");\n    module.exports = withInlineImageEditing;\n});\ndefine(\"app/ui/inline_profile_editing\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"core/clock\",\"app/utils/hide_or_show_divider\",\"app/ui/with_scrollbar_width\",\"app/utils/params\",\"app/ui/tooltips\",\"app/ui/with_inline_image_editing\",], function(module, require, exports) {\n    function inlineProfileEditing() {\n        this.defaultAttrs({\n            cancelProfileButtonSelector: \".cancel-profile-btn\",\n            saveProfileButtonSelector: \".save-profile-btn\",\n            saveProfileFooterSelector: \".save-profile-footer\",\n            bioProfileFieldSelector: \".bio.profile-field\",\n            locationSelector: \".JSBNG__location\",\n            urlProfileFieldSelector: \".url .profile-field\",\n            dividerSelector: \".location-and-url .divider\",\n            anchorSelector: \"a\",\n            ignoreInTabIndex: \".js-tooltip\",\n            tooltipSelector: \".js-tooltip\",\n            updateSaveMessage: _(\"Your profile has been saved.\"),\n            scrollResetDuration: 300\n        }), this.saveProfile = function(a, b) {\n            a.preventDefault(), this.trigger(\"uiEditProfileSaveFields\"), this.trigger(\"uiEditProfileSave\");\n        }, this.cancelProfileEditing = function(a, b) {\n            a.preventDefault();\n            var c = $(a.target).attr(\"data-scribe-element\");\n            this.trigger(\"uiEditProfileCancel\", {\n                scribeContext: {\n                    element: c\n                }\n            }), this.trigger(\"uiEditProfileEnd\");\n        }, this.isEditing = function() {\n            return this.$body.hasClass(\"profile-editing\");\n        }, this.editModeOn = function() {\n            $(\"html, body\").animate({\n                scrollTop: 0\n            }, this.attr.scrollResetDuration), this.calculateScrollbarWidth(), this.$body.addClass(\"profile-editing\");\n        }, this.editModeOff = function() {\n            this.$body.removeClass(\"profile-editing\");\n        }, this.fieldEditingModeOn = function() {\n            this.$body.addClass(\"profile-field-editing\"), this.select(\"dividerSelector\").show();\n        }, this.fieldEditingModeOff = function() {\n            this.$body.removeClass(\"profile-field-editing\"), hideOrShowDivider(this.$node, this.attr.dividerSelector, this.attr.locationSelector, this.attr.urlProfileFieldSelector);\n        }, this.catchAnchorClicks = function(a) {\n            ((this.isEditing() && a.preventDefault()));\n        }, this.disabledTabbing = function() {\n            this.select(\"ignoreInTabIndex\").attr(\"tabindex\", \"-1\");\n        }, this.enableTabbing = function() {\n            this.select(\"ignoreInTabIndex\").removeAttr(\"tabindex\");\n        }, this.saving = function() {\n            this.select(\"saveProfileFooterSelector\").addClass(\"saving\");\n        }, this.handleError = function(a, b) {\n            this.doneSaving(), this.fieldEditingModeOn(), this.trigger(\"uiShowProfileEditError\", b);\n        }, this.savingError = function(a, b) {\n            clock.setTimeoutEvent(\"uiHandleSaveError\", 1000, {\n                message: b.message\n            });\n        }, this.saveSuccess = function(a, b) {\n            this.doneSaving(), this.trigger(\"uiShowMessage\", {\n                message: this.attr.updateSaveMessage\n            });\n        }, this.doneSaving = function() {\n            this.select(\"saveProfileFooterSelector\").removeClass(\"saving\");\n        }, this.disableTooltips = function() {\n            this.select(\"tooltipSelector\").tooltip(\"disable\").tooltip(\"hide\");\n        }, this.enableTooltips = function() {\n            this.select(\"tooltipSelector\").tooltip(\"enable\");\n        }, this.finishedProcessing = function(a, b) {\n            ((((b && b.linkified_description)) && this.select(\"bioProfileFieldSelector\").html(b.linkified_description))), ((((b && b.user_url)) && this.select(\"urlProfileFieldSelector\").html(b.user_url))), this.trigger(\"uiEditProfileEnd\");\n        }, this.after(\"initialize\", function() {\n            this.$body = $(\"body\"), this.JSBNG__on(\"click\", {\n                cancelProfileButtonSelector: this.cancelProfileEditing,\n                saveProfileButtonSelector: this.saveProfile,\n                anchorSelector: this.catchAnchorClicks\n            }), this.JSBNG__on(\"uiEditProfileStart\", this.editModeOn), this.JSBNG__on(\"uiEditProfileEnd\", this.editModeOff), this.JSBNG__on(\"uiEditProfileStart\", this.disableTooltips), this.JSBNG__on(\"uiEditProfileEnd\", this.enableTooltips), this.JSBNG__on(\"uiEditProfileStart\", this.fieldEditingModeOn), this.JSBNG__on(\"uiEditProfileSave\", this.fieldEditingModeOff), this.JSBNG__on(\"uiEditProfileEnd\", this.fieldEditingModeOff), this.JSBNG__on(\"uiEditProfileStart\", this.disabledTabbing), this.JSBNG__on(\"uiEditProfileEnd\", this.enableTabbing), this.JSBNG__on(JSBNG__document, \"dataInlineEditSaveStarted\", this.saving), this.JSBNG__on(JSBNG__document, \"dataInlineEditSaveSuccess\", this.saveSuccess), this.JSBNG__on(JSBNG__document, \"dataInlineEditSaveError\", this.savingError), this.JSBNG__on(JSBNG__document, \"uiHandleSaveError\", this.handleError), this.JSBNG__on(JSBNG__document, \"dataInlineEditSaveSuccess\", this.finishedProcessing);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), clock = require(\"core/clock\"), hideOrShowDivider = require(\"app/utils/hide_or_show_divider\"), withScrollbarWidth = require(\"app/ui/with_scrollbar_width\"), params = require(\"app/utils/params\"), Tooltips = require(\"app/ui/tooltips\"), withInlineImageEditing = require(\"app/ui/with_inline_image_editing\");\n    module.exports = defineComponent(inlineProfileEditing, withScrollbarWidth, withInlineImageEditing);\n});\ndefine(\"app/data/settings\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_auth_token\",\"app/data/with_data\",], function(module, require, exports) {\n    var defineComponent = require(\"core/component\"), withAuthToken = require(\"app/data/with_auth_token\"), withData = require(\"app/data/with_data\");\n    var SettingsData = defineComponent(settingsData, withData, withAuthToken);\n    function settingsData() {\n        this.defaultAttrs({\n            ajaxTimeout: 6000,\n            noShowError: true\n        });\n        this.verifyUsername = function(JSBNG__event, data) {\n            this.get({\n                url: \"/users/username_available\",\n                eventData: data,\n                data: data,\n                success: \"dataUsernameResult\",\n                error: \"dataUsernameError\"\n            });\n        };\n        this.verifyEmail = function(JSBNG__event, data) {\n            this.get({\n                url: \"/users/email_available\",\n                eventData: data,\n                data: data,\n                success: \"dataEmailResult\",\n                error: \"dataEmailError\"\n            });\n        };\n        this.cancelPendingEmail = function(JSBNG__event, data) {\n            var success = function(json) {\n                this.trigger(\"dataCancelEmailSuccess\", json);\n            };\n            var error = function(request) {\n                this.trigger(\"dataCancelEmailFailure\", request);\n            };\n            this.post({\n                url: data.url,\n                data: this.addAuthToken(),\n                success: success.bind(this),\n                error: error.bind(this)\n            });\n        };\n        this.resendPendingEmail = function(JSBNG__event, data) {\n            var success = function(json) {\n                this.trigger(\"dataResendEmailSuccess\", json);\n            };\n            var error = function(request) {\n                this.trigger(\"dataResendEmailFailure\", request);\n            };\n            this.post({\n                url: data.url,\n                data: this.addAuthToken(),\n                success: success.bind(this),\n                error: error.bind(this)\n            });\n        };\n        this.resendPassword = function(JSBNG__event, data) {\n            this.post({\n                url: data.url,\n                data: this.addAuthToken(),\n                dataType: \"text\",\n                success: function() {\n                    this.trigger(\"dataForgotPasswordSuccess\", {\n                    });\n                }.bind(this)\n            });\n        };\n        this.deleteGeoData = function(JSBNG__event) {\n            var error = function(request) {\n                this.trigger(\"dataGeoDeletionError\", {\n                });\n            };\n            this.post({\n                url: \"/account/delete_location_data\",\n                dataType: \"text\",\n                data: this.addAuthToken(),\n                error: error.bind(this)\n            });\n        };\n        this.revokeAuthority = function(JSBNG__event, data) {\n            this.post({\n                url: \"/oauth/revoke\",\n                eventData: data,\n                data: data,\n                success: \"dataOAuthRevokeResultSuccess\",\n                error: \"dataOAuthRevokeResultFailure\"\n            });\n        };\n        this.uploadImage = function(JSBNG__event, data) {\n            var uploadTypeToUrl = {\n                header: \"/settings/profile/upload_profile_header\",\n                avatar: \"/settings/profile/profile_image_update\"\n            };\n            data.page_context = this.attr.pageName;\n            data.section_context = this.attr.sectionName;\n            this.post({\n                url: uploadTypeToUrl[data.uploadType],\n                eventData: data,\n                data: data,\n                success: \"dataImageEnqueued\",\n                error: \"dataImageFailedToEnqueue\"\n            });\n        };\n        this.checkImageUploadStatus = function(JSBNG__event, data) {\n            var uploadTypeToUrl = {\n                header: \"/settings/profile/check_header_processing_complete\",\n                avatar: \"/settings/profile/swift_check_processing_complete\"\n            };\n            this.get({\n                url: uploadTypeToUrl[data.uploadType],\n                eventData: data,\n                data: data,\n                headers: {\n                    \"X-Retry-After\": true\n                },\n                success: \"dataHasImageUploadStatus\",\n                error: \"dataFailedToGetImageUploadStatus\"\n            });\n        };\n        this.deleteImage = function(JSBNG__event, data) {\n            var uploadTypeToUrl = {\n                header: \"/settings/profile/destroy_profile_header\",\n                avatar: \"/settings/profile\"\n            };\n            data.page_context = this.attr.pageName;\n            data.section_context = this.attr.sectionName;\n            this.destroy({\n                url: uploadTypeToUrl[data.uploadType],\n                eventData: data,\n                data: data,\n                success: \"dataDeleteImageSuccess\",\n                error: \"dataDeleteImageFailure\"\n            });\n        };\n        this.resendConfirmationEmail = function(JSBNG__event, data) {\n            this.post({\n                url: \"/account/resend_confirmation_email\",\n                eventData: data,\n                data: data,\n                success: \"dataResendConfirmationEmailSuccess\",\n                error: \"dataResendConfirmationEmailError\"\n            });\n        };\n        this.tweetExport = function(JSBNG__event, data) {\n            this.post({\n                url: \"/account/request_tweet_export\",\n                eventData: data,\n                data: data,\n                success: \"dataTweetExportSuccess\",\n                error: \"dataTweetExportError\"\n            });\n        };\n        this.tweetExportResend = function(JSBNG__event, data) {\n            this.post({\n                url: \"/account/request_tweet_export_resend\",\n                eventData: data,\n                data: data,\n                success: \"dataTweetExportResendSuccess\",\n                error: \"dataTweetExportResendError\"\n            });\n        };\n        this.tweetExportIncrRateLimiter = function(JSBNG__event, data) {\n            this.post({\n                url: \"/account/request_tweet_export_download\",\n                eventData: data,\n                data: data,\n                success: \"dataTweetExportDownloadSuccess\",\n                error: \"dataTweetExportDownloadError\"\n            });\n        };\n        this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiUsernameChange\", this.verifyUsername);\n            this.JSBNG__on(\"uiEmailChange\", this.verifyEmail);\n            this.JSBNG__on(\"uiCancelPendingEmail\", this.cancelPendingEmail);\n            this.JSBNG__on(\"uiResendPendingEmail\", this.resendPendingEmail);\n            this.JSBNG__on(\"uiForgotPassword\", this.resendPassword);\n            this.JSBNG__on(\"uiDeleteGeoData\", this.deleteGeoData);\n            this.JSBNG__on(\"uiRevokeClick\", this.revokeAuthority);\n            this.JSBNG__on(\"uiImageSave\", this.uploadImage);\n            this.JSBNG__on(\"uiDeleteImage\", this.deleteImage);\n            this.JSBNG__on(\"uiCheckImageUploadStatus\", this.checkImageUploadStatus);\n            this.JSBNG__on(\"uiTweetExportButtonClicked\", this.tweetExport);\n            this.JSBNG__on(\"uiTweetExportResendButtonClicked\", this.tweetExportResend);\n            this.JSBNG__on(\"uiTweetExportConfirmEmail\", this.resendConfirmationEmail);\n            this.JSBNG__on(\"uiTweetExportIncrRateLimiter\", this.tweetExportIncrRateLimiter);\n            this.JSBNG__on(\"dataValidateUsername\", this.verifyUsername);\n            this.JSBNG__on(\"dataValidateEmail\", this.verifyEmail);\n        });\n    };\n;\n    module.exports = SettingsData;\n});\ndefine(\"app/ui/profile_edit_param\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/params\",], function(module, require, exports) {\n    function profileEditParam() {\n        this.hasEditParam = function() {\n            return !!params.fromQuery(window.JSBNG__location).edit;\n        }, this.checkEditParam = function() {\n            ((this.hasEditParam() && this.trigger(\"uiEditProfileInitialize\", {\n                scribeElement: \"edit_param\"\n            })));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.checkEditParam);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), params = require(\"app/utils/params\");\n    module.exports = defineComponent(profileEditParam);\n});\ndefine(\"app/ui/alert_banner_to_message_drawer\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function alertBannerToMessageDrawer() {\n        this.showMessage = function(a, b) {\n            this.trigger(\"uiShowMessage\", b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiAlertBanner\", this.showMessage);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(alertBannerToMessageDrawer);\n});\ndefine(\"app/boot/inline_edit\", [\"module\",\"require\",\"exports\",\"app/ui/inline_edit\",\"app/data/async_profile\",\"app/ui/dialogs/profile_image_upload_dialog\",\"app/ui/dialogs/profile_edit_error_dialog\",\"app/ui/dialogs/profile_confirm_image_delete_dialog\",\"app/ui/droppable_image\",\"app/ui/profile_image_monitor\",\"app/data/inline_edit_scribe\",\"app/data/settings/profile_image_upload_scribe\",\"app/data/drag_and_drop_scribe\",\"app/ui/settings/change_photo\",\"app/ui/image_uploader\",\"app/ui/inline_profile_editing_initializor\",\"app/ui/inline_profile_editing\",\"app/data/settings\",\"app/utils/image\",\"app/ui/forms/input_with_placeholder\",\"app/ui/profile_edit_param\",\"app/ui/alert_banner_to_message_drawer\",\"core/i18n\",], function(module, require, exports) {\n    var InlineEdit = require(\"app/ui/inline_edit\"), AsyncProfileData = require(\"app/data/async_profile\"), ProfileImageUploadDialog = require(\"app/ui/dialogs/profile_image_upload_dialog\"), ProfileEditErrorDialog = require(\"app/ui/dialogs/profile_edit_error_dialog\"), ProfileConfirmImageDeleteDialog = require(\"app/ui/dialogs/profile_confirm_image_delete_dialog\"), DroppableImage = require(\"app/ui/droppable_image\"), ProfileImageMonitor = require(\"app/ui/profile_image_monitor\"), InlineEditScribe = require(\"app/data/inline_edit_scribe\"), ProfileImageUploadScribe = require(\"app/data/settings/profile_image_upload_scribe\"), DragAndDropScribe = require(\"app/data/drag_and_drop_scribe\"), ChangePhoto = require(\"app/ui/settings/change_photo\"), ImageUploader = require(\"app/ui/image_uploader\"), InlineProfileEditingInitializor = require(\"app/ui/inline_profile_editing_initializor\"), InlineProfileEditing = require(\"app/ui/inline_profile_editing\"), SettingsData = require(\"app/data/settings\"), image = require(\"app/utils/image\"), InputWithPlaceholder = require(\"app/ui/forms/input_with_placeholder\"), ProfileEditParam = require(\"app/ui/profile_edit_param\"), AlertBannerToMessageDrawer = require(\"app/ui/alert_banner_to_message_drawer\"), _ = require(\"core/i18n\");\n    module.exports = function(b) {\n        InlineProfileEditingInitializor.attachTo(\".profile-page-header\", b);\n        if (image.supportsCropper()) {\n            AlertBannerToMessageDrawer.attachTo(JSBNG__document), ProfileEditErrorDialog.attachTo(\"#profile_edit_error_dialog\", {\n                JSBNG__top: 0,\n                left: 0\n            }), InlineProfileEditing.attachTo(\".profile-page-header\", b), SettingsData.attachTo(JSBNG__document, b), AsyncProfileData.attachTo(JSBNG__document, b), InlineEdit.attachTo(\".profile-page-header .editable-group\"), InputWithPlaceholder.attachTo(\".profile-page-header .placeholding-input\", {\n                placeholder: \".placeholder\",\n                elementType: \"input,textarea\"\n            }), InlineEditScribe.attachTo(JSBNG__document), ProfileImageUploadScribe.attachTo(\"#profile_image_upload_dialog\"), ProfileImageUploadScribe.attachTo(\"#header_image_upload_dialog\"), DragAndDropScribe.attachTo(JSBNG__document);\n            var c = {\n                scribeContext: {\n                    component: \"profile_image_upload\"\n                }\n            };\n            ProfileConfirmImageDeleteDialog.attachTo(\"#avatar_confirm_remove_dialog\", {\n                JSBNG__top: 0,\n                left: 0,\n                uploadType: \"avatar\"\n            }), ImageUploader.attachTo(\".avatar-settings .uploader-image .photo-selector\", {\n                maxSizeInBytes: 10485760,\n                fileTooBigMessage: _(\"Please select a profile image that is less than 10 MB.\"),\n                uploadType: \"avatar\",\n                eventData: c\n            }), ProfileImageUploadDialog.attachTo(\"#profile_image_upload_dialog\", {\n                uploadType: \"avatar\",\n                eventData: c\n            }), ChangePhoto.attachTo(\"#choose-photo\", {\n                uploadType: \"avatar\",\n                alwaysOpen: !0,\n                confirmDelete: !0,\n                eventData: c\n            }), DroppableImage.attachTo(\".profile-page-header .profile-picture\", {\n                uploadType: \"avatar\",\n                eventData: c\n            }), ProfileImageMonitor.attachTo(\".uploader-avatar\", {\n                eventData: {\n                    scribeContext: {\n                        component: \"form\"\n                    }\n                }\n            });\n            var d = {\n                scribeContext: {\n                    component: \"header_image_upload\"\n                }\n            };\n            ProfileConfirmImageDeleteDialog.attachTo(\"#header_confirm_remove_dialog\", {\n                JSBNG__top: 0,\n                left: 0,\n                uploadType: \"header\"\n            }), ImageUploader.attachTo(\".header-settings .uploader-image .photo-selector\", {\n                fileNameString: \"user[profile_header_image_name]\",\n                fileDataString: \"user[profile_header_image]\",\n                fileInputString: \"user[profile_header_image]\",\n                uploadType: \"header\",\n                maxSizeInBytes: 10240000,\n                fileTooBigMessage: _(\"Please select an image that is less than 10MB.\"),\n                onError: function() {\n                    window.JSBNG__scrollTo(0, 0);\n                },\n                eventData: d\n            }), ProfileImageUploadDialog.attachTo(\"#header_image_upload_dialog\", {\n                uploadType: \"header\",\n                maskPadding: 0,\n                JSBNG__top: 0,\n                left: 0,\n                maximumWidth: 1252,\n                maximumHeight: 626,\n                imageNameSelector: \"#choose-header div.photo-selector input.file-name\",\n                imageDataSelector: \"#choose-header div.photo-selector input.file-data\",\n                eventData: d\n            }), ChangePhoto.attachTo(\"#choose-header\", {\n                uploadType: \"header\",\n                toggler: \"#profile_header_upload\",\n                chooseExistingSelector: \"#header-choose-existing\",\n                chooseWebcamSelector: \"#header-choose-webcam\",\n                deleteImageSelector: \"#header-delete-image\",\n                alwaysOpen: !0,\n                confirmDelete: !0,\n                eventData: d\n            }), DroppableImage.attachTo(\".profile-page-header .profile-header-inner\", {\n                uploadType: \"header\",\n                eventData: d\n            }), ProfileImageMonitor.attachTo(\".uploader-header\", {\n                uploadType: \"header\",\n                isProcessingCookie: \"header_processing_complete_key\",\n                thumbnailSelector: \"#header_image_preview\",\n                deleteButtonSelector: \"#remove_header\",\n                deleteFormSelector: \"#profile_banner_delete_form\",\n                eventData: {\n                    scribeContext: {\n                        component: \"form\"\n                    }\n                }\n            });\n        }\n    ;\n    ;\n        ProfileEditParam.attachTo(\".profile-page-header\");\n    };\n});\ndefine(\"app/ui/profile/canopy\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",], function(module, require, exports) {\n    function profileCanopy() {\n        this.defaultAttrs({\n            verticalThreshold: 280,\n            retractedCanopyClass: \"retracted\"\n        }), this.belowVerticalThreshhold = function() {\n            return ((this.$window.scrollTop() >= this.attr.verticalThreshold));\n        }, this.determineCanopyPresence = function() {\n            var a = this.$node.hasClass(this.attr.retractedCanopyClass);\n            ((this.belowVerticalThreshhold() ? ((a && this.trigger(\"uiShowProfileCanopy\"))) : ((a || this.trigger(\"uiHideProfileCanopy\")))));\n        }, this.showCanopyAfterModal = function() {\n            ((this.belowVerticalThreshhold() && this.showProfileCanopy()));\n        }, this.hideCanopyBeforeModal = function() {\n            ((this.belowVerticalThreshhold() && this.hideProfileCanopy()));\n        }, this.showProfileCanopy = function() {\n            this.$node.removeClass(this.attr.retractedCanopyClass);\n        }, this.hideProfileCanopy = function() {\n            this.$node.addClass(this.attr.retractedCanopyClass);\n        }, this.after(\"initialize\", function() {\n            this.$window = $(window), this.$node.removeClass(\"hidden\"), this.JSBNG__on(\"uiShowProfileCanopy\", this.showProfileCanopy), this.JSBNG__on(\"uiHideProfileCanopy\", this.hideProfileCanopy), this.JSBNG__on(window, \"JSBNG__scroll\", utils.throttle(this.determineCanopyPresence.bind(this))), this.JSBNG__on(JSBNG__document, \"uiShowProfilePopup\", this.hideCanopyBeforeModal), this.JSBNG__on(JSBNG__document, \"uiCloseProfilePopup\", this.showCanopyAfterModal), this.determineCanopyPresence();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(profileCanopy);\n});\ndefine(\"app/data/profile_canopy_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function profileCanopyScribe() {\n        this.defaultAttrs({\n            scribeContext: {\n                component: \"profile_canopy\"\n            }\n        }), this.scribeProfileCanopy = function(a, b) {\n            var c = utils.merge(this.attr.scribeContext, {\n                action: \"impression\"\n            });\n            this.scribe(c, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiShowProfileCanopy\", this.scribeProfileCanopy);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\"), ProfileCanopyScribe = defineComponent(profileCanopyScribe, withScribe);\n    module.exports = ProfileCanopyScribe;\n});\ndefine(\"app/ui/profile/head\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_user_actions\",\"app/ui/with_profile_stats\",\"app/ui/with_handle_overflow\",\"core/utils\",], function(module, require, exports) {\n    function profileHead() {\n        this.defaultAttrs({\n            profileHead: !0,\n            isCanopy: !1,\n            editProfileButtonSelector: \".inline-edit-profile-btn\",\n            nonEmptyAvatarSelector: \".avatar:not(.empty-avatar)\",\n            emptyAvatarSelector: \".empty-avatar\",\n            overflowContainer: \".profile-header-inner\",\n            itemType: \"user\",\n            directMessages: \".dm-button\",\n            urlSelector: \".url a\"\n        }), this.showAvatarModal = function(a) {\n            a.preventDefault(), ((this.isEditing() || (this.trigger(\"uiAvatarClicked\"), this.trigger(a.target, \"uiOpenGallery\", {\n                title: _(\"@{{screenName}}'s profile photo\", {\n                    screenName: this.attr.profile_user.screen_name\n                })\n            }))));\n        }, this.emptyAvatarClicked = function(a) {\n            if (!this.isEditing()) {\n                a.preventDefault(), a.stopImmediatePropagation();\n                var b = $(a.target).attr(\"data-scribe-element\");\n                $(JSBNG__document).one(\"uiEditProfileStart\", this.showAvatarOptions.bind(this)), this.trigger(\"uiEditProfileInitialize\", {\n                    scribeElement: b\n                });\n            }\n        ;\n        ;\n        }, this.showAvatarOptions = function() {\n            this.trigger(\"uiShowEditAvatarOptions\");\n        }, this.editProfile = function(a) {\n            a.preventDefault();\n            var b = $(a.target).attr(\"data-scribe-element\");\n            this.trigger(JSBNG__document, \"uiEditProfileInitialize\", {\n                scribeElement: b\n            });\n        }, this.isEditing = function() {\n            return $(\"body\").hasClass(\"profile-editing\");\n        }, this.addGlowToEnvelope = function(a, b) {\n            this.select(\"directMessages\").addClass(\"new\");\n        }, this.removeGlowFromEnvelope = function(a, b) {\n            this.select(\"directMessages\").removeClass(\"new\");\n        }, this.addCountToEnvelope = function(a, b) {\n            var c = parseInt(b.msgCount, 10);\n            if (isNaN(c)) {\n                return;\n            }\n        ;\n        ;\n            var d = \"with-count\";\n            ((((c > 9)) ? d += \" with-count-2\" : ((((c > 99)) && (d += \" with-count-3\"))))), this.removeCountFromEnvelope(a, c), this.select(\"directMessages\").addClass(d), this.select(\"directMessages\").JSBNG__find(\".dm-new\").text(c);\n        }, this.removeCountFromEnvelope = function(a, b) {\n            this.select(\"directMessages\").removeClass(\"with-count with-count-2 with-count-3\");\n        }, this.urlClicked = function() {\n            this.trigger(\"uiUrlClicked\");\n        }, this.after(\"initialize\", function() {\n            this.checkForOverflow(this.select(\"overflowContainer\")), this.JSBNG__on(\"click\", {\n                nonEmptyAvatarSelector: this.showAvatarModal,\n                emptyAvatarSelector: this.emptyAvatarClicked,\n                editProfileButtonSelector: this.editProfile,\n                urlSelector: this.urlClicked\n            }), this.JSBNG__on(JSBNG__document, \"dataUserHasUnreadDMs dataUserHasUnreadDMsWithCount\", this.addGlowToEnvelope), this.JSBNG__on(JSBNG__document, \"dataUserHasNoUnreadDMs dataUserHasNoUnreadDMsWithCount\", this.removeGlowFromEnvelope), this.JSBNG__on(JSBNG__document, \"dataUserHasUnreadDMsWithCount\", this.addCountToEnvelope), this.JSBNG__on(JSBNG__document, \"dataUserHasNoUnreadDMsWithCount\", this.removeCountFromEnvelope), ((this.attr.isCanopy && this.JSBNG__on(\"uiHideProfileCanopy\", this.hideDropdown))), this.attr.eventData = utils.merge(((this.attr.eventData || {\n            })), {\n                scribeContext: this.attr.scribeContext,\n                profileHead: this.attr.profileHead\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withUserActions = require(\"app/ui/with_user_actions\"), withProfileStats = require(\"app/ui/with_profile_stats\"), withHandleOverflow = require(\"app/ui/with_handle_overflow\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(profileHead, withUserActions, withProfileStats, withHandleOverflow);\n});\ndefine(\"app/data/profile_head_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function profileHeadScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiAvatarClicked\", {\n                element: \"avatar\",\n                action: \"click\"\n            }), this.scribeOnEvent(\"uiUrlClicked\", {\n                element: \"url\",\n                action: \"click\"\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(profileHeadScribe, withScribe);\n});\ndefine(\"app/ui/profile/social_proof\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function profileSocialProof() {\n        this.defaultAttrs({\n            itemType: \"user\"\n        }), this.after(\"initialize\", function() {\n            this.trigger(\"uiHasProfileSocialProof\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withItemActions = require(\"app/ui/with_item_actions\"), ProfileSocialProof = defineComponent(profileSocialProof, withItemActions);\n    module.exports = ProfileSocialProof;\n});\ndefine(\"app/data/profile_social_proof_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function profileSocialProofScribe() {\n        this.defaultAttrs({\n            scribeContext: {\n                component: \"profile_follow_card\"\n            }\n        }), this.scribeProfileSocialProof = function(a, b) {\n            var c = utils.merge(this.attr.scribeContext, {\n                element: \"social_proof\",\n                action: \"impression\"\n            });\n            this.scribe(c, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiHasProfileSocialProof\", this.scribeProfileSocialProof);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\"), ProfileSocialProofScribe = defineComponent(profileSocialProofScribe, withScribe);\n    module.exports = ProfileSocialProofScribe;\n});\ndefine(\"app/ui/media/card_thumbnails\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/utils/image_thumbnail\",\"app/utils/image/image_loader\",\"core/i18n\",], function(module, require, exports) {\n    function cardThumbnails() {\n        var a = 800, b = {\n            NOT_LOADED: \"not-loaded\",\n            LOADING: \"loading\",\n            LOADED: \"loaded\"\n        };\n        this.hasMoreItems = !0, this.defaultAttrs({\n            profileUser: !1,\n            mediaGrid: !1,\n            mediaGridOpen: !1,\n            gridPushState: !1,\n            pushStateUrl: \"/\",\n            defaultGalleryTitle: _(\"Media Gallery\"),\n            viewAllSelector: \".list-link\",\n            thumbnailSelector: \".media-thumbnail\",\n            thumbnailContainerSelector: \".photo-list\",\n            thumbnailPlaceholderSelector: \".thumbnail-placeholder.first\",\n            thumbnailNotLoadedSelector: ((((\".media-thumbnail[data-load-status=\\\"\" + b.NOT_LOADED)) + \"\\\"]\")),\n            thumbnailType: \"thumb\",\n            thumbnailSize: 90,\n            thumbnailsVisible: 6,\n            showAllInlineMedia: !1,\n            loadOnEventName: \"uiLoadThumbnails\",\n            dataEvents: {\n                requestItems: \"uiWantsMoreMediaTimelineItems\",\n                gotItems: \"dataGotMoreMediaTimelineItems\"\n            },\n            defaultRequestData: {\n            }\n        }), this.thumbs = function() {\n            return this.select(\"thumbnailSelector\");\n        }, this.getMaxId = function() {\n            var a = this.thumbs();\n            if (a.length) {\n                return a.last().attr(\"data-status-id\");\n            }\n        ;\n        ;\n        }, this.shouldGetMoreItems = function(a) {\n            var b = $(a.target);\n            if (b.attr(\"data-paged\")) {\n                return;\n            }\n        ;\n        ;\n            this.getMoreItems();\n        }, this.getMoreItems = function() {\n            if (!this.hasMoreItems) {\n                return;\n            }\n        ;\n        ;\n            var a = this.thumbs();\n            a.attr(\"data-paged\", !0), this.trigger(JSBNG__document, this.attr.dataEvents.requestItems, utils.merge(this.attr.defaultRequestData, {\n                max_id: this.getMaxId()\n            }));\n        }, this.gotMoreItems = function(a, b) {\n            if (((b.thumbs_html && $.trim(b.thumbs_html).length))) {\n                var c = (($.isArray(b.thumbs_html) ? $(b.thumbs_html.join(\"\")) : $(b.thumbs_html)));\n                this.appendItems(c);\n            }\n             else this.hasMoreItems = !1;\n        ;\n        ;\n            this.trigger(JSBNG__document, \"dataGotMoreMediaItems\", b), ((((((this.select(\"thumbnailSelector\").length < this.attr.thumbnailsVisible)) && this.hasMoreItems)) && this.getMoreItems()));\n        }, this.appendItems = function(a) {\n            ((this.attr.gridPushState && (a.addClass(\"js-nav\"), a.attr(\"href\", this.attr.pushStateUrl)))), this.select(\"thumbnailPlaceholderSelector\").before(a), this.renderVisible();\n        }, this.renderVisible = function() {\n            var a = this.select(\"thumbnailSelector\").slice(0, this.attr.thumbnailsVisible), b = a.filter(this.attr.thumbnailNotLoadedSelector);\n            if (b.length) {\n                this.loadThumbs(b);\n                var c = {\n                    thumbnails: []\n                };\n                b.each(function(a, b) {\n                    c.thumbnails.push($(b).attr(\"data-url\"));\n                }), this.trigger(\"uiMediaThumbnailsVisible\", c);\n            }\n             else ((((a.length > 0)) && this.showThumbs()));\n        ;\n        ;\n            var c = {\n                thumbnails: []\n            };\n            b.each(function(a, b) {\n                c.thumbnails.push($(b).attr(\"data-url\"));\n            }), this.trigger(\"uiMediaThumbnailsVisible\", c);\n        }, this.loadThumbs = function(a) {\n            a.attr(\"data-load-status\", b.LOADING), a.each(this.loadThumb.bind(this));\n        }, this.loadThumb = function(a, b) {\n            var c = $(b), d = function(a) {\n                this.loadThumbSuccess(c, a);\n            }.bind(this), e = function() {\n                this.loadThumbFail(c);\n            }.bind(this);\n            imageLoader.load(c.attr(((\"data-resolved-url-\" + this.attr.thumbnailType))), d, e);\n        }, this.loadThumbSuccess = function(a, c) {\n            a.attr(\"data-load-status\", b.LOADED), c.css(imageThumbnail.getThumbnailOffset(c.get(0).height, c.get(0).width, this.attr.thumbnailSize)), a.append(c), this.showThumbs();\n        }, this.loadThumbFail = function(a) {\n            a.remove(), this.renderVisible();\n        }, this.showThumbs = function() {\n            this.$node.show(), this.$node.attr(\"data-loaded\", !0), this.gridAutoOpen();\n        }, this.thumbnailClick = function(a) {\n            a.stopPropagation(), a.preventDefault(), this.openGallery(a.target);\n            var b = $(a.target), c = ((b.hasClass(\"video\") ? \"video\" : \"photo\"));\n            this.trigger(\"uiMediaThumbnailClick\", {\n                url: b.attr(\"data-url\"),\n                mediaType: c\n            });\n        }, this.gridAutoOpen = function() {\n            ((((((this.attr.mediaGrid && this.attr.mediaGridOpen)) && this.thumbs().length)) && this.viewGrid()));\n        }, this.viewAllClick = function(a) {\n            ((this.attr.mediaGrid ? this.trigger(\"uiMediaViewAllClick\") : (this.openGallery(this.thumbs()[0]), a.preventDefault())));\n        }, this.showThumbs = function() {\n            this.$node.show(), this.$node.attr(\"data-loaded\", !0), ((this.attr.mediaGridOpen && (this.attr.mediaGridOpen = !1, this.viewGrid())));\n        }, this.viewGrid = function() {\n            this.openGrid(this.thumbs()[0]);\n        }, this.openGrid = function(a) {\n            this.trigger(a, \"uiOpenGrid\", {\n                gridTitle: this.attr.defaultGalleryTitle,\n                profileUser: this.attr.profileUser\n            });\n        }, this.openGallery = function(a) {\n            this.trigger(a, \"uiOpenGallery\", {\n                gridTitle: this.attr.defaultGalleryTitle,\n                showGrid: this.attr.mediaGrid,\n                profileUser: this.attr.profileUser\n            });\n        }, this.removeThumbs = function() {\n            this.thumbs().remove();\n        }, this.before(\"teardown\", this.removeThumbs), this.after(\"initialize\", function() {\n            ((this.$node.attr(\"data-loaded\") || (this.$node.hide(), this.trigger(\"uiMediaThumbnailsVisible\", {\n                thumbnails: []\n            })))), this.JSBNG__on(\"click\", {\n                thumbnailSelector: this.thumbnailClick,\n                viewAllSelector: this.viewAllClick\n            }), this.gridAutoOpen(), this.JSBNG__on(JSBNG__document, this.attr.dataEvents.gotItems, this.gotMoreItems), this.JSBNG__on(\"uiGalleryMediaLoad\", this.shouldGetMoreItems), ((this.attr.showAllInlineMedia ? this.getMoreItems() : this.JSBNG__on(JSBNG__document, \"uiReloadThumbs\", this.getMoreItems)));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), imageThumbnail = require(\"app/utils/image_thumbnail\"), imageLoader = require(\"app/utils/image/image_loader\"), _ = require(\"core/i18n\"), CardThumbnails = defineComponent(cardThumbnails);\n    module.exports = CardThumbnails;\n});\ndefine(\"app/data/media_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function mediaTimeline() {\n        this.requestItems = function(a, b) {\n            var c = {\n            }, d = {\n                since_id: b.since_id,\n                max_id: b.max_id\n            };\n            this.get({\n                url: this.attr.endpoint,\n                headers: c,\n                data: d,\n                eventData: b,\n                success: \"dataGotMoreMediaTimelineItems\",\n                error: \"dataGotMoreMediaTimelineItemsError\"\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiWantsMoreMediaTimelineItems\", this.requestItems);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(mediaTimeline, withData);\n});\ndefine(\"app/data/media_thumbnails_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function mediaThumbnailsScribe() {\n        var a = /\\:[A-Z0-9_-]+$/i;\n        this.scribeMediaThumbnailResults = function(b, c) {\n            var d = c.thumbnails.length, e = ((d ? \"results\" : \"no_results\")), f = {\n                item_count: d\n            };\n            ((d && (f.item_names = c.thumbnails.map(function(b) {\n                return b.replace(a, \"\");\n            })))), this.scribe({\n                action: e\n            }, c, f);\n        }, this.scribeMediaThumbnailClick = function(b, c) {\n            var d = {\n                url: ((c.url && c.url.replace(a, \"\")))\n            }, e = {\n                element: c.mediaType,\n                action: \"click\"\n            };\n            this.scribe(e, c, d);\n        }, this.scribeMediaViewAllClick = function(a, b) {\n            this.scribe({\n                action: \"view_all\"\n            }, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiMediaGalleryResults\", this.scribeMediaThumbnailResults), this.JSBNG__on(JSBNG__document, \"uiMediaThumbnailsVisible\", this.scribeMediaThumbnailResults), this.JSBNG__on(JSBNG__document, \"uiMediaThumbnailClick\", this.scribeMediaThumbnailClick), this.JSBNG__on(JSBNG__document, \"uiMediaViewAllClick\", this.scribeMediaViewAllClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(mediaThumbnailsScribe, withScribe);\n});\ndefine(\"app/ui/suggested_users\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",\"app/ui/with_interaction_data\",], function(module, require, exports) {\n    function suggestedUsers() {\n        this.defaultAttrs({\n            closeSelector: \".js-close\",\n            itemType: \"user\",\n            userSelector: \".js-actionable-user\",\n            eventMode: \"profileHead\",\n            targetSelector: \"#suggested-users\",\n            childSelector: \"\"\n        }), this.getTimelineNodeSelector = function(a) {\n            return ((((((this.attr.targetSelector + ((a ? ((((\"[data-item-id=\\\"\" + a)) + \"\\\"]\")) : \"\")))) + \" \")) + this.attr.childSelector));\n        }, this.getTargetChildNode = function(a) {\n            var b;\n            return ((a[this.attr.eventMode] && ((((this.attr.eventMode === \"timeline_recommendations\")) ? b = this.$node.JSBNG__find(this.getTimelineNodeSelector(a.userId)) : b = this.$node)))), b;\n        }, this.getTargetParentNode = function(a) {\n            return ((((this.attr.eventMode === \"timeline_recommendations\")) ? $(a.target).closest(this.attr.childSelector) : this.$node));\n        }, this.slideInContent = function(a, b) {\n            var c = this.getTargetChildNode(b.sourceEventData);\n            if (((((!c || ((c.length !== 1)))) || c.hasClass(\"has-content\")))) {\n                return;\n            }\n        ;\n        ;\n            c.addClass(\"has-content\"), c.html(b.html), c.hide().slideDown();\n            var d = [];\n            c.JSBNG__find(this.attr.userSelector).map(function(a, b) {\n                d.push(this.interactionData($(b), {\n                    position: a\n                }));\n            }.bind(this)), this.trigger(\"uiSuggestedUsersRendered\", {\n                items: d,\n                user_id: b.sourceEventData.userId\n            });\n        }, this.slideOutContent = function(a, b) {\n            var c = this.getTargetParentNode(a);\n            if (((c.length === 0))) {\n                return;\n            }\n        ;\n        ;\n            c.slideUp(function() {\n                c.empty(), c.removeClass(\"has-content\");\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataSuggestedUsersSuccess\", this.slideInContent), this.JSBNG__on(\"click\", {\n                closeSelector: this.slideOutContent\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withInteractionData = require(\"app/ui/with_interaction_data\");\n    module.exports = defineComponent(suggestedUsers, withUserActions, withItemActions, withInteractionData);\n});\ndefine(\"app/data/suggested_users\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/data/with_interaction_data_scribe\",], function(module, require, exports) {\n    function suggestedUsersData() {\n        var a = function(a) {\n            return ((a && ((a.profileHead || a.timeline_recommendations))));\n        };\n        this.getHTML = function(b, c) {\n            function d(a) {\n                ((a.html && this.trigger(\"dataSuggestedUsersSuccess\", a)));\n            };\n        ;\n            if (!a(c)) {\n                return;\n            }\n        ;\n        ;\n            this.get({\n                url: \"/i/users/suggested_users\",\n                data: {\n                    user_id: c.userId,\n                    limit: 2,\n                    timeline_recommendations: !!c.timeline_recommendations\n                },\n                eventData: c,\n                success: d.bind(this),\n                error: \"dataSuggestedUsersFailure\"\n            });\n        }, this.scribeSuggestedUserResults = function(a, b) {\n            this.scribeInteractiveResults({\n                element: \"initial\",\n                action: \"results\"\n            }, b.items, b, {\n                referring_event: \"initial\",\n                profile_id: b.user_id\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiSuggestedUsersRendered\", this.scribeSuggestedUserResults), this.JSBNG__on(\"uiFollowAction\", this.getHTML);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\");\n    module.exports = defineComponent(suggestedUsersData, withData, withInteractionDataScribe);\n});\ndefine(\"app/ui/gallery/grid\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"core/i18n\",\"app/utils/image/image_loader\",\"app/ui/with_scrollbar_width\",], function(module, require, exports) {\n    function grid() {\n        this.defaultAttrs({\n            thumbnailSize: 196,\n            gridTitle: _(\"Media Gallery\"),\n            gridPushState: !0,\n            pushStateCloseUrl: \"/\",\n            profileUser: !1,\n            mediaSelector: \".media-thumbnail\",\n            mediasSelector: \".photo-list\",\n            gridHeaderSelector: \".grid-header\",\n            gridTitleSelector: \".header-title\",\n            gridSubTitleSelector: \".header-subtitle\",\n            gridPicSelector: \".header-pic .avatar\",\n            gridSelector: \".grid-media\",\n            gridContainerSelector: \".grid-container\",\n            closeSelector: \".action-close\",\n            gridFooterSelector: \".grid-footer\",\n            gridLoadingSelector: \".grid-loading\"\n        }), this.atBottom = !1, this.isOpen = function() {\n            return this.select(\"gridContainerSelector\").is(\":visible\");\n        }, this.open = function(a, b) {\n            this.calculateScrollbarWidth();\n            if (b.fromGallery) {\n                this.show();\n                return;\n            }\n        ;\n        ;\n            ((((b && b.gridTitle)) && (this.attr.gridTitle = b.gridTitle))), this.$mediaContainer = $(a.target).closest(this.attr.mediasSelector);\n            var c = this.$mediaContainer.JSBNG__find(this.attr.mediaSelector);\n            this.select(\"mediaSelector\").remove(), this.populate(c), this.initHeader(), this.select(\"gridContainerSelector\").JSBNG__on(\"JSBNG__scroll\", utils.throttle(this.onScroll.bind(this), 200)), this.$node.removeClass(\"hidden\"), $(\"body\").addClass(\"grid-enabled\"), this.trigger(\"uiGridOpened\");\n        }, this.loadMore = function(a, b) {\n            if (((((this.isOpen() && b.thumbs_html)) && b.thumbs_html.length))) {\n                var c = (($.isArray(b.thumbs_html) ? $(b.thumbs_html.join(\"\")) : $(b.thumbs_html)));\n                this.populate(c), this.trigger(\"uiGridPaged\");\n            }\n             else if (((!b.thumbs_html || !b.thumbs_html.length))) {\n                this.atBottom = !0, this.loadComplete(), this.processGrid(!0);\n            }\n            \n        ;\n        ;\n        }, this.initHeader = function() {\n            ((this.attr.profileUser ? (this.$node.addClass(\"tall\"), this.select(\"gridSubTitleSelector\").text(((\"@\" + this.attr.profileUser.screen_name))), this.select(\"gridPicSelector\").attr(\"src\", this.attr.profileUser.profile_image_url_https), this.select(\"gridPicSelector\").attr(\"alt\", this.attr.profileUser.JSBNG__name)) : (this.$node.removeClass(\"tall\"), this.select(\"gridSubTitleSelector\").text(\"\"), this.select(\"gridPicSelector\").attr(\"src\", \"\"), this.select(\"gridPicSelector\").attr(\"alt\", \"\")))), this.select(\"gridTitleSelector\").text(this.attr.gridTitle), ((this.attr.gridPushState ? (this.select(\"gridSubTitleSelector\").attr(\"href\", this.attr.pushStateCloseUrl), this.select(\"gridTitleSelector\").attr(\"href\", this.attr.pushStateCloseUrl)) : (this.select(\"gridSubTitleSelector\").removeClass(\"js-nav\"), this.select(\"gridTitleSelector\").removeClass(\"js-nav\"))));\n        }, this.show = function() {\n            $(\"body\").addClass(\"grid-enabled\"), JSBNG__setTimeout(function() {\n                this.ignoreEsc = !1;\n            }.bind(this), 400);\n        }, this.hide = function() {\n            $(\"body\").removeClass(\"grid-enabled\"), this.ignoreEsc = !0;\n        }, this.onEsc = function(a) {\n            ((this.ignoreEsc || this.close(a)));\n        }, this.close = function(a) {\n            a.stopPropagation(), a.preventDefault(), this.select(\"gridContainerSelector\").scrollTop(0), $(\"body\").removeClass(\"grid-enabled\"), this.select(\"gridContainerSelector\").off(\"JSBNG__scroll\"), this.trigger(\"uiGridClosed\"), this.ignoreEsc = !1;\n        }, this.populate = function(a) {\n            var b = a.clone();\n            b.JSBNG__find(\"img\").remove(), b.removeClass(\"js-nav\"), b.removeAttr(\"href\"), b.JSBNG__find(\".play\").removeClass(\"play\").addClass(\"play-large\"), b.insertBefore(this.select(\"gridFooterSelector\")), this.processGrid(), b.each(function(a, b) {\n                this.renderMedia(b);\n            }.bind(this)), this.$mediaContainer.attr(\"data-grid-processed\", \"true\"), this.onScroll();\n        }, this.onScroll = function(a) {\n            if (this.atBottom) {\n                return;\n            }\n        ;\n        ;\n            var b = this.select(\"gridContainerSelector\").scrollTop();\n            if (((this.select(\"gridContainerSelector\").get(0).scrollHeight < ((((b + $(window).height())) + SCROLLTHRESHOLD))))) {\n                var c = this.getLast();\n                ((c.attr(\"data-grid-paged\") ? this.loadComplete() : (c.attr(\"data-grid-paged\", \"true\"), this.trigger(this.getLast(), \"uiGalleryMediaLoad\"))));\n            }\n        ;\n        ;\n        }, this.loadComplete = function() {\n            this.$node.addClass(\"load-complete\");\n        }, this.getLast = function() {\n            var a = this.select(\"mediaSelector\").last(), b = a.attr(\"data-status-id\");\n            return this.$mediaContainer.JSBNG__find(((((\".media-thumbnail[data-status-id='\" + b)) + \"']\"))).last();\n        }, this.medias = function() {\n            return this.select(\"mediaSelector\");\n        }, this.unprocessedMedias = function() {\n            return this.medias().filter(\":not([data-grid-processed='true'])\");\n        }, this.processGrid = function(a) {\n            var b = this.unprocessedMedias();\n            if (!b.length) {\n                return;\n            }\n        ;\n        ;\n            var c = 0, d = 0, e = [];\n            for (var f = 0; ((f < b.length)); f++) {\n                var g = $(b[f]);\n                ((!c && (c = parseInt(g.attr(\"data-height\"))))), ((a && (c = GRIDHEIGHT))), d += this.scaleGridMedia(g, c), e.push(g);\n                if (((((((d / c)) >= GRIDRATIO)) || a))) {\n                    ((a && (d = GRIDWIDTH))), this.setGridRow(e, d, c, a), d = 0, c = 0, e = [], this.processGrid();\n                }\n            ;\n            ;\n            };\n        ;\n        }, this.scaleGridMedia = function(a, b) {\n            var c = parseInt(a.attr(\"data-height\")), d = parseInt(a.attr(\"data-width\")), e = ((((b / c)) * d));\n            return ((((((d / c)) > PANORATIO)) && (e = ((b * PANORATIO)), a.attr(\"data-pano\", \"true\")))), a.attr({\n                \"scaled-height\": b,\n                \"scaled-width\": e\n            }), e;\n        }, this.setGridRow = function(a, b, c, d) {\n            var e = ((GRIDWIDTH - ((a.length * GRIDMARGIN)))), f = ((e / b)), g = ((c * f));\n            $.each(a, function(a, b) {\n                var c = ((parseInt(b.attr(\"scaled-width\")) * f));\n                b.height(g), b.width(c), b.attr(\"scaled-height\", g), b.attr(\"Scaled-width\", c), b.attr(\"data-grid-processed\", \"true\"), b.addClass(\"enabled\"), ((((((a == 0)) && !d)) && b.addClass(\"clear\")));\n            });\n        }, this.renderMedia = function(a) {\n            var b = $(a), c = function(a) {\n                this.loadThumbSuccess(b, a);\n            }.bind(this), d = function() {\n                this.loadThumbFail(b);\n            }.bind(this);\n            imageLoader.load(b.attr(\"data-resolved-url-small\"), c, d);\n        }, this.loadThumbSuccess = function(a, b) {\n            if (a.attr(\"data-pano\")) {\n                var c = ((((a.height() / parseInt(a.attr(\"data-height\")))) * parseInt(a.attr(\"data-width\"))));\n                b.width(c), b.css(\"margin-left\", ((((-((c - a.width())) / 2)) + \"px\")));\n            }\n        ;\n        ;\n            a.prepend(b);\n        }, this.loadThumbFail = function(a) {\n            a.remove();\n        }, this.openGallery = function(a) {\n            var b = $(a.target).closest(this.attr.mediaSelector), c = b.attr(\"data-status-id\"), d = this.$mediaContainer.JSBNG__find(((((\".media-thumbnail[data-status-id='\" + c)) + \"']\")));\n            this.trigger(d, \"uiOpenGallery\", {\n                title: this.title,\n                fromGrid: !0\n            }), this.hide();\n        }, this.after(\"initialize\", function() {\n            this.ignoreEsc = !0, this.JSBNG__on(JSBNG__document, \"uiOpenGrid\", this.open), this.JSBNG__on(JSBNG__document, \"uiCloseGrid\", this.close), this.JSBNG__on(JSBNG__document, \"dataGotMoreMediaItems\", this.loadMore), this.JSBNG__on(\"click\", {\n                mediaSelector: this.openGallery,\n                closeSelector: this.close\n            }), ((this.attr.gridPushState || (this.JSBNG__on(JSBNG__document, \"uiShortcutEsc\", this.onEsc), this.JSBNG__on(\"click\", {\n                gridTitleSelector: this.close,\n                gridSubTitleSelector: this.close,\n                gridPicSelector: this.close\n            }))));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), _ = require(\"core/i18n\"), imageLoader = require(\"app/utils/image/image_loader\"), withScrollbarWidth = require(\"app/ui/with_scrollbar_width\"), Grid = defineComponent(grid, withScrollbarWidth), GRIDWIDTH = 824, GRIDMARGIN = 12, GRIDHEIGHT = 210, GRIDRATIO = 3.5, PANORATIO = 3, SCROLLTHRESHOLD = 1000;\n    module.exports = Grid;\n});\ndefine(\"app/boot/profile\", [\"module\",\"require\",\"exports\",\"app/boot/app\",\"core/i18n\",\"app/boot/trends\",\"app/boot/logged_out\",\"app/boot/inline_edit\",\"app/ui/profile/canopy\",\"app/data/profile_canopy_scribe\",\"app/ui/profile/head\",\"app/data/profile_head_scribe\",\"app/ui/profile/social_proof\",\"app/data/profile_social_proof_scribe\",\"app/ui/dashboard_tweetbox\",\"app/ui/who_to_follow/who_to_follow_dashboard\",\"app/data/who_to_follow\",\"app/data/who_to_follow_scribe\",\"app/ui/profile/recent_connections_module\",\"app/ui/media/card_thumbnails\",\"app/data/media_timeline\",\"app/data/media_thumbnails_scribe\",\"core/utils\",\"app/ui/suggested_users\",\"app/data/suggested_users\",\"app/data/client_event\",\"app/ui/navigation_links\",\"app/data/profile_edit_btn_scribe\",\"app/boot/wtf_module\",\"app/ui/gallery/grid\",], function(module, require, exports) {\n    function initialize(a) {\n        bootApp(a), trends(a), whoToFollowModule(a);\n        var b = \".profile-canopy\", c = {\n            scribeContext: {\n                component: \"profile_canopy\"\n            }\n        };\n        ProfileHead.attachTo(b, a, c, {\n            profileHead: !1,\n            isCanopy: !0\n        }), ProfileHeadScribe.attachTo(b, c), ProfileCanopy.attachTo(b), ProfileCanopyScribe.attachTo(b);\n        var d = \".profile-page-header\", e = {\n            scribeContext: {\n                component: \"profile_follow_card\"\n            }\n        };\n        ProfileHead.attachTo(d, a, e), ProfileHeadScribe.attachTo(d);\n        var f = \".profile-social-proof\";\n        ProfileSocialProofScribe.attachTo(f), ProfileSocialProof.attachTo(f), ((a.inlineProfileEditing && inlineEditBoot(a))), ProfileEditBtnScribe.attachTo(d, e), clientEvent.scribeData.profile_id = a.profile_id, loggedOutBoot(a), MediaThumbnailsScribe.attachTo(JSBNG__document, a);\n        var g = {\n            showAllInlineMedia: !0,\n            defaultGalleryTitle: a.profile_user.JSBNG__name,\n            profileUser: a.profile_user,\n            mediaGrid: a.mediaGrid,\n            mediaGridOpen: a.mediaGridOpen,\n            gridPushState: a.mediaGrid,\n            pushStateUrl: ((((\"/\" + a.profile_user.screen_name)) + \"/media/grid\")),\n            eventData: {\n                scribeContext: {\n                    component: \"dashboard_media\"\n                }\n            }\n        }, h;\n        h = \".enhanced-media-thumbnails\", g.thumbnailSize = 90, g.thumbnailsVisible = 6, MediaTimeline.attachTo(JSBNG__document, {\n            endpoint: ((((\"/i/profiles/show/\" + a.profile_user.screen_name)) + \"/media_timeline\"))\n        }), CardThumbnails.attachTo(h, utils.merge(a, g)), Grid.attachTo(\".grid\", {\n            sandboxes: a.sandboxes,\n            loggedIn: a.loggedIn,\n            eventData: {\n                scribeContext: {\n                    component: \"grid\"\n                }\n            },\n            mediaGridOpen: a.mediaGridOpen,\n            pushStateCloseUrl: ((\"/\" + a.profile_user.screen_name)),\n            gridTitle: _(\"{{name}}'s photos and videos\", {\n                JSBNG__name: a.profile_user.JSBNG__name\n            }),\n            profileUser: a.profile_user\n        }), NavigationLinks.attachTo(\".profile-page-header\", {\n            eventData: {\n                scribeContext: {\n                    component: \"profile_follow_card\"\n                }\n            }\n        }), DashboardTweetbox.attachTo(\".profile-tweet-box\", {\n            draftTweetId: ((\"profile_\" + a.profile_id)),\n            eventData: {\n                scribeContext: {\n                    component: \"tweet_box\"\n                }\n            }\n        });\n        var i = utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"similar_user_recommendations\"\n                }\n            }\n        }), j = \".dashboard .js-similar-to-module\";\n        WhoToFollowDashboard.attachTo(j, i), WhoToFollowData.attachTo(j, i), WhoToFollowScribe.attachTo(j, i), RecentConnectionsModule.attachTo(\".dashboard .recent-followers-module\", a, {\n            eventData: {\n                scribeContext: {\n                    component: \"recent_followers\"\n                }\n            }\n        }), RecentConnectionsModule.attachTo(\".dashboard .recently-followed-module\", a, {\n            eventData: {\n                scribeContext: {\n                    component: \"recently_followed\"\n                }\n            }\n        }), SuggestedUsersData.attachTo(JSBNG__document), SuggestedUsers.attachTo(\"#suggested-users\", utils.merge({\n            eventData: {\n                scribeContext: {\n                    component: \"user_similarities_list\"\n                }\n            }\n        }, a));\n    };\n;\n    var bootApp = require(\"app/boot/app\"), _ = require(\"core/i18n\"), trends = require(\"app/boot/trends\"), loggedOutBoot = require(\"app/boot/logged_out\"), inlineEditBoot = require(\"app/boot/inline_edit\"), ProfileCanopy = require(\"app/ui/profile/canopy\"), ProfileCanopyScribe = require(\"app/data/profile_canopy_scribe\"), ProfileHead = require(\"app/ui/profile/head\"), ProfileHeadScribe = require(\"app/data/profile_head_scribe\"), ProfileSocialProof = require(\"app/ui/profile/social_proof\"), ProfileSocialProofScribe = require(\"app/data/profile_social_proof_scribe\"), DashboardTweetbox = require(\"app/ui/dashboard_tweetbox\"), WhoToFollowDashboard = require(\"app/ui/who_to_follow/who_to_follow_dashboard\"), WhoToFollowData = require(\"app/data/who_to_follow\"), WhoToFollowScribe = require(\"app/data/who_to_follow_scribe\"), RecentConnectionsModule = require(\"app/ui/profile/recent_connections_module\"), CardThumbnails = require(\"app/ui/media/card_thumbnails\"), MediaTimeline = require(\"app/data/media_timeline\"), MediaThumbnailsScribe = require(\"app/data/media_thumbnails_scribe\"), utils = require(\"core/utils\"), SuggestedUsers = require(\"app/ui/suggested_users\"), SuggestedUsersData = require(\"app/data/suggested_users\"), clientEvent = require(\"app/data/client_event\"), NavigationLinks = require(\"app/ui/navigation_links\"), ProfileEditBtnScribe = require(\"app/data/profile_edit_btn_scribe\"), whoToFollowModule = require(\"app/boot/wtf_module\"), Grid = require(\"app/ui/gallery/grid\");\n    module.exports = initialize;\n});\ndefine(\"app/pages/profile/tweets\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/tweet_timeline\",\"app/boot/user_completion_module\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\"), userCompletionModuleBoot = require(\"app/boot/user_completion_module\");\n    module.exports = function(b) {\n        profileBoot(b), tweetTimelineBoot(b, b.timeline_url, \"tweet\"), userCompletionModuleBoot(b), ((b.profile_user && $(JSBNG__document).trigger(\"profileVisit\", b.profile_user)));\n    };\n});\ndefine(\"app/ui/timelines/with_cursor_pagination\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withCursorPagination() {\n        function a() {\n            return !0;\n        };\n    ;\n        function b() {\n            return !1;\n        };\n    ;\n        this.isOldItem = a, this.isNewItem = b, this.wasRangeRequest = b, this.wasNewItemsRequest = b, this.wasOldItemsRequest = a, this.shouldGetOldItems = function() {\n            return !!this.cursor;\n        }, this.getOldItemsData = function() {\n            return {\n                cursor: this.cursor,\n                is_forward: !this.attr.isBackward,\n                query: this.query\n            };\n        }, this.resetStateVariables = function(a) {\n            ((((a && ((a.cursor !== undefined)))) ? (this.cursor = a.cursor, this.select(\"containerSelector\").attr(\"data-cursor\", this.cursor)) : this.cursor = ((this.select(\"containerSelector\").attr(\"data-cursor\") || \"\"))));\n        }, this.after(\"initialize\", function(a) {\n            this.query = ((a.query || \"\")), this.resetStateVariables(), this.JSBNG__on(\"uiTimelineReset\", this.resetStateVariables);\n        });\n    };\n;\n    module.exports = withCursorPagination;\n});\ndefine(\"app/ui/with_stream_users\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withStreamUsers() {\n        this.defaultAttrs({\n            streamUserSelector: \".stream-items .js-actionable-user\"\n        }), this.usersDisplayed = function() {\n            var a = this.select(\"streamUserSelector\"), b = [];\n            a.each(function(a, c) {\n                var d = $(c);\n                b.push({\n                    id: d.attr(\"data-user-id\"),\n                    impressionId: d.attr(\"data-impression-id\")\n                });\n            }), this.trigger(\"uiUsersDisplayed\", {\n                users: b\n            });\n        }, this.after(\"initialize\", function() {\n            this.usersDisplayed();\n        });\n    };\n;\n    module.exports = withStreamUsers;\n});\ndefine(\"app/ui/timelines/user_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/ui/timelines/with_cursor_pagination\",\"app/ui/with_item_actions\",\"app/ui/with_user_actions\",\"app/ui/with_stream_users\",], function(module, require, exports) {\n    function userTimeline() {\n        this.defaultAttrs({\n            itemType: \"user\"\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withBaseTimeline = require(\"app/ui/timelines/with_base_timeline\"), withOldItems = require(\"app/ui/timelines/with_old_items\"), withCursorPagination = require(\"app/ui/timelines/with_cursor_pagination\"), withItemActions = require(\"app/ui/with_item_actions\"), withUserActions = require(\"app/ui/with_user_actions\"), withStreamUsers = require(\"app/ui/with_stream_users\");\n    module.exports = defineComponent(userTimeline, withBaseTimeline, withOldItems, withCursorPagination, withItemActions, withUserActions, withStreamUsers);\n});\ndefine(\"app/boot/user_timeline\", [\"module\",\"require\",\"exports\",\"app/boot/timeline\",\"app/ui/timelines/user_timeline\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a, b, c, d) {\n        var e = utils.merge(a, {\n            endpoint: b,\n            itemType: c,\n            eventData: {\n                scribeContext: {\n                    component: d\n                },\n                timeline_recommendations: a.timeline_recommendations\n            }\n        });\n        timelineBoot(e), UserTimeline.attachTo(\"#timeline\", e);\n    };\n;\n    var timelineBoot = require(\"app/boot/timeline\"), UserTimeline = require(\"app/ui/timelines/user_timeline\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/timelines/follower_request_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_interaction_data\",], function(module, require, exports) {\n    function followerRequestTimeline() {\n        this.defaultAttrs({\n            userItemSelector: \"div.js-follower-request\",\n            streamUserItemSelector: \"li.js-stream-item\",\n            followerActionsSelector: \".friend-actions\",\n            profileActionsSelector: \".js-profile-actions\",\n            acceptFollowerSelector: \".js-action-accept\",\n            declineFollowerSelector: \".js-action-deny\",\n            itemType: \"user\"\n        }), this.findUser = function(a) {\n            return this.$node.JSBNG__find(((((((this.attr.userItemSelector + \"[data-user-id=\")) + a)) + \"]\")));\n        }, this.findFollowerActions = function(a) {\n            return this.findUser(a).JSBNG__find(this.attr.followerActionsSelector);\n        }, this.findProfileActions = function(a) {\n            return this.findUser(a).JSBNG__find(this.attr.profileActionsSelector);\n        }, this.handleAcceptSuccess = function(a, b) {\n            this.findFollowerActions(b.userId).hide(), this.findProfileActions(b.userId).show();\n        }, this.handleDeclineSuccess = function(a, b) {\n            var c = this.findUser(b.userId);\n            c.closest(this.attr.streamUserItemSelector).remove();\n        }, this.handleDecisionFailure = function(a, b) {\n            var c = this.findFollowerActions(b.userId);\n            c.JSBNG__find(\".btn\").attr(\"disabled\", !1).removeClass(\"pending\");\n        }, this.handleFollowerDecision = function(a) {\n            return function(b, c) {\n                b.preventDefault(), b.stopPropagation();\n                var d = this.interactionData(b), e = this.findFollowerActions(d.userId);\n                e.JSBNG__find(\".btn\").attr(\"disabled\", !0);\n                var f = e.JSBNG__find(((((a == \"Accept\")) ? this.attr.acceptFollowerSelector : this.attr.declineFollowerSelector)));\n                f.addClass(\"pending\"), this.trigger(((\"uiDidFollower\" + a)), d);\n            };\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                acceptFollowerSelector: this.handleFollowerDecision(\"Accept\"),\n                declineFollowerSelector: this.handleFollowerDecision(\"Decline\")\n            }), this.JSBNG__on(JSBNG__document, \"dataFollowerAcceptSuccess\", this.handleAcceptSuccess), this.JSBNG__on(JSBNG__document, \"dataFollowerDeclineSuccess\", this.handleDeclineSuccess), this.JSBNG__on(JSBNG__document, \"dataFollowerAcceptFailure dataFollowerDeclineFailure\", this.handleDecisionFailure);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withInteractionData = require(\"app/ui/with_interaction_data\");\n    module.exports = defineComponent(followerRequestTimeline, withInteractionData);\n});\ndefine(\"app/data/follower_request\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function followerRequestData() {\n        this.followerRequestAction = function(a, b) {\n            return function(c, d) {\n                var e = function() {\n                    this.trigger(((((\"dataFollower\" + b)) + \"Success\")), {\n                        userId: d.userId\n                    });\n                }.bind(this), f = function() {\n                    this.trigger(((((\"dataFollower\" + b)) + \"Failure\")), {\n                        userId: d.userId\n                    });\n                }.bind(this);\n                this.post({\n                    url: a,\n                    data: {\n                        user_id: d.userId\n                    },\n                    eventData: d,\n                    success: e,\n                    error: f\n                });\n            };\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiDidFollowerAccept\", this.followerRequestAction(\"/i/user/accept\", \"Accept\")), this.JSBNG__on(JSBNG__document, \"uiDidFollowerDecline\", this.followerRequestAction(\"/i/user/deny\", \"Decline\"));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(followerRequestData, withData);\n});\ndefine(\"app/pages/profile/follower_requests\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/user_timeline\",\"app/ui/timelines/follower_request_timeline\",\"app/data/follower_request\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), userTimelineBoot = require(\"app/boot/user_timeline\"), FollowerRequestTimeline = require(\"app/ui/timelines/follower_request_timeline\"), FollowerRequestData = require(\"app/data/follower_request\");\n    module.exports = function(b) {\n        profileBoot(b), userTimelineBoot(b, b.timeline_url, \"user\"), FollowerRequestTimeline.attachTo(\"#timeline\", b), FollowerRequestData.attachTo(JSBNG__document, b);\n    };\n});\ndefine(\"app/pages/profile/followers\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/user_timeline\",\"app/data/contact_import\",\"app/data/contact_import_scribe\",\"app/ui/who_to_follow/import_loading_dialog\",\"app/ui/who_to_follow/import_services\",\"app/ui/suggested_users\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), userTimelineBoot = require(\"app/boot/user_timeline\"), ContactImportData = require(\"app/data/contact_import\"), ContactImportScribe = require(\"app/data/contact_import_scribe\"), ImportLoadingDialog = require(\"app/ui/who_to_follow/import_loading_dialog\"), ImportServices = require(\"app/ui/who_to_follow/import_services\"), SuggestedUsers = require(\"app/ui/suggested_users\");\n    module.exports = function(b) {\n        profileBoot(b), b.allowInfiniteScroll = b.loggedIn, userTimelineBoot(b, b.timeline_url, \"user\", \"user\"), ContactImportData.attachTo(JSBNG__document, b), ContactImportScribe.attachTo(JSBNG__document, b), ImportLoadingDialog.attachTo(\"#import-loading-dialog\", b), ImportServices.attachTo(\".followers-import-prompt\", {\n            launchServiceSelector: \".js-launch-service\"\n        }), ((b.timeline_recommendations && SuggestedUsers.attachTo(\"#timeline\", {\n            eventData: {\n                scribeContext: {\n                    component: \"user_similarities_list\"\n                }\n            },\n            eventMode: \"timeline_recommendations\",\n            targetSelector: \".js-stream-item\",\n            childSelector: \".js-recommendations-container\"\n        })));\n    };\n});\ndefine(\"app/pages/profile/following\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/user_timeline\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), userTimelineBoot = require(\"app/boot/user_timeline\");\n    module.exports = function(b) {\n        profileBoot(b), b.allowInfiniteScroll = b.loggedIn, userTimelineBoot(b, b.timeline_url, \"user\", \"user\");\n    };\n});\ndefine(\"app/pages/profile/favorites\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/tweet_timeline\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\");\n    module.exports = function(b) {\n        profileBoot(b), b.allowInfiniteScroll = b.loggedIn, tweetTimelineBoot(b, b.timeline_url, \"tweet\");\n    };\n});\ndefine(\"app/ui/timelines/list_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/ui/timelines/with_cursor_pagination\",\"app/ui/with_item_actions\",\"app/ui/with_user_actions\",], function(module, require, exports) {\n    function listTimeline() {\n        this.defaultAttrs({\n            createListSelector: \".js-create-list-button\",\n            itemType: \"list\"\n        }), this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"click\", {\n                createListSelector: this.openListCreateDialog\n            });\n        }), this.openListCreateDialog = function() {\n            this.trigger(\"uiOpenCreateListDialog\", {\n                userId: this.userId\n            });\n        };\n    };\n;\n    var defineComponent = require(\"core/component\"), withBaseTimeline = require(\"app/ui/timelines/with_base_timeline\"), withOldItems = require(\"app/ui/timelines/with_old_items\"), withCursorPagination = require(\"app/ui/timelines/with_cursor_pagination\"), withItemActions = require(\"app/ui/with_item_actions\"), withUserActions = require(\"app/ui/with_user_actions\");\n    module.exports = defineComponent(listTimeline, withBaseTimeline, withOldItems, withCursorPagination, withItemActions, withUserActions);\n});\ndefine(\"app/boot/list_timeline\", [\"module\",\"require\",\"exports\",\"app/boot/timeline\",\"app/ui/timelines/list_timeline\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a, b, c, d) {\n        var e = utils.merge(a, {\n            endpoint: b,\n            itemType: c,\n            eventData: {\n                scribeContext: {\n                    component: d\n                }\n            }\n        });\n        timelineBoot(e), ListTimeline.attachTo(\"#timeline\", e);\n    };\n;\n    var timelineBoot = require(\"app/boot/timeline\"), ListTimeline = require(\"app/ui/timelines/list_timeline\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/pages/profile/lists\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/list_timeline\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), listTimelineBoot = require(\"app/boot/list_timeline\");\n    module.exports = function(b) {\n        profileBoot(b), listTimelineBoot(b, b.timeline_url, \"list\");\n    };\n});\ndefine(\"app/ui/with_removable_stream_items\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withRemovableStreamItems() {\n        this.defaultAttrs({\n            streamItemSelector: \".js-stream-item\"\n        }), this.removeStreamItem = function(a) {\n            var b = ((((((this.attr.streamItemSelector + \"[data-item-id=\")) + a)) + \"]\"));\n            this.$node.JSBNG__find(b).remove();\n        };\n    };\n;\n    module.exports = withRemovableStreamItems;\n});\ndefine(\"app/ui/similar_to\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_removable_stream_items\",], function(module, require, exports) {\n    function similarTo() {\n        this.handleUserActionSuccess = function(a, b) {\n            ((((b.requestUrl == \"/i/user/hide\")) && this.removeStreamItem(b.userId)));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataUserActionSuccess\", this.handleUserActionSuccess);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withRemovableStreamItems = require(\"app/ui/with_removable_stream_items\");\n    module.exports = defineComponent(similarTo, withRemovableStreamItems);\n});\ndefine(\"app/pages/profile/similar_to\", [\"module\",\"require\",\"exports\",\"app/boot/profile\",\"app/boot/user_timeline\",\"app/ui/similar_to\",], function(module, require, exports) {\n    var profileBoot = require(\"app/boot/profile\"), userTimelineBoot = require(\"app/boot/user_timeline\"), similarTo = require(\"app/ui/similar_to\");\n    module.exports = function(b) {\n        profileBoot(b), userTimelineBoot(b, b.timeline_url, \"user\", \"user\"), similarTo.attachTo(\"#timeline\");\n    };\n});\ndefine(\"app/ui/facets\", [\"module\",\"require\",\"exports\",\"app/utils/cookie\",\"core/component\",], function(module, require, exports) {\n    function uiFacets() {\n        this.defaultAttrs({\n            topImagesSelector: \".top-images\",\n            topVideosSelector: \".top-videos\",\n            notDisplayedSelector: \".facets-media-not-displayed\",\n            displayMediaSelector: \".display-this-media\",\n            showAllInlineMedia: !1\n        }), this.addFacets = function(a, b) {\n            this.select(\"topImagesSelector\").html(b.photos), this.select(\"topVideosSelector\").html(b.videos), ((this.attr.showAllInlineMedia && this.reloadFacets()));\n        }, this.showFacet = function(a, b) {\n            ((((b.thumbnails.length > 0)) && $(a.target).show()));\n            var c = this.$node.JSBNG__find(\".js-nav-links\\u003Eli:visible\"), d = c.last();\n            c.removeClass(\"last-item\"), d.addClass(\"last-item\");\n        }, this.dismissDisplayMedia = function() {\n            this.attr.showAllInlineMedia = !0, this.setMediaCookie(), this.select(\"notDisplayedSelector\").hide(), this.reloadFacets();\n        }, this.setMediaCookie = function() {\n            cookie(\"show_all_inline_media\", !0);\n        }, this.reloadFacets = function() {\n            this.trigger(this.select(\"topImagesSelector\"), \"uiReloadThumbs\"), this.trigger(this.select(\"topVideosSelector\"), \"uiReloadThumbs\");\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"dataHasFacets\", this.addFacets), this.JSBNG__on(\"uiMediaThumbnailsVisible\", this.showFacet), this.JSBNG__on(\"click\", {\n                displayMediaSelector: this.dismissDisplayMedia\n            }), this.trigger(\"uiNeedsFacets\", {\n                q: a.query,\n                onebox_type: a.oneboxType\n            });\n        });\n    };\n;\n    var cookie = require(\"app/utils/cookie\"), defineComponent = require(\"core/component\");\n    module.exports = defineComponent(uiFacets);\n});\ndefine(\"app/data/facets_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function facetsTimeline() {\n        this.defaultAttrs({\n            query: \"\"\n        }), this.requestItems = function(a, b) {\n            var c = {\n            }, d = {\n                since_id: b.since_id,\n                max_id: b.max_id,\n                facet_type: b.facet_type,\n                onebox_type: b.onebox_type,\n                q: this.attr.query\n            };\n            this.get({\n                url: this.attr.endpoint,\n                headers: c,\n                data: d,\n                eventData: b,\n                success: ((((\"dataGotMoreFacet\" + b.facet_type)) + \"TimelineItems\")),\n                error: ((((\"dataGotMoreFacet\" + b.facet_type)) + \"TimelineItemsError\"))\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiWantsMoreFacetTimelineItems\", this.requestItems);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(facetsTimeline, withData);\n});\ndefine(\"app/ui/dialogs/iph_search_result_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/data/with_scribe\",\"app/data/ddg\",], function(module, require, exports) {\n    function inProductHelpDialog() {\n        this.defaultAttrs({\n            helpfulSelector: \"#helpful_button\",\n            notHelpfulSelector: \"#not_helpful_button\",\n            inProductHelpSelector: \"#search_result_help\",\n            feedbackQuestionSelector: \"#satisfaction_question\",\n            feedbackButtonsSelector: \"#satisfaction_buttons\",\n            feedbackMessageSelector: \"#satisfaction_feedback\"\n        }), this.JSBNG__openDialog = function(a) {\n            ddg.impression(\"in_product_help_search_result_page_392\"), this.scribe({\n                component: \"search_result\",\n                element: \"learn_more_dialog\",\n                action: \"impression\"\n            }), this.open();\n        }, this.voteHelpful = function(a) {\n            this.scribe({\n                component: \"search_result\",\n                element: \"learn_more_dialog\",\n                action: ((a ? \"helpful\" : \"unhelpful\"))\n            }), this.select(\"feedbackQuestionSelector\").hide(), this.select(\"feedbackButtonsSelector\").hide(), this.select(\"feedbackMessageSelector\").fadeIn();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                helpfulSelector: function() {\n                    this.voteHelpful(!0);\n                },\n                notHelpfulSelector: function() {\n                    this.voteHelpful(!1);\n                }\n            }), this.JSBNG__on(this.attr.inProductHelpSelector, \"click\", this.JSBNG__openDialog), this.select(\"feedbackMessageSelector\").hide();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), withScribe = require(\"app/data/with_scribe\"), ddg = require(\"app/data/ddg\");\n    module.exports = defineComponent(inProductHelpDialog, withDialog, withPosition, withScribe);\n});\ndefine(\"app/ui/search/archive_navigator\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/storage/custom\",\"core/i18n\",], function(module, require, exports) {\n    function archiveNavigator() {\n        this.monthLabels = [_(\"Jan\"),_(\"Feb\"),_(\"Mar\"),_(\"Apr\"),_(\"May\"),_(\"Jun\"),_(\"Jul\"),_(\"Aug\"),_(\"Sep\"),_(\"Oct\"),_(\"Nov\"),_(\"Dec\"),], this.defaultAttrs({\n            timeRanges: [],\n            highlights: [],\n            query: \"\",\n            sinceTime: null,\n            untilTime: null,\n            ttl_ms: 21600000,\n            canvasSelector: \"canvas\",\n            canvasContainerSelector: \"#archive-drilldown-container\",\n            timeRangeSelector: \".time-ranges\",\n            timeRangeLinkSelector: \".time-ranges a\",\n            highlightContainerSelector: \".highlights\",\n            highlightLinkSelector: \".highlights a\",\n            pastNavSelector: \".past-nav\",\n            futureNavSelector: \".future-nav\",\n            timeNavQuerySource: \"tnav\",\n            highlightNavQuerySource: \"hnav\",\n            activeItemClass: \"active\"\n        }), this.sortedCoordinates = function() {\n            var a = this.attr.timeRanges.concat(this.attr.highlights);\n            return a.sort(function(a, b) {\n                return ((a.timestamp - b.timestamp));\n            }).map(function(a) {\n                return {\n                    x: a.timestamp,\n                    y: a.activityScore\n                };\n            });\n        }, this.compileCoordinates = function(a) {\n            var b = a[0].x, c = a[((a.length - 1))].x, d = a[0].y, e = a[0].y, f, g;\n            for (f = 1, g = a.length; ((f < g)); f++) {\n                var h = a[f];\n                ((((h.y < d)) ? d = h.y : ((((h.y > e)) && (e = h.y)))));\n            };\n        ;\n            var i = new JSBNG__Date(((b * 1000)));\n            return b = (((new JSBNG__Date(i.getUTCFullYear(), i.getUTCMonth(), 1)).getTime() / 1000)), i = new JSBNG__Date(((c * 1000))), c = (((new JSBNG__Date(i.getUTCFullYear(), ((i.getUTCMonth() + 1)), 0)).getTime() / 1000)), this.renderedTimeRange = {\n                since: b,\n                until: c\n            }, d = 0, e *= 1.1, {\n                coordinates: a,\n                minX: b,\n                minY: d,\n                maxX: c,\n                maxY: e\n            };\n        }, this.setupViewFrame = function() {\n            var a = this.select(\"canvasSelector\"), b = this.select(\"canvasContainerSelector\").width(), c = ((this.compiledCoordinates.maxX - this.compiledCoordinates.minX));\n            ((((((this.renderedTimeRange.until - this.renderedTimeRange.since)) < ((((SECONDS_IN_YEAR * 7)) / 6)))) ? (a.width(b), this.select(\"timeRangeSelector\").width(b), this.select(\"highlightContainerSelector\").width(b), this.graphResolution = ((c / b))) : (this.graphResolution = Math.round(((SECONDS_IN_YEAR / b))), this.select(\"timeRangeSelector\").width(Math.round(((c / this.graphResolution)))), this.select(\"highlightContainerSelector\").width(Math.round(((c / this.graphResolution)))), a.width(Math.round(((c / this.graphResolution))))))), this.canvas.width = a.width(), this.canvas.height = a.height(), this.canvasTransform = {\n                translateX: ((-this.compiledCoordinates.minX / this.graphResolution)),\n                translateY: ((((this.canvas.height - ((STROKE_WIDTH / 2)))) - BOTTOM_INSET)),\n                scaleX: ((1 / this.graphResolution)),\n                scaleY: ((-((((((this.canvas.height - STROKE_WIDTH)) - BOTTOM_INSET)) - TOP_INSET)) / ((this.compiledCoordinates.maxY - this.compiledCoordinates.minY))))\n            };\n        }, this.setupCoordinates = function() {\n            if (((this.attr.timeRanges.length == 0))) {\n                return;\n            }\n        ;\n        ;\n            var a = this.sortedCoordinates();\n            this.compiledCoordinates = this.compileCoordinates(a), this.setupViewFrame();\n        }, this.getElementOffsetForCoordinate = function(a) {\n            var b = ((this.canvasTransform.translateX + ((this.canvasTransform.scaleX * a.x)))), c = ((this.canvasTransform.translateY + ((this.canvasTransform.scaleY * a.y))));\n            return {\n                left: b,\n                JSBNG__top: c\n            };\n        }, this.drawGraph = function() {\n            this.drawAxes(), this.plotActivity(), this.plotHighlights();\n        }, this.plotHighlights = function() {\n            var a = this.select(\"highlightContainerSelector\");\n            a.empty(), this.attr.highlights.forEach(function(b) {\n                var c = this.getElementOffsetForCoordinate({\n                    x: b.timestamp,\n                    y: b.activityScore\n                }), d = this.highlightItemTemplate.clone();\n                d.attr(\"href\", ((\"/search?\" + $.param({\n                    mode: \"archive\",\n                    q: this.attr.query,\n                    src: this.attr.highlightNavQuerySource,\n                    since_time: b.drilldownSince,\n                    until_time: b.drilldownUntil\n                })))), d.data(\"monthsInPast\", this.offsetToMonthsPast(c.left, !0)), d.addClass(\"js-nav\"), ((((((this.attr.sinceTime == b.drilldownSince)) && ((this.attr.untilTime == b.drilldownUntil)))) && d.addClass(this.attr.activeItemClass))), d.css(\"left\", ((Math.round(c.left) + \"px\"))), d.css(\"JSBNG__top\", ((Math.round(c.JSBNG__top) + \"px\"))), a.append(d);\n            }, this);\n        }, this.plotActivity = function() {\n            var a = this.compiledCoordinates.coordinates, b = this.compiledCoordinates.minX, c = this.compiledCoordinates.minY, d = this.compiledCoordinates.maxX, e = this.compiledCoordinates.maxY;\n            if (a.length) {\n                var f = this.canvas.getContext(\"2d\");\n                ((((a[0].x !== b)) && (a = [{\n                    x: b,\n                    y: 0\n                },].concat(a)))), f.save(), f.translate(this.canvasTransform.translateX, this.canvasTransform.translateY), f.scale(this.canvasTransform.scaleX, this.canvasTransform.scaleY);\n                var g = ((STROKE_WIDTH * this.graphResolution)), h = ((((BOTTOM_INSET / ((((this.canvas.height - STROKE_WIDTH)) - BOTTOM_INSET)))) / ((e - c))));\n                f.beginPath(), f.JSBNG__moveTo(((a[0].x - ((g / 2)))), ((((c - ((g / 2)))) - h))), f.lineTo(((a[0].x - ((g / 2)))), a[0].y), a.slice(1).forEach(function(a) {\n                    f.lineTo(a.x, a.y);\n                }), f.lineTo(((a[((a.length - 1))].x + ((g / 2)))), a[((a.length - 1))].y), f.lineTo(((a[((a.length - 1))].x + ((g / 2)))), ((c - h))), f.closePath();\n                var i = f.createLinearGradient(0, e, 0, ((c - h)));\n                i.addColorStop(0, GRADIENT_FILL_TOP_COLOR), i.addColorStop(1, GRADIENT_FILL_BOTTOM_COLOR), f.fillStyle = i, f.fill(), f.beginPath(), f.JSBNG__moveTo(a[0].x, a[0].y), a.slice(1).forEach(function(a) {\n                    f.lineTo(a.x, a.y);\n                }, this), f.restore();\n                var j = f.createLinearGradient(0, TOP_INSET, 0, ((this.canvas.height - BOTTOM_INSET)));\n                j.addColorStop(1, STROKE_GRADIENT_TOP_COLOR), j.addColorStop(337485, STROKE_GRADIENT_MIDDLE_COLOR), j.addColorStop(0, STROKE_GRADIENT_BOTTOM_COLOR), f.lineWidth = STROKE_WIDTH, f.lineCap = \"round\", f.lineJoin = \"round\", f.strokeStyle = j, f.stroke();\n            }\n        ;\n        ;\n        }, this.drawAxes = function() {\n            var a = this.compiledCoordinates.minX, b = this.compiledCoordinates.minY, c = this.compiledCoordinates.maxX, d = this.compiledCoordinates.maxY, e = this.canvas.width, f = this.canvas.height;\n            this.select(\"timeRangeSelector\").empty();\n            var g = this.canvas.getContext(\"2d\");\n            g.lineWidth = 1, g.strokeStyle = GRAPH_GRID_COLOR;\n            var h = new JSBNG__Date(((a * 1000))), i = this.getElementOffsetForCoordinate({\n                x: 0,\n                y: d\n            }).JSBNG__top, j = this.getElementOffsetForCoordinate({\n                x: 0,\n                y: b\n            }).JSBNG__top, k, l, m = a, n = Math.round(this.getElementOffsetForCoordinate({\n                x: m,\n                y: 0\n            }).left);\n            g.beginPath(), g.JSBNG__moveTo(((n + 338199)), i), g.lineTo(((n + 338216)), j);\n            while (((m < c))) {\n                var o = this.monthLinkTemplate.clone(), p = this.monthLabels[h.getUTCMonth()], q = h.getUTCFullYear();\n                o.attr(\"title\", ((((p + \" \")) + q))), o.JSBNG__find(\".month\").text(p), o.JSBNG__find(\".year\").text(q), k = m, h.setUTCMonth(((h.getUTCMonth() + 1))), m = ((h.getTime() / 1000)), o.attr(\"href\", ((\"/search?\" + $.param({\n                    mode: \"archive\",\n                    q: this.attr.query,\n                    src: this.attr.timeNavQuerySource,\n                    since_time: k,\n                    until_time: m\n                })))), o.addClass(\"js-nav\"), ((((((this.attr.sinceTime == k)) && ((this.attr.untilTime == m)))) && o.addClass(this.attr.activeItemClass))), l = n;\n                var r = this.getElementOffsetForCoordinate({\n                    x: m,\n                    y: 0\n                });\n                n = Math.round(r.left), o.data(\"monthsInPast\", this.offsetToMonthsPast(r.left, !0)), o.css(\"width\", ((((n - l)) + \"px\"))), this.select(\"timeRangeSelector\").append(o), g.JSBNG__moveTo(((n - 338904)), i), g.lineTo(((n - 338921)), j);\n            };\n        ;\n            g.stroke();\n        }, this.rangeClick = function(a) {\n            var b = $(a.target).closest(\"a\");\n            if (b.is(\".active\")) {\n                a.preventDefault();\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiArchiveRangeClick\", {\n                monthsInPast: b.data(\"monthsInPast\")\n            });\n        }, this.highlightClick = function(a) {\n            var b = $(a.target).closest(\"a\");\n            if (b.is(\".active\")) {\n                a.preventDefault();\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiArchiveHighlightClick\", {\n                monthsInPast: b.data(\"monthsInPast\")\n            });\n        }, this.navFuture = function() {\n            var a = Math.round(((((((((-1 * SECONDS_IN_YEAR)) * 3)) / 4)) / this.graphResolution)));\n            this.navTime(a);\n            var b = this.offsetToMonthsPast(this.containerOffset);\n            this.trigger(\"uiArchiveNavFuture\", {\n                monthsInPast: b\n            });\n        }, this.navPast = function() {\n            var a = Math.round(((((((SECONDS_IN_YEAR * 3)) / 4)) / this.graphResolution)));\n            this.navTime(a);\n            var b = this.offsetToMonthsPast(this.containerOffset);\n            this.trigger(\"uiArchiveNavPast\", {\n                monthsInPast: b\n            });\n        }, this.offsetToMonthsPast = function(a, b) {\n            return ((b && (a = ((this.canvas.width - a))))), Math.round(((((((a * this.graphResolution)) / SECONDS_IN_YEAR)) * 12)));\n        }, this.navActive = function() {\n            var a = this.$node.JSBNG__find(((\".\" + this.attr.activeItemClass))), b = 0;\n            if (((a.length > 0))) {\n                var c = $(a).position(), d = this.select(\"canvasContainerSelector\").width(), e = this.canvas.width;\n                b = ((((e - c.left)) - ((d / 2))));\n            }\n        ;\n        ;\n            this.navTime(b);\n        }, this.navTime = function(a) {\n            this.containerOffset += a;\n            var b = this.select(\"canvasContainerSelector\").width(), c = this.canvas.width, d = ((c - b));\n            if (((b == c))) {\n                return;\n            }\n        ;\n        ;\n            this.containerOffset = Math.min(Math.max(this.containerOffset, 0), d), this.select(\"pastNavSelector\").css(\"visibility\", ((((this.containerOffset < d)) ? \"visible\" : \"hidden\"))), this.select(\"futureNavSelector\").css(\"visibility\", ((((this.containerOffset > 0)) ? \"visible\" : \"hidden\"))), $(\"#archive-drilldown-content\").css(\"transform\", ((((\"translateX(\" + this.containerOffset)) + \"px)\")));\n        }, this.updateFromCache = function() {\n            var a = this.storage.getItem(\"query\");\n            ((((((a == this.attr.query)) && ((this.attr.timeRanges.length == 0)))) ? (this.attr.timeRanges = ((this.storage.getItem(\"timeRanges\") || [])), this.attr.highlights = ((this.storage.getItem(\"highlights\") || [])), this.canvasTransform = this.storage.getItem(\"canvasTransform\")) : ((((this.attr.timeRanges.length > 0)) && (this.storage.setItem(\"query\", this.attr.query, this.attr.ttl_ms), this.storage.setItem(\"timeRanges\", this.attr.timeRanges, this.attr.ttl_ms), this.storage.setItem(\"highlights\", this.attr.highlights, this.attr.ttl_ms))))));\n        }, this.after(\"initialize\", function() {\n            var a = JSBNG__document.createElement(\"canvas\");\n            if (((!a.getContext || !a.getContext(\"2d\")))) {\n                this.$node.hide();\n                return;\n            }\n        ;\n        ;\n            this.JSBNG__on(\"click\", {\n                pastNavSelector: this.navPast,\n                futureNavSelector: this.navFuture,\n                timeRangeLinkSelector: this.rangeClick,\n                highlightLinkSelector: this.highlightClick\n            });\n            var b = customStorage({\n                withExpiry: !0\n            });\n            this.storage = new b(\"archiveSearch\"), this.updateFromCache();\n            if (((this.attr.timeRanges.length == 0))) {\n                this.$node.hide();\n                return;\n            }\n        ;\n        ;\n            this.$node.show(), this.canvas = this.select(\"canvasSelector\")[0], this.monthLinkTemplate = this.select(\"timeRangeLinkSelector\").clone(!1), this.select(\"timeRangeLinkSelector\").remove(), this.highlightItemTemplate = this.select(\"highlightLinkSelector\").clone(!1), this.select(\"highlightLinkSelector\").remove(), this.setupCoordinates(), this.drawGraph(), this.containerOffset = 0, this.navActive();\n            var c = this.select(\"timeRangeLinkSelector\").length;\n            this.trigger(\"uiArchiveShown\", {\n                monthsDisplayed: c\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), customStorage = require(\"app/utils/storage/custom\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(archiveNavigator);\n    var SECONDS_IN_YEAR = 31536000, STROKE_WIDTH = 2, TOP_INSET = 0, BOTTOM_INSET = 0, MINIMUM_TIME_PERIOD = 5184000, TWEET_EPOCH = 1142899200, GRAPH_GRID_COLOR = \"#e8e8e8\", GRADIENT_FILL_TOP_COLOR = \"rgba(44, 138, 205, 0.75)\", GRADIENT_FILL_BOTTOM_COLOR = \"rgba(44, 138, 205, 0.00)\", STROKE_GRADIENT_TOP_COLOR = \"#203c87\", STROKE_GRADIENT_MIDDLE_COLOR = \"#0075be\", STROKE_GRADIENT_BOTTOM_COLOR = \"#29abe2\";\n});\ndefine(\"app/data/archive_navigator_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function ArchiveNavigatorScribe() {\n        this.generateNavData = function(a) {\n            return {\n                event_info: a.monthsInPast\n            };\n        }, this.generateImpressionData = function(a) {\n            return {\n                event_info: a.monthsDisplayed\n            };\n        }, this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiArchiveRangeClick\", {\n                element: \"section\",\n                action: \"search\"\n            }, this.generateNavData), this.scribeOnEvent(\"uiArchiveHighlightClick\", {\n                element: \"peak\",\n                action: \"search\"\n            }, this.generateNavData), this.scribeOnEvent(\"uiArchiveNavFuture\", {\n                element: \"future_nav\",\n                action: \"JSBNG__navigate\"\n            }, this.generateNavData), this.scribeOnEvent(\"uiArchiveNavPast\", {\n                element: \"past_nav\",\n                action: \"JSBNG__navigate\"\n            }, this.generateNavData), this.scribeOnEvent(\"uiArchiveShown\", \"impression\", this.generateImpressionData);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(ArchiveNavigatorScribe, withScribe);\n});\ndefine(\"app/boot/search\", [\"module\",\"require\",\"exports\",\"app/boot/app\",\"app/boot/logged_out\",\"core/utils\",\"app/boot/wtf_module\",\"app/boot/trends\",\"core/i18n\",\"app/ui/facets\",\"app/data/media_thumbnails_scribe\",\"app/ui/media/card_thumbnails\",\"app/data/facets_timeline\",\"app/ui/navigation_links\",\"app/ui/dialogs/iph_search_result_dialog\",\"app/ui/search/archive_navigator\",\"app/data/archive_navigator_scribe\",\"app/data/client_event\",], function(module, require, exports) {\n    var bootApp = require(\"app/boot/app\"), loggedOutBoot = require(\"app/boot/logged_out\"), utils = require(\"core/utils\"), whoToFollowModule = require(\"app/boot/wtf_module\"), trends = require(\"app/boot/trends\"), _ = require(\"core/i18n\"), uiFacets = require(\"app/ui/facets\"), MediaThumbnailsScribe = require(\"app/data/media_thumbnails_scribe\"), CardThumbnails = require(\"app/ui/media/card_thumbnails\"), FacetsTimeline = require(\"app/data/facets_timeline\"), NavigationLinks = require(\"app/ui/navigation_links\"), InProductHelpDialog = require(\"app/ui/dialogs/iph_search_result_dialog\"), ArchiveNavigator = require(\"app/ui/search/archive_navigator\"), ArchiveNavigatorScribe = require(\"app/data/archive_navigator_scribe\"), clientEvent = require(\"app/data/client_event\");\n    module.exports = function(b) {\n        bootApp(b), loggedOutBoot(b), clientEvent.scribeData.query = b.query, whoToFollowModule(b), trends(b), MediaThumbnailsScribe.attachTo(JSBNG__document, b), FacetsTimeline.attachTo(JSBNG__document, {\n            endpoint: \"/i/search/facets\",\n            query: b.query\n        }), CardThumbnails.attachTo(\".top-images\", utils.merge(b, {\n            thumbnailSize: 66,\n            thumbnailsVisible: 4,\n            loadOnEventName: \"uiLoadThumbnails\",\n            defaultGalleryTitle: _(\"Top photos for \\\"{{query}}\\\"\", {\n                query: b.query\n            }),\n            profileUser: !1,\n            mediaGrid: !1,\n            dataEvents: {\n                requestItems: \"uiWantsMoreFacetTimelineItems\",\n                gotItems: \"dataGotMoreFacetimagesTimelineItems\"\n            },\n            defaultRequestData: {\n                facet_type: \"images\",\n                onebox_type: b.oneboxType\n            },\n            eventData: {\n                scribeContext: {\n                    component: \"dashboard_photos\"\n                }\n            }\n        })), CardThumbnails.attachTo(\".top-videos\", utils.merge(b, {\n            thumbnailSize: 66,\n            thumbnailsVisible: 4,\n            loadOnEventName: \"uiLoadThumbnails\",\n            defaultGalleryTitle: _(\"Top videos for \\\"{{query}}\\\"\", {\n                query: b.query\n            }),\n            profileUser: !1,\n            mediaGrid: !1,\n            dataEvents: {\n                requestItems: \"uiWantsMoreFacetTimelineItems\",\n                gotItems: \"dataGotMoreFacetvideosTimelineItems\"\n            },\n            defaultRequestData: {\n                facet_type: \"videos\",\n                onebox_type: b.oneboxType\n            },\n            eventData: {\n                scribeContext: {\n                    component: \"dashboard_videos\"\n                }\n            }\n        })), uiFacets.attachTo(\".dashboard\", utils.merge(b, {\n            thumbnailLoadEvent: \"uiLoadThumbnails\"\n        })), ArchiveNavigatorScribe.attachTo(\".module.archive-search\"), ArchiveNavigator.attachTo(\".module.archive-search\", utils.merge(b.timeNavData, {\n            eventData: {\n                scribeContext: {\n                    component: \"archive_navigator\"\n                }\n            }\n        })), InProductHelpDialog.attachTo(\"#in_product_help_dialog\"), NavigationLinks.attachTo(\".search-nav\", {\n            eventData: {\n                scribeContext: {\n                    component: \"stream_nav\"\n                }\n            }\n        }), NavigationLinks.attachTo(\".js-search-pivot\", {\n            eventData: {\n                scribeContext: {\n                    component: \"stream_nav\"\n                }\n            }\n        }), NavigationLinks.attachTo(\".js-related-queries\", {\n            eventData: {\n                scribeContext: {\n                    component: \"related_queries\"\n                }\n            }\n        }), NavigationLinks.attachTo(\".js-spelling-corrections\", {\n            eventData: {\n                scribeContext: {\n                    component: \"spelling_corrections\"\n                }\n            }\n        });\n    };\n});\ndefine(\"app/ui/timelines/with_story_pagination\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withStoryPagination() {\n        this.isOldItem = function(a) {\n            return a.is_scrolling_request;\n        }, this.isNewItem = function(a) {\n            return a.is_refresh_request;\n        }, this.wasNewItemsRequest = function(a) {\n            return !!a.refresh_cursor;\n        }, this.wasOldItemsRequest = function(a) {\n            return !!a.scroll_cursor;\n        }, this.wasRangeRequest = function() {\n            return !1;\n        }, this.shouldGetOldItems = function() {\n            return this.has_more_items;\n        }, this.getOldItemsData = function() {\n            return {\n                scroll_cursor: this.scroll_cursor\n            };\n        }, this.getNewItemsData = function() {\n            return {\n                refresh_cursor: this.refresh_cursor\n            };\n        }, this.resetStateVariables = function(a) {\n            a = ((a || {\n            })), this.resetScrollCursor(a), this.resetRefreshCursor(a), this.trigger(\"uiStoryPaginationReset\");\n        }, this.resetScrollCursor = function(a) {\n            if (a.scroll_cursor) {\n                this.scroll_cursor = a.scroll_cursor, this.$container.attr(\"data-scroll-cursor\", this.scroll_cursor);\n            }\n             else {\n                if (a.is_scrolling_request) this.has_more_items = !1, this.scroll_cursor = null, this.$container.removeAttr(\"data-scroll-cursor\");\n                 else {\n                    var b = this.$container.attr(\"data-scroll-cursor\");\n                    this.scroll_cursor = ((b ? b : null));\n                }\n            ;\n            }\n        ;\n        ;\n        }, this.resetRefreshCursor = function(a) {\n            if (a.refresh_cursor) this.refresh_cursor = a.refresh_cursor, this.$container.attr(\"data-refresh-cursor\", this.refresh_cursor);\n             else {\n                var b = this.$container.attr(\"data-refresh-cursor\");\n                this.refresh_cursor = ((b ? b : null));\n            }\n        ;\n        ;\n        }, this.onTimelineReset = function(a, b) {\n            this.resetStateVariables(b);\n        }, this.after(\"initialize\", function(a) {\n            this.$container = this.select(\"containerSelector\"), this.has_more_items = !0, this.resetStateVariables(), this.JSBNG__on(\"uiTimelineReset\", this.onTimelineReset);\n        });\n    };\n;\n    module.exports = withStoryPagination;\n});\ndefine(\"app/ui/gallery/with_grid\", [\"module\",\"require\",\"exports\",\"app/utils/image/image_loader\",], function(module, require, exports) {\n    function withGrid() {\n        this.defaultAttrs({\n            scribeRows: !1,\n            gridWidth: 512,\n            gridHeight: 120,\n            gridMargin: 8,\n            gridRatio: 3,\n            gridPanoRatio: 2.5,\n            mediaSelector: \".media-thumbnail:not(.twitter-timeline-link)\",\n            mediaRowFirstSelector: \".media-thumbnail.clear:not(.twitter-timeline-link)\"\n        }), this.render = function(a) {\n            this.currentRow = this.getCurrentRow();\n            var b = this.getUnprocessedMedia();\n            if (!b.length) {\n                this.scribeResults();\n                return;\n            }\n        ;\n        ;\n            var c = 0, d = 0, e = [];\n            for (var f = 0; ((f < b.length)); f++) {\n                if (((this.attr.gridRowLimit && ((this.currentRow > this.attr.gridRowLimit))))) {\n                    return;\n                }\n            ;\n            ;\n                var g = $(b.get(f));\n                ((!c && (c = parseInt(g.attr(\"data-height\"))))), ((a && (c = this.attr.gridHeight))), d += this.scaleGridMedia(g, c), e.push(g);\n                if (((((((d / c)) >= this.attr.gridRatio)) || a))) {\n                    ((a && (d = this.attr.gridWidth))), this.setGridRow(e, d, c, a), this.setCurrentRow(), this.currentRow++, d = 0, c = 0, e = [];\n                }\n            ;\n            ;\n            };\n        ;\n            this.scribeResults();\n        }, this.renderAll = function() {\n            JSBNG__clearTimeout(this.renderDelay), this.renderDelay = JSBNG__setTimeout(this.render.bind(this), 20);\n        }, this.setCurrentRow = function() {\n            $(this.node).attr(\"data-processed-rows\", this.currentRow);\n        }, this.getCurrentRow = function() {\n            var a = parseInt($(this.node).attr(\"data-processed-rows\"));\n            return ((a ? this.currentRow = a : this.currentRow = 1)), this.currentRow;\n        }, this.scaleGridMedia = function(a, b) {\n            var c = parseInt(a.attr(\"data-height\")), d = parseInt(a.attr(\"data-width\")), e = ((((b / c)) * d));\n            return ((((((d / c)) > this.attr.gridPanoRatio)) && (e = ((b * this.attr.gridPanoRatio)), a.attr(\"data-pano\", \"true\")))), a.attr({\n                \"scaled-height\": b,\n                \"scaled-width\": e\n            }), e;\n        }, this.setGridRow = function(a, b, c, d) {\n            var e = ((this.attr.gridWidth - ((a.length * this.attr.gridMargin)))), f = ((e / b)), g = ((c * f));\n            $.each(a, function(a, b) {\n                var c = $(b), e = ((parseInt(c.attr(\"scaled-width\")) * f));\n                c.height(g), c.width(e), c.attr(\"scaled-height\", g), c.attr(\"Scaled-width\", e), c.attr(\"data-grid-processed\", \"true\"), c.addClass(\"enabled\"), ((((((a == 0)) && !d)) && c.addClass(\"clear\"))), this.renderMedia(c);\n            }.bind(this));\n        }, this.scribeResults = function() {\n            if (this.attr.scribeRows) {\n                var a = this.getUnscribedMedia(), b = {\n                    thumbnails: [],\n                    scribeContext: {\n                        section: \"media_gallery\"\n                    }\n                };\n                $.each(a, function(a, c) {\n                    b.thumbnails.push($(c).attr(\"data-url\")), $(c).attr(\"data-scribed\", !0);\n                }), this.trigger(\"uiMediaGalleryResults\", b);\n            }\n        ;\n        ;\n        }, this.getMedia = function() {\n            return this.select(\"mediaSelector\");\n        }, this.getUnprocessedMedia = function() {\n            return this.getMedia().filter(\":not([data-grid-processed='true'])\");\n        }, this.getUnscribedMedia = function() {\n            return this.getMedia().filter(\":not([data-scribed='true'])\");\n        }, this.markFailedMedia = function(a) {\n            var b;\n            if (a.hasClass(\"clear\")) {\n                b = a.next(this.attr.mediaSelector);\n                if (!b.length) {\n                    return;\n                }\n            ;\n            ;\n            }\n             else {\n                b = a.prev(this.attr.mediaSelector);\n                while (((b && !b.hasClass(\"clear\")))) {\n                    b = b.prev(this.attr.mediaSelector);\n                ;\n                };\n            ;\n            }\n        ;\n        ;\n            b.attr(\"data-grid-processed\", \"false\"), b.nextAll(this.attr.mediaSelector).attr(\"data-grid-processed\", \"false\"), b.nextAll(this.attr.mediaSelector).removeClass(\"clear\"), JSBNG__clearTimeout(this.resetTimer), this.resetTimer = JSBNG__setTimeout(this.render.bind(this), 200);\n        }, this.renderMedia = function(a) {\n            var b = $(a);\n            if (b.attr(\"data-loaded\")) {\n                return;\n            }\n        ;\n        ;\n            var c = function(a) {\n                this.loadThumbSuccess(b, a);\n            }.bind(this), d = function() {\n                this.loadThumbFail(b);\n            }.bind(this);\n            imageLoader.load(b.attr(\"data-resolved-url-small\"), c, d);\n        }, this.loadThumbSuccess = function(a, b) {\n            if (a.attr(\"data-pano\")) {\n                var c = ((((a.height() / parseInt(a.attr(\"data-height\")))) * parseInt(a.attr(\"data-width\"))));\n                b.width(c), b.css(\"margin-left\", ((((-((c - a.width())) / 2)) + \"px\")));\n            }\n        ;\n        ;\n            a.prepend(b), a.attr(\"data-loaded\", !0);\n        }, this.loadThumbFail = function(a) {\n            this.markFailedMedia(a), a.remove();\n        }, this.openGallery = function(a) {\n            a.preventDefault(), a.stopPropagation(), this.trigger(a.target, \"uiOpenGallery\", {\n                title: \"Photo\"\n            });\n            var b = $(a.target);\n            this.trigger(\"uiMediaThumbnailClick\", {\n                url: b.attr(\"data-url\")\n            });\n        }, this.after(\"initialize\", function() {\n            this.render(), this.JSBNG__on(\"click\", {\n                mediaSelector: this.openGallery\n            }), this.JSBNG__on(\"uiHasInjectedOldTimelineItems\", this.renderAll);\n        });\n    };\n;\n    var imageLoader = require(\"app/utils/image/image_loader\");\n    module.exports = withGrid;\n});\ndefine(\"app/ui/timelines/universal_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/ui/timelines/with_new_items\",\"app/ui/timelines/with_story_pagination\",\"app/ui/timelines/with_activity_supplements\",\"app/ui/with_timestamp_updating\",\"app/ui/with_tweet_actions\",\"app/ui/with_item_actions\",\"app/ui/timelines/with_traveling_ptw\",\"app/ui/timelines/with_pinned_stream_items\",\"app/ui/gallery/with_grid\",\"app/ui/with_interaction_data\",\"app/ui/with_user_actions\",\"app/ui/gallery/with_gallery\",], function(module, require, exports) {\n    function universalTimeline() {\n        this.defaultAttrs({\n            gridRowLimit: 2,\n            separationModuleSelector: \".separation-module\",\n            prevToModuleClass: \"before-module\",\n            userGalleryItemSelector: \".stream-user-gallery\",\n            prevToUserGalleryItemClass: \"before-user-gallery\",\n            eventData: {\n                scribeContext: {\n                    component: \"\"\n                }\n            }\n        }), this.setPrevToModuleClass = function() {\n            this.select(\"separationModuleSelector\").prev().addClass(this.attr.prevToModuleClass);\n        }, this.initialItemsDisplayed = function() {\n            var a = this.select(\"genericItemSelector\"), b = [], c = [], d = function(a, d) {\n                if (!$(d).data(\"item-type\")) {\n                    return;\n                }\n            ;\n            ;\n                var e = this.interactionData(this.findFirstItemContent($(d)));\n                switch (e.itemType) {\n                  case \"tweet\":\n                    b.push(e);\n                    break;\n                  case \"user\":\n                    c.push(e);\n                };\n            ;\n            }.bind(this);\n            for (var e = 0, f = a.length; ((e < f)); e++) {\n                d(e, a[e]);\n            ;\n            };\n        ;\n            this.reportUsersAndTweets(c, b);\n        }, this.reportItemsDisplayed = function(a, b) {\n            var c = [], d = [];\n            b.items.forEach(function(a) {\n                switch (a.itemType) {\n                  case \"tweet\":\n                    d.push(a);\n                    break;\n                  case \"user\":\n                    c.push(a);\n                };\n            ;\n            }), this.reportUsersAndTweets(c, d);\n        }, this.reportUsersAndTweets = function(a, b) {\n            this.trigger(\"uiTweetsDisplayed\", {\n                tweets: b\n            }), this.trigger(\"uiUsersDisplayed\", {\n                users: a\n            });\n        }, this.setItemType = function(a) {\n            var b = a.closest(this.attr.genericItemSelector), c = b.data(\"item-type\");\n            this.attr.itemType = c, this.attr.eventData.scribeContext.component = c;\n        }, this.after(\"initialize\", function(a) {\n            this.setPrevToModuleClass(), this.initialItemsDisplayed(), this.JSBNG__on(\"uiHasInjectedNewTimeline uiHasInjectedOldTimelineItems uiHasInjectedRangeTimelineItems\", this.reportItemsDisplayed);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withBaseTimeline = require(\"app/ui/timelines/with_base_timeline\"), withOldItems = require(\"app/ui/timelines/with_old_items\"), withNewItems = require(\"app/ui/timelines/with_new_items\"), withStoryPagination = require(\"app/ui/timelines/with_story_pagination\"), withActivitySupplements = require(\"app/ui/timelines/with_activity_supplements\"), withTimestampUpdating = require(\"app/ui/with_timestamp_updating\"), withTweetActions = require(\"app/ui/with_tweet_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withTravelingPtw = require(\"app/ui/timelines/with_traveling_ptw\"), withPinnedStreamItems = require(\"app/ui/timelines/with_pinned_stream_items\"), withGrid = require(\"app/ui/gallery/with_grid\"), withInteractionData = require(\"app/ui/with_interaction_data\"), withUserActions = require(\"app/ui/with_user_actions\"), withGallery = require(\"app/ui/gallery/with_gallery\");\n    module.exports = defineComponent(universalTimeline, withBaseTimeline, withStoryPagination, withOldItems, withNewItems, withTimestampUpdating, withTweetActions, withItemActions, withTravelingPtw, withPinnedStreamItems, withActivitySupplements, withGrid, withUserActions, withGallery);\n});\ndefine(\"app/boot/universal_timeline\", [\"module\",\"require\",\"exports\",\"app/boot/timeline\",\"app/boot/tweets\",\"app/boot/help_pips\",\"app/ui/expando/close_all_button\",\"app/ui/timelines/universal_timeline\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a) {\n        var b = utils.merge(a, {\n            endpoint: a.search_endpoint\n        });\n        timelineBoot(b), tweetsBoot(\"#timeline\", utils.merge(b, {\n            excludeUserActions: !0\n        })), ((b.help_pips_decider && helpPipsBoot(b))), CloseAllButton.attachTo(\"#close-all-button\", {\n            addEvent: \"uiHasExpandedTweet\",\n            subtractEvent: \"uiHasCollapsedTweet\",\n            where: \"#timeline\",\n            closeAllEvent: \"uiWantsToCloseAllTweets\"\n        }), UniversalTimeline.attachTo(\"#timeline\", utils.merge(b, {\n            tweetItemSelector: \"div.original-tweet\",\n            gridRowLimit: 2,\n            scribeRows: !0\n        }));\n    };\n;\n    var timelineBoot = require(\"app/boot/timeline\"), tweetsBoot = require(\"app/boot/tweets\"), helpPipsBoot = require(\"app/boot/help_pips\"), CloseAllButton = require(\"app/ui/expando/close_all_button\"), UniversalTimeline = require(\"app/ui/timelines/universal_timeline\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/data/user_search\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function userSearchData() {\n        this.defaultAttrs({\n            query: null\n        }), this.makeUserSearchModuleRequest = function() {\n            if (!this.attr.query) {\n                return;\n            }\n        ;\n        ;\n            var a = {\n                q: this.attr.query\n            };\n            this.get({\n                url: \"/i/search/top_users/\",\n                data: a,\n                eventData: a,\n                success: \"dataUserSearchContent\",\n                error: \"dataUserSearchContentError\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiRefreshUserSearchModule\", this.makeUserSearchModuleRequest);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(userSearchData, withData);\n});\ndefine(\"app/data/user_search_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",\"app/utils/scribe_item_types\",], function(module, require, exports) {\n    function userSearchDataScribe() {\n        this.scribeResults = function(a, b) {\n            var c = {\n                action: \"impression\"\n            };\n            this.scribe(c, b);\n            var d = {\n            };\n            c.element = b.element, ((((b.items && b.items.length)) ? (c.action = \"results\", d = {\n                items: b.items.map(function(a, b) {\n                    return {\n                        id: a,\n                        item_type: itemTypes.user,\n                        position: b\n                    };\n                })\n            }) : c.action = \"no_results\")), this.scribe(c, b, d);\n        }, this.scribeUserSearch = function(a, b) {\n            this.scribe({\n                action: \"search\"\n            }, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiUserSearchModuleDisplayed\", this.scribeResults), this.JSBNG__on(\"uiUserSearchNavigation\", this.scribeUserSearch);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), itemTypes = require(\"app/utils/scribe_item_types\");\n    module.exports = defineComponent(userSearchDataScribe, withScribe);\n});\ndefine(\"app/ui/user_search\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function userSearchModule() {\n        this.defaultAttrs({\n            peopleLinkSelector: \"a.list-link\",\n            avatarRowSelector: \".avatar-row\",\n            userThumbSelector: \".user-thumb\",\n            itemType: \"user\"\n        }), this.updateContent = function(a, b) {\n            var c = this.select(\"peopleLinkSelector\");\n            c.JSBNG__find(this.attr.avatarRowSelector).remove(), c.append(b.users_module), this.userItemsDisplayed();\n        }, this.userItemsDisplayed = function() {\n            var a = this.select(\"userThumbSelector\").map(function() {\n                return (($(this).data(\"user-id\") + \"\"));\n            }).toArray();\n            this.trigger(\"uiUserSearchModuleDisplayed\", {\n                items: a,\n                element: \"initial\"\n            });\n        }, this.searchForUsers = function(a, b) {\n            ((((a.target == b.el)) && this.trigger(\"uiUserSearchNavigation\")));\n        }, this.getItemPosition = function(a) {\n            return a.closest(this.attr.userThumbSelector).index();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataUserSearchContent\", this.updateContent), this.JSBNG__on(\"click\", {\n                peopleLinkSelector: this.searchForUsers\n            }), this.trigger(\"uiRefreshUserSearchModule\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withItemActions = require(\"app/ui/with_item_actions\");\n    module.exports = defineComponent(userSearchModule, withItemActions);\n});\ndefine(\"app/data/saved_searches\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/data/with_auth_token\",], function(module, require, exports) {\n    function savedSearches() {\n        this.saveSearch = function(a, b) {\n            this.post({\n                url: \"/i/saved_searches/create.json\",\n                data: b,\n                headers: {\n                    \"X-PHX\": !0\n                },\n                eventData: \"\",\n                success: \"dataAddedSavedSearch\",\n                error: $.noop\n            });\n        }, this.removeSavedSearch = function(a, b) {\n            this.post({\n                url: ((((\"/i/saved_searches/destroy/\" + encodeURIComponent(b.id))) + \".json\")),\n                data: \"\",\n                headers: {\n                    \"X-PHX\": !0\n                },\n                eventData: \"\",\n                success: \"dataRemovedSavedSearch\",\n                error: $.noop\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"uiAddSavedSearch\", this.saveSearch), this.JSBNG__on(\"uiRemoveSavedSearch\", this.removeSavedSearch);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), withAuthToken = require(\"app/data/with_auth_token\");\n    module.exports = defineComponent(savedSearches, withData, withAuthToken);\n});\ndefine(\"app/ui/search_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_dropdown\",], function(module, require, exports) {\n    function searchDropdown() {\n        this.defaultAttrs({\n            toggler: \".js-search-dropdown\",\n            saveOrRemoveSelector: \".js-toggle-saved-search-link\",\n            savedSearchSelector: \".js-saved-search\",\n            unsavedSearchSelector: \".js-unsaved-search\",\n            searchTitleSelector: \".search-title\",\n            advancedSearchSelector: \".advanced-search\",\n            embedSearchSelector: \".embed-search\"\n        }), this.addSavedSearch = function(a, b) {\n            this.trigger(\"uiAddSavedSearch\", {\n                query: $(a.target).data(\"query\")\n            });\n        }, this.removeSavedSearch = function(a, b) {\n            this.savedSearchId = $(a.target).data(\"id\"), this.trigger(\"uiOpenConfirmDialog\", {\n                titleText: _(\"Remove saved search\"),\n                bodyText: _(\"Are you sure you want to remove this search?\"),\n                cancelText: _(\"No\"),\n                submitText: _(\"Yes\"),\n                action: \"SavedSearchRemove\"\n            });\n        }, this.confirmSavedSearchRemoval = function() {\n            if (!this.savedSearchId) {\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiRemoveSavedSearch\", {\n                id: this.savedSearchId\n            });\n        }, this.savedSearchRemoved = function(a, b) {\n            this.select(\"saveOrRemoveSelector\").removeClass(\"js-saved-search\").addClass(\"js-unsaved-search\").text(_(\"Save search\"));\n            var c = $(this.attr.searchTitleSelector).JSBNG__find(\".search-query\").text();\n            c = $(\"\\u003Cdiv/\\u003E\").text(c).html(), $(this.attr.searchTitleSelector).html(_(\"Results for \\u003Cstrong class=\\\"search-query\\\"\\u003E{{query}}\\u003C/strong\\u003E\", {\n                query: c\n            }));\n        }, this.navigatePage = function(a, b) {\n            this.trigger(\"uiNavigate\", {\n                href: $(a.target).attr(\"href\")\n            });\n        }, this.savedSearchAdded = function(a, b) {\n            this.select(\"saveOrRemoveSelector\").removeClass(\"js-unsaved-search\").addClass(\"js-saved-search\").text(_(\"Remove saved search\")).data(\"id\", b.id);\n            var c = $(this.attr.searchTitleSelector).JSBNG__find(\".search-query\").text();\n            c = $(\"\\u003Cdiv/\\u003E\").text(c).html(), $(this.attr.searchTitleSelector).html(_(\"Saved search: \\u003Cstrong class=\\\"search-query\\\"\\u003E{{query}}\\u003C/strong\\u003E\", {\n                query: c\n            }));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"click\", {\n                advancedSearchSelector: this.navigatePage,\n                embedSearchSelector: this.navigatePage,\n                savedSearchSelector: this.removeSavedSearch,\n                unsavedSearchSelector: this.addSavedSearch\n            }), this.JSBNG__on(JSBNG__document, \"uiSavedSearchRemoveConfirm\", this.confirmSavedSearchRemoval), this.JSBNG__on(JSBNG__document, \"dataAddedSavedSearch\", this.savedSearchAdded), this.JSBNG__on(JSBNG__document, \"dataRemovedSavedSearch\", this.savedSearchRemoved);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withDropdown = require(\"app/ui/with_dropdown\");\n    module.exports = defineComponent(searchDropdown, withDropdown);\n});\ndefine(\"app/data/story_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_interaction_data_scribe\",], function(module, require, exports) {\n    function storyScribe() {\n        this.defaultAttrs({\n            t1dScribeErrors: !1,\n            t1dScribeTimes: !1\n        }), this.scribeCardSearchClick = function(a, b) {\n            this.scribeInteraction({\n                element: \"topic\",\n                action: \"search\"\n            }, b);\n        }, this.scribeCardNewsClick = function(a, b) {\n            var c = {\n            };\n            ((b.tcoUrl && (c.message = b.tcoUrl))), ((((b.text && ((b.text.indexOf(\"pic.twitter.com\") == 0)))) && (b.url = ((\"http://\" + b.text))))), this.scribeInteraction({\n                element: \"article\",\n                action: \"open_link\"\n            }, b, c);\n        }, this.scribeCardMediaClick = function(a, b) {\n            this.scribeInteraction({\n                element: b.storyMediaType,\n                action: \"click\"\n            }, b);\n        }, this.scribeTweetStory = function(a, b) {\n            this.scribeInteraction({\n                element: \"tweet_link\",\n                action: ((((a.type === \"uiStoryTweetSent\")) ? \"success\" : \"click\"))\n            }, b);\n        }, this.scribeCardImageLoadTime = function(a, b) {\n            ((this.attr.t1dScribeTimes && this.scribe({\n                component: \"topic_story\",\n                action: \"complete\"\n            }, b)));\n        }, this.scribeCardImageLoadError = function(a, b) {\n            ((this.attr.t1dScribeErrors && this.scribe({\n                component: \"topic_story\",\n                action: \"error\"\n            }, b)));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiCardMediaClick\", this.scribeCardMediaClick), this.JSBNG__on(\"uiCardNewsClick\", this.scribeCardNewsClick), this.JSBNG__on(\"uiCardSearchClick\", this.scribeCardSearchClick), this.JSBNG__on(\"uiTweetStoryLinkClicked uiStoryTweetSent\", this.scribeTweetStory), this.JSBNG__on(\"uiCardImageLoaded\", this.scribeCardImageLoadTime), this.JSBNG__on(\"uiCardImageLoadError\", this.scribeCardImageLoadError);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withInterationDataScribe = require(\"app/data/with_interaction_data_scribe\");\n    module.exports = defineComponent(storyScribe, withInterationDataScribe);\n});\ndefine(\"app/data/onebox_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function oneboxScribe() {\n        this.scribeOneboxImpression = function(a, b) {\n            var c = {\n                component: b.type,\n                action: \"impression\"\n            };\n            this.scribe(c);\n            if (b.items) {\n                var d = {\n                    item_count: b.items.length,\n                    item_ids: b.items\n                };\n                c.action = ((b.items.length ? \"results\" : \"no_results\")), this.scribe(c, b, d);\n            }\n        ;\n        ;\n        }, this.scribeViewAllClick = function(a, b) {\n            var c = {\n                component: b.type,\n                action: \"view_all\"\n            };\n            this.scribe(c, b);\n        }, this.scribeEventOneboxClick = function(a, b) {\n            this.scribe({\n                component: \"JSBNG__event\",\n                section: \"onebox\",\n                action: \"click\"\n            }, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiOneboxDisplayed\", this.scribeOneboxImpression), this.JSBNG__on(\"uiOneboxViewAllClick\", this.scribeViewAllClick), this.JSBNG__on(\"uiEventOneboxClick\", this.scribeEventOneboxClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(oneboxScribe, withScribe);\n});\ndefine(\"app/ui/with_story_clicks\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_interaction_data\",], function(module, require, exports) {\n    function withStoryClicks() {\n        compose.mixin(this, [withInteractionData,]), this.defaultAttrs({\n            cardSearchSelector: \".js-action-card-search\",\n            cardNewsSelector: \".js-action-card-news\",\n            cardMediaSelector: \".js-action-card-media\",\n            cardHeadlineSelector: \".js-news-headline .js-action-card-news\",\n            tweetLinkButtonSelector: \".story-social-new-tweet\",\n            storyItemContainerSelector: \".js-story-item\"\n        }), this.getLinkData = function(a) {\n            var b = $(a).closest(\"[data-url]\");\n            return {\n                url: b.attr(\"data-url\"),\n                tcoUrl: $(a).closest(\"a[href]\").attr(\"href\"),\n                text: b.text()\n            };\n        }, this.cardSearchClick = function(a, b) {\n            this.trigger(\"uiCardSearchClick\", this.interactionData(a, this.getLinkData(a.target)));\n        }, this.cardNewsClick = function(a, b) {\n            var c = $(a.target);\n            this.trigger(\"uiCardNewsClick\", this.interactionData(a, this.getLinkData(a.target)));\n        }, this.cardMediaClick = function(a, b) {\n            this.trigger(\"uiCardMediaClick\", this.interactionData(a, this.getLinkData(a.target)));\n        }, this.selectStory = function(a, b) {\n            var c = ((((a.type === \"uiHasExpandedStory\")) ? \"uiItemSelected\" : \"uiItemDeselected\")), d = $(a.target).JSBNG__find(this.attr.storyItemContainerSelector), e = this.interactionData(d);\n            e.scribeContext.element = ((((e.storySource === \"trends\")) ? \"top_tweets\" : \"social_context\")), this.trigger(c, e);\n        }, this.tweetSent = function(a, b) {\n            var c = b.in_reply_to_status_id;\n            if (c) {\n                var d = this.$node.JSBNG__find(((\".open \" + this.attr.storyItemSelector))).has(((((\".tweet[data-tweet-id=\" + c)) + \"]\")));\n                if (!d.length) {\n                    return;\n                }\n            ;\n            ;\n                var e = this.getItemData(d, c, \"reply\");\n                this.trigger(\"uiStoryTweetAction\", e);\n            }\n             else {\n                var d = this.$node.JSBNG__find(((((((this.attr.storyItemSelector + \"[data-query=\\\"\")) + b.customData.query)) + \"\\\"]\")));\n                if (!d.length) {\n                    return;\n                }\n            ;\n            ;\n                this.trigger(\"uiStoryTweetSent\", this.interactionData(d));\n            }\n        ;\n        ;\n        }, this.tweetSelectedStory = function(a, b) {\n            var c = $(b.el).closest(this.attr.storyItemSelector), d = this.interactionData(c);\n            this.trigger(\"uiOpenTweetDialog\", {\n                defaultText: ((\" \" + c.data(\"url\"))),\n                cursorPosition: 0,\n                customData: {\n                    query: c.data(\"query\")\n                },\n                scribeContext: d.scribeContext\n            }), this.trigger(\"uiTweetStoryLinkClicked\", this.interactionData(c));\n        }, this.getCardPosition = function(a) {\n            var b;\n            return this.select(\"storyItemSelector\").each(function(c) {\n                if ((($(this).attr(\"data-query\") === a))) {\n                    return b = c, !1;\n                }\n            ;\n            ;\n            }), b;\n        }, this.getItemData = function(a, b, c) {\n            var d = $(a).closest(this.attr.storyItemSelector), e = d.JSBNG__find(this.attr.cardHeadlineSelector), f = d.data(\"query\"), g = [];\n            d.JSBNG__find(\".tweet[data-tweet-id]\").each(function() {\n                g.push($(this).data(\"tweet-id\"));\n            });\n            var h = {\n                cardType: d.data(\"story-type\"),\n                query: f,\n                title: e.text().trim(),\n                tweetIds: g,\n                cardMediaType: d.data(\"card-media-type\"),\n                position: this.getCardPosition(f),\n                href: e.attr(\"href\"),\n                source: d.data(\"source\"),\n                tweetId: b,\n                action: c\n            };\n            return h;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                cardSearchSelector: this.cardSearchClick,\n                cardNewsSelector: this.cardNewsClick,\n                cardMediaSelector: this.cardMediaClick,\n                tweetLinkButtonSelector: this.tweetSelectedStory\n            }), this.JSBNG__on(JSBNG__document, \"uiTweetSent\", this.tweetSent), this.JSBNG__on(\"uiHasCollapsedStory uiHasExpandedStory\", this.selectStory);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withInteractionData = require(\"app/ui/with_interaction_data\");\n    module.exports = withStoryClicks;\n});\ndeferred(\"$lib/jquery_autoellipsis.js\", function() {\n    (function($) {\n        function e(a, b) {\n            var c = a.data(\"jqae\");\n            ((c || (c = {\n            })));\n            var d = c.wrapperElement;\n            ((d || (d = a.wrapInner(\"\\u003Cdiv/\\u003E\").JSBNG__find(\"\\u003Ediv\"))));\n            var e = d.data(\"jqae\");\n            ((e || (e = {\n            })));\n            var i = e.originalContent;\n            ((i ? d = e.originalContent.clone(!0).data(\"jqae\", {\n                originalContent: i\n            }).replaceAll(d) : d.data(\"jqae\", {\n                originalContent: d.clone(!0)\n            }))), a.data(\"jqae\", {\n                wrapperElement: d,\n                containerWidth: a.JSBNG__innerWidth(),\n                containerHeight: a.JSBNG__innerHeight()\n            });\n            var j = !1, k = d;\n            ((b.selector && (k = $(d.JSBNG__find(b.selector).get().reverse())))), k.each(function() {\n                var c = $(this), e = c.text(), i = !1;\n                if (((((d.JSBNG__innerHeight() - c.JSBNG__innerHeight())) > a.JSBNG__innerHeight()))) c.remove();\n                 else {\n                    h(c);\n                    if (c.contents().length) {\n                        ((j && (g(c).get(0).nodeValue += b.ellipsis, j = !1)));\n                        while (((d.JSBNG__innerHeight() > a.JSBNG__innerHeight()))) {\n                            i = f(c);\n                            if (!i) {\n                                j = !0, c.remove();\n                                break;\n                            }\n                        ;\n                        ;\n                            h(c);\n                            if (!c.contents().length) {\n                                j = !0, c.remove();\n                                break;\n                            }\n                        ;\n                        ;\n                            g(c).get(0).nodeValue += b.ellipsis;\n                        };\n                    ;\n                        ((((((((b.setTitle == \"onEllipsis\")) && i)) || ((b.setTitle == \"always\")))) ? c.attr(\"title\", e) : ((((b.setTitle != \"never\")) && c.removeAttr(\"title\")))));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n    ;\n        function f(a) {\n            var b = g(a);\n            if (b.length) {\n                var c = b.get(0).nodeValue, d = c.lastIndexOf(\" \");\n                return ((((d > -1)) ? (c = $.trim(c.substring(0, d)), b.get(0).nodeValue = c) : b.get(0).nodeValue = \"\")), !0;\n            }\n        ;\n        ;\n            return !1;\n        };\n    ;\n        function g(a) {\n            if (a.contents().length) {\n                var b = a.contents(), c = b.eq(((b.length - 1)));\n                return ((c.filter(i).length ? c : g(c)));\n            }\n        ;\n        ;\n            a.append(\"\");\n            var b = a.contents();\n            return b.eq(((b.length - 1)));\n        };\n    ;\n        function h(a) {\n            if (a.contents().length) {\n                var b = a.contents(), c = b.eq(((b.length - 1)));\n                if (c.filter(i).length) {\n                    var d = c.get(0).nodeValue;\n                    return d = $.trim(d), ((((d == \"\")) ? (c.remove(), !0) : !1));\n                }\n            ;\n            ;\n                while (h(c)) {\n                ;\n                };\n            ;\n                return ((c.contents().length ? !1 : (c.remove(), !0)));\n            }\n        ;\n        ;\n            return !1;\n        };\n    ;\n        function i() {\n            return ((this.nodeType === 3));\n        };\n    ;\n        function j(c, d) {\n            a[c] = d, ((b || (b = window.JSBNG__setInterval(function() {\n                l();\n            }, 200))));\n        };\n    ;\n        function k(c) {\n            ((a[c] && (delete a[c], ((a.length || ((b && (window.JSBNG__clearInterval(b), b = undefined))))))));\n        };\n    ;\n        function l() {\n            if (!c) {\n                c = !0;\n                {\n                    var fin58keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin58i = (0);\n                    var b;\n                    for (; (fin58i < fin58keys.length); (fin58i++)) {\n                        ((b) = (fin58keys[fin58i]));\n                        {\n                            $(b).each(function() {\n                                var c, d;\n                                c = $(this), d = c.data(\"jqae\"), ((((((d.containerWidth != c.JSBNG__innerWidth())) || ((d.containerHeight != c.JSBNG__innerHeight())))) && e(c, a[b])));\n                            });\n                        ;\n                        };\n                    };\n                };\n            ;\n                c = !1;\n            }\n        ;\n        ;\n        };\n    ;\n        var a = {\n        }, b, c = !1, d = {\n            ellipsis: \"...\",\n            setTitle: \"never\",\n            live: !1\n        };\n        $.fn.ellipsis = function(a, b) {\n            var c, f;\n            return c = $(this), ((((typeof a != \"string\")) && (b = a, a = undefined))), f = $.extend({\n            }, d, b), f.selector = a, c.each(function() {\n                var a = $(this);\n                e(a, f);\n            }), ((f.live ? j(c.selector, f) : k(c.selector))), this;\n        };\n    })(jQuery);\n});\ndefine(\"app/utils/ellipsis\", [\"module\",\"require\",\"exports\",\"$lib/jquery_autoellipsis.js\",], function(module, require, exports) {\n    require(\"$lib/jquery_autoellipsis.js\");\n    var isTextOverflowEllipsisSupported = ((\"textOverflow\" in $(\"\\u003Cdiv\\u003E\")[0].style)), isEllipsisSupported = function(a) {\n        return ((((typeof a.forceEllipsisSupport == \"boolean\")) ? a.forceEllipsisSupport : isTextOverflowEllipsisSupported));\n    }, singleLineEllipsis = function(a, b) {\n        return ((isEllipsisSupported(b) ? !1 : ($(a).each(function() {\n            var a = $(this);\n            if (a.hasClass(\"ellipsify-container\")) {\n                if (!b.force) {\n                    return !0;\n                }\n            ;\n            ;\n                var c = a.JSBNG__find(\"span.ellip-content\");\n                ((c.length && a.html(c.html())));\n            }\n        ;\n        ;\n            a.addClass(\"ellipsify-container\").wrapInner($(\"\\u003Cspan\\u003E\").addClass(\"ellip-content\"));\n            var d = a.JSBNG__find(\"span.ellip-content\");\n            if (((d.width() > a.width()))) {\n                var e = $(\"\\u003Cdiv class=\\\"ellip\\\"\\u003E&hellip;\\u003C/div\\u003E\");\n                a.append(e), d.width(((a.width() - e.width()))).css(\"margin-right\", e.width());\n            }\n        ;\n        ;\n        }), !0)));\n    }, multilineEllipsis = function(a, b) {\n        $(a).each(function(a, c) {\n            var d = $(c);\n            d.ellipsis(b.multilineSelector, b.multilineOptions);\n            var e = d.JSBNG__find(\"\\u003Ediv\"), f = e.contents();\n            d.append(f), e.remove();\n        });\n    }, ellipsify = function(a, b) {\n        b = ((b || {\n        }));\n        var c = ((b.multiline ? ((b.multilineFunction || multilineEllipsis)) : ((b.singlelineFunction || singleLineEllipsis))));\n        return c(a, b);\n    };\n    module.exports = ellipsify;\n});\ndefine(\"app/ui/with_story_ellipsis\", [\"module\",\"require\",\"exports\",\"app/utils/ellipsis\",], function(module, require, exports) {\n    function withStoryEllipsis() {\n        this.defaultAttrs({\n            singleLineEllipsisSelector: \"h3.js-story-title, p.js-metadata\",\n            multilineEllipsisSelector: \"p.js-news-snippet, h3.js-news-headline, .cards-summary h3, .cards-summary .article\",\n            ellipsisChar: \"&ellip;\"\n        }), this.ellipsify = function() {\n            ellipsify(this.select(\"singleLineEllipsisSelector\")), ellipsify(this.select(\"multilineEllipsisSelector\"), {\n                multiline: !0,\n                multilineOptions: {\n                    ellipsis: this.attr.ellipsisChar\n                }\n            });\n        };\n    };\n;\n    var ellipsify = require(\"app/utils/ellipsis\");\n    module.exports = withStoryEllipsis;\n});\ndefine(\"app/ui/search/news_onebox\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_story_clicks\",\"app/ui/with_story_ellipsis\",], function(module, require, exports) {\n    function newsOnebox() {\n        this.defaultAttrs({\n            itemType: \"story\"\n        }), this.oneboxDisplayed = function() {\n            this.trigger(\"uiOneboxDisplayed\", {\n                type: \"news_story\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.ellipsify(), this.oneboxDisplayed();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withStoryClicks = require(\"app/ui/with_story_clicks\"), withStoryEllipsis = require(\"app/ui/with_story_ellipsis\");\n    module.exports = defineComponent(newsOnebox, withStoryClicks, withStoryEllipsis);\n});\ndefine(\"app/ui/search/user_onebox\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_item_actions\",\"app/ui/with_story_clicks\",], function(module, require, exports) {\n    function userOnebox() {\n        this.defaultAttrs({\n            itemSelector: \".user-story-item\",\n            viewAllSelector: \".js-onebox-view-all\",\n            itemType: \"story\"\n        }), this.oneboxDisplayed = function() {\n            var a = {\n                type: \"user_story\",\n                items: this.getItemIds()\n            };\n            this.trigger(\"uiOneboxDisplayed\", a);\n        }, this.viewAllClicked = function() {\n            this.trigger(\"uiOneboxViewAllClick\", {\n                type: \"user_story\"\n            });\n        }, this.getItemIds = function() {\n            var a = [];\n            return this.select(\"itemSelector\").each(function() {\n                var b = $(this);\n                a.push(b.data(\"item-id\"));\n            }), a;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                viewAllSelector: this.viewAllClicked\n            }), this.oneboxDisplayed();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withItemActions = require(\"app/ui/with_item_actions\"), withStoryClicks = require(\"app/ui/with_story_clicks\");\n    module.exports = defineComponent(userOnebox, withItemActions, withStoryClicks);\n});\ndefine(\"app/ui/search/event_onebox\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function eventOnebox() {\n        this.defaultAttrs({\n            itemType: \"story\"\n        }), this.oneboxDisplayed = function() {\n            this.trigger(\"uiOneboxDisplayed\", {\n                type: \"event_story\"\n            });\n        }, this.broadcastClick = function(a) {\n            this.trigger(\"uiEventOneboxClick\");\n        }, this.after(\"initialize\", function() {\n            this.oneboxDisplayed(), this.JSBNG__on(\"click\", this.broadcastClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(eventOnebox);\n});\ndefine(\"app/ui/search/media_onebox\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_story_clicks\",], function(module, require, exports) {\n    function mediaOnebox() {\n        this.defaultAttrs({\n            itemSelector: \".media-item\",\n            itemType: \"story\",\n            query: \"\"\n        }), this.oneboxDisplayed = function() {\n            var a = {\n                type: \"media_story\",\n                items: this.getStatusIds()\n            };\n            this.trigger(\"uiOneboxDisplayed\", a);\n        }, this.getStatusIds = function() {\n            var a = [];\n            return this.select(\"itemSelector\").each(function() {\n                var b = $(this);\n                a.push(b.data(\"status-id\"));\n            }), a;\n        }, this.mediaItemClick = function(a, b) {\n            this.trigger(a.target, \"uiOpenGallery\", {\n                title: _(\"Photos of {{query}}\", {\n                    query: this.attr.query\n                })\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.oneboxDisplayed(), this.JSBNG__on(\"click\", this.mediaItemClick);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withStoryClicks = require(\"app/ui/with_story_clicks\");\n    module.exports = defineComponent(mediaOnebox, withStoryClicks);\n});\ndefine(\"app/ui/search/spelling_corrections\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function SpellingCorrections() {\n        this.defaultAttrs({\n            dismissSelector: \".js-action-dismiss-correction\",\n            spellingCorrectionSelector: \".corrected-query\",\n            wrapperNodeSelector: \"\"\n        }), this.dismissCorrection = function(a) {\n            var b = this.select(\"wrapperNodeSelector\");\n            ((((b.length == 0)) && (b = this.$node))), b.fadeOut(250, function() {\n                $(this).hide();\n            }), this.scribeEvent(\"dismiss\");\n        }, this.clickCorrection = function(a) {\n            this.scribeEvent(\"search\");\n        }, this.scribeEvent = function(a) {\n            var b = this.select(\"spellingCorrectionSelector\");\n            this.trigger(\"uiSearchAssistanceAction\", {\n                component: \"spelling_corrections\",\n                action: a,\n                query: b.data(\"query\"),\n                item_names: [b.data(\"search-assistance\"),]\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                dismissSelector: this.dismissCorrection,\n                spellingCorrectionSelector: this.clickCorrection\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(SpellingCorrections);\n});\ndefine(\"app/ui/search/related_queries\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function RelatedQueries() {\n        this.defaultAttrs({\n            relatedQuerySelector: \".related-query\"\n        }), this.relatedQueryClick = function(a) {\n            this.trigger(\"uiSearchAssistanceAction\", {\n                component: \"related_queries\",\n                action: \"search\",\n                query: $(a.target).data(\"query\"),\n                item_names: [$(a.target).data(\"search-assistance\"),]\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                relatedQuerySelector: this.relatedQueryClick\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(RelatedQueries);\n});\ndefine(\"app/data/search_assistance_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function SearchAssistanceScribe() {\n        this.scribeSearchAssistance = function(a, b) {\n            this.scribe({\n                section: \"search\",\n                component: b.component,\n                action: b.action\n            }, {\n                query: b.query,\n                item_names: b.item_names\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiSearchAssistanceAction\", this.scribeSearchAssistance);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(SearchAssistanceScribe, withScribe);\n});\ndefine(\"app/data/timeline_controls_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function timelineControlsScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiHasEnabledAutoplay\", {\n                action: \"JSBNG__on\",\n                component: \"timeline_controls\",\n                element: \"autoplay\"\n            }), this.scribeOnEvent(\"uiHasDisabledAutoplay\", {\n                action: \"off\",\n                component: \"timeline_controls\",\n                element: \"autoplay\"\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), TimelineControlsScribe = defineComponent(timelineControlsScribe, withScribe);\n    module.exports = TimelineControlsScribe;\n});\ndefine(\"app/pages/search/search\", [\"module\",\"require\",\"exports\",\"app/boot/search\",\"core/utils\",\"app/boot/tweet_timeline\",\"app/boot/universal_timeline\",\"app/data/user_search\",\"app/data/user_search_scribe\",\"app/ui/user_search\",\"app/data/saved_searches\",\"app/ui/search_dropdown\",\"app/data/story_scribe\",\"app/data/onebox_scribe\",\"app/ui/search/news_onebox\",\"app/ui/search/user_onebox\",\"app/ui/search/event_onebox\",\"app/ui/search/media_onebox\",\"app/ui/search/spelling_corrections\",\"app/ui/search/related_queries\",\"app/data/search_assistance_scribe\",\"app/data/timeline_controls_scribe\",], function(module, require, exports) {\n    var searchBoot = require(\"app/boot/search\"), utils = require(\"core/utils\"), tweetTimelineBoot = require(\"app/boot/tweet_timeline\"), universalTimelineBoot = require(\"app/boot/universal_timeline\"), UserSearchData = require(\"app/data/user_search\"), UserSearchScribe = require(\"app/data/user_search_scribe\"), UserSearchModule = require(\"app/ui/user_search\"), SavedSearchesData = require(\"app/data/saved_searches\"), SearchDropdown = require(\"app/ui/search_dropdown\"), StoryScribe = require(\"app/data/story_scribe\"), OneboxScribe = require(\"app/data/onebox_scribe\"), NewsOnebox = require(\"app/ui/search/news_onebox\"), UserOnebox = require(\"app/ui/search/user_onebox\"), EventOnebox = require(\"app/ui/search/event_onebox\"), MediaOnebox = require(\"app/ui/search/media_onebox\"), SpellingCorrections = require(\"app/ui/search/spelling_corrections\"), RelatedQueries = require(\"app/ui/search/related_queries\"), SearchAssistanceScribe = require(\"app/data/search_assistance_scribe\"), TimelineControlsScribe = require(\"app/data/timeline_controls_scribe\");\n    module.exports = function(b) {\n        searchBoot(b), ((b.universalSearch ? (TimelineControlsScribe.attachTo(JSBNG__document), universalTimelineBoot(utils.merge(b, {\n            autoplay: !!b.autoplay_search_timeline,\n            travelingPTw: !!b.autoplay_search_timeline\n        })), SpellingCorrections.attachTo(\"#timeline\", utils.merge(b, {\n            wrapperNodeSelector: \".stream-spelling-corrections\"\n        })), RelatedQueries.attachTo(\"#timeline\")) : (tweetTimelineBoot(b, b.search_endpoint, \"tweet\"), UserSearchScribe.attachTo(JSBNG__document, b), UserSearchData.attachTo(JSBNG__document, b), UserSearchModule.attachTo(\".js-nav-links .people\", utils.merge(b, {\n            eventData: {\n                scribeContext: {\n                    component: \"user_search_module\"\n                }\n            }\n        })), StoryScribe.attachTo(JSBNG__document), OneboxScribe.attachTo(JSBNG__document, b), NewsOnebox.attachTo(\".onebox .discover-item[data-story-type=news]\"), UserOnebox.attachTo(\".onebox .discover-item[data-story-type=user]\", b), EventOnebox.attachTo(\".onebox .discover-item[data-story-type=event]\"), MediaOnebox.attachTo(\".onebox .discover-item[data-story-type=media]\", b), SpellingCorrections.attachTo(\".search-assist-spelling\"), RelatedQueries.attachTo(\".search-assist-related-queries\")))), SavedSearchesData.attachTo(JSBNG__document, b), SearchDropdown.attachTo(\".js-search-dropdown\", b), SearchAssistanceScribe.attachTo(JSBNG__document, b);\n    };\n});\ndefine(\"app/ui/timelines/with_search_media_pagination\", [\"module\",\"require\",\"exports\",\"app/ui/timelines/with_tweet_pagination\",\"core/compose\",], function(module, require, exports) {\n    function withSearchMediaPagination() {\n        compose.mixin(this, [withTweetPagination,]), this.shouldGetOldItems = function() {\n            return !1;\n        };\n    };\n;\n    var withTweetPagination = require(\"app/ui/timelines/with_tweet_pagination\"), compose = require(\"core/compose\");\n    module.exports = withSearchMediaPagination;\n});\ndefine(\"app/ui/timelines/media_timeline\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/timelines/with_base_timeline\",\"app/ui/timelines/with_old_items\",\"app/ui/timelines/with_search_media_pagination\",\"app/ui/gallery/with_grid\",], function(module, require, exports) {\n    function mediaTimeline() {\n        this.defaultAttrs({\n            itemType: \"media\"\n        }), this.after(\"initialize\", function(a) {\n            this.hideWhaleEnd(), this.hideMoreSpinner();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withBaseTimeline = require(\"app/ui/timelines/with_base_timeline\"), withOldItems = require(\"app/ui/timelines/with_old_items\"), withSearchMediaPagination = require(\"app/ui/timelines/with_search_media_pagination\"), withGrid = require(\"app/ui/gallery/with_grid\");\n    module.exports = defineComponent(mediaTimeline, withBaseTimeline, withOldItems, withSearchMediaPagination, withGrid);\n});\ndefine(\"app/boot/media_timeline\", [\"module\",\"require\",\"exports\",\"app/boot/timeline\",\"app/boot/help_pips\",\"app/ui/expando/close_all_button\",\"app/ui/timelines/media_timeline\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a, b, c, d) {\n        var e = utils.merge(a, {\n            endpoint: b,\n            itemType: c,\n            eventData: {\n                scribeContext: {\n                    component: ((d || c))\n                }\n            }\n        });\n        timelineBoot(e), ((e.help_pips_decider && helpPipsBoot(e))), CloseAllButton.attachTo(\"#close-all-button\", {\n            addEvent: \"uiHasExpandedTweet\",\n            subtractEvent: \"uiHasCollapsedTweet\",\n            where: \"#timeline\",\n            closeAllEvent: \"uiWantsToCloseAllTweets\"\n        }), MediaTimeline.attachTo(\"#timeline\", utils.merge(e, {\n            tweetItemSelector: \"div.original-tweet\"\n        }));\n    };\n;\n    var timelineBoot = require(\"app/boot/timeline\"), helpPipsBoot = require(\"app/boot/help_pips\"), CloseAllButton = require(\"app/ui/expando/close_all_button\"), MediaTimeline = require(\"app/ui/timelines/media_timeline\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/pages/search/media\", [\"module\",\"require\",\"exports\",\"app/boot/search\",\"core/utils\",\"app/boot/tweets\",\"app/boot/media_timeline\",\"app/data/user_search\",\"app/data/user_search_scribe\",\"app/ui/user_search\",\"app/data/saved_searches\",\"app/ui/search_dropdown\",\"app/ui/search/spelling_corrections\",\"app/ui/search/related_queries\",\"app/data/search_assistance_scribe\",], function(module, require, exports) {\n    var searchBoot = require(\"app/boot/search\"), utils = require(\"core/utils\"), tweetsBoot = require(\"app/boot/tweets\"), mediaTimelineBoot = require(\"app/boot/media_timeline\"), UserSearchData = require(\"app/data/user_search\"), UserSearchScribe = require(\"app/data/user_search_scribe\"), UserSearchModule = require(\"app/ui/user_search\"), SavedSearchesData = require(\"app/data/saved_searches\"), SearchDropdown = require(\"app/ui/search_dropdown\"), SpellingCorrections = require(\"app/ui/search/spelling_corrections\"), RelatedQueries = require(\"app/ui/search/related_queries\"), SearchAssistanceScribe = require(\"app/data/search_assistance_scribe\");\n    module.exports = function(b) {\n        searchBoot(b), tweetsBoot(\"#timeline\", b), mediaTimelineBoot(b, b.timeline_url, \"tweet\"), SavedSearchesData.attachTo(JSBNG__document, b), SearchDropdown.attachTo(\".js-search-dropdown\", b), SpellingCorrections.attachTo(\".search-assist-spelling\"), RelatedQueries.attachTo(\".search-assist-related-queries\"), SearchAssistanceScribe.attachTo(JSBNG__document, b), UserSearchScribe.attachTo(JSBNG__document, b), UserSearchData.attachTo(JSBNG__document, b), UserSearchModule.attachTo(\".js-nav-links .people\", utils.merge(b, {\n            eventData: {\n                scribeContext: {\n                    component: \"user_search_module\"\n                }\n            }\n        }));\n    };\n});\ndefine(\"app/pages/simple_t1\", [\"module\",\"require\",\"exports\",\"app/boot/app\",], function(module, require, exports) {\n    var bootApp = require(\"app/boot/app\");\n    module.exports = function(a) {\n        bootApp(a);\n    };\n});");
// 4818
JSBNG_Replay.s19277ddcd28db6dd01a1d67d562dfbbffa3c6a17_4[0]();
// 4825
ow637880758.JSBNG__event = o2;
// undefined
o2 = null;
// 4823
geval("define(\"app/data/geo\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/cookie\",\"app/data/with_data\",], function(module, require, exports) {\n    function geo() {\n        this.isInState = function(a) {\n            return ((a.split(\" \").indexOf(this.state) >= 0));\n        }, this.isEnabled = function(a) {\n            return !this.isInState(\"disabled enabling enableIsUnavailable\");\n        }, this.setInitialState = function() {\n            ((this.attr.geoEnabled ? this.state = ((((Geo.webclientCookie() === \"1\")) ? \"enabledTurnedOn\" : \"enabledTurnedOff\")) : this.state = \"disabled\"));\n        }, this.requestState = function(a, b) {\n            ((this.shouldLocate() ? this.locate() : this.sendState(this.state)));\n        }, this.shouldLocate = function() {\n            return ((this.isInState(\"enabledTurnedOn locateIsUnavailable\") || ((this.isInState(\"located locationUnknown\") && ((!this.lastLocationTime || ((((this.now() - this.lastLocationTime)) > MIN_TIME_BETWEEN_LOCATES_IN_MS))))))));\n        }, this.locate = function(a) {\n            this.sendState(((a ? \"changing\" : \"locating\")));\n            var b = function(a) {\n                this.sendState(((this.locateOrEnableState(a) || \"locateIsUnavailable\")));\n            }.bind(this), c = function() {\n                this.sendState(\"locateIsUnavailable\");\n            }.bind(this), d = {\n                override_place_id: a\n            };\n            this.post({\n                url: \"/account/geo_locate\",\n                data: d,\n                echoParams: {\n                    spoof_ip: !0\n                },\n                eventData: d,\n                success: b,\n                error: c\n            });\n        }, this.locateOrEnableState = function(a) {\n            switch (a.JSBNG__status) {\n              case \"ok\":\n                return this.place_id = a.place_id, this.place_name = a.place_name, this.places_html = a.html, this.lastLocationTime = this.now(), \"located\";\n              case \"unknown\":\n                return this.lastLocationTime = this.now(), \"locationUnknown\";\n            };\n        ;\n        }, this.now = function() {\n            return (new JSBNG__Date).getTime();\n        }, this.sendState = function(a) {\n            ((a && (this.state = a)));\n            var b = {\n                state: this.state\n            };\n            ((((this.state === \"located\")) && (b.place_id = this.place_id, b.place_name = this.place_name, b.places_html = this.places_html))), this.trigger(\"dataGeoState\", b);\n        }, this.turnOn = function() {\n            ((this.isEnabled() && (Geo.webclientCookie(\"1\"), this.locate())));\n        }, this.turnOff = function() {\n            ((this.isEnabled() && (Geo.webclientCookie(null), this.sendState(\"enabledTurnedOff\"))));\n        }, this.enable = function(a, b) {\n            if (!this.isInState(\"disabled enableIsUnavailable\")) {\n                return;\n            }\n        ;\n        ;\n            this.sendState(\"enabling\");\n            var c = function(a) {\n                Geo.webclientCookie(\"1\"), this.sendState(((this.locateOrEnableState(a) || \"enableIsUnavailable\")));\n            }.bind(this), d = function() {\n                this.sendState(\"enableIsUnavailable\");\n            }.bind(this);\n            this.post({\n                url: \"/account/geo_locate\",\n                data: {\n                    enable: \"1\"\n                },\n                echoParams: {\n                    spoof_ip: !0\n                },\n                eventData: b,\n                success: c,\n                error: d\n            });\n        }, this.change = function(a, b) {\n            ((this.isEnabled() && this.locate(b.placeId)));\n        }, this.search = function(a, b) {\n            if (this.searching) {\n                this.pendingSearchData = b;\n                return;\n            }\n        ;\n        ;\n            this.pendingSearchData = null;\n            var c = function() {\n                this.searching = !1;\n                if (this.pendingSearchData) {\n                    return this.search(a, this.pendingSearchData), !0;\n                }\n            ;\n            ;\n            }.bind(this), d = b.query.trim(), e = [d,b.placeId,b.isPrefix,].join(\",\"), f = function(a) {\n                this.searchCache[e] = a, a = $.extend({\n                }, a, {\n                    sourceEventData: b\n                }), ((c() || this.trigger(\"dataGeoSearchResults\", a)));\n            }.bind(this), g = function() {\n                ((c() || this.trigger(\"dataGeoSearchResultsUnavailable\")));\n            }.bind(this);\n            if (!d) {\n                f({\n                    html: \"\"\n                });\n                return;\n            }\n        ;\n        ;\n            var h = this.searchCache[e];\n            if (h) {\n                f(h);\n                return;\n            }\n        ;\n        ;\n            this.searching = !0, this.get({\n                url: \"/account/geo_search\",\n                data: {\n                    query: d,\n                    place_id: b.placeId,\n                    is_prefix: ((b.isPrefix ? \"1\" : \"0\"))\n                },\n                eventData: b,\n                success: f,\n                error: g\n            });\n        }, this.after(\"initialize\", function() {\n            this.searchCache = {\n            }, this.setInitialState(), this.JSBNG__on(\"uiRequestGeoState\", this.requestState), this.JSBNG__on(\"uiGeoPickerEnable\", this.enable), this.JSBNG__on(\"uiGeoPickerTurnOn\", this.turnOn), this.JSBNG__on(\"uiGeoPickerTurnOff\", this.turnOff), this.JSBNG__on(\"uiGeoPickerChange\", this.change), this.JSBNG__on(\"uiGeoPickerSearch\", this.search);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), cookie = require(\"app/utils/cookie\"), withData = require(\"app/data/with_data\"), Geo = defineComponent(geo, withData), MIN_TIME_BETWEEN_LOCATES_IN_MS = 900000;\n    module.exports = Geo, Geo.webclientCookie = function(a) {\n        return ((((a === undefined)) ? cookie(\"geo_webclient\") : cookie(\"geo_webclient\", a, {\n            expires: 3650,\n            path: \"/\"\n        })));\n    };\n});\ndefine(\"app/data/tweet\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_auth_token\",\"core/i18n\",\"app/data/with_data\",], function(module, require, exports) {\n    function tweet() {\n        this.IFRAME_TIMEOUT = 120000, this.sendTweet = function(a, b) {\n            var c = b.tweetboxId, d = function(a) {\n                a.tweetboxId = c, this.trigger(\"dataTweetSuccess\", a), this.trigger(\"dataGotProfileStats\", {\n                    stats: a.profile_stats\n                });\n            }, e = function(a) {\n                var b;\n                try {\n                    b = a.message;\n                } catch (d) {\n                    b = {\n                        error: _(\"Sorry! We did something wrong.\")\n                    };\n                };\n            ;\n                b.tweetboxId = c, this.trigger(\"dataTweetError\", b);\n            };\n            this.post({\n                url: \"/i/tweet/create\",\n                isMutation: !1,\n                data: b.tweetData,\n                success: d.bind(this),\n                error: e.bind(this)\n            });\n        }, this.sendTweetWithMedia = function(a, b) {\n            var c = b.tweetboxId, d = b.tweetData, e = this, f, g = function(a) {\n                a.tweetboxId = c, JSBNG__clearTimeout(f), ((a.error ? e.trigger(\"dataTweetError\", a) : e.trigger(\"dataTweetSuccess\", a)));\n            };\n            window[c] = g.bind(this), f = JSBNG__setTimeout(function() {\n                window[c] = function() {\n                \n                }, g({\n                    error: _(\"Tweeting a photo timed out.\")\n                });\n            }, this.IFRAME_TIMEOUT);\n            var h = $(((\"#\" + b.tweetboxId))), i = this.getAuthToken();\n            h.JSBNG__find(\".auth-token\").val(i), h.JSBNG__find(\".iframe-callback\").val(((\"window.JSBNG__top.\" + c))), h.JSBNG__find(\".in-reply-to-status-id\").val(d.in_reply_to_status_id), h.JSBNG__find(\".impression-id\").val(d.impression_id), h.JSBNG__find(\".earned\").val(d.earned), h.submit();\n        }, this.sendDirectMessage = function(a, b) {\n            this.trigger(\"dataDirectMessageSuccess\", b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiSendTweet\", this.sendTweet), this.JSBNG__on(\"uiSendTweetWithMedia\", this.sendTweetWithMedia), this.JSBNG__on(\"uiSendDirectMessage\", this.sendDirectMessage);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withAuthToken = require(\"app/data/with_auth_token\"), _ = require(\"core/i18n\"), withData = require(\"app/data/with_data\"), Tweet = defineComponent(tweet, withAuthToken, withData);\n    module.exports = Tweet;\n});\ndefine(\"app/ui/tweet_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/data/user_info\",\"core/i18n\",], function(module, require, exports) {\n    function tweetDialog() {\n        this.defaultAttrs({\n            tweetBoxSelector: \"form.tweet-form\",\n            modalTweetSelector: \".modal-tweet\",\n            modalTitleSelector: \".modal-title\"\n        }), this.addTweet = function(a) {\n            this.select(\"modalTweetSelector\").show(), a.appendTo(this.select(\"modalTweetSelector\"));\n        }, this.removeTweet = function() {\n            this.select(\"modalTweetSelector\").hide().empty();\n        }, this.openReply = function(a, b) {\n            this.addTweet($(a.target).clone());\n            var c = b.screenNames[0];\n            this.openTweetDialog(a, utils.merge(b, {\n                title: _(\"Reply to {{screenName}}\", {\n                    screenName: ((\"@\" + c))\n                })\n            }));\n        }, this.openGlobalTweetDialog = function(a, b) {\n            this.openTweetDialog(a, utils.merge(b, {\n                draftTweetId: \"global\"\n            }));\n        }, this.openTweetDialog = function(a, b) {\n            this.setTitle(((((b && b.title)) || _(\"What's happening?\"))));\n            if (!this.tweetBoxReady) {\n                var c = $(\"#global-tweet-dialog form.tweet-form\");\n                this.trigger(c, \"uiInitTweetbox\", {\n                    eventData: {\n                        scribeContext: {\n                            component: \"tweet_box_dialog\"\n                        }\n                    },\n                    modal: !0\n                }), this.tweetBoxReady = !0;\n            }\n        ;\n        ;\n            if (b) {\n                var d = null;\n                ((b.screenNames ? d = b.screenNames : ((b.screenName && (d = [b.screenName,]))))), ((d && (b.defaultText = ((((\"@\" + d.join(\" @\"))) + \" \")), b.condensedText = _(\"Reply to {{screenNames}}\", {\n                    screenNames: b.defaultText\n                })))), this.trigger(JSBNG__document, \"uiOverrideTweetBoxOptions\", b);\n            }\n        ;\n        ;\n            this.open();\n        }, this.setTitle = function(a) {\n            this.select(\"modalTitleSelector\").text(a);\n        }, this.updateTitle = function(a, b) {\n            ((((b && b.title)) && this.setTitle(b.title)));\n        }, this.prepareTweetBox = function() {\n            this.select(\"tweetBoxSelector\").trigger(\"uiPrepareTweetBox\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiShortcutShowTweetbox\", this.openGlobalTweetDialog), this.JSBNG__on(JSBNG__document, \"uiOpenTweetDialog\", this.openTweetDialog), this.JSBNG__on(JSBNG__document, \"uiOpenReplyDialog\", this.openReply), this.JSBNG__on(\"uiTweetSent\", this.close), this.JSBNG__on(\"uiDialogOpened\", this.prepareTweetBox), this.JSBNG__on(\"uiDialogClosed\", this.removeTweet), this.JSBNG__on(\"uiDialogUpdateTitle\", this.updateTitle);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), userInfo = require(\"app/data/user_info\"), _ = require(\"core/i18n\"), TweetDialog = defineComponent(tweetDialog, withDialog, withPosition);\n    module.exports = TweetDialog;\n});\ndefine(\"app/ui/new_tweet_button\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function newTweetButton() {\n        this.openTweetDialog = function() {\n            this.trigger(\"uiOpenTweetDialog\", {\n                draftTweetId: \"global\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", this.openTweetDialog);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(newTweetButton);\n});\ndefine(\"app/data/tweet_box_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function tweetBoxScribe() {\n        var a = {\n            tweetBox: {\n                uiTweetboxTweetError: \"failure\",\n                uiTweetboxTweetSuccess: \"send_tweet\",\n                uiTweetboxReplySuccess: \"send_reply\",\n                uiTweetboxDMSuccess: \"send_dm\",\n                uiOpenTweetDialog: \"compose_tweet\"\n            },\n            imagePicker: {\n                uiImagePickerClick: \"click\",\n                uiImagePickerAdd: \"add\",\n                uiImagePickerRemove: \"remove\",\n                uiImagePickerError: \"error\",\n                uiDrop: \"drag_and_drop\"\n            },\n            geoPicker: {\n                uiGeoPickerOffer: \"offer\",\n                uiGeoPickerEnable: \"enable\",\n                uiGeoPickerOpen: \"open\",\n                uiGeoPickerTurnOn: \"JSBNG__on\",\n                uiGeoPickerTurnOff: \"off\",\n                uiGeoPickerChange: \"select\",\n                uiGeoPickerInteraction: \"focus_field\"\n            }\n        };\n        this.after(\"initialize\", function() {\n            Object.keys(a.tweetBox).forEach(function(b) {\n                this.scribeOnEvent(b, {\n                    element: \"tweet_box\",\n                    action: a.tweetBox[b]\n                });\n            }, this), Object.keys(a.imagePicker).forEach(function(b) {\n                this.scribeOnEvent(b, {\n                    element: \"image_picker\",\n                    action: a.imagePicker[b]\n                });\n            }, this), Object.keys(a.geoPicker).forEach(function(b) {\n                this.scribeOnEvent(b, {\n                    element: \"geo_picker\",\n                    action: a.geoPicker[b]\n                });\n            }, this);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(tweetBoxScribe, withScribe);\n});\nprovide(\"lib/twitter-text\", function(a) {\n    var b = {\n    };\n    (function() {\n        function c(a, c) {\n            return c = ((c || \"\")), ((((typeof a != \"string\")) && (((((a.global && ((c.indexOf(\"g\") < 0)))) && (c += \"g\"))), ((((a.ignoreCase && ((c.indexOf(\"i\") < 0)))) && (c += \"i\"))), ((((a.multiline && ((c.indexOf(\"m\") < 0)))) && (c += \"m\"))), a = a.source))), new RegExp(a.replace(/#\\{(\\w+)\\}/g, function(a, c) {\n                var d = ((b.txt.regexen[c] || \"\"));\n                return ((((typeof d != \"string\")) && (d = d.source))), d;\n            }), c);\n        };\n    ;\n        function d(a, b) {\n            return a.replace(/#\\{(\\w+)\\}/g, function(a, c) {\n                return ((b[c] || \"\"));\n            });\n        };\n    ;\n        function e(a, b, c) {\n            var d = String.fromCharCode(b);\n            return ((((c !== b)) && (d += ((\"-\" + String.fromCharCode(c)))))), a.push(d), a;\n        };\n    ;\n        function q(a) {\n            var b = {\n            };\n            {\n                var fin59keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin59i = (0);\n                var c;\n                for (; (fin59i < fin59keys.length); (fin59i++)) {\n                    ((c) = (fin59keys[fin59i]));\n                    {\n                        ((a.hasOwnProperty(c) && (b[c] = a[c])));\n                    ;\n                    };\n                };\n            };\n        ;\n            return b;\n        };\n    ;\n        function u(a, b, c) {\n            return ((c ? ((!a || ((a.match(b) && ((RegExp[\"$&\"] === a)))))) : ((((((typeof a == \"string\")) && a.match(b))) && ((RegExp[\"$&\"] === a))))));\n        };\n    ;\n        b.txt = {\n        }, b.txt.regexen = {\n        };\n        var a = {\n            \"&\": \"&amp;\",\n            \"\\u003E\": \"&gt;\",\n            \"\\u003C\": \"&lt;\",\n            \"\\\"\": \"&quot;\",\n            \"'\": \"&#39;\"\n        };\n        b.txt.htmlEscape = function(b) {\n            return ((b && b.replace(/[&\"'><]/g, function(b) {\n                return a[b];\n            })));\n        }, b.txt.regexSupplant = c, b.txt.stringSupplant = d, b.txt.addCharsToCharClass = e;\n        var f = String.fromCharCode, g = [f(32),f(133),f(160),f(5760),f(6158),f(8232),f(8233),f(8239),f(8287),f(12288),];\n        e(g, 9, 13), e(g, 8192, 8202);\n        var h = [f(65534),f(65279),f(65535),];\n        e(h, 8234, 8238), b.txt.regexen.spaces_group = c(g.join(\"\")), b.txt.regexen.spaces = c(((((\"[\" + g.join(\"\"))) + \"]\"))), b.txt.regexen.invalid_chars_group = c(h.join(\"\")), b.txt.regexen.punct = /\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$/, b.txt.regexen.rtl_chars = /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/gm, b.txt.regexen.non_bmp_code_pairs = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/gm;\n        var i = [];\n        e(i, 1024, 1279), e(i, 1280, 1319), e(i, 11744, 11775), e(i, 42560, 42655), e(i, 1425, 1471), e(i, 1473, 1474), e(i, 1476, 1477), e(i, 1479, 1479), e(i, 1488, 1514), e(i, 1520, 1524), e(i, 64274, 64296), e(i, 64298, 64310), e(i, 64312, 64316), e(i, 64318, 64318), e(i, 64320, 64321), e(i, 64323, 64324), e(i, 64326, 64335), e(i, 1552, 1562), e(i, 1568, 1631), e(i, 1646, 1747), e(i, 1749, 1756), e(i, 1758, 1768), e(i, 1770, 1775), e(i, 1786, 1788), e(i, 1791, 1791), e(i, 1872, 1919), e(i, 2208, 2208), e(i, 2210, 2220), e(i, 2276, 2302), e(i, 64336, 64433), e(i, 64467, 64829), e(i, 64848, 64911), e(i, 64914, 64967), e(i, 65008, 65019), e(i, 65136, 65140), e(i, 65142, 65276), e(i, 8204, 8204), e(i, 3585, 3642), e(i, 3648, 3662), e(i, 4352, 4607), e(i, 12592, 12677), e(i, 43360, 43391), e(i, 44032, 55215), e(i, 55216, 55295), e(i, 65441, 65500), e(i, 12449, 12538), e(i, 12540, 12542), e(i, 65382, 65439), e(i, 65392, 65392), e(i, 65296, 65305), e(i, 65313, 65338), e(i, 65345, 65370), e(i, 12353, 12438), e(i, 12441, 12446), e(i, 13312, 19903), e(i, 19968, 40959), e(i, 173824, 177983), e(i, 177984, 178207), e(i, 194560, 195103), e(i, 12291, 12291), e(i, 12293, 12293), e(i, 12347, 12347), b.txt.regexen.nonLatinHashtagChars = c(i.join(\"\"));\n        var j = [];\n        e(j, 192, 214), e(j, 216, 246), e(j, 248, 255), e(j, 256, 591), e(j, 595, 596), e(j, 598, 599), e(j, 601, 601), e(j, 603, 603), e(j, 611, 611), e(j, 616, 616), e(j, 623, 623), e(j, 626, 626), e(j, 649, 649), e(j, 651, 651), e(j, 699, 699), e(j, 768, 879), e(j, 7680, 7935), b.txt.regexen.latinAccentChars = c(j.join(\"\")), b.txt.regexen.hashSigns = /[#＃]/, b.txt.regexen.hashtagAlpha = c(/[a-z_#{latinAccentChars}#{nonLatinHashtagChars}]/i), b.txt.regexen.hashtagAlphaNumeric = c(/[a-z0-9_#{latinAccentChars}#{nonLatinHashtagChars}]/i), b.txt.regexen.endHashtagMatch = c(/^(?:#{hashSigns}|:\\/\\/)/), b.txt.regexen.hashtagBoundary = c(/(?:^|$|[^&a-z0-9_#{latinAccentChars}#{nonLatinHashtagChars}])/), b.txt.regexen.validHashtag = c(/(#{hashtagBoundary})(#{hashSigns})(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi), b.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@＠]|RT:?)/, b.txt.regexen.atSigns = /[@＠]/, b.txt.regexen.validMentionOrList = c(\"(#{validMentionPrecedingChars})(#{atSigns})([a-zA-Z0-9_]{1,20})(/[a-zA-Z][a-zA-Z0-9_-]{0,24})?\", \"g\"), b.txt.regexen.validReply = c(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/), b.txt.regexen.endMentionMatch = c(/^(?:#{atSigns}|[#{latinAccentChars}]|:\\/\\/)/), b.txt.regexen.validUrlPrecedingChars = c(/(?:[^A-Za-z0-9@＠$#＃#{invalid_chars_group}]|^)/), b.txt.regexen.invalidUrlWithoutProtocolPrecedingChars = /[-_.\\/]$/, b.txt.regexen.invalidDomainChars = d(\"#{punct}#{spaces_group}#{invalid_chars_group}\", b.txt.regexen), b.txt.regexen.validDomainChars = c(/[^#{invalidDomainChars}]/), b.txt.regexen.validSubdomain = c(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\\.)/), b.txt.regexen.validDomainName = c(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\\.)/), b.txt.regexen.validGTLD = c(/(?:(?:aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|xxx)(?=[^0-9a-zA-Z]|$))/), b.txt.regexen.validCCTLD = c(/(?:(?:ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|sx)(?=[^0-9a-zA-Z]|$))/), b.txt.regexen.validPunycode = c(/(?:xn--[0-9a-z]+)/), b.txt.regexen.validDomain = c(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/), b.txt.regexen.validAsciiDomain = c(/(?:(?:[\\-a-z0-9#{latinAccentChars}]+)\\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi), b.txt.regexen.invalidShortDomain = c(/^#{validDomainName}#{validCCTLD}$/), b.txt.regexen.validPortNumber = c(/[0-9]+/), b.txt.regexen.validGeneralUrlPathChars = c(/[a-z0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-_~@|&#{latinAccentChars}]/i), b.txt.regexen.validUrlBalancedParens = c(/\\(#{validGeneralUrlPathChars}+\\)/i), b.txt.regexen.validUrlPathEndingChars = c(/[\\+\\-a-z0-9=_#\\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i), b.txt.regexen.validUrlPath = c(\"(?:(?:#{validGeneralUrlPathChars}*(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*#{validUrlPathEndingChars})|(?:@#{validGeneralUrlPathChars}+/))\", \"i\"), b.txt.regexen.validUrlQueryChars = /[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]/i, b.txt.regexen.validUrlQueryEndingChars = /[a-z0-9_&=#\\/]/i, b.txt.regexen.extractUrl = c(\"((#{validUrlPrecedingChars})((https?:\\\\/\\\\/)?(#{validDomain})(?::(#{validPortNumber}))?(\\\\/#{validUrlPath}*)?(\\\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?))\", \"gi\"), b.txt.regexen.validTcoUrl = /^https?:\\/\\/t\\.co\\/[a-z0-9]+/i, b.txt.regexen.urlHasProtocol = /^https?:\\/\\//i, b.txt.regexen.urlHasHttps = /^https:\\/\\//i, b.txt.regexen.cashtag = /[a-z]{1,6}(?:[._][a-z]{1,2})?/i, b.txt.regexen.validCashtag = c(\"(^|#{spaces})(\\\\$)(#{cashtag})(?=$|\\\\s|[#{punct}])\", \"gi\"), b.txt.regexen.validateUrlUnreserved = /[a-z0-9\\-._~]/i, b.txt.regexen.validateUrlPctEncoded = /(?:%[0-9a-f]{2})/i, b.txt.regexen.validateUrlSubDelims = /[!$&'()*+,;=]/i, b.txt.regexen.validateUrlPchar = c(\"(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|[:|@])\", \"i\"), b.txt.regexen.validateUrlScheme = /(?:[a-z][a-z0-9+\\-.]*)/i, b.txt.regexen.validateUrlUserinfo = c(\"(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|:)*\", \"i\"), b.txt.regexen.validateUrlDecOctet = /(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i, b.txt.regexen.validateUrlIpv4 = c(/(?:#{validateUrlDecOctet}(?:\\.#{validateUrlDecOctet}){3})/i), b.txt.regexen.validateUrlIpv6 = /(?:\\[[a-f0-9:\\.]+\\])/i, b.txt.regexen.validateUrlIp = c(\"(?:#{validateUrlIpv4}|#{validateUrlIpv6})\", \"i\"), b.txt.regexen.validateUrlSubDomainSegment = /(?:[a-z0-9](?:[a-z0-9_\\-]*[a-z0-9])?)/i, b.txt.regexen.validateUrlDomainSegment = /(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)/i, b.txt.regexen.validateUrlDomainTld = /(?:[a-z](?:[a-z0-9\\-]*[a-z0-9])?)/i, b.txt.regexen.validateUrlDomain = c(/(?:(?:#{validateUrlSubDomainSegment]}\\.)*(?:#{validateUrlDomainSegment]}\\.)#{validateUrlDomainTld})/i), b.txt.regexen.validateUrlHost = c(\"(?:#{validateUrlIp}|#{validateUrlDomain})\", \"i\"), b.txt.regexen.validateUrlUnicodeSubDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9_\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i, b.txt.regexen.validateUrlUnicodeDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i, b.txt.regexen.validateUrlUnicodeDomainTld = /(?:(?:[a-z]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i, b.txt.regexen.validateUrlUnicodeDomain = c(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\\.)*(?:#{validateUrlUnicodeDomainSegment}\\.)#{validateUrlUnicodeDomainTld})/i), b.txt.regexen.validateUrlUnicodeHost = c(\"(?:#{validateUrlIp}|#{validateUrlUnicodeDomain})\", \"i\"), b.txt.regexen.validateUrlPort = /[0-9]{1,5}/, b.txt.regexen.validateUrlUnicodeAuthority = c(\"(?:(#{validateUrlUserinfo})@)?(#{validateUrlUnicodeHost})(?::(#{validateUrlPort}))?\", \"i\"), b.txt.regexen.validateUrlAuthority = c(\"(?:(#{validateUrlUserinfo})@)?(#{validateUrlHost})(?::(#{validateUrlPort}))?\", \"i\"), b.txt.regexen.validateUrlPath = c(/(\\/#{validateUrlPchar}*)*/i), b.txt.regexen.validateUrlQuery = c(/(#{validateUrlPchar}|\\/|\\?)*/i), b.txt.regexen.validateUrlFragment = c(/(#{validateUrlPchar}|\\/|\\?)*/i), b.txt.regexen.validateUrlUnencoded = c(\"^(?:([^:/?#]+):\\\\/\\\\/)?([^/?#]*)([^?#]*)(?:\\\\?([^#]*))?(?:#(.*))?$\", \"i\");\n        var k = \"tweet-url list-slug\", l = \"tweet-url username\", m = \"tweet-url hashtag\", n = \"tweet-url cashtag\", o = {\n            urlClass: !0,\n            listClass: !0,\n            usernameClass: !0,\n            hashtagClass: !0,\n            cashtagClass: !0,\n            usernameUrlBase: !0,\n            listUrlBase: !0,\n            hashtagUrlBase: !0,\n            cashtagUrlBase: !0,\n            usernameUrlBlock: !0,\n            listUrlBlock: !0,\n            hashtagUrlBlock: !0,\n            linkUrlBlock: !0,\n            usernameIncludeSymbol: !0,\n            suppressLists: !0,\n            suppressNoFollow: !0,\n            targetBlank: !0,\n            suppressDataScreenName: !0,\n            urlEntities: !0,\n            symbolTag: !0,\n            textWithSymbolTag: !0,\n            urlTarget: !0,\n            invisibleTagAttrs: !0,\n            linkAttributeBlock: !0,\n            linkTextBlock: !0,\n            htmlEscapeNonEntities: !0\n        }, p = {\n            disabled: !0,\n            readonly: !0,\n            multiple: !0,\n            checked: !0\n        };\n        b.txt.tagAttrs = function(a) {\n            var c = \"\";\n            {\n                var fin60keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin60i = (0);\n                var d;\n                for (; (fin60i < fin60keys.length); (fin60i++)) {\n                    ((d) = (fin60keys[fin60i]));\n                    {\n                        var e = a[d];\n                        ((p[d] && (e = ((e ? d : null)))));\n                        if (((e == null))) {\n                            continue;\n                        }\n                    ;\n                    ;\n                        c += ((((((((\" \" + b.txt.htmlEscape(d))) + \"=\\\"\")) + b.txt.htmlEscape(e.toString()))) + \"\\\"\"));\n                    };\n                };\n            };\n        ;\n            return c;\n        }, b.txt.linkToText = function(a, c, e, f) {\n            ((f.suppressNoFollow || (e.rel = \"nofollow\"))), ((f.linkAttributeBlock && f.linkAttributeBlock(a, e))), ((f.linkTextBlock && (c = f.linkTextBlock(a, c))));\n            var g = {\n                text: c,\n                attr: b.txt.tagAttrs(e)\n            };\n            return d(\"\\u003Ca#{attr}\\u003E#{text}\\u003C/a\\u003E\", g);\n        }, b.txt.linkToTextWithSymbol = function(a, c, d, e, f) {\n            var g = ((f.symbolTag ? ((((((((((((\"\\u003C\" + f.symbolTag)) + \"\\u003E\")) + c)) + \"\\u003C/\")) + f.symbolTag)) + \"\\u003E\")) : c));\n            d = b.txt.htmlEscape(d);\n            var h = ((f.textWithSymbolTag ? ((((((((((((\"\\u003C\" + f.textWithSymbolTag)) + \"\\u003E\")) + d)) + \"\\u003C/\")) + f.textWithSymbolTag)) + \"\\u003E\")) : d));\n            return ((((f.usernameIncludeSymbol || !c.match(b.txt.regexen.atSigns))) ? b.txt.linkToText(a, ((g + h)), e, f) : ((g + b.txt.linkToText(a, h, e, f)))));\n        }, b.txt.linkToHashtag = function(a, c, d) {\n            var e = c.substring(a.indices[0], ((a.indices[0] + 1))), f = b.txt.htmlEscape(a.hashtag), g = q(((d.htmlAttrs || {\n            })));\n            return g.href = ((d.hashtagUrlBase + f)), g.title = ((\"#\" + f)), g[\"class\"] = d.hashtagClass, ((f[0].match(b.txt.regexen.rtl_chars) && (g[\"class\"] += \" rtl\"))), ((d.targetBlank && (g.target = \"_blank\"))), b.txt.linkToTextWithSymbol(a, e, f, g, d);\n        }, b.txt.linkToCashtag = function(a, c, d) {\n            var e = b.txt.htmlEscape(a.cashtag), f = q(((d.htmlAttrs || {\n            })));\n            return f.href = ((d.cashtagUrlBase + e)), f.title = ((\"$\" + e)), f[\"class\"] = d.cashtagClass, ((d.targetBlank && (f.target = \"_blank\"))), b.txt.linkToTextWithSymbol(a, \"$\", e, f, d);\n        }, b.txt.linkToMentionAndList = function(a, c, d) {\n            var e = c.substring(a.indices[0], ((a.indices[0] + 1))), f = b.txt.htmlEscape(a.screenName), g = b.txt.htmlEscape(a.listSlug), h = ((a.listSlug && !d.suppressLists)), i = q(((d.htmlAttrs || {\n            })));\n            return i[\"class\"] = ((h ? d.listClass : d.usernameClass)), i.href = ((h ? ((((d.listUrlBase + f)) + g)) : ((d.usernameUrlBase + f)))), ((((!h && !d.suppressDataScreenName)) && (i[\"data-screen-name\"] = f))), ((d.targetBlank && (i.target = \"_blank\"))), b.txt.linkToTextWithSymbol(a, e, ((h ? ((f + g)) : f)), i, d);\n        }, b.txt.linkToUrl = function(a, c, d) {\n            var e = a.url, f = e, g = b.txt.htmlEscape(f), h = ((((d.urlEntities && d.urlEntities[e])) || a));\n            ((h.display_url && (g = b.txt.linkTextWithEntity(h, d))));\n            var i = q(((d.htmlAttrs || {\n            })));\n            return ((e.match(b.txt.regexen.urlHasProtocol) || (e = ((\"http://\" + e))))), i.href = e, ((d.targetBlank && (i.target = \"_blank\"))), ((d.urlClass && (i[\"class\"] = d.urlClass))), ((d.urlTarget && (i.target = d.urlTarget))), ((((!d.title && h.display_url)) && (i.title = h.expanded_url))), b.txt.linkToText(a, g, i, d);\n        }, b.txt.linkTextWithEntity = function(a, c) {\n            var e = a.display_url, f = a.expanded_url, g = e.replace(/…/g, \"\");\n            if (((f.indexOf(g) != -1))) {\n                var h = f.indexOf(g), i = {\n                    displayUrlSansEllipses: g,\n                    beforeDisplayUrl: f.substr(0, h),\n                    afterDisplayUrl: f.substr(((h + g.length))),\n                    precedingEllipsis: ((e.match(/^…/) ? \"\\u2026\" : \"\")),\n                    followingEllipsis: ((e.match(/…$/) ? \"\\u2026\" : \"\"))\n                };\n                {\n                    var fin61keys = ((window.top.JSBNG_Replay.forInKeys)((i))), fin61i = (0);\n                    var j;\n                    for (; (fin61i < fin61keys.length); (fin61i++)) {\n                        ((j) = (fin61keys[fin61i]));\n                        {\n                            ((i.hasOwnProperty(j) && (i[j] = b.txt.htmlEscape(i[j]))));\n                        ;\n                        };\n                    };\n                };\n            ;\n                return i.invisible = c.invisibleTagAttrs, d(\"\\u003Cspan class='tco-ellipsis'\\u003E#{precedingEllipsis}\\u003Cspan #{invisible}\\u003E&nbsp;\\u003C/span\\u003E\\u003C/span\\u003E\\u003Cspan #{invisible}\\u003E#{beforeDisplayUrl}\\u003C/span\\u003E\\u003Cspan class='js-display-url'\\u003E#{displayUrlSansEllipses}\\u003C/span\\u003E\\u003Cspan #{invisible}\\u003E#{afterDisplayUrl}\\u003C/span\\u003E\\u003Cspan class='tco-ellipsis'\\u003E\\u003Cspan #{invisible}\\u003E&nbsp;\\u003C/span\\u003E#{followingEllipsis}\\u003C/span\\u003E\", i);\n            }\n        ;\n        ;\n            return e;\n        }, b.txt.autoLinkEntities = function(a, c, d) {\n            d = q(((d || {\n            }))), d.hashtagClass = ((d.hashtagClass || m)), d.hashtagUrlBase = ((d.hashtagUrlBase || \"https://twitter.com/#!/search?q=%23\")), d.cashtagClass = ((d.cashtagClass || n)), d.cashtagUrlBase = ((d.cashtagUrlBase || \"https://twitter.com/#!/search?q=%24\")), d.listClass = ((d.listClass || k)), d.usernameClass = ((d.usernameClass || l)), d.usernameUrlBase = ((d.usernameUrlBase || \"https://twitter.com/\")), d.listUrlBase = ((d.listUrlBase || \"https://twitter.com/\")), d.htmlAttrs = b.txt.extractHtmlAttrsFromOptions(d), d.invisibleTagAttrs = ((d.invisibleTagAttrs || \"style='position:absolute;left:-9999px;'\"));\n            var e, f, g;\n            if (d.urlEntities) {\n                e = {\n                };\n                for (f = 0, g = d.urlEntities.length; ((f < g)); f++) {\n                    e[d.urlEntities[f].url] = d.urlEntities[f];\n                ;\n                };\n            ;\n                d.urlEntities = e;\n            }\n        ;\n        ;\n            var h = \"\", i = 0;\n            c.sort(function(a, b) {\n                return ((a.indices[0] - b.indices[0]));\n            });\n            var j = ((d.htmlEscapeNonEntities ? b.txt.htmlEscape : function(a) {\n                return a;\n            }));\n            for (var f = 0; ((f < c.length)); f++) {\n                var o = c[f];\n                h += j(a.substring(i, o.indices[0])), ((o.url ? h += b.txt.linkToUrl(o, a, d) : ((o.hashtag ? h += b.txt.linkToHashtag(o, a, d) : ((o.screenName ? h += b.txt.linkToMentionAndList(o, a, d) : ((o.cashtag && (h += b.txt.linkToCashtag(o, a, d)))))))))), i = o.indices[1];\n            };\n        ;\n            return h += j(a.substring(i, a.length)), h;\n        }, b.txt.autoLinkWithJSON = function(a, c, d) {\n            var e = [];\n            {\n                var fin62keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin62i = (0);\n                var f;\n                for (; (fin62i < fin62keys.length); (fin62i++)) {\n                    ((f) = (fin62keys[fin62i]));\n                    {\n                        e = e.concat(c[f]);\n                    ;\n                    };\n                };\n            };\n        ;\n            for (var g = 0; ((g < e.length)); g++) {\n                entity = e[g], ((entity.screen_name ? entity.screenName = entity.screen_name : ((entity.text && (entity.hashtag = entity.text)))));\n            ;\n            };\n        ;\n            return b.txt.modifyIndicesFromUnicodeToUTF16(a, e), b.txt.autoLinkEntities(a, e, d);\n        }, b.txt.extractHtmlAttrsFromOptions = function(a) {\n            var b = {\n            };\n            {\n                var fin63keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin63i = (0);\n                var c;\n                for (; (fin63i < fin63keys.length); (fin63i++)) {\n                    ((c) = (fin63keys[fin63i]));\n                    {\n                        var d = a[c];\n                        if (o[c]) {\n                            continue;\n                        }\n                    ;\n                    ;\n                        ((p[c] && (d = ((d ? c : null)))));\n                        if (((d == null))) {\n                            continue;\n                        }\n                    ;\n                    ;\n                        b[c] = d;\n                    };\n                };\n            };\n        ;\n            return b;\n        }, b.txt.autoLink = function(a, c) {\n            var d = b.txt.extractEntitiesWithIndices(a, {\n                extractUrlsWithoutProtocol: !1\n            });\n            return b.txt.autoLinkEntities(a, d, c);\n        }, b.txt.autoLinkUsernamesOrLists = function(a, c) {\n            var d = b.txt.extractMentionsOrListsWithIndices(a);\n            return b.txt.autoLinkEntities(a, d, c);\n        }, b.txt.autoLinkHashtags = function(a, c) {\n            var d = b.txt.extractHashtagsWithIndices(a);\n            return b.txt.autoLinkEntities(a, d, c);\n        }, b.txt.autoLinkCashtags = function(a, c) {\n            var d = b.txt.extractCashtagsWithIndices(a);\n            return b.txt.autoLinkEntities(a, d, c);\n        }, b.txt.autoLinkUrlsCustom = function(a, c) {\n            var d = b.txt.extractUrlsWithIndices(a, {\n                extractUrlsWithoutProtocol: !1\n            });\n            return b.txt.autoLinkEntities(a, d, c);\n        }, b.txt.removeOverlappingEntities = function(a) {\n            a.sort(function(a, b) {\n                return ((a.indices[0] - b.indices[0]));\n            });\n            var b = a[0];\n            for (var c = 1; ((c < a.length)); c++) {\n                ((((b.indices[1] > a[c].indices[0])) ? (a.splice(c, 1), c--) : b = a[c]));\n            ;\n            };\n        ;\n        }, b.txt.extractEntitiesWithIndices = function(a, c) {\n            var d = b.txt.extractUrlsWithIndices(a, c).concat(b.txt.extractMentionsOrListsWithIndices(a)).concat(b.txt.extractHashtagsWithIndices(a, {\n                checkUrlOverlap: !1\n            })).concat(b.txt.extractCashtagsWithIndices(a));\n            return ((((d.length == 0)) ? [] : (b.txt.removeOverlappingEntities(d), d)));\n        }, b.txt.extractMentions = function(a) {\n            var c = [], d = b.txt.extractMentionsWithIndices(a);\n            for (var e = 0; ((e < d.length)); e++) {\n                var f = d[e].screenName;\n                c.push(f);\n            };\n        ;\n            return c;\n        }, b.txt.extractMentionsWithIndices = function(a) {\n            var c = [], d, e = b.txt.extractMentionsOrListsWithIndices(a);\n            for (var f = 0; ((f < e.length)); f++) {\n                d = e[f], ((((d.listSlug == \"\")) && c.push({\n                    screenName: d.screenName,\n                    indices: d.indices\n                })));\n            ;\n            };\n        ;\n            return c;\n        }, b.txt.extractMentionsOrListsWithIndices = function(a) {\n            if (((!a || !a.match(b.txt.regexen.atSigns)))) {\n                return [];\n            }\n        ;\n        ;\n            var c = [], d;\n            return a.replace(b.txt.regexen.validMentionOrList, function(a, d, e, f, g, h, i) {\n                var j = i.slice(((h + a.length)));\n                if (!j.match(b.txt.regexen.endMentionMatch)) {\n                    g = ((g || \"\"));\n                    var k = ((h + d.length)), l = ((((((k + f.length)) + g.length)) + 1));\n                    c.push({\n                        screenName: f,\n                        listSlug: g,\n                        indices: [k,l,]\n                    });\n                }\n            ;\n            ;\n            }), c;\n        }, b.txt.extractReplies = function(a) {\n            if (!a) {\n                return null;\n            }\n        ;\n        ;\n            var c = a.match(b.txt.regexen.validReply);\n            return ((((!c || RegExp.rightContext.match(b.txt.regexen.endMentionMatch))) ? null : c[1]));\n        }, b.txt.extractUrls = function(a, c) {\n            var d = [], e = b.txt.extractUrlsWithIndices(a, c);\n            for (var f = 0; ((f < e.length)); f++) {\n                d.push(e[f].url);\n            ;\n            };\n        ;\n            return d;\n        }, b.txt.extractUrlsWithIndices = function(a, c) {\n            ((c || (c = {\n                extractUrlsWithoutProtocol: !0\n            })));\n            if (((!a || ((c.extractUrlsWithoutProtocol ? !a.match(/\\./) : !a.match(/:/)))))) {\n                return [];\n            }\n        ;\n        ;\n            var d = [];\n            while (b.txt.regexen.extractUrl.exec(a)) {\n                var e = RegExp.$2, f = RegExp.$3, g = RegExp.$4, h = RegExp.$5, i = RegExp.$7, j = b.txt.regexen.extractUrl.lastIndex, k = ((j - f.length));\n                if (!g) {\n                    if (((!c.extractUrlsWithoutProtocol || e.match(b.txt.regexen.invalidUrlWithoutProtocolPrecedingChars)))) {\n                        continue;\n                    }\n                ;\n                ;\n                    var l = null, m = !1, n = 0;\n                    h.replace(b.txt.regexen.validAsciiDomain, function(a) {\n                        var c = h.indexOf(a, n);\n                        n = ((c + a.length)), l = {\n                            url: a,\n                            indices: [((k + c)),((k + n)),]\n                        }, m = a.match(b.txt.regexen.invalidShortDomain), ((m || d.push(l)));\n                    });\n                    if (((l == null))) {\n                        continue;\n                    }\n                ;\n                ;\n                    ((i && (((m && d.push(l))), l.url = f.replace(h, l.url), l.indices[1] = j)));\n                }\n                 else ((f.match(b.txt.regexen.validTcoUrl) && (f = RegExp.lastMatch, j = ((k + f.length))))), d.push({\n                    url: f,\n                    indices: [k,j,]\n                });\n            ;\n            ;\n            };\n        ;\n            return d;\n        }, b.txt.extractHashtags = function(a) {\n            var c = [], d = b.txt.extractHashtagsWithIndices(a);\n            for (var e = 0; ((e < d.length)); e++) {\n                c.push(d[e].hashtag);\n            ;\n            };\n        ;\n            return c;\n        }, b.txt.extractHashtagsWithIndices = function(a, c) {\n            ((c || (c = {\n                checkUrlOverlap: !0\n            })));\n            if (((!a || !a.match(b.txt.regexen.hashSigns)))) {\n                return [];\n            }\n        ;\n        ;\n            var d = [];\n            a.replace(b.txt.regexen.validHashtag, function(a, c, e, f, g, h) {\n                var i = h.slice(((g + a.length)));\n                if (i.match(b.txt.regexen.endHashtagMatch)) {\n                    return;\n                }\n            ;\n            ;\n                var j = ((g + c.length)), k = ((((j + f.length)) + 1));\n                d.push({\n                    hashtag: f,\n                    indices: [j,k,]\n                });\n            });\n            if (c.checkUrlOverlap) {\n                var e = b.txt.extractUrlsWithIndices(a);\n                if (((e.length > 0))) {\n                    var f = d.concat(e);\n                    b.txt.removeOverlappingEntities(f), d = [];\n                    for (var g = 0; ((g < f.length)); g++) {\n                        ((f[g].hashtag && d.push(f[g])));\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            return d;\n        }, b.txt.extractCashtags = function(a) {\n            var c = [], d = b.txt.extractCashtagsWithIndices(a);\n            for (var e = 0; ((e < d.length)); e++) {\n                c.push(d[e].cashtag);\n            ;\n            };\n        ;\n            return c;\n        }, b.txt.extractCashtagsWithIndices = function(a) {\n            if (((!a || ((a.indexOf(\"$\") == -1))))) {\n                return [];\n            }\n        ;\n        ;\n            var c = [];\n            return a.replace(b.txt.regexen.validCashtag, function(a, b, d, e, f, g) {\n                var h = ((f + b.length)), i = ((((h + e.length)) + 1));\n                c.push({\n                    cashtag: e,\n                    indices: [h,i,]\n                });\n            }), c;\n        }, b.txt.modifyIndicesFromUnicodeToUTF16 = function(a, c) {\n            b.txt.convertUnicodeIndices(a, c, !1);\n        }, b.txt.modifyIndicesFromUTF16ToUnicode = function(a, c) {\n            b.txt.convertUnicodeIndices(a, c, !0);\n        }, b.txt.getUnicodeTextLength = function(a) {\n            return a.replace(b.txt.regexen.non_bmp_code_pairs, \" \").length;\n        }, b.txt.convertUnicodeIndices = function(a, b, c) {\n            if (((b.length == 0))) {\n                return;\n            }\n        ;\n        ;\n            var d = 0, e = 0;\n            b.sort(function(a, b) {\n                return ((a.indices[0] - b.indices[0]));\n            });\n            var f = 0, g = b[0];\n            while (((d < a.length))) {\n                if (((g.indices[0] == ((c ? d : e))))) {\n                    var h = ((g.indices[1] - g.indices[0]));\n                    g.indices[0] = ((c ? e : d)), g.indices[1] = ((g.indices[0] + h)), f++;\n                    if (((f == b.length))) {\n                        break;\n                    }\n                ;\n                ;\n                    g = b[f];\n                }\n            ;\n            ;\n                var i = a.charCodeAt(d);\n                ((((((((55296 <= i)) && ((i <= 56319)))) && ((d < ((a.length - 1)))))) && (i = a.charCodeAt(((d + 1))), ((((((56320 <= i)) && ((i <= 57343)))) && d++))))), e++, d++;\n            };\n        ;\n        }, b.txt.splitTags = function(a) {\n            var b = a.split(\"\\u003C\"), c, d = [], e;\n            for (var f = 0; ((f < b.length)); f += 1) {\n                e = b[f];\n                if (!e) d.push(\"\");\n                 else {\n                    c = e.split(\"\\u003E\");\n                    for (var g = 0; ((g < c.length)); g += 1) {\n                        d.push(c[g]);\n                    ;\n                    };\n                ;\n                }\n            ;\n            ;\n            };\n        ;\n            return d;\n        }, b.txt.hitHighlight = function(a, c, d) {\n            var e = \"em\";\n            c = ((c || [])), d = ((d || {\n            }));\n            if (((c.length === 0))) {\n                return a;\n            }\n        ;\n        ;\n            var f = ((d.tag || e)), g = [((((\"\\u003C\" + f)) + \"\\u003E\")),((((\"\\u003C/\" + f)) + \"\\u003E\")),], h = b.txt.splitTags(a), i, j, k = \"\", l = 0, m = h[0], n = 0, o = 0, p = !1, q = m, r = [], s, t, u, v, w;\n            for (i = 0; ((i < c.length)); i += 1) {\n                for (j = 0; ((j < c[i].length)); j += 1) {\n                    r.push(c[i][j]);\n                ;\n                };\n            ;\n            };\n        ;\n            for (s = 0; ((s < r.length)); s += 1) {\n                t = r[s], u = g[((s % 2))], v = !1;\n                while (((((m != null)) && ((t >= ((n + m.length))))))) {\n                    k += q.slice(o), ((((p && ((t === ((n + q.length)))))) && (k += u, v = !0))), ((h[((l + 1))] && (k += ((((\"\\u003C\" + h[((l + 1))])) + \"\\u003E\"))))), n += q.length, o = 0, l += 2, m = h[l], q = m, p = !1;\n                ;\n                };\n            ;\n                ((((!v && ((m != null)))) ? (w = ((t - n)), k += ((q.slice(o, w) + u)), o = w, ((((((s % 2)) === 0)) ? p = !0 : p = !1))) : ((v || (v = !0, k += u)))));\n            };\n        ;\n            if (((m != null))) {\n                ((((o < q.length)) && (k += q.slice(o))));\n                for (s = ((l + 1)); ((s < h.length)); s += 1) {\n                    k += ((((((s % 2)) === 0)) ? h[s] : ((((\"\\u003C\" + h[s])) + \"\\u003E\"))));\n                ;\n                };\n            ;\n            }\n        ;\n        ;\n            return k;\n        };\n        var r = 140, s = [f(65534),f(65279),f(65535),f(8234),f(8235),f(8236),f(8237),f(8238),];\n        b.txt.getTweetLength = function(a, c) {\n            ((c || (c = {\n                short_url_length: 22,\n                short_url_length_https: 23\n            })));\n            var d = b.txt.getUnicodeTextLength(a), e = b.txt.extractUrlsWithIndices(a);\n            b.txt.modifyIndicesFromUTF16ToUnicode(a, e);\n            for (var f = 0; ((f < e.length)); f++) {\n                d += ((e[f].indices[0] - e[f].indices[1])), ((e[f].url.toLowerCase().match(b.txt.regexen.urlHasHttps) ? d += c.short_url_length_https : d += c.short_url_length));\n            ;\n            };\n        ;\n            return d;\n        }, b.txt.isInvalidTweet = function(a) {\n            if (!a) {\n                return \"empty\";\n            }\n        ;\n        ;\n            if (((b.txt.getTweetLength(a) > r))) {\n                return \"too_long\";\n            }\n        ;\n        ;\n            for (var c = 0; ((c < s.length)); c++) {\n                if (((a.indexOf(s[c]) >= 0))) {\n                    return \"invalid_characters\";\n                }\n            ;\n            ;\n            };\n        ;\n            return !1;\n        }, b.txt.isValidTweetText = function(a) {\n            return !b.txt.isInvalidTweet(a);\n        }, b.txt.isValidUsername = function(a) {\n            if (!a) {\n                return !1;\n            }\n        ;\n        ;\n            var c = b.txt.extractMentions(a);\n            return ((((c.length === 1)) && ((c[0] === a.slice(1)))));\n        };\n        var t = c(/^#{validMentionOrList}$/);\n        b.txt.isValidList = function(a) {\n            var b = a.match(t);\n            return ((((!!b && ((b[1] == \"\")))) && !!b[4]));\n        }, b.txt.isValidHashtag = function(a) {\n            if (!a) {\n                return !1;\n            }\n        ;\n        ;\n            var c = b.txt.extractHashtags(a);\n            return ((((c.length === 1)) && ((c[0] === a.slice(1)))));\n        }, b.txt.isValidUrl = function(a, c, d) {\n            ((((c == null)) && (c = !0))), ((((d == null)) && (d = !0)));\n            if (!a) {\n                return !1;\n            }\n        ;\n        ;\n            var e = a.match(b.txt.regexen.validateUrlUnencoded);\n            if (((!e || ((e[0] !== a))))) {\n                return !1;\n            }\n        ;\n        ;\n            var f = e[1], g = e[2], h = e[3], i = e[4], j = e[5];\n            return ((((((((((!d || ((u(f, b.txt.regexen.validateUrlScheme) && f.match(/^https?$/i))))) && u(h, b.txt.regexen.validateUrlPath))) && u(i, b.txt.regexen.validateUrlQuery, !0))) && u(j, b.txt.regexen.validateUrlFragment, !0))) ? ((((c && u(g, b.txt.regexen.validateUrlUnicodeAuthority))) || ((!c && u(g, b.txt.regexen.validateUrlAuthority))))) : !1));\n        }, ((((((typeof module != \"undefined\")) && module.exports)) && (module.exports = b.txt)));\n    })(), a(b.txt);\n});\ndefine(\"app/ui/with_character_counter\", [\"module\",\"require\",\"exports\",\"lib/twitter-text\",], function(module, require, exports) {\n    function withCharacterCounter() {\n        var a = 23;\n        this.defaultAttrs({\n            maxLength: 140,\n            superwarnLength: 130,\n            warnLength: 120,\n            superwarnClass: \"superwarn\",\n            warnClass: \"warn\"\n        }), this.updateCounter = function() {\n            var a = this.getLength(), b = ((((a >= this.attr.warnLength)) && ((a < this.attr.superwarnLength)))), c = ((a >= this.attr.superwarnLength)), d = ((this.attr.maxLength - a));\n            this.$counter.html(d).toggleClass(this.attr.warnClass, b).toggleClass(this.attr.superwarnClass, c), ((((b || c)) && this.trigger(\"uiCharCountWarningVisible\", {\n                charCount: d\n            })));\n        }, this.getLength = function(b) {\n            return ((((b === undefined)) && (b = this.val()))), ((((b !== this.prevCounterText)) && (this.prevCounterText = b, this.prevCounterLength = twitterText.getTweetLength(b)))), ((this.prevCounterLength + ((this.hasMedia ? a : 0))));\n        }, this.maxReached = function() {\n            return ((this.getLength() > this.attr.maxLength));\n        }, this.after(\"initialize\", function() {\n            this.$counter = this.select(\"counterSelector\"), this.JSBNG__on(\"uiTextChanged\", this.updateCounter), this.updateCounter();\n        });\n    };\n;\n    var twitterText = require(\"lib/twitter-text\");\n    module.exports = withCharacterCounter;\n});\ndefine(\"app/utils/with_event_params\", [\"module\",\"require\",\"exports\",\"core/utils\",\"core/parameterize\",], function(module, require, exports) {\n    function withEventParams() {\n        this.rewriteEventName = function(a) {\n            var b = util.toArray(arguments, 1), c = ((((((typeof b[0] == \"string\")) || b[0].defaultBehavior)) ? 0 : 1)), d = b[c], e = ((d.type || d));\n            try {\n                b[c] = parameterize(e, this.attr.eventParams, !0), ((d.type && (d.type = b[c], b[c] = d)));\n            } catch (f) {\n                throw new Error(\"Couldn't parameterize the event name\");\n            };\n        ;\n            a.apply(this, b);\n        }, this.around(\"JSBNG__on\", this.rewriteEventName), this.around(\"off\", this.rewriteEventName), this.around(\"trigger\", this.rewriteEventName);\n    };\n;\n    var util = require(\"core/utils\"), parameterize = require(\"core/parameterize\");\n    module.exports = withEventParams;\n});\ndefine(\"app/utils/caret\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var caret = {\n        getPosition: function(a) {\n            try {\n                if (JSBNG__document.selection) {\n                    var b = JSBNG__document.selection.createRange();\n                    return b.moveStart(\"character\", -a.value.length), b.text.length;\n                }\n            ;\n            ;\n                if (((typeof a.selectionStart == \"number\"))) {\n                    return a.selectionStart;\n                }\n            ;\n            ;\n            } catch (c) {\n            \n            };\n        ;\n            return 0;\n        },\n        setPosition: function(a, b) {\n            try {\n                if (JSBNG__document.selection) {\n                    var c = a.createTextRange();\n                    c.collapse(!0), c.moveEnd(\"character\", b), c.moveStart(\"character\", b), c.select();\n                }\n                 else ((((typeof a.selectionStart == \"number\")) && (a.selectionStart = b, a.selectionEnd = b)));\n            ;\n            ;\n            } catch (d) {\n            \n            };\n        ;\n        },\n        JSBNG__getSelection: function() {\n            return ((window.JSBNG__getSelection ? window.JSBNG__getSelection().toString() : JSBNG__document.selection.createRange().text));\n        }\n    };\n    module.exports = caret;\n});\ndefine(\"app/ui/with_draft_tweets\", [\"module\",\"require\",\"exports\",\"app/utils/storage/custom\",], function(module, require, exports) {\n    var customStorage = require(\"app/utils/storage/custom\");\n    module.exports = function() {\n        this.defaultAttrs({\n            draftTweetTTL: 86400000\n        }), this.getDraftTweet = function() {\n            return ((this.attr.draftTweetId && this.draftTweets().getItem(this.attr.draftTweetId)));\n        }, this.hasDraftTweet = function() {\n            return !!this.getDraftTweet();\n        }, this.loadDraftTweet = function() {\n            var a = this.getDraftTweet();\n            if (a) {\n                return this.val(a), !0;\n            }\n        ;\n        ;\n        }, this.saveDraftTweet = function(a, b) {\n            if (((this.attr.draftTweetId && this.hasFocus()))) {\n                var c = b.text.trim();\n                ((((((((!!this.attr.defaultText && ((c === this.attr.defaultText.trim())))) || ((!!this.attr.condensedText && ((c === this.attr.condensedText.trim())))))) || !c)) ? this.draftTweets().removeItem(this.attr.draftTweetId) : this.draftTweets().setItem(this.attr.draftTweetId, c, this.attr.draftTweetTTL)));\n            }\n        ;\n        ;\n        }, this.clearDraftTweet = function() {\n            ((this.attr.draftTweetId && (this.draftTweets().removeItem(this.attr.draftTweetId), this.resetTweetText())));\n        }, this.overrideDraftTweetId = function(a, b) {\n            this.attr.draftTweetId = b.draftTweetId;\n        }, this.draftTweets = function() {\n            if (!this.draftTweetsStore) {\n                var a = customStorage({\n                    withExpiry: !0\n                });\n                this.draftTweetsStore = new a(\"draft_tweets\");\n            }\n        ;\n        ;\n            return this.draftTweetsStore;\n        }, this.around(\"resetTweetText\", function(a) {\n            ((this.loadDraftTweet() || a()));\n        }), this.initDraftTweets = function() {\n            this.JSBNG__on(\"uiTextChanged\", this.saveDraftTweet), this.JSBNG__on(\"ui{{type}}Sent\", this.clearDraftTweet), ((this.attr.modal && this.JSBNG__on(JSBNG__document, \"uiOverride{{type}}BoxOptions\", this.overrideDraftTweetId)));\n        };\n    };\n});\ndefine(\"app/ui/with_text_polling\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withTextPolling() {\n        this.defaultAttrs({\n            pollIntervalInMs: 100\n        }), this.pollUpdatedText = function() {\n            this.detectUpdatedText(), ((this.hasFocus() || this.stopPollingUpdatedText()));\n        }, this.startPollingUpdatedText = function() {\n            this.detectUpdatedText(), ((((this.pollUpdatedTextId === undefined)) && (this.pollUpdatedTextId = JSBNG__setInterval(this.pollUpdatedText.bind(this), this.attr.pollIntervalInMs))));\n        }, this.stopPollingUpdatedText = function() {\n            ((((this.pollUpdatedTextId !== undefined)) && (JSBNG__clearInterval(this.pollUpdatedTextId), delete this.pollUpdatedTextId)));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(this.$text, \"JSBNG__focus\", this.startPollingUpdatedText), ((this.hasFocus() && this.startPollingUpdatedText()));\n        }), this.before(\"teardown\", function() {\n            this.stopPollingUpdatedText();\n        });\n    };\n;\n    module.exports = withTextPolling;\n});\ndefine(\"app/ui/with_rtl_tweet_box\", [\"module\",\"require\",\"exports\",\"lib/twitter-text\",\"app/utils/caret\",], function(module, require, exports) {\n    function replaceIndices(a, b, c) {\n        var d = 0, e = \"\";\n        return b(a).forEach(function(b) {\n            e += ((a.slice(d, b.indices[0]) + c(a.slice(b.indices[0], b.indices[1])))), d = b.indices[1];\n        }), ((e + a.slice(d)));\n    };\n;\n    function withRTL() {\n        this.defaultAttrs({\n            isRTL: (($(\"body\").attr(\"dir\") === \"rtl\")),\n            rtlCharRegex: /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/gm,\n            dirMarkRegex: /\\u200e|\\u200f/gm,\n            rtlThreshold: 36665\n        }), this.shouldBeRTL = function(a, b, c) {\n            ((((c === undefined)) && (c = a.match(this.attr.rtlCharRegex))));\n            var d = a.trim();\n            if (!d) {\n                return this.attr.isRTL;\n            }\n        ;\n        ;\n            if (!c) {\n                return !1;\n            }\n        ;\n        ;\n            var e = ((d.length - b));\n            return ((((e > 0)) && ((((c.length / e)) > this.attr.rtlThreshold))));\n        }, this.removeMarkers = function(a) {\n            return a.replace(this.attr.dirMarkRegex, \"\");\n        }, this.setMarkersAndRTL = function(a, b) {\n            var c = b.match(this.attr.rtlCharRegex), d = 0;\n            if (c) {\n                a = b, a = replaceIndices(a, txt.extractMentionsWithIndices, function(a) {\n                    return d += ((a.length + 1)), ((((\"\\u200e\" + a)) + \"\\u200f\"));\n                });\n                var e = this.attr.rtlCharRegex;\n                a = replaceIndices(a, txt.extractHashtagsWithIndices, function(a) {\n                    return ((a[1].match(e) ? a : ((\"\\u200e\" + a))));\n                }), a = replaceIndices(a, txt.extractUrlsWithIndices, function(a) {\n                    return d += ((a.length + 2)), ((a + \"\\u200e\"));\n                });\n            }\n        ;\n        ;\n            var f = this.shouldBeRTL(b, d, c);\n            return this.$text.attr(\"dir\", ((f ? \"rtl\" : \"ltr\"))), a;\n        }, this.erasePastMarkers = function(a) {\n            if (((a.which === 8))) var b = -1\n             else {\n                if (((a.which !== 46))) {\n                    return;\n                }\n            ;\n            ;\n                var b = 0;\n            }\n        ;\n        ;\n            var c = caret.getPosition(this.$text[0]), d = this.$text.val(), e = 0;\n            do {\n                var f = ((d[((c + b))] || \"\"));\n                ((f && (c += b, e++, d = ((d.slice(0, c) + d.slice(((c + 1))))))));\n            } while (f.match(this.attr.dirMarkRegex));\n            ((((e > 1)) && (this.$text.val(d), caret.setPosition(this.$text[0], c), a.preventDefault(), this.detectUpdatedText())));\n        }, this.cleanRtlText = function(a) {\n            var b = this.removeMarkers(a), c = this.setMarkersAndRTL(a, b);\n            if (((c !== a))) {\n                var d = this.$text[0], e = caret.getPosition(d);\n                this.$text.val(c), this.prevText = c, caret.setPosition(d, ((((e + c.length)) - a.length)));\n            }\n        ;\n        ;\n            return b;\n        }, this.after(\"initTextNode\", function() {\n            this.JSBNG__on(this.$text, \"keydown\", this.erasePastMarkers);\n        });\n    };\n;\n    var txt = require(\"lib/twitter-text\"), caret = require(\"app/utils/caret\");\n    module.exports = withRTL;\n});\ndefine(\"app/ui/toolbar\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function JSBNG__toolbar() {\n        this.defaultAttrs({\n            buttonsSelector: \".btn:not([disabled])\"\n        }), this.current = -1, this.focusNext = function(a) {\n            var b = this.select(\"buttonsSelector\");\n            ((((this.current == -1)) && (this.current = $.inArray(JSBNG__document.activeElement, b))));\n            var c, d = this.current;\n            switch (a.which) {\n              case 37:\n                d--;\n                break;\n              case 39:\n                d++;\n            };\n        ;\n            c = b[d], ((c && (c.JSBNG__focus(), this.current = d)));\n        }, this.clearCurrent = function() {\n            this.current = -1;\n        }, this.after(\"initialize\", function() {\n            this.$node.attr(\"role\", \"JSBNG__toolbar\"), this.JSBNG__on(\"keydown\", {\n                buttonsSelector: this.focusNext\n            }), this.JSBNG__on(\"focusout\", this.clearCurrent);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), Toolbar = defineComponent(JSBNG__toolbar);\n    module.exports = Toolbar;\n});\ndefine(\"app/utils/tweet_helper\", [\"module\",\"require\",\"exports\",\"lib/twitter-text\",\"core/utils\",\"app/data/user_info\",], function(module, require, exports) {\n    var twitterText = require(\"lib/twitter-text\"), utils = require(\"core/utils\"), userInfo = require(\"app/data/user_info\"), VALID_PROTOCOL_PREFIX_REGEX = /^https?:\\/\\//i, tweetHelper = {\n        extractMentionsForReply: function(a, b) {\n            var c = a.attr(\"data-screen-name\"), d = a.attr(\"data-retweeter\"), e = ((a.attr(\"data-mentions\") ? a.attr(\"data-mentions\").split(\" \") : [])), f = [c,b,d,];\n            return e = e.filter(function(a) {\n                return ((f.indexOf(a) < 0));\n            }), ((((((d && ((d != c)))) && ((d != b)))) && e.unshift(d))), ((((!e.length || ((c != b)))) && e.unshift(c))), e;\n        },\n        linkify: function(a, b) {\n            return b = utils.merge({\n                hashtagClass: \"twitter-hashtag pretty-link\",\n                hashtagUrlBase: \"/search?q=%23\",\n                symbolTag: \"s\",\n                textWithSymbolTag: \"b\",\n                cashtagClass: \"twitter-cashtag pretty-link\",\n                cashtagUrlBase: \"/search?q=%24\",\n                usernameClass: \"twitter-atreply pretty-link\",\n                usernameUrlBase: \"/\",\n                usernameIncludeSymbol: !0,\n                listClass: \"twitter-listname pretty-link\",\n                urlClass: \"twitter-timeline-link\",\n                urlTarget: \"_blank\",\n                suppressNoFollow: !0,\n                htmlEscapeNonEntities: !0\n            }, ((b || {\n            }))), twitterText.autoLinkEntities(a, twitterText.extractEntitiesWithIndices(a), b);\n        }\n    };\n    module.exports = tweetHelper;\n});\ndefine(\"app/utils/html_text\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function isTextNode(a) {\n        return ((((a.nodeType == 3)) || ((a.nodeType == 4))));\n    };\n;\n    function isElementNode(a) {\n        return ((a.nodeType == 1));\n    };\n;\n    function isBrNode(a) {\n        return ((isElementNode(a) && ((a.nodeName.toLowerCase() == \"br\"))));\n    };\n;\n    function isOutsideContainer(a, b) {\n        while (((a !== b))) {\n            if (!a) {\n                return !0;\n            }\n        ;\n        ;\n            a = a.parentNode;\n        };\n    ;\n    };\n;\n    var useW3CRange = window.JSBNG__getSelection, useMsftTextRange = ((!useW3CRange && JSBNG__document.selection)), useIeHtmlFix = ((JSBNG__navigator.appName == \"Microsoft Internet Explorer\")), NBSP_REGEX = /[\\xa0\\n\\t]/g, CRLF_REGEX = /\\r\\n/g, LINES_REGEX = /(.*?)\\n/g, SP_LEADING_OR_FOLLOWING_CLOSE_TAG_OR_PRECEDING_A_SP_REGEX = /^ |(<\\/[^>]+>) | (?= )/g, SP_LEADING_OR_TRAILING_OR_FOLLOWING_A_SP_REGEX = /^ | $|( ) /g, MAX_OFFSET = Number.MAX_VALUE, htmlText = function(a, b) {\n        function c(a, c) {\n            function h(a) {\n                var i = d.length;\n                if (isTextNode(a)) {\n                    var j = a.nodeValue.replace(NBSP_REGEX, \" \"), k = j.length;\n                    ((k && (d += j, e = !0))), c(a, !0, 0, i, ((i + k)));\n                }\n                 else if (isElementNode(a)) {\n                    c(a, !1, 0, i, i);\n                    if (isBrNode(a)) ((((a == f)) ? g = !0 : (d += \"\\u000a\", e = !1)));\n                     else {\n                        var l = ((a.currentStyle || window.JSBNG__getComputedStyle(a, \"\"))), m = ((l.display == \"block\"));\n                        ((((m && b.msie)) && (e = !0)));\n                        for (var n = a.firstChild, o = 1; n; n = n.nextSibling, o++) {\n                            h(n);\n                            if (g) {\n                                return;\n                            }\n                        ;\n                        ;\n                            i = d.length, c(a, !1, o, i, i);\n                        };\n                    ;\n                        ((((g || ((a == f)))) ? g = !0 : ((((m && e)) && (d += \"\\u000a\", e = !1)))));\n                    }\n                ;\n                ;\n                }\n                \n            ;\n            ;\n            };\n        ;\n            var d = \"\", e, f, g;\n            for (var i = a; ((i && isElementNode(i))); i = i.lastChild) {\n                f = i;\n            ;\n            };\n        ;\n            return h(a), d;\n        };\n    ;\n        function d(a, b) {\n            var d = null, e = ((b.length - 1));\n            if (useW3CRange) {\n                var f = b.map(function() {\n                    return {\n                    };\n                }), g;\n                c(a, function(a, c, d, h, i) {\n                    ((g || f.forEach(function(f, j) {\n                        var k = b[j];\n                        ((((((h <= k)) && !isBrNode(a))) && (f.node = a, f.offset = ((c ? ((Math.min(k, i) - h)) : d)), g = ((((c && ((j == e)))) && ((i >= k)))))));\n                    })));\n                }), ((((f[0].node && f[e].node)) && (d = JSBNG__document.createRange(), d.setStart(f[0].node, f[0].offset), d.setEnd(f[e].node, f[e].offset))));\n            }\n             else if (useMsftTextRange) {\n                var h = JSBNG__document.body.createTextRange();\n                h.moveToElementText(a), d = h.duplicate();\n                if (((b[0] == MAX_OFFSET))) d.setEndPoint(\"StartToEnd\", h);\n                 else {\n                    d.move(\"character\", b[0]);\n                    var i = ((e && ((b[1] - b[0]))));\n                    ((((i > 0)) && d.moveEnd(\"character\", i))), ((h.inRange(d) || d.setEndPoint(\"EndToEnd\", h)));\n                }\n            ;\n            ;\n            }\n            \n        ;\n        ;\n            return d;\n        };\n    ;\n        function e() {\n            return ((a.offsetWidth && a.offsetHeight));\n        };\n    ;\n        function f(b) {\n            a.innerHTML = b;\n            if (useIeHtmlFix) {\n                for (var c = a.firstChild; c; c = c.nextSibling) {\n                    ((((((isElementNode(c) && ((c.nodeName.toLowerCase() == \"p\")))) && ((c.innerHTML == \"\")))) && (c.innerText = \"\")));\n                ;\n                };\n            }\n        ;\n        ;\n        };\n    ;\n        function g(a, b) {\n            return a.map(function(a) {\n                return Math.min(a, b.length);\n            });\n        };\n    ;\n        function h() {\n            var b = JSBNG__getSelection();\n            if (((b.rangeCount !== 1))) {\n                return null;\n            }\n        ;\n        ;\n            var d = b.getRangeAt(0);\n            if (isOutsideContainer(d.commonAncestorContainer, a)) {\n                return null;\n            }\n        ;\n        ;\n            var e = [{\n                node: d.startContainer,\n                offset: d.startOffset\n            },];\n            ((d.collapsed || e.push({\n                node: d.endContainer,\n                offset: d.endOffset\n            })));\n            var f = e.map(function() {\n                return MAX_OFFSET;\n            }), h = c(a, function(a, b, c, d) {\n                e.forEach(function(e, g) {\n                    ((((((((f[g] == MAX_OFFSET)) && ((a == e.node)))) && ((b || ((c == e.offset)))))) && (f[g] = ((d + ((b ? e.offset : 0)))))));\n                });\n            });\n            return g(f, h);\n        };\n    ;\n        function i() {\n            var b = JSBNG__document.selection.createRange();\n            if (isOutsideContainer(b.parentElement(), a)) {\n                return null;\n            }\n        ;\n        ;\n            var d = [\"Start\",];\n            ((b.compareEndPoints(\"StartToEnd\", b) && d.push(\"End\")));\n            var e = d.map(function() {\n                return MAX_OFFSET;\n            }), f = JSBNG__document.body.createTextRange(), h = c(a, function(c, g, h, i) {\n                function j(a, c) {\n                    if (((e[c] < MAX_OFFSET))) {\n                        return;\n                    }\n                ;\n                ;\n                    var d = f.compareEndPoints(((\"StartTo\" + a)), b);\n                    if (((d > 0))) {\n                        return;\n                    }\n                ;\n                ;\n                    var g = f.compareEndPoints(((\"EndTo\" + a)), b);\n                    if (((g < 0))) {\n                        return;\n                    }\n                ;\n                ;\n                    var h = f.duplicate();\n                    h.setEndPoint(((\"EndTo\" + a)), b), e[c] = ((i + h.text.length)), ((((c && !g)) && e[c]++));\n                };\n            ;\n                ((((((!g && !h)) && ((c != a)))) && (f.moveToElementText(c), d.forEach(j))));\n            });\n            return g(e, h);\n        };\n    ;\n        return {\n            getHtml: function() {\n                if (useIeHtmlFix) {\n                    var b = \"\", c = JSBNG__document.createElement(\"div\");\n                    for (var d = a.firstChild; d; d = d.nextSibling) {\n                        ((isTextNode(d) ? (c.innerText = d.nodeValue, b += c.innerHTML) : b += d.outerHTML.replace(CRLF_REGEX, \"\")));\n                    ;\n                    };\n                ;\n                    return b;\n                }\n            ;\n            ;\n                return a.innerHTML;\n            },\n            setHtml: function(a) {\n                f(a);\n            },\n            getText: function() {\n                return c(a, function() {\n                \n                });\n            },\n            setTextWithMarkup: function(a) {\n                f(((a + \"\\u000a\")).replace(LINES_REGEX, function(a, c) {\n                    return ((((b.mozilla || b.msie)) ? (c = c.replace(SP_LEADING_OR_FOLLOWING_CLOSE_TAG_OR_PRECEDING_A_SP_REGEX, \"$1&nbsp;\"), ((b.mozilla ? ((c + \"\\u003CBR\\u003E\")) : ((((\"\\u003CP\\u003E\" + c)) + \"\\u003C/P\\u003E\"))))) : (c = ((c || \"\\u003Cbr\\u003E\")).replace(SP_LEADING_OR_TRAILING_OR_FOLLOWING_A_SP_REGEX, \"$1&nbsp;\"), ((b.JSBNG__opera ? ((((\"\\u003Cp\\u003E\" + c)) + \"\\u003C/p\\u003E\")) : ((((\"\\u003Cdiv\\u003E\" + c)) + \"\\u003C/div\\u003E\")))))));\n                }));\n            },\n            getSelectionOffsets: function() {\n                var a = null;\n                return ((e() && ((useW3CRange ? a = h() : ((useMsftTextRange && (a = i()))))))), a;\n            },\n            setSelectionOffsets: function(b) {\n                if (((b && e()))) {\n                    var c = d(a, b);\n                    if (c) {\n                        if (useW3CRange) {\n                            var f = window.JSBNG__getSelection();\n                            f.removeAllRanges(), f.addRange(c);\n                        }\n                         else ((useMsftTextRange && c.select()));\n                    ;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            },\n            emphasizeText: function(b) {\n                var f = [];\n                ((((((b && ((b.length > 1)))) && e())) && (c(a, function(a, c, d, e, g) {\n                    if (c) {\n                        var h = Math.max(e, b[0]), i = Math.min(g, b[1]);\n                        ((((i > h)) && f.push([h,i,])));\n                    }\n                ;\n                ;\n                }), f.forEach(function(b) {\n                    var c = d(a, b);\n                    ((c && ((useW3CRange ? c.surroundContents(JSBNG__document.createElement(\"em\")) : ((useMsftTextRange && c.execCommand(\"italic\", !1, null)))))));\n                }))));\n            }\n        };\n    };\n    module.exports = htmlText;\n});\ndefine(\"app/ui/with_rich_editor\", [\"module\",\"require\",\"exports\",\"app/utils/tweet_helper\",\"lib/twitter-text\",\"app/utils/html_text\",], function(module, require, exports) {\n    function withRichEditor() {\n        this.defaultAttrs({\n            richSelector: \"div.rich-editor\",\n            linksSelector: \"a\",\n            normalizerSelector: \"div.rich-normalizer\"\n        }), this.linkify = function(a) {\n            var b = {\n                urlTarget: null,\n                textWithSymbolTag: ((RENDER_URLS_AS_PRETTY_LINKS ? \"b\" : \"\")),\n                linkAttributeBlock: function(a, b) {\n                    var c = ((a.screenName || a.url));\n                    ((c && (this.urlAndMentionsCharCount += ((c.length + 2))))), delete b.title, delete b[\"data-screen-name\"], b.dir = ((((a.hashtag && this.shouldBeRTL(a.hashtag, 0))) ? \"rtl\" : \"ltr\"));\n                }.bind(this)\n            };\n            return this.urlAndMentionsCharCount = 0, tweetHelper.linkify(a, b);\n        }, this.around(\"setCursorPosition\", function(a, b) {\n            if (!this.isRich) {\n                return a(b);\n            }\n        ;\n        ;\n            ((((b === undefined)) && (b = this.attr.cursorPosition))), ((((b === undefined)) && (b = MAX_OFFSET))), this.setSelectionIfFocused([b,]);\n        }), this.around(\"detectUpdatedText\", function(a, b, c) {\n            if (!this.isRich) {\n                return a(b, c);\n            }\n        ;\n        ;\n            if (this.$text.attr(\"data-in-composition\")) {\n                return;\n            }\n        ;\n        ;\n            var d = this.htmlRich.getHtml(), e = ((this.htmlRich.getSelectionOffsets() || [MAX_OFFSET,]));\n            if (((((((((d === this.prevHtml)) && ((e[0] === this.prevSelectionOffset)))) && !b)) && ((c === undefined))))) {\n                return;\n            }\n        ;\n        ;\n            ((((c === undefined)) && (c = this.htmlRich.getText())));\n            var f = c.replace(INVALID_CHARS, \"\");\n            this.htmlNormalizer.setTextWithMarkup(this.linkify(f));\n            var g = this.shouldBeRTL(f, this.urlAndMentionsCharCount);\n            this.$text.attr(\"dir\", ((g ? \"rtl\" : \"ltr\"))), this.$normalizer.JSBNG__find(((g ? \"[dir=rtl]\" : \"[dir=ltr]\"))).removeAttr(\"dir\"), ((RENDER_URLS_AS_PRETTY_LINKS && this.$normalizer.JSBNG__find(\".twitter-timeline-link\").wrapInner(\"\\u003Cb\\u003E\").addClass(\"pretty-link\")));\n            var h = this.getMaxLengthOffset(f);\n            ((((h >= 0)) && (this.htmlNormalizer.emphasizeText([h,MAX_OFFSET,]), this.$normalizer.JSBNG__find(\"em\").each(function() {\n                this.innerHTML = this.innerHTML.replace(TRAILING_SINGLE_SPACE_REGEX, \"\\u00a0\");\n            }))));\n            var i = this.htmlNormalizer.getHtml();\n            ((((i !== d)) && (this.htmlRich.setHtml(i), this.setSelectionIfFocused(e)))), this.prevHtml = i, this.prevSelectionOffset = e[0], this.updateCleanedTextAndOffset(f, e[0]);\n        }), this.getMaxLengthOffset = function(a) {\n            var b = this.getLength(a), c = this.attr.maxLength;\n            if (((b <= c))) {\n                return -1;\n            }\n        ;\n        ;\n            c += ((twitterText.getUnicodeTextLength(a) - b));\n            var d = [{\n                indices: [c,c,]\n            },];\n            return twitterText.modifyIndicesFromUnicodeToUTF16(a, d), d[0].indices[0];\n        }, this.setSelectionIfFocused = function(a) {\n            ((this.hasFocus() && this.htmlRich.setSelectionOffsets(a)));\n        }, this.selectPrevCharOnBackspace = function(a) {\n            if (((a.which == 8))) {\n                var b = this.htmlRich.getSelectionOffsets();\n                ((((((b && ((b[0] != MAX_OFFSET)))) && ((b.length == 1)))) && ((b[0] ? this.setSelectionIfFocused([((b[0] - 1)),b[0],]) : this.stopEvent(a)))));\n            }\n        ;\n        ;\n        }, this.emulateCommandArrow = function(a) {\n            if (((((a.metaKey && !a.shiftKey)) && ((((a.which == 37)) || ((a.which == 39))))))) {\n                var b = ((a.which == 37));\n                this.htmlRich.setSelectionOffsets([((b ? 0 : MAX_OFFSET)),]), this.$text.scrollTop(((b ? 0 : this.$text[0].scrollHeight))), this.stopEvent(a);\n            }\n        ;\n        ;\n        }, this.stopEvent = function(a) {\n            a.preventDefault(), a.stopPropagation();\n        }, this.saveUndoStateDeferred = function(a) {\n            ((((a.type != \"JSBNG__focus\")) && this.saveUndoState())), JSBNG__setTimeout(function() {\n                this.detectUpdatedText(), this.saveUndoState();\n            }.bind(this), 0);\n        }, this.saveEmptyUndoState = function() {\n            this.undoHistory = [[\"\",[0,],],], this.undoIndex = 0;\n        }, this.saveUndoState = function() {\n            if (this.condensed) {\n                return;\n            }\n        ;\n        ;\n            var a = this.htmlRich.getText(), b = ((this.htmlRich.getSelectionOffsets() || [a.length,])), c = this.undoHistory, d = c[this.undoIndex];\n            ((((!d || ((d[0] !== a)))) && c.splice(++this.undoIndex, c.length, [a,b,])));\n        }, this.isUndoKey = function(a) {\n            return ((this.isMac ? ((((((((((a.which == 90)) && a.metaKey)) && !a.shiftKey)) && !a.ctrlKey)) && !a.altKey)) : ((((((((a.which == 90)) && a.ctrlKey)) && !a.shiftKey)) && !a.altKey))));\n        }, this.emulateUndo = function(a) {\n            ((this.isUndoKey(a) && (this.stopEvent(a), this.saveUndoState(), ((((this.undoIndex > 0)) && this.setUndoState(this.undoHistory[--this.undoIndex]))))));\n        }, this.isRedoKey = function(a) {\n            return ((this.isMac ? ((((((((((a.which == 90)) && a.metaKey)) && a.shiftKey)) && !a.ctrlKey)) && !a.altKey)) : ((this.isWin ? ((((((((a.which == 89)) && a.ctrlKey)) && !a.shiftKey)) && !a.altKey)) : ((((((((a.which == 90)) && a.shiftKey)) && a.ctrlKey)) && !a.altKey))))));\n        }, this.emulateRedo = function(a) {\n            var b = this.undoHistory, c = this.undoIndex;\n            ((((((c < ((b.length - 1)))) && ((this.htmlRich.getText() !== b[c][0])))) && b.splice(((c + 1)), b.length))), ((this.isRedoKey(a) && (this.stopEvent(a), ((((c < ((b.length - 1)))) && this.setUndoState(b[++this.undoIndex]))))));\n        }, this.setUndoState = function(a) {\n            this.detectUpdatedText(!1, a[0]), this.htmlRich.setSelectionOffsets(a[1]), this.trigger(\"uiHideAutocomplete\");\n        }, this.handleKeyDown = function(a) {\n            (($.browser.msie && this.selectPrevCharOnBackspace(a))), (($.browser.mozilla && this.emulateCommandArrow(a))), this.emulateUndo(a), this.emulateRedo(a);\n        }, this.interceptPlainTextPaste = function(a) {\n            if (((a.originalEvent && a.originalEvent.JSBNG__clipboardData))) {\n                var b = a.originalEvent.JSBNG__clipboardData.getData(\"text\");\n                ((((b && JSBNG__document.execCommand(\"insertHTML\", !1, $(\"\\u003Cdiv\\u003E\").text(b).html()))) && a.preventDefault()));\n            }\n        ;\n        ;\n        }, this.clearSelectionOnBlur = function() {\n            ((window.JSBNG__getSelection && (this.previousSelection = this.htmlRich.getSelectionOffsets(), ((this.previousSelection && JSBNG__getSelection().removeAllRanges())))));\n        }, this.restoreSelectionOnFocus = function() {\n            ((this.previousSelection && (this.htmlRich.setSelectionOffsets(this.previousSelection), this.previousSelection = null)));\n        }, this.around(\"initTextNode\", function(a) {\n            this.$text = this.select(\"richSelector\");\n            if (!this.$text.length) {\n                return a();\n            }\n        ;\n        ;\n            this.isRich = !0, this.undoIndex = -1, this.undoHistory = [], this.htmlRich = htmlText(this.$text[0], $.browser), this.$normalizer = this.select(\"normalizerSelector\"), this.htmlNormalizer = htmlText(this.$normalizer[0], $.browser);\n            var b = JSBNG__navigator.platform;\n            this.isMac = ((b.indexOf(\"Mac\") != -1)), this.isWin = ((b.indexOf(\"Win\") != -1)), this.JSBNG__on(this.$text, \"click\", {\n                linksSelector: this.stopEvent\n            }), this.JSBNG__on(this.$text, \"keydown\", this.handleKeyDown), this.JSBNG__on(this.$text, \"cut paste drop focus\", this.saveUndoStateDeferred), this.JSBNG__on(this.$text, \"paste\", this.interceptPlainTextPaste), this.JSBNG__on(this.$text, \"JSBNG__blur\", this.clearSelectionOnBlur), this.JSBNG__on(this.$text, \"JSBNG__focus\", this.restoreSelectionOnFocus);\n        });\n    };\n;\n    var tweetHelper = require(\"app/utils/tweet_helper\"), twitterText = require(\"lib/twitter-text\"), htmlText = require(\"app/utils/html_text\");\n    module.exports = withRichEditor;\n    var INVALID_CHARS = /[\\uFFFE\\uFEFF\\uFFFF\\u202A\\u202B\\u202C\\u202D\\u202E\\x00]/g, RENDER_URLS_AS_PRETTY_LINKS = (($.browser.mozilla && ((parseInt($.browser.version, 10) < 2)))), TRAILING_SINGLE_SPACE_REGEX = / $/, MAX_OFFSET = Number.MAX_VALUE;\n});\ndefine(\"app/ui/with_upload_photo_affordance\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function uploadPhotoAffordance() {\n        this.defaultAttrs({\n            uploadPhotoHoverClass: \"upload-photo-hover\"\n        }), this.uploadPhotoHoverOn = function() {\n            this.$node.addClass(this.attr.uploadPhotoHoverClass);\n        }, this.uploadPhotoHoverOff = function() {\n            this.$node.removeClass(this.attr.uploadPhotoHoverClass);\n        }, this.after(\"initialize\", function() {\n            this.attr.uploadPhotoSelector = ((this.attr.uploadPhotoSelector || \".upload-photo\")), this.JSBNG__on(\"mouseover\", {\n                uploadPhotoSelector: this.uploadPhotoHoverOn\n            }), this.JSBNG__on(JSBNG__document, \"uiDragEnter\", this.uploadPhotoHoverOff), this.JSBNG__on(\"mouseout\", {\n                uploadPhotoSelector: this.uploadPhotoHoverOff\n            });\n        });\n    };\n;\n    module.exports = uploadPhotoAffordance;\n});\ndeferred(\"$lib/jquery.swfobject.js\", function() {\n    (function(a, b, c) {\n        function d(a, b) {\n            var c = ((((a[0] || 0)) - ((b[0] || 0))));\n            return ((((c > 0)) || ((((!c && ((a.length > 0)))) && d(a.slice(1), b.slice(1))))));\n        };\n    ;\n        function e(a) {\n            if (((typeof a != h))) {\n                return a;\n            }\n        ;\n        ;\n            var b = [], c = \"\";\n            {\n                var fin64keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin64i = (0);\n                var d;\n                for (; (fin64i < fin64keys.length); (fin64i++)) {\n                    ((d) = (fin64keys[fin64i]));\n                    {\n                        c = ((((typeof a[d] == h)) ? e(a[d]) : [d,((i ? encodeURI(a[d]) : a[d])),].join(\"=\"))), b.push(c);\n                    ;\n                    };\n                };\n            };\n        ;\n            return b.join(\"&\");\n        };\n    ;\n        function f(a) {\n            var b = [];\n            {\n                var fin65keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin65i = (0);\n                var c;\n                for (; (fin65i < fin65keys.length); (fin65i++)) {\n                    ((c) = (fin65keys[fin65i]));\n                    {\n                        ((a[c] && b.push([c,\"=\\\"\",a[c],\"\\\"\",].join(\"\"))));\n                    ;\n                    };\n                };\n            };\n        ;\n            return b.join(\" \");\n        };\n    ;\n        function g(a) {\n            var b = [];\n            {\n                var fin66keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin66i = (0);\n                var c;\n                for (; (fin66i < fin66keys.length); (fin66i++)) {\n                    ((c) = (fin66keys[fin66i]));\n                    {\n                        b.push([\"\\u003Cparam name=\\\"\",c,\"\\\" value=\\\"\",e(a[c]),\"\\\" /\\u003E\",].join(\"\"));\n                    ;\n                    };\n                };\n            };\n        ;\n            return b.join(\"\");\n        };\n    ;\n        var h = \"object\", i = !0;\n        try {\n            var j = ((c.description || function() {\n                return (new c(\"ShockwaveFlash.ShockwaveFlash\")).GetVariable(\"$version\");\n            }()));\n        } catch (k) {\n            j = \"Unavailable\";\n        };\n    ;\n        var l = ((j.match(/\\d+/g) || [0,]));\n        a[b] = {\n            available: ((l[0] > 0)),\n            activeX: ((c && !c.JSBNG__name)),\n            version: {\n                original: j,\n                array: l,\n                string: l.join(\".\"),\n                major: ((parseInt(l[0], 10) || 0)),\n                minor: ((parseInt(l[1], 10) || 0)),\n                release: ((parseInt(l[2], 10) || 0))\n            },\n            hasVersion: function(a) {\n                return a = ((/string|number/.test(typeof a) ? a.toString().split(\".\") : ((/object/.test(typeof a) ? [a.major,a.minor,] : ((a || [0,0,])))))), d(l, a);\n            },\n            encodeParams: !0,\n            expressInstall: \"expressInstall.swf\",\n            expressInstallIsActive: !1,\n            create: function(a) {\n                if (((((!a.swf || this.expressInstallIsActive)) || ((!this.available && !a.hasVersionFail))))) {\n                    return !1;\n                }\n            ;\n            ;\n                if (!this.hasVersion(((a.hasVersion || 1)))) {\n                    this.expressInstallIsActive = !0;\n                    if (((((typeof a.hasVersionFail == \"function\")) && !a.hasVersionFail.apply(a)))) {\n                        return !1;\n                    }\n                ;\n                ;\n                    a = {\n                        swf: ((a.expressInstall || this.expressInstall)),\n                        height: 137,\n                        width: 214,\n                        flashvars: {\n                            MMredirectURL: JSBNG__location.href,\n                            MMplayerType: ((this.activeX ? \"ActiveX\" : \"PlugIn\")),\n                            MMdoctitle: ((JSBNG__document.title.slice(0, 47) + \" - Flash Player Installation\"))\n                        }\n                    };\n                }\n            ;\n            ;\n                attrs = {\n                    data: a.swf,\n                    type: \"application/x-shockwave-flash\",\n                    id: ((a.id || ((\"flash_\" + Math.floor(((Math.JSBNG__random() * 999999999))))))),\n                    width: ((a.width || 320)),\n                    height: ((a.height || 180)),\n                    style: ((a.style || \"\"))\n                }, i = ((((typeof a.useEncode != \"undefined\")) ? a.useEncode : this.encodeParams)), a.movie = a.swf, a.wmode = ((a.wmode || \"opaque\")), delete a.fallback, delete a.hasVersion, delete a.hasVersionFail, delete a.height, delete a.id, delete a.swf, delete a.useEncode, delete a.width;\n                var b = JSBNG__document.createElement(\"div\");\n                return b.innerHTML = [\"\\u003Cobject \",f(attrs),\"\\u003E\",g(a),\"\\u003C/object\\u003E\",].join(\"\"), b.firstChild;\n            }\n        }, a.fn[b] = function(c) {\n            var d = this.JSBNG__find(h).andSelf().filter(h);\n            return ((/string|object/.test(typeof c) && this.each(function() {\n                var d = a(this), e;\n                c = ((((typeof c == h)) ? c : {\n                    swf: c\n                })), c.fallback = this;\n                if (e = a[b].create(c)) {\n                    d.children().remove(), d.html(e);\n                }\n            ;\n            ;\n            }))), ((((typeof c == \"function\")) && d.each(function() {\n                var d = this;\n                d.jsInteractionTimeoutMs = ((d.jsInteractionTimeoutMs || 0)), ((((d.jsInteractionTimeoutMs < 660)) && ((((d.clientWidth || d.clientHeight)) ? c.call(d) : JSBNG__setTimeout(function() {\n                    a(d)[b](c);\n                }, ((d.jsInteractionTimeoutMs + 66)))))));\n            }))), d;\n        };\n    })(jQuery, \"flash\", ((JSBNG__navigator.plugins[\"Shockwave Flash\"] || window.ActiveXObject)));\n});\ndefine(\"app/utils/image\", [\"module\",\"require\",\"exports\",\"$lib/jquery.swfobject.js\",], function(module, require, exports) {\n    require(\"$lib/jquery.swfobject.js\");\n    var image = {\n        photoHelperSwfPath: \"/t1/flash/PhotoHelper.swf\",\n        photoSelectorSwfPath: \"/t1/flash/PhotoSelector.swf\",\n        MAX_FILE_SIZE: 3145728,\n        validateFileName: function(a) {\n            return /(.*)\\.(jpg|jpeg|png|gif)/i.test(a);\n        },\n        validateImageSize: function(a, b) {\n            var c = ((a.size || a.fileSize)), b = ((b || this.MAX_FILE_SIZE));\n            return ((!c || ((c <= b))));\n        },\n        getFileName: function(a) {\n            if (((((a.indexOf(\"/\") == -1)) && ((a.indexOf(\"\\\\\") == -1))))) {\n                return a;\n            }\n        ;\n        ;\n            var b = a.match(/(?:.*)[\\/\\\\]([^\\/\\\\]+(?:\\.\\w+)?)$/);\n            return b[1];\n        },\n        loadPhotoHelperSwf: function(a, b, c, d, e) {\n            return a.flash({\n                swf: this.photoHelperSwfPath,\n                height: d,\n                width: e,\n                wmode: \"transparent\",\n                AllowScriptAccess: \"sameDomain\",\n                flashvars: {\n                    callbackName: b,\n                    errorCallbackName: c\n                }\n            }), a.JSBNG__find(\"object\");\n        },\n        loadPhotoSelectorSwf: function(a, b, c, d, e, f) {\n            return a.flash({\n                swf: this.photoSelectorSwfPath,\n                height: d,\n                width: e,\n                wmode: \"transparent\",\n                AllowScriptAccess: \"sameDomain\",\n                flashvars: {\n                    callbackName: b,\n                    errorCallbackName: c,\n                    buttonWidth: e,\n                    buttonHeight: d,\n                    maxSizeInBytes: f\n                }\n            }), a.JSBNG__find(\"object\");\n        },\n        hasFlash: function() {\n            try {\n                return (($.flash.available && $.flash.hasVersion(10)));\n            } catch (a) {\n                return !1;\n            };\n        ;\n        },\n        hasFileReader: function() {\n            return ((((((typeof JSBNG__FileReader == \"function\")) || ((typeof JSBNG__FileReader == \"object\")))) ? !0 : !1));\n        },\n        hasCanvas: function() {\n            var a = JSBNG__document.createElement(\"canvas\");\n            return ((!!a.getContext && !!a.getContext(\"2d\")));\n        },\n        supportsCropper: function() {\n            return ((this.hasCanvas() && ((this.hasFileReader() || this.hasFlash()))));\n        },\n        getFileHandle: function(a) {\n            return ((((a.files && a.files[0])) ? a.files[0] : !1));\n        },\n        shouldUseFlash: function() {\n            return ((!this.hasFileReader() && this.hasFlash()));\n        },\n        mode: function() {\n            return ((this.hasFileReader() ? \"html5\" : ((this.hasFlash() ? \"flash\" : \"html4\"))));\n        },\n        getDataUri: function(a, b) {\n            var c = ((\"data:image/jpeg;base64,\" + a));\n            return ((b && (c = ((((\"url(\" + c)) + \")\"))))), c;\n        },\n        getFileData: function(a, b, c) {\n            var d = new JSBNG__FileReader;\n            d.JSBNG__onload = function(b) {\n                var d = b.target.result;\n                c(a, d);\n            }, d.readAsDataURL(b);\n        }\n    };\n    module.exports = image;\n});\ndefine(\"app/utils/drag_drop_helper\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var dragDropHelper = {\n        hasFiles: function(a) {\n            var b = ((a.originalEvent || a)).dataTransfer;\n            return ((b && ((b.types.contains ? b.types.contains(\"Files\") : ((b.types.indexOf(\"Files\") >= 0))))));\n        },\n        onlyHandleEventsWithFiles: function(a) {\n            return function(b, c) {\n                if (dragDropHelper.hasFiles(b)) {\n                    return a.call(this, b, c);\n                }\n            ;\n            ;\n            };\n        }\n    };\n    module.exports = dragDropHelper;\n});\ndefine(\"app/ui/with_drop_events\", [\"module\",\"require\",\"exports\",\"app/utils/image\",\"app/utils/drag_drop_helper\",], function(module, require, exports) {\n    function withDropEvents() {\n        this.drop = function(a) {\n            a.preventDefault(), a.stopImmediatePropagation();\n            var b = image.getFileHandle(a.originalEvent.dataTransfer);\n            this.trigger(\"uiDrop\", {\n                file: b\n            }), this.trigger(\"uiDragEnd\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"drop\", dragDropHelper.onlyHandleEventsWithFiles(this.drop));\n        });\n    };\n;\n    var image = require(\"app/utils/image\"), dragDropHelper = require(\"app/utils/drag_drop_helper\");\n    module.exports = withDropEvents;\n});\ndefine(\"app/ui/with_droppable_image\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_drop_events\",\"app/utils/image\",], function(module, require, exports) {\n    function withDroppableImage() {\n        compose.mixin(this, [withDropEvents,]), this.triggerGotImageData = function(a, b) {\n            this.trigger(\"uiGotImageData\", {\n                JSBNG__name: a,\n                contents: b\n            });\n        }, this.captureImageData = function(a, b) {\n            var c = b.file;\n            image.getFileData(c.JSBNG__name, c, this.triggerGotImageData.bind(this));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiDrop\", this.captureImageData);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withDropEvents = require(\"app/ui/with_drop_events\"), image = require(\"app/utils/image\");\n    module.exports = withDroppableImage;\n});\ndefine(\"app/ui/tweet_box\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_character_counter\",\"app/utils/with_event_params\",\"app/utils/caret\",\"core/utils\",\"core/i18n\",\"app/utils/scribe_item_types\",\"app/ui/with_draft_tweets\",\"app/ui/with_text_polling\",\"app/ui/with_rtl_tweet_box\",\"app/ui/toolbar\",\"app/ui/with_rich_editor\",\"app/ui/with_upload_photo_affordance\",\"app/ui/with_droppable_image\",], function(module, require, exports) {\n    function tweetBox() {\n        var a = _(\"Compose new Tweet...\"), b = \"\";\n        this.defaultAttrs({\n            textSelector: \"textarea.tweet-box\",\n            shadowTextSelector: \".tweet-box-shadow\",\n            counterSelector: \"span.tweet-counter\",\n            toolbarSelector: \".js-toolbar\",\n            imageSelector: \".photo-selector\",\n            uploadPhotoSelector: \".photo-selector\",\n            imageBtnSelector: \".photo-selector .btn\",\n            focusClass: \"JSBNG__focus\",\n            fileInputSelector: \".file-input\",\n            thumbContainerSelector: \".thumbnail-container\",\n            tweetActionSelector: \".tweet-action\",\n            iframeSelector: \".tweet-post-iframe\",\n            placeIdSelector: \"input[name=place_id]\",\n            cursorPosition: undefined,\n            inReplyToTweetData: {\n            },\n            inReplyToStatusId: undefined,\n            impressionId: undefined,\n            disclosureType: undefined,\n            modal: !1,\n            condensable: !1,\n            suppressFlashMessage: !1,\n            customData: {\n            },\n            position: undefined,\n            itemType: \"tweet\",\n            component: undefined,\n            eventParams: \"\"\n        }), this.dmRegex = /^\\s*(?:d|m|dm)\\s+[@＠]?(\\S+)\\s*(.*)/i, this.validUserRegex = /^(\\w{1,20})$/, this.dmMode = !1, this.hasMedia = !1, this.condensed = !1, this.sendTweet = function(a) {\n            ((a && a.preventDefault())), this.detectUpdatedText(), this.$node.attr(\"id\", this.getTweetboxId());\n            var b = {\n                JSBNG__status: this.val(),\n                place_id: this.select(\"placeIdSelector\").val(),\n                in_reply_to_status_id: this.attr.inReplyToStatusId,\n                impression_id: this.attr.impressionId,\n                earned: ((this.attr.disclosureType ? ((this.attr.disclosureType == \"earned\")) : undefined))\n            }, c = ((this.hasMedia ? \"uiSend{{type}}WithMedia\" : \"uiSend{{type}}\"));\n            this.trigger(c, {\n                tweetboxId: this.getTweetboxId(),\n                tweetData: b\n            }), this.$node.addClass(\"tweeting\"), this.disable();\n        }, this.getTweetboxId = function() {\n            return ((this.tweetboxId || (this.tweetboxId = ((\"swift_tweetbox_\" + +(new JSBNG__Date)))))), this.tweetboxId;\n        }, this.overrideTweetBoxOptions = function(a, b) {\n            this.attr.inReplyToTweetData = b, ((b.id && (this.attr.inReplyToStatusId = b.id))), ((b.impressionId && (this.attr.impressionId = b.impressionId))), ((b.disclosureType && (this.attr.disclosureType = b.disclosureType))), ((b.defaultText && (this.attr.defaultText = b.defaultText))), ((b.customData && (this.attr.customData = b.customData))), ((b.itemType && (this.attr.itemType = b.itemType))), ((((b.scribeContext && b.scribeContext.component)) && (this.attr.component = b.scribeContext.component))), ((((b.position !== undefined)) && (this.attr.position = b.position))), ((((b.cursorPosition !== undefined)) && (this.attr.cursorPosition = b.cursorPosition)));\n        }, this.resetOverriddenOptions = function(a, b) {\n            delete this.attr.defaultText, this.attr.inReplyToTweetData = this.defaults.inReplyToTweetData, this.attr.inReplyToStatusId = this.defaults.inReplyToStatusId, this.attr.impressionId = this.defaults.impressionId, this.attr.disclosureType = this.defaults.disclosureType, this.attr.defaultText = this.getDefaultText(), this.attr.cursorPosition = this.defaults.cursorPosition, this.attr.customData = this.defaults.customData, this.attr.position = this.defaults.position, this.attr.itemType = this.defaults.itemType, this.attr.component = this.attr.component;\n        }, this.updateTweetTitleThenButton = function() {\n            this.updateTitle(), this.updateTweetButton();\n        }, this.updateTweetButton = function() {\n            var a = !1, b = this.val().trim();\n            ((this.hasMedia ? a = !0 : a = ((b && ((b !== this.attr.defaultText.trim()))))));\n            if (((this.maxReached() || this.$node.hasClass(\"tweeting\")))) {\n                a = !1;\n            }\n        ;\n        ;\n            ((((this.dmMode && ((!this.dmText || !this.dmUsername.match(this.validUserRegex))))) && (a = !1))), ((a ? this.enable() : this.disable()));\n        }, this.updateTweetButtonText = function(a) {\n            this.select(\"tweetActionSelector\").text(a);\n        }, this.updateTitle = function() {\n            var a = this.val().match(this.dmRegex), b = ((a && a[1]));\n            this.dmText = ((a && a[2])), ((((a && ((!this.dmMode || ((this.dmMode && ((this.dmUsername != b)))))))) ? (this.dmMode = !0, this.dmUsername = b, this.trigger(\"uiDialogUpdateTitle\", {\n                title: _(\"Message @{{username}}\", {\n                    username: b\n                })\n            }), this.updateTweetButtonText(_(\"Send message\"))) : ((((this.dmMode && !a)) && (this.dmMode = !1, this.dmUsername = undefined, this.trigger(\"uiDialogUpdateTitle\", {\n                title: _(\"What's happening\")\n            }), this.updateTweetButtonText(_(\"Tweet\")))))));\n        }, this.tweetSent = function(a, b) {\n            var c = ((b.tweetboxId || b.sourceEventData.tweetboxId));\n            if (((c != this.getTweetboxId()))) {\n                return;\n            }\n        ;\n        ;\n            b.customData = this.attr.customData, ((b.message && this.trigger(((b.unusual ? \"uiShowError\" : \"uiShowMessage\")), {\n                message: b.message\n            })));\n            if (((this.attr.eventParams.type == \"Tweet\"))) {\n                var d = \"uiTweetboxTweetSuccess\";\n                if (((this.attr.inReplyToStatusId || ((this.val().indexOf(\"@\") == 0))))) {\n                    if (((this.attr.inReplyToTweetData || {\n                    })).replyLinkClick) {\n                        var e = utils.merge({\n                        }, this.attr.inReplyToTweetData);\n                        ((e.scribeContext && (e.scribeContext.element = \"\"))), this.trigger(\"uiReplyButtonTweetSuccess\", e);\n                    }\n                ;\n                ;\n                    d = \"uiTweetboxReplySuccess\";\n                }\n                 else ((this.val().match(this.dmRegex) && (d = \"uiTweetboxDMSuccess\")));\n            ;\n            ;\n                this.trigger(d, {\n                    scribeData: {\n                        item_ids: [b.tweet_id,]\n                    }\n                });\n            }\n        ;\n        ;\n            this.$node.removeClass(\"tweeting\"), this.trigger(\"ui{{type}}Sent\", b), this.reset(), this.condense();\n        }, this.scribeDataForReply = function() {\n            var a = {\n                id: this.attr.inReplyToStatusId,\n                item_type: scribeItemTypes.tweet\n            }, b = {\n            };\n            ((this.attr.impressionId && (a.token = this.attr.impressionId, b.promoted = !0)));\n            if (((((this.attr.position == 0)) || this.attr.position))) {\n                a.position = this.attr.position;\n            }\n        ;\n        ;\n            return b.items = [a,], {\n                scribeData: b,\n                scribeContext: {\n                    component: this.attr.component,\n                    element: \"\"\n                }\n            };\n        }, this.tweetError = function(a, b) {\n            var c = ((b.tweetboxId || b.sourceEventData.tweetboxId));\n            if (((c != this.getTweetboxId()))) {\n                return;\n            }\n        ;\n        ;\n            ((!this.attr.suppressFlashMessage && this.trigger(\"uiShowError\", {\n                message: ((b.error || b.message))\n            }))), this.$node.removeClass(\"tweeting\"), this.enable(), ((((this.attr.eventParams.type == \"Tweet\")) && this.trigger(\"uiTweetboxTweetError\")));\n        }, this.detectUpdatedText = function(a, b) {\n            ((((b === undefined)) ? b = this.$text.val() : this.$text.val(b)));\n            if (((((b !== this.prevText)) || a))) {\n                this.prevText = b, b = this.cleanRtlText(b), this.updateCleanedTextAndOffset(b, caret.getPosition(this.$text[0]));\n            }\n        ;\n        ;\n        }, this.updateCleanedTextAndOffset = function(a, b) {\n            this.cleanedText = a, this.select(\"shadowTextSelector\").val(a), this.trigger(\"uiTextChanged\", {\n                text: a,\n                position: b,\n                condensed: this.condensed\n            }), this.updateTweetTitleThenButton();\n        }, this.showPreview = function(a, b) {\n            this.$node.addClass(\"has-preview\"), ((b.imageData && this.$node.addClass(\"has-thumbnail\"))), this.hasMedia = !0, this.detectUpdatedText(!0);\n        }, this.hidePreview = function(a, b) {\n            this.$node.removeClass(\"has-preview has-thumbnail\"), this.hasMedia = !1, this.detectUpdatedText(!0);\n        }, this.enable = function() {\n            this.select(\"tweetActionSelector\").removeClass(\"disabled\").attr(\"disabled\", !1);\n        }, this.disable = function() {\n            this.select(\"tweetActionSelector\").addClass(\"disabled\").attr(\"disabled\", !0);\n        }, this.reset = function(a) {\n            this.JSBNG__focus(), ((this.freezeTweetText || this.resetTweetText())), this.setCursorPosition(), this.trigger(\"ui{{type}}BoxHidePreview\"), this.$text.css(\"height\", \"\"), this.$node.JSBNG__find(\"input[type=hidden]\").val(\"\");\n        }, this.val = function(a) {\n            if (((a == undefined))) {\n                return ((this.cleanedText || \"\"));\n            }\n        ;\n        ;\n            this.detectUpdatedText(!1, a);\n        }, this.setCursorPosition = function(a) {\n            ((((a === undefined)) && (a = this.attr.cursorPosition))), ((((a === undefined)) && (a = this.$text.val().length))), caret.setPosition(this.$text.get(0), a);\n        }, this.JSBNG__focus = function() {\n            ((this.hasFocus() || this.$text.JSBNG__focus()));\n        }, this.expand = function() {\n            this.$node.removeClass(\"condensed\"), ((this.condensed && (this.condensed = !1, this.trigger(\"uiTweetBoxExpanded\"), this.trigger(\"uiPrepareTweetBox\"))));\n        }, this.forceExpand = function() {\n            this.condensed = !0, this.expand(), this.saveEmptyUndoState();\n        }, this.condense = function() {\n            ((((!this.condensed && this.attr.condensable)) && (this.$node.addClass(\"condensed\"), this.condensed = !0, this.resetTweetText(), this.$text.JSBNG__blur(), this.trigger(\"uiTweetBoxCondensed\"))));\n        }, this.condenseEmptyTweet = function() {\n            this.detectUpdatedText();\n            var a = this.val().trim();\n            this.trigger(\"uiHideAutocomplete\"), ((((((((a == this.attr.defaultText.trim())) || ((a == \"\")))) && !this.hasMedia)) && this.condense()));\n        }, this.condenseOnMouseDown = function(a) {\n            ((this.condensed || (($.contains(this.node, a.target) ? this.blockCondense = !0 : this.condenseEmptyTweet()))));\n        }, this.condenseOnBlur = function(a) {\n            if (this.blockCondense) {\n                this.blockCondense = !1;\n                return;\n            }\n        ;\n        ;\n            this.condenseEmptyTweet();\n        }, this.hasFocus = function() {\n            return ((JSBNG__document.activeElement === this.$text[0]));\n        }, this.prepareTweetBox = function() {\n            this.reset();\n        }, this.resetTweetText = function() {\n            this.val(((this.condensed ? this.attr.condensedText : this.attr.defaultText)));\n        }, this.getDefaultText = function() {\n            return ((((typeof this.attr.defaultText != \"undefined\")) ? this.attr.defaultText : this.getAttrOrElse(\"data-default-text\", b)));\n        }, this.getCondensedText = function() {\n            return ((((typeof this.attr.condensedText != \"undefined\")) ? this.attr.condensedText : this.getAttrOrElse(\"data-condensed-text\", a)));\n        }, this.changeTextAndPosition = function(a, b) {\n            this.val(b.text), this.setCursorPosition(b.position);\n        }, this.getAttrOrElse = function(a, b) {\n            return ((((typeof this.$node.attr(a) == \"undefined\")) ? b : this.$node.attr(a)));\n        }, this.toggleFocusStyle = function(a) {\n            this.select(\"imageBtnSelector\").toggleClass(this.attr.focusClass);\n        }, this.initTextNode = function() {\n            this.$text = this.select(\"textSelector\");\n        }, this.after(\"initialize\", function() {\n            this.attr.defaultText = this.getDefaultText(), this.attr.condensedText = this.getCondensedText(), utils.push(this.attr, {\n                eventData: {\n                    scribeContext: {\n                        element: \"tweet_box\"\n                    }\n                }\n            }, !1), this.initTextNode(), this.JSBNG__on(this.select(\"tweetActionSelector\"), \"click\", this.sendTweet), this.JSBNG__on(JSBNG__document, \"data{{type}}Success\", this.tweetSent), this.JSBNG__on(JSBNG__document, \"data{{type}}Error\", this.tweetError), this.JSBNG__on(this.$text, \"dragover\", this.JSBNG__focus), this.JSBNG__on(\"ui{{type}}BoxShowPreview\", this.showPreview), this.JSBNG__on(\"ui{{type}}BoxHidePreview\", this.hidePreview), this.JSBNG__on(\"ui{{type}}BoxReset\", this.reset), this.JSBNG__on(\"uiPrepare{{type}}Box\", this.prepareTweetBox), this.JSBNG__on(\"uiExpandFocus\", this.JSBNG__focus), this.JSBNG__on(\"uiChangeTextAndPosition\", this.changeTextAndPosition), this.JSBNG__on(\"focusin\", {\n                fileInputSelector: this.toggleFocusStyle\n            }), this.JSBNG__on(\"focusout\", {\n                fileInputSelector: this.toggleFocusStyle\n            }), Toolbar.attachTo(this.select(\"toolbarSelector\"), {\n                buttonsSelector: \".file-input, .geo-picker-btn, .tweet-action\"\n            }), ((this.attr.modal && (this.JSBNG__on(JSBNG__document, \"uiOverride{{type}}BoxOptions\", this.overrideTweetBoxOptions), this.JSBNG__on(\"uiDialogClosed\", this.resetOverriddenOptions)))), this.initDraftTweets();\n            var a = this.hasFocus();\n            ((this.attr.condensable && (this.JSBNG__on(this.$text, \"JSBNG__focus\", this.expand), this.JSBNG__on(this.$text, \"JSBNG__blur\", this.condenseOnBlur), this.JSBNG__on(JSBNG__document, \"mousedown\", this.condenseOnMouseDown), ((a || ((this.hasDraftTweet() ? this.forceExpand() : this.condense()))))))), ((a && (this.freezeTweetText = !0, this.forceExpand(), this.freezeTweetText = !1)));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withCounter = require(\"app/ui/with_character_counter\"), withEventParams = require(\"app/utils/with_event_params\"), caret = require(\"app/utils/caret\"), utils = require(\"core/utils\"), _ = require(\"core/i18n\"), scribeItemTypes = require(\"app/utils/scribe_item_types\"), withDraftTweets = require(\"app/ui/with_draft_tweets\"), withTextPolling = require(\"app/ui/with_text_polling\"), withRTL = require(\"app/ui/with_rtl_tweet_box\"), Toolbar = require(\"app/ui/toolbar\"), withRichEditor = require(\"app/ui/with_rich_editor\"), withUploadPhotoAffordance = require(\"app/ui/with_upload_photo_affordance\"), withDroppableImage = require(\"app/ui/with_droppable_image\"), TweetBox = defineComponent(tweetBox, withCounter, withEventParams, withTextPolling, withRTL, withDraftTweets, withRichEditor, withDroppableImage, withUploadPhotoAffordance);\n    TweetBox.caret = caret, module.exports = TweetBox;\n});\ndefine(\"app/utils/image_thumbnail\", [\"module\",\"require\",\"exports\",\"app/utils/image\",], function(module, require, exports) {\n    var image = require(\"app/utils/image\"), imageThumbnail = {\n        createThumbnail: function(a, b, c) {\n            var d = new JSBNG__Image;\n            d.JSBNG__onload = function() {\n                c(a, d, d.height, d.width);\n            }, d.src = image.getDataUri(b);\n        },\n        getThumbnailOffset: function(a, b, c) {\n            var d;\n            if (((((((b == a)) && ((b >= c)))) && ((a >= c))))) {\n                return {\n                    position: \"absolute\",\n                    height: c,\n                    width: c,\n                    left: 0,\n                    JSBNG__top: 0\n                };\n            }\n        ;\n        ;\n            if (((((a < c)) || ((b < c))))) {\n                d = {\n                    position: \"absolute\",\n                    height: a,\n                    width: b,\n                    JSBNG__top: ((((c - a)) / 2)),\n                    left: ((((c - b)) / 2))\n                };\n            }\n             else {\n                if (((b > a))) {\n                    var e = ((((c / a)) * b));\n                    d = {\n                        position: \"absolute\",\n                        height: c,\n                        width: e,\n                        left: ((-((e - c)) / 2)),\n                        JSBNG__top: 0\n                    };\n                }\n                 else if (((a > b))) {\n                    var f = ((((c / b)) * a));\n                    d = {\n                        position: \"absolute\",\n                        height: f,\n                        width: c,\n                        JSBNG__top: ((-((f - c)) / 2)),\n                        left: 0\n                    };\n                }\n                \n            ;\n            }\n        ;\n        ;\n            return d;\n        }\n    };\n    module.exports = imageThumbnail;\n});\ndefine(\"app/ui/tweet_box_thumbnails\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/utils/image_thumbnail\",], function(module, require, exports) {\n    function tweetBoxThumbnails() {\n        this.defaults = {\n            thumbSelector: \".preview\",\n            thumbImageSelector: \".preview img\",\n            filenameSelector: \".preview .filename\",\n            dismissSelector: \".dismiss\",\n            tweetBoxSelector: \".tweet-form\"\n        }, this.showPreview = function(a, b) {\n            ((b.imageData && imageThumbnail.createThumbnail(b.fileName, b.imageData, this.gotThumbnail.bind(this)))), this.select(\"filenameSelector\").text(b.fileName);\n        }, this.hidePreview = function() {\n            this.select(\"filenameSelector\").empty(), this.select(\"thumbImageSelector\").remove();\n        }, this.gotThumbnail = function(a, b, c, d) {\n            var e = imageThumbnail.getThumbnailOffset(c, d, 48);\n            $(b).css(e), this.select(\"thumbSelector\").append($(b));\n        }, this.removeImage = function() {\n            this.hidePreview(), this.trigger(\"uiTweetBoxRemoveImage\"), this.trigger(\"uiImagePickerRemove\");\n        }, this.after(\"initialize\", function() {\n            utils.push(this.attr, {\n                eventData: {\n                    scribeContext: {\n                        element: \"image_picker\"\n                    }\n                }\n            }, !1);\n            var a = this.$node.closest(this.attr.tweetBoxSelector);\n            this.JSBNG__on(a, \"uiTweetBoxShowPreview\", this.showPreview), this.JSBNG__on(a, \"uiTweetBoxHidePreview\", this.hidePreview), this.JSBNG__on(this.select(\"dismissSelector\"), \"click\", this.removeImage);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), imageThumbnail = require(\"app/utils/image_thumbnail\"), TweetBoxThumbnails = defineComponent(tweetBoxThumbnails);\n    module.exports = TweetBoxThumbnails;\n});\ndefine(\"app/utils/image_resize\", [\"module\",\"require\",\"exports\",\"app/utils/image\",], function(module, require, exports) {\n    var image = require(\"app/utils/image\"), imageResize = {\n        resize: function(a, b, c, d) {\n            if (!image.hasCanvas()) {\n                return d(a, b.split(\";base64,\")[1]);\n            }\n        ;\n        ;\n            var e = new JSBNG__Image, f = JSBNG__document.createElement(\"canvas\"), g = f.getContext(\"2d\");\n            e.JSBNG__onload = function() {\n                if (((((e.width == 0)) || ((e.height == 0))))) {\n                    d(a, !1);\n                    return;\n                }\n            ;\n            ;\n                if (((((e.width < c)) && ((e.height < c))))) {\n                    d(a, b.split(\";base64,\")[1]);\n                    return;\n                }\n            ;\n            ;\n                var h, i;\n                ((((e.width > e.height)) ? (h = c, i = ((((e.height / e.width)) * c))) : (i = c, h = ((((e.width / e.height)) * c))))), f.width = h, f.height = i, g.drawImage(e, 0, 0, h, i);\n                var j = f.toDataURL(\"image/jpeg\");\n                d(a, j.split(\"data:image/jpeg;base64,\")[1]);\n            }, e.JSBNG__onerror = function() {\n                d(a, !1);\n            }, e.src = b;\n        }\n    };\n    module.exports = imageResize;\n});\ndefine(\"app/ui/with_image_selection\", [\"module\",\"require\",\"exports\",\"app/utils/image\",\"app/utils/image_resize\",], function(module, require, exports) {\n    function withImageSelection() {\n        this.resize = imageResize.resize.bind(image), this.getFileData = image.getFileData.bind(image), this.getFileHandle = image.getFileHandle.bind(image), this.getFileName = image.getFileName.bind(image), this.validateFileName = image.validateFileName.bind(image), this.validateImageSize = image.validateImageSize.bind(image), this.defaultAttrs({\n            swfSelector: \".swf-container\",\n            fileNameSelector: \"input.file-name\",\n            fileDataSelector: \"input.file-data\",\n            fileSelector: \"input.file-input\",\n            buttonSelector: \".btn\",\n            fileNameString: \"media_file_name\",\n            fileDataString: \"media_data[]\",\n            fileInputString: \"media[]\",\n            uploadType: \"\",\n            maxSizeInBytes: 3145728\n        }), this.validateImage = function(a, b) {\n            return ((this.validateFileName(a) ? ((((b && !this.validateImageSize(b, this.maxSizeInBytes))) ? (this.addFileError(\"tooLarge\"), !1) : !0)) : (this.addFileError(\"notImage\"), !1)));\n        }, this.imageSelected = function(a) {\n            var b = this.select(\"fileSelector\").get(0), c = this.getFileName(b.value), d = this.getFileHandle(b);\n            if (!this.validateImage(c, d)) {\n                return;\n            }\n        ;\n        ;\n            this.gotFileHandle(c, d);\n        }, this.gotFileHandle = function(a, b) {\n            ((((this.mode() == \"html5\")) ? this.getFileData(a, b, this.gotImageData.bind(this)) : this.gotFileInput(a)));\n        }, this.reset = function() {\n            this.resetInput(), this.select(\"fileDataSelector\").replaceWith(\"\\u003Cinput type=\\\"hidden\\\" name=\\\"media_data_empty\\\" class=\\\"file-data\\\"\\u003E\"), this.trigger(\"uiTweetBoxHidePreview\");\n        }, this.gotFlashImageData = function(a, b, c) {\n            if (!this.validateFileName(a)) {\n                this.addFileError(\"notImage\");\n                return;\n            }\n        ;\n        ;\n            this.showPreview({\n                imageData: c,\n                fileName: a\n            }), this.trigger(\"uiImagePickerAdd\", {\n                message: \"flash\"\n            }), this.readyFileData(b), this.trigger(\"uiImagePickerFileReady\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.gotFlashImageError = function(a, b) {\n            this.addFileError(a);\n        }, this.gotResizedImageData = function(a, b) {\n            if (!b) {\n                this.addFileError(\"notImage\");\n                return;\n            }\n        ;\n        ;\n            this.showPreview({\n                imageData: b,\n                fileName: a\n            }), this.trigger(\"uiImagePickerAdd\", {\n                message: \"html5\"\n            });\n            var c = b.split(\",\");\n            ((((c.length > 1)) && (b = c[1]))), this.readyFileData(b), this.trigger(\"uiImagePickerFileReady\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.gotFileInput = function(a) {\n            this.showPreview({\n                fileName: a\n            }), this.trigger(\"uiImagePickerAdd\", {\n                message: \"html4\"\n            }), this.readyFileInput(), this.trigger(\"uiImagePickerFileReady\", {\n                uploadType: this.attr.uploadType\n            });\n        }, this.readyFileInput = function() {\n            this.select(\"fileSelector\").attr(\"JSBNG__name\", this.attr.fileInputString);\n        }, this.readyFileData = function(a) {\n            this.select(\"fileDataSelector\").attr(\"JSBNG__name\", this.attr.fileDataString), this.select(\"fileDataSelector\").attr(\"value\", a), this.resetInput();\n        }, this.resetInput = function() {\n            this.select(\"fileSelector\").replaceWith(\"\\u003Cinput type=\\\"file\\\" name=\\\"media_empty\\\" class=\\\"file-input\\\" tabindex=\\\"-1\\\"\\u003E\");\n        }, this.showPreview = function(a) {\n            this.trigger(\"uiTweetBoxShowPreview\", a);\n        }, this.setupFlash = function() {\n            var a = ((\"swift_tweetbox_callback_\" + +(new JSBNG__Date))), b = ((\"swift_tweetbox_error_callback_\" + +(new JSBNG__Date)));\n            window[a] = this.gotFlashImageData.bind(this), window[b] = this.gotFlashImageError.bind(this), JSBNG__setTimeout(function() {\n                this.loadSwf(a, b);\n            }.bind(this), 500);\n        }, this.mode = function() {\n            return ((this.attr.forceHTML5FileUploader && (this._mode = \"html5\"))), this._mode = ((this._mode || image.mode())), this._mode;\n        }, this.setup = function() {\n            ((((this.mode() == \"flash\")) && this.setupFlash())), this.select(\"fileNameSelector\").attr(\"JSBNG__name\", this.attr.fileNameString), this.select(\"fileDataSelector\").attr(\"JSBNG__name\", this.attr.fileDataString), this.select(\"fileSelector\").attr(\"JSBNG__name\", this.attr.fileInputString);\n        }, this.after(\"initialize\", function() {\n            this.setup(), this.JSBNG__on(\"change\", this.imageSelected);\n        });\n    };\n;\n    var image = require(\"app/utils/image\"), imageResize = require(\"app/utils/image_resize\");\n    module.exports = withImageSelection;\n});\ndefine(\"app/ui/image_selector\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/image\",\"app/ui/with_image_selection\",\"core/i18n\",], function(module, require, exports) {\n    function imageSelector() {\n        this.defaults = {\n            swfHeight: 30,\n            swfWidth: 42,\n            tweetBoxSelector: \".tweet-form\",\n            photoButtonSelector: \".file-input\"\n        }, this.resetAndHidePreview = function() {\n            this.reset(), this.trigger(\"uiTweetBoxHidePreview\");\n        }, this.disable = function() {\n            this.$node.addClass(\"disabled\"), this.select(\"buttonSelector\").attr(\"disabled\", !0).addClass(\"active\");\n        }, this.enable = function() {\n            this.$node.removeClass(\"disabled\"), this.select(\"buttonSelector\").attr(\"disabled\", !1).removeClass(\"active\");\n        }, this.gotImageData = function(a, b) {\n            this.resize(a, b, 2048, this.gotResizedImageData.bind(this));\n        }, this.interceptGotImageData = function(a, b) {\n            this.gotImageData(b.JSBNG__name, b.contents);\n        }, this.addFileError = function(a) {\n            ((((a == \"tooLarge\")) ? this.trigger(\"uiShowError\", {\n                message: _(\"The file you selected is greater than the 3MB limit.\")\n            }) : ((((((a == \"notImage\")) || ((a == \"ioError\")))) && this.trigger(\"uiShowError\", {\n                message: _(\"You did not select an image.\")\n            }))))), this.trigger(\"uiImagePickerError\", {\n                message: a\n            }), this.reset();\n        }, this.loadSwf = function(a, b) {\n            image.loadPhotoHelperSwf(this.select(\"swfSelector\"), a, b, this.attr.swfHeight, this.attr.swfWidth);\n        }, this.imageSelectorClicked = function(a, b) {\n            this.trigger(\"uiImagePickerClick\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(this.attr.photoButtonSelector, \"click\", this.imageSelectorClicked);\n            var a = this.$node.closest(this.attr.tweetBoxSelector);\n            this.JSBNG__on(a, \"uiTweetBoxHidePreview\", this.enable), this.JSBNG__on(a, \"uiTweetBoxShowPreview\", this.disable), this.JSBNG__on(a, \"uiTweetBoxRemoveImage\", this.resetAndHidePreview), this.JSBNG__on(a, \"uiGotImageData\", this.interceptGotImageData);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), image = require(\"app/utils/image\"), withImageSelection = require(\"app/ui/with_image_selection\"), _ = require(\"core/i18n\"), ImageSelector = defineComponent(imageSelector, withImageSelection);\n    module.exports = ImageSelector;\n});\ndefine(\"app/ui/typeahead/accounts_renderer\", [\"module\",\"require\",\"exports\",\"core/i18n\",\"core/component\",], function(module, require, exports) {\n    function accountsRenderer() {\n        this.defaultAttrs({\n            accountsListSelector: \".js-typeahead-accounts\",\n            accountsItemSelector: \".typeahead-account-item\",\n            accountsShortcutSelector: \".typeahead-accounts-shortcut\",\n            accountsShortcutShow: !1,\n            datasources: [\"accounts\",],\n            socialContextMapping: {\n                FOLLOWING: 1,\n                FOLLOWS: 8\n            }\n        }), this.renderAccounts = function(a, b) {\n            this.$accountsList.JSBNG__find(this.attr.accountsItemSelector).remove();\n            var c = [];\n            this.attr.datasources.forEach(function(a) {\n                c = c.concat(((b.suggestions[a] || [])));\n            });\n            if (!c.length) {\n                this.clearAccounts();\n                return;\n            }\n        ;\n        ;\n            this.updateShortcut(b.query), c.forEach(function(a) {\n                var b = this.$accountItemTemplate.clone(!1);\n                b.attr(\"data-user-id\", a.id), b.attr(\"data-user-screenname\", a.screen_name), b.data(\"item\", a);\n                var c = b.JSBNG__find(\"a\");\n                c.attr(\"href\", ((\"/\" + a.screen_name))), c.attr(\"data-search-query\", a.id), c.JSBNG__find(\".avatar\").attr(\"src\", this.getAvatar(a)), c.JSBNG__find(\".fullname\").text(a.JSBNG__name), c.JSBNG__find(\".username b\").text(a.screen_name), ((a.verified && c.JSBNG__find(\".js-verified\").removeClass(\"hidden\")));\n                if (this.attr.deciders.showDebugInfo) {\n                    var d = !!a.rounded_graph_weight;\n                    c.attr(\"title\", ((((((d ? \"local\" : \"remote\")) + \" user, weight/score: \")) + ((d ? a.rounded_graph_weight : a.rounded_score)))));\n                }\n            ;\n            ;\n                if (((((a.social_proof !== 0)) && this.attr.deciders.showSocialContext))) {\n                    var e = c.JSBNG__find(\".typeahead-social-context\"), f = this.getSocialContext(a);\n                    ((f && (e.text(f), c.addClass(\"has-social-context\"))));\n                }\n            ;\n            ;\n                b.insertBefore(this.$accountsShortcut);\n            }, this), this.$accountsList.addClass(\"has-results\"), this.$accountsList.show();\n        }, this.getAvatar = function(a) {\n            var b = a.profile_image_url_https, c = this.attr.deciders.showSocialContext;\n            return ((b && (b = b.replace(/^https?:/, \"\"), b = ((c ? b : b.replace(/_normal(\\..*)?$/i, \"_mini$1\")))))), b;\n        }, this.isMutualFollow = function(a) {\n            return ((this.currentUserFollowsAccount(a) && this.accountFollowsCurrentUser(a)));\n        }, this.currentUserFollowsAccount = function(a) {\n            var b = this.attr.socialContextMapping.FOLLOWING;\n            return !!((a & b));\n        }, this.accountFollowsCurrentUser = function(a) {\n            var b = this.attr.socialContextMapping.FOLLOWS;\n            return !!((a & b));\n        }, this.getSocialContext = function(a) {\n            var b = a.social_proof;\n            return ((this.isMutualFollow(b) ? _(\"You follow each other\") : ((this.currentUserFollowsAccount(b) ? _(\"Following\") : ((this.accountFollowsCurrentUser(b) ? _(\"Follows you\") : ((a.first_connecting_user_name ? ((((a.connecting_user_count > 1)) ? _(\"Followed by {{user}} and {{number}} others\", {\n                user: a.first_connecting_user_name,\n                number: a.connecting_user_count\n            }) : _(\"Followed by {{user}}\", {\n                user: a.first_connecting_user_name\n            }))) : !1))))))));\n        }, this.updateShortcut = function(a) {\n            this.$accountsShortcut.toggle(this.attr.accountsShortcutShow);\n            var b = this.$accountsShortcut.JSBNG__find(\"a\");\n            b.attr(\"href\", ((\"/search/users?q=\" + encodeURIComponent(a)))), b.attr(\"data-search-query\", a), a = $(\"\\u003Cdiv/\\u003E\").text(a).html(), b.html(_(\"Search all people for \\u003Cstrong\\u003E{{query}}\\u003C/strong\\u003E\", {\n                query: a\n            }));\n        }, this.clearAccounts = function() {\n            this.$accountsList.removeClass(\"has-results\"), this.$accountsList.hide();\n        }, this.after(\"initialize\", function() {\n            this.$accountsList = this.select(\"accountsListSelector\"), this.$accountsShortcut = this.select(\"accountsShortcutSelector\"), this.$accountItemTemplate = this.select(\"accountsItemSelector\").clone(!1), this.$accountsList.hide(), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderAccounts);\n        });\n    };\n;\n    var _ = require(\"core/i18n\"), defineComponent = require(\"core/component\");\n    module.exports = defineComponent(accountsRenderer);\n});\ndefine(\"app/ui/typeahead/saved_searches_renderer\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function savedSearchesRenderer() {\n        this.defaultAttrs({\n            savedSearchesListSelector: \".saved-searches-list\",\n            savedSearchesSelector: \".saved-searches-list\",\n            savedSearchesItemSelector: \".typeahead-saved-search-item\",\n            savedSearchesTitleSelector: \".saved-searches-title\",\n            datasources: [\"savedSearches\",]\n        }), this.renderSavedSearches = function(a, b) {\n            this.$savedSearchesList.empty();\n            var c = [];\n            this.attr.datasources.forEach(function(a) {\n                c = c.concat(((b.suggestions[a] || [])));\n            }), c.forEach(function(a) {\n                var b = this.$savedSearchItemTemplate.clone(!1);\n                b.data(\"item\", a);\n                var c = b.JSBNG__find(\"a\");\n                c.attr(\"href\", a.saved_search_path), c.attr(\"data-search-query\", a.query), c.attr(\"data-query-source\", a.search_query_source), c.append($(\"\\u003Cspan\\u003E\").text(a.JSBNG__name)), this.$savedSearchesList.append(b);\n            }, this), ((((b.query === \"\")) ? this.$savedSearchesTitle.show() : this.$savedSearchesTitle.hide()));\n        }, this.after(\"initialize\", function() {\n            this.$savedSearchItemTemplate = this.select(\"savedSearchesItemSelector\").clone(!1), this.$savedSearchesList = this.select(\"savedSearchesSelector\"), this.$savedSearchesTitle = this.select(\"savedSearchesTitleSelector\"), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderSavedSearches);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(savedSearchesRenderer);\n});\ndefine(\"app/ui/typeahead/recent_searches_renderer\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function recentSearchesRenderer() {\n        this.defaultAttrs({\n            recentSearchesSelector: \".recent-searches-list\",\n            recentSearchesItemSelector: \".typeahead-recent-search-item\",\n            recentSearchesDismissSelector: \".typeahead-recent-search-item .close\",\n            recentSearchesBlockSelector: \".typeahead-recent-searches\",\n            recentSearchesTitleSelector: \".recent-searches-title\",\n            recentSearchesClearAllSelector: \".clear-recent-searches\",\n            datasources: [\"recentSearches\",]\n        }), this.deleteRecentSearch = function(a, b) {\n            var c = $(a.target).closest(this.attr.recentSearchesItemSelector), d = c.JSBNG__find(\"a.js-nav\"), e = d.data(\"search-query\");\n            ((((this.$recentSearchesList.children().length == 1)) && (this.$recentSearchesTitle.hide(), this.$recentSearchesBlock.removeClass(\"has-results\"), this.$recentSearchesClearAll.hide()))), c.remove(), this.trigger(\"uiTypeaheadDeleteRecentSearch\", {\n                query: e\n            });\n        }, this.deleteAllRecentSearches = function(a, b) {\n            this.$recentSearchesList.empty(), this.$recentSearchesTitle.hide(), this.$recentSearchesBlock.removeClass(\"has-results\"), this.$recentSearchesClearAll.hide(), this.trigger(\"uiTypeaheadDeleteRecentSearch\", {\n                deleteAll: !0\n            });\n        }, this.renderRecentSearches = function(a, b) {\n            this.$recentSearchesList.empty();\n            var c = this.attr.datasources.map(function(a) {\n                return ((b.suggestions[a] || []));\n            }).reduce(function(a, b) {\n                return a.concat(b);\n            });\n            c.forEach(function(a) {\n                var b = this.$recentSearchItemTemplate.clone(!1);\n                b.data(\"item\", a);\n                var c = b.JSBNG__find(\"a\");\n                c.attr(\"href\", a.recent_search_path), c.attr(\"data-search-query\", a.JSBNG__name), c.attr(\"data-query-source\", a.search_query_source), c.append($(\"\\u003Cspan\\u003E\").text(a.JSBNG__name)), this.$recentSearchesList.append(b);\n            }, this);\n            var d = ((c.length !== 0)), e = ((b.query === \"\")), f = ((e && d));\n            this.$recentSearchesBlock.toggleClass(\"has-results\", ((!e && d))), this.$recentSearchesTitle.toggle(f), this.$recentSearchesClearAll.toggle(f);\n        }, this.after(\"initialize\", function() {\n            this.$recentSearchItemTemplate = this.select(\"recentSearchesItemSelector\").clone(!1), this.$recentSearchesList = this.select(\"recentSearchesSelector\"), this.$recentSearchesBlock = this.select(\"recentSearchesBlockSelector\"), this.$recentSearchesTitle = this.select(\"recentSearchesTitleSelector\"), this.$recentSearchesClearAll = this.select(\"recentSearchesClearAllSelector\"), this.JSBNG__on(\"click\", {\n                recentSearchesDismissSelector: this.deleteRecentSearch,\n                recentSearchesClearAllSelector: this.deleteAllRecentSearches\n            }), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderRecentSearches), this.JSBNG__on(\"uiTypeaheadDeleteAllRecentSearches\", this.deleteAllRecentSearches);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(recentSearchesRenderer);\n});\ndefine(\"app/ui/typeahead/topics_renderer\", [\"module\",\"require\",\"exports\",\"core/i18n\",\"core/component\",], function(module, require, exports) {\n    function topicsRenderer() {\n        this.defaultAttrs({\n            includeSearchGlass: !0,\n            parseHashtags: !1,\n            topicsListSelector: \".topics-list\",\n            topicsItemSelector: \".typeahead-topic-item\",\n            datasources: [\"topics\",],\n            emptySocialContextClass: \"empty-topics-social-context\"\n        }), this.renderTopics = function(a, b) {\n            this.$topicsList.empty();\n            var c = [];\n            this.attr.datasources.forEach(function(a) {\n                c = c.concat(((b.suggestions[a] || [])));\n            });\n            if (!c.length) {\n                this.clearTopics();\n                return;\n            }\n        ;\n        ;\n            c.forEach(function(a) {\n                var b = this.$topicsItemTemplate.clone(!1);\n                b.data(\"item\", a);\n                var c = b.JSBNG__find(\"a\"), d = ((a.topic || a.hashtag));\n                c.attr(\"href\", ((((\"/search?q=\" + encodeURIComponent(d))) + \"&src=tyah\"))), c.attr(\"data-search-query\", d);\n                var e = d.charAt(0), f = ((this.attr.parseHashtags && ((((e == \"#\")) || ((e == \"$\")))))), g = ((a.JSBNG__location && this.attr.deciders.showTypeaheadTopicSocialContext));\n                if (f) {\n                    var h = $(\"\\u003Cspan\\u003E\").text(e);\n                    h.append($(\"\\u003Cstrong\\u003E\").text(d.slice(1))), c.append(h);\n                }\n                 else if (g) {\n                    var i = c.JSBNG__find(\".typeahead-social-context\");\n                    i.text(this.getSocialContext(a)), i.show(), c.children().last().before($(\"\\u003Cspan\\u003E\").text(d));\n                }\n                 else c.append($(\"\\u003Cspan\\u003E\").text(d)), ((this.attr.deciders.showTypeaheadTopicSocialContext && c.addClass(this.attr.emptySocialContextClass)));\n                \n            ;\n            ;\n                b.appendTo(this.$topicsList);\n            }, this), this.$topicsList.addClass(\"has-results\"), this.$topicsList.show();\n        }, this.getSocialContext = function(a) {\n            return _(\"Trending in {{location}}\", {\n                JSBNG__location: a.JSBNG__location\n            });\n        }, this.clearTopics = function(a) {\n            this.$topicsList.removeClass(\"has-results\"), this.$topicsList.hide();\n        }, this.after(\"initialize\", function() {\n            this.$topicsItemTemplate = this.select(\"topicsItemSelector\").clone(!1), ((this.attr.includeSearchGlass || this.$topicsItemTemplate.JSBNG__find(\"i.generic-search\").remove())), this.$topicsList = this.select(\"topicsListSelector\"), this.$topicsList.hide(), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderTopics);\n        });\n    };\n;\n    var _ = require(\"core/i18n\"), defineComponent = require(\"core/component\");\n    module.exports = defineComponent(topicsRenderer);\n});\ndefine(\"app/ui/typeahead/trend_locations_renderer\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",], function(module, require, exports) {\n    function trendLocationsRenderer() {\n        this.defaultAttrs({\n            typeaheadItemClass: \"typeahead-item\",\n            trendLocationsListSelector: \".typeahead-trend-locations-list\",\n            trendLocationsItemSelector: \".typeahead-trend-locations-item\",\n            datasources: [\"trendLocations\",]\n        }), this.renderTrendLocations = function(a, b) {\n            this.$trendLocationsList.empty();\n            var c = [];\n            this.attr.datasources.forEach(function(a) {\n                c = c.concat(((b.suggestions[a] || [])));\n            }), c.forEach(function(a) {\n                var b = this.$trendLocationItemTemplate.clone(!1), c = b.JSBNG__find(\"a\");\n                b.data(\"item\", a), c.attr(\"data-search-query\", a.JSBNG__name), c.attr(\"href\", \"#\"), c.append(this.getLocationHtml(a)), ((((a.woeid == -1)) && (b.removeClass(this.attr.typeaheadItemClass), c.attr(\"data-search-query\", \"\")))), b.appendTo(this.$trendLocationsList);\n            }, this);\n        }, this.getLocationHtml = function(a) {\n            var b = $(\"\\u003Cspan\\u003E\");\n            switch (a.placeTypeCode) {\n              case placeTypeMapping.WORLDWIDE:\n            \n              case placeTypeMapping.NOT_FOUND:\n                b.text(a.JSBNG__name);\n                break;\n              case placeTypeMapping.COUNTRY:\n                b.html(((((a.JSBNG__name + \"  \")) + _(\"(All cities)\"))));\n                break;\n              default:\n                b.text([a.JSBNG__name,a.countryName,].join(\", \"));\n            };\n        ;\n            return b;\n        }, this.after(\"initialize\", function() {\n            this.$trendLocationItemTemplate = this.select(\"trendLocationsItemSelector\").clone(!1), this.$trendLocationsList = this.select(\"trendLocationsListSelector\"), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderTrendLocations);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(trendLocationsRenderer);\n    var placeTypeMapping = {\n        WORLDWIDE: 19,\n        COUNTRY: 12,\n        CITY: 7,\n        NOT_FOUND: -1\n    };\n});\ndefine(\"app/ui/typeahead/context_helpers_renderer\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function contextHelpersRenderer() {\n        this.defaultAttrs({\n            contextListSelector: \".typeahead-context-list\",\n            contextItemSelector: \".typeahead-context-item\",\n            datasources: [\"contextHelpers\",]\n        }), this.renderContexts = function(a, b) {\n            this.$contextItemsList.empty();\n            var c = this.attr.datasources.map(function(a) {\n                return ((b.suggestions[a] || []));\n            }).reduce(function(a, b) {\n                return a.concat(b);\n            });\n            if (((c.length == 0))) {\n                this.clearList();\n                return;\n            }\n        ;\n        ;\n            c.forEach(function(a) {\n                var b = this.$contextItemTemplate.clone(!1);\n                b.data(\"item\", a);\n                var c = b.JSBNG__find(\"a\"), d = ((((\"/search?q=\" + encodeURIComponent(((a.rewrittenQuery || a.query))))) + \"&src=tyah\"));\n                ((a.mode && (d += ((\"&mode=\" + a.mode))))), c.attr(\"href\", d), c.attr(\"data-search-query\", a.query);\n                var e = a.text.replace(\"{{strong_query}}\", \"\\u003Cstrong\\u003E\\u003C/strong\\u003E\");\n                c.html(e), c.JSBNG__find(\"strong\").text(a.query), this.$contextItemsList.append(b);\n            }, this), this.$contextItemsList.addClass(\"has-results\"), this.$contextItemsList.show();\n        }, this.clearList = function(a) {\n            this.$contextItemsList.removeClass(\"has-results\"), this.$contextItemsList.hide();\n        }, this.after(\"initialize\", function() {\n            this.$contextItemsList = this.select(\"contextListSelector\"), this.$contextItemTemplate = this.select(\"contextItemSelector\").clone(!1), this.JSBNG__on(\"uiTypeaheadRenderResults\", this.renderContexts);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(contextHelpersRenderer);\n});\ndefine(\"app/utils/rtl_text\", [\"module\",\"require\",\"exports\",\"lib/twitter-text\",], function(module, require, exports) {\n    var TwitterText = require(\"lib/twitter-text\"), RTLText = function() {\n        function q(a) {\n            try {\n                return ((JSBNG__document.activeElement === a));\n            } catch (b) {\n                return !1;\n            };\n        ;\n        };\n    ;\n        function r(a) {\n            if (!q(a)) {\n                return 0;\n            }\n        ;\n        ;\n            var b;\n            if (((typeof a.selectionStart == \"number\"))) {\n                return a.selectionStart;\n            }\n        ;\n        ;\n            if (JSBNG__document.selection) {\n                a.JSBNG__focus(), b = JSBNG__document.selection.createRange(), b.moveStart(\"character\", -a.value.length);\n                var c = b.text.length;\n                return c;\n            }\n        ;\n        ;\n        };\n    ;\n        function s(a, b) {\n            if (!q(a)) {\n                return;\n            }\n        ;\n        ;\n            if (((typeof a.selectionStart == \"number\"))) {\n                a.selectionStart = b, a.selectionEnd = b;\n            }\n             else {\n                if (JSBNG__document.selection) {\n                    var c = a.createTextRange();\n                    c.collapse(!0), c.moveEnd(\"character\", b), c.moveStart(\"character\", b), c.select();\n                }\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n        function t(a, b, c) {\n            var d = 0, e = \"\", f = b(a);\n            for (var g = 0; ((g < f.length)); g++) {\n                var h = f[g], i = \"\";\n                ((h.screenName && (i = \"screenName\"))), ((h.hashtag && (i = \"hashtag\"))), ((h.url && (i = \"url\"))), ((h.cashtag && (i = \"cashtag\")));\n                var j = {\n                    entityText: a.slice(h.indices[0], h.indices[1]),\n                    entityType: i\n                };\n                e += ((a.slice(d, h.indices[0]) + c(j))), d = h.indices[1];\n            };\n        ;\n            return ((e + a.slice(d, a.length)));\n        };\n    ;\n        function u(a) {\n            var b = a.match(c), d = a;\n            if (((b || ((l === \"rtl\"))))) {\n                d = t(d, TwitterText.extractEntitiesWithIndices, function(a) {\n                    if (((a.entityType === \"screenName\"))) {\n                        return ((((e + a.entityText)) + f));\n                    }\n                ;\n                ;\n                    if (((a.entityType === \"hashtag\"))) {\n                        return ((a.entityText.charAt(1).match(c) ? a.entityText : ((e + a.entityText))));\n                    }\n                ;\n                ;\n                    if (((a.entityType === \"url\"))) {\n                        return ((a.entityText + e));\n                    }\n                ;\n                ;\n                    if (((a.entityType === \"cashtag\"))) {\n                        return ((e + a.entityText));\n                    }\n                ;\n                ;\n                });\n            }\n        ;\n        ;\n            return d;\n        };\n    ;\n        function v(a) {\n            var b, c = ((a.target ? a.target : a.srcElement)), e = ((a.which ? a.which : a.keyCode));\n            if (((e === g.BACKSPACE))) b = -1;\n             else {\n                if (((e !== g.DELETE))) {\n                    return;\n                }\n            ;\n            ;\n                b = 0;\n            }\n        ;\n        ;\n            var f = r(c), h = c.value, i = 0, j;\n            do j = ((h.charAt(((f + b))) || \"\")), ((j && (f += b, i++, h = ((h.slice(0, f) + h.slice(((f + 1)), h.length)))))); while (j.match(d));\n            ((((i > 1)) && (c.value = h, s(c, f), ((a.preventDefault ? a.preventDefault() : a.returnValue = !1)))));\n        };\n    ;\n        function w(a) {\n            return a.replace(d, \"\");\n        };\n    ;\n        function x(a) {\n            var d = a.match(c);\n            a = a.replace(k, \"\");\n            var e = 0, f = a.replace(m, \"\"), g = l;\n            if (((!f || !f.replace(/#/g, \"\")))) {\n                return ((((g === \"rtl\")) ? !0 : !1));\n            }\n        ;\n        ;\n            if (!d) {\n                return !1;\n            }\n        ;\n        ;\n            if (a) {\n                var h = TwitterText.extractMentionsWithIndices(a), i = h.length, j;\n                for (j = 0; ((j < i)); j++) {\n                    e += ((h[j].screenName.length + 1));\n                ;\n                };\n            ;\n                var n = TwitterText.extractUrlsWithIndices(a), o = n.length;\n                for (j = 0; ((j < o)); j++) {\n                    e += ((n[j].url.length + 2));\n                ;\n                };\n            ;\n            }\n        ;\n        ;\n            var p = ((f.length - e));\n            return ((((p > 0)) && ((((d.length / p)) > b))));\n        };\n    ;\n        function y(a) {\n            var b = ((a.target || a.srcElement));\n            ((((((a.type !== \"keydown\")) || ((((((((a.keyCode !== 91)) && ((a.keyCode !== 16)))) && ((a.keyCode !== 88)))) && ((a.keyCode !== 17)))))) ? ((((((a.type === \"keyup\")) && ((((((((a.keyCode === 91)) || ((a.keyCode === 16)))) || ((a.keyCode === 88)))) || ((a.keyCode === 17)))))) && (o[String(a.keyCode)] = !1))) : o[String(a.keyCode)] = !0)), ((((((((((!p && o[91])) || ((p && o[17])))) && o[16])) && o[88])) && (n = !0, ((((b.dir === \"rtl\")) ? z(\"ltr\", b) : z(\"rtl\", b))), o = {\n                91: !1,\n                16: !1,\n                88: !1,\n                17: !1\n            })));\n        };\n    ;\n        function z(a, b) {\n            b.setAttribute(\"dir\", a), b.style.direction = a, b.style.textAlign = ((((a === \"rtl\")) ? \"right\" : \"left\"));\n        };\n    ;\n        \"use strict\";\n        var a = {\n        }, b = 92640, c = /[\\u0590-\\u083F]|[\\u08A0-\\u08FF]|[\\uFB1D-\\uFDFF]|[\\uFE70-\\uFEFF]/gm, d = /\\u200e|\\u200f/gm, e = \"\\u200e\", f = \"\\u200f\", g = {\n            BACKSPACE: 8,\n            DELETE: 46\n        }, h = 0, i = 20, j = !1, k = \"\", l = \"\", m = /^\\s+|\\s+$/g, n = !1, o = {\n            91: !1,\n            16: !1,\n            88: !1,\n            17: !1\n        }, p = ((JSBNG__navigator.userAgent.indexOf(\"Mac\") === -1));\n        return a.onTextChange = function(b) {\n            var c = ((b || window.JSBNG__event));\n            y(b), ((((c.type === \"keydown\")) && v(c))), a.setText(((c.target || c.srcElement)));\n        }, a.setText = function(a) {\n            ((l || ((a.style.direction ? l = a.style.direction : ((a.dir ? l = a.dir : ((JSBNG__document.body.style.direction ? l = JSBNG__document.body.style.direction : l = JSBNG__document.body.dir)))))))), ((((arguments.length === 2)) && (l = a.ownerDocument.documentElement.className, k = arguments[1])));\n            var b = a.value;\n            if (!b) {\n                return;\n            }\n        ;\n        ;\n            var c = w(b);\n            j = x(c);\n            var d = u(c), e = ((j ? \"rtl\" : \"ltr\"));\n            ((((d !== b)) && (a.value = d, s(a, ((((r(a) + d.length)) - c.length)))))), ((n || z(e, a)));\n        }, a.textLength = function(a) {\n            var b = w(a), c = TwitterText.extractUrls(b), d = ((b.length - c.join(\"\").length)), e = c.length;\n            for (var f = 0; ((f < e)); f++) {\n                d += i, ((/^https:/.test(c[f]) && (d += 1)));\n            ;\n            };\n        ;\n            return h = d;\n        }, a.cleanText = function(a) {\n            return w(a);\n        }, a.addRTLMarkers = function(a) {\n            return u(a);\n        }, a.shouldBeRTL = function(a) {\n            return x(a);\n        }, a;\n    }();\n    ((((((typeof module != \"undefined\")) && module.exports)) && (module.exports = RTLText)));\n});\ndefine(\"app/ui/typeahead/typeahead_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/ui/typeahead/accounts_renderer\",\"app/ui/typeahead/saved_searches_renderer\",\"app/ui/typeahead/recent_searches_renderer\",\"app/ui/typeahead/topics_renderer\",\"app/ui/typeahead/trend_locations_renderer\",\"app/ui/typeahead/context_helpers_renderer\",\"app/utils/rtl_text\",], function(module, require, exports) {\n    function typeaheadDropdown() {\n        this.defaultAttrs({\n            inputSelector: \"#search-query\",\n            dropdownSelector: \".dropdown-menu.typeahead\",\n            itemsSelector: \".typeahead-items li\",\n            blockLinkActions: !1,\n            deciders: {\n                showDebugInfo: !1,\n                showSocialContext: !1,\n                showTypeaheadTopicSocialContext: !1\n            },\n            autocompleteAccounts: !0,\n            datasourceRenders: [[\"contextHelpers\",[\"contextHelpers\",],],[\"savedSearches\",[\"savedSearches\",],],[\"recentSearches\",[\"recentSearches\",],],[\"topics\",[\"topics\",],],[\"accounts\",[\"accounts\",],],],\n            templateContainerSelector: \".dropdown-inner\",\n            recentSearchesListSelector: \".typeahead-recent-searches\",\n            savedSearchesListSelector: \".typeahead-saved-searches\",\n            topicsListSelector: \".typeahead-topics\",\n            accountsListSelector: \".js-typeahead-accounts\",\n            trendLocationsListSelector: \".typeahead-trend-locations-list\",\n            contextListSelector: \".typeahead-context-list\"\n        }), this.mouseOver = function(a, b) {\n            this.select(\"itemsSelector\").removeClass(\"selected\"), $(b.el).addClass(\"selected\");\n        }, this.moveSelection = function(a) {\n            var b = this.select(\"itemsSelector\").filter(\":visible\"), c = b.filter(\".selected\");\n            c.removeClass(\"selected\");\n            var d = ((b.index(c) + a));\n            d = ((((((d + 1)) % ((b.length + 1)))) - 1));\n            if (((d === -1))) {\n                this.trigger(\"uiTypeaheadSelectionCleared\");\n                return;\n            }\n        ;\n        ;\n            ((((d < -1)) && (d = ((b.length - 1))))), b.eq(d).addClass(\"selected\");\n        }, this.moveSelectionUp = function(a) {\n            this.moveSelection(-1);\n        }, this.moveSelectionDown = function(a) {\n            this.moveSelection(1);\n        }, this.dropdownIsOpen = function() {\n            if (((((window.DEBUG && window.DEBUG.enabled)) && ((this.openState !== this.$dropdown.is(\":visible\")))))) {\n                throw new Error(\"Dropdown markup and internal openState variable are out of sync.\");\n            }\n        ;\n        ;\n            return this.openState;\n        }, this.show = function() {\n            this.$dropdown.show(), this.openState = !0, this.trigger(\"uiTypeaheadResultsShown\");\n        }, this.hide = function(a) {\n            if (this.mouseIsOverDropdown) {\n                return;\n            }\n        ;\n        ;\n            if (!this.dropdownIsOpen()) {\n                return;\n            }\n        ;\n        ;\n            this.$dropdown.hide(), this.openState = !1, this.trigger(\"uiTypeaheadResultsHidden\");\n        }, this.hideAndManageEsc = function(a) {\n            if (!this.dropdownIsOpen()) {\n                return;\n            }\n        ;\n        ;\n            this.forceHide(), a.preventDefault(), a.stopPropagation();\n        }, this.forceHide = function() {\n            this.clearMouseTracking(), this.hide();\n        }, this.inputValueUpdated = function(a, b) {\n            this.lastQuery = b.value, this.trigger(\"uiNeedsTypeaheadSuggestions\", {\n                datasources: this.datasources,\n                query: b.value,\n                tweetContext: b.tweetContext,\n                id: this.getDropdownId()\n            });\n        }, this.getDropdownId = function() {\n            return ((this.dropdownId || (this.dropdownId = ((\"swift_typeahead_dropdown_\" + Math.floor(((Math.JSBNG__random() * 1000000)))))))), this.dropdownId;\n        }, this.checkIfSelectionFromSearchInput = function(a) {\n            return a.closest(\"form\").JSBNG__find(\"input\").hasClass(\"search-input\");\n        }, this.triggerSelectionEvent = function(a, b) {\n            ((this.attr.blockLinkActions && a.preventDefault()));\n            var c = this.select(\"itemsSelector\"), d = c.filter(\".selected\").first(), e = d.JSBNG__find(\"a\"), f = d.index(), g = this.lastQuery, h = e.attr(\"data-search-query\");\n            d.removeClass(\"selected\");\n            if (((!g && !h))) {\n                return;\n            }\n        ;\n        ;\n            var i = this.getItemData(d);\n            this.trigger(\"uiTypeaheadItemSelected\", {\n                isSearchInput: this.checkIfSelectionFromSearchInput(e),\n                index: f,\n                source: e.data(\"ds\"),\n                query: h,\n                input: g,\n                display: ((d.data(\"user-screenname\") || h)),\n                href: e.attr(\"href\"),\n                isClick: ((a.originalEvent ? ((a.originalEvent.type === \"click\")) : !1)),\n                item: i\n            }), this.forceHide();\n        }, this.getItemData = function(a) {\n            return a.data(\"item\");\n        }, this.submitQuery = function(a, b) {\n            var c = this.select(\"itemsSelector\").filter(\".selected\").first();\n            if (c.length) {\n                this.triggerSelectionEvent(a, b);\n                return;\n            }\n        ;\n        ;\n            var d = this.$input.val();\n            if (((d.trim() === \"\"))) {\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiTypeaheadSubmitQuery\", {\n                query: RTLText.cleanText(d)\n            }), this.forceHide();\n        }, this.getSelectedCompletion = function() {\n            var a = this.select(\"itemsSelector\").filter(\".selected\").first();\n            ((((!a.length && this.dropdownIsOpen())) && (a = this.select(\"itemsSelector\").filter(\".typeahead-item\").first())));\n            if (!a.length) {\n                return;\n            }\n        ;\n        ;\n            var b = a.JSBNG__find(\"a\"), c = b.data(\"search-query\"), d = this.select(\"itemsSelector\"), e = d.index(a), f = this.lastQuery;\n            if (((((((b.data(\"ds\") == \"account\")) || ((b.data(\"ds\") == \"context_helper\")))) && !this.attr.autocompleteAccounts))) {\n                return;\n            }\n        ;\n        ;\n            var g = this.getItemData(a);\n            this.trigger(\"uiTypeaheadItemPossiblyComplete\", {\n                value: c,\n                source: b.data(\"ds\"),\n                index: e,\n                query: c,\n                item: g,\n                display: ((a.data(\"user-screenname\") || c)),\n                input: f,\n                href: ((b.attr(\"href\") || \"\"))\n            });\n        }, this.updateDropdown = function(a, b) {\n            var c = this.$input.is(JSBNG__document.activeElement);\n            if (((((((b.id !== this.getDropdownId())) || ((b.query !== this.lastQuery)))) || !c))) {\n                return;\n            }\n        ;\n        ;\n            var d = this.select(\"itemsSelector\").filter(\".selected\").first(), e = d.JSBNG__find(\"a\").data(\"ds\"), f = d.JSBNG__find(\"a\").data(\"search-query\");\n            this.trigger(\"uiTypeaheadRenderResults\", b);\n            if (((e && f))) {\n                var g = this.select(\"itemsSelector\").JSBNG__find(((((((((\"[data-ds='\" + e)) + \"'][data-search-query='\")) + f)) + \"']\")));\n                g.closest(\"li\").addClass(\"selected\");\n            }\n        ;\n        ;\n            var h = this.datasources.some(function(a) {\n                return ((b.suggestions[a] && b.suggestions[a].length));\n            }), i = !!b.query;\n            ((((h && c)) ? (this.show(), this.trigger(\"uiTypeaheadSetPreventDefault\", {\n                preventDefault: i,\n                key: 9\n            }), this.trigger(\"uiTypeaheadResultsShown\")) : (this.forceHide(), this.trigger(\"uiTypeaheadSetPreventDefault\", {\n                preventDefault: !1,\n                key: 9\n            }), this.trigger(\"uiTypeaheadResultsHidden\"))));\n        }, this.trackMouse = function(a, b) {\n            this.mouseIsOverDropdown = !0;\n        }, this.clearMouseTracking = function(a, b) {\n            this.mouseIsOverDropdown = !1;\n        }, this.resetTemplates = function() {\n            this.$templateContainer.empty(), this.$templateContainer.append(this.$savedSearchesTemplate), this.$templateContainer.append(this.$recentSearchesTemplate), this.$templateContainer.append(this.$topicsTemplate), this.$templateContainer.append(this.$accountsTemplate), this.$templateContainer.append(this.$trendLocationsTemplate), this.$templateContainer.append(this.$contextHelperTemplate);\n        }, this.addRenderer = function(a, b, c) {\n            c = utils.merge(c, {\n                datasources: b\n            });\n            var d = ((\"block\" + this.blockCount++));\n            ((((a == \"accounts\")) ? (this.$accountsTemplate.clone().addClass(d).appendTo(this.$templateContainer), AccountsRenderer.attachTo(this.$node, utils.merge(c, {\n                accountsListSelector: ((((this.attr.accountsListSelector + \".\")) + d))\n            }))) : ((((a == \"topics\")) ? (this.$topicsTemplate.clone().addClass(d).appendTo(this.$templateContainer), TopicsRenderer.attachTo(this.$node, utils.merge(c, {\n                topicsListSelector: ((((this.attr.topicsListSelector + \".\")) + d))\n            }))) : ((((a == \"savedSearches\")) ? (this.$savedSearchesTemplate.clone().addClass(d).appendTo(this.$templateContainer), SavedSearchesRenderer.attachTo(this.$node, utils.merge(c, {\n                savedSearchesListSelector: ((((this.attr.savedSearchesListSelector + \".\")) + d))\n            }))) : ((((a == \"recentSearches\")) ? (this.$recentSearchesTemplate.clone().addClass(d).appendTo(this.$templateContainer), RecentSearchesRenderer.attachTo(this.$node, utils.merge(c, {\n                recentSearchesListSelector: ((((this.attr.recentSearchesListSelector + \".\")) + d))\n            }))) : ((((a == \"trendLocations\")) ? (this.$trendLocationsTemplate.clone().addClass(d).appendTo(this.$templateContainer), TrendLocationsRenderer.attachTo(this.$node, utils.merge(c, {\n                trendLocationsListSelector: ((((this.attr.trendLocationsListSelector + \".\")) + d))\n            }))) : ((((a == \"contextHelpers\")) && (this.$contextHelperTemplate.clone().addClass(d).appendTo(this.$templateContainer), ContextHelpersRenderer.attachTo(this.$node, utils.merge(c, {\n                contextListSelector: ((((this.attr.contextListSelector + \".\")) + d))\n            })))))))))))))));\n        }, this.after(\"initialize\", function(a) {\n            this.openState = !1, this.$input = this.select(\"inputSelector\"), this.$dropdown = this.select(\"dropdownSelector\"), this.$templateContainer = this.select(\"templateContainerSelector\"), this.$accountsTemplate = this.select(\"accountsListSelector\").clone(!1), this.$savedSearchesTemplate = this.select(\"savedSearchesListSelector\").clone(!1), this.$recentSearchesTemplate = this.select(\"recentSearchesListSelector\").clone(!1), this.$topicsTemplate = this.select(\"topicsListSelector\").clone(!1), this.$trendLocationsTemplate = this.select(\"trendLocationsListSelector\").clone(!1), this.$contextHelperTemplate = this.select(\"contextListSelector\").clone(!1), this.$templateContainer.empty(), this.datasources = [], this.attr.datasourceRenders.forEach(function(a) {\n                this.datasources = this.datasources.concat(a[1]);\n            }, this), this.datasources = utils.uniqueArray(this.datasources), this.blockCount = 0, this.attr.datasourceRenders.forEach(function(b) {\n                this.addRenderer(b[0], b[1], a);\n            }, this), this.JSBNG__on(this.$input, \"JSBNG__blur\", this.hide), this.JSBNG__on(this.$input, \"uiTypeaheadInputSubmit\", this.submitQuery), this.JSBNG__on(this.$input, \"uiTypeaheadInputChanged\", this.inputValueUpdated), this.JSBNG__on(this.$input, \"uiTypeaheadInputMoveUp\", this.moveSelectionUp), this.JSBNG__on(this.$input, \"uiTypeaheadInputMoveDown\", this.moveSelectionDown), this.JSBNG__on(this.$input, \"uiTypeaheadInputAutocomplete\", this.getSelectedCompletion), this.JSBNG__on(this.$input, \"uiTypeaheadInputTab\", this.clearMouseTracking), this.JSBNG__on(this.$input, \"uiShortcutEsc\", this.hideAndManageEsc), this.JSBNG__on(this.$dropdown, \"mouseenter\", this.trackMouse), this.JSBNG__on(this.$dropdown, \"mouseleave\", this.clearMouseTracking), this.JSBNG__on(JSBNG__document, \"dataTypeaheadSuggestionsResults\", this.updateDropdown), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.forceHide), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.resetTemplates), this.JSBNG__on(\"mouseover\", {\n                itemsSelector: this.mouseOver\n            }), this.JSBNG__on(\"click\", {\n                itemsSelector: this.triggerSelectionEvent\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), AccountsRenderer = require(\"app/ui/typeahead/accounts_renderer\"), SavedSearchesRenderer = require(\"app/ui/typeahead/saved_searches_renderer\"), RecentSearchesRenderer = require(\"app/ui/typeahead/recent_searches_renderer\"), TopicsRenderer = require(\"app/ui/typeahead/topics_renderer\"), TrendLocationsRenderer = require(\"app/ui/typeahead/trend_locations_renderer\"), ContextHelpersRenderer = require(\"app/ui/typeahead/context_helpers_renderer\"), RTLText = require(\"app/utils/rtl_text\");\n    module.exports = defineComponent(typeaheadDropdown);\n});\ndefine(\"app/utils/event_support\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var supportedEvents = {\n    }, checkEventsSupport = function(a, b) {\n        return a.forEach(function(a) {\n            checkEventSupported(a, b[a]);\n        }, this), supportedEvents;\n    }, checkEventSupported = function(a, b) {\n        var c = JSBNG__document.createElement(((b || \"div\"))), d = ((\"JSBNG__on\" + a)), e = ((d in c));\n        return ((e || (c.setAttribute(d, \"return;\"), e = ((typeof c[d] == \"function\"))))), c = null, supportedEvents[a] = e, e;\n    }, eventSupport = {\n        checkEvents: function(a, b) {\n            checkEventsSupport(a, ((b || {\n            })));\n        },\n        browserSupports: function(a, b) {\n            return ((((supportedEvents[a] === undefined)) && checkEventSupported(a, b))), supportedEvents[a];\n        }\n    };\n    module.exports = eventSupport;\n});\nprovide(\"app/utils/string\", function(a) {\n    function b(a) {\n        var b = a.charCodeAt(0);\n        return ((((b <= 32)) ? !0 : !1));\n    };\n;\n    function c(a, b) {\n        if (((a == \"\"))) {\n            return \"\";\n        }\n    ;\n    ;\n        var d = a.split(\"\"), e = d.pop();\n        return a = d.join(\"\"), ((((e == \"0\")) ? ((c(a, !0) + \"9\")) : (e -= 1, ((((((a == \"\")) && ((e == 0)))) ? ((b ? \"\" : \"0\")) : ((a + e)))))));\n    };\n;\n    function d(a) {\n        var b = a.charCodeAt(0);\n        return ((((((b >= 48)) && ((b <= 57)))) ? !0 : !1));\n    };\n;\n    function e(a, b) {\n        var c = 0, e = 0, f = 0, g, h;\n        for (; ; e++, f++) {\n            g = a.charAt(e), h = b.charAt(f);\n            if (((!d(g) && !d(h)))) {\n                return c;\n            }\n        ;\n        ;\n            if (!d(g)) {\n                return -1;\n            }\n        ;\n        ;\n            if (!d(h)) {\n                return 1;\n            }\n        ;\n        ;\n            ((((g < h)) ? ((((c === 0)) && (c = -1))) : ((((((g > h)) && ((c === 0)))) && (c = 1)))));\n        };\n    ;\n    };\n;\n    var f = {\n        compare: function(a, c) {\n            var f = 0, g = 0, h, i, j, k, l;\n            if (((a === c))) {\n                return 0;\n            }\n        ;\n        ;\n            ((((typeof a == \"number\")) && (a = a.toString()))), ((((typeof c == \"number\")) && (c = c.toString())));\n            for (; ; ) {\n                if (((f > 100))) {\n                    return;\n                }\n            ;\n            ;\n                h = i = 0, j = a.charAt(f), k = c.charAt(g);\n                while (((b(j) || ((j == \"0\"))))) {\n                    ((((j == \"0\")) ? h++ : h = 0)), j = a.charAt(++f);\n                ;\n                };\n            ;\n                while (((b(k) || ((k == \"0\"))))) {\n                    ((((k == \"0\")) ? i++ : i = 0)), k = c.charAt(++g);\n                ;\n                };\n            ;\n                if (((((d(j) && d(k))) && (((l = e(a.substring(f), c.substring(g))) != 0))))) {\n                    return l;\n                }\n            ;\n            ;\n                if (((((j == 0)) && ((k == 0))))) {\n                    return ((h - i));\n                }\n            ;\n            ;\n                if (((j < k))) {\n                    return -1;\n                }\n            ;\n            ;\n                if (((j > k))) {\n                    return 1;\n                }\n            ;\n            ;\n                ++f, ++g;\n            };\n        ;\n        },\n        wordAtPosition: function(a, b, c) {\n            c = ((c || /[^\\s]+/g));\n            var d = null;\n            return a.replace(c, function() {\n                var a = arguments[0], c = arguments[((arguments.length - 2))];\n                ((((((c <= b)) && ((((c + a.length)) >= b)))) && (d = a)));\n            }), d;\n        },\n        parseBigInt: function(a) {\n            return ((isNaN(Number(a)) ? NaN : a.toString()));\n        },\n        subtractOne: c\n    };\n    a(f);\n});\ndefine(\"app/ui/typeahead/typeahead_input\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/caret\",\"app/utils/event_support\",\"app/utils/string\",\"lib/twitter-text\",\"app/utils/rtl_text\",], function(module, require, exports) {\n    function typeaheadInput() {\n        this.defaultAttrs({\n            inputSelector: \"#search-query\",\n            buttonSelector: \".nav-search\",\n            completeAllEntities: !1,\n            includeTweetContext: !1,\n            tweetContextEnabled: !1\n        }), this.getDefaultKeycodes = function() {\n            var a = {\n                13: {\n                    JSBNG__name: \"ENTER\",\n                    JSBNG__event: \"uiTypeaheadInputSubmit\",\n                    JSBNG__on: \"keypress\",\n                    preventDefault: !0,\n                    enabled: !0\n                },\n                9: {\n                    JSBNG__name: \"TAB\",\n                    JSBNG__event: \"uiTypeaheadInputTab\",\n                    JSBNG__on: \"keydown\",\n                    preventDefault: !0,\n                    canCauseComplete: !0,\n                    enabled: !0\n                },\n                37: {\n                    JSBNG__name: \"LEFT\",\n                    JSBNG__event: \"uiTypeaheadInputLeft\",\n                    JSBNG__on: \"keydown\",\n                    canCauseComplete: !0,\n                    enabled: !0\n                },\n                39: {\n                    JSBNG__name: \"RIGHT\",\n                    JSBNG__event: \"uiTypeaheadInputRight\",\n                    JSBNG__on: \"keydown\",\n                    canCauseComplete: !0,\n                    enabled: !0\n                },\n                38: {\n                    JSBNG__name: \"UP\",\n                    JSBNG__event: \"uiTypeaheadInputMoveUp\",\n                    JSBNG__on: \"keydown\",\n                    preventDefault: !0,\n                    enabled: !0\n                },\n                40: {\n                    JSBNG__name: \"DOWN\",\n                    JSBNG__event: \"uiTypeaheadInputMoveDown\",\n                    JSBNG__on: \"keydown\",\n                    preventDefault: !0,\n                    enabled: !0\n                }\n            };\n            return a;\n        }, this.setPreventKeyDefault = function(a, b) {\n            this.KEY_CODE_MAP[b.key].preventDefault = b.preventDefault;\n        }, this.toggleTextareaActions = function(a) {\n            this.KEY_CODE_MAP[13].enabled = a, this.KEY_CODE_MAP[38].enabled = a, this.KEY_CODE_MAP[40].enabled = a;\n        }, this.enableTextareaActionWatching = function() {\n            this.toggleTextareaActions(!0);\n        }, this.disableTextareaActionWatching = function() {\n            this.toggleTextareaActions(!1);\n        }, this.clearCurrentQuery = function(a) {\n            this.currentQuery = null;\n        }, this.focusInput = function(a) {\n            this.$input.JSBNG__focus();\n        }, this.click = function(a) {\n            this.updateCaretPosition();\n        }, this.updateCaretPosition = function() {\n            ((this.richTextareaMode || this.trigger(this.$input, \"uiTextChanged\", {\n                text: this.$input.val(),\n                position: caret.getPosition(this.$input[0])\n            })));\n        }, this.modifierKeyPressed = function(a) {\n            var b = this.KEY_CODE_MAP[((a.which || a.keyCode))], c = ((((((a.type == \"keydown\")) && ((a.which == 16)))) || ((((a.type == \"keyup\")) && ((a.which == 16))))));\n            if (((b && b.enabled))) {\n                if (((a.type !== b.JSBNG__on))) {\n                    return;\n                }\n            ;\n            ;\n                if (((((b.JSBNG__name == \"TAB\")) && a.shiftKey))) {\n                    return;\n                }\n            ;\n            ;\n                if (((this.releaseTabKey && ((b.JSBNG__name == \"TAB\"))))) {\n                    return;\n                }\n            ;\n            ;\n                ((b.preventDefault && a.preventDefault())), this.trigger(this.$input, b.JSBNG__event), ((((b.canCauseComplete && this.isValidCompletionAction(b.JSBNG__event))) && (((this.textareaMode || (this.releaseTabKey = !0))), this.trigger(this.$input, \"uiTypeaheadInputAutocomplete\")))), this.updateCaretPosition();\n            }\n             else {\n                if (((a.keyCode == 27))) {\n                    return;\n                }\n            ;\n            ;\n                ((c || (this.releaseTabKey = !1))), ((this.supportsInputEvent || this.handleInputChange(a)));\n            }\n        ;\n        ;\n        }, this.handleInputChange = function(a) {\n            ((this.richTextareaMode || (RTLText.onTextChange(a), this.trigger(this.$input, \"uiTextChanged\", {\n                text: this.$input.val(),\n                position: caret.getPosition(this.$input[0])\n            }))));\n        }, this.getCurrentWord = function() {\n            var a;\n            if (this.textareaMode) {\n                var b = twitterText.extractEntitiesWithIndices(this.text);\n                b.forEach(function(b) {\n                    ((((((((((b.screenName && !b.listSlug)) || ((this.attr.completeAllEntities && ((b.cashtag || b.hashtag)))))) && ((this.position > b.indices[0])))) && ((this.position <= b.indices[1])))) && (a = this.text.slice(b.indices[0], b.indices[1]))));\n                }, this);\n            }\n             else a = ((((this.text.trim() == \"\")) ? \"\" : this.text));\n        ;\n        ;\n            return a;\n        }, this.completeInput = function(a, b) {\n            var c = ((b.value || b.query)), d = ((((c !== this.currentQuery)) && ((((b.source != \"account\")) || ((b.item.screen_name !== this.currentQuery))))));\n            if (!d) {\n                return;\n            }\n        ;\n        ;\n            var e = c;\n            ((((b.source == \"account\")) && (e = ((((this.textareaMode ? \"@\" : \"\")) + b.item.screen_name)), this.currentQuery = b.item.screen_name)));\n            if (this.textareaMode) {\n                var f = this.replaceWordAtPosition(this.text, this.position, b.input, ((e + \" \")));\n                ((((!this.richTextareaMode || ((a.type == \"uiTypeaheadItemSelected\")))) && this.$input.JSBNG__focus())), this.$input.trigger(\"uiChangeTextAndPosition\", f);\n            }\n             else this.$input.val(e), ((((a.type != \"uiTypeaheadItemSelected\")) && (this.$input.JSBNG__focus(), this.setQuery(e))));\n        ;\n        ;\n            b.fromSelectionEvent = ((a.type == \"uiTypeaheadItemSelected\")), this.trigger(this.$input, \"uiTypeaheadItemComplete\", b);\n        }, this.replaceWordAtPosition = function(a, b, c, d) {\n            var e = null;\n            c = c.replace(UNSAFE_REGEX_CHARS, function(a) {\n                return ((\"\\\\\" + a));\n            });\n            var a = a.replace(new RegExp(((c + \"\\\\s?\")), \"g\"), function() {\n                var a = arguments[0], c = arguments[((arguments.length - 2))];\n                return ((((((c <= b)) && ((((c + a.length)) >= b)))) ? (e = ((c + d.length)), d) : a));\n            });\n            return {\n                text: a,\n                position: e\n            };\n        }, this.isValidCompletionAction = function(a) {\n            var b = ((this.$input.attr(\"dir\") === \"rtl\"));\n            return ((((!this.textareaMode || ((((a !== \"uiTypeaheadInputRight\")) && ((a !== \"uiTypeaheadInputLeft\")))))) ? ((((b && ((a === \"uiTypeaheadInputRight\")))) ? !1 : ((((!b && ((a === \"uiTypeaheadInputLeft\")))) ? !1 : ((((!this.text || ((((this.position != this.text.length)) && ((((a === \"uiTypeaheadInputRight\")) || ((b && ((a === \"uiTypeaheadInputLeft\")))))))))) ? !1 : !0)))))) : !1));\n        }, this.setQuery = function(a) {\n            var b;\n            a = ((a ? RTLText.cleanText(a) : \"\"));\n            if (((((this.currentQuery == null)) || ((this.currentQuery !== a))))) {\n                this.currentQuery = a, b = ((((a.length > 0)) ? 0 : -1)), this.$button.attr(\"tabIndex\", b);\n                var c = ((((this.attr.tweetContextEnabled && this.attr.includeTweetContext)) ? this.text : undefined));\n                this.trigger(this.$input, \"uiTypeaheadInputChanged\", {\n                    value: this.currentQuery,\n                    tweetContext: c\n                });\n            }\n        ;\n        ;\n        }, this.setRTLMarkers = function() {\n            RTLText.setText(this.$input.get(0));\n        }, this.clearInput = function() {\n            this.$input.val(\"\").JSBNG__blur(), this.$button.attr(\"tabIndex\", -1), this.releaseTabKey = !1;\n        }, this.saveTextAndPosition = function(a, b) {\n            if (((b.position == Number.MAX_VALUE))) {\n                return;\n            }\n        ;\n        ;\n            this.text = b.text, this.position = b.position;\n            var c = this.getCurrentWord();\n            this.setQuery(c);\n        }, this.after(\"initialize\", function() {\n            this.$input = this.select(\"inputSelector\"), this.textareaMode = !this.$input.is(\"input\"), this.richTextareaMode = this.$input.is(\".rich-editor\"), this.$button = this.select(\"buttonSelector\"), this.KEY_CODE_MAP = this.getDefaultKeycodes(), ((this.richTextareaMode && this.disableTextareaActionWatching())), this.supportsInputEvent = eventSupport.browserSupports(\"input\", \"input\"), this.$button.attr(\"tabIndex\", -1), this.JSBNG__on(this.$input, \"keyup keydown keypress paste\", this.modifierKeyPressed), this.JSBNG__on(this.$input, \"input\", this.handleInputChange), this.JSBNG__on(\"uiTypeaheadDeleteRecentSearch\", this.focusInput), this.JSBNG__on(this.$input, \"JSBNG__focus\", this.updateCaretPosition), this.JSBNG__on(\"uiTypeaheadSelectionCleared\", this.updateCaretPosition), ((this.$input.is(\":focus\") && this.updateCaretPosition())), this.JSBNG__on(this.$input, \"JSBNG__blur\", this.clearCurrentQuery), ((this.textareaMode && (this.JSBNG__on(this.$input, \"click\", this.click), this.JSBNG__on(\"uiTypeaheadResultsShown\", this.enableTextareaActionWatching), this.JSBNG__on(\"uiTypeaheadResultsHidden\", this.disableTextareaActionWatching)))), this.JSBNG__on(\"uiTextChanged\", this.saveTextAndPosition), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.clearInput), this.JSBNG__on(\"uiTypeaheadSetPreventDefault\", this.setPreventKeyDefault), this.JSBNG__on(JSBNG__document, \"uiSwiftLoaded uiPageChanged\", this.setRTLMarkers), this.JSBNG__on(\"uiTypeaheadItemPossiblyComplete uiTypeaheadItemSelected\", this.completeInput);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), caret = require(\"app/utils/caret\"), eventSupport = require(\"app/utils/event_support\"), stringUtils = require(\"app/utils/string\"), twitterText = require(\"lib/twitter-text\"), RTLText = require(\"app/utils/rtl_text\");\n    module.exports = defineComponent(typeaheadInput);\n    var UNSAFE_REGEX_CHARS = /[[\\]\\\\*?(){}.+$^]/g;\n});\ndefine(\"app/ui/with_click_outside\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withClickOutside() {\n        this.onClickOutside = function(a, b) {\n            b = b.bind(this), this.clickOutsideHandler = function(c, d) {\n                var e = !0;\n                a.each(function() {\n                    if ($(c.target).closest(this).length) {\n                        return e = !1, !1;\n                    }\n                ;\n                ;\n                }), ((e && b(c, d)));\n            }, $(JSBNG__document).JSBNG__on(\"click\", this.clickOutsideHandler);\n        }, this.offClickOutside = function() {\n            ((this.clickOutsideHandler && ($(JSBNG__document).off(\"click\", this.clickOutsideHandler), this.clickOutsideHandler = null)));\n        }, this.before(\"teardown\", function() {\n            this.offClickOutside();\n        });\n    };\n;\n    module.exports = withClickOutside;\n});\ndefine(\"app/ui/geo_picker\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/i18n\",\"app/ui/with_click_outside\",\"core/utils\",], function(module, require, exports) {\n    function geoPicker() {\n        this.defaultAttrs({\n            buttonSelector: \"button.geo-picker-btn\",\n            placeIdSelector: \"input[name=place_id]\",\n            statusSelector: \"span.geo-status\",\n            dropdownContainerSelector: \"span.dropdown-container\",\n            dropdownSelector: \"ul.dropdown-menu\",\n            dropdownDisabledSelector: \"#geo-disabled-dropdown\",\n            enableButtonSelector: \"button.geo-turn-on\",\n            notNowButtonSelector: \"button.geo-not-now\",\n            dropdownEnabledSelector: \"#geo-enabled-dropdown\",\n            querySelector: \"li.geo-query-location input\",\n            geoSearchSelector: \"li.geo-query-location i\",\n            dropdownStatusSelector: \"li.geo-dropdown-status\",\n            searchResultsSelector: \"li.geo-search-result\",\n            placeResultsSelector: \"li.geo-place-result\",\n            changePlaceSelector: \"li[data-place-id]\",\n            turnOffButtonSelector: \"li.geo-turn-off-item\",\n            focusableSelector: \"li.geo-focusable\",\n            firstFocusableSelector: \"li.geo-focusable:first\",\n            focusedSelector: \"li.geo-focused\"\n        }), this.selectGeoAction = function(a) {\n            if (this.dropdownIsOpen()) {\n                this.hideDropdownAndRestoreFocus();\n                return;\n            }\n        ;\n        ;\n            switch (this.geoState.state) {\n              case \"disabled\":\n            \n              case \"enableIsUnavailable\":\n                this.trigger(\"uiGeoPickerOffer\");\n                break;\n              case \"locateIsUnavailable\":\n            \n              case \"enabledTurnedOn\":\n                this.requestGeoState();\n                break;\n              case \"enabledTurnedOff\":\n                this.turnOn();\n                break;\n              case \"changing\":\n            \n              case \"locating\":\n            \n              case \"located\":\n            \n              case \"locationUnknown\":\n            \n              case \"locateIsUnavailable\":\n                this.trigger(\"uiGeoPickerOpen\");\n            };\n        ;\n        }, this.dropdownIsOpen = function() {\n            return this.select(\"dropdownSelector\").is(\":visible\");\n        }, this.hideDropdown = function() {\n            this.offClickOutside(), this.select(\"dropdownSelector\").hide(), this.select(\"buttonSelector\").removeClass(\"open\");\n        }, this.captureActiveEl = function() {\n            this.activeEl = JSBNG__document.activeElement;\n        }, this.hideDropdownAndRestoreFocus = function() {\n            this.hideDropdown(), ((this.activeEl && (this.activeEl.JSBNG__focus(), this.activeEl = null)));\n        }, this.openDropdown = function(a, b) {\n            var c, d;\n            ((((a.type == \"uiGeoPickerOpen\")) ? (c = this.attr.dropdownEnabledSelector, d = 1) : (c = this.attr.dropdownDisabledSelector, d = 0))), this.captureActiveEl(), ((((d != this.dropdownState)) && (this.select(\"dropdownContainerSelector\").html($(c).html()), this.dropdownState = d)));\n            var e = this.select(\"dropdownSelector\");\n            this.showGeoState(), this.onClickOutside(e.add(this.select(\"buttonSelector\")), this.hideDropdown), this.lastQuery = \"\", this.geoQueryFieldChanged = !1, e.show();\n            var f = this.select(\"enableButtonSelector\");\n            ((f.length || (f = this.select(\"querySelector\")))), this.select(\"buttonSelector\").addClass(\"open\"), f.JSBNG__focus();\n        }, this.enable = function() {\n            this.hideDropdownAndRestoreFocus(), this.trigger(\"uiGeoPickerEnable\");\n        }, this.setFocus = function(a) {\n            var b = $(a.target);\n            this.select(\"focusedSelector\").not(b).removeClass(\"geo-focused\"), b.addClass(\"geo-focused\");\n        }, this.clearFocus = function(a) {\n            $(a.target).removeClass(\"geo-focused\");\n        }, this.turnOn = function() {\n            this.trigger(\"uiGeoPickerTurnOn\");\n        }, this.turnOff = function() {\n            this.hideDropdownAndRestoreFocus(), this.trigger(\"uiGeoPickerTurnOff\");\n        }, this.changePlace = function(a) {\n            var b = $(a.target), c = b.attr(\"data-place-id\");\n            this.hideDropdownAndRestoreFocus();\n            if (((!c || ((c === this.lastPlaceId))))) {\n                return;\n            }\n        ;\n        ;\n            var d = {\n                placeId: c,\n                scribeData: {\n                    item_names: [c,]\n                }\n            };\n            ((this.lastPlaceId && d.scribeData.item_names.push(this.lastPlaceId))), ((((b.hasClass(\"geo-search-result\") && this.lastQueryData)) && (d.scribeData.query = this.lastQueryData.query))), this.trigger(\"uiGeoPickerChange\", d);\n        }, this.updateState = function(a, b) {\n            this.geoState = b, this.showGeoState();\n        }, this.showGeoState = function() {\n            var a = \"\", b = \"\", c = !1, d = \"\", e = this.geoState;\n            switch (e.state) {\n              case \"enabling\":\n            \n              case \"locating\":\n                a = _(\"Getting location...\");\n                break;\n              case \"enableIsUnavailable\":\n            \n              case \"locateIsUnavailable\":\n                a = _(\"Location service unavailable\");\n                break;\n              case \"changing\":\n                a = _(\"Changing location...\");\n                break;\n              case \"locationUnknown\":\n                a = _(\"Unknown location\");\n                break;\n              case \"located\":\n                a = e.place_name, b = e.place_id, d = e.places_html, c = !0;\n            };\n        ;\n            this.$node.toggleClass(\"active\", c), this.select(\"statusSelector\").text(a), this.select(\"buttonSelector\").attr(\"title\", ((a || _(\"Add location\")))), this.select(\"placeResultsSelector\").add(this.select(\"searchResultsSelector\")).remove(), this.select(\"dropdownStatusSelector\").text(a).toggle(!c).after(d), this.select(\"placeIdSelector\").val(b), this.lastPlaceId = b;\n        }, this.requestGeoState = function() {\n            this.trigger(\"uiRequestGeoState\");\n        }, this.queryKeyDown = function(a) {\n            switch (a.which) {\n              case 38:\n                a.preventDefault(), this.moveFocus(-1);\n                break;\n              case 40:\n                a.preventDefault(), this.moveFocus(1);\n                break;\n              case 13:\n                a.preventDefault();\n                var b = this.select(\"focusedSelector\");\n                if (b.length) {\n                    a.stopPropagation(), b.trigger(\"uiGeoPickerSelect\");\n                    return;\n                }\n            ;\n            ;\n                this.searchExactMatch();\n            };\n        ;\n            this.searchAutocomplete();\n        }, this.onEsc = function(a) {\n            if (!this.dropdownIsOpen()) {\n                return;\n            }\n        ;\n        ;\n            a.preventDefault(), a.stopPropagation(), this.hideDropdownAndRestoreFocus();\n        }, this.searchIfQueryChanged = function(a) {\n            var b = ((this.select(\"querySelector\").val() || \"\"));\n            if (((a && ((this.lastQuery === b))))) {\n                return;\n            }\n        ;\n        ;\n            this.lastIsPrefix = a, this.lastQuery = b, this.select(\"dropdownStatusSelector\").text(_(\"Searching places...\")).show(), ((this.geoQueryFieldChanged || (this.geoQueryFieldChanged = !0, this.trigger(\"uiGeoPickerInteraction\")))), this.trigger(\"uiGeoPickerSearch\", {\n                placeId: this.lastPlaceId,\n                query: b,\n                isPrefix: a\n            });\n        }, this.searchExactMatch = function() {\n            this.searchIfQueryChanged(!1);\n        }, this.searchAutocomplete = function() {\n            JSBNG__setTimeout(function() {\n                this.searchIfQueryChanged(!0);\n            }.bind(this), 0);\n        }, this.moveFocus = function(a) {\n            var b = this.select(\"focusedSelector\"), c = this.select(\"focusableSelector\"), d = ((c.index(b) + a)), e = ((c.length - 1));\n            ((((d < 0)) ? d = e : ((((d > e)) && (d = 0))))), b.removeClass(\"geo-focused\"), c.eq(d).addClass(\"geo-focused\");\n        }, this.searchResults = function(a, b) {\n            var c = b.sourceEventData;\n            if (((((((!c || ((c.placeId !== this.lastPlaceId)))) || ((c.query !== this.select(\"querySelector\").val())))) || ((c.isPrefix && !this.lastIsPrefix))))) {\n                return;\n            }\n        ;\n        ;\n            this.lastQueryData = c, this.select(\"searchResultsSelector\").remove(), this.select(\"dropdownStatusSelector\").hide().after(b.html);\n        }, this.searchUnavailable = function(a, b) {\n            this.select(\"dropdownStatusSelector\").text(_(\"Location service unavailable\")).show();\n        }, this.preventFocusLoss = function(a) {\n            var b;\n            (((($.browser.msie && ((parseInt($.browser.version, 10) < 9)))) ? (b = $(JSBNG__document.activeElement), ((b.is(this.select(\"buttonSelector\")) ? this.captureActiveEl() : b.one(\"beforedeactivate\", function(a) {\n                a.preventDefault();\n            })))) : a.preventDefault()));\n        }, this.after(\"initialize\", function() {\n            utils.push(this.attr, {\n                eventData: {\n                    scribeContext: {\n                        element: \"geo_picker\"\n                    }\n                }\n            }, !1), this.geoState = {\n            }, this.JSBNG__on(this.attr.parent, \"uiPrepareTweetBox\", this.requestGeoState), this.JSBNG__on(JSBNG__document, \"dataGeoState\", this.updateState), this.JSBNG__on(JSBNG__document, \"dataGeoSearchResults\", this.searchResults), this.JSBNG__on(JSBNG__document, \"dataGeoSearchResultsUnavailable\", this.searchUnavailable), this.JSBNG__on(\"mousedown\", {\n                buttonSelector: this.preventFocusLoss\n            }), this.JSBNG__on(\"click\", {\n                buttonSelector: this.selectGeoAction,\n                enableButtonSelector: this.enable,\n                notNowButtonSelector: this.hideDropdownAndRestoreFocus,\n                turnOffButtonSelector: this.turnOff,\n                geoSearchSelector: this.searchExactMatch,\n                changePlaceSelector: this.changePlace\n            }), this.JSBNG__on(\"uiGeoPickerSelect\", {\n                turnOffButtonSelector: this.turnOff,\n                changePlaceSelector: this.changePlace\n            }), this.JSBNG__on(\"mouseover\", {\n                focusableSelector: this.setFocus\n            }), this.JSBNG__on(\"mouseout\", {\n                focusableSelector: this.clearFocus\n            }), this.JSBNG__on(\"keydown\", {\n                querySelector: this.queryKeyDown\n            }), this.JSBNG__on(\"uiShortcutEsc\", this.onEsc), this.JSBNG__on(\"change paste\", {\n                querySelector: this.searchAutocomplete\n            }), this.JSBNG__on(\"uiGeoPickerOpen uiGeoPickerOffer\", this.openDropdown);\n        }), this.before(\"teardown\", function() {\n            this.hideDropdown();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), _ = require(\"core/i18n\"), withClickOutside = require(\"app/ui/with_click_outside\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(geoPicker, withClickOutside);\n});\ndefine(\"app/ui/tweet_box_manager\", [\"module\",\"require\",\"exports\",\"core/utils\",\"app/ui/tweet_box\",\"app/ui/tweet_box_thumbnails\",\"app/ui/image_selector\",\"app/ui/typeahead/typeahead_dropdown\",\"app/ui/typeahead/typeahead_input\",\"app/ui/geo_picker\",\"core/utils\",\"core/component\",], function(module, require, exports) {\n    function tweetBoxManager() {\n        this.createTweetBoxAtTarget = function(a, b) {\n            this.createTweetBox(a.target, b);\n        }, this.createTweetBox = function(a, b) {\n            var c = $(a);\n            if (!((((b.eventData || {\n            })).scribeContext || {\n            })).component) {\n                throw new Error(\"Please specify scribing component for tweet box.\");\n            }\n        ;\n        ;\n            ((((c.JSBNG__find(\".geo-picker\").length > 0)) && GeoPicker.attachTo(c.JSBNG__find(\".geo-picker\"), utils.merge(b, {\n                parent: c\n            }, !0)))), TweetBox.attachTo(c, utils.merge({\n                eventParams: {\n                    type: \"Tweet\"\n                }\n            }, b)), ((((c.JSBNG__find(\".photo-selector\").length > 0)) && (TweetBoxThumbnails.attachTo(c.JSBNG__find(\".thumbnail-container\"), utils.merge(b, !0)), ImageSelector.attachTo(c.JSBNG__find(\".photo-selector\"), utils.merge(b, !0))))), TypeaheadInput.attachTo(c, utils.merge(b, {\n                inputSelector: \"div.rich-editor, textarea.tweet-box\",\n                completeAllEntities: ((this.attr.typeaheadData.hashtags && this.attr.typeaheadData.hashtags.enabled)),\n                includeTweetContext: !0\n            })), TypeaheadDropdown.attachTo(c, utils.merge(b, {\n                inputSelector: \"div.rich-editor, textarea.tweet-box\",\n                blockLinkActions: !0,\n                includeSearchGlass: !1,\n                parseHashtags: !0,\n                datasourceRenders: [[\"accounts\",[\"accounts\",],],[\"topics\",[\"hashtags\",],],],\n                deciders: utils.merge(this.attr.typeaheadData, {\n                    showSocialContext: this.attr.typeaheadData.showTweetComposeAccountSocialContext\n                })\n            }));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiInitTweetbox\", this.createTweetBoxAtTarget);\n        });\n    };\n;\n    var utils = require(\"core/utils\"), TweetBox = require(\"app/ui/tweet_box\"), TweetBoxThumbnails = require(\"app/ui/tweet_box_thumbnails\"), ImageSelector = require(\"app/ui/image_selector\"), TypeaheadDropdown = require(\"app/ui/typeahead/typeahead_dropdown\"), TypeaheadInput = require(\"app/ui/typeahead/typeahead_input\"), GeoPicker = require(\"app/ui/geo_picker\"), utils = require(\"core/utils\"), defineComponent = require(\"core/component\"), TweetBoxManager = defineComponent(tweetBoxManager);\n    module.exports = TweetBoxManager;\n});\ndefine(\"app/boot/tweet_boxes\", [\"module\",\"require\",\"exports\",\"app/data/geo\",\"app/data/tweet\",\"app/ui/tweet_dialog\",\"app/ui/new_tweet_button\",\"app/data/tweet_box_scribe\",\"app/ui/tweet_box_manager\",], function(module, require, exports) {\n    function initialize(a) {\n        GeoData.attachTo(JSBNG__document, a), TweetData.attachTo(JSBNG__document, a), TweetDialog.attachTo(\"#global-tweet-dialog\"), NewTweetButton.attachTo(\"#global-new-tweet-button\", {\n            eventData: {\n                scribeContext: {\n                    component: \"top_bar\",\n                    element: \"tweet_button\"\n                }\n            }\n        }), TweetBoxScribe.attachTo(JSBNG__document, a), TweetBoxManager.attachTo(JSBNG__document, a);\n    };\n;\n    var GeoData = require(\"app/data/geo\"), TweetData = require(\"app/data/tweet\"), TweetDialog = require(\"app/ui/tweet_dialog\"), NewTweetButton = require(\"app/ui/new_tweet_button\"), TweetBoxScribe = require(\"app/data/tweet_box_scribe\"), TweetBoxManager = require(\"app/ui/tweet_box_manager\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/user_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dropdown\",\"app/utils/storage/core\",], function(module, require, exports) {\n    function userDropdown() {\n        this.defaultAttrs({\n            feedbackLinkSelector: \".feedback-callout-link\"\n        }), this.signout = function() {\n            storage.clearAll(), this.$signoutForm.submit();\n        }, this.showKeyboardShortcutsDialog = function(a, b) {\n            this.trigger(JSBNG__document, \"uiOpenKeyboardShortcutsDialog\"), a.preventDefault();\n        }, this.showConversationNotification = function(a, b) {\n            this.unreadThreads = b.threads, this.$node.addClass(this.attr.glowClass), this.$dmCount.addClass(this.attr.glowClass).text(b.threads.length);\n        }, this.openFeedbackDialog = function(a, b) {\n            this.closeDropdown(), this.trigger(\"uiPrepareFeedbackDialog\", {\n            });\n        }, this.updateConversationNotication = function(a, b) {\n            var c = $.inArray(b.recipient, this.unreadThreads);\n            if (((c === -1))) {\n                return;\n            }\n        ;\n        ;\n            this.unreadThreads.splice(c, 1);\n            var d = ((parseInt(this.$dmCount.text(), 10) - 1));\n            ((d ? this.$dmCount.text(d) : (this.$node.removeClass(this.attr.glowClass), this.$dmCount.removeClass(this.attr.glowClass).text(\"\"))));\n        }, this.after(\"initialize\", function() {\n            this.unreadThreads = [], this.$signoutForm = this.select(\"signoutForm\"), this.JSBNG__on(this.attr.keyboardShortcuts, \"click\", this.showKeyboardShortcutsDialog), this.JSBNG__on(this.attr.feedbackLinkSelector, \"click\", this.openFeedbackDialog), this.$dmCount = this.select(\"dmCount\"), this.JSBNG__on(this.attr.signout, \"click\", this.signout), this.JSBNG__on(JSBNG__document, \"uiDMDialogOpenedConversation\", this.updateConversationNotication), this.JSBNG__on(JSBNG__document, \"uiDMDialogHasNewConversations\", this.showConversationNotification), this.JSBNG__on(JSBNG__document, \"click\", this.close), this.JSBNG__on(JSBNG__document, \"uiNavigate\", this.close);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDropdown = require(\"app/ui/with_dropdown\"), storage = require(\"app/utils/storage/core\"), UserDropdown = defineComponent(userDropdown, withDropdown);\n    module.exports = UserDropdown;\n});\ndefine(\"app/ui/signin_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dropdown\",], function(module, require, exports) {\n    function signinDropdown() {\n        this.defaultAttrs({\n            toggler: \".js-session .dropdown-toggle\",\n            usernameSelector: \".email-input\"\n        }), this.focusUsername = function() {\n            this.select(\"usernameSelector\").JSBNG__focus();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiDropdownOpened\", this.focusUsername);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDropdown = require(\"app/ui/with_dropdown\"), SigninDropdown = defineComponent(signinDropdown, withDropdown);\n    module.exports = SigninDropdown;\n});\ndefine(\"app/ui/search_input\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function searchInput() {\n        this.defaultAttrs({\n            magnifyingGlassSelector: \".js-search-action\",\n            inputFieldSelector: \"#search-query\",\n            hintFieldSelector: \"#search-query-hint\",\n            query: \"\",\n            searchPathWithQuery: \"/search?q=query&src=typd\",\n            focusClass: \"JSBNG__focus\"\n        }), this.addFocusStyles = function(a) {\n            this.$node.addClass(this.attr.focusClass), this.$input.addClass(this.attr.focusClass), this.$hint.addClass(this.attr.focusClass), this.trigger(\"uiSearchInputFocused\");\n        }, this.removeFocusStyles = function(a) {\n            this.$node.removeClass(this.attr.focusClass), this.$input.removeClass(this.attr.focusClass), this.$hint.removeClass(this.attr.focusClass);\n        }, this.executeTypeaheadSelection = function(a, b) {\n            this.$input.val(b.display);\n            if (b.isClick) {\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiNavigate\", {\n                href: b.href\n            });\n        }, this.submitQuery = function(a, b) {\n            this.trigger(\"uiSearchQuery\", {\n                query: b.query,\n                source: \"search\"\n            }), this.trigger(\"uiNavigate\", {\n                href: this.attr.searchPathWithQuery.replace(\"query\", encodeURIComponent(b.query))\n            });\n        }, this.searchFormSubmit = function(a, b) {\n            a.preventDefault(), this.trigger(this.$input, \"uiTypeaheadInputSubmit\");\n        }, this.after(\"initialize\", function() {\n            this.$input = this.select(\"inputFieldSelector\"), this.$hint = this.select(\"hintFieldSelector\"), this.$input.val(this.attr.query), this.JSBNG__on(\"uiTypeaheadItemSelected\", this.executeTypeaheadSelection), this.JSBNG__on(\"uiTypeaheadSubmitQuery\", this.submitQuery), this.JSBNG__on(this.$input, \"JSBNG__focus\", this.addFocusStyles), this.JSBNG__on(this.$input, \"JSBNG__blur\", this.removeFocusStyles), this.JSBNG__on(\"submit\", this.searchFormSubmit), this.JSBNG__on(this.select(\"magnifyingGlassSelector\"), \"click\", this.searchFormSubmit);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(searchInput);\n});\ndefine(\"app/utils/animate_window_scrolltop\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function getScrollEl() {\n        return ((scrollEl ? scrollEl : ([JSBNG__document.body,JSBNG__document.documentElement,].forEach(function(a) {\n            var b = a.scrollTop;\n            a.scrollTop = ((b + 1)), ((((a.scrollTop == ((b + 1)))) && (scrollEl = a.tagName.toLowerCase(), a.scrollTop = b)));\n        }), scrollEl)));\n    };\n;\n    var scrollEl;\n    module.exports = function(a, b) {\n        $(getScrollEl()).animate({\n            scrollTop: a\n        }, b);\n    };\n});\ndefine(\"app/ui/global_nav\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/full_path\",\"app/utils/animate_window_scrolltop\",], function(module, require, exports) {\n    function globalNav() {\n        this.defaultAttrs({\n            activeClass: \"active\",\n            newClass: \"new\",\n            nav: \"li\",\n            meNav: \"li.profile\",\n            navLinkSelector: \"li \\u003E a\",\n            linkSelector: \"a\"\n        }), this.updateActive = function(a, b) {\n            ((b && (this.select(\"nav\").removeClass(this.attr.activeClass), this.select(\"nav\").filter(((((\"[data-global-action=\" + b.section)) + \"]\"))).addClass(this.attr.activeClass), this.removeGlowFromActive())));\n        }, this.addGlowToActive = function() {\n            this.$node.JSBNG__find(((\".\" + this.attr.activeClass))).addClass(this.attr.newClass);\n        }, this.addGlowToMe = function() {\n            this.select(\"meNav\").addClass(this.attr.newClass);\n        }, this.removeGlowFromActive = function() {\n            this.$node.JSBNG__find(((\".\" + this.attr.activeClass))).not(this.attr.meNav).removeClass(this.attr.newClass);\n        }, this.removeGlowFromMe = function() {\n            this.select(\"meNav\").removeClass(this.attr.newClass);\n        }, this.scrollToTopLink = function(a) {\n            var b = $(a.target).closest(this.attr.linkSelector);\n            ((((b.attr(\"href\") == fullPath())) && (a.preventDefault(), b.JSBNG__blur(), this.scrollToTop())));\n        }, this.scrollToTop = function() {\n            animateWinScrollTop(0, \"fast\"), this.trigger(JSBNG__document, \"uiGotoTopOfScreen\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiAddPageCount\", this.addGlowToActive), this.JSBNG__on(JSBNG__document, \"uiHasInjectedNewTimeline\", this.removeGlowFromActive), this.JSBNG__on(JSBNG__document, \"dataPageRefresh\", this.updateActive), this.JSBNG__on(JSBNG__document, \"dataUserHasUnreadDMs dataUserHasUnreadDMsWithCount\", this.addGlowToMe), this.JSBNG__on(JSBNG__document, \"dataUserHasNoUnreadDMs dataUserHasNoUnreadDMsWithCount\", this.removeGlowFromMe), this.JSBNG__on(\".bird-topbar-etched\", \"click\", this.scrollToTop), this.JSBNG__on(\"click\", {\n                navLinkSelector: this.scrollToTopLink\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), fullPath = require(\"app/utils/full_path\"), animateWinScrollTop = require(\"app/utils/animate_window_scrolltop\"), GlobalNav = defineComponent(globalNav);\n    module.exports = GlobalNav;\n});\ndefine(\"app/ui/navigation_links\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function navigationLinks() {\n        this.defaultAttrs({\n            navSelector: \"a[data-nav]\"\n        }), this.navEvent = function(a) {\n            var b = $(a.target).closest(\"a[data-nav]\");\n            this.trigger(\"uiNavigationLinkClick\", {\n                scribeContext: {\n                    element: b.attr(\"data-nav\")\n                },\n                url: b.attr(\"href\")\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(this.select(\"navSelector\"), \"click\", this.navEvent);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(navigationLinks);\n});\ndefine(\"app/data/search_input_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",\"app/utils/scribe_item_types\",], function(module, require, exports) {\n    function searchInputScribe() {\n        var a = {\n            account: function(a) {\n                var b = {\n                    message: a.input,\n                    items: [{\n                        id: a.query,\n                        item_type: itemTypes.user,\n                        position: a.index\n                    },],\n                    format_version: 2,\n                    event_info: ((a.item ? a.item.origin : undefined))\n                };\n                this.scribe(\"profile_click\", a, b);\n            },\n            search: function(b) {\n                if (((this.lastCompletion && ((b.query === this.lastCompletion.query))))) a.topics.call(this, this.lastCompletion);\n                 else {\n                    var c = {\n                        items: [{\n                            item_query: b.query,\n                            item_type: itemTypes.search\n                        },],\n                        format_version: 2\n                    };\n                    this.scribe(\"search\", b, c);\n                }\n            ;\n            ;\n            },\n            topics: function(a) {\n                var b = {\n                    message: a.input,\n                    items: [{\n                        item_query: a.query,\n                        item_type: itemTypes.search,\n                        position: a.index\n                    },],\n                    format_version: 2\n                };\n                this.scribe(\"search\", a, b);\n            },\n            account_search: function(a) {\n                this.scribe(\"people_search\", a, {\n                    query: a.input\n                });\n            },\n            saved_search: function(a) {\n                var b = {\n                    message: a.input,\n                    items: [{\n                        item_query: a.query,\n                        item_type: itemTypes.savedSearch,\n                        position: a.index\n                    },],\n                    format_version: 2\n                };\n                this.scribe(\"search\", a, b);\n            },\n            recent_search: function(a) {\n                var b = {\n                    message: a.input,\n                    items: [{\n                        item_query: a.query,\n                        item_type: itemTypes.search,\n                        position: a.index\n                    },],\n                    format_version: 2\n                };\n                this.scribe(\"search\", a, b);\n            }\n        };\n        this.storeCompletionData = function(a, b) {\n            ((((((a.type == \"uiTypeaheadItemSelected\")) || ((a.type == \"uiSearchQuery\")))) ? this.scribeSelection(a, b) : ((b.fromSelectionEvent || (this.lastCompletion = b)))));\n        }, this.scribeSelection = function(b, c) {\n            ((a[c.source] && a[c.source].call(this, c)));\n        }, this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiSearchInputFocused\", \"focus_field\"), this.JSBNG__on(\"uiTypeaheadItemComplete uiTypeaheadItemSelected uiSearchQuery\", this.storeCompletionData);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), itemTypes = require(\"app/utils/scribe_item_types\");\n    module.exports = defineComponent(searchInputScribe, withScribe);\n});\ndefine(\"app/boot/top_bar\", [\"module\",\"require\",\"exports\",\"app/boot/tweet_boxes\",\"app/ui/user_dropdown\",\"app/ui/signin_dropdown\",\"app/ui/search_input\",\"app/ui/global_nav\",\"app/ui/navigation_links\",\"app/ui/typeahead/typeahead_dropdown\",\"app/ui/typeahead/typeahead_input\",\"app/data/search_input_scribe\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a) {\n        GlobalNav.attachTo(\"#global-actions\", {\n            noTeardown: !0\n        }), SearchInput.attachTo(\"#global-nav-search\", utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"top_bar_searchbox\",\n                    element: \"\"\n                }\n            }\n        })), SearchInputScribe.attachTo(\"#global-nav-search\", {\n            noTeardown: !0\n        });\n        var b = [[\"contextHelpers\",[\"contextHelpers\",],],[\"recentSearches\",[\"recentSearches\",],],[\"savedSearches\",[\"savedSearches\",],],[\"topics\",[\"topics\",],],[\"accounts\",[\"accounts\",],],];\n        ((a.typeaheadData.accountsOnTop && (b = [[\"contextHelpers\",[\"contextHelpers\",],],[\"recentSearches\",[\"recentSearches\",],],[\"savedSearches\",[\"savedSearches\",],],[\"accounts\",[\"accounts\",],],[\"topics\",[\"topics\",],],]))), TypeaheadInput.attachTo(\"#global-nav-search\"), TypeaheadDropdown.attachTo(\"#global-nav-search\", {\n            datasourceRenders: b,\n            accountsShortcutShow: !0,\n            autocompleteAccounts: !1,\n            deciders: utils.merge(a.typeaheadData, {\n                showSocialContext: a.typeaheadData.showSearchAccountSocialContext\n            }),\n            eventData: {\n                scribeContext: {\n                    component: \"top_bar_searchbox\",\n                    element: \"typeahead\"\n                }\n            }\n        }), ((a.loggedIn ? (tweetBoxes(a), UserDropdown.attachTo(\"#user-dropdown\", {\n            noTeardown: !0,\n            signout: \"#signout-button\",\n            signoutForm: \"#signout-form\",\n            toggler: \"#user-dropdown-toggle\",\n            keyboardShortcuts: \".js-keyboard-shortcut-trigger\",\n            dmCount: \".js-direct-message-count\",\n            glowClass: \"new\"\n        })) : SigninDropdown.attachTo(\".js-session\"))), NavigationLinks.attachTo(\".global-nav\", {\n            noTeardown: !0,\n            eventData: {\n                scribeContext: {\n                    component: \"top_bar\"\n                }\n            }\n        });\n    };\n;\n    var tweetBoxes = require(\"app/boot/tweet_boxes\"), UserDropdown = require(\"app/ui/user_dropdown\"), SigninDropdown = require(\"app/ui/signin_dropdown\"), SearchInput = require(\"app/ui/search_input\"), GlobalNav = require(\"app/ui/global_nav\"), NavigationLinks = require(\"app/ui/navigation_links\"), TypeaheadDropdown = require(\"app/ui/typeahead/typeahead_dropdown\"), TypeaheadInput = require(\"app/ui/typeahead/typeahead_input\"), SearchInputScribe = require(\"app/data/search_input_scribe\"), utils = require(\"core/utils\");\n    module.exports = initialize;\n});\ndefine(\"app/ui/keyboard_shortcuts\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",], function(module, require, exports) {\n    function keyBoardShortcuts() {\n        this.shortcutEvents = {\n            f: \"uiShortcutFavorite\",\n            r: \"uiShortcutReply\",\n            t: \"uiShortcutRetweet\",\n            b: \"uiShortcutBlock\",\n            u: \"uiShortcutUnblock\",\n            j: \"uiShortcutSelectNext\",\n            k: \"uiShortcutSelectPrev\",\n            l: \"uiShortcutCloseAll\",\n            \".\": \"uiShortcutGotoTopOfScreen\",\n            \"/\": {\n                type: \"uiShortcutGotoSearch\",\n                defaultFn: \"focusSearch\"\n            },\n            X: {\n                type: \"uiShortcutEsc\",\n                defaultFn: \"blurTextField\"\n            },\n            E: \"uiShortcutEnter\",\n            \"\\u003C\": \"uiShortcutLeft\",\n            \"\\u003E\": \"uiShortcutRight\",\n            m: \"uiOpenNewDM\",\n            n: \"uiShortcutShowTweetbox\",\n            gu: \"uiShortcutShowGotoUser\",\n            gm: \"uiNeedsDMDialog\",\n            sp: \"uiShortcutShowSearchPhotos\",\n            sv: \"uiShortcutShowSearchVideos\",\n            \"?\": \"uiOpenKeyboardShortcutsDialog\"\n        }, this.routes = {\n            JSBNG__home: \"/\",\n            activity: \"/activity\",\n            connect: \"/i/connect\",\n            mentions: \"/mentions\",\n            discover: \"/i/discover\",\n            profile: \"/\",\n            favorites: \"/favorites\",\n            settings: \"/settings/account\",\n            lists: \"/lists\"\n        }, this.routeShortcuts = {\n            gh: \"JSBNG__home\",\n            ga: \"activity\",\n            gc: \"connect\",\n            gr: \"mentions\",\n            gd: \"discover\",\n            gp: \"profile\",\n            gf: \"favorites\",\n            gs: \"settings\",\n            gl: \"lists\"\n        }, this.lastKey = \"\", this.defaultAttrs({\n            globalSearchBoxSelector: \"#search-query\"\n        }), this.isModifier = function(a) {\n            return !!((((((a.shiftKey || a.metaKey)) || a.ctrlKey)) || a.altKey));\n        }, this.charFromKeyCode = function(a, b) {\n            return ((((b && shiftKeyMap[a])) ? shiftKeyMap[a] : ((keyMap[a] || String.fromCharCode(a).toLowerCase()))));\n        }, this.isTextField = function(a) {\n            if (((!a || !a.tagName))) {\n                return !1;\n            }\n        ;\n        ;\n            var b = a.tagName.toLowerCase();\n            if (((((b == \"textarea\")) || a.getAttribute(\"contenteditable\")))) {\n                return !0;\n            }\n        ;\n        ;\n            if (((b != \"input\"))) {\n                return !1;\n            }\n        ;\n        ;\n            var c = ((a.getAttribute(\"type\") || \"text\")).toLowerCase();\n            return textInputs[c];\n        }, this.isWhiteListedElement = function(a) {\n            var b = a.tagName.toLowerCase();\n            if (whiteListedElements[b]) {\n                return !0;\n            }\n        ;\n        ;\n            if (((b != \"input\"))) {\n                return !1;\n            }\n        ;\n        ;\n            var c = a.getAttribute(\"type\").toLowerCase();\n            return whiteListedInputs[c];\n        }, this.triggerShortcut = function(a) {\n            var b = this.charFromKeyCode(((a.keyCode || a.which)), a.shiftKey), c, d, e, f = ((this.shortcutEvents[((this.lastKey + b))] || this.shortcutEvents[b])), g = {\n                fromShortcut: !0\n            };\n            if (((f && ((b != this.lastKey))))) {\n                a.preventDefault(), ((((typeof f == \"string\")) ? c = f : (c = f.type, e = f.defaultFn, ((f.data && (g = utils.merge(g, f.data))))))), ((e && (d = {\n                    type: c,\n                    defaultBehavior: function() {\n                        this[e](a, g);\n                    }\n                }))), this.trigger(a.target, ((d || c)), g), this.lastKey = \"\";\n                return;\n            }\n        ;\n        ;\n            JSBNG__setTimeout(function() {\n                this.lastKey = \"\";\n            }.bind(this), 5000), this.lastKey = b;\n        }, this.onKeyDown = function(a) {\n            var b = a.keyCode, c = ((b == 13)), d = a.target;\n            if (((((((b != 27)) && this.isTextField(d))) || ((this.isModifier(a) && ((c || !shiftKeyMap[a.keyCode]))))))) {\n                return;\n            }\n        ;\n        ;\n            if (((c && this.isWhiteListedElement(d)))) {\n                return;\n            }\n        ;\n        ;\n            this.triggerShortcut(a);\n        }, this.blurTextField = function(a) {\n            var b = a.target;\n            ((this.isTextField(b) && b.JSBNG__blur()));\n        }, this.focusSearch = function(a) {\n            this.select(\"globalSearchBoxSelector\").JSBNG__focus();\n        }, this.navigateTo = function(a, b) {\n            this.trigger(\"uiNavigate\", {\n                href: b.href\n            });\n        }, this.createNavEventName = function(a) {\n            return ((((UI_SHORTCUT_NAVIGATE + a[0].toUpperCase())) + a.slice(1)));\n        }, this.createNavigationShortcuts = function() {\n            Object.keys(this.routeShortcuts).forEach(function(a) {\n                var b = this.routeShortcuts[a];\n                this.shortcutEvents[a] = {\n                    type: this.createNavEventName(b),\n                    data: {\n                        href: this.routes[b]\n                    },\n                    defaultFn: \"navigateTo\"\n                };\n            }, this);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"keydown\", this.onKeyDown), ((this.attr.routes && utils.push(this.routes, this.attr.routes))), this.createNavigationShortcuts();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), keyMap = {\n        13: \"E\",\n        27: \"X\",\n        191: \"/\",\n        190: \".\",\n        37: \"\\u003C\",\n        39: \"\\u003E\"\n    }, shiftKeyMap = {\n        191: \"?\"\n    }, whiteListedElements = {\n        button: !0,\n        a: !0\n    }, whiteListedInputs = {\n        button: !0,\n        submit: !0,\n        file: !0\n    }, textInputs = {\n        password: !0,\n        text: !0,\n        email: !0\n    }, UI_SHORTCUT_NAVIGATE = \"uiShortcutNavigate\", KeyBoardShortcuts = defineComponent(keyBoardShortcuts);\n    module.exports = KeyBoardShortcuts;\n});\nprovide(\"app/ui/dialogs/keyboard_shortcuts_dialog\", function(a) {\n    using(\"core/component\", \"app/ui/with_dialog\", \"app/ui/with_position\", function(b, c, d) {\n        function f() {\n            this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", this.close), this.JSBNG__on(JSBNG__document, \"uiOpenKeyboardShortcutsDialog\", this.open);\n            });\n        };\n    ;\n        var e = b(f, c, d);\n        a(e);\n    });\n});\ndefine(\"app/ui/dialogs/with_modal_tweet\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withModalTweet() {\n        this.defaultAttrs({\n            modalTweetSelector: \".modal-tweet\"\n        }), this.addTweet = function(a) {\n            this.select(\"modalTweetSelector\").show(), this.select(\"modalTweetSelector\").empty().append(a);\n        }, this.removeTweet = function() {\n            this.select(\"modalTweetSelector\").hide().empty();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiDialogClosed\", this.removeTweet);\n        });\n    };\n;\n    module.exports = withModalTweet;\n});\nprovide(\"app/ui/dialogs/retweet_dialog\", function(a) {\n    using(\"core/component\", \"app/ui/with_dialog\", \"app/ui/with_position\", \"app/ui/dialogs/with_modal_tweet\", function(b, c, d, e) {\n        function g() {\n            this.defaults = {\n                cancelSelector: \".cancel-action\",\n                retweetSelector: \".retweet-action\"\n            }, this.openRetweet = function(a, b) {\n                this.attr.sourceEventData = b, this.removeTweet(), this.addTweet($(a.target).clone()), this.open();\n            }, this.retweet = function() {\n                this.trigger(\"uiDidRetweet\", this.attr.sourceEventData);\n            }, this.retweetSuccess = function(a, b) {\n                this.trigger(\"uiDidRetweetSuccess\", this.attr.sourceEventData), this.close();\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", {\n                    cancelSelector: this.close,\n                    retweetSelector: this.retweet\n                }), this.JSBNG__on(JSBNG__document, \"uiOpenRetweetDialog\", this.openRetweet), this.JSBNG__on(JSBNG__document, \"dataDidRetweet\", this.retweetSuccess);\n            });\n        };\n    ;\n        var f = b(g, c, d, e);\n        a(f);\n    });\n});\nprovide(\"app/ui/dialogs/delete_tweet_dialog\", function(a) {\n    using(\"core/component\", \"app/ui/with_dialog\", \"app/ui/with_position\", \"app/ui/dialogs/with_modal_tweet\", function(b, c, d, e) {\n        function g() {\n            this.defaults = {\n                cancelSelector: \".cancel-action\",\n                deleteSelector: \".delete-action\"\n            }, this.openDeleteTweet = function(a, b) {\n                this.attr.sourceEventData = b, this.addTweet($(a.target).clone()), this.id = b.id, this.open();\n            }, this.deleteTweet = function() {\n                this.trigger(\"uiDidDeleteTweet\", {\n                    id: this.id,\n                    sourceEventData: this.attr.sourceEventData\n                });\n            }, this.deleteTweetSuccess = function(a, b) {\n                this.trigger(\"uiDidDeleteTweetSuccess\", this.attr.sourceEventData), this.close();\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", {\n                    cancelSelector: this.close,\n                    deleteSelector: this.deleteTweet\n                }), this.JSBNG__on(JSBNG__document, \"uiOpenDeleteDialog\", this.openDeleteTweet), this.JSBNG__on(JSBNG__document, \"dataDidDeleteTweet\", this.deleteTweetSuccess);\n            });\n        };\n    ;\n        var f = b(g, c, d, e);\n        a(f);\n    });\n});\nprovide(\"app/ui/dialogs/block_user_dialog\", function(a) {\n    using(\"core/component\", \"app/ui/with_dialog\", \"app/ui/with_position\", \"app/ui/dialogs/with_modal_tweet\", function(b, c, d, e) {\n        function g() {\n            this.defaults = {\n                cancelSelector: \".cancel-action\",\n                blockSelector: \".block-action\",\n                timeSelector: \".time\",\n                dogearSelector: \".dogear\",\n                tweetTextSelector: \".js-tweet-text\"\n            }, this.openBlockUser = function(a, b) {\n                this.attr.sourceEventData = b, this.addTweet($(a.target.children[0]).clone()), this.cleanUpTweet(), this.open();\n            }, this.cleanUpTweet = function() {\n                this.$node.JSBNG__find(this.attr.timeSelector).remove(), this.$node.JSBNG__find(this.attr.dogearSelector).remove(), this.$node.JSBNG__find(this.attr.tweetTextSelector).remove();\n            }, this.blockUser = function() {\n                this.trigger(\"uiDidBlockUser\", {\n                    sourceEventData: this.attr.sourceEventData\n                }), this.close();\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(\"click\", {\n                    cancelSelector: this.close,\n                    blockSelector: this.blockUser\n                }), this.JSBNG__on(JSBNG__document, \"uiOpenBlockUserDialog\", this.openBlockUser);\n            });\n        };\n    ;\n        var f = b(g, c, d, e);\n        a(f);\n    });\n});\nprovide(\"app/ui/dialogs/confirm_dialog\", function(a) {\n    using(\"core/component\", \"app/ui/with_dialog\", \"app/ui/with_position\", \"app/utils/with_event_params\", function(b, c, d, e) {\n        function g() {\n            this.defaultAttrs({\n                titleSelector: \".modal-title\",\n                modalBodySelector: \".modal-body\",\n                bodySelector: \".modal-body-text\",\n                cancelSelector: \"#confirm_dialog_cancel_button\",\n                submitSelector: \"#confirm_dialog_submit_button\"\n            }), this.openWithOptions = function(a, b) {\n                this.attr.eventParams = {\n                    action: b.action\n                }, this.attr.JSBNG__top = b.JSBNG__top, this.select(\"titleSelector\").text(b.titleText), ((b.bodyText ? (this.select(\"bodySelector\").text(b.bodyText), this.select(\"modalBodySelector\").show()) : this.select(\"modalBodySelector\").hide())), this.select(\"cancelSelector\").text(b.cancelText), this.select(\"submitSelector\").text(b.submitText), this.open();\n            }, this.submit = function(a, b) {\n                this.trigger(\"ui{{action}}Confirm\");\n            }, this.cancel = function(a, b) {\n                this.trigger(\"ui{{action}}Cancel\");\n            }, this.after(\"initialize\", function() {\n                this.JSBNG__on(JSBNG__document, \"uiOpenConfirmDialog\", this.openWithOptions), this.JSBNG__on(this.select(\"submitSelector\"), \"click\", this.submit), this.JSBNG__on(this.select(\"submitSelector\"), \"click\", this.close), this.JSBNG__on(this.select(\"cancelSelector\"), \"click\", this.cancel), this.JSBNG__on(this.select(\"cancelSelector\"), \"click\", this.close), this.JSBNG__on(\"uiDialogCloseRequested\", this.cancel);\n            });\n        };\n    ;\n        var f = b(g, c, d, e);\n        a(f);\n    });\n});\ndefine(\"app/ui/dialogs/confirm_email_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function confirmEmailDialog() {\n        this.defaultAttrs({\n            resendConfirmationEmailLinkSelector: \".resend-confirmation-email-link\"\n        }), this.resendConfirmationEmail = function() {\n            this.trigger(\"uiResendConfirmationEmail\"), this.close();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiOpenConfirmEmailDialog\", this.open), this.JSBNG__on(JSBNG__document, \"dataResendConfirmationEmailSuccess\", this.close), this.JSBNG__on(\"click\", {\n                resendConfirmationEmailLinkSelector: this.resendConfirmationEmail\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\");\n    module.exports = defineComponent(confirmEmailDialog, withDialog, withPosition);\n});\ndefine(\"app/ui/dialogs/list_membership_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function listMembershipDialog() {\n        this.defaultAttrs({\n            JSBNG__top: 90,\n            contentSelector: \".list-membership-content\",\n            createListSelector: \".create-a-list\",\n            membershipSelector: \".list-membership-container li\"\n        }), this.openListMembershipDialog = function(a, b) {\n            this.userId = b.userId, ((this.userId && this.trigger(\"uiNeedsListMembershipContent\", {\n                userId: this.userId\n            }))), this.$content.empty(), this.$node.removeClass(\"has-content\"), this.open();\n        }, this.addListMembershipContent = function(a, b) {\n            this.$node.addClass(\"has-content\"), this.$content.html(b.html);\n        }, this.handleNoListMembershipContent = function(a, b) {\n            this.close(), this.trigger(\"uiShowError\", b);\n        }, this.toggleListMembership = function(a, b) {\n            var c = $(a.target), d = {\n                userId: c.closest(\"[data-user-id]\").attr(\"data-user-id\"),\n                listId: c.closest(\"[data-list-id]\").attr(\"data-list-id\")\n            }, e = $(((\"#list_\" + d.listId)));\n            if (!e.is(\":visible\")) {\n                return;\n            }\n        ;\n        ;\n            e.closest(this.attr.membershipSelector).addClass(\"pending\"), ((e.data(\"is-checked\") ? this.trigger(\"uiRemoveUserFromList\", d) : this.trigger(\"uiAddUserToList\", d)));\n        }, this.updateMembershipState = function(a) {\n            return function(b, c) {\n                var d = $(((\"#list_\" + c.sourceEventData.listId)));\n                d.closest(this.attr.membershipSelector).removeClass(\"pending\"), d.attr(\"checked\", ((a ? \"checked\" : null))), d.data(\"is-checked\", a), d.attr(\"data-is-checked\", a);\n            }.bind(this);\n        }, this.openListCreateDialog = function() {\n            this.close(), this.trigger(\"uiOpenCreateListDialog\", {\n                userId: this.userId\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.$content = this.select(\"contentSelector\"), this.JSBNG__on(\"click\", {\n                createListSelector: this.openListCreateDialog,\n                membershipSelector: this.toggleListMembership\n            }), this.JSBNG__on(JSBNG__document, \"uiListAction uiOpenListMembershipDialog\", this.openListMembershipDialog), this.JSBNG__on(JSBNG__document, \"dataGotListMembershipContent\", this.addListMembershipContent), this.JSBNG__on(JSBNG__document, \"dataFailedToGetListMembershipContent\", this.handleNoListMembershipContent), this.JSBNG__on(JSBNG__document, \"dataDidAddUserToList dataFailedToRemoveUserFromList\", this.updateMembershipState(!0)), this.JSBNG__on(JSBNG__document, \"dataDidRemoveUserFromList dataFailedToAddUserToList\", this.updateMembershipState(!1));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), ListMembershipDialog = defineComponent(listMembershipDialog, withDialog, withPosition);\n    module.exports = ListMembershipDialog;\n});\ndefine(\"app/ui/dialogs/list_operations_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",\"core/i18n\",\"core/utils\",], function(module, require, exports) {\n    function listOperationsDialog() {\n        this.defaultAttrs({\n            JSBNG__top: 90,\n            win: window,\n            saveListSelector: \".update-list-button\",\n            editorSelector: \".list-editor\",\n            nameInputSelector: \".list-editor input[name='name']\",\n            descriptionSelector: \".list-editor textarea[name='description']\",\n            privacySelector: \".list-editor input[name='mode']\",\n            modalTitleSelector: \".modal-title\"\n        }), this.openListOperationsDialog = function(a, b) {\n            this.userId = b.userId, ((((a.type == \"uiOpenUpdateListDialog\")) && this.modifyDialog())), this.open(), this.$nameInput.JSBNG__focus();\n        }, this.modifyDialog = function() {\n            this.$modalTitle = this.select(\"modalTitleSelector\"), this.originalTitle = ((this.originalTitle || this.$modalTitle.text())), this.$modalTitle.text(_(\"Edit list details\")), this.$nameInput.val($(\".follow-card h1.js-list-name\").text()), this.$descriptionInput.val($(\".follow-card p.bio\").text()), ((this.attr.is_public || (this.$privacyInput[1].checked = !0))), this.$saveButton.attr(\"data-list-id\", this.attr.list_id).attr(\"data-operation\", \"update\"), this.toggleSaveButtonDisabled(), this.modified = !0;\n        }, this.revertModifications = function() {\n            ((this.modified && (this.revertDialog(), this.$editor.JSBNG__find(\"input,textarea\").val(\"\"), this.modified = !1)));\n        }, this.revertDialog = function() {\n            this.$modalTitle.text(this.originalTitle), this.$saveButton.removeAttr(\"data-list-id\").removeAttr(\"data-operation\"), ((this.attr.is_public || (this.$privacyInput[0].checked = !0)));\n        }, this.saveList = function(a, b) {\n            if (this.requestInProgress) {\n                return;\n            }\n        ;\n        ;\n            this.requestInProgress = !0;\n            var c = $(b.el), d = ((((c.attr(\"data-operation\") == \"update\")) ? \"uiUpdateList\" : \"uiCreateList\")), e = {\n                JSBNG__name: this.formValue(\"JSBNG__name\"),\n                description: this.formValue(\"description\", {\n                    type: \"textarea\"\n                }),\n                mode: this.formValue(\"mode\", {\n                    conditions: \":checked\"\n                })\n            };\n            ((((c.attr(\"data-operation\") == \"update\")) && (e = utils.merge(e, {\n                list_id: c.attr(\"data-list-id\")\n            })))), this.trigger(d, e), this.$saveButton.attr(\"disabled\", !0);\n        }, this.saveListSuccess = function(a, b) {\n            this.close();\n            var c = _(\"List saved!\");\n            ((((a.type == \"dataDidCreateList\")) ? (c = _(\"List created!\"), ((this.userId ? this.trigger(\"uiOpenListMembershipDialog\", {\n                userId: this.userId\n            }) : ((((b && b.slug)) && (this.attr.win.JSBNG__location = ((((((\"/\" + this.attr.screenName)) + \"/\")) + b.slug)))))))) : this.revertDialog())), this.$editor.JSBNG__find(\"input,textarea\").val(\"\"), this.trigger(\"uiShowMessage\", {\n                message: c\n            });\n        }, this.saveListComplete = function(a, b) {\n            this.requestInProgress = !1, this.toggleSaveButtonDisabled();\n        }, this.toggleSaveButtonDisabled = function(a, b) {\n            this.$saveButton.attr(\"disabled\", ((this.$nameInput.val() == \"\")));\n        }, this.formValue = function(a, b) {\n            return b = ((b || {\n            })), b.type = ((b.type || \"input\")), b.conditions = ((b.conditions || \"\")), this.$editor.JSBNG__find(((((((((b.type + \"[name='\")) + a)) + \"']\")) + b.conditions))).val();\n        }, this.disableSaveButton = function() {\n            this.$saveButton.attr(\"disabled\", !0);\n        }, this.after(\"initialize\", function(a) {\n            this.$editor = this.select(\"editorSelector\"), this.$nameInput = this.select(\"nameInputSelector\"), this.$descriptionInput = this.select(\"descriptionSelector\"), this.$privacyInput = this.select(\"privacySelector\"), this.$saveButton = this.select(\"saveListSelector\"), this.JSBNG__on(\"click\", {\n                saveListSelector: this.saveList\n            }), this.JSBNG__on(\"focus blur keyup\", {\n                nameInputSelector: this.toggleSaveButtonDisabled\n            }), this.JSBNG__on(\"uiDialogOpened\", this.disableSaveButton), this.JSBNG__on(\"uiDialogClosed\", this.revertModifications), this.JSBNG__on(JSBNG__document, \"uiOpenCreateListDialog uiOpenUpdateListDialog\", this.openListOperationsDialog), this.JSBNG__on(JSBNG__document, \"dataDidCreateList dataDidUpdateList\", this.saveListSuccess), this.JSBNG__on(JSBNG__document, \"dataDidCreateList dataDidUpdateList dataFailedToCreateList dataFailedToUpdateList\", this.saveListComplete);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), _ = require(\"core/i18n\"), utils = require(\"core/utils\"), ListOperationsDialog = defineComponent(listOperationsDialog, withDialog, withPosition);\n    module.exports = ListOperationsDialog;\n});\ndefine(\"app/data/direct_messages\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/data/with_auth_token\",\"app/utils/storage/core\",\"app/utils/string\",], function(module, require, exports) {\n    function directMessages() {\n        var a = 0;\n        this.defaultAttrs({\n            noShowError: !0,\n            lastReadMessageIdKey: \"lastReadMessageId\",\n            latestMarkedIdKey: \"lastMarkedMessageId\",\n            oldestUnreadIdKey: \"oldestUnreadMessageId\"\n        }), this.pollConversationList = function(a, b) {\n            this.requestConversationList(null, {\n                since_id: this.lastMessageId\n            });\n        }, this.storeMessageId = function(a, b) {\n            ((this.attr.dmReadStateSync ? (((b.last_read_id && this.saveLastReadId(b.last_read_id))), ((b.oldest_unread_dm_id && this.saveOldestUnreadDMId(b.oldest_unread_dm_id)))) : this.saveLastReceivedId(b.last_message_id)));\n        }, this.saveLastReceivedId = function(a) {\n            this.storage.setItem(this.attr.lastReadMessageIdKey, a), this.trigger(\"dataUserHasNoUnreadDMs\");\n        }, this.saveLastReadId = function(a) {\n            var b = this.attr.latestMarkedIdKey, c = this.storage.getItem(b);\n            ((((!c || ((StringUtils.compare(a, c) == 1)))) && this.storage.setItem(b, a)));\n        }, this.saveOldestUnreadDMId = function(a) {\n            this.storage.setItem(this.attr.oldestUnreadIdKey, a);\n        }, this.requestConversationList = function(a, b) {\n            this.get({\n                url: \"/messages\",\n                data: b,\n                eventData: b,\n                success: \"dataDMConversationListResult\",\n                error: \"dataDMError\"\n            });\n        }, this.requestConversation = function(a, b) {\n            this.get({\n                url: ((\"/messages/with/\" + b.screen_name)),\n                data: {\n                },\n                eventData: b,\n                success: \"dataDMConversationResult\",\n                error: \"dataDMError\"\n            });\n        }, this.sendMessage = function(a, b) {\n            var c = function(a) {\n                a.msgAction = \"send\", this.trigger(\"dataDMSuccess\", a);\n            };\n            this.post({\n                url: \"/direct_messages/new\",\n                data: b,\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataDMError\"\n            });\n        }, this.deleteMessage = function(a, b) {\n            var c = function(a) {\n                a.msgAction = \"delete\", this.trigger(\"dataDMSuccess\", a);\n            };\n            this.post({\n                url: \"/direct_messages/destroy\",\n                data: b,\n                eventData: b,\n                success: c.bind(this),\n                error: \"dataDMError\"\n            });\n        }, this.triggerUnreadCount = function(b, c) {\n            if (!this.attr.dmReadStateSync) {\n                return;\n            }\n        ;\n        ;\n            a = c.msgCount, ((((a > 0)) ? this.trigger(\"dataUserHasUnreadDMsWithCount\", {\n                msgCount: a\n            }) : this.trigger(\"dataUserHasNoUnreadDMsWithCount\")));\n        }, this.dispatchUnreadNotification = function(a, b) {\n            if (((!b || !b.d))) {\n                return;\n            }\n        ;\n        ;\n            var c = b.d, d = this.attr.lastReadMessageIdKey, e = this.storage.getItem(d);\n            if (e) {\n                this.storage.removeItem(d), this.markOldDmsAsRead(!1, e);\n                return;\n            }\n        ;\n        ;\n            ((((((c.JSBNG__status === \"ok\")) && ((c.response != null)))) && this.triggerUnreadCount(null, {\n                msgCount: c.response\n            })));\n        }, this.markOldDmsAsRead = function(a, b) {\n            if (((!a || ((StringUtils.compare(a, b) != 0))))) {\n                this.trigger(\"dataMarkDMsAsRead\", {\n                    last_message_id: b,\n                    implicitMark: !0\n                }), this.saveLastReadId(b);\n            }\n        ;\n        ;\n        }, this.checkLastReadDM = function(a, b) {\n            var c = this.attr.latest_incoming_direct_message_id, d = this.storage.getItem(this.attr.lastReadMessageIdKey), e = this.storage.getItem(this.attr.latestMarkedIdKey);\n            ((d ? (((((c && ((StringUtils.compare(c, d) > 0)))) && this.trigger(\"dataUserHasUnreadDMs\"))), ((((!this.attr.dmReadStateSync && this.attr.mark_old_dms_read)) && this.markOldDmsAsRead(e, d)))) : ((c && (this.saveLastReceivedId(c), this.saveLastReadId(c))))));\n        }, this.markDMsAsRead = function(a, b) {\n            if (!b.last_message_id) {\n                throw new Error(\"Require last_message_id to mark a DM as read\");\n            }\n        ;\n        ;\n            var c = {\n                last_message_id: b.last_message_id\n            };\n            ((b.recipient_id && (c.recipient_id = b.recipient_id))), ((b.implicitMark && (c.implicit_mark = \"true\")));\n            var d = function(a) {\n                ((b.implicitMark && (a.implicitMark = !0))), this.saveLastReadId(b.last_message_id), a.lastMessageId = b.last_message_id, this.trigger(\"dataDMReadSuccess\", a);\n            };\n            this.post({\n                url: \"/i/messages/mark_read\",\n                data: c,\n                eventData: b,\n                success: d.bind(this),\n                error: \"dataDMReadError\"\n            });\n        }, this.checkForEnvelope = function(b, c) {\n            ((((c && ((c.section == \"profile\")))) && this.triggerUnreadCount(null, {\n                msgCount: a\n            })));\n        }, this.possiblyOpenDMDialog = function(a, b) {\n            var c = this.attr.dm_options;\n            if (((c && c.show_dm_dialog))) {\n                var d = c.recipient;\n                $(JSBNG__document).trigger(\"uiNeedsDMDialog\", {\n                    screen_name: d\n                }), this.JSBNG__on(\"uiDialogClosed\", function() {\n                    this.trigger(\"uiNavigate\", {\n                        href: \"/\"\n                    });\n                });\n            }\n        ;\n        ;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsDMConversationList\", this.requestConversationList), this.JSBNG__on(\"uiNeedsDMConversation\", this.requestConversation), this.JSBNG__on(\"uiDMDialogSendMessage\", this.sendMessage), this.JSBNG__on(\"uiDMDialogDeleteMessage\", this.deleteMessage), this.JSBNG__on(\"dataRefreshDMs\", this.pollConversationList), this.JSBNG__on(\"dataMarkDMsAsRead\", this.markDMsAsRead), this.JSBNG__on(\"dataDMConversationListResult\", this.storeMessageId), this.JSBNG__on(\"uiSwiftLoaded uiPageChanged\", this.checkLastReadDM), this.JSBNG__on(\"uiPageChanged\", this.checkForEnvelope), this.JSBNG__on(\"uiSwiftLoaded\", this.possiblyOpenDMDialog), this.JSBNG__on(\"dataNotificationsReceived\", this.dispatchUnreadNotification), this.JSBNG__on(\"uiReadStateChanged\", this.triggerUnreadCount), this.lastMessageId = (($(\"#dm_dialog_conversation_list li.dm-thread\").first().attr(\"data-last-message-id\") || 0)), this.storage = new JSBNG__Storage(\"DM\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), withAuthToken = require(\"app/data/with_auth_token\"), JSBNG__Storage = require(\"app/utils/storage/core\"), StringUtils = require(\"app/utils/string\"), DirectMessages = defineComponent(directMessages, withData, withAuthToken);\n    module.exports = DirectMessages;\n});\ndefine(\"app/data/direct_messages_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function directMessagesScribe() {\n        this.after(\"initialize\", function() {\n            this.scribeOnEvent(\"uiDMDialogOpenedNewConversation\", \"open\"), this.scribeOnEvent(\"uiDMDialogOpenedConversation\", \"open\"), this.scribeOnEvent(\"uiDMDialogOpenedConversationList\", \"open\"), this.scribeOnEvent(\"uiDMDialogSendMessage\", \"send_dm\"), this.scribeOnEvent(\"uiDMDialogDeleteMessage\", \"delete\"), this.scribeOnEvent(\"uiDMDialogMarkMessage\", {\n                element: \"mark_all_as_read\",\n                action: \"click\"\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), DirectMessagesScribe = defineComponent(directMessagesScribe, withScribe);\n    module.exports = DirectMessagesScribe;\n});\ndefine(\"app/ui/direct_message_link_handler\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function directMessageLinkHandler() {\n        this.defaultAttrs({\n            dmLinkSelector: \".js-dm-dialog, .dm-button\"\n        }), this.JSBNG__openDialog = function(a, b) {\n            a.preventDefault();\n            var c = $(b.el);\n            b = {\n                screen_name: c.data(\"screen-name\"),\n                JSBNG__name: c.data(\"JSBNG__name\")\n            }, this.trigger(\"uiNeedsDMDialog\", b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"click\", {\n                dmLinkSelector: this.JSBNG__openDialog\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(directMessageLinkHandler);\n});\ndefine(\"app/ui/with_timestamp_updating\", [\"module\",\"require\",\"exports\",\"core/i18n\",], function(module, require, exports) {\n    function withTimestampUpdating() {\n        this.defaultAttrs({\n            timestampSelector: \".js-relative-timestamp\",\n            timestampClass: \"js-relative-timestamp\"\n        }), this.monthLabels = [_(\"Jan\"),_(\"Feb\"),_(\"Mar\"),_(\"Apr\"),_(\"May\"),_(\"Jun\"),_(\"Jul\"),_(\"Aug\"),_(\"Sep\"),_(\"Oct\"),_(\"Nov\"),_(\"Dec\"),], this.currentTimeSecs = function() {\n            return ((new JSBNG__Date / 1000));\n        }, this.timestampParts = function(a) {\n            return {\n                year4: a.getFullYear().toString(),\n                year: a.getFullYear().toString().slice(2),\n                month: this.monthLabels[a.getMonth()],\n                day: a.getDate(),\n                hours24: a.getHours(),\n                hours12: ((((a.getHours() % 12)) || 12)),\n                minutes: a.getMinutes().toString().replace(/^(\\d)$/, \"0$1\"),\n                amPm: ((((a.getHours() < 12)) ? _(\"AM\") : _(\"PM\"))),\n                date: a.getDate()\n            };\n        }, this.updateTimestamps = function() {\n            var a = this, b = a.currentTimeSecs();\n            this.select(\"timestampSelector\").each(function() {\n                var c = $(this), d = c.data(\"time\"), e = ((b - d)), f = \"\", g = !0;\n                if (((e <= 2))) {\n                    f = _(\"now\");\n                }\n                 else {\n                    if (((e < 60))) f = _(\"{{number}}s\", {\n                        number: parseInt(e)\n                    });\n                     else {\n                        var h = parseInt(((e / 60)), 10);\n                        if (((h < 60))) {\n                            f = _(\"{{number}}m\", {\n                                number: h\n                            });\n                        }\n                         else {\n                            if (((h < 1440))) f = _(\"{{number}}h\", {\n                                number: parseInt(((h / 60)), 10)\n                            });\n                             else {\n                                var i = a.timestampParts(new JSBNG__Date(((d * 1000))));\n                                g = !1, ((((h < 525600)) ? f = _(\"{{date}} {{month}}\", i) : f = _(\"{{date}} {{month}} {{year}}\", i)));\n                            }\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                }\n            ;\n            ;\n                ((g || c.removeClass(a.attr.timestampClass))), c.text(f);\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"uiWantsToRefreshTimestamps uiPageChanged\", this.updateTimestamps);\n        });\n    };\n;\n    var _ = require(\"core/i18n\");\n    module.exports = withTimestampUpdating;\n});\ndefine(\"app/ui/direct_message_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/ui/with_timestamp_updating\",\"app/utils/string\",], function(module, require, exports) {\n    function directMessageDialog() {\n        this.defaultAttrs({\n            dialogSelector: \"#dm_dialog\",\n            closeSelector: \".twttr-dialog-close\",\n            classConversationList: \"dm-conversation-list\",\n            classConversation: \"dm-conversation\",\n            classNew: \"dm-new\",\n            viewConversationList: \"#dm_dialog_conversation_list\",\n            viewConversation: \"#dm_dialog_conversation\",\n            viewNew: \"#dm_dialog_new\",\n            linksForConversationListView: \"#dm_dialog_new h3 a, #dm_dialog_conversation h3 a\",\n            linksForConversationView: \".dm-thread\",\n            linksForNewView: \".dm-new-button\",\n            contentSelector: \".twttr-dialog-content\",\n            tweetBoxSelector: \".dm-tweetbox\",\n            deleteSelector: \".dm-delete\",\n            deleteConfirmSelector: \".dm-deleting .js-prompt-ok\",\n            deleteCancelSelector: \".dm-deleting .js-prompt-cancel\",\n            autocompleteImage: \"img.selected-profile\",\n            autocompleteInput: \"input.twttr-directmessage-input\",\n            newConversationEditor: \"#tweet-box-dm-new-conversation\",\n            errorContainerSelector: \".js-dm-error\",\n            errorTextSelector: \".dm-error-text\",\n            errorCloseSelector: \".js-dismiss\",\n            markAllReadSelector: \".mark-all-read\",\n            markReadConfirmSelector: \".mark-read-confirm .js-prompt-ok\",\n            markReadCancelSelector: \".mark-read-confirm .js-prompt-cancel\"\n        }), this.JSBNG__openDialog = function(a, b) {\n            this.trigger(\"dataRefreshDMs\"), ((((b && b.screen_name)) ? this.renderConversationView(null, b) : this.renderConversationListView())), this.open();\n        }, this.renderConversationListView = function(a, b) {\n            ((a && a.preventDefault())), this.renderView(this.attr.classConversationList);\n            var c = this.select(\"viewConversationList\");\n            if (c.hasClass(\"needs-refresh\")) {\n                c.removeClass(\"needs-refresh\"), this.trigger(\"uiNeedsDMConversationList\", {\n                    since_id: 0\n                });\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiDMDialogOpenedConversationList\");\n        }, this.renderConversationView = function(a, b) {\n            this.deleteCancel(), ((a && a.preventDefault()));\n            var b = ((b || {\n            })), c = ((b.screen_name || $(b.el).attr(\"data-thread-id\"))), d = ((b.JSBNG__name || $(b.el).JSBNG__find(\".fullname\").text()));\n            this.lastMessageIdInConversation = $(b.el).attr(\"data-last-message-id\"), this.isConversationUnread = !!$(b.el).JSBNG__find(\".unread\").length, this.$node.JSBNG__find(\".dm_dialog_real_name\").text(d), this.select(\"viewConversation\").JSBNG__find(this.attr.contentSelector).empty(), this.renderView(this.attr.classConversation);\n            var e = ((conversationCache[c] || {\n            })), f = ((e.data && ((e.lastMessageId == this.lastMessageIdInConversation))));\n            ((f ? this.updateConversation(null, e.data) : this.trigger(\"uiNeedsDMConversation\", {\n                screen_name: c\n            }))), this.resetDMBox();\n        }, this.renderNewView = function(a, b) {\n            ((a && a.preventDefault()));\n            var c = this.select(\"autocompleteImage\").attr(\"data-default-img\");\n            this.renderView(this.attr.classNew), this.trigger(\"uiDMDialogOpenedNewConversation\"), this.resetDMBox(), this.select(\"autocompleteImage\").attr(\"src\", c), this.select(\"autocompleteInput\").val(\"\").JSBNG__focus(), ((((b && b.recipient)) && (this.selectAutocompleteUser(null, b.recipient), this.select(\"newConversationEditor\").JSBNG__focus()))), ((this.isOpen() || (this.trigger(\"dataRefreshDMs\"), this.open())));\n        }, this.renderView = function(a) {\n            this.hideError(), this.markReadCancel(), this.$dialogContainer.removeClass(this.viewClasses).addClass(a), ((this.attr.eventData || (this.attr.eventData = {\n            })));\n            var b;\n            switch (a) {\n              case this.attr.classNew:\n                b = \"dm_new_conversation_dialog\";\n                break;\n              case this.attr.classConversation:\n                b = \"dm_existing_conversation_dialog\";\n                break;\n              case this.attr.classConversationList:\n                b = \"dm_conversation_list_dialog\";\n            };\n        ;\n            this.attr.eventData.scribeContext = {\n                component: b\n            };\n        }, this.updateConversationList = function(a, b) {\n            var c = this.select(\"viewConversationList\"), d = c.JSBNG__find(\"li\");\n            ((b.sourceEventData.since_id ? d.filter(function() {\n                return (($.inArray($(this).data(\"thread-id\"), b.threads) > -1));\n            }).remove() : d.remove()));\n            var e = ((b.html || \"\"));\n            c.JSBNG__find(((this.attr.contentSelector + \" ul\"))).prepend(e);\n            var f = c.JSBNG__find(\".dm-no-messages\");\n            ((((c.JSBNG__find(\"li\").length == 0)) ? (f.addClass(\"show\"), this.select(\"markAllReadSelector\").addClass(\"disabled\").attr(\"disabled\", !0)) : (f.removeClass(\"show\"), this.select(\"markAllReadSelector\").removeClass(\"disabled\").attr(\"disabled\", !1)))), this.trigger(\"uiResetDMPoll\"), this.latestMessageId = ((b.last_message_id || -1));\n        }, this.updateConversation = function(a, b) {\n            ((a && a.preventDefault()));\n            var c = ((a && a.type)), d = b.recipient.screen_name;\n            conversationCache[d] = {\n                data: b,\n                lastMessageId: -1\n            }, this.$node.JSBNG__find(\".dm_dialog_real_name\").text(((b.recipient && b.recipient.JSBNG__name))), ((this.$dialogContainer.hasClass(this.attr.classConversation) || this.renderConversationView(null, {\n                screen_name: d,\n                JSBNG__name: b.recipient.JSBNG__name\n            })));\n            var e = this.select(\"viewConversation\").JSBNG__find(this.attr.contentSelector);\n            e.html(b.html), this.trigger(\"uiResetDMPoll\");\n            if (!e.JSBNG__find(\".js-dm-item\").length) {\n                ((((((c === \"dataDMSuccess\")) && ((b.msgAction == \"delete\")))) ? (this.trigger(\"dataRefreshDMs\"), this.renderConversationListView()) : this.trigger(\"uiOpenNewDM\", {\n                    recipient: b.recipient\n                })));\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiDMDialogOpenedConversation\", {\n                recipient: d\n            });\n            var f = e.JSBNG__find(\".dm-convo\");\n            if (f.length) {\n                var g = f.JSBNG__find(\".dm\").last().attr(\"data-message-id\");\n                conversationCache[d].lastMessageId = g, ((((((this.attr.dmReadStateSync && a)) && ((a.type == \"dataDMConversationResult\")))) && this.initMsgRead(g, b.recipient.id_str))), f.scrollTop(f[0].scrollHeight);\n            }\n        ;\n        ;\n        }, this.initMsgRead = function(a, b) {\n            var c = ((this.lastMessageIdInConversation && ((StringUtils.compare(this.lastMessageIdInConversation, a) == -1))));\n            if (((this.isConversationUnread || c))) {\n                this.markMessages(null, {\n                    messageId: a,\n                    recipientId: b\n                }), this.select(\"viewConversationList\").JSBNG__find(((((\".dm-thread[data-last-message-id=\" + a)) + \"] .dm-thread-status i\"))).removeClass(\"unread\"), this.unreadCount -= this.select(\"viewConversation\").JSBNG__find(\".js-dm-item[data-unread=true]\").length, this.trigger(\"uiReadStateChanged\", {\n                    msgCount: this.unreadCount\n                });\n            }\n        ;\n        ;\n        }, this.sendMessage = function(a, b) {\n            var c = this.$dialogContainer.hasClass(this.attr.classConversation), d = b.recipient;\n            ((((!d && c)) ? d = this.select(\"viewConversation\").JSBNG__find(\"div[data-thread-id]\").data(\"thread-id\") : ((d || (d = this.select(\"viewNew\").JSBNG__find(\"input[type=text]\").val().trim())))));\n            if (!d) {\n                JSBNG__setTimeout(function() {\n                    this.sendMessage(a, b);\n                }.bind(this), 100);\n                return;\n            }\n        ;\n        ;\n            this.trigger(\"uiDMDialogSendMessage\", {\n                tweetboxId: b.tweetboxId,\n                screen_name: d.replace(/^@/, \"\"),\n                text: b.tweetData.JSBNG__status\n            }), this.resetDMBox(), this.select(\"viewConversationList\").addClass(\"needs-refresh\");\n        }, this.selectAutocompleteUser = function(a, b) {\n            var c = ((b.item ? b.item.screen_name : b.screen_name)), d = ((b.item ? b.item.JSBNG__name : b.JSBNG__name)), e = this.select(\"viewConversationList\").JSBNG__find(((((\"li[data-thread-id=\" + c)) + \"]\"))).length;\n            ((e ? this.renderConversationView(null, {\n                screen_name: c,\n                JSBNG__name: d\n            }) : (this.select(\"autocompleteInput\").val(c), this.select(\"autocompleteImage\").attr(\"src\", this.getUserAvatar(((b.item ? b.item : b)))))));\n        }, this.getUserAvatar = function(a) {\n            return ((a.profile_image_url_https ? a.profile_image_url_https.replace(/^https?:/, \"\").replace(/_normal(\\..*)?$/i, \"_mini$1\") : null));\n        }, this.deleteMessage = function(a, b) {\n            this.select(\"tweetBoxSelector\").addClass(\"dm-deleting\").JSBNG__find(\".dm-delete-confirm .js-prompt-ok\").JSBNG__focus(), this.select(\"viewConversation\").JSBNG__find(\".marked-for-deletion\").removeClass(\"marked-for-deletion\"), $(a.target).closest(\".dm\").addClass(\"marked-for-deletion\");\n        }, this.deleteConfirm = function(a, b) {\n            var c = this.select(\"viewConversation\").JSBNG__find(\".marked-for-deletion\");\n            this.trigger(\"uiDMDialogDeleteMessage\", {\n                id: c.attr(\"data-message-id\")\n            }), this.select(\"viewConversationList\").addClass(\"needs-refresh\"), this.select(\"tweetBoxSelector\").removeClass(\"dm-deleting\");\n        }, this.deleteCancel = function(a, b) {\n            this.select(\"tweetBoxSelector\").removeClass(\"dm-deleting\"), this.select(\"viewConversation\").JSBNG__find(\".marked-for-deletion\").removeClass(\"marked-for-deletion\");\n        }, this.markMessages = function(a, b) {\n            this.trigger(\"dataMarkDMsAsRead\", {\n                last_message_id: ((b.messageId || this.latestMessageId)),\n                recipient_id: b.recipientId\n            });\n        }, this.markAllMessages = function(a, b) {\n            this.markMessages(a, b), this.trigger(\"uiDMDialogMarkMessage\"), this.trigger(\"uiReadStateChanged\", {\n                msgCount: 0\n            });\n        }, this.updateReadState = function(a, b) {\n            if (b.implicitMark) {\n                this.trigger(\"uiDMPoll\");\n                return;\n            }\n        ;\n        ;\n            this.select(\"viewConversationList\").addClass(\"needs-refresh\"), ((this.$dialogContainer.hasClass(this.attr.classConversationList) && this.JSBNG__openDialog()));\n        }, this.refreshDMList = function(a, b) {\n            ((((((((b && b.d)) && ((b.d.JSBNG__status === \"ok\")))) && ((b.d.response != null)))) && (((((((((this.unreadCount != b.d.response)) && this.$dialogContainer.is(\":visible\"))) && this.$dialogContainer.hasClass(this.attr.classConversationList))) && this.trigger(\"dataRefreshDMs\"))), this.unreadCount = b.d.response)));\n        }, this.showMarkReadConfirm = function(a, b) {\n            ((a && a.preventDefault()));\n            if (this.select(\"markAllReadSelector\").hasClass(\"disabled\")) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"viewConversationList\").addClass(\"show-mark-read\");\n        }, this.markReadCancel = function(a, b) {\n            this.select(\"viewConversationList\").removeClass(\"show-mark-read\");\n        }, this.showError = function(a, b) {\n            this.select(\"errorTextSelector\").html(((b.message || b.error))), this.select(\"errorContainerSelector\").show();\n        }, this.hideError = function(a, b) {\n            this.select(\"errorContainerSelector\").hide();\n        }, this.resetDMBox = function() {\n            this.select(\"tweetBoxSelector\").trigger(\"uiDMBoxReset\");\n        }, this.after(\"initialize\", function() {\n            this.$dialogContainer = this.select(\"dialogSelector\"), this.viewClasses = [this.attr.classConversationList,this.attr.classConversation,this.attr.classNew,].join(\" \"), this.JSBNG__on(JSBNG__document, \"uiNeedsDMDialog\", this.JSBNG__openDialog), this.JSBNG__on(JSBNG__document, \"uiOpenNewDM\", this.renderNewView), this.JSBNG__on(JSBNG__document, \"dataDMConversationListResult\", this.updateConversationList), this.JSBNG__on(JSBNG__document, \"dataDMSuccess dataDMConversationResult\", this.updateConversation), this.JSBNG__on(JSBNG__document, \"uiSendDM\", this.sendMessage), this.JSBNG__on(JSBNG__document, \"dataDMError\", this.showError), this.JSBNG__on(\"uiTypeaheadItemSelected uiTypeaheadItemComplete\", this.selectAutocompleteUser), this.JSBNG__on(JSBNG__document, \"dataDMReadSuccess\", this.updateReadState), this.JSBNG__on(JSBNG__document, \"dataNotificationsReceived\", this.refreshDMList), this.JSBNG__on(\"click\", {\n                linksForConversationListView: this.renderConversationListView,\n                linksForConversationView: this.renderConversationView,\n                linksForNewView: this.renderNewView,\n                deleteSelector: this.deleteMessage,\n                deleteConfirmSelector: this.deleteConfirm,\n                deleteCancelSelector: this.deleteCancel,\n                errorCloseSelector: this.hideError,\n                markAllReadSelector: this.showMarkReadConfirm,\n                markReadConfirmSelector: this.markAllMessages,\n                markReadCancelSelector: this.markReadCancel\n            }), this.unreadCount = 0;\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), withTimestampUpdating = require(\"app/ui/with_timestamp_updating\"), StringUtils = require(\"app/utils/string\"), DirectMessageDialog = defineComponent(directMessageDialog, withDialog, withPosition, withTimestampUpdating), conversationCache = {\n    };\n    module.exports = DirectMessageDialog;\n});\ndefine(\"app/boot/direct_messages\", [\"module\",\"require\",\"exports\",\"app/data/direct_messages\",\"app/data/direct_messages_scribe\",\"app/ui/direct_message_link_handler\",\"app/ui/typeahead/typeahead_dropdown\",\"app/ui/typeahead/typeahead_input\",\"app/ui/direct_message_dialog\",\"app/ui/tweet_box\",\"core/utils\",], function(module, require, exports) {\n    function initialize(a) {\n        DirectMessagesData.attachTo(JSBNG__document, a), DirectMessagesScribe.attachTo(JSBNG__document, a), DirectMessageLinkHandler.attachTo(JSBNG__document, a), DirectMessageDialog.attachTo(\"#dm_dialog\", a);\n        var b = {\n            scribeContext: {\n                component: \"tweet_box_dm\"\n            }\n        };\n        TweetBox.attachTo(\"#dm_dialog form.tweet-form\", {\n            eventParams: {\n                type: \"DM\"\n            },\n            suppressFlashMessage: !0,\n            eventData: b\n        }), TypeaheadInput.attachTo(\"#dm_dialog_new .dm-dialog-content\", {\n            inputSelector: \"input.twttr-directmessage-input\",\n            eventData: b\n        }), TypeaheadDropdown.attachTo(\"#dm_dialog_new .dm-dialog-content\", {\n            inputSelector: \"input.twttr-directmessage-input\",\n            datasourceRenders: [[\"accounts\",[\"dmAccounts\",],],],\n            blockLinkActions: !0,\n            deciders: utils.merge(a.typeaheadData, {\n                showSocialContext: a.typeaheadData.showDMAccountSocialContext\n            }),\n            eventData: b\n        });\n    };\n;\n    var DirectMessagesData = require(\"app/data/direct_messages\"), DirectMessagesScribe = require(\"app/data/direct_messages_scribe\"), DirectMessageLinkHandler = require(\"app/ui/direct_message_link_handler\"), TypeaheadDropdown = require(\"app/ui/typeahead/typeahead_dropdown\"), TypeaheadInput = require(\"app/ui/typeahead/typeahead_input\"), DirectMessageDialog = require(\"app/ui/direct_message_dialog\"), TweetBox = require(\"app/ui/tweet_box\"), utils = require(\"core/utils\"), hasDialog = !!$(\"#dm_dialog\").length;\n    module.exports = ((hasDialog ? initialize : $.noop));\n});\ndefine(\"app/data/profile_popup\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function profilePopupData() {\n        this.defaultAttrs({\n            noShowError: !0\n        }), this.userCache = {\n            screenNames: Object.create(null),\n            ids: Object.create(null)\n        }, this.socialProofCache = {\n            screenNames: Object.create(null),\n            ids: Object.create(null)\n        }, this.saveToCache = function(a, b) {\n            a.ids[b.user_id] = b, a.screenNames[b.screen_name] = b;\n        }, this.retrieveFromCache = function(a, b) {\n            var c;\n            return ((b.userId ? c = a.ids[b.userId] : ((b.user_id ? c = a.ids[b.user_id] : ((b.screenName ? c = a.screenNames[b.screenName] : ((b.screen_name && (c = a.screenNames[b.screen_name]))))))))), c;\n        }, this.invalidateCaches = function(a, b) {\n            var c, d, e;\n            ((b.userId ? (c = b.userId, e = this.userCache.ids[c], d = ((e && e.screen_name))) : (d = b.screenName, e = this.userCache.screenNames[d], c = ((e && e.user_id))))), ((c && delete this.userCache.ids[c])), ((c && delete this.socialProofCache.ids[c])), ((d && delete this.userCache.screenNames[d])), ((d && delete this.socialProofCache.screenNames[d]));\n        }, this.getSocialProof = function(a, b) {\n            if (((!this.attr.asyncSocialProof || !this.attr.loggedIn))) {\n                return;\n            }\n        ;\n        ;\n            var c = function(a) {\n                this.saveToCache(this.socialProofCache, a);\n                var b = this.retrieveFromCache(this.userCache, a);\n                ((b && this.trigger(\"dataSocialProofSuccess\", a)));\n            }.bind(this), d = function(a) {\n                this.trigger(\"dataSocialProofFailure\", a);\n            }.bind(this), e = this.retrieveFromCache(this.socialProofCache, a);\n            if (e) {\n                e.sourceEventData = a, c(e);\n                return;\n            }\n        ;\n        ;\n            this.get({\n                url: \"/i/profiles/social_proof\",\n                data: b,\n                eventData: a,\n                cache: !1,\n                success: c,\n                error: d\n            });\n        }, this.getProfilePopupMain = function(a, b) {\n            var c = function(a) {\n                this.saveToCache(this.userCache, a), this.trigger(\"dataProfilePopupSuccess\", a);\n                var b = this.retrieveFromCache(this.socialProofCache, a);\n                ((b && this.trigger(\"dataSocialProofSuccess\", b)));\n            }.bind(this), d = function(a) {\n                this.trigger(\"dataProfilePopupFailure\", a);\n            }.bind(this), e = this.retrieveFromCache(this.userCache, a);\n            if (e) {\n                e.sourceEventData = a, c(e);\n                return;\n            }\n        ;\n        ;\n            this.get({\n                url: \"/i/profiles/popup\",\n                data: b,\n                eventData: a,\n                cache: !1,\n                success: c,\n                error: d\n            });\n        }, this.getProfilePopup = function(a, b) {\n            var c = {\n            };\n            ((b.screenName ? c.screen_name = b.screenName : ((b.userId && (c.user_id = b.userId))))), ((this.attr.asyncSocialProof && (c.async_social_proof = !0))), this.getSocialProof(b, c), this.getProfilePopupMain(b, c);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiWantsProfilePopup\", this.getProfilePopup), this.JSBNG__on(JSBNG__document, \"dataFollowStateChange dataUserActionSuccess\", this.invalidateCaches);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), ProfilePopupData = defineComponent(profilePopupData, withData);\n    module.exports = ProfilePopupData;\n});\ndefine(\"app/data/profile_popup_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_interaction_data_scribe\",\"app/data/client_event\",], function(module, require, exports) {\n    function profilePopupScribe() {\n        this.defaultAttrs({\n            scribeContext: {\n                component: \"profile_dialog\"\n            }\n        }), this.scribeProfilePopupOpen = function(a, b) {\n            if (((((this.clientEvent.scribeContext.page != \"profile\")) || !this.clientEvent.scribeData.profile_id))) {\n                this.clientEvent.scribeData.profile_id = b.user_id;\n            }\n        ;\n        ;\n            var c = utils.merge(this.attr.scribeContext, {\n                action: \"open\"\n            });\n            this.scribe(c, b);\n        }, this.cleanupProfilePopupScribing = function(a, b) {\n            ((((this.clientEvent.scribeData.profile_id && ((this.clientEvent.scribeContext.page != \"profile\")))) && delete this.clientEvent.scribeData.profile_id));\n        }, this.scribePopupSocialProof = function(a, b) {\n            var c = utils.merge(this.attr.scribeContext, {\n                element: \"social_proof\",\n                action: \"impression\"\n            });\n            this.scribe(c, b);\n        }, this.after(\"initialize\", function() {\n            this.clientEvent = clientEvent, this.JSBNG__on(JSBNG__document, \"dataProfilePopupSuccess\", this.scribeProfilePopupOpen), this.JSBNG__on(JSBNG__document, \"uiCloseProfilePopup\", this.cleanupProfilePopupScribing), this.JSBNG__on(JSBNG__document, \"uiHasPopupSocialProof\", this.scribePopupSocialProof);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withInteractionDataScribe = require(\"app/data/with_interaction_data_scribe\"), clientEvent = require(\"app/data/client_event\");\n    module.exports = defineComponent(profilePopupScribe, withInteractionDataScribe);\n});\ndefine(\"app/ui/with_user_actions\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/i18n\",\"core/utils\",\"app/data/ddg\",\"app/ui/with_interaction_data\",\"app/utils/string\",], function(module, require, exports) {\n    function withUserActions() {\n        compose.mixin(this, [withInteractionData,]), this.defaultAttrs({\n            followButtonSelector: \".follow-button, .follow-link\",\n            emailFollowButtonSelector: \".email-follow-button\",\n            userInfoSelector: \".user-actions\",\n            dropdownSelector: \".user-dropdown\",\n            dropdownItemSelector: \".user-dropdown li\",\n            dropdownMenuSelector: \".dropdown-menu\",\n            dropdownThresholdSelector: \".dropdown-threshold\",\n            followStates: [\"not-following\",\"following\",\"blocked\",\"pending\",],\n            userActionClassesToEvents: {\n                \"mention-text\": [\"uiMentionAction\",\"mentionUser\",],\n                \"dm-text\": [\"uiDmAction\",\"dmUser\",],\n                \"list-text\": [\"uiListAction\",],\n                \"block-text\": [\"uiBlockAction\",],\n                \"unblock-text\": [\"uiUnblockAction\",],\n                \"report-spam-text\": [\"uiReportSpamAction\",],\n                \"hide-suggestion-text\": [\"uiHideSuggestionAction\",],\n                \"retweet-on-text\": [\"uiRetweetOnAction\",],\n                \"retweet-off-text\": [\"uiRetweetOffAction\",],\n                \"device-notifications-on-text\": [\"uiDeviceNotificationsOnAction\",\"deviceNotificationsOn\",],\n                \"device-notifications-off-text\": [\"uiDeviceNotificationsOffAction\",],\n                \"embed-profile\": [\"uiEmbedProfileAction\",\"redirectToEmbedProfile\",],\n                \"email-follow-text\": [\"uiEmailFollowAction\",],\n                \"email-unfollow-text\": [\"uiEmailUnfollowAction\",]\n            }\n        }), this.getClassNameFromList = function(a, b) {\n            var c = b.filter(function(b) {\n                return a.hasClass(b);\n            });\n            return ((((c.length > 1)) && JSBNG__console.log(\"Element has more than one mutually exclusive class.\", c))), c[0];\n        }, this.getUserActionEventNameAndMethod = function(a) {\n            var b = this.getClassNameFromList(a, Object.keys(this.attr.userActionClassesToEvents));\n            return this.attr.userActionClassesToEvents[b];\n        }, this.getFollowState = function(a) {\n            return this.getClassNameFromList(a, this.attr.followStates);\n        }, this.getInfoElementFromEvent = function(a) {\n            var b = $(a.target);\n            return b.closest(this.attr.userInfoSelector);\n        }, this.findInfoElementForUser = function(a) {\n            var b = ((((((this.attr.userInfoSelector + \"[data-user-id=\")) + StringUtils.parseBigInt(a))) + \"]\"));\n            return this.$node.JSBNG__find(b);\n        }, this.getEventName = function(a) {\n            var b = {\n                \"not-following\": \"uiFollowAction\",\n                following: \"uiUnfollowAction\",\n                blocked: \"uiUnblockAction\",\n                pending: \"uiCancelFollowRequestAction\"\n            };\n            return b[a];\n        }, this.addCancelHoverStyleClass = function(a) {\n            a.addClass(\"cancel-hover-style\"), a.one(\"mouseleave\", function() {\n                a.removeClass(\"cancel-hover-style\");\n            });\n        }, this.handleFollowButtonClick = function(a) {\n            a.preventDefault(), a.stopPropagation(), this.hideDropdown();\n            var b = this.getInfoElementFromEvent(a), c = $(a.target).closest(this.attr.followButtonSelector);\n            this.addCancelHoverStyleClass(c);\n            var d = this.getFollowState(b);\n            ((((((d == \"not-following\")) && ((b.attr(\"data-protected\") == \"true\")))) && this.trigger(\"uiShowMessage\", {\n                message: _(\"A follow request has been sent to @{{screen_name}} and is pending their approval.\", {\n                    screen_name: b.attr(\"data-screen-name\")\n                })\n            })));\n            var e = this.getEventName(d), f = {\n                originalFollowState: d\n            };\n            this.trigger(e, this.interactionData(a, f));\n        }, this.handleEmailFollowButtonClick = function(a) {\n            a.preventDefault();\n            var b = this.getInfoElementFromEvent(a), c = $(a.target).closest(this.attr.emailFollowButtonSelector);\n            this.addCancelHoverStyleClass(c), ((b.hasClass(\"email-following\") ? this.trigger(\"uiEmailUnfollowAction\", this.interactionData(a)) : this.trigger(\"uiEmailFollowAction\", this.interactionData(a))));\n        }, this.handleLoggedOutFollowButtonClick = function(a) {\n            a.stopPropagation(), this.hideDropdown(), this.trigger(\"uiOpenSigninOrSignupDialog\", {\n                signUpOnly: !0,\n                screenName: this.getInfoElementFromEvent(a).attr(\"data-screen-name\")\n            });\n        }, this.handleUserAction = function(a) {\n            a.stopPropagation();\n            var b = $(a.target), c = this.getInfoElementFromEvent(a), d = this.getUserActionEventNameAndMethod(b), e = d[0], f = d[1], g = this.getFollowState(c), h = {\n                originalFollowState: g\n            };\n            ((f && (h = this[f](c, e, h)))), ((h && this.trigger(e, this.interactionData(a, h))));\n        }, this.deviceNotificationsOn = function(a, b, c) {\n            return ((this.attr.deviceEnabled ? c : (((((this.attr.smsDeviceVerified || this.attr.hasPushDevice)) ? this.trigger(\"uiOpenConfirmDialog\", {\n                titleText: _(\"Enable mobile notifications for Tweets\"),\n                bodyText: _(\"Before you can receive mobile notifications for @{{screenName}}'s Tweets, you need to enable the Tweet notification setting.\", {\n                    screenName: a.attr(\"data-screen-name\")\n                }),\n                cancelText: _(\"Close\"),\n                submitText: _(\"Enable Tweet notifications\"),\n                action: ((this.attr.hasPushDevice ? \"ShowPushTweetsNotifications\" : \"ShowMobileNotifications\")),\n                JSBNG__top: this.attr.JSBNG__top\n            }) : this.trigger(\"uiOpenConfirmDialog\", {\n                titleText: _(\"Setup mobile notifications\"),\n                bodyText: _(\"Before you can receive mobile notifications for @{{screenName}}'s Tweets, you need to set up your phone.\", {\n                    screenName: a.attr(\"data-screen-name\")\n                }),\n                cancelText: _(\"Cancel\"),\n                submitText: _(\"Set up phone\"),\n                action: \"ShowMobileNotifications\",\n                JSBNG__top: this.attr.JSBNG__top\n            }))), !1)));\n        }, this.redirectToMobileNotifications = function() {\n            window.JSBNG__location = \"/settings/devices\";\n        }, this.redirectToPushNotificationsHelp = function() {\n            window.JSBNG__location = \"//support.twitter.com/articles/20169887\";\n        }, this.redirectToEmbedProfile = function(a, b, c) {\n            return this.trigger(\"uiNavigate\", {\n                href: ((\"/settings/widgets/new/user?screen_name=\" + a.attr(\"data-screen-name\")))\n            }), !0;\n        }, this.mentionUser = function(a, b, c) {\n            this.trigger(\"uiOpenTweetDialog\", {\n                screenName: a.attr(\"data-screen-name\"),\n                title: _(\"Tweet to {{name}}\", {\n                    JSBNG__name: a.attr(\"data-name\")\n                })\n            });\n        }, this.dmUser = function(a, b, c) {\n            return this.trigger(\"uiNeedsDMDialog\", {\n                screen_name: a.attr(\"data-screen-name\"),\n                JSBNG__name: a.attr(\"data-name\")\n            }), c;\n        }, this.hideSuggestion = function(a, b, c) {\n            return utils.merge(c, {\n                feedbackToken: a.attr(\"data-feedback-token\")\n            });\n        }, this.followStateChange = function(a, b) {\n            this.updateFollowState(b.userId, b.newState), ((b.fromShortcut && ((((b.newState === \"not-following\")) ? this.trigger(\"uiShowMessage\", {\n                message: _(\"You have unblocked {{username}}\", {\n                    username: b.username\n                })\n            }) : ((((b.newState === \"blocked\")) && this.trigger(\"uiUpdateAfterBlock\", {\n                userId: b.userId\n            })))))));\n        }, this.updateFollowState = function(a, b) {\n            var c = this.findInfoElementForUser(a), d = this.getFollowState(c);\n            ((d && c.removeClass(d))), c.addClass(b);\n        }, this.follow = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId), d = ((c.data(\"protected\") ? \"pending\" : \"following\"));\n            this.updateFollowState(b.userId, d), c.addClass(\"including\");\n        }, this.unfollow = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            this.updateFollowState(b.userId, \"not-following\"), c.removeClass(\"including notifying email-following\");\n        }, this.cancel = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            this.updateFollowState(b.userId, \"not-following\");\n        }, this.block = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            this.updateFollowState(b.userId, \"blocked\"), c.removeClass(\"including notifying email-following\");\n        }, this.unblock = function(a, b) {\n            this.updateFollowState(b.userId, \"not-following\");\n        }, this.retweetsOn = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.addClass(\"including\");\n        }, this.retweetsOff = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.removeClass(\"including\");\n        }, this.notificationsOn = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.addClass(\"notifying\");\n        }, this.notificationsOff = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.removeClass(\"notifying\");\n        }, this.toggleDropdown = function(a) {\n            a.stopPropagation();\n            var b = $(a.target).closest(this.attr.dropdownSelector);\n            ((b.hasClass(\"open\") ? this.hideDropdown() : (ddg.impression(\"mobile_notifications_tweaks_608\"), this.showDropdown(b))));\n        }, this.showDropdown = function(a) {\n            this.trigger(\"click.dropdown\"), a.addClass(\"open\");\n            var b = a.closest(this.attr.dropdownThresholdSelector);\n            if (b.length) {\n                var c = a.JSBNG__find(this.attr.dropdownMenuSelector), d = ((((c.offset().JSBNG__top + c.JSBNG__outerHeight())) - ((b.offset().JSBNG__top + b.height()))));\n                ((((d > 0)) && b.animate({\n                    scrollTop: ((b.scrollTop() + d))\n                })));\n            }\n        ;\n        ;\n            this.JSBNG__on(JSBNG__document, \"click.dropdown\", this.hideDropdown);\n        }, this.hideDropdown = function() {\n            var a = $(\"body\").JSBNG__find(this.attr.dropdownSelector);\n            a.removeClass(\"open\"), this.off(JSBNG__document, \"click.dropdown\", this.hideDropdown);\n        }, this.blockUserConfirmed = function(a, b) {\n            a.stopImmediatePropagation(), this.trigger(\"uiBlockAction\", b.sourceEventData);\n        }, this.emailFollow = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.addClass(\"email-following\");\n        }, this.emailUnfollow = function(a, b) {\n            var c = this.findInfoElementForUser(b.userId);\n            c.removeClass(\"email-following\");\n        }, this.after(\"initialize\", function() {\n            if (!this.attr.loggedIn) {\n                this.JSBNG__on(\"click\", {\n                    followButtonSelector: this.handleLoggedOutFollowButtonClick\n                });\n                return;\n            }\n        ;\n        ;\n            this.JSBNG__on(\"click\", {\n                followButtonSelector: this.handleFollowButtonClick,\n                emailFollowButtonSelector: this.handleEmailFollowButtonClick,\n                dropdownSelector: this.toggleDropdown,\n                dropdownItemSelector: this.handleUserAction\n            }), this.JSBNG__on(JSBNG__document, \"uiFollowStateChange dataFollowStateChange dataBulkFollowStateChange\", this.followStateChange), this.JSBNG__on(JSBNG__document, \"uiFollowAction\", this.follow), this.JSBNG__on(JSBNG__document, \"uiUnfollowAction\", this.unfollow), this.JSBNG__on(JSBNG__document, \"uiCancelFollowRequestAction\", this.cancel), this.JSBNG__on(JSBNG__document, \"uiBlockAction uiReportSpamAction\", this.block), this.JSBNG__on(JSBNG__document, \"uiUnblockAction\", this.unblock), this.JSBNG__on(JSBNG__document, \"uiRetweetOnAction dataRetweetOnAction\", this.retweetsOn), this.JSBNG__on(JSBNG__document, \"uiRetweetOffAction dataRetweetOffAction\", this.retweetsOff), this.JSBNG__on(JSBNG__document, \"uiDeviceNotificationsOnAction dataDeviceNotificationsOnAction\", this.notificationsOn), this.JSBNG__on(JSBNG__document, \"uiDeviceNotificationsOffAction dataDeviceNotificationsOffAction\", this.notificationsOff), this.JSBNG__on(JSBNG__document, \"uiShowMobileNotificationsConfirm\", this.redirectToMobileNotifications), this.JSBNG__on(JSBNG__document, \"uiShowPushTweetsNotificationsConfirm\", this.redirectToPushNotificationsHelp), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.hideDropdown), this.JSBNG__on(JSBNG__document, \"uiDidBlockUser\", this.blockUserConfirmed), this.JSBNG__on(JSBNG__document, \"uiEmailFollowAction dataEmailFollow\", this.emailFollow), this.JSBNG__on(JSBNG__document, \"uiEmailUnfollowAction dataEmailUnfollow\", this.emailUnfollow);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), _ = require(\"core/i18n\"), utils = require(\"core/utils\"), ddg = require(\"app/data/ddg\"), withInteractionData = require(\"app/ui/with_interaction_data\"), StringUtils = require(\"app/utils/string\");\n    module.exports = withUserActions;\n});\ndefine(\"app/ui/with_item_actions\", [\"module\",\"require\",\"exports\",\"core/utils\",\"core/compose\",\"app/data/user_info\",\"app/data/ddg\",\"app/ui/with_interaction_data\",\"app/data/with_card_metadata\",], function(module, require, exports) {\n    function withItemActions() {\n        compose.mixin(this, [withInteractionData,withCardMetadata,]), this.defaultAttrs({\n            pageContainer: \"#doc\",\n            nestedContainerSelector: \".js-stream-item .in-reply-to, .js-expansion-container\",\n            showWithScreenNameSelector: \".show-popup-with-screen-name, .twitter-atreply\",\n            showWithIdSelector: \".show-popup-with-id, .js-user-profile-link\",\n            searchtagSelector: \".twitter-hashtag, .twitter-cashtag\",\n            cashtagSelector: \".twitter-cashtag\",\n            itemLinkSelector: \".twitter-timeline-link\",\n            cardInteractionLinkSelector: \".js-card2-interaction-link\",\n            cardExternalLinkSelector: \".js-card2-external-link\",\n            viewMoreItemSelector: \".view-more-container\"\n        }), this.showProfilePopupWithScreenName = function(a, b) {\n            var c = $(a.target).closest(this.attr.showWithScreenNameSelector).text();\n            ((((c[0] === \"@\")) && (c = c.substring(1))));\n            var d = {\n                screenName: c\n            }, e = this.getCardDataFromTweet($(a.target));\n            b = utils.merge(this.interactionData(a, d), e), this.showProfile(a, b);\n        }, this.showProfilePopupWithId = function(a, b) {\n            var c = this.getCardDataFromTweet($(a.target));\n            b = utils.merge(this.interactionDataWithCard(a), c), this.showProfile(a, b);\n        }, this.showProfile = function(a, b) {\n            ((((this.skipProfilePopup() || this.modifierKey(a))) ? this.trigger(a.target, \"uiShowProfileNewWindow\", b) : (a.preventDefault(), this.trigger(\"uiShowProfilePopup\", b))));\n        }, this.searchtagClick = function(a, b) {\n            var c = $(a.target), d = c.closest(this.attr.searchtagSelector), e = ((d.is(this.attr.cashtagSelector) ? \"uiCashtagClick\" : \"uiHashtagClick\")), f = {\n                query: d.text()\n            };\n            this.trigger(e, this.interactionData(a, f));\n        }, this.itemLinkClick = function(a, b) {\n            var c = $(a.target).closest(this.attr.itemLinkSelector), d, e = {\n                url: ((c.attr(\"data-expanded-url\") || c.attr(\"href\"))),\n                tcoUrl: c.attr(\"href\"),\n                text: c.text()\n            };\n            e = utils.merge(e, this.getCardDataFromTweet($(a.target)));\n            if (((((e.cardName === \"promotion\")) || ((e.cardType === \"promotions\"))))) {\n                a.preventDefault(), d = c.parents(\".stream-item\"), this.trigger(d, \"uiPromotionCardUrlClick\");\n            }\n        ;\n        ;\n            this.trigger(\"uiItemLinkClick\", this.interactionData(a, e));\n        }, this.cardLinkClick = function(a, b, c) {\n            var d = $(b.target).closest(this.attr.cardLinkSelector), e = this.getCardDataFromTweet($(b.target));\n            this.trigger(a, this.interactionDataWithCard(b, e));\n        }, this.getUserIdFromElement = function(a) {\n            return ((a.length ? a.data(\"user-id\") : null));\n        }, this.itemSelected = function(a, b) {\n            var c = this.getCardDataFromTweet($(a.target));\n            ((b.organicExpansion && this.trigger(\"uiItemSelected\", utils.merge(this.interactionData(a), c))));\n        }, this.itemDeselected = function(a, b) {\n            var c = this.getCardDataFromTweet($(a.target));\n            this.trigger(\"uiItemDeselected\", utils.merge(this.interactionData(a), c));\n        }, this.isNested = function() {\n            return this.$node.closest(this.attr.nestedContainerSelector).length;\n        }, this.inDisabledPopupExperiment = function(a) {\n            var b = \"web_profile\", c = \"disable_profile_popup_848\", d = ((userInfo.getExperimentGroup(b) || userInfo.getExperimentGroup(c)));\n            return ((((d && ((d.experiment_key == c)))) && ((d.bucket == a))));\n        }, this.skipProfilePopup = function() {\n            var a = ((!!window.JSBNG__history && !!JSBNG__history.pushState)), b = ((a && userInfo.getDecider(\"pushState\"))), c = $(this.attr.pageContainer), d = c.hasClass(\"route-home\"), e = ((((c.hasClass(\"route-profile\") || c.hasClass(\"route-list\"))) || c.hasClass(\"route-permalink\"))), f = ((e && ((this.inDisabledPopupExperiment(\"disabled_on_prof_and_perma\") || this.inDisabledPopupExperiment(\"disabled_on_home_prof_and_perma\"))))), g = ((((d && b)) && this.inDisabledPopupExperiment(\"disabled_on_home_prof_and_perma\")));\n            return ((f || g));\n        }, this.modifierKey = function(a) {\n            if (((((((a.shiftKey || a.ctrlKey)) || a.metaKey)) || ((a.which > 1))))) {\n                return !0;\n            }\n        ;\n        ;\n        }, this.removeTweetsFromUser = function(a, b) {\n            var c = this.$node.JSBNG__find(((((\"[data-user-id=\" + b.userId)) + \"]\")));\n            c.parent().remove(), this.trigger(\"uiRemovedSomeTweets\");\n        }, this.navigateToViewMoreURL = function(a) {\n            var b = $(a.target), c;\n            ((b.JSBNG__find(this.attr.viewMoreItemSelector).length && (c = b.JSBNG__find(\".view-more-link\"), this.trigger(c, \"uiNavigate\", {\n                href: c.attr(\"href\")\n            }))));\n        }, this.after(\"initialize\", function() {\n            ((this.isNested() || (this.JSBNG__on(\"click\", {\n                showWithScreenNameSelector: this.showProfilePopupWithScreenName,\n                showWithIdSelector: this.showProfilePopupWithId,\n                searchtagSelector: this.searchtagClick,\n                itemLinkSelector: this.itemLinkClick,\n                cardExternalLinkSelector: this.cardLinkClick.bind(this, \"uiCardExternalLinkClick\"),\n                cardInteractionLinkSelector: this.cardLinkClick.bind(this, \"uiCardInteractionLinkClick\")\n            }), this.JSBNG__on(\"uiHasExpandedTweet\", this.itemSelected), this.JSBNG__on(\"uiHasCollapsedTweet\", this.itemDeselected), this.JSBNG__on(\"uiRemoveTweetsFromUser\", this.removeTweetsFromUser), this.JSBNG__on(\"uiShortcutEnter\", this.navigateToViewMoreURL))));\n        });\n    };\n;\n    var utils = require(\"core/utils\"), compose = require(\"core/compose\"), userInfo = require(\"app/data/user_info\"), ddg = require(\"app/data/ddg\"), withInteractionData = require(\"app/ui/with_interaction_data\"), withCardMetadata = require(\"app/data/with_card_metadata\");\n    module.exports = withItemActions;\n});\ndefine(\"app/ui/with_profile_stats\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withProfileStats() {\n        this.defaultAttrs({\n        }), this.updateProfileStats = function(a, b) {\n            if (((!b.stats || !b.stats.length))) {\n                return;\n            }\n        ;\n        ;\n            $.each(b.stats, function(a, b) {\n                this.$node.JSBNG__find(this.statSelector(b.user_id, b.stat)).html(b.html);\n            }.bind(this));\n        }, this.statSelector = function(a, b) {\n            return ((((((((\".stats[data-user-id=\\\"\" + a)) + \"\\\"] a[data-element-term=\\\"\")) + b)) + \"_stats\\\"]\"));\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(JSBNG__document, \"dataGotProfileStats\", this.updateProfileStats);\n        });\n    };\n;\n    module.exports = withProfileStats;\n});\ndefine(\"app/ui/with_handle_overflow\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withHandleOverflow() {\n        this.defaultAttrs({\n            heightOverflowClassName: \"height-overflow\"\n        }), this.checkForOverflow = function(a) {\n            a = ((a || this.$node));\n            if (((!a || !a.length))) {\n                return;\n            }\n        ;\n        ;\n            ((((a[0].scrollHeight > a.height())) ? a.addClass(this.attr.heightOverflowClassName) : a.removeClass(this.attr.heightOverflowClassName)));\n        };\n    };\n;\n    module.exports = withHandleOverflow;\n});\ndefine(\"app/ui/profile_popup\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/ui/with_user_actions\",\"app/ui/with_item_actions\",\"app/ui/with_profile_stats\",\"app/ui/with_handle_overflow\",], function(module, require, exports) {\n    function profilePopup() {\n        this.defaultAttrs({\n            modalSelector: \".modal\",\n            dialogContentSelector: \".profile-modal\",\n            profileHeaderInnerSelector: \".profile-header-inner\",\n            socialProofSelector: \".social-proof\",\n            tweetSelector: \".simple-tweet\",\n            slideDuration: 100,\n            JSBNG__top: 47,\n            bottom: 10,\n            tweetMinimum: 2,\n            itemType: \"user\"\n        }), this.slideInContent = function(a) {\n            var b = this.$dialog.height(), c = $(a);\n            this.addHeaderImage(c), this.$contentContainer.html(c), this.$node.addClass(\"has-content\"), this.removeTweets();\n            var d = this.$dialog.height();\n            this.$dialog.height(b), this.$dialog.animate({\n                height: d\n            }, this.attr.slideDuration, this.slideInComplete.bind(this));\n        }, this.removeTweets = function() {\n            var a = this.select(\"tweetSelector\");\n            for (var b = ((a.length - 1)); ((b > ((this.attr.tweetMinimum - 1)))); b--) {\n                if (!this.isTooTall()) {\n                    return;\n                }\n            ;\n            ;\n                a.eq(b).remove();\n            };\n        ;\n        }, this.getWindowHeight = function() {\n            return $(window).height();\n        }, this.isTooTall = function() {\n            return ((((((this.$dialog.height() + this.attr.JSBNG__top)) + this.attr.bottom)) > this.getWindowHeight()));\n        }, this.addHeaderImage = function(a) {\n            var b = a.JSBNG__find(this.attr.profileHeaderInnerSelector);\n            b.css(\"background-image\", b.attr(\"data-background-image\"));\n        }, this.slideInComplete = function() {\n            this.checkForOverflow(this.select(\"profileHeaderInnerSelector\"));\n        }, this.clearPopup = function() {\n            this.$dialog.height(\"auto\"), this.$contentContainer.empty();\n        }, this.openProfilePopup = function(a, b) {\n            ((b.screenName && delete b.userId));\n            if (((((b.userId && ((b.userId === this.currentUserId())))) || ((b.screenName && ((b.screenName === this.currentScreenName()))))))) {\n                return;\n            }\n        ;\n        ;\n            this.open(), this.clearPopup(), this.$node.removeClass(\"has-content\"), this.$node.attr(\"data-associated-tweet-id\", ((b.tweetId || null))), this.$node.attr(\"data-impression-id\", ((b.impressionId || null))), this.$node.attr(\"data-disclosure-type\", ((b.disclosureType || null))), this.$node.attr(\"data-impression-cookie\", ((b.impressionCookie || null))), this.trigger(\"uiWantsProfilePopup\", b);\n        }, this.closeProfilePopup = function(a) {\n            this.clearPopup(), this.trigger(\"uiCloseProfilePopup\", {\n                userId: this.currentUserId(),\n                screenName: this.currentScreenName()\n            });\n        }, this.fillProfile = function(a, b) {\n            this.$node.attr(\"data-screen-name\", ((b.screen_name || null))), this.$node.attr(\"data-user-id\", ((b.user_id || null))), this.slideInContent(b.html);\n        }, this.removeSocialProof = function(a, b) {\n            this.select(\"socialProofSelector\").remove();\n        }, this.addSocialProof = function(a, b) {\n            ((b.html ? (this.select(\"socialProofSelector\").html(b.html), this.trigger(\"uiHasPopupSocialProof\")) : this.removeSocialProof()));\n        }, this.showError = function(a, b) {\n            var c = [\"\\u003Cdiv class=\\\"profile-modal-header error\\\"\\u003E\\u003Cp\\u003E\",b.message,\"\\u003C/p\\u003E\\u003C/div\\u003E\",].join(\"\");\n            this.slideInContent(c);\n        }, this.getPopupData = function(a) {\n            return ((((!this.isOpen() || !this.$node.hasClass(\"has-content\"))) ? null : this.$node.attr(a)));\n        }, this.currentScreenName = function() {\n            return this.getPopupData(\"data-screen-name\");\n        }, this.currentUserId = function() {\n            return this.getPopupData(\"data-user-id\");\n        }, this.after(\"initialize\", function() {\n            this.$contentContainer = this.select(\"dialogContentSelector\"), this.JSBNG__on(JSBNG__document, \"uiShowProfilePopup\", this.openProfilePopup), this.JSBNG__on(JSBNG__document, \"dataProfilePopupSuccess\", this.fillProfile), this.JSBNG__on(JSBNG__document, \"dataProfilePopupFailure\", this.showError), this.JSBNG__on(JSBNG__document, \"dataSocialProofSuccess\", this.addSocialProof), this.JSBNG__on(JSBNG__document, \"dataSocialProofFailure\", this.removeSocialProof), this.JSBNG__on(JSBNG__document, \"uiOpenConfirmDialog uiOpenTweetDialog uiNeedsDMDialog uiListAction uiOpenSigninOrSignupDialog uiEmbedProfileAction\", this.close), this.JSBNG__on(\"uiDialogClosed\", this.closeProfilePopup);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), withUserActions = require(\"app/ui/with_user_actions\"), withItemActions = require(\"app/ui/with_item_actions\"), withProfileStats = require(\"app/ui/with_profile_stats\"), withHandleOverflow = require(\"app/ui/with_handle_overflow\"), ProfilePopup = defineComponent(profilePopup, withDialog, withPosition, withUserActions, withItemActions, withProfileStats, withHandleOverflow);\n    module.exports = ProfilePopup;\n});\ndefine(\"app/data/profile_edit_btn_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function profileEditBtnScribe() {\n        this.defaultAttrs({\n            editButtonSelector: \".edit-profile-btn\",\n            scribeContext: {\n            }\n        }), this.scribeAction = function(a) {\n            var b = utils.merge(this.attr.scribeContext, {\n                action: a\n            });\n            return function(a, c) {\n                b.element = $(a.target).attr(\"data-scribe-element\"), this.scribe(b);\n            };\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                editButtonSelector: this.scribeAction(\"click\")\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(profileEditBtnScribe, withScribe);\n});\ndefine(\"app/data/user\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_data\",], function(module, require, exports) {\n    function userData() {\n        this.updateFollowStatus = function(a, b) {\n            function c(c) {\n                this.trigger(\"dataFollowStateChange\", utils.merge(c, a, {\n                    userId: a.userId,\n                    newState: c.new_state,\n                    requestUrl: b,\n                    isFollowBack: c.is_follow_back\n                })), this.trigger(JSBNG__document, \"dataGotProfileStats\", {\n                    stats: c.profile_stats\n                });\n            };\n        ;\n            function d(b) {\n                var c = a.userId, d = a.originalFollowState;\n                ((b.new_state && (d = b.new_state))), this.trigger(\"dataFollowStateChange\", utils.merge(b, {\n                    userId: c,\n                    newState: d\n                }));\n            };\n        ;\n            var e = ((a.disclosureType ? ((a.disclosureType == \"earned\")) : undefined));\n            this.post({\n                url: b,\n                data: {\n                    user_id: a.userId,\n                    impression_id: a.impressionId,\n                    earned: e,\n                    fromShortcut: a.fromShortcut\n                },\n                eventData: a,\n                success: c.bind(this),\n                error: d.bind(this)\n            });\n        }, this.reversibleAjaxCall = function(a, b, c) {\n            function d(c) {\n                this.trigger(\"dataUserActionSuccess\", $.extend({\n                }, c, {\n                    userId: a.userId,\n                    requestUrl: b\n                })), ((c.message && this.trigger(\"uiShowMessage\", c)));\n            };\n        ;\n            function e(b) {\n                this.trigger(c, a);\n            };\n        ;\n            this.post({\n                url: b,\n                data: {\n                    user_id: a.userId,\n                    impression_id: a.impressionId\n                },\n                eventData: a,\n                success: d.bind(this),\n                error: e.bind(this)\n            });\n        }, this.normalAjaxCall = function(a, b) {\n            function c(c) {\n                this.trigger(\"dataUserActionSuccess\", $.extend({\n                }, c, {\n                    userId: a.userId,\n                    requestUrl: b\n                })), ((c.message && this.trigger(\"uiShowMessage\", c)));\n            };\n        ;\n            this.post({\n                url: b,\n                data: {\n                    user_id: a.userId,\n                    token: a.feedbackToken,\n                    impression_id: a.impressionId\n                },\n                eventData: a,\n                success: c.bind(this),\n                error: \"dataUserActionError\"\n            });\n        }, this.followAction = function(a, b) {\n            var c = \"/i/user/follow\";\n            this.updateFollowStatus(b, c);\n        }, this.unfollowAction = function(a, b) {\n            var c = \"/i/user/unfollow\";\n            this.updateFollowStatus(b, c);\n        }, this.cancelAction = function(a, b) {\n            var c = \"/i/user/cancel\";\n            this.updateFollowStatus(b, c);\n        }, this.blockAction = function(a, b) {\n            var c = \"/i/user/block\";\n            this.updateFollowStatus(b, c);\n        }, this.unblockAction = function(a, b) {\n            var c = \"/i/user/unblock\";\n            this.updateFollowStatus(b, c);\n        }, this.reportSpamAction = function(a, b) {\n            this.normalAjaxCall(b, \"/i/user/report_spam\");\n        }, this.hideSuggestionAction = function(a, b) {\n            this.normalAjaxCall(b, \"/i/user/hide\");\n        }, this.retweetOnAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/user/retweets_on\", \"dataRetweetOffAction\");\n        }, this.retweetOffAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/user/retweets_off\", \"dataRetweetOnAction\");\n        }, this.deviceNotificationsOnAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/user/device_notifications_on\", \"dataDeviceNotificationsOffAction\");\n        }, this.deviceNotificationsOffAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/user/device_notifications_off\", \"dataDeviceNotificationsOnAction\");\n        }, this.emailFollowAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/email_follow/email_follow\", \"dataEmailUnfollow\");\n        }, this.emailUnfollowAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/email_follow/email_unfollow\", \"dataEmailFollow\");\n        }, this.enableEmailFollowAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/email_follow/enable\", \"dataDisableEmailFollow\");\n        }, this.disableEmailFollowAction = function(a, b) {\n            this.reversibleAjaxCall(b, \"/i/email_follow/disable\", \"dataEnableEmailFollow\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiFollowAction\", this.followAction), this.JSBNG__on(JSBNG__document, \"uiUnfollowAction\", this.unfollowAction), this.JSBNG__on(JSBNG__document, \"uiCancelFollowRequestAction\", this.cancelAction), this.JSBNG__on(JSBNG__document, \"uiBlockAction\", this.blockAction), this.JSBNG__on(JSBNG__document, \"uiUnblockAction\", this.unblockAction), this.JSBNG__on(JSBNG__document, \"uiReportSpamAction\", this.reportSpamAction), this.JSBNG__on(JSBNG__document, \"uiHideSuggestionAction\", this.hideSuggestionAction), this.JSBNG__on(JSBNG__document, \"uiRetweetOnAction\", this.retweetOnAction), this.JSBNG__on(JSBNG__document, \"uiRetweetOffAction\", this.retweetOffAction), this.JSBNG__on(JSBNG__document, \"uiDeviceNotificationsOnAction\", this.deviceNotificationsOnAction), this.JSBNG__on(JSBNG__document, \"uiDeviceNotificationsOffAction\", this.deviceNotificationsOffAction), this.JSBNG__on(JSBNG__document, \"uiEmailFollowAction\", this.emailFollowAction), this.JSBNG__on(JSBNG__document, \"uiEmailUnfollowAction\", this.emailUnfollowAction), this.JSBNG__on(JSBNG__document, \"uiEnableEmailFollowAction\", this.enableEmailFollowAction), this.JSBNG__on(JSBNG__document, \"uiDisableEmailFollowAction\", this.disableEmailFollowAction);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withData = require(\"app/data/with_data\"), UserData = defineComponent(userData, withData);\n    module.exports = UserData;\n});\ndefine(\"app/data/lists\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function listsData() {\n        this.listMembershipContent = function(a, b) {\n            this.get({\n                url: ((((\"/i/\" + b.userId)) + \"/lists\")),\n                dataType: \"json\",\n                data: {\n                },\n                eventData: b,\n                success: \"dataGotListMembershipContent\",\n                error: \"dataFailedToGetListMembershipContent\"\n            });\n        }, this.addUserToList = function(a, b) {\n            this.post({\n                url: ((((((((\"/i/\" + b.userId)) + \"/lists/\")) + b.listId)) + \"/members\")),\n                dataType: \"json\",\n                data: {\n                },\n                eventData: b,\n                success: \"dataDidAddUserToList\",\n                error: \"dataFailedToAddUserToList\"\n            });\n        }, this.removeUserFromList = function(a, b) {\n            this.destroy({\n                url: ((((((((\"/i/\" + b.userId)) + \"/lists/\")) + b.listId)) + \"/members\")),\n                dataType: \"json\",\n                data: {\n                },\n                eventData: b,\n                success: \"dataDidRemoveUserFromList\",\n                error: \"dataFailedToRemoveUserFromList\"\n            });\n        }, this.createList = function(a, b) {\n            this.post({\n                url: \"/i/lists/create\",\n                dataType: \"json\",\n                data: b,\n                eventData: b,\n                success: \"dataDidCreateList\",\n                error: \"dataFailedToCreateList\"\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsListMembershipContent\", this.listMembershipContent), this.JSBNG__on(\"uiAddUserToList\", this.addUserToList), this.JSBNG__on(\"uiRemoveUserFromList\", this.removeUserFromList), this.JSBNG__on(\"uiCreateList\", this.createList);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(listsData, withData);\n});\ndefine(\"app/boot/profile_popup\", [\"module\",\"require\",\"exports\",\"core/utils\",\"app/data/profile_popup\",\"app/data/profile_popup_scribe\",\"app/ui/profile_popup\",\"app/data/profile_edit_btn_scribe\",\"app/data/user\",\"app/data/lists\",], function(module, require, exports) {\n    function initialize(a) {\n        ProfilePopupData.attachTo(JSBNG__document, utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"profile_dialog\"\n                }\n            }\n        })), UserData.attachTo(JSBNG__document, a), Lists.attachTo(JSBNG__document, a), ProfilePopup.attachTo(\"#profile_popup\", utils.merge(a, {\n            eventData: {\n                scribeContext: {\n                    component: \"profile_dialog\"\n                }\n            }\n        })), ProfileEditBtnScribe.attachTo(\"#profile_popup\", {\n            scribeContext: {\n                component: \"profile_dialog\"\n            }\n        }), ProfilePopupScribe.attachTo(JSBNG__document, a);\n    };\n;\n    var utils = require(\"core/utils\"), ProfilePopupData = require(\"app/data/profile_popup\"), ProfilePopupScribe = require(\"app/data/profile_popup_scribe\"), ProfilePopup = require(\"app/ui/profile_popup\"), ProfileEditBtnScribe = require(\"app/data/profile_edit_btn_scribe\"), UserData = require(\"app/data/user\"), Lists = require(\"app/data/lists\"), hasPopup = (($(\"#profile_popup\").length > 0));\n    module.exports = ((hasPopup ? initialize : $.noop));\n});\ndefine(\"app/data/typeahead/with_cache\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function WithCache() {\n        this.defaultAttrs({\n            cache_limit: 10\n        }), this.getCachedSuggestions = function(a) {\n            return ((this.cache[a] ? this.cache[a].value : null));\n        }, this.clearCache = function() {\n            this.cache = {\n                NEWEST: null,\n                OLDEST: null,\n                COUNT: 0,\n                LIMIT: this.attr.cache_limit\n            };\n        }, this.deleteCachedSuggestions = function(a) {\n            return ((this.cache[a] ? (((((this.cache.COUNT > 1)) && ((((a == this.cache.NEWEST.query)) ? (this.cache.NEWEST = this.cache.NEWEST.before, this.cache.NEWEST.after = null) : ((((a == this.cache.OLDEST.query)) ? (this.cache.OLDEST = this.cache.OLDEST.after, this.cache.OLDEST.before = null) : (this.cache[a].after.before = this.cache[a].before, this.cache[a].before.after = this.cache[a].after))))))), delete this.cache[a], this.cache.COUNT -= 1, !0) : !1));\n        }, this.setCachedSuggestions = function(a, b) {\n            if (((this.cache.LIMIT === 0))) {\n                return;\n            }\n        ;\n        ;\n            this.deleteCachedSuggestions(a), ((((this.cache.COUNT >= this.cache.LIMIT)) && this.deleteCachedSuggestions(this.cache.OLDEST.query))), ((((this.cache.COUNT == 0)) ? (this.cache[a] = {\n                query: a,\n                value: b,\n                before: null,\n                after: null\n            }, this.cache.NEWEST = this.cache[a], this.cache.OLDEST = this.cache[a]) : (this.cache[a] = {\n                query: a,\n                value: b,\n                before: this.cache.NEWEST,\n                after: null\n            }, this.cache.NEWEST.after = this.cache[a], this.cache.NEWEST = this.cache[a]))), this.cache.COUNT += 1;\n        }, this.aroundGetSuggestions = function(a, b, c) {\n            var d = ((((c.id + \":\")) + c.query)), e = this.getCachedSuggestions(d);\n            if (e) {\n                this.triggerSuggestionsEvent(c.id, c.query, e);\n                return;\n            }\n        ;\n        ;\n            a(b, c);\n        }, this.afterTriggerSuggestionsEvent = function(a, b, c, d) {\n            if (d) {\n                return;\n            }\n        ;\n        ;\n            var e = ((((a + \":\")) + b));\n            this.setCachedSuggestions(e, c);\n        }, this.after(\"triggerSuggestionsEvent\", this.afterTriggerSuggestionsEvent), this.around(\"getSuggestions\", this.aroundGetSuggestions), this.after(\"initialize\", function(a) {\n            this.clearCache(), this.JSBNG__on(\"uiTypeaheadDeleteRecentSearch\", this.clearCache);\n        });\n    };\n;\n    module.exports = WithCache;\n});\ndefine(\"app/utils/typeahead_helpers\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function tokenizeText(a) {\n        return a.trim().toLowerCase().split(/[\\s_,.-]+/);\n    };\n;\n    function getFirstChar(a) {\n        var b;\n        return ((multiByteRegex.test(a.substr(0, 1)) ? b = a.substr(0, 2) : b = a.charAt(0))), b;\n    };\n;\n    var multiByteRegex = /[\\uD800-\\uDFFF]/;\n    module.exports = {\n        tokenizeText: tokenizeText,\n        getFirstChar: getFirstChar\n    };\n});\ndefine(\"app/data/with_datasource_helpers\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    function withDatasourceHelpers() {\n        this.prefetch = function(a, b) {\n            var c = {\n                prefetch: !0,\n                result_type: b,\n                count: this.getPrefetchCount()\n            };\n            c[((b + \"_cache_age\"))] = this.storage.getCacheAge(this.attr.storageHash, this.attr.ttl_ms), this.get({\n                url: a,\n                headers: {\n                    \"X-Phx\": !0\n                },\n                data: c,\n                eventData: {\n                },\n                success: this.processResults.bind(this),\n                error: this.useStaleData.bind(this)\n            });\n        }, this.useStaleData = function() {\n            this.extendTTL(), this.getDataFromLocalStorage();\n        }, this.extendTTL = function() {\n            var a = this.getStorageKeys();\n            for (var b = 0; ((b < a.length)); b++) {\n                this.storage.updateTTL(a[b], this.attr.ttl_ms);\n            ;\n            };\n        ;\n        }, this.loadData = function(a, b) {\n            var c = this.getStorageKeys().some(function(a) {\n                return this.storage.isExpired(a);\n            }, this);\n            ((((c || this.isMetadataExpired())) ? this.prefetch(a, b) : this.getDataFromLocalStorage()));\n        }, this.isIE8 = function() {\n            return (($.browser.msie && ((parseInt($.browser.version, 10) === 8))));\n        }, this.getProtocol = function() {\n            return window.JSBNG__location.protocol;\n        };\n    };\n;\n    module.exports = withDatasourceHelpers;\n});\ndefine(\"app/data/typeahead/accounts_datasource\", [\"module\",\"require\",\"exports\",\"app/utils/typeahead_helpers\",\"app/utils/storage/custom\",\"app/data/with_data\",\"core/compose\",\"core/utils\",\"app/data/with_datasource_helpers\",], function(module, require, exports) {\n    function accountsDatasource(a) {\n        this.attr = {\n            id: null,\n            ttl_ms: 259200000,\n            localStorageCount: 1200,\n            ie8LocalStorageCount: 1000,\n            limit: 6,\n            version: 4,\n            localQueriesEnabled: !1,\n            remoteQueriesEnabled: !1,\n            onlyDMable: !1,\n            storageAdjacencyList: \"userAdjacencyList\",\n            storageHash: \"userHash\",\n            storageProtocol: \"protocol\",\n            storageVersion: \"userVersion\",\n            remotePath: \"/i/search/typeahead.json\",\n            remoteType: \"users\",\n            prefetchPath: \"/i/search/typeahead.json\",\n            prefetchType: \"users\",\n            storageBlackList: \"userBlackList\",\n            maxLengthBlacklist: 100\n        }, this.attr = util.merge(this.attr, a), this.after = function() {\n        \n        }, compose.mixin(this, [withData,withDatasourceHelpers,]), this.getPrefetchCount = function() {\n            return ((((this.isIE8() && ((this.attr.localStorageCount > this.attr.ie8LocalStorageCount)))) ? this.attr.ie8LocalStorageCount : this.attr.localStorageCount));\n        }, this.isMetadataExpired = function() {\n            var a = this.storage.getItem(this.attr.storageVersion), b = this.storage.getItem(this.attr.storageProtocol);\n            return ((((((a == this.attr.version)) && ((b == this.getProtocol())))) ? !1 : !0));\n        }, this.getStorageKeys = function() {\n            return [this.attr.storageVersion,this.attr.storageHash,this.attr.storageAdjacencyList,this.attr.storageProtocol,];\n        }, this.getDataFromLocalStorage = function() {\n            this.userHash = ((this.storage.getItem(this.attr.storageHash) || this.userHash)), this.adjacencyList = ((this.storage.getItem(this.attr.storageAdjacencyList) || this.adjacencyList));\n        }, this.processResults = function(a) {\n            if (((!a || !a[this.attr.prefetchType]))) {\n                this.useStaleData();\n                return;\n            }\n        ;\n        ;\n            a[this.attr.prefetchType].forEach(function(a) {\n                a.tokens = a.tokens.map(function(a) {\n                    return ((((typeof a == \"string\")) ? a : a.token));\n                }), this.userHash[a.id] = a, a.tokens.forEach(function(b) {\n                    var c = helpers.getFirstChar(b);\n                    ((((this.adjacencyList[c] === undefined)) && (this.adjacencyList[c] = []))), ((((this.adjacencyList[c].indexOf(a.id) === -1)) && this.adjacencyList[c].push(a.id)));\n                }, this);\n            }, this), this.storage.setItem(this.attr.storageHash, this.userHash, this.attr.ttl_ms), this.storage.setItem(this.attr.storageAdjacencyList, this.adjacencyList, this.attr.ttl_ms), this.storage.setItem(this.attr.storageVersion, this.attr.version, this.attr.ttl_ms), this.storage.setItem(this.attr.storageProtocol, this.getProtocol(), this.attr.ttl_ms);\n        }, this.getLocalSuggestions = function(a) {\n            if (!this.attr.localQueriesEnabled) {\n                return [];\n            }\n        ;\n        ;\n            var b = helpers.tokenizeText(a.replace(\"@\", \"\")), c = this.getPotentiallyMatchingIds(b), d = this.getAccountsFromIds(c), e = d.filter(this.matcher(b));\n            return e.sort(this.sorter), e = e.slice(0, this.attr.limit), e;\n        }, this.getPotentiallyMatchingIds = function(a) {\n            var b = [];\n            return a.map(function(a) {\n                var c = this.adjacencyList[helpers.getFirstChar(a)];\n                ((c && (b = b.concat(c))));\n            }, this), b = util.uniqueArray(b), b;\n        }, this.getAccountsFromIds = function(a) {\n            var b = [];\n            return a.forEach(function(a) {\n                var c = this.userHash[a];\n                ((c && b.push(c)));\n            }, this), b;\n        }, this.matcher = function(a) {\n            return function(b) {\n                var c = b.tokens, d = [];\n                if (((this.attr.onlyDMable && !b.is_dm_able))) {\n                    return !1;\n                }\n            ;\n            ;\n                var e = a.every(function(a) {\n                    var b = c.filter(function(b) {\n                        return ((b.indexOf(a) === 0));\n                    });\n                    return b.length;\n                });\n                if (e) {\n                    return b;\n                }\n            ;\n            ;\n            }.bind(this);\n        }, this.sorter = function(a, b) {\n            function e(a, b, c) {\n                var d = ((a.score_boost ? a.score_boost : 0)), e = ((b.score_boost ? b.score_boost : 0)), f = ((a.rounded_score ? a.rounded_score : 0)), g = ((b.rounded_score ? b.rounded_score : 0));\n                return ((c ? ((((b.rounded_graph_weight + e)) - ((a.rounded_graph_weight + d)))) : ((((g + e)) - ((f + d))))));\n            };\n        ;\n            var c = ((a.rounded_graph_weight && ((a.rounded_graph_weight !== 0)))), d = ((b.rounded_graph_weight && ((b.rounded_graph_weight !== 0))));\n            return ((((c && !d)) ? -1 : ((((d && !c)) ? 1 : ((((c && d)) ? e(a, b, !0) : e(a, b, !1)))))));\n        }, this.processRemoteSuggestions = function(a, b, c) {\n            var d = ((c[this.attr.id] || [])), e = {\n            };\n            return d.forEach(function(a) {\n                e[a.id] = !0;\n            }, this), ((((this.attr.remoteQueriesEnabled && b[this.attr.remoteType])) && b[this.attr.remoteType].forEach(function(a) {\n                ((((!e[a.id] && ((!this.attr.onlyDMable || a.is_dm_able)))) && d.push(a)));\n            }, this))), c[this.attr.id] = d.slice(0, this.attr.limit), c[this.attr.id].forEach(function(a) {\n                this.removeBlacklistSocialContext(a);\n            }, this), c;\n        }, this.removeBlacklistSocialContext = function(a) {\n            ((((a.first_connecting_user_id in this.socialContextBlackList)) && (a.first_connecting_user_name = undefined, a.first_connecting_user_id = undefined)));\n        }, this.requiresRemoteSuggestions = function() {\n            return this.attr.remoteQueriesEnabled;\n        }, this.initialize = function() {\n            var a = customStorage({\n                withExpiry: !0\n            });\n            this.storage = new a(\"typeahead\"), this.adjacencyList = {\n            }, this.userHash = {\n            }, this.loadData(this.attr.prefetchPath, this.attr.prefetchType), this.socialContextBlackList = ((this.storage.getItem(this.attr.storageBlackList) || {\n            }));\n        }, this.initialize();\n    };\n;\n    var helpers = require(\"app/utils/typeahead_helpers\"), customStorage = require(\"app/utils/storage/custom\"), withData = require(\"app/data/with_data\"), compose = require(\"core/compose\"), util = require(\"core/utils\"), withDatasourceHelpers = require(\"app/data/with_datasource_helpers\");\n    module.exports = accountsDatasource;\n});\ndefine(\"app/data/typeahead/saved_searches_datasource\", [\"module\",\"require\",\"exports\",\"core/utils\",], function(module, require, exports) {\n    function savedSearchesDatasource(a) {\n        this.attr = {\n            id: null,\n            items: [],\n            limit: 0,\n            searchPathWithQuery: \"/search?src=savs&q=\",\n            querySource: \"saved_search_click\"\n        }, this.attr = util.merge(this.attr, a), this.getRemoteSuggestions = function(a, b, c) {\n            return c;\n        }, this.requiresRemoteSuggestions = function() {\n            return !1;\n        }, this.getLocalSuggestions = function(a) {\n            return ((a ? ((((this.attr.limit === 0)) ? [] : this.attr.items.filter(function(b) {\n                return ((b.JSBNG__name.indexOf(a) == 0));\n            }).slice(0, this.attr.limit))) : this.attr.items));\n        }, this.addSavedSearch = function(a) {\n            if (((!a || !a.query))) {\n                return;\n            }\n        ;\n        ;\n            this.attr.items.push({\n                id: a.id,\n                id_str: a.id_str,\n                JSBNG__name: a.JSBNG__name,\n                query: a.query,\n                saved_search_path: ((this.attr.searchPathWithQuery + encodeURIComponent(a.query))),\n                search_query_source: this.attr.querySource\n            });\n        }, this.removeSavedSearch = function(a) {\n            if (((!a || !a.query))) {\n                return;\n            }\n        ;\n        ;\n            var b = this.attr.items;\n            for (var c = 0; ((c < b.length)); c++) {\n                if (((((b[c].query === a.query)) || ((b[c].JSBNG__name === a.query))))) {\n                    b.splice(c, 1);\n                    return;\n                }\n            ;\n            ;\n            };\n        ;\n        };\n    };\n;\n    var util = require(\"core/utils\");\n    module.exports = savedSearchesDatasource;\n});\ndefine(\"app/data/typeahead/recent_searches_datasource\", [\"module\",\"require\",\"exports\",\"core/utils\",\"app/utils/storage/custom\",\"app/data/with_datasource_helpers\",], function(module, require, exports) {\n    function recentSearchesDatasource(a) {\n        this.attr = {\n            id: null,\n            limit: 4,\n            storageList: \"recentSearchesList\",\n            maxLength: 100,\n            ttl_ms: 1209600000,\n            searchPathWithQuery: \"/search?src=rec&q=\",\n            querySource: \"recent_search_click\"\n        }, this.attr = util.merge(this.attr, a), this.getRemoteSuggestions = function(a, b, c) {\n            return c;\n        }, this.requiresRemoteSuggestions = function() {\n            return !1;\n        }, this.removeAllRecentSearches = function() {\n            this.items = [], this.updateStorage();\n        }, this.getLocalSuggestions = function(a) {\n            return ((((a === \"\")) ? this.items.slice(0, this.attr.limit) : this.items.filter(function(b) {\n                return ((b.JSBNG__name.indexOf(a) == 0));\n            }).slice(0, this.attr.limit)));\n        }, this.updateStorage = function() {\n            this.storage.setItem(this.attr.storageList, this.items, this.attr.ttl_ms);\n        }, this.removeOneRecentSearch = function(a) {\n            this.removeRecentSearchFromList(a.query), this.updateStorage();\n        }, this.addRecentSearch = function(a) {\n            if (((!a || !a.query))) {\n                return;\n            }\n        ;\n        ;\n            a.query = a.query.trim(), this.updateRecentSearchList(a), this.updateStorage();\n        }, this.updateRecentSearchList = function(a) {\n            var b = this.items, c = {\n                JSBNG__name: a.query,\n                recent_search_path: ((this.attr.searchPathWithQuery + encodeURIComponent(a.query))),\n                search_query_source: this.attr.querySource\n            };\n            this.removeRecentSearchFromList(a.query), b.unshift(c), ((((b.length > this.attr.maxLength)) && b.pop()));\n        }, this.removeRecentSearchFromList = function(a) {\n            var b = this.items, c = -1;\n            for (var d = 0; ((d < b.length)); d++) {\n                if (((b[d].JSBNG__name === a))) {\n                    c = d;\n                    break;\n                }\n            ;\n            ;\n            };\n        ;\n            ((((c !== -1)) && b.splice(c, 1)));\n        }, this.initialize = function() {\n            var a = customStorage({\n                withExpiry: !0\n            });\n            this.storage = new a(\"typeahead\"), this.items = ((this.storage.getItem(this.attr.storageList) || []));\n        }, this.initialize();\n    };\n;\n    var util = require(\"core/utils\"), customStorage = require(\"app/utils/storage/custom\"), withDatasourceHelpers = require(\"app/data/with_datasource_helpers\");\n    module.exports = recentSearchesDatasource;\n});\ndefine(\"app/data/typeahead/with_external_event_listeners\", [\"module\",\"require\",\"exports\",\"app/utils/typeahead_helpers\",], function(module, require, exports) {\n    function WithExternalEventListeners() {\n        this.defaultAttrs({\n            weights: {\n                CACHED_PROFILE_VISIT: 10,\n                UNCACHED_PROFILE_VISIT: 75,\n                FOLLOW: 100\n            }\n        }), this.cleanupUserData = function(a) {\n            this.removeAccount(a), this.addToUserBlacklist(a);\n        }, this.onFollowStateChange = function(a, b) {\n            if (((!b.user || !b.userId))) {\n                return;\n            }\n        ;\n        ;\n            switch (b.newState) {\n              case \"blocked\":\n                this.cleanupUserData(b.userId);\n                break;\n              case \"not-following\":\n                this.cleanupUserData(b.userId);\n                break;\n              case \"following\":\n                this.adjustScoreBoost(b.user, this.attr.weights.FOLLOW), this.addAccount(b.user, \"following\"), this.removeUserFromBlacklist(b.userId);\n            };\n        ;\n            this.updateLocalStorage();\n        }, this.onProfileVisit = function(a, b) {\n            var c = this.datasources.accounts.userHash[b.id];\n            ((c ? this.adjustScoreBoost(c, this.attr.weights.CACHED_PROFILE_VISIT) : (this.adjustScoreBoost(b, this.attr.weights.UNCACHED_PROFILE_VISIT), this.addAccount(b, \"visit\")))), this.updateLocalStorage();\n        }, this.updateLocalStorage = function() {\n            this.datasources.accounts.storage.setItem(\"userHash\", this.datasources.accounts.userHash, this.datasources.accounts.attr.ttl), this.datasources.accounts.storage.setItem(\"adjacencyList\", this.datasources.accounts.adjacencyList, this.datasources.accounts.attr.ttl), this.datasources.accounts.storage.setItem(\"version\", this.datasources.accounts.attr.version, this.datasources.accounts.attr.ttl);\n        }, this.removeAccount = function(a) {\n            if (!this.datasources.accounts.userHash[a]) {\n                return;\n            }\n        ;\n        ;\n            var b = this.datasources.accounts.userHash[a].tokens;\n            b.forEach(function(b) {\n                var c = this.datasources.accounts.adjacencyList[b.charAt(0)];\n                if (!c) {\n                    return;\n                }\n            ;\n            ;\n                var d = c.indexOf(a);\n                if (((d === -1))) {\n                    return;\n                }\n            ;\n            ;\n                c.splice(d, 1);\n            }, this), delete this.datasources.accounts.userHash[a];\n        }, this.adjustScoreBoost = function(a, b) {\n            ((a.score_boost ? a.score_boost += b : a.score_boost = b));\n        }, this.addAccount = function(a, b) {\n            this.datasources.accounts.userHash[a.id] = a, a.tokens = [((\"@\" + a.screen_name)),a.screen_name,].concat(helpers.tokenizeText(a.JSBNG__name)), a.social_proof = ((((b === \"following\")) ? 1 : 0)), a.tokens.forEach(function(b) {\n                var c = b.charAt(0);\n                if (!this.datasources.accounts.adjacencyList[c]) {\n                    this.datasources.accounts.adjacencyList[c] = [a.id,];\n                    return;\n                }\n            ;\n            ;\n                ((((this.datasources.accounts.adjacencyList[c].indexOf(a.id) === -1)) && this.datasources.accounts.adjacencyList[c].push(a.id)));\n            }, this);\n        }, this.removeOldAccountsInBlackList = function() {\n            var a, b, c = 0, d = ((this.datasources.accounts.attr.maxLengthBlacklist || 100)), e = this.datasources.accounts.socialContextBlackList, f = (new JSBNG__Date).getTime(), g = this.datasources.accounts.attr.ttl_ms;\n            {\n                var fin67keys = ((window.top.JSBNG_Replay.forInKeys)((e))), fin67i = (0);\n                (0);\n                for (; (fin67i < fin67keys.length); (fin67i++)) {\n                    ((b) = (fin67keys[fin67i]));\n                    {\n                        var h = ((e[b] + g));\n                        ((((h < f)) ? delete e[b] : (a = ((a || b)), a = ((((e[a] > e[b])) ? b : a)), c += 1)));\n                    };\n                };\n            };\n        ;\n            ((((d < c)) && delete e[a]));\n        }, this.updateBlacklistLocalStorage = function(a) {\n            this.datasources.accounts.storage.setItem(\"userBlackList\", a, this.attr.ttl);\n        }, this.addToUserBlacklist = function(a) {\n            var b = this.datasources.accounts.socialContextBlackList;\n            b[a] = (new JSBNG__Date).getTime(), this.removeOldAccountsInBlackList(), this.updateBlacklistLocalStorage(b);\n        }, this.removeUserFromBlacklist = function(a) {\n            var b = this.datasources.accounts.socialContextBlackList;\n            this.removeOldAccountsInBlackList(), ((b[a] && (delete b[a], this.updateBlacklistLocalStorage(b))));\n        }, this.checkItemTypeForRecentSearch = function(a) {\n            return ((((((((a === \"saved_search\")) || ((a === \"topics\")))) || ((a === \"recent_search\")))) ? !0 : !1));\n        }, this.addSavedSearch = function(a, b) {\n            this.datasources.savedSearches.addSavedSearch(b);\n        }, this.removeSavedSearch = function(a, b) {\n            this.datasources.savedSearches.removeSavedSearch(b);\n        }, this.addRecentSearch = function(a, b) {\n            ((((b.source === \"search\")) ? this.datasources.recentSearches.addRecentSearch({\n                query: b.query\n            }) : ((((this.checkItemTypeForRecentSearch(b.source) && b.isSearchInput)) && this.datasources.recentSearches.addRecentSearch({\n                query: b.query\n            })))));\n        }, this.removeRecentSearch = function(a, b) {\n            ((b.deleteAll ? this.datasources.recentSearches.removeAllRecentSearches() : this.datasources.recentSearches.removeOneRecentSearch(b)));\n        }, this.setTrendLocations = function(a, b) {\n            this.datasources.trendLocations.setTrendLocations(b);\n        }, this.setPageContext = function(a, b) {\n            this.datasources.contextHelpers.updatePageContext(b.init_data.typeaheadData.contextHelpers);\n        }, this.setupEventListeners = function(a) {\n            switch (a) {\n              case \"accounts\":\n                this.JSBNG__on(\"dataFollowStateChange\", this.onFollowStateChange), this.JSBNG__on(\"profileVisit\", this.onProfileVisit);\n                break;\n              case \"savedSearches\":\n                this.JSBNG__on(JSBNG__document, \"dataAddedSavedSearch\", this.addSavedSearch), this.JSBNG__on(JSBNG__document, \"dataRemovedSavedSearch\", this.removeSavedSearch);\n                break;\n              case \"recentSearches\":\n                this.JSBNG__on(\"uiSearchQuery uiTypeaheadItemSelected\", this.addRecentSearch), this.JSBNG__on(\"uiTypeaheadDeleteRecentSearch\", this.removeRecentSearch);\n                break;\n              case \"contextHelpers\":\n                this.JSBNG__on(\"uiPageChanged\", this.setPageContext);\n                break;\n              case \"trendLocations\":\n                this.JSBNG__on(JSBNG__document, \"dataLoadedTrendLocations\", this.setTrendLocations);\n            };\n        ;\n        };\n    };\n;\n    var helpers = require(\"app/utils/typeahead_helpers\");\n    module.exports = WithExternalEventListeners;\n});\ndefine(\"app/data/typeahead/topics_datasource\", [\"module\",\"require\",\"exports\",\"app/utils/typeahead_helpers\",\"app/utils/storage/custom\",\"app/data/with_data\",\"core/compose\",\"core/utils\",\"app/data/with_datasource_helpers\",], function(module, require, exports) {\n    function topicsDatasource(a) {\n        this.attr = {\n            id: null,\n            ttl_ms: 21600000,\n            limit: 4,\n            version: 3,\n            storageAdjacencyList: \"topicsAdjacencyList\",\n            storageHash: \"topicsHash\",\n            storageVersion: \"topicsVersion\",\n            prefetchLimit: 500,\n            localQueriesEnabled: !1,\n            remoteQueriesEnabled: !1,\n            remoteQueriesOverrideLocal: !1,\n            remotePath: \"/i/search/typeahead.json\",\n            remoteType: \"topics\",\n            prefetchPath: \"/i/search/typeahead.json\",\n            prefetchType: \"topics\"\n        }, this.attr = util.merge(this.attr, a), this.after = function() {\n        \n        }, compose.mixin(this, [withData,withDatasourceHelpers,]), this.getStorageKeys = function() {\n            return [this.attr.storageVersion,this.attr.storageHash,this.attr.storageAdjacencyList,];\n        }, this.getPrefetchCount = function() {\n            return this.attr.prefetchLimit;\n        }, this.isMetadataExpired = function() {\n            var a = this.storage.getItem(this.attr.storageVersion);\n            return ((((a == this.attr.version)) ? !1 : !0));\n        }, this.getDataFromLocalStorage = function() {\n            this.topicsHash = ((this.storage.getItem(this.attr.storageHash) || this.topicsHash)), this.adjacencyList = ((this.storage.getItem(this.attr.storageAdjacencyList) || this.adjacencyList));\n        }, this.processResults = function(a) {\n            if (((!a || !a[this.attr.prefetchType]))) {\n                this.useStaleData();\n                return;\n            }\n        ;\n        ;\n            a[this.attr.prefetchType].forEach(function(a) {\n                var b = a.topic;\n                this.topicsHash[b] = a, a.tokens.forEach(function(a) {\n                    var c = helpers.getFirstChar(a.token);\n                    ((((this.adjacencyList[c] === undefined)) && (this.adjacencyList[c] = []))), ((((this.adjacencyList[c].indexOf(b) === -1)) && this.adjacencyList[c].push(b)));\n                }, this);\n            }, this), this.storage.setItem(this.attr.storageHash, this.topicsHash, this.attr.ttl_ms), this.storage.setItem(this.attr.storageAdjacencyList, this.adjacencyList, this.attr.ttl_ms), this.storage.setItem(this.attr.storageVersion, this.attr.version, this.attr.ttl_ms);\n        }, this.getLocalSuggestions = function(a) {\n            if (!this.attr.localQueriesEnabled) {\n                return [];\n            }\n        ;\n        ;\n            a = a.toLowerCase();\n            var b = helpers.getFirstChar(a);\n            if (((((this.attr.remoteType == \"hashtags\")) && (([\"$\",\"#\",].indexOf(b) === -1))))) {\n                return [];\n            }\n        ;\n        ;\n            var c = ((this.adjacencyList[b] || []));\n            c = this.getTopicObjectsFromStrings(c);\n            var d = c.filter(function(b) {\n                return ((b.topic.toLowerCase().indexOf(a) === 0));\n            }, this);\n            return d.sort(function(a, b) {\n                return ((b.rounded_score - a.rounded_score));\n            }.bind(this)), d = d.slice(0, this.attr.limit), d;\n        }, this.getTopicObjectsFromStrings = function(a) {\n            var b = [];\n            return a.forEach(function(a) {\n                var c = this.topicsHash[a];\n                ((c && b.push(c)));\n            }, this), b;\n        }, this.requiresRemoteSuggestions = function() {\n            return this.attr.remoteQueriesEnabled;\n        }, this.processRemoteSuggestions = function(a, b, c) {\n            var d = ((c[this.attr.id] || [])), e = {\n            };\n            return d.forEach(function(a) {\n                e[((a.topic || a.hashtag))] = !0;\n            }, this), ((((b[this.attr.remoteType] && this.attr.remoteQueriesOverrideLocal)) ? d = b[this.attr.remoteType] : ((b[this.attr.remoteType] && b[this.attr.remoteType].forEach(function(a) {\n                ((e[((a.topic || a.hashtag))] || d.push(a)));\n            }, this))))), c[this.attr.id] = d.slice(0, this.attr.limit), c;\n        }, this.initialize = function() {\n            var a = customStorage({\n                withExpiry: !0\n            });\n            this.storage = new a(\"typeahead\"), this.topicsHash = {\n            }, this.adjacencyList = {\n            }, this.loadData(this.attr.prefetchPath, this.attr.prefetchType);\n        }, this.initialize();\n    };\n;\n    var helpers = require(\"app/utils/typeahead_helpers\"), customStorage = require(\"app/utils/storage/custom\"), withData = require(\"app/data/with_data\"), compose = require(\"core/compose\"), util = require(\"core/utils\"), withDatasourceHelpers = require(\"app/data/with_datasource_helpers\");\n    module.exports = topicsDatasource;\n});\ndefine(\"app/data/typeahead/context_helper_datasource\", [\"module\",\"require\",\"exports\",\"app/utils/typeahead_helpers\",\"core/utils\",\"core/i18n\",], function(module, require, exports) {\n    function contextHelperDatasource(a) {\n        this.attr = {\n            id: null,\n            limit: 4,\n            version: 1\n        }, this.attr = util.merge(this.attr, a), this.processResults = function(a) {\n            return [];\n        }, this.getLocalSuggestions = function(a) {\n            if (((a == \"\"))) {\n                return [];\n            }\n        ;\n        ;\n            var b;\n            return ((((this.currentPage == \"JSBNG__home\")) ? b = {\n                text: _(\"Search for {{strong_query}} from people you follow\"),\n                query: a,\n                rewrittenQuery: a,\n                mode: \"timeline\"\n            } : ((((this.currentPage == \"profile\")) ? b = {\n                text: _(\"Search for {{strong_query}} in {{screen_name}}'s timeline\", {\n                    strong_query: \"{{strong_query}}\",\n                    screen_name: this.currentProfileUser\n                }),\n                query: a,\n                rewrittenQuery: ((((a + \" from:\")) + this.currentProfileUser))\n            } : ((((this.currentPage == \"me\")) && (b = {\n                text: _(\"Search for {{strong_query}} in your timeline\"),\n                query: a,\n                rewrittenQuery: ((((a + \" from:\")) + this.currentProfileUser))\n            }))))))), ((b ? [b,] : []));\n        }, this.requiresRemoteSuggestions = function() {\n            return !1;\n        }, this.processRemoteSuggestions = function(a, b, c) {\n            return c;\n        }, this.updatePageContext = function(a) {\n            this.currentPage = a.page_name, this.currentSection = a.section_name, this.currentProfileUser = ((((((this.currentPage == \"profile\")) || ((this.currentPage == \"me\")))) ? a.screen_name : null));\n        }, this.initialize = function() {\n            this.updatePageContext(a);\n        }, this.initialize();\n    };\n;\n    var helpers = require(\"app/utils/typeahead_helpers\"), util = require(\"core/utils\"), _ = require(\"core/i18n\");\n    module.exports = contextHelperDatasource;\n});\ndefine(\"app/data/typeahead/trend_locations_datasource\", [\"module\",\"require\",\"exports\",\"core/utils\",\"core/i18n\",], function(module, require, exports) {\n    function trendLocationsDatasource(a) {\n        var b = {\n            woeid: -1,\n            placeTypeCode: -1,\n            JSBNG__name: _(\"No results were found. Try selecting from a list.\")\n        };\n        this.attr = {\n            id: null,\n            items: [],\n            limit: 10\n        }, this.attr = util.merge(this.attr, a), this.getRemoteSuggestions = function(a, b, c) {\n            return c;\n        }, this.requiresRemoteSuggestions = function() {\n            return !1;\n        }, this.getLocalSuggestions = function(a) {\n            var c = this.attr.items, d = function(a) {\n                return a.replace(/\\s+/g, \"\").toLowerCase();\n            }, e = d(a);\n            return ((a && (c = this.attr.items.filter(function(a) {\n                return ((d(a.JSBNG__name).indexOf(e) == 0));\n            })))), ((c.length ? c.slice(0, this.attr.limit) : [b,]));\n        }, this.setTrendLocations = function(a) {\n            this.attr.items = a.trendLocations;\n        };\n    };\n;\n    var util = require(\"core/utils\"), _ = require(\"core/i18n\");\n    module.exports = trendLocationsDatasource;\n});\ndefine(\"app/data/typeahead/typeahead\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"app/data/with_data\",\"app/data/typeahead/with_cache\",\"app/data/typeahead/accounts_datasource\",\"app/data/typeahead/saved_searches_datasource\",\"app/data/typeahead/recent_searches_datasource\",\"app/data/typeahead/with_external_event_listeners\",\"app/data/typeahead/topics_datasource\",\"app/data/typeahead/context_helper_datasource\",\"app/data/typeahead/trend_locations_datasource\",], function(module, require, exports) {\n    function typeahead() {\n        this.defaultAttrs({\n            limit: 10,\n            remoteDebounceInterval: 300,\n            remoteThrottleInterval: 300,\n            outstandingRemoteRequestCount: 0,\n            queuedRequestData: !1,\n            outstandingRemoteRequestMax: 6,\n            useThrottle: !1,\n            tweetContextEnabled: !1\n        }), this.triggerSuggestionsEvent = function(a, b, c, d) {\n            this.trigger(\"dataTypeaheadSuggestionsResults\", {\n                suggestions: c,\n                query: b,\n                id: a\n            });\n        }, this.getLocalSuggestions = function(a, b) {\n            var c = {\n            };\n            return b.forEach(function(b) {\n                if (!this.datasources[b]) {\n                    return;\n                }\n            ;\n            ;\n                var d = this.datasources[b].getLocalSuggestions(a);\n                ((d.length && (d.forEach(function(a) {\n                    a.origin = \"prefetched\";\n                }), c[b] = d)));\n            }, this), c;\n        }, this.processRemoteSuggestions = function(a) {\n            this.adjustRequestCount(-1);\n            var b = a.sourceEventData, c = ((b.suggestions || {\n            }));\n            b.datasources.forEach(function(d) {\n                var e = d.processRemoteSuggestions(b.query, a, c);\n                if (((e[d.attr.id] && e[d.attr.id].length))) {\n                    {\n                        var fin68keys = ((window.top.JSBNG_Replay.forInKeys)((e))), fin68i = (0);\n                        var f;\n                        for (; (fin68i < fin68keys.length); (fin68i++)) {\n                            ((f) = (fin68keys[fin68i]));\n                            {\n                                e[f].forEach(function(a) {\n                                    a.origin = ((a.origin || \"remote\"));\n                                });\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    b.suggestions[d.attr.id] = e[d.attr.id];\n                }\n            ;\n            ;\n            }, this), this.dedupSuggestions(\"recentSearches\", [\"topics\",], c), this.truncateTopicsWithRecentSearches(c), this.triggerSuggestionsEvent(b.id, b.query, c, !1), this.makeQueuedRemoteRequestIfPossible();\n        }, this.getRemoteSuggestions = function(a, b, c, d, e) {\n            var f = e.some(function(a) {\n                return ((((this.datasources[a] && this.datasources[a].requiresRemoteSuggestions)) && this.datasources[a].requiresRemoteSuggestions(b)));\n            }, this);\n            if (((!f || !b))) {\n                return;\n            }\n        ;\n        ;\n            ((this.request[a] || ((this.attr.useThrottle ? this.request[a] = utils.throttle(this.splitRemoteRequests.bind(this), this.attr.remoteThrottleInterval) : this.request[a] = utils.debounce(this.splitRemoteRequests.bind(this), this.attr.remoteDebounceInterval))))), this.request[a](a, b, c, d, e);\n        }, this.makeQueuedRemoteRequestIfPossible = function() {\n            if (((((this.attr.outstandingRemoteRequestCount === ((this.attr.outstandingRemoteRequestMax - 1)))) && this.attr.queuedRequestData))) {\n                var a = this.attr.queuedRequestData;\n                this.getRemoteSuggestions(a.id, a.query, a.suggestions, a.datasources), this.attr.queuedRequestData = !1;\n            }\n        ;\n        ;\n        }, this.adjustRequestCount = function(a) {\n            this.attr.outstandingRemoteRequestCount += a;\n        }, this.canMakeRemoteRequest = function(a) {\n            return ((((this.attr.outstandingRemoteRequestCount < this.attr.outstandingRemoteRequestMax)) ? !0 : (this.attr.queuedRequestData = a, !1)));\n        }, this.processRemoteRequestError = function() {\n            this.adjustRequestCount(-1), this.makeQueuedRemoteRequestIfPossible();\n        }, this.splitRemoteRequests = function(a, b, c, d, e) {\n            var f = {\n            };\n            e.forEach(function(a) {\n                if (((((this[a] && this[a].requiresRemoteSuggestions)) && this[a].requiresRemoteSuggestions(b)))) {\n                    var c = this[a];\n                    ((f[c.attr.remotePath] ? f[c.attr.remotePath].push(c) : f[c.attr.remotePath] = [c,]));\n                }\n            ;\n            ;\n            }, this.datasources);\n            {\n                var fin69keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin69i = (0);\n                var g;\n                for (; (fin69i < fin69keys.length); (fin69i++)) {\n                    ((g) = (fin69keys[fin69i]));\n                    {\n                        this.executeRemoteRequest(a, b, c, d, f[g]);\n                        break;\n                    };\n                };\n            };\n        ;\n        }, this.executeRemoteRequest = function(a, b, c, d, e) {\n            var f = {\n                id: a,\n                query: b,\n                suggestions: d,\n                datasources: e\n            };\n            if (!this.canMakeRemoteRequest(f)) {\n                return;\n            }\n        ;\n        ;\n            if (((!this.attr.tweetContextEnabled || ((c && ((c.length > 1000))))))) {\n                c = undefined;\n            }\n        ;\n        ;\n            this.adjustRequestCount(1), this.get({\n                url: e[0].attr.remotePath,\n                headers: {\n                    \"X-Phx\": !0\n                },\n                data: {\n                    q: b,\n                    tweet_context: c,\n                    count: this.attr.limit,\n                    result_type: e.map(function(a) {\n                        return a.attr.remoteType;\n                    }).join(\",\")\n                },\n                eventData: f,\n                success: this.processRemoteSuggestions.bind(this),\n                error: this.processRemoteRequestError.bind(this)\n            });\n        }, this.truncateTopicsWithRecentSearches = function(a) {\n            if (((!a.topics || !a.recentSearches))) {\n                return;\n            }\n        ;\n        ;\n            var b = a.recentSearches.length, c = ((4 - b));\n            a.topics = a.topics.slice(0, c);\n        }, this.dedupSuggestions = function(a, b, c) {\n            function e() {\n                return b.some(function(a) {\n                    return ((a in c));\n                });\n            };\n        ;\n            function f(a) {\n                return !d[((a.topic || a.JSBNG__name))];\n            };\n        ;\n            if (((!c[a] || !e()))) {\n                return;\n            }\n        ;\n        ;\n            var d = {\n            };\n            c[a].forEach(function(a) {\n                d[((a.JSBNG__name || a.topic))] = !0;\n            }), b.forEach(function(a) {\n                ((((a in c)) && (c[a] = c[a].filter(f))));\n            });\n        }, this.getSuggestions = function(a, b) {\n            if (((typeof b == \"undefined\"))) {\n                throw \"No parameters specified\";\n            }\n        ;\n        ;\n            if (!b.datasources) {\n                throw \"No datasources specified\";\n            }\n        ;\n        ;\n            if (((typeof b.query == \"undefined\"))) {\n                throw \"No query specified\";\n            }\n        ;\n        ;\n            if (!b.id) {\n                throw \"No id specified\";\n            }\n        ;\n        ;\n            var c = this.getLocalSuggestions(b.query, b.datasources);\n            this.dedupSuggestions(\"recentSearches\", [\"topics\",], c), this.truncateTopicsWithRecentSearches(c), this.triggerSuggestionsEvent(b.id, b.query, c, !0);\n            if (((((b.query === \"@\")) || ((b.localOnly === !0))))) {\n                return;\n            }\n        ;\n        ;\n            this.getRemoteSuggestions(b.id, b.query, b.tweetContext, c, b.datasources);\n        }, this.addDatasource = function(a, b, c) {\n            var d = ((c[b] || {\n            }));\n            if (!d.enabled) {\n                return;\n            }\n        ;\n        ;\n            ((globalDataSources.hasOwnProperty(b) ? this.datasources[b] = globalDataSources[b] : globalDataSources[b] = this.datasources[b] = new a(utils.merge(d, {\n                id: b\n            })))), this.setupEventListeners(b);\n        }, this.after(\"initialize\", function(a) {\n            this.datasources = {\n            }, this.request = {\n            }, this.addDatasource(accountsDatasource, \"accounts\", a), this.addDatasource(accountsDatasource, \"dmAccounts\", a), this.addDatasource(savedSearchesDatasource, \"savedSearches\", a), this.addDatasource(recentSearchesDatasource, \"recentSearches\", a), this.addDatasource(topicsDatasource, \"topics\", a), this.addDatasource(topicsDatasource, \"hashtags\", utils.merge(a, {\n                hashtags: {\n                    remoteType: \"hashtags\"\n                }\n            }, !0)), this.addDatasource(contextHelperDatasource, \"contextHelpers\", a), this.addDatasource(trendLocationsDatasource, \"trendLocations\", a), this.JSBNG__on(\"uiNeedsTypeaheadSuggestions\", this.getSuggestions);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), withData = require(\"app/data/with_data\"), withCache = require(\"app/data/typeahead/with_cache\"), accountsDatasource = require(\"app/data/typeahead/accounts_datasource\"), savedSearchesDatasource = require(\"app/data/typeahead/saved_searches_datasource\"), recentSearchesDatasource = require(\"app/data/typeahead/recent_searches_datasource\"), withExternalEventListeners = require(\"app/data/typeahead/with_external_event_listeners\"), topicsDatasource = require(\"app/data/typeahead/topics_datasource\"), contextHelperDatasource = require(\"app/data/typeahead/context_helper_datasource\"), trendLocationsDatasource = require(\"app/data/typeahead/trend_locations_datasource\");\n    module.exports = defineComponent(typeahead, withData, withCache, withExternalEventListeners);\n    var globalDataSources = {\n    };\n});\ndefine(\"app/data/typeahead_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",\"lib/twitter-text\",\"app/utils/scribe_item_types\",], function(module, require, exports) {\n    function typeaheadScribe() {\n        this.defaultAttrs({\n            tweetboxSelector: \".tweet-box-shadow\"\n        }), this.storeCompletionData = function(a, b) {\n            if (((b.scribeContext && ((b.scribeContext.component == \"tweet_box\"))))) {\n                var c = ((((b.source == \"account\")) ? ((\"@\" + b.display)) : b.display));\n                this.completions.push(c);\n            }\n        ;\n        ;\n        }, this.handleTweetCompletion = function(a, b) {\n            if (((b.scribeContext.component != \"tweet_box\"))) {\n                return;\n            }\n        ;\n        ;\n            var c = $(a.target).JSBNG__find(this.attr.tweetboxSelector).val(), d = twitterText.extractEntitiesWithIndices(c).filter(function(a) {\n                return ((((a.screenName || a.cashtag)) || a.hashtag));\n            });\n            d = d.map(function(a) {\n                return c.slice(a.indices[0], a.indices[1]);\n            });\n            var e = d.filter(function(a) {\n                return ((this.completions.indexOf(a) >= 0));\n            }, this);\n            this.completions = [];\n            if (((d.length == 0))) {\n                return;\n            }\n        ;\n        ;\n            var f = {\n                query: b.query,\n                message: d.length,\n                event_info: e.length,\n                format_version: 2\n            };\n            this.scribe(\"entities\", b, f);\n        }, this.scribeSelection = function(a, b) {\n            if (((b.fromSelectionEvent && ((a.type == \"uiTypeaheadItemComplete\"))))) {\n                return;\n            }\n        ;\n        ;\n            var c = {\n                element: ((\"typeahead_\" + b.source)),\n                action: \"select\"\n            }, d;\n            ((((a.type == \"uiTypeaheadItemComplete\")) ? d = \"autocomplete\" : ((b.isClick ? d = \"click\" : ((((a.type == \"uiTypeaheadItemSelected\")) && (d = \"key_select\")))))));\n            var e = {\n                position: b.index,\n                description: d\n            };\n            ((((b.source == \"account\")) ? (e.item_type = itemTypes.user, e.id = b.query) : ((((b.source == \"topics\")) ? (e.item_type = itemTypes.search, e.item_query = b.query) : ((((b.source == \"saved_search\")) ? (e.item_type = itemTypes.savedSearch, e.item_query = b.query) : ((((b.source == \"recent_search\")) ? (e.item_type = itemTypes.search, e.item_query = b.query) : ((((b.source == \"trend_location\")) && (e.item_type = itemTypes.trend, e.item_query = b.item.woeid, ((((b.item.woeid == -1)) && (c.action = \"no_results\"))))))))))))));\n            var f = {\n                message: b.input,\n                items: [e,],\n                format_version: 2,\n                event_info: b.item.origin\n            };\n            this.scribe(c, b, f);\n        }, this.after(\"initialize\", function() {\n            this.completions = [], this.JSBNG__on(\"uiTypeaheadItemComplete uiTypeaheadItemSelected\", this.storeCompletionData), this.JSBNG__on(\"uiTypeaheadItemComplete uiTypeaheadItemSelected\", this.scribeSelection), this.JSBNG__on(\"uiTweetboxTweetSuccess uiTweetboxReplySuccess\", this.handleTweetCompletion);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), twitterText = require(\"lib/twitter-text\"), itemTypes = require(\"app/utils/scribe_item_types\");\n    module.exports = defineComponent(typeaheadScribe, withScribe);\n});\ndefine(\"app/ui/dialogs/goto_user_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/typeahead/typeahead_dropdown\",\"app/ui/typeahead/typeahead_input\",\"app/ui/with_position\",\"app/ui/with_dialog\",], function(module, require, exports) {\n    function gotoUserDialog() {\n        this.defaultAttrs({\n            dropdownId: \"swift_autocomplete_dropdown_goto_user\",\n            inputSelector: \"input.username-input\",\n            usernameFormSelector: \"form.goto-user-form\"\n        }), this.JSBNG__focus = function() {\n            this.select(\"inputSelector\").JSBNG__focus();\n        }, this.gotoUser = function(a, b) {\n            if (((((b && b.dropdownId)) && ((b.dropdownId != this.attr.dropdownId))))) {\n                return;\n            }\n        ;\n        ;\n            a.preventDefault();\n            if (((b && b.item))) {\n                this.select(\"inputSelector\").val(b.item.screen_name), this.trigger(\"uiNavigate\", {\n                    href: b.href\n                });\n                return;\n            }\n        ;\n        ;\n            var c = this.select(\"inputSelector\").val().trim();\n            ((((c.substr(0, 1) == \"@\")) && (c = c.substr(1)))), this.trigger(\"uiNavigate\", {\n                href: ((\"/\" + c))\n            });\n        }, this.reset = function() {\n            this.select(\"inputSelector\").val(\"\"), this.select(\"inputSelector\").JSBNG__blur(), this.trigger(this.select(\"inputSelector\"), \"uiHideAutocomplete\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiShortcutShowGotoUser\", this.open), this.JSBNG__on(\"uiDialogOpened\", this.JSBNG__focus), this.JSBNG__on(\"uiDialogClosed\", this.reset), this.JSBNG__on(this.select(\"usernameFormSelector\"), \"submit\", this.gotoUser), this.JSBNG__on(\"uiTypeaheadItemSelected uiTypeaheadSubmitQuery\", this.gotoUser), TypeaheadInput.attachTo(this.$node, {\n                inputSelector: this.attr.inputSelector\n            }), TypeaheadDropdown.attachTo(this.$node, {\n                inputSelector: this.attr.inputSelector,\n                autocompleteAccounts: !1,\n                datasourceRenders: [[\"accounts\",[\"accounts\",],],],\n                deciders: this.attr.typeaheadData,\n                eventData: {\n                    scribeContext: {\n                        component: \"goto_user_dialog\"\n                    }\n                }\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), TypeaheadDropdown = require(\"app/ui/typeahead/typeahead_dropdown\"), TypeaheadInput = require(\"app/ui/typeahead/typeahead_input\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), GotoUserDialog = defineComponent(gotoUserDialog, withDialog, withPosition);\n    module.exports = GotoUserDialog;\n});\ndefine(\"app/utils/setup_polling_with_backoff\", [\"module\",\"require\",\"exports\",\"core/clock\",\"core/utils\",], function(module, require, exports) {\n    function setupPollingWithBackoff(a, b, c) {\n        var d = {\n            focusedInterval: 30000,\n            blurredInterval: 90000,\n            backoffFactor: 2\n        };\n        c = utils.merge(d, c);\n        var e = clock.setIntervalEvent(a, c.focusedInterval, c.eventData);\n        return b = ((b || $(window))), b.JSBNG__on(\"JSBNG__focus\", e.cancelBackoff.bind(e)).JSBNG__on(\"JSBNG__blur\", e.backoff.bind(e, c.blurredInterval, c.backoffFactor)), e;\n    };\n;\n    var clock = require(\"core/clock\"), utils = require(\"core/utils\");\n    module.exports = setupPollingWithBackoff;\n});\ndefine(\"app/ui/page_title\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function pageTitle() {\n        this.addCount = function(a, b) {\n            ((b.count && (JSBNG__document.title = ((((((\"(\" + b.count)) + \") \")) + this.title)))));\n        }, this.removeCount = function(a, b) {\n            JSBNG__document.title = this.title;\n        }, this.setTitle = function(a, b) {\n            var c = ((b || a.originalEvent.state));\n            ((c && (JSBNG__document.title = this.title = c.title)));\n        }, this.after(\"initialize\", function() {\n            this.title = JSBNG__document.title, this.JSBNG__on(\"uiAddPageCount\", this.addCount), this.JSBNG__on(\"uiHasInjectedNewTimeline\", this.removeCount), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.setTitle);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), PageTitle = defineComponent(pageTitle);\n    module.exports = PageTitle;\n});\ndefine(\"app/ui/feedback/with_feedback_tweet\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/dialogs/with_modal_tweet\",], function(module, require, exports) {\n    function withFeedbackTweet() {\n        compose.mixin(this, [withModalTweet,]), this.defaultAttrs({\n            tweetItemSelector: \"div.tweet\",\n            streamSelector: \"div.stream-container\"\n        }), this.insertTweetIntoDialog = function() {\n            if (((this.selectedKey.indexOf(\"stream_status_\") == -1))) {\n                return;\n            }\n        ;\n        ;\n            var a = this.attr.tweetItemSelector.split(\",\").map(function(a) {\n                return ((((((a + \"[data-feedback-key=\")) + this.selectedKey)) + \"]\"));\n            }.bind(this)).join(\",\"), b = $(this.attr.streamSelector).JSBNG__find(a);\n            this.addTweet(b.clone().removeClass(\"retweeted favorited\"));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiInsertElementIntoFeedbackDialog\", this.insertTweetIntoDialog);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withModalTweet = require(\"app/ui/dialogs/with_modal_tweet\");\n    module.exports = withFeedbackTweet;\n});\ndefine(\"app/ui/feedback/feedback_stories\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function feedbackStories() {\n        this.defaultAttrs({\n            debugStringToggle: \".toggle-debug\",\n            debugStringSelector: \".debug-string\",\n            storyDataSelector: \".story-data\"\n        }), this.toggleDebugData = function(a) {\n            this.select(\"storyDataSelector\").toggleClass(\"expanded\");\n        }, this.convertDebugToHTML = function() {\n            var a = this.select(\"debugStringSelector\").text(), b = a.replace(/\\n/g, \"\\u003Cbr\\u003E\");\n            this.select(\"debugStringSelector\").html(b);\n        }, this.after(\"initialize\", function() {\n            this.convertDebugToHTML(), this.JSBNG__on(\"click\", {\n                debugStringToggle: this.toggleDebugData\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(feedbackStories);\n});\ndefine(\"app/ui/feedback/with_feedback_discover\", [\"module\",\"require\",\"exports\",\"app/ui/feedback/feedback_stories\",], function(module, require, exports) {\n    function withFeedbackDiscover() {\n        this.defaultAttrs({\n            storyItemSelector: \"div.tweet\",\n            storyStreamSelector: \"div.stream-container\",\n            debugStorySelector: \".debug-story.expanded\",\n            inlinedStorySelector: \".debug-story.inlined\"\n        }), this.insertStoryIntoDialog = function() {\n            if (((this.selectedKey.indexOf(\"story_status_\") == -1))) {\n                return;\n            }\n        ;\n        ;\n            var a = ((((((this.attr.storyItemSelector + \"[data-feedback-key=\\\"\")) + this.selectedKey)) + \"\\\"]\")), b = $(this.attr.storyStreamSelector).JSBNG__find(a);\n            this.select(\"debugStorySelector\").append(b.clone().removeClass(\"retweeted favorited\"));\n        }, this.insertFeedbackStories = function() {\n            if (((this.selectedKey != \"discover_stories_debug\"))) {\n                return;\n            }\n        ;\n        ;\n            var a = $(this.attr.storyStreamSelector).JSBNG__find(this.attr.storyItemSelector), b = this.select(\"contentContainerSelector\");\n            b.empty(), a.each(function(a, c) {\n                var d = $(c).data(\"feedback-key\");\n                ((this.debugData[d] && this.debugData[d].forEach(function(a) {\n                    b.append(a.html);\n                })));\n            }.bind(this)), this.select(\"inlinedStorySelector\").show(), FeedbackStories.attachTo(this.attr.inlinedStorySelector);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiInsertElementIntoFeedbackDialog\", this.insertStoryIntoDialog), this.JSBNG__on(JSBNG__document, \"uiInsertElementIntoFeedbackDialog\", this.insertFeedbackStories);\n        });\n    };\n;\n    var FeedbackStories = require(\"app/ui/feedback/feedback_stories\");\n    module.exports = withFeedbackDiscover;\n});\ndefine(\"app/ui/feedback/feedback_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/cookie\",\"app/ui/with_position\",\"app/ui/with_dialog\",\"app/ui/feedback/with_feedback_tweet\",\"app/ui/feedback/with_feedback_discover\",\"core/i18n\",], function(module, require, exports) {\n    function feedbackDialog() {\n        this.defaultAttrs({\n            contentContainerSelector: \".sample-content\",\n            debugContainerSelector: \".modal-inner.debug\",\n            cancelSelector: \".cancel\",\n            reportLinkSelector: \".report-link\",\n            spinnerSelector: \".loading-spinner\",\n            pastedContentSelector: \".feedback-json-output\",\n            selectPasteSelector: \"#select-paste-text\",\n            formSelector: \"form\",\n            navBarSelector: \".nav-tabs\",\n            navBarTabSelector: \".nav-tabs li:not(.tab-disabled):not(.active)\",\n            debugKeySelectorSelector: \"select[name=debug-key]\",\n            summaryInputSelector: \"input[name=summary]\",\n            descriptionInputSelector: \"textarea[name=comments]\",\n            screenshotInputSelector: \"input[name=includeScreenshot]\",\n            screenshotPreviewLink: \"#feedback-preview-screenshot\",\n            summaryErrorSelector: \".summary-error\",\n            descriptionErrorSelector: \".description-error\",\n            lastTabCookie: \"last_feedback_tab\",\n            reportEmail: null,\n            reportScreenshotProxyUrl: null,\n            debugDataText: \"\",\n            debugDataKey: \"\",\n            feedbackSuccessText: \"\",\n            dialogToggleSelector: \".feedback-dialog .feedback-data-toggle\"\n        }), this.takeScreenshot = function() {\n            using(\"$lib/html2canvas.js\", function() {\n                var a = function(a) {\n                    ((this.imageCanvas || (this.imageCanvas = a, this.select(\"screenshotPreviewLink\").attr(\"href\", this.imageCanvas.toDataURL()), this.trigger(\"uiNeedsFeedbackData\"))));\n                };\n                html2canvas($(\"body\"), {\n                    proxy: null,\n                    onrendered: a.bind(this),\n                    timeout: 1000\n                });\n            }.bind(this));\n        }, this.setErrorState = function(a, b) {\n            ((b ? this.select(a).show() : this.select(a).hide()));\n        }, this.resetParams = function(a) {\n            this.selectedKey = this.debugKey, this.selectedProject = this.projectKey, this.debugKey = null, this.projectKey = null, this.debugData = a;\n        }, this.toggleDebugEnabled = function(a, b) {\n            this.trigger(\"uiToggleDebugFeedback\", {\n                enabled: $(b.el).is(\".off\")\n            });\n        }, this.prepareDialog = function(a, b) {\n            this.debugKey = b.debugKey, this.projectKey = b.projectKey, this.imageCanvas = null, this.takeScreenshot();\n        }, this.JSBNG__openDialog = function(a, b) {\n            this.showTabFromName(((cookie(this.attr.lastTabCookie) || \"report\")));\n            var c = \"\";\n            ((((((this.debugKey && b[this.debugKey])) && ((b[this.debugKey].length > 0)))) && b[this.debugKey].forEach(function(a) {\n                ((a.html && (c += a.html)));\n            }))), this.select(\"contentContainerSelector\").html(c), this.select(\"screenshotInputSelector\").attr(\"checked\", !0), this.select(\"reportLinkSelector\").JSBNG__find(\"button\").removeClass(\"disabled\"), this.select(\"spinnerSelector\").css(\"visibility\", \"hidden\"), this.trigger(\"uiCheckFeedbackBackendAvailable\"), this.resetParams(b), this.resetErrorStatus(), ((this.selectedKey && this.trigger(\"uiInsertElementIntoFeedbackDialog\"))), this.refreshAvailableDataKeys(), this.reportToConsole(b), this.open();\n        }, this.showTabFromName = function(a) {\n            this.select(\"navBarSelector\").JSBNG__find(\"li\").removeClass(\"active\"), this.select(\"navBarSelector\").JSBNG__find(((((\"li[data-tab-name=\" + a)) + \"]\"))).addClass(\"active\"), this.$node.JSBNG__find(\".modal-inner\").hide(), this.$node.JSBNG__find(((\".modal-inner.\" + a))).show(), cookie(this.attr.lastTabCookie, a);\n        }, this.refreshAvailableDataKeys = function() {\n            var a = this.select(\"debugKeySelectorSelector\");\n            a.empty();\n            var b = this.selectedKey;\n            Object.keys(this.debugData).forEach(function(c) {\n                var d = $(((((\"\\u003Coption\\u003E\" + c)) + \"\\u003C/option\\u003E\")));\n                ((((b == c)) && (d = $(((((((((\"\\u003Coption value=\" + c)) + \"\\u003E\")) + c)) + \" (selected)\\u003C/option\\u003E\")))))), a.append(d);\n            }), a.val(this.selectedKey), this.refreshDebugJSON();\n        }, this.refreshDebugJSON = function(a) {\n            var b = ((this.select(\"debugKeySelectorSelector\").val() || this.selectedKey));\n            if (((!b || !this.debugData[b]))) {\n                return;\n            }\n        ;\n        ;\n            var c = this.debugData[b].map(function(a) {\n                return a.data;\n            });\n            this.select(\"pastedContentSelector\").html(JSON.stringify(c, undefined, 2));\n        }, this.resetErrorStatus = function() {\n            this.setErrorState(\"summaryErrorSelector\", !1), this.setErrorState(\"descriptionErrorSelector\", !1);\n        }, this.reportToConsole = function(a) {\n            if (((!window.JSBNG__console || !Object.keys(a).length))) {\n                return;\n            }\n        ;\n        ;\n            ((JSBNG__console.log && JSBNG__console.log(this.attr.debugDataText))), ((JSBNG__console.dir && JSBNG__console.dir(this.debugData)));\n        }, this.reportFeedback = function(a, b) {\n            a.preventDefault(), this.resetErrorStatus();\n            var c = {\n            };\n            this.select(\"formSelector\").serializeArray().map(function(a) {\n                ((((c[a.JSBNG__name] && $.isArray(c[a.JSBNG__name]))) ? c[a.JSBNG__name].push(a.value) : ((c[a.JSBNG__name] ? c[a.JSBNG__name] = [c[a.JSBNG__name],a.value,] : c[a.JSBNG__name] = a.value))));\n            });\n            var d = this.select(\"summaryInputSelector\").val(), e = this.select(\"descriptionInputSelector\").val();\n            if (((!d || !e))) {\n                ((d || this.setErrorState(\"summaryErrorSelector\", !0))), ((e || this.setErrorState(\"descriptionErrorSelector\", !0)));\n                return;\n            }\n        ;\n        ;\n            ((((this.imageCanvas && c.includeScreenshot)) && (c.screenshotData = this.imageCanvas.toDataURL()))), ((this.selectedProject && (c.project = this.selectedProject))), ((this.selectedKey && (c.key = this.selectedKey))), (($.isEmptyObject(this.debugData) || (c.debug_text = JSON.stringify(this.debugData, undefined, 2), ((this.debugData.initial_pageload && (basicData = this.debugData.initial_pageload[0].data, c.basic_info = ((((((((((((((\"Screen Name: \" + basicData.screen_name)) + \"\\u000a\")) + \"URL: \")) + basicData.url)) + \"\\u000a\")) + \"User Agent: \")) + basicData.userAgent)))))))), this.select(\"reportLinkSelector\").JSBNG__find(\"button\").addClass(\"disabled\"), this.select(\"spinnerSelector\").css(\"visibility\", \"visible\"), this.trigger(\"uiFeedbackBackendPost\", c);\n        }, this.handleBackendSuccess = function(a, b) {\n            this.close(), this.select(\"formSelector\")[0].reset(), this.trigger(\"uiShowError\", {\n                message: _(\"Successfully created Jira ticket: {{ticketId}}\", {\n                    ticketId: ((((((((\"\\u003Ca target='_blank' href='\" + b.link)) + \"'\\u003E\")) + b.ticketId)) + \"\\u003C/a\\u003E\"))\n                })\n            });\n        }, this.triggerEmail = function(a, b) {\n            this.close(), this.select(\"formSelector\")[0].reset(), window.open(b.link, \"_blank\"), this.trigger(\"uiShowError\", {\n                message: _(\"Failed to create Jira ticket. Please see the popup to send an email instead.\")\n            });\n        }, this.switchTab = function(a, b) {\n            a.preventDefault(), this.showTabFromName($(a.target).closest(\"li\").data(\"tab-name\"));\n        }, this.selectText = function(a, b) {\n            this.select(\"debugContainerSelector\").JSBNG__find(\"textarea\")[0].select();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataFeedback\", this.JSBNG__openDialog), this.JSBNG__on(JSBNG__document, \"dataFeedbackBackendSuccess\", this.handleBackendSuccess), this.JSBNG__on(JSBNG__document, \"dataFeedbackBackendFailure\", this.triggerEmail), this.JSBNG__on(JSBNG__document, \"uiPrepareFeedbackDialog\", this.prepareDialog), this.JSBNG__on(\"change\", {\n                debugKeySelectorSelector: this.refreshDebugJSON\n            }), this.JSBNG__on(\"click\", {\n                dialogToggleSelector: this.toggleDebugEnabled,\n                navBarTabSelector: this.switchTab,\n                cancelSelector: this.close,\n                reportLinkSelector: this.reportFeedback,\n                selectPasteSelector: this.selectText\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), cookie = require(\"app/utils/cookie\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), withFeedbackTweet = require(\"app/ui/feedback/with_feedback_tweet\"), withFeedbackDiscover = require(\"app/ui/feedback/with_feedback_discover\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(feedbackDialog, withDialog, withPosition, withFeedbackTweet, withFeedbackDiscover);\n});\ndefine(\"app/ui/feedback/feedback_report_link_handler\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function feedbackReportLinkHandler() {\n        this.defaultAttrs({\n            reportElementLinkSelector: \".feedback-btn[data-feedback-key]\"\n        }), this.JSBNG__openDialog = function(a, b) {\n            a.preventDefault();\n            var c = $(b.el);\n            b = {\n            }, b.debugKey = c.data(\"feedback-key\"), b.projectKey = c.data(\"team-key\"), this.trigger(\"uiPrepareFeedbackDialog\", b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"click\", {\n                reportElementLinkSelector: this.JSBNG__openDialog\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(feedbackReportLinkHandler);\n});\ndefine(\"app/data/feedback/feedback\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/cookie\",\"app/data/with_data\",], function(module, require, exports) {\n    function feedbackData() {\n        var a = !0;\n        this.defaultAttrs({\n            feedbackCookie: \"debug_data\",\n            data: {\n            },\n            reportEmail: undefined,\n            reportBackendPingUrl: undefined,\n            reportBackendPostUrl: undefined,\n            reportBackendGetUrl: undefined\n        }), this.isBackendAvailable = function() {\n            return a;\n        }, this.getFeedbackData = function(a, b) {\n            this.trigger(\"dataFeedback\", this.attr.data);\n        }, this.toggleFeedbackCookie = function(a, b) {\n            var c = ((b.enabled ? !0 : null));\n            cookie(this.attr.feedbackCookie, c), this.refreshPage(), this.checkDebugEnabled();\n        }, this.refreshPage = function() {\n            JSBNG__document.JSBNG__location.reload(!0);\n        }, this.checkDebugEnabled = function() {\n            this.trigger(\"dataDebugFeedbackChanged\", {\n                enabled: !!cookie(this.attr.feedbackCookie)\n            });\n        }, this.addFeedbackData = function(a, b) {\n            var c = this.attr.data;\n            {\n                var fin70keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin70i = (0);\n                var d;\n                for (; (fin70i < fin70keys.length); (fin70i++)) {\n                    ((d) = (fin70keys[fin70i]));\n                    {\n                        ((c[d] ? c[d] = [].concat.apply(c[d], b[d]) : c[d] = b[d]));\n                    ;\n                    };\n                };\n            };\n        ;\n        }, this.pingBackend = function(b, c) {\n            if (((this.attr.reportBackendPingUrl == null))) {\n                a = !1;\n                return;\n            }\n        ;\n        ;\n            var d = function(b) {\n                a = !0;\n            }, e = function(b) {\n                a = !1;\n            };\n            this.get({\n                url: this.attr.reportBackendPingUrl,\n                success: d.bind(this),\n                error: e.bind(this)\n            });\n        }, this.backendPost = function(b, c) {\n            if (!this.isBackendAvailable()) {\n                this.fallbackToEmail(b, c);\n                return;\n            }\n        ;\n        ;\n            var d = function(a) {\n                var b = ((this.attr.reportBackendGetUrl + a.key));\n                this.trigger(\"dataFeedbackBackendSuccess\", {\n                    link: b,\n                    ticketId: a.key\n                });\n            }, e = function(d) {\n                a = !1, this.fallbackToEmail(b, c);\n            };\n            this.post({\n                url: this.attr.reportBackendPostUrl,\n                data: c,\n                isMutation: !1,\n                success: d.bind(this),\n                error: e.bind(this)\n            });\n        }, this.fallbackToEmail = function(a, b) {\n            var c = ((((((((\"mailto:\" + this.attr.reportEmail)) + \"?subject=\")) + b.summary)) + \"&body=\")), d = [\"summary\",\"debug_data\",\"debug_text\",\"screenshotData\",];\n            {\n                var fin71keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin71i = (0);\n                var e;\n                for (; (fin71i < fin71keys.length); (fin71i++)) {\n                    ((e) = (fin71keys[fin71i]));\n                    {\n                        ((((d.indexOf(e) < 0)) && (c += ((((((e.toString() + \": \")) + b[e].toString())) + \"%0D%0A\")))));\n                    ;\n                    };\n                };\n            };\n        ;\n            this.trigger(\"dataFeedbackBackendFailure\", {\n                link: c,\n                data: b\n            });\n        }, this.logNavigation = function(a, b) {\n            this.trigger(\"dataSetDebugData\", {\n                pushState: [{\n                    data: {\n                        href: b.href,\n                        \"module\": b.module,\n                        title: b.title\n                    }\n                },]\n            });\n        }, this.after(\"initialize\", function(a) {\n            this.data = ((a.data || {\n            })), this.JSBNG__on(\"uiNeedsFeedbackData\", this.getFeedbackData), this.JSBNG__on(\"uiToggleDebugFeedback\", this.toggleFeedbackCookie), this.JSBNG__on(\"dataSetDebugData\", this.addFeedbackData), this.JSBNG__on(\"uiCheckFeedbackBackendAvailable\", this.pingBackend), this.JSBNG__on(\"uiFeedbackBackendPost\", this.backendPost), this.JSBNG__on(\"uiPageChanged\", this.logNavigation), this.checkDebugEnabled();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), cookie = require(\"app/utils/cookie\"), withData = require(\"app/data/with_data\");\n    module.exports = defineComponent(feedbackData, withData);\n});\ndefine(\"app/ui/search_query_source\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/storage/custom\",], function(module, require, exports) {\n    function searchQuerySource() {\n        this.defaultAttrs({\n            querySourceLinkSelector: \"a[data-query-source]\",\n            querySourceDataAttr: \"data-query-source\",\n            storageExpiration: 60000\n        }), this.saveQuerySource = function(a) {\n            this.storage.setItem(\"source\", {\n                source: {\n                    value: a,\n                    expire: ((JSBNG__Date.now() + this.attr.storageExpiration))\n                }\n            }, this.attr.storageExpiration);\n        }, this.catchLinkClick = function(a, b) {\n            var c = $(b.el).attr(this.attr.querySourceDataAttr);\n            ((c && this.saveQuerySource(c)));\n        }, this.saveTypedQuery = function(a, b) {\n            if (((b.source !== \"search\"))) {\n                return;\n            }\n        ;\n        ;\n            this.saveQuerySource(\"typed_query\");\n        }, this.after(\"initialize\", function() {\n            var a = customStorage({\n                withExpiry: !0\n            });\n            this.storage = new a(\"searchQuerySource\"), this.JSBNG__on(\"click\", {\n                querySourceLinkSelector: this.catchLinkClick\n            }), this.JSBNG__on(\"uiSearchQuery\", this.saveTypedQuery);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), customStorage = require(\"app/utils/storage/custom\");\n    module.exports = defineComponent(searchQuerySource);\n});\ndefine(\"app/ui/banners/email_banner\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function emailBanner() {\n        this.defaultAttrs({\n            resendConfirmationEmailLinkSelector: \".resend-confirmation-email-link\",\n            resetBounceLinkSelector: \".reset-bounce-link\"\n        }), this.resendConfirmationEmail = function() {\n            this.trigger(\"uiResendConfirmationEmail\");\n        }, this.resetBounceLink = function() {\n            this.trigger(\"uiResetBounceLink\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                resendConfirmationEmailLinkSelector: this.resendConfirmationEmail,\n                resetBounceLinkSelector: this.resetBounceLink\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(emailBanner);\n});\ndefine(\"app/data/email_banner\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"core/i18n\",], function(module, require, exports) {\n    function emailBannerData() {\n        this.resendConfirmationEmail = function() {\n            var a = function(a) {\n                this.trigger(\"uiShowMessage\", {\n                    message: a.messageForFlash\n                });\n            }, b = function() {\n                this.trigger(\"uiShowMessage\", {\n                    message: _(\"Oops!  There was an error sending the confirmation email.\")\n                });\n            };\n            this.post({\n                url: \"/account/resend_confirmation_email\",\n                eventData: null,\n                data: null,\n                success: a.bind(this),\n                error: b.bind(this)\n            });\n        }, this.resetBounceScore = function() {\n            var a = function() {\n                this.trigger(\"uiShowMessage\", {\n                    message: _(\"Your email notifications should resume shortly.\")\n                });\n            }, b = function() {\n                this.trigger(\"uiShowMessage\", {\n                    message: _(\"Oops! There was an error sending email notifications.\")\n                });\n            };\n            this.post({\n                url: \"/bouncers/reset\",\n                eventData: null,\n                data: null,\n                success: a.bind(this),\n                error: b.bind(this)\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiResendConfirmationEmail\", this.resendConfirmationEmail), this.JSBNG__on(\"uiResetBounceLink\", this.resetBounceScore);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), _ = require(\"core/i18n\");\n    module.exports = defineComponent(emailBannerData, withData);\n});\nprovide(\"app/ui/media/phoenix_shim\", function(a) {\n    using(\"core/parameterize\", \"core/utils\", function(b, c) {\n        var d = {\n        }, e = {\n        }, f = [], g = {\n            send: function() {\n                throw Error(\"you have to define sandboxedAjax.send\");\n            }\n        }, h = function(a, b) {\n            return b = ((b || \"\")), ((((typeof a != \"string\")) && (((a.global && (b += \"g\"))), ((a.ignoreCase && (b += \"i\"))), ((a.multiline && (b += \"m\"))), a = a.source))), new RegExp(a.replace(/#\\{(\\w+)\\}/g, function(a, b) {\n                var c = ((e[b] || \"\"));\n                return ((((typeof c != \"string\")) && (c = c.source))), c;\n            }), b);\n        }, i = {\n            media: {\n                types: {\n                }\n            },\n            bind: function(a, b, c) {\n                return function() {\n                    return b.apply(a, ((c ? c.concat(Array.prototype.slice.apply(arguments)) : arguments)));\n                };\n            },\n            each: function(a, b, c) {\n                for (var d = 0, e = a.length; ((d < e)); ++d) {\n                    ((c ? b.call(c, a[d], d, a) : b(a[d], d, a)));\n                ;\n                };\n            ;\n            },\n            merge: function() {\n                var a = $.makeArray(arguments);\n                return ((((a.length === 1)) ? a[0] : (((((typeof a[((a.length - 1))] == \"boolean\")) && a.unshift(a.pop()))), $.extend.apply(null, a))));\n            },\n            proto: JSBNG__location.protocol.slice(0, -1),\n            provide: function(_, a) {\n                e = a;\n            },\n            isSSL: function() {\n            \n            },\n            mediaType: function(a, b) {\n                d[a] = b, ((b.title || (d[a].title = a)));\n                {\n                    var fin72keys = ((window.top.JSBNG_Replay.forInKeys)((b.matchers))), fin72i = (0);\n                    var e;\n                    for (; (fin72i < fin72keys.length); (fin72i++)) {\n                        ((e) = (fin72keys[fin72i]));\n                        {\n                            var g = h(b.matchers[e]);\n                            b.matchers[e] = g, b._name = a, f.push([g,a,e,]);\n                        };\n                    };\n                };\n            ;\n                return i.media.types[a] = {\n                    matchers: b.matchers\n                }, {\n                    statics: function(b) {\n                        return d[a].statics = b, d[a] = c.merge(d[a], b), i.media.types[a].templates = b.templates, this;\n                    },\n                    methods: function(b) {\n                        return d[a].methods = b, d[a] = c.merge(d[a], b), this;\n                    }\n                };\n            },\n            constants: {\n                imageSizes: {\n                    small: \"small\",\n                    medium: \"medium\",\n                    large: \"large\",\n                    original: \"original\"\n                }\n            },\n            helpers: {\n                truncate: function(a, b, c) {\n                    return ((a.slice(0, b) + c));\n                }\n            },\n            util: {\n                joinPath: function(a, b) {\n                    var c = ((((a.substr(-1) === \"/\")) ? \"\" : \"/\"));\n                    return ((((a + c)) + b));\n                },\n                supplant: function(a, c) {\n                    return b(a.replace(/\\{/g, \"{{\").replace(/\\}/g, \"}}\"), c);\n                },\n                paramsFromUrl: function(a) {\n                    if (((!a || ((a.indexOf(\"?\") < 0))))) {\n                        return null;\n                    }\n                ;\n                ;\n                    var b = {\n                    };\n                    return a.slice(1).split(\"&\").forEach(function(a) {\n                        var c = a.split(\"=\");\n                        b[c[0]] = c[1];\n                    }), b;\n                }\n            },\n            sandboxedAjax: g\n        };\n        a({\n            Mustache: {\n                to_html: b\n            },\n            twttr: i,\n            mediaTypes: d,\n            matchers: f,\n            sandboxedAjax: g\n        });\n    });\n});\nprovide(\"app/utils/twt\", function(a) {\n    using(\"//platform.twitter.com/js/vendor/twt/dist/twt.all.min.js\", \"css!//platform.twitter.com/twt/twt.css\", function() {\n        var b = window.twt;\n        try {\n            delete window.twt;\n        } catch (c) {\n            window.twt = undefined;\n        };\n    ;\n        a(b);\n    });\n});\nprovide(\"app/ui/media/types\", function(a) {\n    using(\"app/ui/media/phoenix_shim\", function(b) {\n        function e(a) {\n            return ((c.isSSL() ? a.replace(/^http:/, \"https:\") : a));\n        };\n    ;\n        var c = phx = b.twttr, d = b.Mustache;\n        c.provide(\"twttr.regexps\", {\n            protocol: /(?:https?\\:\\/\\/)/,\n            protocol_no_ssl: /(?:http\\:\\/\\/)/,\n            optional_protocol: /(?:(?:https?\\:\\/\\/)?(?:www\\.)?)/,\n            protocol_subdomain: /(?:(?:https?\\:\\/\\/)?(?:[\\w\\-]+\\.))/,\n            optional_protocol_subdomain: /(?:(?:https?\\:\\/\\/)?(?:[\\w\\-]+\\.)?)/,\n            wildcard: /[a-zA-Z0-9_#\\.\\-\\?\\&\\=\\/]+/,\n            itunes_protocol: /(?:https?\\:\\/\\/)?(?:[a-z]\\.)?itunes\\.apple\\.com(?:\\/[a-z][a-z])?/\n        }), c.mediaType(\"Twitter\", {\n            icon: \"tweet\",\n            domain: \"//twitter.com\",\n            ssl: !0,\n            skipAttributionInDiscovery: !0,\n            matchers: {\n                permalink: /^#{optional_protocol}?twitter\\.com\\/(?:#!?\\/)?\\w{1,20}\\/status\\/(\\d+)[\\/]?$/i\n            },\n            process: function(a) {\n                var b = this;\n                using(\"app/utils/twt\", function(d) {\n                    if (!d) {\n                        return;\n                    }\n                ;\n                ;\n                    d.settings.lang = $(\"html\").attr(\"lang\"), c.sandboxedAjax.send({\n                        url: \"//cdn.api.twitter.com/1/statuses/show.json\",\n                        dataType: \"jsonp\",\n                        data: {\n                            include_entities: !0,\n                            contributor_details: !0,\n                            id: b.slug\n                        },\n                        success: function(c) {\n                            b.tweetHtml = d.tweet(c).html(), a();\n                        }\n                    });\n                });\n            },\n            render: function(a) {\n                $(a).append(((((\"\\u003Cdiv class='tweet-embed'\\u003E\" + this.tweetHtml)) + \"\\u003C/div\\u003E\")));\n            }\n        }), c.mediaType(\"Apple\", {\n            icon: function() {\n                switch (this.label) {\n                  case \"song\":\n                    return \"song\";\n                  case \"album\":\n                    return \"album\";\n                  case \"music_video\":\n                \n                  case \"video\":\n                \n                  case \"movie\":\n                \n                  case \"tv\":\n                    return \"video\";\n                  case \"software\":\n                    return \"software\";\n                  case \"JSBNG__event\":\n                \n                  case \"preorder\":\n                \n                  case \"playlist\":\n                \n                  case \"ping_playlist\":\n                \n                  case \"podcast\":\n                \n                  case \"book\":\n                \n                  default:\n                    return \"generic\";\n                };\n            ;\n            },\n            domain: \"http://itunes.apple.com\",\n            deciderKey: \"phoenix_apple_itunes\",\n            matchers: {\n                song: /^#{itunes_protocol}(?:\\/album)\\/.*\\?i=/i,\n                album: /^#{itunes_protocol}(?:\\/album)\\//i,\n                JSBNG__event: /^#{itunes_protocol}\\/event\\//i,\n                music_video: /^#{itunes_protocol}(?:\\/music-video)\\//i,\n                video: /^#{itunes_protocol}(?:\\/video)\\//i,\n                software: /^#{itunes_protocol}(?:\\/app)\\//i,\n                playlist: /^#{itunes_protocol}(?:\\/imix)\\//i,\n                ping_playlist: /^#{itunes_protocol}(?:\\/imixes)\\?/i,\n                preorder: /^#{itunes_protocol}(?:\\/preorder)\\//i\n            },\n            ssl: !1,\n            getImageURL: function(a, b) {\n                var c = this;\n                this.process(function() {\n                    ((((c.data && c.data.src)) ? b(c.data.src) : b(null)));\n                });\n            },\n            enableAPI: !1,\n            validActions: {\n                resizeFrame: !0,\n                bind: !0,\n                unbind: !0\n            },\n            process: function(a, b) {\n                var d = this;\n                b = ((b || {\n                })), c.sandboxedAjax.send({\n                    url: \"http://itunes.apple.com/WebObjects/MZStore.woa/wa/remotePreview\",\n                    type: \"GET\",\n                    dataType: \"jsonp\",\n                    data: {\n                        url: this.url,\n                        maxwidth: b.maxwidth\n                    },\n                    success: function(b) {\n                        ((b.error || (d.data.src = b.src, d.data.attribution_icon = b.attribution_icon, d.data.attribution_url = b.attribution_url, d.data.attribution_title = \"iTunes\", ((b.favicon && (d.data.attribution_icon = b.favicon))), ((b.faviconLink && (d.data.attribution_url = b.faviconLink))), ((b.height && (d.data.height = b.height))), a())));\n                    }\n                });\n            },\n            render: function(a) {\n                this.renderEmbeddedApplication(a, this.data.src);\n            }\n        }), a(b);\n    });\n});\ndeferred(\"$lib/easyXDM.js\", function() {\n    (function(a, b, c, d, e, f) {\n        function s(a, b) {\n            var c = typeof a[b];\n            return ((((((c == \"function\")) || ((((c == \"object\")) && !!a[b])))) || ((c == \"unknown\"))));\n        };\n    ;\n        function t(a, b) {\n            return ((((typeof a[b] == \"object\")) && !!a[b]));\n        };\n    ;\n        function u(a) {\n            return ((Object.prototype.toString.call(a) === \"[object Array]\"));\n        };\n    ;\n        function v(a) {\n            try {\n                var b = new ActiveXObject(a);\n                return b = null, !0;\n            } catch (c) {\n                return !1;\n            };\n        ;\n        };\n    ;\n        function B() {\n            B = i, y = !0;\n            for (var a = 0; ((a < z.length)); a++) {\n                z[a]();\n            ;\n            };\n        ;\n            z.length = 0;\n        };\n    ;\n        function D(a, b) {\n            if (y) {\n                a.call(b);\n                return;\n            }\n        ;\n        ;\n            z.push(function() {\n                a.call(b);\n            });\n        };\n    ;\n        function E() {\n            var a = parent;\n            if (((m !== \"\"))) {\n                for (var b = 0, c = m.split(\".\"); ((b < c.length)); b++) {\n                    a = a[c[b]];\n                ;\n                };\n            }\n        ;\n        ;\n            return a.easyXDM;\n        };\n    ;\n        function F(b) {\n            return a.easyXDM = o, m = b, ((m && (p = ((((\"easyXDM_\" + m.replace(\".\", \"_\"))) + \"_\"))))), n;\n        };\n    ;\n        function G(a) {\n            return a.match(j)[3];\n        };\n    ;\n        function H(a) {\n            var b = a.match(j), c = b[2], d = b[3], e = ((b[4] || \"\"));\n            if (((((((c == \"http:\")) && ((e == \":80\")))) || ((((c == \"https:\")) && ((e == \":443\"))))))) {\n                e = \"\";\n            }\n        ;\n        ;\n            return ((((((c + \"//\")) + d)) + e));\n        };\n    ;\n        function I(a) {\n            a = a.replace(l, \"$1/\");\n            if (!a.match(/^(http||https):\\/\\//)) {\n                var b = ((((a.substring(0, 1) === \"/\")) ? \"\" : c.pathname));\n                ((((b.substring(((b.length - 1))) !== \"/\")) && (b = b.substring(0, ((b.lastIndexOf(\"/\") + 1)))))), a = ((((((((c.protocol + \"//\")) + c.host)) + b)) + a));\n            }\n        ;\n        ;\n            while (k.test(a)) {\n                a = a.replace(k, \"\");\n            ;\n            };\n        ;\n            return a;\n        };\n    ;\n        function J(a, b) {\n            var c = \"\", d = a.indexOf(\"#\");\n            ((((d !== -1)) && (c = a.substring(d), a = a.substring(0, d))));\n            var e = [];\n            {\n                var fin73keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin73i = (0);\n                var g;\n                for (; (fin73i < fin73keys.length); (fin73i++)) {\n                    ((g) = (fin73keys[fin73i]));\n                    {\n                        ((b.hasOwnProperty(g) && e.push(((((g + \"=\")) + f(b[g]))))));\n                    ;\n                    };\n                };\n            };\n        ;\n            return ((((((a + ((r ? \"#\" : ((((a.indexOf(\"?\") == -1)) ? \"?\" : \"&\")))))) + e.join(\"&\"))) + c));\n        };\n    ;\n        function L(a) {\n            return ((typeof a == \"undefined\"));\n        };\n    ;\n        function M() {\n            var a = {\n            }, b = {\n                a: [1,2,3,]\n            }, c = \"{\\\"a\\\":[1,2,3]}\";\n            return ((((((((typeof JSON != \"undefined\")) && ((typeof JSON.stringify == \"function\")))) && ((JSON.stringify(b).replace(/\\s/g, \"\") === c)))) ? JSON : (((((Object.toJSON && ((Object.toJSON(b).replace(/\\s/g, \"\") === c)))) && (a.stringify = Object.toJSON))), ((((typeof String.prototype.evalJSON == \"function\")) && (b = c.evalJSON(), ((((((b.a && ((b.a.length === 3)))) && ((b.a[2] === 3)))) && (a.parse = function(a) {\n                return a.evalJSON();\n            })))))), ((((a.stringify && a.parse)) ? (M = function() {\n                return a;\n            }, a) : null)))));\n        };\n    ;\n        function N(a, b, c) {\n            var d;\n            {\n                var fin74keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin74i = (0);\n                var e;\n                for (; (fin74i < fin74keys.length); (fin74i++)) {\n                    ((e) = (fin74keys[fin74i]));\n                    {\n                        ((b.hasOwnProperty(e) && ((((e in a)) ? (d = b[e], ((((typeof d == \"object\")) ? N(a[e], d, c) : ((c || (a[e] = b[e])))))) : a[e] = b[e]))));\n                    ;\n                    };\n                };\n            };\n        ;\n            return a;\n        };\n    ;\n        function O() {\n            var c = b.createElement(\"div\");\n            c.JSBNG__name = ((p + \"TEST\")), N(c.style, {\n                position: \"absolute\",\n                left: \"-2000px\",\n                JSBNG__top: \"0px\"\n            }), b.body.appendChild(c), q = ((c.contentWindow !== a.JSBNG__frames[c.JSBNG__name])), b.body.removeChild(c);\n        };\n    ;\n        function P(a) {\n            ((L(q) && O()));\n            var c;\n            ((q ? c = b.createElement(((((\"\\u003Ciframe name='\" + a.props.JSBNG__name)) + \"' frameborder='0' allowtransparency='false' tabindex='-1', role='presentation' scrolling='no' /\\u003E\"))) : (c = b.createElement(\"div\"), c.JSBNG__name = a.props.JSBNG__name, c.setAttribute(\"frameborder\", \"0\"), c.setAttribute(\"allowtransparency\", \"false\"), c.setAttribute(\"tabindex\", \"-1\"), c.setAttribute(\"role\", \"presentation\"), c.setAttribute(\"scrolling\", \"no\")))), c.id = c.JSBNG__name = a.props.JSBNG__name, delete a.props.JSBNG__name, ((a.onLoad && w(c, \"load\", a.onLoad))), ((((typeof a.container == \"string\")) && (a.container = b.getElementById(a.container)))), ((a.container || (c.style.position = \"absolute\", c.style.JSBNG__top = \"-2000px\", a.container = b.body)));\n            var d = a.props.src;\n            return delete a.props.src, N(c, a.props), c.border = c.frameBorder = 0, a.container.appendChild(c), c.src = d, a.props.src = d, c;\n        };\n    ;\n        function Q(a, b) {\n            ((((typeof a == \"string\")) && (a = [a,])));\n            var c, d = a.length;\n            while (d--) {\n                c = a[d], c = new RegExp(((((c.substr(0, 1) == \"^\")) ? c : ((((\"^\" + c.replace(/(\\*)/g, \".$1\").replace(/\\?/g, \".\"))) + \"$\")))));\n                if (c.test(b)) {\n                    return !0;\n                }\n            ;\n            ;\n            };\n        ;\n            return !1;\n        };\n    ;\n        function R(d) {\n            var e = d.protocol, f;\n            d.isHost = ((d.isHost || L(K.xdm_p))), r = ((d.hash || !1)), ((d.props || (d.props = {\n            })));\n            if (!d.isHost) {\n                d.channel = K.xdm_c, d.secret = K.xdm_s, d.remote = K.xdm_e, e = K.xdm_p;\n                if (((d.acl && !Q(d.acl, d.remote)))) {\n                    throw new Error(((\"Access denied for \" + d.remote)));\n                }\n            ;\n            ;\n            }\n             else d.remote = I(d.remote), d.channel = ((d.channel || ((\"default\" + h++)))), d.secret = Math.JSBNG__random().toString(16).substring(2), ((L(e) && ((((H(c.href) == H(d.remote))) ? e = \"4\" : ((((s(a, \"JSBNG__postMessage\") || s(b, \"JSBNG__postMessage\"))) ? e = \"1\" : ((((s(a, \"ActiveXObject\") && v(\"ShockwaveFlash.ShockwaveFlash\"))) ? e = \"6\" : ((((((((JSBNG__navigator.product === \"Gecko\")) && ((\"JSBNG__frameElement\" in a)))) && ((JSBNG__navigator.userAgent.indexOf(\"WebKit\") == -1)))) ? e = \"5\" : ((d.remoteHelper ? (d.remoteHelper = I(d.remoteHelper), e = \"2\") : e = \"0\"))))))))))));\n        ;\n        ;\n            switch (e) {\n              case \"0\":\n                N(d, {\n                    interval: 100,\n                    delay: 2000,\n                    useResize: !0,\n                    useParent: !1,\n                    usePolling: !1\n                }, !0);\n                if (d.isHost) {\n                    if (!d.local) {\n                        var g = ((((c.protocol + \"//\")) + c.host)), i = b.body.getElementsByTagName(\"img\"), j, k = i.length;\n                        while (k--) {\n                            j = i[k];\n                            if (((j.src.substring(0, g.length) === g))) {\n                                d.local = j.src;\n                                break;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        ((d.local || (d.local = a)));\n                    }\n                ;\n                ;\n                    var l = {\n                        xdm_c: d.channel,\n                        xdm_p: 0\n                    };\n                    ((((d.local === a)) ? (d.usePolling = !0, d.useParent = !0, d.local = ((((((((c.protocol + \"//\")) + c.host)) + c.pathname)) + c.search)), l.xdm_e = d.local, l.xdm_pa = 1) : l.xdm_e = I(d.local))), ((d.container && (d.useResize = !1, l.xdm_po = 1))), d.remote = J(d.remote, l);\n                }\n                 else N(d, {\n                    channel: K.xdm_c,\n                    remote: K.xdm_e,\n                    useParent: !L(K.xdm_pa),\n                    usePolling: !L(K.xdm_po),\n                    useResize: ((d.useParent ? !1 : d.useResize))\n                });\n            ;\n            ;\n                f = [new n.stack.HashTransport(d),new n.stack.ReliableBehavior({\n                }),new n.stack.QueueBehavior({\n                    encode: !0,\n                    maxLength: ((4000 - d.remote.length))\n                }),new n.stack.VerifyBehavior({\n                    initiate: d.isHost\n                }),];\n                break;\n              case \"1\":\n                f = [new n.stack.PostMessageTransport(d),];\n                break;\n              case \"2\":\n                f = [new n.stack.NameTransport(d),new n.stack.QueueBehavior,new n.stack.VerifyBehavior({\n                    initiate: d.isHost\n                }),];\n                break;\n              case \"3\":\n                f = [new n.stack.NixTransport(d),];\n                break;\n              case \"4\":\n                f = [new n.stack.SameOriginTransport(d),];\n                break;\n              case \"5\":\n                f = [new n.stack.FrameElementTransport(d),];\n                break;\n              case \"6\":\n                ((d.swf || (d.swf = \"../../tools/easyxdm.swf\"))), f = [new n.stack.FlashTransport(d),];\n            };\n        ;\n            return f.push(new n.stack.QueueBehavior({\n                lazy: d.lazy,\n                remove: !0\n            })), f;\n        };\n    ;\n        function S(a) {\n            var b, c = {\n                incoming: function(a, b) {\n                    this.up.incoming(a, b);\n                },\n                outgoing: function(a, b) {\n                    this.down.outgoing(a, b);\n                },\n                callback: function(a) {\n                    this.up.callback(a);\n                },\n                init: function() {\n                    this.down.init();\n                },\n                destroy: function() {\n                    this.down.destroy();\n                }\n            };\n            for (var d = 0, e = a.length; ((d < e)); d++) {\n                b = a[d], N(b, c, !0), ((((d !== 0)) && (b.down = a[((d - 1))]))), ((((d !== ((e - 1)))) && (b.up = a[((d + 1))])));\n            ;\n            };\n        ;\n            return b;\n        };\n    ;\n        function T(a) {\n            a.up.down = a.down, a.down.up = a.up, a.up = a.down = null;\n        };\n    ;\n        var g = this, h = Math.floor(((Math.JSBNG__random() * 10000))), i = Function.prototype, j = /^((http.?:)\\/\\/([^:\\/\\s]+)(:\\d+)*)/, k = /[\\-\\w]+\\/\\.\\.\\//, l = /([^:])\\/\\//g, m = \"\", n = {\n        }, o = a.easyXDM, p = \"easyXDM_\", q, r = !1, w, x;\n        if (s(a, \"JSBNG__addEventListener\")) w = function(a, b, c) {\n            a.JSBNG__addEventListener(b, c, !1);\n        }, x = function(a, b, c) {\n            a.JSBNG__removeEventListener(b, c, !1);\n        };\n         else {\n            if (!s(a, \"JSBNG__attachEvent\")) {\n                throw new Error(\"Browser not supported\");\n            }\n        ;\n        ;\n            w = function(a, b, c) {\n                a.JSBNG__attachEvent(((\"JSBNG__on\" + b)), c);\n            }, x = function(a, b, c) {\n                a.JSBNG__detachEvent(((\"JSBNG__on\" + b)), c);\n            };\n        }\n    ;\n    ;\n        var y = !1, z = [], A;\n        ((((\"readyState\" in b)) ? (A = b.readyState, y = ((((A == \"complete\")) || ((~JSBNG__navigator.userAgent.indexOf(\"AppleWebKit/\") && ((((A == \"loaded\")) || ((A == \"interactive\"))))))))) : y = !!b.body));\n        if (!y) {\n            if (s(a, \"JSBNG__addEventListener\")) w(b, \"DOMContentLoaded\", B);\n             else {\n                w(b, \"readystatechange\", function() {\n                    ((((b.readyState == \"complete\")) && B()));\n                });\n                if (((b.documentElement.doScroll && ((a === JSBNG__top))))) {\n                    var C = function() {\n                        if (y) {\n                            return;\n                        }\n                    ;\n                    ;\n                        try {\n                            b.documentElement.doScroll(\"left\");\n                        } catch (a) {\n                            d(C, 1);\n                            return;\n                        };\n                    ;\n                        B();\n                    };\n                    C();\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            w(a, \"load\", B);\n        }\n    ;\n    ;\n        var K = function(a) {\n            a = a.substring(1).split(\"&\");\n            var b = {\n            }, c, d = a.length;\n            while (d--) {\n                c = a[d].split(\"=\"), b[c[0]] = e(c[1]);\n            ;\n            };\n        ;\n            return b;\n        }(((/xdm_e=/.test(c.search) ? c.search : c.hash)));\n        N(n, {\n            version: \"2.4.12.108\",\n            query: K,\n            stack: {\n            },\n            apply: N,\n            getJSONObject: M,\n            whenReady: D,\n            noConflict: F\n        }), n.DomHelper = {\n            JSBNG__on: w,\n            un: x,\n            requiresJSON: function(c) {\n                ((t(a, \"JSON\") || b.write(((((((\"\\u003Cscript type=\\\"text/javascript\\\" src=\\\"\" + c)) + \"\\\"\\u003E\\u003C\")) + \"/script\\u003E\")))));\n            }\n        }, function() {\n            var a = {\n            };\n            n.Fn = {\n                set: function(b, c) {\n                    a[b] = c;\n                },\n                get: function(b, c) {\n                    var d = a[b];\n                    return ((c && delete a[b])), d;\n                }\n            };\n        }(), n.Socket = function(a) {\n            var b = S(R(a).concat([{\n                incoming: function(b, c) {\n                    a.onMessage(b, c);\n                },\n                callback: function(b) {\n                    ((a.onReady && a.onReady(b)));\n                }\n            },])), c = H(a.remote);\n            this.origin = H(a.remote), this.destroy = function() {\n                b.destroy();\n            }, this.JSBNG__postMessage = function(a) {\n                b.outgoing(a, c);\n            }, b.init();\n        }, n.Rpc = function(a, b) {\n            if (b.local) {\n                {\n                    var fin75keys = ((window.top.JSBNG_Replay.forInKeys)((b.local))), fin75i = (0);\n                    var c;\n                    for (; (fin75i < fin75keys.length); (fin75i++)) {\n                        ((c) = (fin75keys[fin75i]));\n                        {\n                            if (b.local.hasOwnProperty(c)) {\n                                var d = b.local[c];\n                                ((((typeof d == \"function\")) && (b.local[c] = {\n                                    method: d\n                                })));\n                            }\n                        ;\n                        ;\n                        };\n                    };\n                };\n            }\n        ;\n        ;\n            var e = S(R(a).concat([new n.stack.RpcBehavior(this, b),{\n                callback: function(b) {\n                    ((a.onReady && a.onReady(b)));\n                }\n            },]));\n            this.origin = H(a.remote), this.destroy = function() {\n                e.destroy();\n            }, e.init();\n        }, n.stack.SameOriginTransport = function(a) {\n            var b, e, f, g;\n            return b = {\n                outgoing: function(a, b, c) {\n                    f(a), ((c && c()));\n                },\n                destroy: function() {\n                    ((e && (e.parentNode.removeChild(e), e = null)));\n                },\n                onDOMReady: function() {\n                    g = H(a.remote), ((a.isHost ? (N(a.props, {\n                        src: J(a.remote, {\n                            xdm_e: ((((((c.protocol + \"//\")) + c.host)) + c.pathname)),\n                            xdm_c: a.channel,\n                            xdm_p: 4\n                        }),\n                        JSBNG__name: ((((p + a.channel)) + \"_provider\"))\n                    }), e = P(a), n.Fn.set(a.channel, function(a) {\n                        return f = a, d(function() {\n                            b.up.callback(!0);\n                        }, 0), function(a) {\n                            b.up.incoming(a, g);\n                        };\n                    })) : (f = E().Fn.get(a.channel, !0)(function(a) {\n                        b.up.incoming(a, g);\n                    }), d(function() {\n                        b.up.callback(!0);\n                    }, 0))));\n                },\n                init: function() {\n                    D(b.onDOMReady, b);\n                }\n            };\n        }, n.stack.FlashTransport = function(a) {\n            function l(a) {\n                d(function() {\n                    e.up.incoming(a, h);\n                }, 0);\n            };\n        ;\n            function o(d) {\n                var e = a.swf, f = ((\"easyXDM_swf_\" + Math.floor(((Math.JSBNG__random() * 10000))))), g = ((((((k + \"easyXDM.Fn.get(\\\"flash_\")) + f)) + \"_init\\\")\"));\n                n.Fn.set(((((\"flash_\" + f)) + \"_init\")), function() {\n                    n.stack.FlashTransport.__swf = i = j.firstChild, d();\n                }), j = b.createElement(\"div\"), N(j.style, {\n                    height: \"1px\",\n                    width: \"1px\",\n                    postition: \"abosolute\",\n                    left: 0,\n                    JSBNG__top: 0\n                }), b.body.appendChild(j);\n                var h = ((((((((((\"proto=\" + c.protocol)) + \"&domain=\")) + G(c.href))) + \"&init=\")) + g));\n                j.innerHTML = ((((((((((((((((((((((((((((((((((((\"\\u003Cobject height='1' width='1' type='application/x-shockwave-flash' id='\" + f)) + \"' data='\")) + e)) + \"'\\u003E\")) + \"\\u003Cparam name='allowScriptAccess' value='always'\\u003E\\u003C/param\\u003E\")) + \"\\u003Cparam name='wmode' value='transparent'\\u003E\")) + \"\\u003Cparam name='movie' value='\")) + e)) + \"'\\u003E\\u003C/param\\u003E\")) + \"\\u003Cparam name='flashvars' value='\")) + h)) + \"'\\u003E\\u003C/param\\u003E\")) + \"\\u003Cembed type='application/x-shockwave-flash' FlashVars='\")) + h)) + \"' allowScriptAccess='always' wmode='transparent' src='\")) + e)) + \"' height='1' width='1'\\u003E\\u003C/embed\\u003E\")) + \"\\u003C/object\\u003E\"));\n            };\n        ;\n            var e, f, g, h, i, j, k = ((m ? ((m + \".\")) : \"\"));\n            return e = {\n                outgoing: function(b, c, d) {\n                    i.JSBNG__postMessage(a.channel, b), ((d && d()));\n                },\n                destroy: function() {\n                    try {\n                        i.destroyChannel(a.channel);\n                    } catch (b) {\n                    \n                    };\n                ;\n                    i = null, ((f && (f.parentNode.removeChild(f), f = null)));\n                },\n                onDOMReady: function() {\n                    h = H(a.remote), i = n.stack.FlashTransport.__swf;\n                    var b = function() {\n                        ((a.isHost ? n.Fn.set(((((\"flash_\" + a.channel)) + \"_onMessage\")), function(b) {\n                            ((((b == ((a.channel + \"-ready\")))) && (n.Fn.set(((((\"flash_\" + a.channel)) + \"_onMessage\")), l), d(function() {\n                                e.up.callback(!0);\n                            }, 0))));\n                        }) : n.Fn.set(((((\"flash_\" + a.channel)) + \"_onMessage\")), l))), i.createChannel(a.channel, a.remote, a.isHost, ((((((k + \"easyXDM.Fn.get(\\\"flash_\")) + a.channel)) + \"_onMessage\\\")\")), a.secret), ((a.isHost ? (N(a.props, {\n                            src: J(a.remote, {\n                                xdm_e: H(c.href),\n                                xdm_c: a.channel,\n                                xdm_s: a.secret,\n                                xdm_p: 6\n                            }),\n                            JSBNG__name: ((((p + a.channel)) + \"_provider\"))\n                        }), f = P(a)) : (i.JSBNG__postMessage(a.channel, ((a.channel + \"-ready\"))), d(function() {\n                            e.up.callback(!0);\n                        }, 0))));\n                    };\n                    ((i ? b() : o(b)));\n                },\n                init: function() {\n                    D(e.onDOMReady, e);\n                }\n            };\n        }, n.stack.PostMessageTransport = function(b) {\n            function i(a) {\n                if (a.origin) {\n                    return H(a.origin);\n                }\n            ;\n            ;\n                if (a.uri) {\n                    return H(a.uri);\n                }\n            ;\n            ;\n                if (a.domain) {\n                    return ((((c.protocol + \"//\")) + a.domain));\n                }\n            ;\n            ;\n                throw \"Unable to retrieve the origin of the event\";\n            };\n        ;\n            function j(a) {\n                var c = i(a);\n                ((((((c == h)) && ((a.data.substring(0, ((b.channel.length + 1))) == ((b.channel + \" \")))))) && e.up.incoming(a.data.substring(((b.channel.length + 1))), c)));\n            };\n        ;\n            var e, f, g, h;\n            return e = {\n                outgoing: function(a, c, d) {\n                    g.JSBNG__postMessage(((((b.channel + \" \")) + a)), ((c || h))), ((d && d()));\n                },\n                destroy: function() {\n                    x(a, \"message\", j), ((f && (g = null, f.parentNode.removeChild(f), f = null)));\n                },\n                onDOMReady: function() {\n                    h = H(b.remote), ((b.isHost ? (w(a, \"message\", function i(c) {\n                        ((((c.data == ((b.channel + \"-ready\")))) && (g = ((((\"JSBNG__postMessage\" in f.contentWindow)) ? f.contentWindow : f.contentWindow.JSBNG__document)), x(a, \"message\", i), w(a, \"message\", j), d(function() {\n                            e.up.callback(!0);\n                        }, 0))));\n                    }), N(b.props, {\n                        src: J(b.remote, {\n                            xdm_e: H(c.href),\n                            xdm_c: b.channel,\n                            xdm_p: 1\n                        }),\n                        JSBNG__name: ((((p + b.channel)) + \"_provider\"))\n                    }), f = P(b)) : (w(a, \"message\", j), g = ((((\"JSBNG__postMessage\" in a.parent)) ? a.parent : a.parent.JSBNG__document)), g.JSBNG__postMessage(((b.channel + \"-ready\")), h), d(function() {\n                        e.up.callback(!0);\n                    }, 0))));\n                },\n                init: function() {\n                    D(e.onDOMReady, e);\n                }\n            };\n        }, n.stack.FrameElementTransport = function(e) {\n            var f, g, h, i;\n            return f = {\n                outgoing: function(a, b, c) {\n                    h.call(this, a), ((c && c()));\n                },\n                destroy: function() {\n                    ((g && (g.parentNode.removeChild(g), g = null)));\n                },\n                onDOMReady: function() {\n                    i = H(e.remote), ((e.isHost ? (N(e.props, {\n                        src: J(e.remote, {\n                            xdm_e: H(c.href),\n                            xdm_c: e.channel,\n                            xdm_p: 5\n                        }),\n                        JSBNG__name: ((((p + e.channel)) + \"_provider\"))\n                    }), g = P(e), g.fn = function(a) {\n                        return delete g.fn, h = a, d(function() {\n                            f.up.callback(!0);\n                        }, 0), function(a) {\n                            f.up.incoming(a, i);\n                        };\n                    }) : (((((b.referrer && ((H(b.referrer) != K.xdm_e)))) && (a.JSBNG__top.JSBNG__location = K.xdm_e))), h = a.JSBNG__frameElement.fn(function(a) {\n                        f.up.incoming(a, i);\n                    }), f.up.callback(!0))));\n                },\n                init: function() {\n                    D(f.onDOMReady, f);\n                }\n            };\n        }, n.stack.NixTransport = function(e) {\n            var f, h, i, j, k;\n            return f = {\n                outgoing: function(a, b, c) {\n                    i(a), ((c && c()));\n                },\n                destroy: function() {\n                    k = null, ((h && (h.parentNode.removeChild(h), h = null)));\n                },\n                onDOMReady: function() {\n                    j = H(e.remote);\n                    if (e.isHost) {\n                        try {\n                            ((s(a, \"getNixProxy\") || a.execScript(\"Class NixProxy\\u000a    Private m_parent, m_child, m_Auth\\u000a\\u000a    Public Sub SetParent(obj, auth)\\u000a        If isEmpty(m_Auth) Then m_Auth = auth\\u000a        SET m_parent = obj\\u000a    End Sub\\u000a    Public Sub SetChild(obj)\\u000a        SET m_child = obj\\u000a        m_parent.ready()\\u000a    End Sub\\u000a\\u000a    Public Sub SendToParent(data, auth)\\u000a        If m_Auth = auth Then m_parent.send(CStr(data))\\u000a    End Sub\\u000a    Public Sub SendToChild(data, auth)\\u000a        If m_Auth = auth Then m_child.send(CStr(data))\\u000a    End Sub\\u000aEnd Class\\u000aFunction getNixProxy()\\u000a    Set GetNixProxy = New NixProxy\\u000aEnd Function\\u000a\", \"vbscript\"))), k = getNixProxy(), k.SetParent({\n                                send: function(a) {\n                                    f.up.incoming(a, j);\n                                },\n                                ready: function() {\n                                    d(function() {\n                                        f.up.callback(!0);\n                                    }, 0);\n                                }\n                            }, e.secret), i = function(a) {\n                                k.SendToChild(a, e.secret);\n                            };\n                        } catch (l) {\n                            throw new Error(((\"Could not set up VBScript NixProxy:\" + l.message)));\n                        };\n                    ;\n                        N(e.props, {\n                            src: J(e.remote, {\n                                xdm_e: H(c.href),\n                                xdm_c: e.channel,\n                                xdm_s: e.secret,\n                                xdm_p: 3\n                            }),\n                            JSBNG__name: ((((p + e.channel)) + \"_provider\"))\n                        }), h = P(e), h.contentWindow.JSBNG__opener = k;\n                    }\n                     else {\n                        ((((b.referrer && ((H(b.referrer) != K.xdm_e)))) && (a.JSBNG__top.JSBNG__location = K.xdm_e)));\n                        try {\n                            k = a.JSBNG__opener;\n                        } catch (m) {\n                            throw new Error(\"Cannot access window.JSBNG__opener\");\n                        };\n                    ;\n                        k.SetChild({\n                            send: function(a) {\n                                g.JSBNG__setTimeout(function() {\n                                    f.up.incoming(a, j);\n                                }, 0);\n                            }\n                        }), i = function(a) {\n                            k.SendToParent(a, e.secret);\n                        }, d(function() {\n                            f.up.callback(!0);\n                        }, 0);\n                    }\n                ;\n                ;\n                },\n                init: function() {\n                    D(f.onDOMReady, f);\n                }\n            };\n        }, n.stack.NameTransport = function(a) {\n            function k(b) {\n                var d = ((((a.remoteHelper + ((c ? \"#_3\" : \"#_2\")))) + a.channel));\n                e.contentWindow.sendMessage(b, d);\n            };\n        ;\n            function l() {\n                ((c ? ((((((++g === 2)) || !c)) && b.up.callback(!0))) : (k(\"ready\"), b.up.callback(!0))));\n            };\n        ;\n            function m(a) {\n                b.up.incoming(a, i);\n            };\n        ;\n            function o() {\n                ((h && d(function() {\n                    h(!0);\n                }, 0)));\n            };\n        ;\n            var b, c, e, f, g, h, i, j;\n            return b = {\n                outgoing: function(a, b, c) {\n                    h = c, k(a);\n                },\n                destroy: function() {\n                    e.parentNode.removeChild(e), e = null, ((c && (f.parentNode.removeChild(f), f = null)));\n                },\n                onDOMReady: function() {\n                    c = a.isHost, g = 0, i = H(a.remote), a.local = I(a.local), ((c ? (n.Fn.set(a.channel, function(b) {\n                        ((((c && ((b === \"ready\")))) && (n.Fn.set(a.channel, m), l())));\n                    }), j = J(a.remote, {\n                        xdm_e: a.local,\n                        xdm_c: a.channel,\n                        xdm_p: 2\n                    }), N(a.props, {\n                        src: ((((j + \"#\")) + a.channel)),\n                        JSBNG__name: ((((p + a.channel)) + \"_provider\"))\n                    }), f = P(a)) : (a.remoteHelper = a.remote, n.Fn.set(a.channel, m)))), e = P({\n                        props: {\n                            src: ((((a.local + \"#_4\")) + a.channel))\n                        },\n                        onLoad: function b() {\n                            var c = ((e || this));\n                            x(c, \"load\", b), n.Fn.set(((a.channel + \"_load\")), o), function f() {\n                                ((((typeof c.contentWindow.sendMessage == \"function\")) ? l() : d(f, 50)));\n                            }();\n                        }\n                    });\n                },\n                init: function() {\n                    D(b.onDOMReady, b);\n                }\n            };\n        }, n.stack.HashTransport = function(b) {\n            function o(a) {\n                if (!l) {\n                    return;\n                }\n            ;\n            ;\n                var c = ((((((((b.remote + \"#\")) + j++)) + \"_\")) + a));\n                ((((f || !m)) ? l.contentWindow : l)).JSBNG__location = c;\n            };\n        ;\n            function q(a) {\n                i = a, c.up.incoming(i.substring(((i.indexOf(\"_\") + 1))), n);\n            };\n        ;\n            function r() {\n                if (!k) {\n                    return;\n                }\n            ;\n            ;\n                var a = k.JSBNG__location.href, b = \"\", c = a.indexOf(\"#\");\n                ((((c != -1)) && (b = a.substring(c)))), ((((b && ((b != i)))) && q(b)));\n            };\n        ;\n            function s() {\n                g = JSBNG__setInterval(r, h);\n            };\n        ;\n            var c, e = this, f, g, h, i, j, k, l, m, n;\n            return c = {\n                outgoing: function(a, b) {\n                    o(a);\n                },\n                destroy: function() {\n                    a.JSBNG__clearInterval(g), ((((f || !m)) && l.parentNode.removeChild(l))), l = null;\n                },\n                onDOMReady: function() {\n                    f = b.isHost, h = b.interval, i = ((\"#\" + b.channel)), j = 0, m = b.useParent, n = H(b.remote);\n                    if (f) {\n                        b.props = {\n                            src: b.remote,\n                            JSBNG__name: ((((p + b.channel)) + \"_provider\"))\n                        };\n                        if (m) b.onLoad = function() {\n                            k = a, s(), c.up.callback(!0);\n                        };\n                         else {\n                            var e = 0, g = ((b.delay / 50));\n                            (function o() {\n                                if (((++e > g))) {\n                                    throw new Error(\"Unable to reference listenerwindow\");\n                                }\n                            ;\n                            ;\n                                try {\n                                    k = l.contentWindow.JSBNG__frames[((((p + b.channel)) + \"_consumer\"))];\n                                } catch (a) {\n                                \n                                };\n                            ;\n                                ((k ? (s(), c.up.callback(!0)) : d(o, 50)));\n                            })();\n                        }\n                    ;\n                    ;\n                        l = P(b);\n                    }\n                     else k = a, s(), ((m ? (l = parent, c.up.callback(!0)) : (N(b, {\n                        props: {\n                            src: ((((((b.remote + \"#\")) + b.channel)) + new JSBNG__Date)),\n                            JSBNG__name: ((((p + b.channel)) + \"_consumer\"))\n                        },\n                        onLoad: function() {\n                            c.up.callback(!0);\n                        }\n                    }), l = P(b))));\n                ;\n                ;\n                },\n                init: function() {\n                    D(c.onDOMReady, c);\n                }\n            };\n        }, n.stack.ReliableBehavior = function(a) {\n            var b, c, d = 0, e = 0, f = \"\";\n            return b = {\n                incoming: function(a, g) {\n                    var h = a.indexOf(\"_\"), i = a.substring(0, h).split(\",\");\n                    a = a.substring(((h + 1))), ((((i[0] == d)) && (f = \"\", ((c && c(!0)))))), ((((a.length > 0)) && (b.down.outgoing(((((((((i[1] + \",\")) + d)) + \"_\")) + f)), g), ((((e != i[1])) && (e = i[1], b.up.incoming(a, g)))))));\n                },\n                outgoing: function(a, g, h) {\n                    f = a, c = h, b.down.outgoing(((((((((e + \",\")) + ++d)) + \"_\")) + a)), g);\n                }\n            };\n        }, n.stack.QueueBehavior = function(a) {\n            function m() {\n                if (((a.remove && ((c.length === 0))))) {\n                    T(b);\n                    return;\n                }\n            ;\n            ;\n                if (((((g || ((c.length === 0)))) || i))) {\n                    return;\n                }\n            ;\n            ;\n                g = !0;\n                var e = c.shift();\n                b.down.outgoing(e.data, e.origin, function(a) {\n                    g = !1, ((e.callback && d(function() {\n                        e.callback(a);\n                    }, 0))), m();\n                });\n            };\n        ;\n            var b, c = [], g = !0, h = \"\", i, j = 0, k = !1, l = !1;\n            return b = {\n                init: function() {\n                    ((L(a) && (a = {\n                    }))), ((a.maxLength && (j = a.maxLength, l = !0))), ((a.lazy ? k = !0 : b.down.init()));\n                },\n                callback: function(a) {\n                    g = !1;\n                    var c = b.up;\n                    m(), c.callback(a);\n                },\n                incoming: function(c, d) {\n                    if (l) {\n                        var f = c.indexOf(\"_\"), g = parseInt(c.substring(0, f), 10);\n                        h += c.substring(((f + 1))), ((((g === 0)) && (((a.encode && (h = e(h)))), b.up.incoming(h, d), h = \"\")));\n                    }\n                     else b.up.incoming(c, d);\n                ;\n                ;\n                },\n                outgoing: function(d, e, g) {\n                    ((a.encode && (d = f(d))));\n                    var h = [], i;\n                    if (l) {\n                        while (((d.length !== 0))) {\n                            i = d.substring(0, j), d = d.substring(i.length), h.push(i);\n                        ;\n                        };\n                    ;\n                        while (i = h.shift()) {\n                            c.push({\n                                data: ((((h.length + \"_\")) + i)),\n                                origin: e,\n                                callback: ((((h.length === 0)) ? g : null))\n                            });\n                        ;\n                        };\n                    ;\n                    }\n                     else c.push({\n                        data: d,\n                        origin: e,\n                        callback: g\n                    });\n                ;\n                ;\n                    ((k ? b.down.init() : m()));\n                },\n                destroy: function() {\n                    i = !0, b.down.destroy();\n                }\n            };\n        }, n.stack.VerifyBehavior = function(a) {\n            function f() {\n                c = Math.JSBNG__random().toString(16).substring(2), b.down.outgoing(c);\n            };\n        ;\n            var b, c, d, e = !1;\n            return b = {\n                incoming: function(e, g) {\n                    var h = e.indexOf(\"_\");\n                    ((((h === -1)) ? ((((e === c)) ? b.up.callback(!0) : ((d || (d = e, ((a.initiate || f())), b.down.outgoing(e)))))) : ((((e.substring(0, h) === d)) && b.up.incoming(e.substring(((h + 1))), g)))));\n                },\n                outgoing: function(a, d, e) {\n                    b.down.outgoing(((((c + \"_\")) + a)), d, e);\n                },\n                callback: function(b) {\n                    ((a.initiate && f()));\n                }\n            };\n        }, n.stack.RpcBehavior = function(a, b) {\n            function g(a) {\n                a.jsonrpc = \"2.0\", c.down.outgoing(d.stringify(a));\n            };\n        ;\n            function h(a, b) {\n                var c = Array.prototype.slice;\n                return function() {\n                    var d = arguments.length, h, i = {\n                        method: b\n                    };\n                    ((((((d > 0)) && ((typeof arguments[((d - 1))] == \"function\")))) ? (((((((d > 1)) && ((typeof arguments[((d - 2))] == \"function\")))) ? (h = {\n                        success: arguments[((d - 2))],\n                        error: arguments[((d - 1))]\n                    }, i.params = c.call(arguments, 0, ((d - 2)))) : (h = {\n                        success: arguments[((d - 1))]\n                    }, i.params = c.call(arguments, 0, ((d - 1)))))), f[((\"\" + ++e))] = h, i.id = e) : i.params = c.call(arguments, 0))), ((((a.namedParams && ((i.params.length === 1)))) && (i.params = i.params[0]))), g(i);\n                };\n            };\n        ;\n            function j(a, b, c, d) {\n                if (!c) {\n                    ((b && g({\n                        id: b,\n                        error: {\n                            code: -32601,\n                            message: \"Procedure not found.\"\n                        }\n                    })));\n                    return;\n                }\n            ;\n            ;\n                var e, f;\n                ((b ? (e = function(a) {\n                    e = i, g({\n                        id: b,\n                        result: a\n                    });\n                }, f = function(a, c) {\n                    f = i;\n                    var d = {\n                        id: b,\n                        error: {\n                            code: -32099,\n                            message: a\n                        }\n                    };\n                    ((c && (d.error.data = c))), g(d);\n                }) : e = f = i)), ((u(d) || (d = [d,])));\n                try {\n                    var h = c.method.apply(c.scope, d.concat([e,f,]));\n                    ((L(h) || e(h)));\n                } catch (j) {\n                    f(j.message);\n                };\n            ;\n            };\n        ;\n            var c, d = ((b.serializer || M())), e = 0, f = {\n            };\n            return c = {\n                incoming: function(a, c) {\n                    var e = d.parse(a);\n                    if (e.method) ((b.handle ? b.handle(e, g) : j(e.method, e.id, b.local[e.method], e.params)));\n                     else {\n                        var h = f[e.id];\n                        ((e.error ? ((h.error && h.error(e.error))) : ((h.success && h.success(e.result))))), delete f[e.id];\n                    }\n                ;\n                ;\n                },\n                init: function() {\n                    if (b.remote) {\n                        {\n                            var fin76keys = ((window.top.JSBNG_Replay.forInKeys)((b.remote))), fin76i = (0);\n                            var d;\n                            for (; (fin76i < fin76keys.length); (fin76i++)) {\n                                ((d) = (fin76keys[fin76i]));\n                                {\n                                    ((b.remote.hasOwnProperty(d) && (a[d] = h(b.remote[d], d))));\n                                ;\n                                };\n                            };\n                        };\n                    }\n                ;\n                ;\n                    c.down.init();\n                },\n                destroy: function() {\n                    {\n                        var fin77keys = ((window.top.JSBNG_Replay.forInKeys)((b.remote))), fin77i = (0);\n                        var d;\n                        for (; (fin77i < fin77keys.length); (fin77i++)) {\n                            ((d) = (fin77keys[fin77i]));\n                            {\n                                ((((b.remote.hasOwnProperty(d) && a.hasOwnProperty(d))) && delete a[d]));\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    c.down.destroy();\n                }\n            };\n        }, g.easyXDM = n;\n    })(window, JSBNG__document, JSBNG__location, window.JSBNG__setTimeout, decodeURIComponent, encodeURIComponent);\n});\ndefine(\"app/utils/easy_xdm\", [\"module\",\"require\",\"exports\",\"$lib/easyXDM.js\",], function(module, require, exports) {\n    require(\"$lib/easyXDM.js\"), module.exports = window.easyXDM.noConflict();\n});\ndefine(\"app/utils/sandboxed_ajax\", [\"module\",\"require\",\"exports\",\"core/utils\",\"app/utils/easy_xdm\",], function(module, require, exports) {\n    function remoteUrl(a, b) {\n        var c = a.split(\"/\").slice(-1);\n        return ((/localhost/.test(window.JSBNG__location.hostname) ? ((((((\"http://localhost.twitter.com:\" + ((window.cdnGoosePort || \"1867\")))) + \"/\")) + c)) : ((b ? a : a.replace(\"https:\", \"http:\")))));\n    };\n;\n    function generateSocket(a) {\n        return new easyXDM.Socket({\n            remote: a,\n            onMessage: function(a, b) {\n                var c = JSON.parse(a), d = requests[c.id];\n                ((((d && d.callbacks[c.callbackName])) && d.callbacks[c.callbackName].apply(null, c.callbackArgs))), ((((c.callbackName === \"complete\")) && delete requests[c.id]));\n            }\n        });\n    };\n;\n    function generateSandboxRequest(a) {\n        var b = ++nextRequestId;\n        a = utils.merge({\n        }, a);\n        var c = {\n            id: b,\n            callbacks: {\n                success: a.success,\n                error: a.error,\n                before: a.before,\n                complete: a.complete\n            },\n            request: {\n                id: b,\n                data: a\n            }\n        };\n        return delete a.success, delete a.error, delete a.complete, delete a.before, requests[b] = c, c.request;\n    };\n;\n    var utils = require(\"core/utils\"), easyXDM = require(\"app/utils/easy_xdm\"), TIMEOUT = 5000, nextRequestId = 0, requests = {\n    }, sockets = [null,null,], sandbox = {\n        send: function(a, b) {\n            var c = ((!!/^https:|^\\/\\//.test(b.url) || !!$.browser.msie)), d = ((c ? 0 : 1));\n            ((sockets[d] || (sockets[d] = generateSocket(remoteUrl(a, c)))));\n            var e = generateSandboxRequest(b);\n            sockets[d].JSBNG__postMessage(JSON.stringify(e));\n        },\n        easyXDM: easyXDM\n    };\n    module.exports = sandbox;\n});\nprovide(\"app/ui/media/with_legacy_icons\", function(a) {\n    using(\"core/i18n\", function(_) {\n        function b() {\n            this.defaultAttrs({\n                iconClass: \"js-sm-icon\",\n                viewDetailsSelector: \"span.js-view-details\",\n                hideDetailsSelector: \"span.js-hide-details\",\n                iconContainerSelector: \"span.js-icon-container\"\n            }), this.iconMap = {\n                photo: [\"sm-image\",_(\"View photo\"),_(\"Hide photo\"),],\n                video: [\"sm-video\",_(\"View video\"),_(\"Hide video\"),],\n                song: [\"sm-audio\",_(\"View song\"),_(\"Hide song\"),],\n                album: [\"sm-audio\",_(\"View album\"),_(\"Hide album\"),],\n                tweet: [\"sm-embed\",_(\"View tweet\"),_(\"Hide tweet\"),],\n                generic: [\"sm-embed\",_(\"View media\"),_(\"Hide media\"),],\n                software: [\"sm-embed\",_(\"View app\"),_(\"Hide app\"),]\n            }, this.makeIcon = function(a, b) {\n                var c = b.type.icon;\n                ((((typeof c == \"function\")) && (c = c.call(b))));\n                var d = this.iconMap[c], e = a.JSBNG__find(this.attr.iconContainerSelector), f = $(\"\\u003Ci/\\u003E\", {\n                    class: ((((this.attr.iconClass + \" \")) + d[0]))\n                });\n                ((((e.JSBNG__find(((\".\" + d[0]))).length === 0)) && e.append(f))), a.JSBNG__find(this.attr.viewDetailsSelector).text(d[1]).end().JSBNG__find(this.attr.hideDetailsSelector).text(d[2]).end();\n            }, this.addMediaIconsAndText = function(a, b) {\n                b.forEach(this.makeIcon.bind(this, a));\n            };\n        };\n    ;\n        a(b);\n    });\n});\ndefine(\"app/utils/third_party_application\", [\"module\",\"require\",\"exports\",\"app/utils/easy_xdm\",], function(module, require, exports) {\n    function getUserLinkColor() {\n        if (!userLinkColor) {\n            var a = $(\"\\u003Ca\\u003Ex\\u003C/a\\u003E\").appendTo($(\"body\"));\n            userLinkColor = a.css(\"color\"), a.remove();\n        }\n    ;\n    ;\n        return userLinkColor;\n    };\n;\n    function socket(a, b, c) {\n        var d = new easyXDM.Rpc({\n            remote: b,\n            container: a,\n            props: {\n                width: ((c.width || \"100%\")),\n                height: ((c.height || 0))\n            },\n            onReady: function() {\n                d.initialize({\n                    htmlContent: ((((\"\\u003Cdiv class='tweet-media'\\u003E\" + c.htmlContent)) + \"\\u003C/div\\u003E\")),\n                    styles: [[\"a\",[\"color\",getUserLinkColor(),],],]\n                });\n            }\n        }, {\n            local: {\n                ui: function(b, c) {\n                    ((((b === \"resizeFrame\")) && $(a).JSBNG__find(\"div\").height(c)));\n                }\n            },\n            remote: {\n                trigger: {\n                },\n                initialize: {\n                }\n            }\n        });\n        return d;\n    };\n;\n    function embedded(a, b, c) {\n        return socket(a, b, c);\n    };\n;\n    function sandboxed(a, b, c) {\n        return ((/localhost/.test(b) && (b = b.replace(\"localhost.twitter.com\", \"localhost\")))), socket(a, b, c);\n    };\n;\n    var easyXDM = require(\"app/utils/easy_xdm\"), userLinkColor;\n    module.exports = {\n        embedded: embedded,\n        sandboxed: sandboxed,\n        easyXDM: easyXDM\n    };\n});\nprovide(\"app/ui/media/legacy_embed\", function(a) {\n    using(\"core/parameterize\", \"app/utils/third_party_application\", function(b, c) {\n        function d(a) {\n            this.data = {\n            }, this.url = a.url, this.slug = a.slug, this._name = a.type._name, this.constructor = a.type, this.process = this.constructor.process, this.getImageURL = this.constructor.getImageURL, this.metadata = this.constructor.metadata, this.icon = this.constructor.icon, this.calcHeight = function(a) {\n                return Math.round(((277814 * a)));\n            };\n            {\n                var fin78keys = ((window.top.JSBNG_Replay.forInKeys)((this.constructor.methods))), fin78i = (0);\n                var d;\n                for (; (fin78i < fin78keys.length); (fin78i++)) {\n                    ((d) = (fin78keys[fin78i]));\n                    {\n                        ((((typeof this.constructor.methods[d] == \"function\")) && (this[d] = this.constructor.methods[d])));\n                    ;\n                    };\n                };\n            };\n        ;\n            this.renderIframe = function(a, c) {\n                var d = ((((\"\\u003Ciframe src='\" + c)) + \"' width='{{width}}' height='{{height}}'\\u003E\\u003C/iframe\\u003E\"));\n                a.append(b(d, this.data));\n            }, this.renderEmbeddedApplication = function(a, b) {\n                c.embedded(a.get(0), b, {\n                    height: this.data.height,\n                    width: this.data.width\n                });\n            }, this.type = function() {\n                return ((((typeof this.icon == \"function\")) ? this.icon(this.url) : this.icon));\n            }, this.useOpaqueModeForFlash = function(a) {\n                return a.replace(/(<\\/object>)/, \"\\u003Cparam name=\\\"wmode\\\" value=\\\"opaque\\\"\\u003E$1\").replace(/(<embed .*?)(\\/?>)/, \"$1 wmode=\\\"opaque\\\"$2\");\n            }, this.resizeHtmlEmbed = function(a, b, c, d) {\n                if (((((((a && b)) && b.maxwidth)) && ((b.maxwidth < c))))) {\n                    var e = Math.round(((((b.maxwidth * d)) / c)));\n                    a = a.replace(new RegExp(((((\"width=(\\\"?)\" + c)) + \"(?=\\\\D|$)\")), \"g\"), ((\"width=$1\" + b.maxwidth))).replace(new RegExp(((((\"height=(\\\"?)\" + d)) + \"(?=\\\\D|$)\")), \"g\"), ((\"height=$1\" + e)));\n                }\n            ;\n            ;\n                return a;\n            };\n        };\n    ;\n        a(d);\n    });\n});\nprovide(\"app/ui/media/with_legacy_embeds\", function(a) {\n    using(\"core/i18n\", \"core/parameterize\", \"app/ui/media/legacy_embed\", \"app/utils/third_party_application\", function(_, b, c, d) {\n        function e() {\n            this.defaultAttrs({\n                tweetMedia: \".tweet-media\",\n                landingArea: \".js-landing-area\"\n            });\n            var a = {\n                attribution: \"          \\u003Cdiv class=\\\"media-attribution\\\"\\u003E            \\u003Cimg src=\\\"{{iconUrl}}\\\"\\u003E            \\u003Ca href=\\\"{{href}}\\\" class=\\\"media-attribution-link\\\" target=\\\"_blank\\\"\\u003E{{typeName}}\\u003C/a\\u003E          \\u003C/div\\u003E\",\n                embedWrapper: \"          \\u003Cdiv class=\\\"tweet-media\\\"\\u003E            \\u003Cdiv class=\\\"media-instance-container\\\"\\u003E              \\u003Cdiv class=\\\"js-landing-area\\\" style=\\\"min-height:{{minHeight}}px\\\"\\u003E\\u003C/div\\u003E              {{flagAction}}              {{attribution}}            \\u003C/div\\u003E          \\u003C/div\\u003E\",\n                flagAction: \"          \\u003Cspan class=\\\"flag-container\\\"\\u003E            \\u003Cbutton type=\\\"button\\\" class=\\\"flaggable btn-link\\\"\\u003E              {{flagThisMedia}}            \\u003C/button\\u003E            \\u003Cspan class=\\\"flagged hidden\\\"\\u003E              {{flagged}}              \\u003Cspan\\u003E                \\u003Ca target=\\\"_blank\\\" href=\\\"//support.twitter.com/articles/20069937\\\"\\u003E                  {{learnMore}}                \\u003C/a\\u003E              \\u003C/span\\u003E            \\u003C/span\\u003E          \\u003C/span\\u003E\"\n            };\n            this.assetPath = function(a) {\n                return ((this.attr.assetsBasePath ? (((((((a.charAt(0) == \"/\")) && ((this.attr.assetsBasePath.charAt(((this.attr.assetsBasePath.length - 1))) == \"/\")))) ? a = a.substring(1) : ((((((a.charAt(0) != \"/\")) && ((this.attr.assetsBasePath.charAt(((this.attr.assetsBasePath.length - 1))) != \"/\")))) && (a = ((\"/\" + a))))))), ((this.attr.assetsBasePath + a))) : a));\n            }, this.attributionIconUrl = function(a) {\n                return ((a.attribution_icon || this.assetPath(((((\"/images/partner-favicons/\" + a._name)) + \".png\")))));\n            }, this.isFlaggable = function(a) {\n                return ((this.attr.loggedIn && a.type.flaggable));\n            }, this.assembleEmbedContainerHtml = function(c, d) {\n                var e = ((this.isFlaggable(c) ? b(a.flagAction, {\n                    flagThisMedia: _(\"Flag this media\"),\n                    flagged: _(\"Flagged\"),\n                    learnMore: _(\"(learn more)\")\n                }) : \"\")), f = b(a.attribution, {\n                    iconUrl: this.attributionIconUrl(d),\n                    typeName: d._name,\n                    href: c.type.domain\n                });\n                return b(a.embedWrapper, {\n                    minHeight: ((c.type.height || 100)),\n                    attribution: f,\n                    flagAction: e,\n                    mediaClass: d._name.toLowerCase()\n                });\n            }, this.renderThirdPartyApplication = function(a, b) {\n                d.sandboxed(a.get(0), this.embedSandboxPath, {\n                    htmlContent: b\n                });\n            }, this.assembleEmbedInnerHtml = function(a, b, c) {\n                ((b.JSBNG__content ? this.renderThirdPartyApplication(a, b.JSBNG__content.call(c)) : b.render.call(c, a)));\n            }, this.renderMediaType = function(a, b) {\n                var d = new c(a), e = $(this.assembleEmbedContainerHtml(a, d)), f = function() {\n                    var b = $(\"\\u003Cdiv/\\u003E\");\n                    e.JSBNG__find(this.attr.landingArea).append(b), this.assembleEmbedInnerHtml(b, a.type, d), ((this.mediaTypeIsInteractive(a.type.icon) && e.data(\"interactive\", !0).data(\"completeRender\", f)));\n                }.bind(this);\n                return a.type.process.call(d, f, b), e;\n            }, this.buildEmbeddedMediaNodes = function(a, b) {\n                return a.map(function(a) {\n                    return this.renderMediaType(a, b);\n                }, this);\n            }, this.mediaTypeIsInteractive = function(a) {\n                return ((((a === \"video\")) || ((a === \"song\"))));\n            }, this.rerenderInteractiveEmbed = function(a) {\n                var b = $(a.target), c = b.JSBNG__find(this.attr.tweetMedia).data(\"completeRender\");\n                ((((c && b.JSBNG__find(this.attr.landingArea).is(\":empty\"))) && c()));\n            }, this.after(\"initialize\", function(a) {\n                this.embedSandboxPath = ((a.sandboxes && a.sandboxes.detailsPane));\n                if (!this.embedSandboxPath) {\n                    throw new Error(\"WithLegacyEmbeds requires options.sandboxes to be set\");\n                }\n            ;\n            ;\n                this.JSBNG__on(\"uiHasExpandedTweet\", this.rerenderInteractiveEmbed);\n            });\n        };\n    ;\n        a(e);\n    });\n});\ndefine(\"app/ui/media/with_flag_action\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function() {\n        this.defaultAttrs({\n            flagContainerSelector: \".flag-container\",\n            flaggableSelector: \".flaggable\",\n            flaggedSelector: \".flagged\",\n            tweetWithIdSelector: \".tweet[data-tweet-id]\"\n        }), this.flagMedia = function(a) {\n            var b = $(a.target).closest(this.attr.flagContainerSelector), c = b.JSBNG__find(this.attr.flaggableSelector);\n            if (!c.hasClass(\"hidden\")) {\n                var d = b.closest(this.attr.tweetWithIdSelector);\n                ((d.attr(\"data-possibly-sensitive\") ? this.trigger(\"uiFlagConfirmation\", {\n                    id: d.attr(\"data-tweet-id\")\n                }) : (this.trigger(\"uiFlagMedia\", {\n                    id: d.attr(\"data-tweet-id\")\n                }), b.JSBNG__find(this.attr.flaggableSelector).addClass(\"hidden\"), b.JSBNG__find(this.attr.flaggedSelector).removeClass(\"hidden\"))));\n            }\n        ;\n        ;\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                flagContainerSelector: this.flagMedia\n            });\n        });\n    };\n});\ndefine(\"app/ui/media/with_hidden_display\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    module.exports = function() {\n        this.defaultAttrs({\n            mediaNotDisplayedSelector: \".media-not-displayed\",\n            displayMediaSelector: \".display-this-media\",\n            alwaysDisplaySelector: \".always-display-media\",\n            entitiesContainerSelector: \".entities-media-container\",\n            cardsContainerSelector: \".cards-media-container\",\n            cards2ContainerSelector: \".card2\",\n            detailsFixerSelector: \".js-tweet-details-fixer\"\n        }), this.showMedia = function(a) {\n            var b = $(a.target).closest(this.attr.detailsFixerSelector), c = [];\n            ((this.attr.mediaContainerSelector && c.push(this.attr.mediaContainerSelector))), ((this.attr.entitiesContainerSelector && c.push(this.attr.entitiesContainerSelector))), ((this.attr.cardsContainerSelector && c.push(this.attr.cardsContainerSelector))), ((this.attr.cards2ContainerSelector && c.push(this.attr.cards2ContainerSelector))), b.JSBNG__find(this.attr.mediaNotDisplayedSelector).hide(), b.JSBNG__find(c.join(\",\")).removeClass(\"hidden\");\n        }, this.updateMediaSettings = function(a) {\n            this.trigger(\"uiUpdateViewPossiblySensitive\", {\n                do_show: !0\n            }), this.showMedia(a);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                displayMediaSelector: this.showMedia,\n                alwaysDisplaySelector: this.updateMediaSettings\n            });\n        });\n    };\n});\nprovide(\"app/ui/media/with_legacy_media\", function(a) {\n    using(\"core/compose\", \"app/ui/media/types\", \"app/utils/sandboxed_ajax\", \"app/ui/media/with_legacy_icons\", \"app/ui/media/with_legacy_embeds\", \"app/ui/media/with_flag_action\", \"app/ui/media/with_hidden_display\", \"app/ui/media/legacy_embed\", function(b, c, d, e, f, g, h, i) {\n        function j() {\n            b.mixin(this, [e,f,g,h,]), this.defaultAttrs({\n                linkSelector: \"p.js-tweet-text a.twitter-timeline-link\",\n                generalTweetSelector: \".js-stream-tweet\",\n                insideProxyTweet: \".proxy-tweet-container *\",\n                wasAlreadyEmbedded: \"[data-pre-embedded=\\\"true\\\"]\",\n                mediaContainerSelector: \".js-tweet-media-container\"\n            }), this.matchLink = function(a, b, c) {\n                var d = $(b), e = ((d.data(\"expanded-url\") || b.href)), f = this.matchUrl(e, c);\n                if (f) {\n                    return f.a = b, f.embedIndex = d.index(), f;\n                }\n            ;\n            ;\n                ((c || this.trigger(b, \"uiWantsLinkResolution\", {\n                    url: e\n                })));\n            }, this.matchUrl = function(a, b) {\n                if (this.alreadyMatched[a]) {\n                    return this.alreadyMatched[a];\n                }\n            ;\n            ;\n                var d = c.matchers;\n                for (var e = 0, f = d.length; ((e < f)); e++) {\n                    var g = a.match(d[e][0]);\n                    if (((g && g.length))) {\n                        return this.alreadyMatched[a] = {\n                            url: a,\n                            slug: g[1],\n                            type: c.mediaTypes[d[e][1]],\n                            label: d[e][2]\n                        };\n                    }\n                ;\n                ;\n                };\n            ;\n            }, this.resolveMedia = function(a, b, c, d) {\n                if (!a.attr(\"data-url\")) {\n                    return b(!1, a);\n                }\n            ;\n            ;\n                if (a.attr(((\"data-resolved-url-\" + c)))) {\n                    return b(!0, a);\n                }\n            ;\n            ;\n                var e = this.matchUrl(a.attr(\"data-url\"));\n                if (e) {\n                    var f = new i(e);\n                    ((((!f.getImageURL || ((d && ((f.type() != d)))))) ? b(!1, a) : f.getImageURL(c, function(d) {\n                        ((d ? (a.attr(((\"data-resolved-url-\" + c)), d), b(!0, a)) : b(!1, a)));\n                    })));\n                }\n                 else b(!1, a);\n            ;\n            ;\n            }, this.addIconsAndSaveMediaType = function(a, b) {\n                var c = $(b.a).closest(this.attr.generalTweetSelector);\n                if (((c.hasClass(\"has-cards\") || c.hasClass(\"simple-tweet\")))) {\n                    return;\n                }\n            ;\n            ;\n                this.addMediaIconsAndText(c, [b,]), this.saveRecordWithIndex(b, b.index, c.data(\"embeddedMedia\"));\n            }, this.saveRecordWithIndex = function(a, b, c) {\n                for (var d = 0; ((d < c.length)); d++) {\n                    if (((b < c[d].index))) {\n                        c.splice(d, 0, a);\n                        return;\n                    }\n                ;\n                ;\n                };\n            ;\n                c.push(a);\n            }, this.getMediaTypesAndIconsForTweet = function(a, b) {\n                if ($(b).hasClass(\"has-cards\")) {\n                    return;\n                }\n            ;\n            ;\n                $(b).data(\"embeddedMedia\", []).JSBNG__find(this.attr.linkSelector).filter(function(a, b) {\n                    var c = $(b);\n                    return ((c.is(this.attr.insideProxyTweet) ? !1 : !c.is(this.attr.wasAlreadyEmbedded)));\n                }.bind(this)).map(this.matchLink.bind(this)).map(this.addIconsAndSaveMediaType.bind(this)), this.trigger($(b), \"uiHasAddedLegacyMediaIcon\");\n            }, this.handleResolvedUrl = function(a, b) {\n                $(a.target).data(\"expanded-url\", b.url);\n                var c = this.matchLink(null, a.target, !0);\n                ((c && (this.addIconsAndSaveMediaType(null, c), this.trigger(a.target, \"uiHasAddedLegacyMediaIcon\"))));\n            }, this.inlineLegacyMediaEmbedsForTweet = function(a) {\n                var b = $(a.target);\n                if (b.hasClass(\"has-cards\")) {\n                    return;\n                }\n            ;\n            ;\n                var c = b.JSBNG__find(this.attr.mediaContainerSelector), d = b.data(\"embeddedMedia\");\n                ((d && this.buildEmbeddedMediaNodes(d, {\n                    maxwidth: c.width()\n                }).forEach(function(a) {\n                    c.append(a);\n                })));\n            }, this.addMediaToTweetsInElement = function(a) {\n                $(a.target).JSBNG__find(this.attr.generalTweetSelector).each(this.getMediaTypesAndIconsForTweet.bind(this));\n            }, this.after(\"initialize\", function(a) {\n                c.sandboxedAjax.send = function(b) {\n                    d.send(a.sandboxes.jsonp, b);\n                }, this.alreadyMatched = {\n                }, this.JSBNG__on(\"uiHasInjectedTimelineItem\", this.addMediaToTweetsInElement), this.JSBNG__on(\"uiWantsMediaForTweet\", this.inlineLegacyMediaEmbedsForTweet), this.JSBNG__on(\"dataDidResolveUrl\", this.handleResolvedUrl), this.addMediaToTweetsInElement({\n                    target: this.$node\n                });\n            });\n        };\n    ;\n        a(j);\n    });\n});\ndefine(\"app/utils/image/image_loader\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    var imageLoader = {\n        load: function(a, b, c) {\n            var d = $(\"\\u003Cimg/\\u003E\");\n            d.JSBNG__on(\"load\", function(a) {\n                b(d);\n            }), d.JSBNG__on(\"error\", function(a) {\n                c();\n            }), d.attr(\"src\", a);\n        }\n    };\n    module.exports = imageLoader;\n});\ndefine(\"app/ui/with_tweet_actions\", [\"module\",\"require\",\"exports\",\"core/compose\",\"app/ui/with_interaction_data\",\"app/utils/tweet_helper\",\"app/utils/cookie\",], function(module, require, exports) {\n    function withTweetActions() {\n        compose.mixin(this, [withInteractionData,]), this.defaultAttrs({\n            permalinkTweetClass: \"permalink-tweet\",\n            dismissedTweetClass: \"js-dismissed-promoted-tweet\",\n            streamTweetItemSelector: \"li.js-stream-item\",\n            tweetWithReplyDialog: \"div.simple-tweet,div.permalink-tweet,div.permalink-tweet div.proxy-tweet-container div.tweet,li.disco-stream-item div.tweet,div.slideshow-tweet div.proxy-tweet-container div.tweet,div.conversation-tweet\",\n            proxyTweetSelector: \"div.proxy-tweet-container div.tweet\",\n            tweetItemSelector: \"div.tweet\",\n            conversationTweetItemSelector: \".conversation-module .simple-tweet\",\n            tweetActionsSelector: \"div.tweet ul.js-actions\",\n            toggleContainerSelector: \".js-toggle-state\",\n            favoriteSelector: \"div.tweet ul.js-actions .js-toggle-fav a\",\n            retweetSelector: \"div.tweet ul.js-actions .js-toggle-rt a\",\n            replySelector: \"div.tweet ul.js-actions a.js-action-reply\",\n            deleteSelector: \"div.tweet ul.js-actions a.js-action-del\",\n            permalinkSelector: \"div.tweet .js-permalink\",\n            anyLoggedInActionSelector: \"div.tweet .js-actions a:not(.js-embed-tweet):not(.dropdown-toggle)\",\n            dismissTweetSelector: \"div.tweet .js-action-dismiss\",\n            dismissedTweetSelector: \".js-dismissed-promoted-tweet\",\n            promotedTweetStoreCookieName: \"h\",\n            moreOptionsSelector: \"div.tweet ul.js-actions .action-more-container div.dropdown\",\n            shareViaEmailSelector: \"div.tweet ul.js-actions ul.dropdown-menu a.js-share-via-email\",\n            embedTweetSelector: \"div.tweet ul.js-actions ul.dropdown-menu a.js-embed-tweet\"\n        }), this.toggleRetweet = function(a, b) {\n            var c = this.findTweet(b.tweet_id);\n            ((c.attr(\"data-my-retweet-id\") ? c.removeAttr(\"data-my-retweet-id\") : c.attr(\"data-my-retweet-id\", b.retweet_id))), a.preventDefault();\n        }, this.handleTransition = function(a, b) {\n            return function(c, d) {\n                var e = ((d.id || d.sourceEventData.id)), f = this.findTweet(e), g = f[0], h = JSBNG__document.activeElement, i, j;\n                ((((g && $.contains(g, h))) && (i = $(h).closest(this.attr.toggleContainerSelector)))), f[a](b), ((this.attr.proxyTweetSelector && (j = this.$node.JSBNG__find(((((((this.attr.proxyTweetSelector + \"[data-tweet-id=\")) + e)) + \"]\"))), j[a](b)))), ((i && i.JSBNG__find(\"a:visible\").JSBNG__focus())), c.preventDefault();\n            };\n        }, this.getTweetData = function(a, b) {\n            var c;\n            return ((b ? c = this.interactionDataWithCard(a) : c = this.interactionData(a))), c.id = c.tweetId, c.screenName = a.attr(\"data-screen-name\"), c.screenNames = tweetHelper.extractMentionsForReply(a, this.attr.screenName), c.isTweetProof = ((a.attr(\"data-is-tweet-proof\") === \"true\")), c;\n        }, this.handleReply = function(a, b, c) {\n            var d = this.$tweetForEvent(a, c), e = this.getTweetData(d, !0);\n            e.replyLinkClick = !0, ((((((d.is(this.attr.tweetWithReplyDialog) || ((d.attr(\"data-use-reply-dialog\") === \"true\")))) || ((d.attr(\"data-is-tweet-proof\") === \"true\")))) ? this.trigger(d, \"uiOpenReplyDialog\", e) : this.trigger(d, \"expandTweetByReply\", e))), a.preventDefault(), a.stopPropagation();\n        }, this.$tweetForEvent = function(a, b) {\n            var c = ((b ? \"JSBNG__find\" : \"closest\")), d = $(a.target)[c](this.attr.tweetItemSelector);\n            return ((((d.length === 0)) && (d = $(a.target)[c](this.attr.conversationTweetItemSelector)))), ((((d.JSBNG__find(this.attr.proxyTweetSelector).length == 1)) ? d.JSBNG__find(this.attr.proxyTweetSelector) : d));\n        }, this.$containerTweet = function(a) {\n            return $(a.target).closest(this.attr.tweetItemSelector);\n        }, this.handleAction = function(a, b, c, d) {\n            return function(e) {\n                var f = this.$tweetForEvent(e, d), g = this.getTweetData(f, !0);\n                ((((!a || f.hasClass(a))) ? this.trigger(f, b, g) : ((c && this.trigger(f, c, g))))), e.preventDefault(), e.stopPropagation();\n            };\n        }, this.handlePermalinkClick = function(a, b) {\n            var c = this.$tweetForEvent(a), d = this.getTweetData(c);\n            this.trigger(c, \"uiPermalinkClick\", d);\n        }, this.handleTweetDelete = function(a, b) {\n            var c = this.findTweet(b.sourceEventData.id);\n            c.each(function(a, c) {\n                var d = $(c);\n                ((d.hasClass(this.attr.permalinkTweetClass) ? window.JSBNG__location.replace(\"/\") : ((d.is(this.attr.tweetWithReplyDialog) ? (d.closest(\"li\").remove(), this.trigger(\"uiTweetRemoved\", b)) : (d.closest(this.attr.streamTweetItemSelector).remove(), this.trigger(\"uiTweetRemoved\", b))))));\n            }.bind(this)), ((this.select(\"tweetItemSelector\").length || ((this.$node.hasClass(\"replies-to\") ? this.$node.addClass(\"hidden\") : ((this.$node.hasClass(\"in-reply-to\") ? this.$node.remove() : this.select(\"timelineEndSelector\").removeClass(\"has-items\")))))));\n        }, this.findTweet = function(a) {\n            var b = this.attr.tweetItemSelector.split(\",\").map(function(b) {\n                return ((((((b + \"[data-tweet-id=\")) + a)) + \"]\"));\n            }).join(\",\");\n            return this.$node.JSBNG__find(b);\n        }, this.handleLoggedOutActionClick = function(a) {\n            a.preventDefault(), a.stopPropagation(), this.trigger(\"uiOpenSigninOrSignupDialog\", {\n                signUpOnly: !1,\n                screenName: this.$tweetForEvent(a).attr(\"data-screen-name\")\n            });\n        }, this.dismissTweet = function(a) {\n            var b = this.$tweetForEvent(a), c = b.closest(this.attr.streamTweetItemSelector), d = this.getTweetData(b);\n            c.addClass(this.attr.dismissedTweetClass).fadeOut(200, function() {\n                this.removeTweet(c);\n            }.bind(this)), c.prev().removeClass(\"before-expanded\"), c.next().removeClass(\"after-expanded\"), this.trigger(\"uiTweetDismissed\", d), cookie(this.attr.promotedTweetStoreCookieName, null);\n        }, this.removeTweet = function(a) {\n            a.remove();\n        }, this.removeAllDismissed = function() {\n            this.select(\"dismissedTweetSelector\").JSBNG__stop(), this.removeTweet(this.select(\"dismissedTweetSelector\"));\n        }, this.toggleDropdownDisplay = function(a) {\n            $(a.target).closest(this.attr.moreOptionsSelector).toggleClass(\"open\"), a.preventDefault(), a.stopPropagation();\n        }, this.closeAllDropdownSelectors = function(a) {\n            $(\"div.tweet div.dropdown.open\").removeClass(\"open\");\n        }, this.after(\"initialize\", function(a) {\n            this.JSBNG__on(\"click\", {\n                moreOptionsSelector: this.toggleDropdownDisplay,\n                embedTweetSelector: this.handleAction(\"\", \"uiNeedsEmbedTweetDialog\")\n            }), this.JSBNG__on(this.attr.tweetItemSelector, \"mouseleave\", this.closeAllDropdownSelectors);\n            if (!this.attr.loggedIn) {\n                this.JSBNG__on(\"click\", {\n                    anyLoggedInActionSelector: this.handleLoggedOutActionClick\n                });\n                return;\n            }\n        ;\n        ;\n            this.JSBNG__on(JSBNG__document, \"dataDidDeleteTweet\", this.handleTweetDelete), this.JSBNG__on(JSBNG__document, \"dataDidRetweet dataDidUnretweet\", this.toggleRetweet), this.JSBNG__on(JSBNG__document, \"uiDidFavoriteTweet dataFailedToUnfavoriteTweet\", this.handleTransition(\"addClass\", \"favorited\")), this.JSBNG__on(JSBNG__document, \"uiDidUnfavoriteTweet dataFailedToFavoriteTweet\", this.handleTransition(\"removeClass\", \"favorited\")), this.JSBNG__on(JSBNG__document, \"uiDidRetweet dataFailedToUnretweet\", this.handleTransition(\"addClass\", \"retweeted\")), this.JSBNG__on(JSBNG__document, \"uiDidUnretweet dataFailedToRetweet\", this.handleTransition(\"removeClass\", \"retweeted\")), this.JSBNG__on(\"click\", {\n                favoriteSelector: this.handleAction(\"favorited\", \"uiDidUnfavoriteTweet\", \"uiDidFavoriteTweet\"),\n                retweetSelector: this.handleAction(\"retweeted\", \"uiDidUnretweet\", \"uiOpenRetweetDialog\"),\n                replySelector: this.handleReply,\n                deleteSelector: this.handleAction(\"\", \"uiOpenDeleteDialog\"),\n                permalinkSelector: this.handlePermalinkClick,\n                dismissTweetSelector: this.dismissTweet,\n                shareViaEmailSelector: this.handleAction(\"\", \"uiNeedsShareViaEmailDialog\")\n            }), this.JSBNG__on(JSBNG__document, \"uiDidFavoriteTweetToggle\", this.handleAction(\"favorited\", \"uiDidUnfavoriteTweet\", \"uiDidFavoriteTweet\", !0)), this.JSBNG__on(JSBNG__document, \"uiDidRetweetTweetToggle\", this.handleAction(\"retweeted\", \"uiDidUnretweet\", \"uiOpenRetweetDialog\", !0)), this.JSBNG__on(JSBNG__document, \"uiDidReplyTweetToggle\", this.handleReply), this.JSBNG__on(JSBNG__document, \"uiBeforePageChanged\", this.removeAllDismissed);\n        });\n    };\n;\n    var compose = require(\"core/compose\"), withInteractionData = require(\"app/ui/with_interaction_data\"), tweetHelper = require(\"app/utils/tweet_helper\"), cookie = require(\"app/utils/cookie\");\n    module.exports = withTweetActions;\n});\ndefine(\"app/ui/gallery/gallery\", [\"module\",\"require\",\"exports\",\"core/component\",\"core/utils\",\"core/i18n\",\"app/ui/media/with_legacy_media\",\"app/utils/image/image_loader\",\"app/ui/with_scrollbar_width\",\"app/ui/with_item_actions\",\"app/ui/with_tweet_actions\",\"app/ui/media/with_flag_action\",], function(module, require, exports) {\n    function gallery() {\n        this.tweetHtml = {\n        }, this.defaultAttrs({\n            profileUser: !1,\n            defaultGalleryTitle: _(\"Media Gallery\"),\n            mediaSelector: \".media-thumbnail\",\n            galleryMediaSelector: \".gallery-media\",\n            galleryTweetSelector: \".gallery-tweet\",\n            closeSelector: \".js-close, .gallery-close-target\",\n            gridSelector: \".grid-action\",\n            gallerySelector: \".swift-media-gallery\",\n            galleryTitleSelector: \".modal-title\",\n            imageSelector: \".media-image\",\n            navSelector: \".gallery-nav\",\n            prevSelector: \".nav-prev\",\n            nextSelector: \".nav-next\",\n            itemType: \"tweet\"\n        }), this.resetMinSize = function() {\n            this.galW = MINWIDTH, this.galH = MINHEIGHT;\n            var a = this.select(\"gallerySelector\");\n            a.width(this.galW), a.height(this.galH);\n        }, this.isOpen = function() {\n            return this.$node.is(\":visible\");\n        }, this.open = function(a, b) {\n            this.calculateScrollbarWidth(), this.fromGrid = ((b && !!b.fromGrid)), this.title = ((((b && b.title)) ? b.title : this.attr.defaultGalleryTitle)), this.select(\"galleryTitleSelector\").text(this.title), ((((((b && b.showGrid)) && b.profileUser)) ? (this.select(\"gallerySelector\").removeClass(\"no-grid\"), this.select(\"gridSelector\").attr(\"href\", ((((\"/\" + b.profileUser.screen_name)) + \"/media/grid\"))), this.select(\"gridSelector\").JSBNG__find(\".visuallyhidden\").text(b.profileUser.JSBNG__name), this.select(\"gridSelector\").addClass(\"js-nav\")) : (this.select(\"gallerySelector\").addClass(\"no-grid\"), this.select(\"gridSelector\").removeClass(\"js-nav\"))));\n            var c = $(a.target).closest(this.attr.mediaSelector);\n            if (((this.isOpen() || ((c.length == 0))))) {\n                return;\n            }\n        ;\n        ;\n            this.resetMinSize(), this.render(c), $(\"body\").addClass(\"gallery-enabled\"), this.select(\"gallerySelector\").addClass(\"show-controls\"), this.JSBNG__on(window, \"resize\", utils.debounce(this.resizeCurrent.bind(this), 50)), this.JSBNG__on(\"mousemove\", function() {\n                this.select(\"gallerySelector\").removeClass(\"show-controls\");\n            }.bind(this)), this.trigger(\"uiGalleryOpened\");\n        }, this.handleClose = function(a) {\n            if (!this.isOpen()) {\n                return;\n            }\n        ;\n        ;\n            ((this.fromGrid ? this.returnToGrid(!0) : this.closeGallery()));\n        }, this.returnToGrid = function(a) {\n            this.trigger(this.$current, \"uiOpenGrid\", {\n                title: this.title,\n                fromGallery: a\n            }), this.closeGallery();\n        }, this.closeGallery = function() {\n            $(\"body\").removeClass(\"gallery-enabled\"), this.select(\"galleryMediaSelector\").empty(), this.hideNav(), this.enableNav(!1, !1), this.off(window, \"resize\"), this.off(\"mousemove\"), this.trigger(\"uiGalleryClosed\");\n        }, this.render = function(a) {\n            this.clearTweet(), this.$current = a, this.renderNav(), this.trigger(a, \"uiGalleryMediaLoad\"), this.resolveMedia(a, this.renderMedia.bind(this), \"large\");\n        }, this.renderNav = function() {\n            if (!this.$current) {\n                return;\n            }\n        ;\n        ;\n            var a = this.$current.prevAll(this.attr.mediaSelector), b = this.$current.nextAll(this.attr.mediaSelector), c = ((b.length > 0)), d = ((a.length > 0));\n            this.enableNav(c, d), ((((c || d)) ? this.showNav() : this.hideNav()));\n        }, this.preloadNeighbors = function(a) {\n            this.preloadRecursive(a, \"next\", 2), this.preloadRecursive(a, \"prev\", 2);\n        }, this.clearTweet = function() {\n            this.select(\"galleryTweetSelector\").empty();\n        }, this.getTweet = function(a) {\n            if (!a) {\n                return;\n            }\n        ;\n        ;\n            ((this.tweetHtml[a] ? this.renderTweet(a, this.tweetHtml[a]) : this.trigger(\"uiGetTweet\", {\n                id: a\n            })));\n        }, this.gotTweet = function(a, b) {\n            ((((b.id && b.tweet_html)) && (this.tweetHtml[b.id] = b.tweet_html, this.renderTweet(b.id, b.tweet_html))));\n        }, this.renderTweet = function(a, b) {\n            ((((this.$current && ((this.getTweetId(this.$current) == a)))) && this.select(\"galleryTweetSelector\").empty().append(b)));\n        }, this.getTweetId = function(a) {\n            return ((a.attr(\"data-status-id\") ? a.attr(\"data-status-id\") : a.closest(\"[data-tweet-id]\").attr(\"data-tweet-id\")));\n        }, this.preloadRecursive = function(a, b, c) {\n            if (((c == 0))) {\n                return;\n            }\n        ;\n        ;\n            var d = a[b](this.attr.mediaSelector);\n            if (((!d || !d.length))) {\n                return;\n            }\n        ;\n        ;\n            d.attr(\"data-preloading\", !0), this.resolveMedia(d, function(a, d) {\n                if (!a) {\n                    d.remove(), this.preloadRecursive(d, b, c);\n                    return;\n                }\n            ;\n            ;\n                var a = function(a) {\n                    d.attr(\"data-preloaded\", !0), this.getTweet(this.getTweetId(d)), this.preloadRecursive(d, b, --c);\n                }.bind(this), e = function() {\n                    d.remove(), this.preloadRecursive(d, b, c);\n                }.bind(this);\n                imageLoader.load(d.attr(\"data-resolved-url-large\"), a, e);\n            }.bind(this), \"large\");\n        }, this.renderMedia = function(a, b) {\n            ((a ? (((b.attr(\"data-source-url\") ? this.loadVideo(b) : this.loadImage(b))), this.preloadNeighbors(b)) : (b.remove(), this.next())));\n        }, this.loadImage = function(a) {\n            var b = $(\"\\u003Cimg class=\\\"media-image\\\"/\\u003E\");\n            b.JSBNG__on(\"load\", function(c) {\n                a.attr(\"loaded\", !0), this.select(\"galleryMediaSelector\").empty().append(b), b.attr({\n                    \"data-height\": b[0].height,\n                    \"data-width\": b[0].width\n                }), this.resizeMedia(b), this.$current = a, this.getTweet(this.getTweetId(a)), this.trigger(\"uiGalleryMediaLoaded\", {\n                    url: b.attr(\"src\"),\n                    id: a.attr(\"data-status-id\")\n                });\n            }.bind(this)), b.JSBNG__on(\"error\", function(c) {\n                this.trigger(\"uiGalleryMediaFailed\", {\n                    url: b.attr(\"src\"),\n                    id: a.attr(\"data-status-id\")\n                }), a.remove(), this.next();\n            }.bind(this)), b.attr(\"src\", a.attr(\"data-resolved-url-large\")), this.select(\"gallerySelector\").removeClass(\"video\");\n        }, this.loadVideo = function(a) {\n            var b = $(\"\\u003Ciframe\\u003E\");\n            b.height(((a.attr(\"data-height\") * 2))).width(((a.attr(\"data-width\") * 2))).attr(\"data-height\", ((a.attr(\"data-height\") * 2))).attr(\"data-width\", ((a.attr(\"data-width\") * 2))).attr(\"src\", a.attr(\"data-source-url\")), a.attr(\"loaded\", !0), this.resizeMedia(b, !0), this.select(\"galleryMediaSelector\").empty().append(b), this.$current = a, this.getTweet(a.attr(\"data-status-id\")), this.select(\"gallerySelector\").addClass(\"video\");\n        }, this.resizeCurrent = function() {\n            var a = this.select(\"imageSelector\");\n            ((a.length && this.resizeMedia(a)));\n        }, this.resizeMedia = function(a, b) {\n            var c = (($(window).height() - ((2 * PADDING)))), d = (($(window).width() - ((2 * PADDING)))), e = this.galH, f = this.galW, g = ((c - HEADERHEIGHT)), h = d, i = parseInt(a.height()), j = parseInt(a.width()), k = this.select(\"gallerySelector\");\n            ((b && (j += 130, i += 100))), ((((i > g)) && (a.height(g), a.width(((j * ((g / i))))), j *= ((g / i)), i = g))), ((((j > h)) && (a.width(h), a.height(((i * ((h / j))))), i *= ((h / j)), j = h))), ((((j > this.galW)) && (this.galW = j, k.width(this.galW)))), ((((((i + HEADERHEIGHT)) > this.galH)) ? (this.galH = ((i + HEADERHEIGHT)), k.height(this.galH), a.css(\"margin-top\", 0), a.addClass(\"bottom-corners\")) : (a.css(\"margin-top\", ((((((this.galH - HEADERHEIGHT)) - i)) / 2))), a.removeClass(\"bottom-corners\"))));\n        }, this.prev = function() {\n            this.gotoMedia(\"prev\"), this.trigger(\"uiGalleryNavigatePrev\");\n        }, this.next = function() {\n            this.gotoMedia(\"next\"), this.trigger(\"uiGalleryNavigateNext\");\n        }, this.gotoMedia = function(a) {\n            var b = this.$current[a](this.attr.mediaSelector);\n            ((b.length && this.render(b)));\n        }, this.showNav = function() {\n            this.select(\"navSelector\").show();\n        }, this.hideNav = function() {\n            this.select(\"navSelector\").hide();\n        }, this.enableNav = function(a, b) {\n            ((a ? this.select(\"nextSelector\").addClass(\"enabled\") : this.select(\"nextSelector\").removeClass(\"enabled\"))), ((b ? this.select(\"prevSelector\").addClass(\"enabled\") : this.select(\"prevSelector\").removeClass(\"enabled\")));\n        }, this.throttle = function(a, b, c) {\n            var d = !1;\n            return function() {\n                ((d || (a.apply(c, arguments), d = !0, JSBNG__setTimeout(function() {\n                    d = !1;\n                }, b))));\n            };\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"dataGotMoreMediaTimelineItems\", this.renderNav), this.JSBNG__on(JSBNG__document, \"uiOpenGallery\", this.open), this.JSBNG__on(JSBNG__document, \"uiCloseGallery\", this.closeGallery), this.JSBNG__on(JSBNG__document, \"uiShortcutEsc\", this.handleClose), this.JSBNG__on(window, \"popstate\", this.closeGallery), this.JSBNG__on(JSBNG__document, \"uiShortcutLeft\", this.throttle(this.prev, 200, this)), this.JSBNG__on(JSBNG__document, \"uiShortcutRight\", this.throttle(this.next, 200, this)), this.JSBNG__on(JSBNG__document, \"dataGotTweet\", this.gotTweet), this.JSBNG__on(\"click\", {\n                prevSelector: this.prev,\n                nextSelector: this.next,\n                closeSelector: this.handleClose,\n                gridSelector: this.closeGallery\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), utils = require(\"core/utils\"), _ = require(\"core/i18n\"), withLegacyMedia = require(\"app/ui/media/with_legacy_media\"), imageLoader = require(\"app/utils/image/image_loader\"), withScrollbarWidth = require(\"app/ui/with_scrollbar_width\"), withItemActions = require(\"app/ui/with_item_actions\"), withTweetActions = require(\"app/ui/with_tweet_actions\"), withFlagAction = require(\"app/ui/media/with_flag_action\"), Gallery = defineComponent(gallery, withLegacyMedia, withItemActions, withTweetActions, withFlagAction, withScrollbarWidth), MINHEIGHT = 300, MINWIDTH = 520, PADDING = 30, HEADERHEIGHT = 38;\n    module.exports = Gallery;\n});\ndefine(\"app/data/gallery_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function galleryScribe() {\n        this.scribeGalleryOpened = function(a, b) {\n            this.scribe({\n                element: \"gallery\",\n                action: \"open\"\n            }, b);\n        }, this.scribeGalleryClosed = function(a, b) {\n            this.scribe({\n                element: \"gallery\",\n                action: \"close\"\n            }, b);\n        }, this.scribeGalleryMediaLoaded = function(a, b) {\n            var c = {\n                url: b.url,\n                item_ids: [b.id,]\n            };\n            this.scribe({\n                element: \"photo\",\n                action: \"impression\"\n            }, b, c);\n        }, this.scribeGalleryMediaFailed = function(a, b) {\n            var c = {\n                url: b.url,\n                item_ids: [b.id,]\n            };\n            this.scribe({\n                element: \"photo\",\n                action: \"error\"\n            }, b, c);\n        }, this.scribeGalleryNavigateNext = function(a, b) {\n            this.scribe({\n                element: \"next\",\n                action: \"click\"\n            }, b);\n        }, this.scribeGalleryNavigatePrev = function(a, b) {\n            this.scribe({\n                element: \"prev\",\n                action: \"click\"\n            }, b);\n        }, this.scribeGridPaged = function(a, b) {\n            this.scribe({\n                element: \"grid\",\n                action: \"page\"\n            }, b);\n        }, this.scribeGridOpened = function(a, b) {\n            this.scribe({\n                element: \"grid\",\n                action: \"impression\"\n            }, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiGalleryOpened\", this.scribeGalleryOpened), this.JSBNG__on(JSBNG__document, \"uiGalleryClosed\", this.scribeGalleryClosed), this.JSBNG__on(JSBNG__document, \"uiGalleryMediaLoaded\", this.scribeGalleryMediaLoaded), this.JSBNG__on(JSBNG__document, \"uiGalleryMediaFailed\", this.scribeGalleryMediaFailed), this.JSBNG__on(JSBNG__document, \"uiGalleryNavigateNext\", this.scribeGalleryNavigateNext), this.JSBNG__on(JSBNG__document, \"uiGalleryNavigatePrev\", this.scribeGalleryNavigatePrev), this.JSBNG__on(JSBNG__document, \"uiGridPaged\", this.scribeGridPaged), this.JSBNG__on(JSBNG__document, \"uiGridOpened\", this.scribeGridOpened);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(galleryScribe, withScribe);\n});\ndefine(\"app/data/share_via_email_dialog_data\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",], function(module, require, exports) {\n    function shareViaEmailDialogData() {\n        this.getDialogData = function(a, b) {\n            var c = function(a) {\n                this.trigger(\"dataShareViaEmailDialogSuccess\", {\n                    tweets: a.items_html,\n                    JSBNG__name: b.JSBNG__name\n                });\n            }, d = function() {\n                this.trigger(\"dataShareViaEmailDialogError\");\n            }, e = b.screenName, f = b.tweetId;\n            this.get({\n                url: ((((((\"/i/\" + e)) + \"/conversation/\")) + f)),\n                success: c.bind(this),\n                error: d.bind(this)\n            });\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsShareViaDialogData\", this.getDialogData);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), ShareViaEmailDialogData = defineComponent(shareViaEmailDialogData, withData);\n    module.exports = ShareViaEmailDialogData;\n});\ndefine(\"app/ui/dialogs/share_via_email_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/data/with_data\",\"app/ui/dialogs/with_modal_tweet\",\"app/ui/forms/input_with_placeholder\",\"app/data/share_via_email_dialog_data\",\"core/i18n\",\"core/utils\",], function(module, require, exports) {\n    function shareViaEmailDialog() {\n        this.defaultAttrs({\n            contentSelector: \".share-via-email-form .js-share-tweet-container\",\n            buttonSelector: \".share-via-email-form .primary-btn\",\n            emailSelector: \".share-via-email-form .js-share-tweet-emails\",\n            commentSelector: \".share-via-email-form .js-share-comment\",\n            replyToUserSelector: \".share-via-email-form .js-reply-to-user\",\n            tweetSelector: \".share-via-email-form .tweet\",\n            placeholdingInputSelector: \".share-via-email-form .share-tweet-to .placeholding-input\",\n            placeholdingTextareaSelector: \".share-via-email-form .comment-box .placeholding-input\",\n            placeholdingSelector: \".share-via-email-form .placeholding-input\",\n            socialProofSelector: \".share-via-email-form .comment-box .social-proof\",\n            modalTitleSelector: \".modal-title\"\n        }), this.JSBNG__openDialog = function(a, b) {\n            this.attr.sourceEventData = b, this.addTweet($(a.target).clone().removeClass(\"retweeted favorited\")), this.select(\"emailSelector\").val(\"\"), this.select(\"commentSelector\").val(\"\"), this.select(\"socialProofSelector\").html(\"\"), this.select(\"placeholdingSelector\").removeClass(\"hasome\"), this.open();\n            var c = this.select(\"modalTitleSelector\").attr(\"data-experiment-bucket\");\n            ((((c == \"experiment\")) && this.trigger(\"uiNeedsShareViaDialogData\", {\n                tweetId: $(a.target).attr(\"data-tweet-id\"),\n                screenName: $(a.target).attr(\"data-screen-name\"),\n                JSBNG__name: $(a.target).attr(\"data-name\")\n            }))), this.trigger(\"uiShareViaEmailDialogOpened\", utils.merge(b, {\n                scribeContext: {\n                    component: \"share_via_email_dialog\"\n                }\n            }));\n        }, this.fillDialog = function(a, b) {\n            var c = $(b.tweets).JSBNG__find(\".tweet\"), d = b.JSBNG__name;\n            this.select(\"socialProofSelector\").html(\"\");\n            var e = [];\n            $.each(c, function(a, b) {\n                e.push($(b).attr(\"data-name\"));\n            }), e = jQuery.unique(e), e = jQuery.grep(e, function(a) {\n                return ((a != d));\n            });\n            var f = $(c[0]).attr(\"data-name\"), g = $(c[0]).attr(\"data-protected\"), h = $(c[((c.length - 1))]).attr(\"data-name\"), i = $(c[((c.length - 1))]).attr(\"data-protected\"), j = \"\", k = ((e.length - 2)), l = {\n                inReplyToTweetAuthor: h,\n                rootTweetAuthor: f,\n                othersLeft: k\n            };\n            ((((((f != d)) && !g)) ? ((((((f != h)) && !i)) ? ((((e.length > 3)) ? j = _(\"In reply to {{rootTweetAuthor}}, {{inReplyToTweetAuthor}} and {{othersLeft}} others\", l) : ((((e.length > 0)) && (j = _(\"In reply to {{rootTweetAuthor}} and {{inReplyToTweetAuthor}}\", l)))))) : ((i || ((((e.length > 3)) ? j = _(\"In reply to  {{rootTweetAuthor}} and {{othersLeft}} others)\", l) : ((((e.length > 0)) && (j = _(\"In reply to {{rootTweetAuthor}}\", l)))))))))) : ((((((h != d)) && !i)) && ((((e.length > 3)) ? j = _(\"In reply to {{inReplyToTweetAuthor}} and {{othersLeft}} others\", l) : ((((e.length > 0)) && (j = _(\"In reply to {{inReplyToTweetAuthor}}\", l)))))))))), this.select(\"socialProofSelector\").html(j);\n        }, this.submitForm = function(a) {\n            var b = {\n                id: this.select(\"tweetSelector\").attr(\"data-tweet-id\"),\n                emails: this.select(\"emailSelector\").val(),\n                comment: this.select(\"commentSelector\").val(),\n                reply_to_user: this.select(\"replyToUserSelector\").is(\":checked\")\n            };\n            this.post({\n                url: \"/i/tweet/share_via_email\",\n                data: b,\n                eventData: null,\n                success: \"dataShareViaEmailSuccess\",\n                error: \"dataShareViaEmailError\"\n            }), this.trigger(\"uiCloseDialog\"), a.preventDefault();\n        }, this.shareSuccess = function(a, b) {\n            this.trigger(\"uiShowMessage\", {\n                message: b.message\n            }), this.trigger(\"uiDidShareViaEmailSuccess\", this.attr.sourceEventData);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(JSBNG__document, \"uiNeedsShareViaEmailDialog\", this.JSBNG__openDialog), this.JSBNG__on(JSBNG__document, \"dataShareViaEmailDialogSuccess\", this.fillDialog), this.JSBNG__on(JSBNG__document, \"dataShareViaEmailSuccess\", this.shareSuccess), this.JSBNG__on(\"click\", {\n                buttonSelector: this.submitForm\n            }), InputWithPlaceholder.attachTo(this.attr.placeholdingInputSelector, {\n                hidePlaceholderClassName: \"hasome\",\n                placeholder: \".placeholder\",\n                elementType: \"input\",\n                noTeardown: !0\n            }), InputWithPlaceholder.attachTo(this.attr.placeholdingTextareaSelector, {\n                hidePlaceholderClassName: \"hasome\",\n                placeholder: \".placeholder\",\n                elementType: \"textarea\",\n                noTeardown: !0\n            }), DialogData.attachTo(this.$node, {\n                noTeardown: !0\n            });\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDialog = require(\"app/ui/with_dialog\"), withPosition = require(\"app/ui/with_position\"), withData = require(\"app/data/with_data\"), withModalTweet = require(\"app/ui/dialogs/with_modal_tweet\"), InputWithPlaceholder = require(\"app/ui/forms/input_with_placeholder\"), DialogData = require(\"app/data/share_via_email_dialog_data\"), _ = require(\"core/i18n\"), utils = require(\"core/utils\"), ShareViaEmailDialog = defineComponent(shareViaEmailDialog, withDialog, withPosition, withData, withModalTweet);\n    module.exports = ShareViaEmailDialog;\n});\ndefine(\"app/data/with_widgets\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function withWidgets() {\n        this.widgetsAreLoaded = function() {\n            return ((!!this.widgets && !!this.widgets.init));\n        }, this.widgetsProvidesNewEmbed = function() {\n            return ((((!!this.widgetsAreLoaded() && !!this.widgets.widgets)) && ((typeof this.widgets.widgets.createTweetEmbed == \"function\"))));\n        }, this.getWidgets = function() {\n            ((window.twttr || this.asyncWidgetsLoader())), this.widgets = window.twttr, window.twttr.ready(this._widgetsReady.bind(this));\n        }, this._widgetsReady = function(_) {\n            ((this.widgetsReady && this.widgetsReady()));\n        }, this.asyncWidgetsLoader = function() {\n            window.twttr = function(a, b, c) {\n                var d, e, f = a.getElementsByTagName(b)[0];\n                if (a.getElementById(c)) {\n                    return;\n                }\n            ;\n            ;\n                return e = a.createElement(b), e.id = c, e.src = \"//platform.twitter.com/widgets.js\", f.parentNode.insertBefore(e, f), ((window.twttr || (d = {\n                    _e: [],\n                    ready: function(a) {\n                        d._e.push(a);\n                    }\n                })));\n            }(JSBNG__document, \"script\", \"twitter-wjs\");\n        };\n    };\n;\n    var defineComponent = require(\"core/component\"), WithWidgets = defineComponent(withWidgets);\n    module.exports = withWidgets;\n});\ndefine(\"app/ui/dialogs/embed_tweet\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_position\",\"app/ui/with_dialog\",\"app/data/with_card_metadata\",\"app/data/with_widgets\",], function(module, require, exports) {\n    function embedTweetDialog() {\n        this.defaultAttrs({\n            dialogSelector: \"#embed-tweet-dialog\",\n            dialogContentSelector: \"#embed-tweet-dialog .modal-content\",\n            previewContainerSelector: \".embed-preview\",\n            embedFrameSelector: \".embed-preview iframe\",\n            visibleEmbedFrameSelector: \".embed-preview iframe:visible\",\n            embedCodeDestinationSelector: \".embed-destination\",\n            triggerSelector: \".js-embed-tweet\",\n            overlaySelector: \".embed-overlay\",\n            spinnerOverlaySelector: \".embed-overlay-spinner\",\n            errorOverlaySelector: \".embed-overlay-error\",\n            tryAgainSelector: \".embed-overlay-error a\",\n            includeParentTweetContainerSelector: \".embed-include-parent-tweet\",\n            includeParentTweetSelector: \".include-parent-tweet\",\n            includeCardContainerSelector: \".embed-include-card\",\n            includeCardSelector: \".include-card\",\n            embedWidth: \"469px\",\n            JSBNG__top: \"90px\"\n        }), this.cacheKeyForOptions = function(a) {\n            return ((JSON.stringify(a.data) + a.tweetId));\n        }, this.cacheKeyChanged = function(a) {\n            var b = this.cacheKeyForOptions(a);\n            return ((b != this.cacheKeyForOptions(this.getOptions())));\n        }, this.didReceiveEmbedCode = function(a, b) {\n            if (this.cacheKeyChanged(b.options)) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"overlaySelector\").hide(), this.$embedCodeDestination.val(b.data.html).JSBNG__focus(), this.selectEmbedCode();\n        }, this.retryEmbedCode = function(a, b) {\n            if (this.cacheKeyChanged(b)) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"overlaySelector\").hide(), this.select(\"spinnerOverlaySelector\").show(), this.trigger(\"uiOembedError\", this.tweetData);\n        }, this.failedToReceiveEmbedCode = function(a, b) {\n            if (this.cacheKeyChanged(b)) {\n                return;\n            }\n        ;\n        ;\n            this.select(\"overlaySelector\").hide(), this.select(\"embedCodeDestinationSelector\").hide(), this.select(\"errorOverlaySelector\").show(), this.clearOembed();\n        }, this.updateEmbedCode = function() {\n            this.select(\"embedCodeDestinationSelector\").show(), this.select(\"overlaySelector\").hide(), this.trigger(\"uiNeedsOembed\", this.getOptions());\n        }, this.requestTweetEmbed = function() {\n            if (!this.widgetsProvidesNewEmbed()) {\n                return;\n            }\n        ;\n        ;\n            var a = this.getOptions(), b = this.cacheKeyForOptions(a);\n            if (this.cachedTweetEmbeds[b]) {\n                this.displayCachedTweetEmbed(b);\n                return;\n            }\n        ;\n        ;\n            this.clearTweetEmbed(), this.widgets.widgets.createTweet(this.tweetId(), this.select(\"previewContainerSelector\")[0], this.receivedTweetEmbed.bind(this, b), {\n                width: this.attr.embedWidth,\n                conversation: ((a.data.hide_thread ? \"none\" : \"all\")),\n                cards: ((a.data.hide_media ? \"hidden\" : \"shown\"))\n            });\n        }, this.clearTweetEmbed = function() {\n            var a = this.select(\"visibleEmbedFrameSelector\");\n            this.stopPlayer(), a.hide();\n        }, this.clearOembed = function() {\n            this.$embedCodeDestination.val(\"\");\n        }, this.tearDown = function() {\n            this.stopPlayer(), this.clearTweetEmbed(), this.clearOembed();\n        }, this.stopPlayer = function() {\n            var a = this.select(\"embedFrameSelector\");\n            a.each(function(a, b) {\n                var c = $(b.contentWindow.JSBNG__document), d = c.JSBNG__find(\"div.media iframe\")[0], e;\n                if (((((!d || !d.src)) || ((d.src == JSBNG__document.JSBNG__location.href))))) {\n                    return;\n                }\n            ;\n            ;\n                e = d.src, d.setAttribute(\"src\", \"\"), d.setAttribute(\"src\", e);\n            });\n        }, this.displayCachedTweetEmbed = function(a) {\n            this.clearTweetEmbed(), $(this.cachedTweetEmbeds[a]).show();\n        }, this.receivedTweetEmbed = function(a, b) {\n            ((b ? this.cachedTweetEmbeds[a] = b : this.trigger(\"uiEmbedRequestFailed\")));\n        }, this.embedCodeCopied = function(a) {\n            this.trigger(\"uiUserCopiedEmbedCode\");\n        }, this.includeParentTweet = function() {\n            return ((this.$includeParentTweet.attr(\"checked\") == \"checked\"));\n        }, this.showCard = function() {\n            return ((this.$includeCard.attr(\"checked\") == \"checked\"));\n        }, this.getOptions = function() {\n            return {\n                data: {\n                    lang: this.lang,\n                    hide_thread: !this.includeParentTweet(),\n                    hide_media: !this.showCard()\n                },\n                retry: !0,\n                tweetId: this.tweetId(),\n                screenName: this.screenName()\n            };\n        }, this.selectEmbedCode = function() {\n            this.$embedCode.select();\n        }, this.setUpDialog = function(a, b) {\n            this.position(), this.eventData = a, this.tweetData = b, this.toggleIncludeParent(), this.toggleShowCard(), this.resetIncludeParent(), this.resetShowCard(), this.updateEmbedCode(), this.requestTweetEmbed(), this.open(), this.fixPosition();\n        }, this.fixPosition = function() {\n            this.$dialog.css({\n                position: \"relative\",\n                JSBNG__top: this.attr.JSBNG__top\n            });\n        }, this.resetIncludeParent = function() {\n            var a = this.cacheKeyForOptions(this.getOptions());\n            if (this.cachedTweetEmbeds[a]) {\n                return;\n            }\n        ;\n        ;\n            this.$includeParentTweet.attr(\"checked\", \"CHECKED\");\n        }, this.resetShowCard = function() {\n            var a = this.cacheKeyForOptions(this.getOptions());\n            if (this.cachedTweetEmbeds[a]) {\n                return;\n            }\n        ;\n        ;\n            this.$includeCard.attr(\"checked\", \"CHECKED\");\n        }, this.toggleIncludeParent = function() {\n            ((this.tweetHasParent() ? this.$includeParentCheckboxContainer.show() : this.$includeParentCheckboxContainer.hide()));\n        }, this.toggleShowCard = function() {\n            ((this.tweetHasCard() ? this.$includeCardCheckboxContainer.show() : this.$includeCardCheckboxContainer.hide()));\n        }, this.tweetId = function() {\n            return this.tweetData.tweetId;\n        }, this.tweetHasParent = function() {\n            return this.tweetData.hasParentTweet;\n        }, this.tweetHasCard = function() {\n            return this.getCardDataFromTweet($(this.eventData.target)).tweetHasCard;\n        }, this.screenName = function() {\n            return this.tweetData.screenName;\n        }, this.widgetsReady = function() {\n            ((((this.$dialogContainer && this.isOpen())) && this.requestTweetEmbed()));\n        }, this.onOptionChange = function() {\n            this.trigger(\"uiNeedsOembed\", this.getOptions()), this.requestTweetEmbed();\n        }, this.after(\"initialize\", function() {\n            this.getWidgets(), this.$includeParentTweet = this.select(\"includeParentTweetSelector\"), this.$embedCodeDestination = this.select(\"embedCodeDestinationSelector\"), this.$includeParentCheckboxContainer = this.select(\"includeParentTweetContainerSelector\"), this.$includeCard = this.select(\"includeCardSelector\"), this.$includeCardCheckboxContainer = this.select(\"includeCardContainerSelector\"), this.$embedCode = this.select(\"embedCodeDestinationSelector\"), this.JSBNG__on(JSBNG__document, \"uiNeedsEmbedTweetDialog\", this.setUpDialog), this.JSBNG__on(\"uiDialogCloseRequested\", this.tearDown), this.JSBNG__on(JSBNG__document, \"dataOembedSuccess\", this.didReceiveEmbedCode), this.JSBNG__on(JSBNG__document, \"dataOembedError\", this.failedToReceiveEmbedCode), this.JSBNG__on(JSBNG__document, \"dataOembedRetry\", this.retryEmbedCode), this.JSBNG__on(this.$embedCodeDestination, \"copy cut\", this.embedCodeCopied), this.JSBNG__on(this.$embedCode, \"click\", this.selectEmbedCode), this.JSBNG__on(\"click\", {\n                tryAgainSelector: this.updateEmbedCode\n            }), this.JSBNG__on(\"change\", {\n                includeParentTweetSelector: this.onOptionChange,\n                includeCardSelector: this.onOptionChange\n            }), this.lang = JSBNG__document.documentElement.getAttribute(\"lang\"), this.cachedTweetEmbeds = {\n            };\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withPosition = require(\"app/ui/with_position\"), withDialog = require(\"app/ui/with_dialog\"), withCardMetadata = require(\"app/data/with_card_metadata\"), withWidgets = require(\"app/data/with_widgets\"), EmbedTweetDialog = defineComponent(embedTweetDialog, withDialog, withPosition, withCardMetadata, withWidgets);\n    module.exports = EmbedTweetDialog;\n});\ndefine(\"app/data/embed_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",\"app/data/with_interaction_data_scribe\",\"core/utils\",], function(module, require, exports) {\n    function embedScribe() {\n        this.scribeOpen = function(a, b) {\n            this.scribeEmbedAction(\"open\", b);\n        }, this.scribeOembedError = function(a, b) {\n            this.scribeEmbedAction(\"request_failed\", b);\n        }, this.scribeEmbedCopy = function(a, b) {\n            this.scribeEmbedAction(\"copy\", b);\n        }, this.scribeEmbedError = function(a, b) {\n            this.scribeEmbedAction(\"embed_request_failed\");\n        }, this.scribeEmbedAction = function(a, b) {\n            this.scribeInteraction(a, utils.merge(b, {\n                scribeContext: {\n                    component: \"embed_tweet_dialog\"\n                }\n            }));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiEmbedRequestFailed\", this.scribeEmbedError), this.JSBNG__on(\"uiNeedsEmbedTweetDialog\", this.scribeOpen), this.JSBNG__on(\"uiOembedError\", this.scribeOembedError), this.JSBNG__on(\"uiUserCopiedEmbedCode\", this.scribeEmbedCopy);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\"), withInteractionScribe = require(\"app/data/with_interaction_data_scribe\"), utils = require(\"core/utils\");\n    module.exports = defineComponent(embedScribe, withScribe, withInteractionScribe);\n});\ndefine(\"app/data/oembed\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/data/user_info\",], function(module, require, exports) {\n    function OembedData() {\n        this.requestEmbedCode = function(a, b) {\n            var c = this.cacheKeyForOptions(b), d = this.cachedEmbedCodes[c], e = this.receivedEmbedCode.bind(this, b), f = this.failedToReceiveEmbedCode.bind(this, b);\n            if (d) {\n                this.receivedEmbedCode(b, d);\n                return;\n            }\n        ;\n        ;\n            if (this.useMacawSyndication()) {\n                this.get({\n                    dataType: \"jsonp\",\n                    url: this.embedCodeUrl(b.screenName, b.tweetId),\n                    data: {\n                        id: b.tweetId\n                    },\n                    eventData: {\n                    },\n                    success: e,\n                    error: f\n                });\n                return;\n            }\n        ;\n        ;\n            this.get({\n                url: this.embedCodeUrl(b.screenName, b.tweetId),\n                headers: {\n                    \"X-PHX\": 1\n                },\n                data: b.data,\n                eventData: {\n                },\n                success: e,\n                error: f\n            });\n        }, this.embedCodeUrl = function(a, b) {\n            return ((this.useMacawSyndication() ? \"//api.twitter.com/1/statuses/oembed.json\" : [\"/\",a,\"/oembed/\",b,\".json\",].join(\"\")));\n        }, this.receivedEmbedCode = function(a, b) {\n            var c = this.cacheKeyForOptions(a);\n            this.cachedEmbedCodes[c] = b, this.trigger(\"dataOembedSuccess\", {\n                options: a,\n                data: b\n            });\n        }, this.failedToReceiveEmbedCode = function(a) {\n            ((a.retry ? (a.retry = !1, this.trigger(\"dataOembedRetry\", a), this.requestEmbedCode({\n            }, a)) : this.trigger(\"dataOembedError\", a)));\n        }, this.cacheKeyForOptions = function(a) {\n            return ((JSON.stringify(a.data) + a.tweetId));\n        }, this.useMacawSyndication = function() {\n            return userInfo.getDecider(\"oembed_use_macaw_syndication\");\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiNeedsOembed\", this.requestEmbedCode), this.cachedEmbedCodes = {\n            };\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), userInfo = require(\"app/data/user_info\");\n    module.exports = defineComponent(OembedData, withData);\n});\ndefine(\"app/data/oembed_scribe\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_scribe\",], function(module, require, exports) {\n    function oembedScribe() {\n        this.scribeError = function(a, b) {\n            this.scribe({\n                component: \"oembed\",\n                action: \"request_failed\"\n            });\n        }, this.scribeRetry = function(a, b) {\n            this.scribe({\n                component: \"oembed\",\n                action: \"retry\"\n            });\n        }, this.scribeRequest = function(a, b) {\n            this.scribe({\n                component: \"oembed\",\n                action: \"request\"\n            }, b);\n        }, this.scribeSuccess = function(a, b) {\n            this.scribe({\n                component: \"oembed\",\n                action: \"success\"\n            }, b);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"dataOembedError\", this.scribeError), this.JSBNG__on(\"dataOembedRetry\", this.scribeRetry), this.JSBNG__on(\"dataOembedRequest\", this.scribeRequest), this.JSBNG__on(\"dataOembedSuccess\", this.scribeSuccess);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withScribe = require(\"app/data/with_scribe\");\n    module.exports = defineComponent(oembedScribe, withScribe);\n});\ndefine(\"app/ui/with_drag_events\", [\"module\",\"require\",\"exports\",\"app/utils/drag_drop_helper\",], function(module, require, exports) {\n    function withDragEvents() {\n        this.childHover = function(a) {\n            (($.contains(this.$node.get(0), a.target) && (a.stopImmediatePropagation(), this.inChild = ((a.type === \"dragenter\")))));\n        }, this.hover = function(a) {\n            a.preventDefault();\n            if (this.inChild) {\n                return !1;\n            }\n        ;\n        ;\n            this.trigger(((((a.type === \"dragenter\")) ? \"uiDragEnter\" : \"uiDragLeave\")));\n        }, this.finish = function(a) {\n            a.stopImmediatePropagation(), this.inChild = !1, this.trigger(\"uiDragLeave\");\n        }, this.preventDefault = function(a) {\n            return a.preventDefault(), !1;\n        }, this.detectDragEnd = function(a) {\n            ((this.detectingEnd || (this.detectingEnd = !0, $(JSBNG__document.body).one(\"mousemove\", this.dragEnd.bind(this)))));\n        }, this.dragEnd = function() {\n            this.detectingEnd = !1, this.trigger(\"uiDragEnd\");\n        }, this.outOfBounds = function(a) {\n            var b = a.originalEvent.pageX, c = a.originalEvent.pageY, d = JSBNG__document.body.clientWidth, e = JSBNG__document.body.clientHeight;\n            ((((((((((b <= 0)) || ((c <= 0)))) || ((c >= e)))) || ((b >= d)))) && this.dragEnd()));\n        }, this.after(\"initialize\", function() {\n            this.inChild = !1, this.JSBNG__on(JSBNG__document.body, \"dragenter dragover\", this.detectDragEnd), this.JSBNG__on(JSBNG__document.body, \"dragleave\", this.outOfBounds), this.JSBNG__on(\"dragenter dragleave\", dragDropHelper.onlyHandleEventsWithFiles(this.hover)), this.JSBNG__on(\"dragover drop\", dragDropHelper.onlyHandleEventsWithFiles(this.preventDefault)), this.JSBNG__on(\"dragenter dragleave\", dragDropHelper.onlyHandleEventsWithFiles(this.childHover)), this.JSBNG__on(JSBNG__document, \"uiDragEnd drop\", this.finish);\n        });\n    };\n;\n    module.exports = withDragEvents;\n    var dragDropHelper = require(\"app/utils/drag_drop_helper\");\n});\ndefine(\"app/ui/drag_state\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_drag_events\",], function(module, require, exports) {\n    function dragState() {\n        this.defaultAttrs({\n            draggingClass: \"currently-dragging\",\n            supportsDraggingClass: \"supports-drag-and-drop\"\n        }), this.dragEnter = function() {\n            this.$node.addClass(this.attr.draggingClass);\n        }, this.dragLeave = function() {\n            this.$node.removeClass(this.attr.draggingClass);\n        }, this.addSupportsDraggingClass = function() {\n            this.$node.addClass(this.attr.supportsDraggingClass);\n        }, this.hasSupport = function() {\n            return ((((\"draggable\" in JSBNG__document.createElement(\"span\"))) && !$.browser.msie));\n        }, this.after(\"initialize\", function() {\n            ((this.hasSupport() && (this.addSupportsDraggingClass(), this.JSBNG__on(\"uiDragEnter\", this.dragEnter), this.JSBNG__on(\"uiDragLeave uiDrop\", this.dragLeave))));\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withDragEvents = require(\"app/ui/with_drag_events\");\n    module.exports = defineComponent(dragState, withDragEvents);\n});\ndefine(\"app/data/notification_listener\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/utils/setup_polling_with_backoff\",\"app/data/notifications\",], function(module, require, exports) {\n    function notificationListener() {\n        this.pollForNotifications = function(a, b) {\n            ((notifications.shouldPoll() && this.trigger(\"uiDMPoll\")));\n        }, this.resetDMs = function(a, b) {\n            notifications.resetDMState(a, b);\n        }, this.notifications = notifications, this.after(\"initialize\", function() {\n            notifications.init(this.attr), this.JSBNG__on(JSBNG__document, \"uiResetDMPoll\", this.resetDMs), this.JSBNG__on(JSBNG__document, \"uiPollForNotifications\", this.pollForNotifications), this.timer = setupPollingWithBackoff(\"uiPollForNotifications\");\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), setupPollingWithBackoff = require(\"app/utils/setup_polling_with_backoff\"), notifications = require(\"app/data/notifications\"), NotificationListener = defineComponent(notificationListener);\n    module.exports = NotificationListener;\n});\ndefine(\"app/data/dm_poll\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/with_data\",\"app/data/with_auth_token\",\"app/data/notifications\",], function(module, require, exports) {\n    function dmPoll() {\n        this.defaultAttrs({\n            noShowError: !0\n        }), this.dispatch = function(a) {\n            ((a && (notifications.updateNotificationState(a.note), this.trigger(\"dataNotificationsReceived\", a.note))));\n        }, this.makeRequest = function(a, b, c) {\n            this.get({\n                url: \"/messages\",\n                data: c,\n                eventData: b,\n                success: this.dispatch.bind(this),\n                error: \"dataDMError\"\n            });\n        }, this.requestConversationList = function(a, b) {\n            var c = {\n                notifications: \"true\"\n            };\n            notifications.addDMData(c), this.makeRequest(a, b, c);\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiDMPoll\", this.requestConversationList);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), withData = require(\"app/data/with_data\"), withAuthToken = require(\"app/data/with_auth_token\"), notifications = require(\"app/data/notifications\"), DMPoll = defineComponent(dmPoll, withData, withAuthToken);\n    module.exports = DMPoll;\n});\ndefine(\"app/boot/app\", [\"module\",\"require\",\"exports\",\"app/boot/common\",\"app/boot/top_bar\",\"app/ui/keyboard_shortcuts\",\"app/ui/dialogs/keyboard_shortcuts_dialog\",\"app/ui/dialogs/retweet_dialog\",\"app/ui/dialogs/delete_tweet_dialog\",\"app/ui/dialogs/block_user_dialog\",\"app/ui/dialogs/confirm_dialog\",\"app/ui/dialogs/confirm_email_dialog\",\"app/ui/dialogs/list_membership_dialog\",\"app/ui/dialogs/list_operations_dialog\",\"app/boot/direct_messages\",\"app/boot/profile_popup\",\"app/data/typeahead/typeahead\",\"app/data/typeahead_scribe\",\"app/ui/dialogs/goto_user_dialog\",\"app/utils/setup_polling_with_backoff\",\"app/ui/page_title\",\"app/ui/navigation_links\",\"app/ui/feedback/feedback_dialog\",\"app/ui/feedback/feedback_report_link_handler\",\"app/data/feedback/feedback\",\"app/ui/search_query_source\",\"app/ui/banners/email_banner\",\"app/data/email_banner\",\"app/ui/gallery/gallery\",\"app/data/gallery_scribe\",\"app/ui/dialogs/share_via_email_dialog\",\"app/ui/dialogs/embed_tweet\",\"app/data/embed_scribe\",\"app/data/oembed\",\"app/data/oembed_scribe\",\"app/ui/drag_state\",\"app/data/notification_listener\",\"app/data/dm_poll\",], function(module, require, exports) {\n    var bootCommon = require(\"app/boot/common\"), topBar = require(\"app/boot/top_bar\"), KeyboardShortcuts = require(\"app/ui/keyboard_shortcuts\"), KeyboardShortcutsDialog = require(\"app/ui/dialogs/keyboard_shortcuts_dialog\"), RetweetDialog = require(\"app/ui/dialogs/retweet_dialog\"), DeleteTweetDialog = require(\"app/ui/dialogs/delete_tweet_dialog\"), BlockUserDialog = require(\"app/ui/dialogs/block_user_dialog\"), ConfirmDialog = require(\"app/ui/dialogs/confirm_dialog\"), ConfirmEmailDialog = require(\"app/ui/dialogs/confirm_email_dialog\"), ListMembershipDialog = require(\"app/ui/dialogs/list_membership_dialog\"), ListOperationsDialog = require(\"app/ui/dialogs/list_operations_dialog\"), directMessages = require(\"app/boot/direct_messages\"), profilePopup = require(\"app/boot/profile_popup\"), TypeaheadData = require(\"app/data/typeahead/typeahead\"), TypeaheadScribe = require(\"app/data/typeahead_scribe\"), GotoUserDialog = require(\"app/ui/dialogs/goto_user_dialog\"), setupPollingWithBackoff = require(\"app/utils/setup_polling_with_backoff\"), PageTitle = require(\"app/ui/page_title\"), NavigationLinks = require(\"app/ui/navigation_links\"), FeedbackDialog = require(\"app/ui/feedback/feedback_dialog\"), FeedbackReportLinkHandler = require(\"app/ui/feedback/feedback_report_link_handler\"), Feedback = require(\"app/data/feedback/feedback\"), SearchQuerySource = require(\"app/ui/search_query_source\"), EmailBanner = require(\"app/ui/banners/email_banner\"), EmailBannerData = require(\"app/data/email_banner\"), Gallery = require(\"app/ui/gallery/gallery\"), GalleryScribe = require(\"app/data/gallery_scribe\"), ShareViaEmailDialog = require(\"app/ui/dialogs/share_via_email_dialog\"), EmbedTweetDialog = require(\"app/ui/dialogs/embed_tweet\"), EmbedScribe = require(\"app/data/embed_scribe\"), OembedData = require(\"app/data/oembed\"), OembedScribe = require(\"app/data/oembed_scribe\"), DragState = require(\"app/ui/drag_state\"), NotificationListener = require(\"app/data/notification_listener\"), DMPoll = require(\"app/data/dm_poll\");\n    module.exports = function(b) {\n        bootCommon(b), topBar(b), PageTitle.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }), NotificationListener.attachTo(JSBNG__document, b, {\n            noTeardown: !0\n        }), DMPoll.attachTo(JSBNG__document, b, {\n            noTeardown: !0\n        }), ((b.dragAndDropPhotoUpload && DragState.attachTo(\"body\"))), SearchQuerySource.attachTo(\"body\", {\n            noTeardown: !0\n        }), ConfirmDialog.attachTo(\"#confirm_dialog\", {\n            noTeardown: !0\n        }), ((b.loggedIn && (ListMembershipDialog.attachTo(\"#list-membership-dialog\", b, {\n            noTeardown: !0\n        }), ListOperationsDialog.attachTo(\"#list-operations-dialog\", b, {\n            noTeardown: !0\n        }), directMessages(b), ((b.hasUserCompletionModule ? ConfirmEmailDialog.attachTo(\"#confirm-email-dialog\", {\n            noTeardown: !0\n        }) : EmailBanner.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }))), EmailBannerData.attachTo(JSBNG__document, {\n            noTeardown: !0\n        })))), TypeaheadScribe.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }), TypeaheadData.attachTo(JSBNG__document, b.typeaheadData, {\n            noTeardown: !0\n        }), GotoUserDialog.attachTo(\"#goto-user-dialog\", b), profilePopup({\n            deviceEnabled: b.deviceEnabled,\n            deviceVerified: b.deviceVerified,\n            formAuthenticityToken: b.formAuthenticityToken,\n            loggedIn: b.loggedIn,\n            asyncSocialProof: b.asyncSocialProof\n        }), GalleryScribe.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }), Gallery.attachTo(\".gallery-container\", b, {\n            noTeardown: !0,\n            sandboxes: b.sandboxes,\n            loggedIn: b.loggedIn,\n            eventData: {\n                scribeContext: {\n                    component: \"gallery\"\n                }\n            }\n        }), OembedScribe.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }), OembedData.attachTo(JSBNG__document, b), KeyboardShortcutsDialog.attachTo(\"#keyboard-shortcut-dialog\", b, {\n            noTeardown: !0\n        }), RetweetDialog.attachTo(\"#retweet-tweet-dialog\", b, {\n            noTeardown: !0\n        }), DeleteTweetDialog.attachTo(\"#delete-tweet-dialog\", b, {\n            noTeardown: !0\n        }), BlockUserDialog.attachTo(\"#block-user-dialog\", b, {\n            noTeardown: !0\n        }), KeyboardShortcuts.attachTo(JSBNG__document, {\n            routes: b.routes,\n            noTeardown: !0\n        }), ShareViaEmailDialog.attachTo(\"#share-via-email-dialog\", b, {\n            noTeardown: !0\n        }), EmbedScribe.attachTo(JSBNG__document, {\n            noTeardown: !0\n        }), EmbedTweetDialog.attachTo(\"#embed-tweet-dialog\", b, {\n            noTeardown: !0\n        }), setupPollingWithBackoff(\"uiWantsToRefreshTimestamps\"), NavigationLinks.attachTo(\".dashboard\", {\n            eventData: {\n                scribeContext: {\n                    component: \"dashboard_nav\"\n                }\n            }\n        }), FeedbackDialog.attachTo(\"#feedback_dialog\", b.debugData, {\n            noTeardown: !0\n        }), Feedback.attachTo(JSBNG__document, b.debugData, {\n            noTeardown: !0\n        }), FeedbackReportLinkHandler.attachTo(JSBNG__document, b.debugData, {\n            noTeardown: !0\n        });\n    };\n});\ndefine(\"lib/twitter_cldr\", [\"module\",\"require\",\"exports\",], function(module, require, exports) {\n    (function() {\n        var a, b, c, d;\n        a = {\n        }, a.is_rtl = !1, a.Utilities = function() {\n            function a() {\n            \n            };\n        ;\n            return a.from_char_code = function(a) {\n                return ((((a > 65535)) ? (a -= 65536, String.fromCharCode(((55296 + ((a >> 10)))), ((56320 + ((a & 1023)))))) : String.fromCharCode(a)));\n            }, a.char_code_at = function(a, b) {\n                var c, d, e, f, g, h;\n                a += \"\", d = a.length, h = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n                while (((h.exec(a) !== null))) {\n                    f = h.lastIndex;\n                    if (!((((f - 2)) < b))) {\n                        break;\n                    }\n                ;\n                ;\n                    b += 1;\n                };\n            ;\n                return ((((((b >= d)) || ((b < 0)))) ? NaN : (c = a.charCodeAt(b), ((((((55296 <= c)) && ((c <= 56319)))) ? (e = c, g = a.charCodeAt(((b + 1))), ((((((((e - 55296)) * 1024)) + ((g - 56320)))) + 65536))) : c)))));\n            }, a.unpack_string = function(a) {\n                var b, c, d, e, f;\n                d = [];\n                for (c = e = 0, f = a.length; ((((0 <= f)) ? ((e < f)) : ((e > f)))); c = ((((0 <= f)) ? ++e : --e))) {\n                    b = this.char_code_at(a, c);\n                    if (!b) {\n                        break;\n                    }\n                ;\n                ;\n                    d.push(b);\n                };\n            ;\n                return d;\n            }, a.pack_array = function(a) {\n                var b;\n                return function() {\n                    var c, d, e;\n                    e = [];\n                    for (c = 0, d = a.length; ((c < d)); c++) {\n                        b = a[c], e.push(this.from_char_code(b));\n                    ;\n                    };\n                ;\n                    return e;\n                }.call(this).join(\"\");\n            }, a.arraycopy = function(a, b, c, d, e) {\n                var f, g, h, i, j;\n                j = a.slice(b, ((b + e)));\n                for (f = h = 0, i = j.length; ((h < i)); f = ++h) {\n                    g = j[f], c[((d + f))] = g;\n                ;\n                };\n            ;\n            }, a.max = function(a) {\n                var b, c, d, e, f, g, h, i;\n                d = null;\n                for (e = f = 0, h = a.length; ((f < h)); e = ++f) {\n                    b = a[e];\n                    if (((b != null))) {\n                        d = b;\n                        break;\n                    }\n                ;\n                ;\n                };\n            ;\n                for (c = g = e, i = a.length; ((((e <= i)) ? ((g <= i)) : ((g >= i)))); c = ((((e <= i)) ? ++g : --g))) {\n                    ((((a[c] > d)) && (d = a[c])));\n                ;\n                };\n            ;\n                return d;\n            }, a.min = function(a) {\n                var b, c, d, e, f, g, h, i;\n                d = null;\n                for (e = f = 0, h = a.length; ((f < h)); e = ++f) {\n                    b = a[e];\n                    if (((b != null))) {\n                        d = b;\n                        break;\n                    }\n                ;\n                ;\n                };\n            ;\n                for (c = g = e, i = a.length; ((((e <= i)) ? ((g <= i)) : ((g >= i)))); c = ((((e <= i)) ? ++g : --g))) {\n                    ((((a[c] < d)) && (d = a[c])));\n                ;\n                };\n            ;\n                return d;\n            }, a.is_even = function(a) {\n                return ((((a % 2)) === 0));\n            }, a.is_odd = function(a) {\n                return ((((a % 2)) === 1));\n            }, a;\n        }(), a.PluralRules = function() {\n            function a() {\n            \n            };\n        ;\n            return a.rules = {\n                keys: [\"one\",\"other\",],\n                rule: function(a) {\n                    return function() {\n                        return ((((a == 1)) ? \"one\" : \"other\"));\n                    }();\n                }\n            }, a.all = function() {\n                return this.rules.keys;\n            }, a.rule_for = function(a) {\n                try {\n                    return this.rules.rule(a);\n                } catch (b) {\n                    return \"other\";\n                };\n            ;\n            }, a;\n        }(), a.TimespanFormatter = function() {\n            function b() {\n                this.approximate_multiplier = 332506, this.default_type = \"default\", this.tokens = {\n                    ago: {\n                        second: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" second ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" seconds ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        minute: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minute ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minutes ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        hour: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hour ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hours ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        day: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" day ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" days ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        week: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" week ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" weeks ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        month: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" month ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" months ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        year: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" year ago\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" years ago\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        }\n                    },\n                    until: {\n                        second: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" second\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" seconds\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        minute: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minute\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minutes\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        hour: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hour\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hours\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        day: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" day\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" days\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        week: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" week\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" weeks\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        month: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" month\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" months\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        year: {\n                            \"default\": {\n                                one: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" year\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"In \",\n                                    type: \"plaintext\"\n                                },{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" years\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        }\n                    },\n                    none: {\n                        second: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" second\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" seconds\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" sec\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" secs\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            abbreviated: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"s\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"s\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        minute: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minute\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" minutes\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" min\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" mins\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            abbreviated: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"m\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"m\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        hour: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hour\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hours\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hr\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" hrs\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            abbreviated: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"h\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"h\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        day: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" day\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" days\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" day\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" days\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            abbreviated: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"d\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \"d\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        week: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" week\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" weeks\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" wk\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" wks\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        month: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" month\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" months\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" mth\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" mths\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        },\n                        year: {\n                            \"default\": {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" year\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" years\",\n                                    type: \"plaintext\"\n                                },]\n                            },\n                            short: {\n                                one: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" yr\",\n                                    type: \"plaintext\"\n                                },],\n                                other: [{\n                                    value: \"{0}\",\n                                    type: \"placeholder\"\n                                },{\n                                    value: \" yrs\",\n                                    type: \"plaintext\"\n                                },]\n                            }\n                        }\n                    }\n                }, this.time_in_seconds = {\n                    second: 1,\n                    minute: 60,\n                    hour: 3600,\n                    day: 86400,\n                    week: 604800,\n                    month: 2629743.83,\n                    year: 31556926\n                };\n            };\n        ;\n            return b.prototype.format = function(b, c) {\n                var d, e, f, g, h, i;\n                ((((c == null)) && (c = {\n                }))), g = {\n                };\n                {\n                    var fin79keys = ((window.top.JSBNG_Replay.forInKeys)((c))), fin79i = (0);\n                    (0);\n                    for (; (fin79i < fin79keys.length); (fin79i++)) {\n                        ((d) = (fin79keys[fin79i]));\n                        {\n                            f = c[d], g[d] = f;\n                        ;\n                        };\n                    };\n                };\n            ;\n                ((g.direction || (g.direction = ((((b < 0)) ? \"ago\" : \"until\")))));\n                if (((((g.unit === null)) || ((g.unit === void 0))))) {\n                    g.unit = this.calculate_unit(Math.abs(b), g);\n                }\n            ;\n            ;\n                return ((g.type || (g.type = this.default_type))), g.number = this.calculate_time(Math.abs(b), g.unit), e = this.calculate_time(Math.abs(b), g.unit), g.rule = a.PluralRules.rule_for(e), h = function() {\n                    var a, b, c, d;\n                    c = this.tokens[g.direction][g.unit][g.type][g.rule], d = [];\n                    for (a = 0, b = c.length; ((a < b)); a++) {\n                        i = c[a], d.push(i.value);\n                    ;\n                    };\n                ;\n                    return d;\n                }.call(this), h.join(\"\").replace(/\\{[0-9]\\}/, e.toString());\n            }, b.prototype.calculate_unit = function(a, b) {\n                var c, d, e, f;\n                ((((b == null)) && (b = {\n                }))), f = {\n                };\n                {\n                    var fin80keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin80i = (0);\n                    (0);\n                    for (; (fin80i < fin80keys.length); (fin80i++)) {\n                        ((c) = (fin80keys[fin80i]));\n                        {\n                            e = b[c], f[c] = e;\n                        ;\n                        };\n                    };\n                };\n            ;\n                return ((((f.approximate == null)) && (f.approximate = !1))), d = ((f.approximate ? this.approximate_multiplier : 1)), ((((a < ((this.time_in_seconds.minute * d)))) ? \"second\" : ((((a < ((this.time_in_seconds.hour * d)))) ? \"minute\" : ((((a < ((this.time_in_seconds.day * d)))) ? \"hour\" : ((((a < ((this.time_in_seconds.week * d)))) ? \"day\" : ((((a < ((this.time_in_seconds.month * d)))) ? \"week\" : ((((a < ((this.time_in_seconds.year * d)))) ? \"month\" : \"year\"))))))))))));\n            }, b.prototype.calculate_time = function(a, b) {\n                return Math.round(((a / this.time_in_seconds[b])));\n            }, b;\n        }(), a.DateTimeFormatter = function() {\n            function b() {\n                this.tokens = {\n                    date_time: {\n                        \"default\": [{\n                            value: \"MMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },{\n                            value: \",\",\n                            type: \"plaintext\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        full: [{\n                            value: \"EEEE\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"MMMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"'\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"t\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"'\",\n                            type: \"plaintext\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"zzzz\",\n                            type: \"pattern\"\n                        },],\n                        long: [{\n                            value: \"MMMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"'\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"t\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"'\",\n                            type: \"plaintext\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"z\",\n                            type: \"pattern\"\n                        },],\n                        medium: [{\n                            value: \"MMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },{\n                            value: \",\",\n                            type: \"plaintext\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        short: [{\n                            value: \"M\",\n                            type: \"pattern\"\n                        },{\n                            value: \"/\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \"/\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"yy\",\n                            type: \"pattern\"\n                        },{\n                            value: \",\",\n                            type: \"plaintext\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        additional: {\n                            EHm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            EHms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            Ed: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },],\n                            Ehm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Ehms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Gy: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"G\",\n                                type: \"pattern\"\n                            },],\n                            H: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },],\n                            Hm: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            Hms: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            M: [{\n                                value: \"L\",\n                                type: \"pattern\"\n                            },],\n                            MEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMM: [{\n                                value: \"LLL\",\n                                type: \"pattern\"\n                            },],\n                            MMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            Md: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            d: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            h: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hm: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hms: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            ms: [{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            y: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yM: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMM: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMd: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQ: [{\n                                value: \"QQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQQ: [{\n                                value: \"QQQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },]\n                        }\n                    },\n                    time: {\n                        \"default\": [{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        full: [{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"zzzz\",\n                            type: \"pattern\"\n                        },],\n                        long: [{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"z\",\n                            type: \"pattern\"\n                        },],\n                        medium: [{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"ss\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        short: [{\n                            value: \"h\",\n                            type: \"pattern\"\n                        },{\n                            value: \":\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"mm\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"a\",\n                            type: \"pattern\"\n                        },],\n                        additional: {\n                            EHm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            EHms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            Ed: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },],\n                            Ehm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Ehms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Gy: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"G\",\n                                type: \"pattern\"\n                            },],\n                            H: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },],\n                            Hm: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            Hms: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            M: [{\n                                value: \"L\",\n                                type: \"pattern\"\n                            },],\n                            MEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMM: [{\n                                value: \"LLL\",\n                                type: \"pattern\"\n                            },],\n                            MMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            Md: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            d: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            h: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hm: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hms: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            ms: [{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            y: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yM: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMM: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMd: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQ: [{\n                                value: \"QQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQQ: [{\n                                value: \"QQQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },]\n                        }\n                    },\n                    date: {\n                        \"default\": [{\n                            value: \"MMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },],\n                        full: [{\n                            value: \"EEEE\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"MMMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },],\n                        long: [{\n                            value: \"MMMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },],\n                        medium: [{\n                            value: \"MMM\",\n                            type: \"pattern\"\n                        },{\n                            value: \" \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \", \",\n                            type: \"plaintext\"\n                        },{\n                            value: \"y\",\n                            type: \"pattern\"\n                        },],\n                        short: [{\n                            value: \"M\",\n                            type: \"pattern\"\n                        },{\n                            value: \"/\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"d\",\n                            type: \"pattern\"\n                        },{\n                            value: \"/\",\n                            type: \"plaintext\"\n                        },{\n                            value: \"yy\",\n                            type: \"pattern\"\n                        },],\n                        additional: {\n                            EHm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            EHms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            Ed: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },],\n                            Ehm: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Ehms: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            Gy: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"G\",\n                                type: \"pattern\"\n                            },],\n                            H: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },],\n                            Hm: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },],\n                            Hms: [{\n                                value: \"HH\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            M: [{\n                                value: \"L\",\n                                type: \"pattern\"\n                            },],\n                            MEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMM: [{\n                                value: \"LLL\",\n                                type: \"pattern\"\n                            },],\n                            MMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            MMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            Md: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            d: [{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },],\n                            h: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hm: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            hms: [{\n                                value: \"h\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"a\",\n                                type: \"pattern\"\n                            },],\n                            ms: [{\n                                value: \"mm\",\n                                type: \"pattern\"\n                            },{\n                                value: \":\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"ss\",\n                                type: \"pattern\"\n                            },],\n                            y: [{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yM: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMM: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMEd: [{\n                                value: \"E\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMMMd: [{\n                                value: \"MMM\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \", \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yMd: [{\n                                value: \"M\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"d\",\n                                type: \"pattern\"\n                            },{\n                                value: \"/\",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQ: [{\n                                value: \"QQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },],\n                            yQQQQ: [{\n                                value: \"QQQQ\",\n                                type: \"pattern\"\n                            },{\n                                value: \" \",\n                                type: \"plaintext\"\n                            },{\n                                value: \"y\",\n                                type: \"pattern\"\n                            },]\n                        }\n                    }\n                }, this.weekday_keys = [\"sun\",\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",], this.methods = {\n                    G: \"era\",\n                    y: \"year\",\n                    Y: \"year_of_week_of_year\",\n                    Q: \"quarter\",\n                    q: \"quarter_stand_alone\",\n                    M: \"month\",\n                    L: \"month_stand_alone\",\n                    w: \"week_of_year\",\n                    W: \"week_of_month\",\n                    d: \"day\",\n                    D: \"day_of_month\",\n                    F: \"day_of_week_in_month\",\n                    E: \"weekday\",\n                    e: \"weekday_local\",\n                    c: \"weekday_local_stand_alone\",\n                    a: \"period\",\n                    h: \"hour\",\n                    H: \"hour\",\n                    K: \"hour\",\n                    k: \"hour\",\n                    m: \"minute\",\n                    s: \"second\",\n                    S: \"second_fraction\",\n                    z: \"timezone\",\n                    Z: \"timezone\",\n                    v: \"timezone_generic_non_location\",\n                    V: \"timezone_metazone\"\n                };\n            };\n        ;\n            return b.prototype.format = function(a, b) {\n                var c, d, e, f = this;\n                return c = function(b) {\n                    var c;\n                    c = \"\";\n                    switch (b.type) {\n                      case \"pattern\":\n                        return f.result_for_token(b, a);\n                      default:\n                        return ((((((((b.value.length > 0)) && ((b.value[0] === \"'\")))) && ((b.value[((b.value.length - 1))] === \"'\")))) ? b.value.substring(1, ((b.value.length - 1))) : b.value));\n                    };\n                ;\n                }, e = this.get_tokens(a, b), function() {\n                    var a, b, f;\n                    f = [];\n                    for (a = 0, b = e.length; ((a < b)); a++) {\n                        d = e[a], f.push(c(d));\n                    ;\n                    };\n                ;\n                    return f;\n                }().join(\"\");\n            }, b.prototype.get_tokens = function(a, b) {\n                var c, d;\n                return c = ((b.format || \"date_time\")), d = ((b.type || \"default\")), ((((c === \"additional\")) ? this.tokens.date_time[c][this.additional_format_selector().find_closest(b.type)] : this.tokens[c][d]));\n            }, b.prototype.result_for_token = function(a, b) {\n                return this[this.methods[a.value[0]]](b, a.value, a.value.length);\n            }, b.prototype.additional_format_selector = function() {\n                return new a.AdditionalDateFormatSelector(this.tokens.date_time.additional);\n            }, b.additional_formats = function() {\n                return (new a.DateTimeFormatter).additional_format_selector().patterns();\n            }, b.prototype.era = function(b, c, d) {\n                var e, f, g;\n                switch (d) {\n                  case 0:\n                    e = [\"\",\"\",];\n                    break;\n                  case 1:\n                \n                  case 2:\n                \n                  case 3:\n                    e = a.Calendar.calendar.eras.abbr;\n                    break;\n                  default:\n                    e = a.Calendar.calendar.eras.JSBNG__name;\n                };\n            ;\n                return f = ((((b.getFullYear() < 0)) ? 0 : 1)), g = e[f], ((((g != null)) ? g : this.era(b, c.slice(0, -1), ((d - 1)))));\n            }, b.prototype.year = function(a, b, c) {\n                var d;\n                return d = a.getFullYear().toString(), ((((((c === 2)) && ((d.length !== 1)))) && (d = d.slice(-2)))), ((((c > 1)) && (d = ((\"0000\" + d)).slice(-c)))), d;\n            }, b.prototype.year_of_week_of_year = function(a, b, c) {\n                throw \"not implemented\";\n            }, b.prototype.day_of_week_in_month = function(a, b, c) {\n                throw \"not implemented\";\n            }, b.prototype.quarter = function(b, c, d) {\n                var e;\n                e = ((((((b.getMonth() / 3)) | 0)) + 1));\n                switch (d) {\n                  case 1:\n                    return e.toString();\n                  case 2:\n                    return ((\"0000\" + e.toString())).slice(-d);\n                  case 3:\n                    return a.Calendar.calendar.quarters.format.abbreviated[e];\n                  case 4:\n                    return a.Calendar.calendar.quarters.format.wide[e];\n                };\n            ;\n            }, b.prototype.quarter_stand_alone = function(b, c, d) {\n                var e;\n                e = ((((((b.getMonth() - 1)) / 3)) + 1));\n                switch (d) {\n                  case 1:\n                    return e.toString();\n                  case 2:\n                    return ((\"0000\" + e.toString())).slice(-d);\n                  case 3:\n                    throw \"not yet implemented (requires cldr's \\\"multiple inheritance\\\")\";\n                  case 4:\n                    throw \"not yet implemented (requires cldr's \\\"multiple inheritance\\\")\";\n                  case 5:\n                    return a.Calendar.calendar.quarters[\"stand-alone\"].narrow[e];\n                };\n            ;\n            }, b.prototype.month = function(b, c, d) {\n                var e;\n                e = ((b.getMonth() + 1)).toString();\n                switch (d) {\n                  case 1:\n                    return e;\n                  case 2:\n                    return ((\"0000\" + e)).slice(-d);\n                  case 3:\n                    return a.Calendar.calendar.months.format.abbreviated[e];\n                  case 4:\n                    return a.Calendar.calendar.months.format.wide[e];\n                  case 5:\n                    throw \"not yet implemented (requires cldr's \\\"multiple inheritance\\\")\";\n                  default:\n                    throw \"Unknown date format\";\n                };\n            ;\n            }, b.prototype.month_stand_alone = function(b, c, d) {\n                var e;\n                e = ((b.getMonth() + 1)).toString();\n                switch (d) {\n                  case 1:\n                    return e;\n                  case 2:\n                    return ((\"0000\" + e)).slice(-d);\n                  case 3:\n                    return a.Calendar.calendar.months[\"stand-alone\"].abbreviated[e];\n                  case 4:\n                    return a.Calendar.calendar.months[\"stand-alone\"].wide[e];\n                  case 5:\n                    return a.Calendar.calendar.months[\"stand-alone\"].narrow[e];\n                  default:\n                    throw \"Unknown date format\";\n                };\n            ;\n            }, b.prototype.day = function(a, b, c) {\n                switch (c) {\n                  case 1:\n                    return a.getDate().toString();\n                  case 2:\n                    return ((\"0000\" + a.getDate().toString())).slice(-c);\n                };\n            ;\n            }, b.prototype.weekday = function(b, c, d) {\n                var e;\n                e = this.weekday_keys[b.getDay()];\n                switch (d) {\n                  case 1:\n                \n                  case 2:\n                \n                  case 3:\n                    return a.Calendar.calendar.days.format.abbreviated[e];\n                  case 4:\n                    return a.Calendar.calendar.days.format.wide[e];\n                  case 5:\n                    return a.Calendar.calendar.days[\"stand-alone\"].narrow[e];\n                };\n            ;\n            }, b.prototype.weekday_local = function(a, b, c) {\n                var d;\n                switch (c) {\n                  case 1:\n                \n                  case 2:\n                    return d = a.getDay(), ((((d === 0)) ? \"7\" : d.toString()));\n                  default:\n                    return this.weekday(a, b, c);\n                };\n            ;\n            }, b.prototype.weekday_local_stand_alone = function(a, b, c) {\n                switch (c) {\n                  case 1:\n                    return this.weekday_local(a, b, c);\n                  default:\n                    return this.weekday(a, b, c);\n                };\n            ;\n            }, b.prototype.period = function(b, c, d) {\n                return ((((b.getHours() > 11)) ? a.Calendar.calendar.periods.format.wide.pm : a.Calendar.calendar.periods.format.wide.am));\n            }, b.prototype.hour = function(a, b, c) {\n                var d;\n                d = a.getHours();\n                switch (b[0]) {\n                  case \"h\":\n                    ((((d > 12)) ? d -= 12 : ((((d === 0)) && (d = 12)))));\n                    break;\n                  case \"K\":\n                    ((((d > 11)) && (d -= 12)));\n                    break;\n                  case \"k\":\n                    ((((d === 0)) && (d = 24)));\n                };\n            ;\n                return ((((c === 1)) ? d.toString() : ((\"000000\" + d.toString())).slice(-c)));\n            }, b.prototype.minute = function(a, b, c) {\n                return ((((c === 1)) ? a.getMinutes().toString() : ((\"000000\" + a.getMinutes().toString())).slice(-c)));\n            }, b.prototype.second = function(a, b, c) {\n                return ((((c === 1)) ? a.getSeconds().toString() : ((\"000000\" + a.getSeconds().toString())).slice(-c)));\n            }, b.prototype.second_fraction = function(a, b, c) {\n                if (((c > 6))) {\n                    throw \"can not use the S format with more than 6 digits\";\n                }\n            ;\n            ;\n                return ((\"000000\" + Math.round(Math.pow(((a.getMilliseconds() * 100)), ((6 - c)))).toString())).slice(-c);\n            }, b.prototype.timezone = function(a, b, c) {\n                var d, e, f, g, h;\n                f = a.getTimezoneOffset(), d = ((\"00\" + ((Math.abs(f) / 60)).toString())).slice(-2), e = ((\"00\" + ((Math.abs(f) % 60)).toString())).slice(-2), h = ((((f > 0)) ? \"-\" : \"+\")), g = ((((((h + d)) + \":\")) + e));\n                switch (c) {\n                  case 1:\n                \n                  case 2:\n                \n                  case 3:\n                    return g;\n                  default:\n                    return ((\"UTC\" + g));\n                };\n            ;\n            }, b.prototype.timezone_generic_non_location = function(a, b, c) {\n                throw \"not yet implemented (requires timezone translation data\\\")\";\n            }, b;\n        }(), a.AdditionalDateFormatSelector = function() {\n            function a(a) {\n                this.pattern_hash = a;\n            };\n        ;\n            return a.prototype.find_closest = function(a) {\n                var b, c, d, e, f;\n                if (((((a == null)) || ((a.trim().length === 0))))) {\n                    return null;\n                }\n            ;\n            ;\n                f = this.rank(a), d = 100, c = null;\n                {\n                    var fin81keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin81i = (0);\n                    (0);\n                    for (; (fin81i < fin81keys.length); (fin81i++)) {\n                        ((b) = (fin81keys[fin81i]));\n                        {\n                            e = f[b], ((((e < d)) && (d = e, c = b)));\n                        ;\n                        };\n                    };\n                };\n            ;\n                return c;\n            }, a.prototype.patterns = function() {\n                var a, b;\n                b = [];\n                {\n                    var fin82keys = ((window.top.JSBNG_Replay.forInKeys)((this.pattern_hash))), fin82i = (0);\n                    (0);\n                    for (; (fin82i < fin82keys.length); (fin82i++)) {\n                        ((a) = (fin82keys[fin82i]));\n                        {\n                            b.push(a);\n                        ;\n                        };\n                    };\n                };\n            ;\n                return b;\n            }, a.prototype.separate = function(a) {\n                var b, c, d, e, f;\n                c = \"\", d = [];\n                for (e = 0, f = a.length; ((e < f)); e++) {\n                    b = a[e], ((((b === c)) ? d[((d.length - 1))] += b : d.push(b))), c = b;\n                ;\n                };\n            ;\n                return d;\n            }, a.prototype.all_separated_patterns = function() {\n                var a, b;\n                b = [];\n                {\n                    var fin83keys = ((window.top.JSBNG_Replay.forInKeys)((this.pattern_hash))), fin83i = (0);\n                    (0);\n                    for (; (fin83i < fin83keys.length); (fin83i++)) {\n                        ((a) = (fin83keys[fin83i]));\n                        {\n                            b.push(this.separate(a));\n                        ;\n                        };\n                    };\n                };\n            ;\n                return b;\n            }, a.prototype.score = function(a, b) {\n                var c;\n                return c = ((this.exist_score(a, b) * 2)), c += this.position_score(a, b), ((c + this.count_score(a, b)));\n            }, a.prototype.position_score = function(a, b) {\n                var c, d, e, f;\n                f = 0;\n                {\n                    var fin84keys = ((window.top.JSBNG_Replay.forInKeys)((b))), fin84i = (0);\n                    (0);\n                    for (; (fin84i < fin84keys.length); (fin84i++)) {\n                        ((e) = (fin84keys[fin84i]));\n                        {\n                            d = b[e], c = a.indexOf(d), ((((c > -1)) && (f += Math.abs(((c - e))))));\n                        ;\n                        };\n                    };\n                };\n            ;\n                return f;\n            }, a.prototype.exist_score = function(a, b) {\n                var c, d, e, f, g;\n                c = 0;\n                for (f = 0, g = b.length; ((f < g)); f++) {\n                    e = b[f], ((((function() {\n                        var b, c, f;\n                        f = [];\n                        for (b = 0, c = a.length; ((b < c)); b++) {\n                            d = a[b], ((((d[0] === e[0])) && f.push(d)));\n                        ;\n                        };\n                    ;\n                        return f;\n                    }().length > 0)) || (c += 1)));\n                ;\n                };\n            ;\n                return c;\n            }, a.prototype.count_score = function(a, b) {\n                var c, d, e, f, g, h;\n                f = 0;\n                for (g = 0, h = b.length; ((g < h)); g++) {\n                    e = b[g], d = function() {\n                        var b, d, f;\n                        f = [];\n                        for (b = 0, d = a.length; ((b < d)); b++) {\n                            c = a[b], ((((c[0] === e[0])) && f.push(c)));\n                        ;\n                        };\n                    ;\n                        return f;\n                    }()[0], ((((d != null)) && (f += Math.abs(((d.length - e.length))))));\n                ;\n                };\n            ;\n                return f;\n            }, a.prototype.rank = function(a) {\n                var b, c, d, e, f, g;\n                c = this.separate(a), b = {\n                }, g = this.all_separated_patterns();\n                for (e = 0, f = g.length; ((e < f)); e++) {\n                    d = g[e], b[d.join(\"\")] = this.score(d, c);\n                ;\n                };\n            ;\n                return b;\n            }, a;\n        }(), a.Calendar = function() {\n            function a() {\n            \n            };\n        ;\n            return a.calendar = {\n                additional_formats: {\n                    EHm: \"E HH:mm\",\n                    EHms: \"E HH:mm:ss\",\n                    Ed: \"d E\",\n                    Ehm: \"E h:mm a\",\n                    Ehms: \"E h:mm:ss a\",\n                    Gy: \"y G\",\n                    H: \"HH\",\n                    Hm: \"HH:mm\",\n                    Hms: \"HH:mm:ss\",\n                    M: \"L\",\n                    MEd: \"E, M/d\",\n                    MMM: \"LLL\",\n                    MMMEd: \"E, MMM d\",\n                    MMMd: \"MMM d\",\n                    Md: \"M/d\",\n                    d: \"d\",\n                    h: \"h a\",\n                    hm: \"h:mm a\",\n                    hms: \"h:mm:ss a\",\n                    ms: \"mm:ss\",\n                    y: \"y\",\n                    yM: \"M/y\",\n                    yMEd: \"E, M/d/y\",\n                    yMMM: \"MMM y\",\n                    yMMMEd: \"E, MMM d, y\",\n                    yMMMd: \"MMM d, y\",\n                    yMd: \"M/d/y\",\n                    yQQQ: \"QQQ y\",\n                    yQQQQ: \"QQQQ y\"\n                },\n                days: {\n                    format: {\n                        abbreviated: {\n                            fri: \"Fri\",\n                            mon: \"Mon\",\n                            sat: \"Sat\",\n                            sun: \"Sun\",\n                            thu: \"Thu\",\n                            tue: \"Tue\",\n                            wed: \"Wed\"\n                        },\n                        narrow: {\n                            fri: \"F\",\n                            mon: \"M\",\n                            sat: \"S\",\n                            sun: \"S\",\n                            thu: \"T\",\n                            tue: \"T\",\n                            wed: \"W\"\n                        },\n                        short: {\n                            fri: \"Fr\",\n                            mon: \"Mo\",\n                            sat: \"Sa\",\n                            sun: \"Su\",\n                            thu: \"Th\",\n                            tue: \"Tu\",\n                            wed: \"We\"\n                        },\n                        wide: {\n                            fri: \"Friday\",\n                            mon: \"Monday\",\n                            sat: \"Saturday\",\n                            sun: \"Sunday\",\n                            thu: \"Thursday\",\n                            tue: \"Tuesday\",\n                            wed: \"Wednesday\"\n                        }\n                    },\n                    \"stand-alone\": {\n                        abbreviated: {\n                            fri: \"Fri\",\n                            mon: \"Mon\",\n                            sat: \"Sat\",\n                            sun: \"Sun\",\n                            thu: \"Thu\",\n                            tue: \"Tue\",\n                            wed: \"Wed\"\n                        },\n                        narrow: {\n                            fri: \"F\",\n                            mon: \"M\",\n                            sat: \"S\",\n                            sun: \"S\",\n                            thu: \"T\",\n                            tue: \"T\",\n                            wed: \"W\"\n                        },\n                        short: {\n                            fri: \"Fr\",\n                            mon: \"Mo\",\n                            sat: \"Sa\",\n                            sun: \"Su\",\n                            thu: \"Th\",\n                            tue: \"Tu\",\n                            wed: \"We\"\n                        },\n                        wide: {\n                            fri: \"Friday\",\n                            mon: \"Monday\",\n                            sat: \"Saturday\",\n                            sun: \"Sunday\",\n                            thu: \"Thursday\",\n                            tue: \"Tuesday\",\n                            wed: \"Wednesday\"\n                        }\n                    }\n                },\n                eras: {\n                    abbr: {\n                        0: \"BC\",\n                        1: \"AD\"\n                    },\n                    JSBNG__name: {\n                        0: \"Before Christ\",\n                        1: \"Anno Domini\"\n                    },\n                    narrow: {\n                        0: \"B\",\n                        1: \"A\"\n                    }\n                },\n                fields: {\n                    day: \"Day\",\n                    dayperiod: \"AM/PM\",\n                    era: \"Era\",\n                    hour: \"Hour\",\n                    minute: \"Minute\",\n                    month: \"Month\",\n                    second: \"Second\",\n                    week: \"Week\",\n                    weekday: \"Day of the Week\",\n                    year: \"Year\",\n                    zone: \"Time Zone\"\n                },\n                formats: {\n                    date: {\n                        \"default\": {\n                            pattern: \"MMM d, y\"\n                        },\n                        full: {\n                            pattern: \"EEEE, MMMM d, y\"\n                        },\n                        long: {\n                            pattern: \"MMMM d, y\"\n                        },\n                        medium: {\n                            pattern: \"MMM d, y\"\n                        },\n                        short: {\n                            pattern: \"M/d/yy\"\n                        }\n                    },\n                    datetime: {\n                        \"default\": {\n                            pattern: \"{{date}}, {{time}}\"\n                        },\n                        full: {\n                            pattern: \"{{date}} 'at' {{time}}\"\n                        },\n                        long: {\n                            pattern: \"{{date}} 'at' {{time}}\"\n                        },\n                        medium: {\n                            pattern: \"{{date}}, {{time}}\"\n                        },\n                        short: {\n                            pattern: \"{{date}}, {{time}}\"\n                        }\n                    },\n                    time: {\n                        \"default\": {\n                            pattern: \"h:mm:ss a\"\n                        },\n                        full: {\n                            pattern: \"h:mm:ss a zzzz\"\n                        },\n                        long: {\n                            pattern: \"h:mm:ss a z\"\n                        },\n                        medium: {\n                            pattern: \"h:mm:ss a\"\n                        },\n                        short: {\n                            pattern: \"h:mm a\"\n                        }\n                    }\n                },\n                months: {\n                    format: {\n                        abbreviated: {\n                            1: \"Jan\",\n                            10: \"Oct\",\n                            11: \"Nov\",\n                            12: \"Dec\",\n                            2: \"Feb\",\n                            3: \"Mar\",\n                            4: \"Apr\",\n                            5: \"May\",\n                            6: \"Jun\",\n                            7: \"Jul\",\n                            8: \"Aug\",\n                            9: \"Sep\"\n                        },\n                        narrow: {\n                            1: \"J\",\n                            10: \"O\",\n                            11: \"N\",\n                            12: \"D\",\n                            2: \"F\",\n                            3: \"M\",\n                            4: \"A\",\n                            5: \"M\",\n                            6: \"J\",\n                            7: \"J\",\n                            8: \"A\",\n                            9: \"S\"\n                        },\n                        wide: {\n                            1: \"January\",\n                            10: \"October\",\n                            11: \"November\",\n                            12: \"December\",\n                            2: \"February\",\n                            3: \"March\",\n                            4: \"April\",\n                            5: \"May\",\n                            6: \"June\",\n                            7: \"July\",\n                            8: \"August\",\n                            9: \"September\"\n                        }\n                    },\n                    \"stand-alone\": {\n                        abbreviated: {\n                            1: \"Jan\",\n                            10: \"Oct\",\n                            11: \"Nov\",\n                            12: \"Dec\",\n                            2: \"Feb\",\n                            3: \"Mar\",\n                            4: \"Apr\",\n                            5: \"May\",\n                            6: \"Jun\",\n                            7: \"Jul\",\n                            8: \"Aug\",\n                            9: \"Sep\"\n                        },\n                        narrow: {\n                            1: \"J\",\n                            10: \"O\",\n                            11: \"N\",\n                            12: \"D\",\n                            2: \"F\",\n                            3: \"M\",\n                            4: \"A\",\n                            5: \"M\",\n                            6: \"J\",\n                            7: \"J\",\n                            8: \"A\",\n                            9: \"S\"\n                        },\n                        wide: {\n                            1: \"January\",\n                            10: \"October\",\n                            11: \"November\",\n                            12: \"December\",\n                            2: \"February\",\n                            3: \"March\",\n                            4: \"April\",\n                            5: \"May\",\n                            6: \"June\",\n                            7: \"July\",\n                            8: \"August\",\n                            9: \"September\"\n                        }\n                    }\n                },\n                periods: {\n                    format: {\n                        abbreviated: null,\n                        narrow: {\n                            am: \"a\",\n                            noon: \"n\",\n                            pm: \"p\"\n                        },\n                        wide: {\n                            am: \"a.m.\",\n                            noon: \"noon\",\n                            pm: \"p.m.\"\n                        }\n                    },\n                    \"stand-alone\": {\n                    }\n                },\n                quarters: {\n                    format: {\n                        abbreviated: {\n                            1: \"Q1\",\n                            2: \"Q2\",\n                            3: \"Q3\",\n                            4: \"Q4\"\n                        },\n                        narrow: {\n                            1: 1,\n                            2: 2,\n                            3: 3,\n                            4: 4\n                        },\n                        wide: {\n                            1: \"1st quarter\",\n                            2: \"2nd quarter\",\n                            3: \"3rd quarter\",\n                            4: \"4th quarter\"\n                        }\n                    },\n                    \"stand-alone\": {\n                        abbreviated: {\n                            1: \"Q1\",\n                            2: \"Q2\",\n                            3: \"Q3\",\n                            4: \"Q4\"\n                        },\n                        narrow: {\n                            1: 1,\n                            2: 2,\n                            3: 3,\n                            4: 4\n                        },\n                        wide: {\n                            1: \"1st quarter\",\n                            2: \"2nd quarter\",\n                            3: \"3rd quarter\",\n                            4: \"4th quarter\"\n                        }\n                    }\n                }\n            }, a.months = function(a) {\n                var b, c, d, e;\n                ((((a == null)) && (a = {\n                }))), d = this.get_root(\"months\", a), c = [];\n                {\n                    var fin85keys = ((window.top.JSBNG_Replay.forInKeys)((d))), fin85i = (0);\n                    (0);\n                    for (; (fin85i < fin85keys.length); (fin85i++)) {\n                        ((b) = (fin85keys[fin85i]));\n                        {\n                            e = d[b], c[((parseInt(b) - 1))] = e;\n                        ;\n                        };\n                    };\n                };\n            ;\n                return c;\n            }, a.weekdays = function(a) {\n                return ((((a == null)) && (a = {\n                }))), this.get_root(\"days\", a);\n            }, a.get_root = function(a, b) {\n                var c, d, e, f;\n                return ((((b == null)) && (b = {\n                }))), e = this.calendar[a], d = ((b.names_form || \"wide\")), c = ((b.format || ((((((((e != null)) ? (((((f = e[\"stand-alone\"]) != null)) ? f[d] : void 0)) : void 0)) != null)) ? \"stand-alone\" : \"format\")))), e[c][d];\n            }, a;\n        }(), d = ((((((typeof exports != \"undefined\")) && ((exports !== null)))) ? exports : (this.TwitterCldr = {\n        }, this.TwitterCldr)));\n        {\n            var fin86keys = ((window.top.JSBNG_Replay.forInKeys)((a))), fin86i = (0);\n            (0);\n            for (; (fin86i < fin86keys.length); (fin86i++)) {\n                ((b) = (fin86keys[fin86i]));\n                {\n                    c = a[b], d[b] = c;\n                ;\n                };\n            };\n        };\n    ;\n    }).call(this);\n});");
// 14004
cb(); return null; }
finalize(); })();
