/* 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 = [];

    // 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 ow508011038 = window;
var f508011038_0;
var o0;
var o1;
var o2;
var f508011038_4;
var f508011038_5;
var f508011038_6;
var f508011038_7;
var f508011038_8;
var o3;
var f508011038_10;
var f508011038_11;
var f508011038_12;
var f508011038_13;
var f508011038_14;
var f508011038_15;
var f508011038_16;
var f508011038_17;
var o4;
var o5;
var f508011038_29;
var f508011038_30;
var f508011038_31;
var f508011038_32;
var f508011038_33;
var f508011038_34;
var f508011038_35;
var f508011038_36;
var f508011038_37;
var f508011038_38;
var f508011038_39;
var f508011038_40;
var f508011038_41;
var f508011038_42;
var f508011038_43;
var f508011038_44;
var o6;
var f508011038_46;
var f508011038_47;
var f508011038_49;
var f508011038_51;
var f508011038_53;
var f508011038_54;
var o7;
var f508011038_57;
var f508011038_59;
var f508011038_60;
var f508011038_61;
var f508011038_62;
var f508011038_63;
var f508011038_64;
var f508011038_65;
var f508011038_66;
var f508011038_67;
var f508011038_68;
var f508011038_69;
var f508011038_70;
var f508011038_71;
var f508011038_72;
var f508011038_73;
var f508011038_74;
var f508011038_75;
var f508011038_76;
var f508011038_77;
var f508011038_78;
var f508011038_79;
var f508011038_80;
var f508011038_81;
var f508011038_82;
var f508011038_83;
var f508011038_84;
var f508011038_85;
var f508011038_86;
var f508011038_87;
var f508011038_88;
var f508011038_89;
var f508011038_90;
var f508011038_91;
var f508011038_92;
var f508011038_93;
var f508011038_94;
var f508011038_95;
var f508011038_96;
var f508011038_97;
var f508011038_98;
var f508011038_99;
var f508011038_100;
var f508011038_101;
var f508011038_102;
var f508011038_103;
var f508011038_104;
var f508011038_105;
var f508011038_106;
var f508011038_107;
var f508011038_108;
var f508011038_109;
var f508011038_110;
var f508011038_111;
var f508011038_112;
var f508011038_113;
var f508011038_114;
var f508011038_115;
var f508011038_116;
var f508011038_117;
var f508011038_118;
var f508011038_119;
var f508011038_120;
var f508011038_121;
var f508011038_122;
var f508011038_123;
var f508011038_124;
var f508011038_125;
var f508011038_126;
var f508011038_127;
var f508011038_128;
var f508011038_129;
var f508011038_130;
var f508011038_131;
var f508011038_132;
var f508011038_133;
var f508011038_134;
var f508011038_135;
var f508011038_136;
var f508011038_137;
var f508011038_138;
var f508011038_139;
var f508011038_140;
var f508011038_141;
var f508011038_142;
var f508011038_143;
var f508011038_144;
var f508011038_145;
var f508011038_146;
var f508011038_147;
var f508011038_148;
var f508011038_149;
var f508011038_150;
var f508011038_151;
var f508011038_152;
var f508011038_153;
var f508011038_154;
var f508011038_155;
var f508011038_156;
var f508011038_157;
var f508011038_158;
var f508011038_159;
var f508011038_160;
var f508011038_161;
var f508011038_162;
var f508011038_163;
var f508011038_164;
var f508011038_165;
var f508011038_166;
var f508011038_167;
var f508011038_168;
var f508011038_169;
var f508011038_170;
var f508011038_171;
var f508011038_172;
var f508011038_173;
var f508011038_174;
var f508011038_175;
var f508011038_176;
var f508011038_177;
var f508011038_178;
var f508011038_179;
var f508011038_180;
var f508011038_181;
var f508011038_182;
var f508011038_183;
var f508011038_184;
var f508011038_185;
var f508011038_186;
var f508011038_187;
var f508011038_188;
var f508011038_189;
var f508011038_190;
var f508011038_191;
var f508011038_192;
var f508011038_193;
var f508011038_194;
var f508011038_195;
var f508011038_196;
var f508011038_197;
var f508011038_198;
var f508011038_199;
var f508011038_200;
var f508011038_201;
var f508011038_202;
var f508011038_203;
var f508011038_204;
var f508011038_205;
var f508011038_206;
var f508011038_207;
var f508011038_208;
var f508011038_209;
var f508011038_210;
var f508011038_211;
var f508011038_212;
var f508011038_213;
var f508011038_214;
var f508011038_215;
var f508011038_216;
var f508011038_217;
var f508011038_218;
var f508011038_219;
var f508011038_220;
var f508011038_221;
var f508011038_222;
var f508011038_223;
var f508011038_224;
var f508011038_225;
var f508011038_226;
var f508011038_227;
var f508011038_228;
var f508011038_229;
var f508011038_230;
var f508011038_231;
var f508011038_232;
var f508011038_233;
var f508011038_234;
var f508011038_235;
var f508011038_236;
var f508011038_237;
var f508011038_238;
var f508011038_239;
var f508011038_240;
var f508011038_241;
var f508011038_242;
var f508011038_243;
var f508011038_244;
var f508011038_245;
var f508011038_246;
var f508011038_247;
var f508011038_248;
var f508011038_249;
var f508011038_250;
var f508011038_251;
var f508011038_252;
var f508011038_253;
var f508011038_254;
var f508011038_255;
var f508011038_256;
var f508011038_257;
var f508011038_258;
var f508011038_259;
var f508011038_260;
var f508011038_261;
var f508011038_262;
var f508011038_263;
var f508011038_264;
var f508011038_265;
var f508011038_266;
var f508011038_267;
var f508011038_268;
var f508011038_269;
var f508011038_270;
var f508011038_271;
var f508011038_272;
var f508011038_273;
var f508011038_274;
var f508011038_275;
var f508011038_276;
var f508011038_277;
var f508011038_278;
var f508011038_279;
var f508011038_280;
var f508011038_281;
var f508011038_282;
var f508011038_283;
var f508011038_284;
var f508011038_285;
var f508011038_286;
var f508011038_287;
var f508011038_288;
var f508011038_289;
var f508011038_290;
var f508011038_291;
var f508011038_292;
var f508011038_293;
var f508011038_294;
var f508011038_295;
var f508011038_296;
var f508011038_297;
var f508011038_298;
var f508011038_299;
var f508011038_300;
var f508011038_301;
var f508011038_302;
var f508011038_303;
var f508011038_304;
var f508011038_305;
var f508011038_306;
var f508011038_307;
var f508011038_308;
var f508011038_309;
var f508011038_310;
var f508011038_311;
var f508011038_312;
var f508011038_313;
var f508011038_314;
var f508011038_315;
var f508011038_316;
var f508011038_317;
var f508011038_318;
var f508011038_319;
var f508011038_320;
var f508011038_321;
var f508011038_322;
var f508011038_323;
var f508011038_324;
var f508011038_325;
var f508011038_326;
var f508011038_327;
var f508011038_328;
var f508011038_329;
var f508011038_330;
var f508011038_331;
var f508011038_332;
var f508011038_333;
var f508011038_334;
var f508011038_335;
var f508011038_336;
var f508011038_337;
var f508011038_338;
var f508011038_339;
var f508011038_340;
var f508011038_341;
var f508011038_342;
var f508011038_343;
var f508011038_344;
var f508011038_345;
var f508011038_346;
var f508011038_347;
var f508011038_348;
var f508011038_349;
var f508011038_350;
var f508011038_351;
var f508011038_352;
var f508011038_353;
var f508011038_354;
var f508011038_355;
var f508011038_356;
var f508011038_357;
var f508011038_358;
var f508011038_359;
var f508011038_360;
var f508011038_361;
var f508011038_362;
var f508011038_363;
var f508011038_364;
var f508011038_365;
var f508011038_366;
var f508011038_367;
var f508011038_368;
var f508011038_369;
var f508011038_370;
var f508011038_371;
var f508011038_372;
var f508011038_373;
var f508011038_374;
var f508011038_375;
var f508011038_376;
var f508011038_377;
var f508011038_378;
var f508011038_379;
var f508011038_380;
var f508011038_381;
var f508011038_382;
var f508011038_383;
var f508011038_384;
var f508011038_385;
var f508011038_386;
var f508011038_387;
var f508011038_388;
var f508011038_389;
var f508011038_390;
var f508011038_391;
var f508011038_392;
var f508011038_393;
var f508011038_394;
var f508011038_395;
var f508011038_396;
var f508011038_397;
var f508011038_398;
var f508011038_399;
var f508011038_400;
var f508011038_401;
var f508011038_402;
var f508011038_403;
var f508011038_404;
var f508011038_405;
var f508011038_406;
var f508011038_407;
var f508011038_408;
var f508011038_409;
var f508011038_410;
var f508011038_411;
var f508011038_412;
var f508011038_413;
var f508011038_414;
var f508011038_415;
var f508011038_416;
var f508011038_417;
var f508011038_418;
var f508011038_419;
var f508011038_420;
var f508011038_421;
var f508011038_422;
var f508011038_423;
var f508011038_424;
var f508011038_425;
var f508011038_426;
var f508011038_428;
var f508011038_429;
var f508011038_430;
var f508011038_431;
var f508011038_432;
var f508011038_433;
var f508011038_434;
var f508011038_435;
var f508011038_436;
var f508011038_437;
var f508011038_438;
var f508011038_439;
var f508011038_440;
var f508011038_441;
var f508011038_442;
var f508011038_443;
var f508011038_444;
var f508011038_445;
var f508011038_446;
var f508011038_447;
var f508011038_448;
var f508011038_449;
var f508011038_450;
var f508011038_451;
var f508011038_452;
var f508011038_453;
var f508011038_454;
var f508011038_455;
var f508011038_456;
var f508011038_457;
var f508011038_458;
var f508011038_459;
var f508011038_460;
var f508011038_461;
var f508011038_462;
var f508011038_463;
var f508011038_464;
var f508011038_466;
var f508011038_468;
var f508011038_469;
var f508011038_470;
var o8;
var f508011038_472;
var f508011038_473;
var o9;
var o10;
var o11;
var f508011038_478;
var o12;
var o13;
var o14;
var f508011038_488;
var f508011038_492;
var f508011038_497;
var f508011038_498;
var f508011038_500;
var f508011038_508;
var f508011038_513;
var f508011038_515;
var f508011038_518;
var f508011038_522;
var f508011038_523;
var f508011038_524;
var f508011038_525;
var f508011038_527;
var f508011038_537;
var f508011038_540;
var f508011038_542;
var f508011038_543;
var f508011038_544;
var f508011038_546;
var f508011038_558;
var f508011038_575;
var fow508011038_JSBNG__event;
var f508011038_742;
var f508011038_743;
var fo508011038_1_jQuery18305379572303500026;
var f508011038_2581;
var fo508011038_2585_jQuery18305379572303500026;
var fo508011038_2587_jQuery18305379572303500026;
var fo508011038_2599_offsetWidth;
var f508011038_2628;
JSBNG_Replay.s19277ddcd28db6dd01a1d67d562dfbbffa3c6a17_4 = [];
// 1
// record generated by JSBench 323eb38c39a6+ at 2013-07-24T20:12:32.177Z
// 2
// 3
f508011038_0 = function() { return f508011038_0.returns[f508011038_0.inst++]; };
f508011038_0.returns = [];
f508011038_0.inst = 0;
// 4
ow508011038.JSBNG__Date = f508011038_0;
// 5
o0 = {};
// 6
ow508011038.JSBNG__document = o0;
// 7
o1 = {};
// 8
ow508011038.JSBNG__sessionStorage = o1;
// 9
o2 = {};
// 10
ow508011038.JSBNG__localStorage = o2;
// 11
f508011038_4 = function() { return f508011038_4.returns[f508011038_4.inst++]; };
f508011038_4.returns = [];
f508011038_4.inst = 0;
// 12
ow508011038.JSBNG__getComputedStyle = f508011038_4;
// 13
f508011038_5 = function() { return f508011038_5.returns[f508011038_5.inst++]; };
f508011038_5.returns = [];
f508011038_5.inst = 0;
// 14
ow508011038.JSBNG__dispatchEvent = f508011038_5;
// 15
f508011038_6 = function() { return f508011038_6.returns[f508011038_6.inst++]; };
f508011038_6.returns = [];
f508011038_6.inst = 0;
// 16
ow508011038.JSBNG__removeEventListener = f508011038_6;
// 17
f508011038_7 = function() { return f508011038_7.returns[f508011038_7.inst++]; };
f508011038_7.returns = [];
f508011038_7.inst = 0;
// 18
ow508011038.JSBNG__addEventListener = f508011038_7;
// 19
ow508011038.JSBNG__top = ow508011038;
// 20
f508011038_8 = function() { return f508011038_8.returns[f508011038_8.inst++]; };
f508011038_8.returns = [];
f508011038_8.inst = 0;
// 21
ow508011038.JSBNG__getSelection = f508011038_8;
// 22
o3 = {};
// 23
ow508011038.JSBNG__scrollbars = o3;
// undefined
o3 = null;
// 24
ow508011038.JSBNG__scrollX = 0;
// 25
ow508011038.JSBNG__scrollY = 0;
// 26
f508011038_10 = function() { return f508011038_10.returns[f508011038_10.inst++]; };
f508011038_10.returns = [];
f508011038_10.inst = 0;
// 27
ow508011038.JSBNG__scrollTo = f508011038_10;
// 28
f508011038_11 = function() { return f508011038_11.returns[f508011038_11.inst++]; };
f508011038_11.returns = [];
f508011038_11.inst = 0;
// 29
ow508011038.JSBNG__scrollBy = f508011038_11;
// 30
f508011038_12 = function() { return f508011038_12.returns[f508011038_12.inst++]; };
f508011038_12.returns = [];
f508011038_12.inst = 0;
// 31
ow508011038.JSBNG__setTimeout = f508011038_12;
// 32
f508011038_13 = function() { return f508011038_13.returns[f508011038_13.inst++]; };
f508011038_13.returns = [];
f508011038_13.inst = 0;
// 33
ow508011038.JSBNG__setInterval = f508011038_13;
// 34
f508011038_14 = function() { return f508011038_14.returns[f508011038_14.inst++]; };
f508011038_14.returns = [];
f508011038_14.inst = 0;
// 35
ow508011038.JSBNG__clearTimeout = f508011038_14;
// 36
f508011038_15 = function() { return f508011038_15.returns[f508011038_15.inst++]; };
f508011038_15.returns = [];
f508011038_15.inst = 0;
// 37
ow508011038.JSBNG__clearInterval = f508011038_15;
// 38
f508011038_16 = function() { return f508011038_16.returns[f508011038_16.inst++]; };
f508011038_16.returns = [];
f508011038_16.inst = 0;
// 39
ow508011038.JSBNG__captureEvents = f508011038_16;
// 40
f508011038_17 = function() { return f508011038_17.returns[f508011038_17.inst++]; };
f508011038_17.returns = [];
f508011038_17.inst = 0;
// 41
ow508011038.JSBNG__releaseEvents = f508011038_17;
// 42
ow508011038.JSBNG__frames = ow508011038;
// 43
o3 = {};
// 44
ow508011038.JSBNG__applicationCache = o3;
// undefined
o3 = null;
// 45
ow508011038.JSBNG__self = ow508011038;
// 46
o3 = {};
// 47
ow508011038.JSBNG__navigator = o3;
// 48
o4 = {};
// 49
ow508011038.JSBNG__screen = o4;
// undefined
o4 = null;
// 50
o4 = {};
// 51
ow508011038.JSBNG__history = o4;
// 52
o5 = {};
// 53
ow508011038.JSBNG__menubar = o5;
// undefined
o5 = null;
// 54
o5 = {};
// 55
ow508011038.JSBNG__toolbar = o5;
// undefined
o5 = null;
// 56
o5 = {};
// 57
ow508011038.JSBNG__locationbar = o5;
// undefined
o5 = null;
// 58
o5 = {};
// 59
ow508011038.JSBNG__personalbar = o5;
// undefined
o5 = null;
// 60
o5 = {};
// 61
ow508011038.JSBNG__statusbar = o5;
// undefined
o5 = null;
// 62
ow508011038.JSBNG__closed = false;
// 63
o5 = {};
// 64
ow508011038.JSBNG__crypto = o5;
// undefined
o5 = null;
// 65
ow508011038.JSBNG__opener = null;
// 66
ow508011038.JSBNG__defaultStatus = "";
// 67
o5 = {};
// 68
ow508011038.JSBNG__location = o5;
// 69
ow508011038.JSBNG__innerWidth = 1034;
// 70
ow508011038.JSBNG__innerHeight = 727;
// 71
ow508011038.JSBNG__outerWidth = 1050;
// 72
ow508011038.JSBNG__outerHeight = 840;
// 73
ow508011038.JSBNG__screenX = 60;
// 74
ow508011038.JSBNG__screenY = 60;
// 75
ow508011038.JSBNG__pageXOffset = 0;
// 76
ow508011038.JSBNG__pageYOffset = 0;
// 77
f508011038_29 = function() { return f508011038_29.returns[f508011038_29.inst++]; };
f508011038_29.returns = [];
f508011038_29.inst = 0;
// 78
ow508011038.JSBNG__alert = f508011038_29;
// 79
f508011038_30 = function() { return f508011038_30.returns[f508011038_30.inst++]; };
f508011038_30.returns = [];
f508011038_30.inst = 0;
// 80
ow508011038.JSBNG__confirm = f508011038_30;
// 81
f508011038_31 = function() { return f508011038_31.returns[f508011038_31.inst++]; };
f508011038_31.returns = [];
f508011038_31.inst = 0;
// 82
ow508011038.JSBNG__prompt = f508011038_31;
// 83
f508011038_32 = function() { return f508011038_32.returns[f508011038_32.inst++]; };
f508011038_32.returns = [];
f508011038_32.inst = 0;
// 84
ow508011038.JSBNG__stop = f508011038_32;
// 85
f508011038_33 = function() { return f508011038_33.returns[f508011038_33.inst++]; };
f508011038_33.returns = [];
f508011038_33.inst = 0;
// 86
ow508011038.JSBNG__print = f508011038_33;
// 87
f508011038_34 = function() { return f508011038_34.returns[f508011038_34.inst++]; };
f508011038_34.returns = [];
f508011038_34.inst = 0;
// 88
ow508011038.JSBNG__moveTo = f508011038_34;
// 89
f508011038_35 = function() { return f508011038_35.returns[f508011038_35.inst++]; };
f508011038_35.returns = [];
f508011038_35.inst = 0;
// 90
ow508011038.JSBNG__moveBy = f508011038_35;
// 91
f508011038_36 = function() { return f508011038_36.returns[f508011038_36.inst++]; };
f508011038_36.returns = [];
f508011038_36.inst = 0;
// 92
ow508011038.JSBNG__resizeTo = f508011038_36;
// 93
f508011038_37 = function() { return f508011038_37.returns[f508011038_37.inst++]; };
f508011038_37.returns = [];
f508011038_37.inst = 0;
// 94
ow508011038.JSBNG__resizeBy = f508011038_37;
// 95
f508011038_38 = function() { return f508011038_38.returns[f508011038_38.inst++]; };
f508011038_38.returns = [];
f508011038_38.inst = 0;
// 96
ow508011038.JSBNG__scroll = f508011038_38;
// 97
f508011038_39 = function() { return f508011038_39.returns[f508011038_39.inst++]; };
f508011038_39.returns = [];
f508011038_39.inst = 0;
// 98
ow508011038.JSBNG__atob = f508011038_39;
// 99
f508011038_40 = function() { return f508011038_40.returns[f508011038_40.inst++]; };
f508011038_40.returns = [];
f508011038_40.inst = 0;
// 100
ow508011038.JSBNG__btoa = f508011038_40;
// 101
ow508011038.JSBNG__frameElement = null;
// 102
f508011038_41 = function() { return f508011038_41.returns[f508011038_41.inst++]; };
f508011038_41.returns = [];
f508011038_41.inst = 0;
// 103
ow508011038.JSBNG__showModalDialog = f508011038_41;
// 104
f508011038_42 = function() { return f508011038_42.returns[f508011038_42.inst++]; };
f508011038_42.returns = [];
f508011038_42.inst = 0;
// 105
ow508011038.JSBNG__postMessage = f508011038_42;
// 106
f508011038_43 = function() { return f508011038_43.returns[f508011038_43.inst++]; };
f508011038_43.returns = [];
f508011038_43.inst = 0;
// 107
ow508011038.JSBNG__webkitAudioContext = f508011038_43;
// 108
f508011038_44 = function() { return f508011038_44.returns[f508011038_44.inst++]; };
f508011038_44.returns = [];
f508011038_44.inst = 0;
// 109
ow508011038.JSBNG__webkitAudioPannerNode = f508011038_44;
// 110
o6 = {};
// 111
ow508011038.JSBNG__webkitStorageInfo = o6;
// undefined
o6 = null;
// 112
f508011038_46 = function() { return f508011038_46.returns[f508011038_46.inst++]; };
f508011038_46.returns = [];
f508011038_46.inst = 0;
// 113
ow508011038.JSBNG__webkitRequestFileSystem = f508011038_46;
// 114
f508011038_47 = function() { return f508011038_47.returns[f508011038_47.inst++]; };
f508011038_47.returns = [];
f508011038_47.inst = 0;
// 115
ow508011038.JSBNG__webkitResolveLocalFileSystemURL = f508011038_47;
// 116
o6 = {};
// 117
ow508011038.JSBNG__external = o6;
// undefined
o6 = null;
// 118
f508011038_49 = function() { return f508011038_49.returns[f508011038_49.inst++]; };
f508011038_49.returns = [];
f508011038_49.inst = 0;
// 119
ow508011038.JSBNG__webkitIDBTransaction = f508011038_49;
// 120
o6 = {};
// 121
ow508011038.JSBNG__webkitNotifications = o6;
// undefined
o6 = null;
// 122
f508011038_51 = function() { return f508011038_51.returns[f508011038_51.inst++]; };
f508011038_51.returns = [];
f508011038_51.inst = 0;
// 123
ow508011038.JSBNG__webkitIDBIndex = f508011038_51;
// 124
o6 = {};
// 125
ow508011038.JSBNG__webkitIndexedDB = o6;
// 126
ow508011038.JSBNG__screenLeft = 60;
// 127
f508011038_53 = function() { return f508011038_53.returns[f508011038_53.inst++]; };
f508011038_53.returns = [];
f508011038_53.inst = 0;
// 128
ow508011038.JSBNG__webkitIDBFactory = f508011038_53;
// 129
ow508011038.JSBNG__clientInformation = o3;
// 130
f508011038_54 = function() { return f508011038_54.returns[f508011038_54.inst++]; };
f508011038_54.returns = [];
f508011038_54.inst = 0;
// 131
ow508011038.JSBNG__webkitIDBCursor = f508011038_54;
// 132
ow508011038.JSBNG__defaultstatus = "";
// 133
o7 = {};
// 134
ow508011038.JSBNG__styleMedia = o7;
// undefined
o7 = null;
// 135
o7 = {};
// 136
ow508011038.JSBNG__performance = o7;
// undefined
o7 = null;
// 137
f508011038_57 = function() { return f508011038_57.returns[f508011038_57.inst++]; };
f508011038_57.returns = [];
f508011038_57.inst = 0;
// 138
ow508011038.JSBNG__webkitIDBDatabase = f508011038_57;
// 139
o7 = {};
// 140
ow508011038.JSBNG__console = o7;
// 141
f508011038_59 = function() { return f508011038_59.returns[f508011038_59.inst++]; };
f508011038_59.returns = [];
f508011038_59.inst = 0;
// 142
ow508011038.JSBNG__webkitIDBRequest = f508011038_59;
// 143
f508011038_60 = function() { return f508011038_60.returns[f508011038_60.inst++]; };
f508011038_60.returns = [];
f508011038_60.inst = 0;
// 144
ow508011038.JSBNG__webkitIDBObjectStore = f508011038_60;
// 145
ow508011038.JSBNG__devicePixelRatio = 1;
// 146
f508011038_61 = function() { return f508011038_61.returns[f508011038_61.inst++]; };
f508011038_61.returns = [];
f508011038_61.inst = 0;
// 147
ow508011038.JSBNG__webkitURL = f508011038_61;
// 148
f508011038_62 = function() { return f508011038_62.returns[f508011038_62.inst++]; };
f508011038_62.returns = [];
f508011038_62.inst = 0;
// 149
ow508011038.JSBNG__webkitIDBKeyRange = f508011038_62;
// 150
ow508011038.JSBNG__offscreenBuffering = true;
// 151
ow508011038.JSBNG__screenTop = 60;
// 152
f508011038_63 = function() { return f508011038_63.returns[f508011038_63.inst++]; };
f508011038_63.returns = [];
f508011038_63.inst = 0;
// 153
ow508011038.JSBNG__matchMedia = f508011038_63;
// 154
f508011038_64 = function() { return f508011038_64.returns[f508011038_64.inst++]; };
f508011038_64.returns = [];
f508011038_64.inst = 0;
// 155
ow508011038.JSBNG__webkitRequestAnimationFrame = f508011038_64;
// 156
f508011038_65 = function() { return f508011038_65.returns[f508011038_65.inst++]; };
f508011038_65.returns = [];
f508011038_65.inst = 0;
// 157
ow508011038.JSBNG__webkitCancelRequestAnimationFrame = f508011038_65;
// 158
f508011038_66 = function() { return f508011038_66.returns[f508011038_66.inst++]; };
f508011038_66.returns = [];
f508011038_66.inst = 0;
// 159
ow508011038.JSBNG__getMatchedCSSRules = f508011038_66;
// 160
f508011038_67 = function() { return f508011038_67.returns[f508011038_67.inst++]; };
f508011038_67.returns = [];
f508011038_67.inst = 0;
// 161
ow508011038.JSBNG__webkitConvertPointFromPageToNode = f508011038_67;
// 162
f508011038_68 = function() { return f508011038_68.returns[f508011038_68.inst++]; };
f508011038_68.returns = [];
f508011038_68.inst = 0;
// 163
ow508011038.JSBNG__webkitConvertPointFromNodeToPage = f508011038_68;
// 164
f508011038_69 = function() { return f508011038_69.returns[f508011038_69.inst++]; };
f508011038_69.returns = [];
f508011038_69.inst = 0;
// 165
ow508011038.JSBNG__openDatabase = f508011038_69;
// 166
f508011038_70 = function() { return f508011038_70.returns[f508011038_70.inst++]; };
f508011038_70.returns = [];
f508011038_70.inst = 0;
// 167
ow508011038.JSBNG__XMLHttpRequest = f508011038_70;
// 168
f508011038_71 = function() { return f508011038_71.returns[f508011038_71.inst++]; };
f508011038_71.returns = [];
f508011038_71.inst = 0;
// 169
ow508011038.JSBNG__Image = f508011038_71;
// 170
ow508011038.JSBNG__URL = f508011038_61;
// 171
ow508011038.JSBNG__name = "";
// 172
f508011038_72 = function() { return f508011038_72.returns[f508011038_72.inst++]; };
f508011038_72.returns = [];
f508011038_72.inst = 0;
// 173
ow508011038.JSBNG__focus = f508011038_72;
// 174
f508011038_73 = function() { return f508011038_73.returns[f508011038_73.inst++]; };
f508011038_73.returns = [];
f508011038_73.inst = 0;
// 175
ow508011038.JSBNG__blur = f508011038_73;
// 176
f508011038_74 = function() { return f508011038_74.returns[f508011038_74.inst++]; };
f508011038_74.returns = [];
f508011038_74.inst = 0;
// 177
ow508011038.JSBNG__find = f508011038_74;
// 178
ow508011038.JSBNG__status = "";
// 179
f508011038_75 = function() { return f508011038_75.returns[f508011038_75.inst++]; };
f508011038_75.returns = [];
f508011038_75.inst = 0;
// 180
ow508011038.JSBNG__Float64Array = f508011038_75;
// 181
f508011038_76 = function() { return f508011038_76.returns[f508011038_76.inst++]; };
f508011038_76.returns = [];
f508011038_76.inst = 0;
// 182
ow508011038.JSBNG__SVGMPathElement = f508011038_76;
// 183
f508011038_77 = function() { return f508011038_77.returns[f508011038_77.inst++]; };
f508011038_77.returns = [];
f508011038_77.inst = 0;
// 184
ow508011038.JSBNG__SVGGlyphRefElement = f508011038_77;
// 185
f508011038_78 = function() { return f508011038_78.returns[f508011038_78.inst++]; };
f508011038_78.returns = [];
f508011038_78.inst = 0;
// 186
ow508011038.JSBNG__SVGAltGlyphDefElement = f508011038_78;
// 187
f508011038_79 = function() { return f508011038_79.returns[f508011038_79.inst++]; };
f508011038_79.returns = [];
f508011038_79.inst = 0;
// 188
ow508011038.JSBNG__CloseEvent = f508011038_79;
// 189
f508011038_80 = function() { return f508011038_80.returns[f508011038_80.inst++]; };
f508011038_80.returns = [];
f508011038_80.inst = 0;
// 190
ow508011038.JSBNG__SVGAnimateMotionElement = f508011038_80;
// 191
f508011038_81 = function() { return f508011038_81.returns[f508011038_81.inst++]; };
f508011038_81.returns = [];
f508011038_81.inst = 0;
// 192
ow508011038.JSBNG__SVGAltGlyphItemElement = f508011038_81;
// 193
f508011038_82 = function() { return f508011038_82.returns[f508011038_82.inst++]; };
f508011038_82.returns = [];
f508011038_82.inst = 0;
// 194
ow508011038.JSBNG__SVGFEDropShadowElement = f508011038_82;
// 195
f508011038_83 = function() { return f508011038_83.returns[f508011038_83.inst++]; };
f508011038_83.returns = [];
f508011038_83.inst = 0;
// 196
ow508011038.JSBNG__SVGPathSegLinetoVerticalRel = f508011038_83;
// 197
f508011038_84 = function() { return f508011038_84.returns[f508011038_84.inst++]; };
f508011038_84.returns = [];
f508011038_84.inst = 0;
// 198
ow508011038.JSBNG__SVGFESpotLightElement = f508011038_84;
// 199
f508011038_85 = function() { return f508011038_85.returns[f508011038_85.inst++]; };
f508011038_85.returns = [];
f508011038_85.inst = 0;
// 200
ow508011038.JSBNG__HTMLButtonElement = f508011038_85;
// 201
f508011038_86 = function() { return f508011038_86.returns[f508011038_86.inst++]; };
f508011038_86.returns = [];
f508011038_86.inst = 0;
// 202
ow508011038.JSBNG__Worker = f508011038_86;
// 203
f508011038_87 = function() { return f508011038_87.returns[f508011038_87.inst++]; };
f508011038_87.returns = [];
f508011038_87.inst = 0;
// 204
ow508011038.JSBNG__EntityReference = f508011038_87;
// 205
f508011038_88 = function() { return f508011038_88.returns[f508011038_88.inst++]; };
f508011038_88.returns = [];
f508011038_88.inst = 0;
// 206
ow508011038.JSBNG__NodeList = f508011038_88;
// 207
f508011038_89 = function() { return f508011038_89.returns[f508011038_89.inst++]; };
f508011038_89.returns = [];
f508011038_89.inst = 0;
// 208
ow508011038.JSBNG__SVGAnimatedNumber = f508011038_89;
// 209
f508011038_90 = function() { return f508011038_90.returns[f508011038_90.inst++]; };
f508011038_90.returns = [];
f508011038_90.inst = 0;
// 210
ow508011038.JSBNG__SVGTSpanElement = f508011038_90;
// 211
f508011038_91 = function() { return f508011038_91.returns[f508011038_91.inst++]; };
f508011038_91.returns = [];
f508011038_91.inst = 0;
// 212
ow508011038.JSBNG__MimeTypeArray = f508011038_91;
// 213
f508011038_92 = function() { return f508011038_92.returns[f508011038_92.inst++]; };
f508011038_92.returns = [];
f508011038_92.inst = 0;
// 214
ow508011038.JSBNG__SVGPoint = f508011038_92;
// 215
f508011038_93 = function() { return f508011038_93.returns[f508011038_93.inst++]; };
f508011038_93.returns = [];
f508011038_93.inst = 0;
// 216
ow508011038.JSBNG__SVGScriptElement = f508011038_93;
// 217
f508011038_94 = function() { return f508011038_94.returns[f508011038_94.inst++]; };
f508011038_94.returns = [];
f508011038_94.inst = 0;
// 218
ow508011038.JSBNG__OverflowEvent = f508011038_94;
// 219
f508011038_95 = function() { return f508011038_95.returns[f508011038_95.inst++]; };
f508011038_95.returns = [];
f508011038_95.inst = 0;
// 220
ow508011038.JSBNG__HTMLTableColElement = f508011038_95;
// 221
f508011038_96 = function() { return f508011038_96.returns[f508011038_96.inst++]; };
f508011038_96.returns = [];
f508011038_96.inst = 0;
// 222
ow508011038.JSBNG__HTMLOptionElement = f508011038_96;
// 223
f508011038_97 = function() { return f508011038_97.returns[f508011038_97.inst++]; };
f508011038_97.returns = [];
f508011038_97.inst = 0;
// 224
ow508011038.JSBNG__HTMLInputElement = f508011038_97;
// 225
f508011038_98 = function() { return f508011038_98.returns[f508011038_98.inst++]; };
f508011038_98.returns = [];
f508011038_98.inst = 0;
// 226
ow508011038.JSBNG__SVGFEPointLightElement = f508011038_98;
// 227
f508011038_99 = function() { return f508011038_99.returns[f508011038_99.inst++]; };
f508011038_99.returns = [];
f508011038_99.inst = 0;
// 228
ow508011038.JSBNG__SVGPathSegList = f508011038_99;
// 229
f508011038_100 = function() { return f508011038_100.returns[f508011038_100.inst++]; };
f508011038_100.returns = [];
f508011038_100.inst = 0;
// 230
ow508011038.JSBNG__SVGImageElement = f508011038_100;
// 231
f508011038_101 = function() { return f508011038_101.returns[f508011038_101.inst++]; };
f508011038_101.returns = [];
f508011038_101.inst = 0;
// 232
ow508011038.JSBNG__MutationEvent = f508011038_101;
// 233
f508011038_102 = function() { return f508011038_102.returns[f508011038_102.inst++]; };
f508011038_102.returns = [];
f508011038_102.inst = 0;
// 234
ow508011038.JSBNG__SVGMarkerElement = f508011038_102;
// 235
f508011038_103 = function() { return f508011038_103.returns[f508011038_103.inst++]; };
f508011038_103.returns = [];
f508011038_103.inst = 0;
// 236
ow508011038.JSBNG__HTMLMetaElement = f508011038_103;
// 237
f508011038_104 = function() { return f508011038_104.returns[f508011038_104.inst++]; };
f508011038_104.returns = [];
f508011038_104.inst = 0;
// 238
ow508011038.JSBNG__WebKitCSSTransformValue = f508011038_104;
// 239
f508011038_105 = function() { return f508011038_105.returns[f508011038_105.inst++]; };
f508011038_105.returns = [];
f508011038_105.inst = 0;
// 240
ow508011038.JSBNG__Clipboard = f508011038_105;
// 241
f508011038_106 = function() { return f508011038_106.returns[f508011038_106.inst++]; };
f508011038_106.returns = [];
f508011038_106.inst = 0;
// 242
ow508011038.JSBNG__HTMLTableElement = f508011038_106;
// 243
f508011038_107 = function() { return f508011038_107.returns[f508011038_107.inst++]; };
f508011038_107.returns = [];
f508011038_107.inst = 0;
// 244
ow508011038.JSBNG__SharedWorker = f508011038_107;
// 245
f508011038_108 = function() { return f508011038_108.returns[f508011038_108.inst++]; };
f508011038_108.returns = [];
f508011038_108.inst = 0;
// 246
ow508011038.JSBNG__SVGAElement = f508011038_108;
// 247
f508011038_109 = function() { return f508011038_109.returns[f508011038_109.inst++]; };
f508011038_109.returns = [];
f508011038_109.inst = 0;
// 248
ow508011038.JSBNG__SVGAnimatedRect = f508011038_109;
// 249
f508011038_110 = function() { return f508011038_110.returns[f508011038_110.inst++]; };
f508011038_110.returns = [];
f508011038_110.inst = 0;
// 250
ow508011038.JSBNG__SVGGElement = f508011038_110;
// 251
f508011038_111 = function() { return f508011038_111.returns[f508011038_111.inst++]; };
f508011038_111.returns = [];
f508011038_111.inst = 0;
// 252
ow508011038.JSBNG__SVGLinearGradientElement = f508011038_111;
// 253
f508011038_112 = function() { return f508011038_112.returns[f508011038_112.inst++]; };
f508011038_112.returns = [];
f508011038_112.inst = 0;
// 254
ow508011038.JSBNG__SVGForeignObjectElement = f508011038_112;
// 255
f508011038_113 = function() { return f508011038_113.returns[f508011038_113.inst++]; };
f508011038_113.returns = [];
f508011038_113.inst = 0;
// 256
ow508011038.JSBNG__SVGAnimateElement = f508011038_113;
// 257
f508011038_114 = function() { return f508011038_114.returns[f508011038_114.inst++]; };
f508011038_114.returns = [];
f508011038_114.inst = 0;
// 258
ow508011038.JSBNG__SVGFontElement = f508011038_114;
// 259
f508011038_115 = function() { return f508011038_115.returns[f508011038_115.inst++]; };
f508011038_115.returns = [];
f508011038_115.inst = 0;
// 260
ow508011038.JSBNG__SVGFontFaceElement = f508011038_115;
// 261
f508011038_116 = function() { return f508011038_116.returns[f508011038_116.inst++]; };
f508011038_116.returns = [];
f508011038_116.inst = 0;
// 262
ow508011038.JSBNG__Element = f508011038_116;
// 263
f508011038_117 = function() { return f508011038_117.returns[f508011038_117.inst++]; };
f508011038_117.returns = [];
f508011038_117.inst = 0;
// 264
ow508011038.JSBNG__SVGPathSegCurvetoQuadraticSmoothRel = f508011038_117;
// 265
f508011038_118 = function() { return f508011038_118.returns[f508011038_118.inst++]; };
f508011038_118.returns = [];
f508011038_118.inst = 0;
// 266
ow508011038.JSBNG__SVGStopElement = f508011038_118;
// 267
f508011038_119 = function() { return f508011038_119.returns[f508011038_119.inst++]; };
f508011038_119.returns = [];
f508011038_119.inst = 0;
// 268
ow508011038.JSBNG__CSSStyleSheet = f508011038_119;
// 269
f508011038_120 = function() { return f508011038_120.returns[f508011038_120.inst++]; };
f508011038_120.returns = [];
f508011038_120.inst = 0;
// 270
ow508011038.JSBNG__StyleSheetList = f508011038_120;
// 271
f508011038_121 = function() { return f508011038_121.returns[f508011038_121.inst++]; };
f508011038_121.returns = [];
f508011038_121.inst = 0;
// 272
ow508011038.JSBNG__WebGLShader = f508011038_121;
// 273
f508011038_122 = function() { return f508011038_122.returns[f508011038_122.inst++]; };
f508011038_122.returns = [];
f508011038_122.inst = 0;
// 274
ow508011038.JSBNG__Uint32Array = f508011038_122;
// 275
f508011038_123 = function() { return f508011038_123.returns[f508011038_123.inst++]; };
f508011038_123.returns = [];
f508011038_123.inst = 0;
// 276
ow508011038.JSBNG__TimeRanges = f508011038_123;
// 277
f508011038_124 = function() { return f508011038_124.returns[f508011038_124.inst++]; };
f508011038_124.returns = [];
f508011038_124.inst = 0;
// 278
ow508011038.JSBNG__HTMLHRElement = f508011038_124;
// 279
f508011038_125 = function() { return f508011038_125.returns[f508011038_125.inst++]; };
f508011038_125.returns = [];
f508011038_125.inst = 0;
// 280
ow508011038.JSBNG__SVGViewElement = f508011038_125;
// 281
f508011038_126 = function() { return f508011038_126.returns[f508011038_126.inst++]; };
f508011038_126.returns = [];
f508011038_126.inst = 0;
// 282
ow508011038.JSBNG__SVGGradientElement = f508011038_126;
// 283
f508011038_127 = function() { return f508011038_127.returns[f508011038_127.inst++]; };
f508011038_127.returns = [];
f508011038_127.inst = 0;
// 284
ow508011038.JSBNG__SVGPathSegMovetoRel = f508011038_127;
// 285
f508011038_128 = function() { return f508011038_128.returns[f508011038_128.inst++]; };
f508011038_128.returns = [];
f508011038_128.inst = 0;
// 286
ow508011038.JSBNG__CanvasPattern = f508011038_128;
// 287
f508011038_129 = function() { return f508011038_129.returns[f508011038_129.inst++]; };
f508011038_129.returns = [];
f508011038_129.inst = 0;
// 288
ow508011038.JSBNG__WebGLActiveInfo = f508011038_129;
// 289
f508011038_130 = function() { return f508011038_130.returns[f508011038_130.inst++]; };
f508011038_130.returns = [];
f508011038_130.inst = 0;
// 290
ow508011038.JSBNG__HTMLProgressElement = f508011038_130;
// 291
f508011038_131 = function() { return f508011038_131.returns[f508011038_131.inst++]; };
f508011038_131.returns = [];
f508011038_131.inst = 0;
// 292
ow508011038.JSBNG__HTMLDivElement = f508011038_131;
// 293
f508011038_132 = function() { return f508011038_132.returns[f508011038_132.inst++]; };
f508011038_132.returns = [];
f508011038_132.inst = 0;
// 294
ow508011038.JSBNG__HashChangeEvent = f508011038_132;
// 295
f508011038_133 = function() { return f508011038_133.returns[f508011038_133.inst++]; };
f508011038_133.returns = [];
f508011038_133.inst = 0;
// 296
ow508011038.JSBNG__KeyboardEvent = f508011038_133;
// 297
f508011038_134 = function() { return f508011038_134.returns[f508011038_134.inst++]; };
f508011038_134.returns = [];
f508011038_134.inst = 0;
// 298
ow508011038.JSBNG__SVGHKernElement = f508011038_134;
// 299
f508011038_135 = function() { return f508011038_135.returns[f508011038_135.inst++]; };
f508011038_135.returns = [];
f508011038_135.inst = 0;
// 300
ow508011038.JSBNG__HTMLTitleElement = f508011038_135;
// 301
f508011038_136 = function() { return f508011038_136.returns[f508011038_136.inst++]; };
f508011038_136.returns = [];
f508011038_136.inst = 0;
// 302
ow508011038.JSBNG__HTMLQuoteElement = f508011038_136;
// 303
f508011038_137 = function() { return f508011038_137.returns[f508011038_137.inst++]; };
f508011038_137.returns = [];
f508011038_137.inst = 0;
// 304
ow508011038.JSBNG__SVGFEImageElement = f508011038_137;
// 305
f508011038_138 = function() { return f508011038_138.returns[f508011038_138.inst++]; };
f508011038_138.returns = [];
f508011038_138.inst = 0;
// 306
ow508011038.JSBNG__DOMTokenList = f508011038_138;
// 307
f508011038_139 = function() { return f508011038_139.returns[f508011038_139.inst++]; };
f508011038_139.returns = [];
f508011038_139.inst = 0;
// 308
ow508011038.JSBNG__WebGLProgram = f508011038_139;
// 309
f508011038_140 = function() { return f508011038_140.returns[f508011038_140.inst++]; };
f508011038_140.returns = [];
f508011038_140.inst = 0;
// 310
ow508011038.JSBNG__SVGPathSegMovetoAbs = f508011038_140;
// 311
f508011038_141 = function() { return f508011038_141.returns[f508011038_141.inst++]; };
f508011038_141.returns = [];
f508011038_141.inst = 0;
// 312
ow508011038.JSBNG__SVGTextPathElement = f508011038_141;
// 313
f508011038_142 = function() { return f508011038_142.returns[f508011038_142.inst++]; };
f508011038_142.returns = [];
f508011038_142.inst = 0;
// 314
ow508011038.JSBNG__SVGAnimatedTransformList = f508011038_142;
// 315
f508011038_143 = function() { return f508011038_143.returns[f508011038_143.inst++]; };
f508011038_143.returns = [];
f508011038_143.inst = 0;
// 316
ow508011038.JSBNG__HTMLLegendElement = f508011038_143;
// 317
f508011038_144 = function() { return f508011038_144.returns[f508011038_144.inst++]; };
f508011038_144.returns = [];
f508011038_144.inst = 0;
// 318
ow508011038.JSBNG__SVGPathSegCurvetoQuadraticAbs = f508011038_144;
// 319
f508011038_145 = function() { return f508011038_145.returns[f508011038_145.inst++]; };
f508011038_145.returns = [];
f508011038_145.inst = 0;
// 320
ow508011038.JSBNG__MouseEvent = f508011038_145;
// 321
f508011038_146 = function() { return f508011038_146.returns[f508011038_146.inst++]; };
f508011038_146.returns = [];
f508011038_146.inst = 0;
// 322
ow508011038.JSBNG__MediaError = f508011038_146;
// 323
f508011038_147 = function() { return f508011038_147.returns[f508011038_147.inst++]; };
f508011038_147.returns = [];
f508011038_147.inst = 0;
// 324
ow508011038.JSBNG__Uint16Array = f508011038_147;
// 325
f508011038_148 = function() { return f508011038_148.returns[f508011038_148.inst++]; };
f508011038_148.returns = [];
f508011038_148.inst = 0;
// 326
ow508011038.JSBNG__HTMLObjectElement = f508011038_148;
// 327
f508011038_149 = function() { return f508011038_149.returns[f508011038_149.inst++]; };
f508011038_149.returns = [];
f508011038_149.inst = 0;
// 328
ow508011038.JSBNG__HTMLFontElement = f508011038_149;
// 329
f508011038_150 = function() { return f508011038_150.returns[f508011038_150.inst++]; };
f508011038_150.returns = [];
f508011038_150.inst = 0;
// 330
ow508011038.JSBNG__SVGFilterElement = f508011038_150;
// 331
f508011038_151 = function() { return f508011038_151.returns[f508011038_151.inst++]; };
f508011038_151.returns = [];
f508011038_151.inst = 0;
// 332
ow508011038.JSBNG__WebKitTransitionEvent = f508011038_151;
// 333
f508011038_152 = function() { return f508011038_152.returns[f508011038_152.inst++]; };
f508011038_152.returns = [];
f508011038_152.inst = 0;
// 334
ow508011038.JSBNG__MediaList = f508011038_152;
// 335
f508011038_153 = function() { return f508011038_153.returns[f508011038_153.inst++]; };
f508011038_153.returns = [];
f508011038_153.inst = 0;
// 336
ow508011038.JSBNG__SVGVKernElement = f508011038_153;
// 337
f508011038_154 = function() { return f508011038_154.returns[f508011038_154.inst++]; };
f508011038_154.returns = [];
f508011038_154.inst = 0;
// 338
ow508011038.JSBNG__SVGPaint = f508011038_154;
// 339
f508011038_155 = function() { return f508011038_155.returns[f508011038_155.inst++]; };
f508011038_155.returns = [];
f508011038_155.inst = 0;
// 340
ow508011038.JSBNG__SVGFETileElement = f508011038_155;
// 341
f508011038_156 = function() { return f508011038_156.returns[f508011038_156.inst++]; };
f508011038_156.returns = [];
f508011038_156.inst = 0;
// 342
ow508011038.JSBNG__Document = f508011038_156;
// 343
f508011038_157 = function() { return f508011038_157.returns[f508011038_157.inst++]; };
f508011038_157.returns = [];
f508011038_157.inst = 0;
// 344
ow508011038.JSBNG__XPathException = f508011038_157;
// 345
f508011038_158 = function() { return f508011038_158.returns[f508011038_158.inst++]; };
f508011038_158.returns = [];
f508011038_158.inst = 0;
// 346
ow508011038.JSBNG__TextMetrics = f508011038_158;
// 347
f508011038_159 = function() { return f508011038_159.returns[f508011038_159.inst++]; };
f508011038_159.returns = [];
f508011038_159.inst = 0;
// 348
ow508011038.JSBNG__HTMLHeadElement = f508011038_159;
// 349
f508011038_160 = function() { return f508011038_160.returns[f508011038_160.inst++]; };
f508011038_160.returns = [];
f508011038_160.inst = 0;
// 350
ow508011038.JSBNG__SVGFEComponentTransferElement = f508011038_160;
// 351
f508011038_161 = function() { return f508011038_161.returns[f508011038_161.inst++]; };
f508011038_161.returns = [];
f508011038_161.inst = 0;
// 352
ow508011038.JSBNG__ProgressEvent = f508011038_161;
// 353
f508011038_162 = function() { return f508011038_162.returns[f508011038_162.inst++]; };
f508011038_162.returns = [];
f508011038_162.inst = 0;
// 354
ow508011038.JSBNG__SVGAnimatedPreserveAspectRatio = f508011038_162;
// 355
f508011038_163 = function() { return f508011038_163.returns[f508011038_163.inst++]; };
f508011038_163.returns = [];
f508011038_163.inst = 0;
// 356
ow508011038.JSBNG__Node = f508011038_163;
// 357
f508011038_164 = function() { return f508011038_164.returns[f508011038_164.inst++]; };
f508011038_164.returns = [];
f508011038_164.inst = 0;
// 358
ow508011038.JSBNG__SVGRectElement = f508011038_164;
// 359
f508011038_165 = function() { return f508011038_165.returns[f508011038_165.inst++]; };
f508011038_165.returns = [];
f508011038_165.inst = 0;
// 360
ow508011038.JSBNG__CSSPageRule = f508011038_165;
// 361
f508011038_166 = function() { return f508011038_166.returns[f508011038_166.inst++]; };
f508011038_166.returns = [];
f508011038_166.inst = 0;
// 362
ow508011038.JSBNG__SVGLineElement = f508011038_166;
// 363
f508011038_167 = function() { return f508011038_167.returns[f508011038_167.inst++]; };
f508011038_167.returns = [];
f508011038_167.inst = 0;
// 364
ow508011038.JSBNG__CharacterData = f508011038_167;
// 365
f508011038_168 = function() { return f508011038_168.returns[f508011038_168.inst++]; };
f508011038_168.returns = [];
f508011038_168.inst = 0;
// 366
ow508011038.JSBNG__FileError = f508011038_168;
// 367
f508011038_169 = function() { return f508011038_169.returns[f508011038_169.inst++]; };
f508011038_169.returns = [];
f508011038_169.inst = 0;
// 368
ow508011038.JSBNG__SVGDocument = f508011038_169;
// 369
f508011038_170 = function() { return f508011038_170.returns[f508011038_170.inst++]; };
f508011038_170.returns = [];
f508011038_170.inst = 0;
// 370
ow508011038.JSBNG__MessagePort = f508011038_170;
// 371
f508011038_171 = function() { return f508011038_171.returns[f508011038_171.inst++]; };
f508011038_171.returns = [];
f508011038_171.inst = 0;
// 372
ow508011038.JSBNG__ClientRect = f508011038_171;
// 373
f508011038_172 = function() { return f508011038_172.returns[f508011038_172.inst++]; };
f508011038_172.returns = [];
f508011038_172.inst = 0;
// 374
ow508011038.JSBNG__Option = f508011038_172;
// 375
f508011038_173 = function() { return f508011038_173.returns[f508011038_173.inst++]; };
f508011038_173.returns = [];
f508011038_173.inst = 0;
// 376
ow508011038.JSBNG__SVGDescElement = f508011038_173;
// 377
f508011038_174 = function() { return f508011038_174.returns[f508011038_174.inst++]; };
f508011038_174.returns = [];
f508011038_174.inst = 0;
// 378
ow508011038.JSBNG__Notation = f508011038_174;
// 379
f508011038_175 = function() { return f508011038_175.returns[f508011038_175.inst++]; };
f508011038_175.returns = [];
f508011038_175.inst = 0;
// 380
ow508011038.JSBNG__WebGLBuffer = f508011038_175;
// 381
f508011038_176 = function() { return f508011038_176.returns[f508011038_176.inst++]; };
f508011038_176.returns = [];
f508011038_176.inst = 0;
// 382
ow508011038.JSBNG__StorageEvent = f508011038_176;
// 383
f508011038_177 = function() { return f508011038_177.returns[f508011038_177.inst++]; };
f508011038_177.returns = [];
f508011038_177.inst = 0;
// 384
ow508011038.JSBNG__HTMLFieldSetElement = f508011038_177;
// 385
f508011038_178 = function() { return f508011038_178.returns[f508011038_178.inst++]; };
f508011038_178.returns = [];
f508011038_178.inst = 0;
// 386
ow508011038.JSBNG__HTMLVideoElement = f508011038_178;
// 387
f508011038_179 = function() { return f508011038_179.returns[f508011038_179.inst++]; };
f508011038_179.returns = [];
f508011038_179.inst = 0;
// 388
ow508011038.JSBNG__SVGPathSegLinetoRel = f508011038_179;
// 389
f508011038_180 = function() { return f508011038_180.returns[f508011038_180.inst++]; };
f508011038_180.returns = [];
f508011038_180.inst = 0;
// 390
ow508011038.JSBNG__WebGLTexture = f508011038_180;
// 391
f508011038_181 = function() { return f508011038_181.returns[f508011038_181.inst++]; };
f508011038_181.returns = [];
f508011038_181.inst = 0;
// 392
ow508011038.JSBNG__UIEvent = f508011038_181;
// 393
f508011038_182 = function() { return f508011038_182.returns[f508011038_182.inst++]; };
f508011038_182.returns = [];
f508011038_182.inst = 0;
// 394
ow508011038.JSBNG__HTMLTableRowElement = f508011038_182;
// 395
f508011038_183 = function() { return f508011038_183.returns[f508011038_183.inst++]; };
f508011038_183.returns = [];
f508011038_183.inst = 0;
// 396
ow508011038.JSBNG__HTMLDListElement = f508011038_183;
// 397
f508011038_184 = function() { return f508011038_184.returns[f508011038_184.inst++]; };
f508011038_184.returns = [];
f508011038_184.inst = 0;
// 398
ow508011038.JSBNG__File = f508011038_184;
// 399
f508011038_185 = function() { return f508011038_185.returns[f508011038_185.inst++]; };
f508011038_185.returns = [];
f508011038_185.inst = 0;
// 400
ow508011038.JSBNG__SVGEllipseElement = f508011038_185;
// 401
f508011038_186 = function() { return f508011038_186.returns[f508011038_186.inst++]; };
f508011038_186.returns = [];
f508011038_186.inst = 0;
// 402
ow508011038.JSBNG__SVGFEFuncRElement = f508011038_186;
// 403
f508011038_187 = function() { return f508011038_187.returns[f508011038_187.inst++]; };
f508011038_187.returns = [];
f508011038_187.inst = 0;
// 404
ow508011038.JSBNG__Int32Array = f508011038_187;
// 405
f508011038_188 = function() { return f508011038_188.returns[f508011038_188.inst++]; };
f508011038_188.returns = [];
f508011038_188.inst = 0;
// 406
ow508011038.JSBNG__HTMLAllCollection = f508011038_188;
// 407
f508011038_189 = function() { return f508011038_189.returns[f508011038_189.inst++]; };
f508011038_189.returns = [];
f508011038_189.inst = 0;
// 408
ow508011038.JSBNG__CSSValue = f508011038_189;
// 409
f508011038_190 = function() { return f508011038_190.returns[f508011038_190.inst++]; };
f508011038_190.returns = [];
f508011038_190.inst = 0;
// 410
ow508011038.JSBNG__SVGAnimatedNumberList = f508011038_190;
// 411
f508011038_191 = function() { return f508011038_191.returns[f508011038_191.inst++]; };
f508011038_191.returns = [];
f508011038_191.inst = 0;
// 412
ow508011038.JSBNG__HTMLParamElement = f508011038_191;
// 413
f508011038_192 = function() { return f508011038_192.returns[f508011038_192.inst++]; };
f508011038_192.returns = [];
f508011038_192.inst = 0;
// 414
ow508011038.JSBNG__SVGElementInstance = f508011038_192;
// 415
f508011038_193 = function() { return f508011038_193.returns[f508011038_193.inst++]; };
f508011038_193.returns = [];
f508011038_193.inst = 0;
// 416
ow508011038.JSBNG__HTMLModElement = f508011038_193;
// 417
f508011038_194 = function() { return f508011038_194.returns[f508011038_194.inst++]; };
f508011038_194.returns = [];
f508011038_194.inst = 0;
// 418
ow508011038.JSBNG__SVGPathSegLinetoHorizontalRel = f508011038_194;
// 419
f508011038_195 = function() { return f508011038_195.returns[f508011038_195.inst++]; };
f508011038_195.returns = [];
f508011038_195.inst = 0;
// 420
ow508011038.JSBNG__CSSFontFaceRule = f508011038_195;
// 421
f508011038_196 = function() { return f508011038_196.returns[f508011038_196.inst++]; };
f508011038_196.returns = [];
f508011038_196.inst = 0;
// 422
ow508011038.JSBNG__SVGPathSeg = f508011038_196;
// 423
f508011038_197 = function() { return f508011038_197.returns[f508011038_197.inst++]; };
f508011038_197.returns = [];
f508011038_197.inst = 0;
// 424
ow508011038.JSBNG__CSSStyleDeclaration = f508011038_197;
// 425
f508011038_198 = function() { return f508011038_198.returns[f508011038_198.inst++]; };
f508011038_198.returns = [];
f508011038_198.inst = 0;
// 426
ow508011038.JSBNG__WebSocket = f508011038_198;
// 427
f508011038_199 = function() { return f508011038_199.returns[f508011038_199.inst++]; };
f508011038_199.returns = [];
f508011038_199.inst = 0;
// 428
ow508011038.JSBNG__Rect = f508011038_199;
// 429
f508011038_200 = function() { return f508011038_200.returns[f508011038_200.inst++]; };
f508011038_200.returns = [];
f508011038_200.inst = 0;
// 430
ow508011038.JSBNG__StyleSheet = f508011038_200;
// 431
f508011038_201 = function() { return f508011038_201.returns[f508011038_201.inst++]; };
f508011038_201.returns = [];
f508011038_201.inst = 0;
// 432
ow508011038.JSBNG__SVGPathSegLinetoHorizontalAbs = f508011038_201;
// 433
f508011038_202 = function() { return f508011038_202.returns[f508011038_202.inst++]; };
f508011038_202.returns = [];
f508011038_202.inst = 0;
// 434
ow508011038.JSBNG__SVGColor = f508011038_202;
// 435
f508011038_203 = function() { return f508011038_203.returns[f508011038_203.inst++]; };
f508011038_203.returns = [];
f508011038_203.inst = 0;
// 436
ow508011038.JSBNG__ArrayBuffer = f508011038_203;
// 437
f508011038_204 = function() { return f508011038_204.returns[f508011038_204.inst++]; };
f508011038_204.returns = [];
f508011038_204.inst = 0;
// 438
ow508011038.JSBNG__SVGComponentTransferFunctionElement = f508011038_204;
// 439
f508011038_205 = function() { return f508011038_205.returns[f508011038_205.inst++]; };
f508011038_205.returns = [];
f508011038_205.inst = 0;
// 440
ow508011038.JSBNG__SVGStyleElement = f508011038_205;
// 441
f508011038_206 = function() { return f508011038_206.returns[f508011038_206.inst++]; };
f508011038_206.returns = [];
f508011038_206.inst = 0;
// 442
ow508011038.JSBNG__Int16Array = f508011038_206;
// 443
f508011038_207 = function() { return f508011038_207.returns[f508011038_207.inst++]; };
f508011038_207.returns = [];
f508011038_207.inst = 0;
// 444
ow508011038.JSBNG__HTMLOutputElement = f508011038_207;
// 445
f508011038_208 = function() { return f508011038_208.returns[f508011038_208.inst++]; };
f508011038_208.returns = [];
f508011038_208.inst = 0;
// 446
ow508011038.JSBNG__SVGNumberList = f508011038_208;
// 447
f508011038_209 = function() { return f508011038_209.returns[f508011038_209.inst++]; };
f508011038_209.returns = [];
f508011038_209.inst = 0;
// 448
ow508011038.JSBNG__DataView = f508011038_209;
// 449
f508011038_210 = function() { return f508011038_210.returns[f508011038_210.inst++]; };
f508011038_210.returns = [];
f508011038_210.inst = 0;
// 450
ow508011038.JSBNG__DeviceOrientationEvent = f508011038_210;
// 451
f508011038_211 = function() { return f508011038_211.returns[f508011038_211.inst++]; };
f508011038_211.returns = [];
f508011038_211.inst = 0;
// 452
ow508011038.JSBNG__Blob = f508011038_211;
// 453
f508011038_212 = function() { return f508011038_212.returns[f508011038_212.inst++]; };
f508011038_212.returns = [];
f508011038_212.inst = 0;
// 454
ow508011038.JSBNG__SVGFEFloodElement = f508011038_212;
// 455
f508011038_213 = function() { return f508011038_213.returns[f508011038_213.inst++]; };
f508011038_213.returns = [];
f508011038_213.inst = 0;
// 456
ow508011038.JSBNG__HTMLStyleElement = f508011038_213;
// 457
f508011038_214 = function() { return f508011038_214.returns[f508011038_214.inst++]; };
f508011038_214.returns = [];
f508011038_214.inst = 0;
// 458
ow508011038.JSBNG__HTMLBaseElement = f508011038_214;
// 459
f508011038_215 = function() { return f508011038_215.returns[f508011038_215.inst++]; };
f508011038_215.returns = [];
f508011038_215.inst = 0;
// 460
ow508011038.JSBNG__HTMLBRElement = f508011038_215;
// 461
f508011038_216 = function() { return f508011038_216.returns[f508011038_216.inst++]; };
f508011038_216.returns = [];
f508011038_216.inst = 0;
// 462
ow508011038.JSBNG__FileReader = f508011038_216;
// 463
f508011038_217 = function() { return f508011038_217.returns[f508011038_217.inst++]; };
f508011038_217.returns = [];
f508011038_217.inst = 0;
// 464
ow508011038.JSBNG__SVGFEBlendElement = f508011038_217;
// 465
f508011038_218 = function() { return f508011038_218.returns[f508011038_218.inst++]; };
f508011038_218.returns = [];
f508011038_218.inst = 0;
// 466
ow508011038.JSBNG__HTMLHtmlElement = f508011038_218;
// 467
f508011038_219 = function() { return f508011038_219.returns[f508011038_219.inst++]; };
f508011038_219.returns = [];
f508011038_219.inst = 0;
// 468
ow508011038.JSBNG__SVGFEConvolveMatrixElement = f508011038_219;
// 469
f508011038_220 = function() { return f508011038_220.returns[f508011038_220.inst++]; };
f508011038_220.returns = [];
f508011038_220.inst = 0;
// 470
ow508011038.JSBNG__SVGFEGaussianBlurElement = f508011038_220;
// 471
f508011038_221 = function() { return f508011038_221.returns[f508011038_221.inst++]; };
f508011038_221.returns = [];
f508011038_221.inst = 0;
// 472
ow508011038.JSBNG__HTMLTextAreaElement = f508011038_221;
// 473
f508011038_222 = function() { return f508011038_222.returns[f508011038_222.inst++]; };
f508011038_222.returns = [];
f508011038_222.inst = 0;
// 474
ow508011038.JSBNG__WebGLRenderbuffer = f508011038_222;
// 475
f508011038_223 = function() { return f508011038_223.returns[f508011038_223.inst++]; };
f508011038_223.returns = [];
f508011038_223.inst = 0;
// 476
ow508011038.JSBNG__SVGTextElement = f508011038_223;
// 477
f508011038_224 = function() { return f508011038_224.returns[f508011038_224.inst++]; };
f508011038_224.returns = [];
f508011038_224.inst = 0;
// 478
ow508011038.JSBNG__SVGFEOffsetElement = f508011038_224;
// 479
f508011038_225 = function() { return f508011038_225.returns[f508011038_225.inst++]; };
f508011038_225.returns = [];
f508011038_225.inst = 0;
// 480
ow508011038.JSBNG__RGBColor = f508011038_225;
// 481
f508011038_226 = function() { return f508011038_226.returns[f508011038_226.inst++]; };
f508011038_226.returns = [];
f508011038_226.inst = 0;
// 482
ow508011038.JSBNG__SVGGlyphElement = f508011038_226;
// 483
f508011038_227 = function() { return f508011038_227.returns[f508011038_227.inst++]; };
f508011038_227.returns = [];
f508011038_227.inst = 0;
// 484
ow508011038.JSBNG__Float32Array = f508011038_227;
// 485
f508011038_228 = function() { return f508011038_228.returns[f508011038_228.inst++]; };
f508011038_228.returns = [];
f508011038_228.inst = 0;
// 486
ow508011038.JSBNG__HTMLCanvasElement = f508011038_228;
// 487
f508011038_229 = function() { return f508011038_229.returns[f508011038_229.inst++]; };
f508011038_229.returns = [];
f508011038_229.inst = 0;
// 488
ow508011038.JSBNG__ProcessingInstruction = f508011038_229;
// 489
f508011038_230 = function() { return f508011038_230.returns[f508011038_230.inst++]; };
f508011038_230.returns = [];
f508011038_230.inst = 0;
// 490
ow508011038.JSBNG__SVGZoomEvent = f508011038_230;
// 491
f508011038_231 = function() { return f508011038_231.returns[f508011038_231.inst++]; };
f508011038_231.returns = [];
f508011038_231.inst = 0;
// 492
ow508011038.JSBNG__HTMLFrameElement = f508011038_231;
// 493
f508011038_232 = function() { return f508011038_232.returns[f508011038_232.inst++]; };
f508011038_232.returns = [];
f508011038_232.inst = 0;
// 494
ow508011038.JSBNG__SVGElementInstanceList = f508011038_232;
// 495
f508011038_233 = function() { return f508011038_233.returns[f508011038_233.inst++]; };
f508011038_233.returns = [];
f508011038_233.inst = 0;
// 496
ow508011038.JSBNG__SVGFEDisplacementMapElement = f508011038_233;
// 497
f508011038_234 = function() { return f508011038_234.returns[f508011038_234.inst++]; };
f508011038_234.returns = [];
f508011038_234.inst = 0;
// 498
ow508011038.JSBNG__SVGPathSegCurvetoCubicSmoothRel = f508011038_234;
// 499
f508011038_235 = function() { return f508011038_235.returns[f508011038_235.inst++]; };
f508011038_235.returns = [];
f508011038_235.inst = 0;
// 500
ow508011038.JSBNG__HTMLElement = f508011038_235;
// 501
f508011038_236 = function() { return f508011038_236.returns[f508011038_236.inst++]; };
f508011038_236.returns = [];
f508011038_236.inst = 0;
// 502
ow508011038.JSBNG__HTMLSelectElement = f508011038_236;
// 503
f508011038_237 = function() { return f508011038_237.returns[f508011038_237.inst++]; };
f508011038_237.returns = [];
f508011038_237.inst = 0;
// 504
ow508011038.JSBNG__Int8Array = f508011038_237;
// 505
f508011038_238 = function() { return f508011038_238.returns[f508011038_238.inst++]; };
f508011038_238.returns = [];
f508011038_238.inst = 0;
// 506
ow508011038.JSBNG__SVGFEDistantLightElement = f508011038_238;
// 507
f508011038_239 = function() { return f508011038_239.returns[f508011038_239.inst++]; };
f508011038_239.returns = [];
f508011038_239.inst = 0;
// 508
ow508011038.JSBNG__ImageData = f508011038_239;
// 509
f508011038_240 = function() { return f508011038_240.returns[f508011038_240.inst++]; };
f508011038_240.returns = [];
f508011038_240.inst = 0;
// 510
ow508011038.JSBNG__SVGFEFuncBElement = f508011038_240;
// 511
f508011038_241 = function() { return f508011038_241.returns[f508011038_241.inst++]; };
f508011038_241.returns = [];
f508011038_241.inst = 0;
// 512
ow508011038.JSBNG__HTMLDocument = f508011038_241;
// 513
f508011038_242 = function() { return f508011038_242.returns[f508011038_242.inst++]; };
f508011038_242.returns = [];
f508011038_242.inst = 0;
// 514
ow508011038.JSBNG__SVGCircleElement = f508011038_242;
// 515
f508011038_243 = function() { return f508011038_243.returns[f508011038_243.inst++]; };
f508011038_243.returns = [];
f508011038_243.inst = 0;
// 516
ow508011038.JSBNG__HTMLCollection = f508011038_243;
// 517
f508011038_244 = function() { return f508011038_244.returns[f508011038_244.inst++]; };
f508011038_244.returns = [];
f508011038_244.inst = 0;
// 518
ow508011038.JSBNG__SVGSetElement = f508011038_244;
// 519
f508011038_245 = function() { return f508011038_245.returns[f508011038_245.inst++]; };
f508011038_245.returns = [];
f508011038_245.inst = 0;
// 520
ow508011038.JSBNG__SVGFEMergeElement = f508011038_245;
// 521
f508011038_246 = function() { return f508011038_246.returns[f508011038_246.inst++]; };
f508011038_246.returns = [];
f508011038_246.inst = 0;
// 522
ow508011038.JSBNG__HTMLDirectoryElement = f508011038_246;
// 523
f508011038_247 = function() { return f508011038_247.returns[f508011038_247.inst++]; };
f508011038_247.returns = [];
f508011038_247.inst = 0;
// 524
ow508011038.JSBNG__CSSMediaRule = f508011038_247;
// 525
f508011038_248 = function() { return f508011038_248.returns[f508011038_248.inst++]; };
f508011038_248.returns = [];
f508011038_248.inst = 0;
// 526
ow508011038.JSBNG__MessageEvent = f508011038_248;
// 527
f508011038_249 = function() { return f508011038_249.returns[f508011038_249.inst++]; };
f508011038_249.returns = [];
f508011038_249.inst = 0;
// 528
ow508011038.JSBNG__SVGFESpecularLightingElement = f508011038_249;
// 529
f508011038_250 = function() { return f508011038_250.returns[f508011038_250.inst++]; };
f508011038_250.returns = [];
f508011038_250.inst = 0;
// 530
ow508011038.JSBNG__DOMException = f508011038_250;
// 531
f508011038_251 = function() { return f508011038_251.returns[f508011038_251.inst++]; };
f508011038_251.returns = [];
f508011038_251.inst = 0;
// 532
ow508011038.JSBNG__SVGNumber = f508011038_251;
// 533
f508011038_252 = function() { return f508011038_252.returns[f508011038_252.inst++]; };
f508011038_252.returns = [];
f508011038_252.inst = 0;
// 534
ow508011038.JSBNG__SVGFontFaceSrcElement = f508011038_252;
// 535
f508011038_253 = function() { return f508011038_253.returns[f508011038_253.inst++]; };
f508011038_253.returns = [];
f508011038_253.inst = 0;
// 536
ow508011038.JSBNG__CSSRule = f508011038_253;
// 537
f508011038_254 = function() { return f508011038_254.returns[f508011038_254.inst++]; };
f508011038_254.returns = [];
f508011038_254.inst = 0;
// 538
ow508011038.JSBNG__SVGElement = f508011038_254;
// 539
f508011038_255 = function() { return f508011038_255.returns[f508011038_255.inst++]; };
f508011038_255.returns = [];
f508011038_255.inst = 0;
// 540
ow508011038.JSBNG__WebKitCSSMatrix = f508011038_255;
// 541
f508011038_256 = function() { return f508011038_256.returns[f508011038_256.inst++]; };
f508011038_256.returns = [];
f508011038_256.inst = 0;
// 542
ow508011038.JSBNG__SVGMissingGlyphElement = f508011038_256;
// 543
f508011038_257 = function() { return f508011038_257.returns[f508011038_257.inst++]; };
f508011038_257.returns = [];
f508011038_257.inst = 0;
// 544
ow508011038.JSBNG__HTMLScriptElement = f508011038_257;
// 545
f508011038_258 = function() { return f508011038_258.returns[f508011038_258.inst++]; };
f508011038_258.returns = [];
f508011038_258.inst = 0;
// 546
ow508011038.JSBNG__DOMImplementation = f508011038_258;
// 547
f508011038_259 = function() { return f508011038_259.returns[f508011038_259.inst++]; };
f508011038_259.returns = [];
f508011038_259.inst = 0;
// 548
ow508011038.JSBNG__SVGLength = f508011038_259;
// 549
f508011038_260 = function() { return f508011038_260.returns[f508011038_260.inst++]; };
f508011038_260.returns = [];
f508011038_260.inst = 0;
// 550
ow508011038.JSBNG__HTMLOptGroupElement = f508011038_260;
// 551
f508011038_261 = function() { return f508011038_261.returns[f508011038_261.inst++]; };
f508011038_261.returns = [];
f508011038_261.inst = 0;
// 552
ow508011038.JSBNG__SVGPathSegLinetoVerticalAbs = f508011038_261;
// 553
f508011038_262 = function() { return f508011038_262.returns[f508011038_262.inst++]; };
f508011038_262.returns = [];
f508011038_262.inst = 0;
// 554
ow508011038.JSBNG__SVGTextPositioningElement = f508011038_262;
// 555
f508011038_263 = function() { return f508011038_263.returns[f508011038_263.inst++]; };
f508011038_263.returns = [];
f508011038_263.inst = 0;
// 556
ow508011038.JSBNG__HTMLKeygenElement = f508011038_263;
// 557
f508011038_264 = function() { return f508011038_264.returns[f508011038_264.inst++]; };
f508011038_264.returns = [];
f508011038_264.inst = 0;
// 558
ow508011038.JSBNG__SVGFEFuncGElement = f508011038_264;
// 559
f508011038_265 = function() { return f508011038_265.returns[f508011038_265.inst++]; };
f508011038_265.returns = [];
f508011038_265.inst = 0;
// 560
ow508011038.JSBNG__HTMLAreaElement = f508011038_265;
// 561
f508011038_266 = function() { return f508011038_266.returns[f508011038_266.inst++]; };
f508011038_266.returns = [];
f508011038_266.inst = 0;
// 562
ow508011038.JSBNG__HTMLFrameSetElement = f508011038_266;
// 563
f508011038_267 = function() { return f508011038_267.returns[f508011038_267.inst++]; };
f508011038_267.returns = [];
f508011038_267.inst = 0;
// 564
ow508011038.JSBNG__SVGPathSegCurvetoQuadraticRel = f508011038_267;
// 565
f508011038_268 = function() { return f508011038_268.returns[f508011038_268.inst++]; };
f508011038_268.returns = [];
f508011038_268.inst = 0;
// 566
ow508011038.JSBNG__HTMLIFrameElement = f508011038_268;
// 567
f508011038_269 = function() { return f508011038_269.returns[f508011038_269.inst++]; };
f508011038_269.returns = [];
f508011038_269.inst = 0;
// 568
ow508011038.JSBNG__Comment = f508011038_269;
// 569
f508011038_270 = function() { return f508011038_270.returns[f508011038_270.inst++]; };
f508011038_270.returns = [];
f508011038_270.inst = 0;
// 570
ow508011038.JSBNG__Event = f508011038_270;
// 571
f508011038_271 = function() { return f508011038_271.returns[f508011038_271.inst++]; };
f508011038_271.returns = [];
f508011038_271.inst = 0;
// 572
ow508011038.JSBNG__Storage = f508011038_271;
// 573
f508011038_272 = function() { return f508011038_272.returns[f508011038_272.inst++]; };
f508011038_272.returns = [];
f508011038_272.inst = 0;
// 574
ow508011038.JSBNG__XMLSerializer = f508011038_272;
// 575
f508011038_273 = function() { return f508011038_273.returns[f508011038_273.inst++]; };
f508011038_273.returns = [];
f508011038_273.inst = 0;
// 576
ow508011038.JSBNG__Range = f508011038_273;
// 577
f508011038_274 = function() { return f508011038_274.returns[f508011038_274.inst++]; };
f508011038_274.returns = [];
f508011038_274.inst = 0;
// 578
ow508011038.JSBNG__HTMLPreElement = f508011038_274;
// 579
f508011038_275 = function() { return f508011038_275.returns[f508011038_275.inst++]; };
f508011038_275.returns = [];
f508011038_275.inst = 0;
// 580
ow508011038.JSBNG__DOMStringList = f508011038_275;
// 581
f508011038_276 = function() { return f508011038_276.returns[f508011038_276.inst++]; };
f508011038_276.returns = [];
f508011038_276.inst = 0;
// 582
ow508011038.JSBNG__SVGPathSegCurvetoQuadraticSmoothAbs = f508011038_276;
// 583
f508011038_277 = function() { return f508011038_277.returns[f508011038_277.inst++]; };
f508011038_277.returns = [];
f508011038_277.inst = 0;
// 584
ow508011038.JSBNG__SVGRect = f508011038_277;
// 585
f508011038_278 = function() { return f508011038_278.returns[f508011038_278.inst++]; };
f508011038_278.returns = [];
f508011038_278.inst = 0;
// 586
ow508011038.JSBNG__SVGFontFaceFormatElement = f508011038_278;
// 587
f508011038_279 = function() { return f508011038_279.returns[f508011038_279.inst++]; };
f508011038_279.returns = [];
f508011038_279.inst = 0;
// 588
ow508011038.JSBNG__SVGAnimateTransformElement = f508011038_279;
// 589
f508011038_280 = function() { return f508011038_280.returns[f508011038_280.inst++]; };
f508011038_280.returns = [];
f508011038_280.inst = 0;
// 590
ow508011038.JSBNG__HTMLOListElement = f508011038_280;
// 591
f508011038_281 = function() { return f508011038_281.returns[f508011038_281.inst++]; };
f508011038_281.returns = [];
f508011038_281.inst = 0;
// 592
ow508011038.JSBNG__HTMLFormElement = f508011038_281;
// 593
f508011038_282 = function() { return f508011038_282.returns[f508011038_282.inst++]; };
f508011038_282.returns = [];
f508011038_282.inst = 0;
// 594
ow508011038.JSBNG__SVGPathSegClosePath = f508011038_282;
// 595
f508011038_283 = function() { return f508011038_283.returns[f508011038_283.inst++]; };
f508011038_283.returns = [];
f508011038_283.inst = 0;
// 596
ow508011038.JSBNG__SVGPathSegCurvetoCubicSmoothAbs = f508011038_283;
// 597
f508011038_284 = function() { return f508011038_284.returns[f508011038_284.inst++]; };
f508011038_284.returns = [];
f508011038_284.inst = 0;
// 598
ow508011038.JSBNG__SVGPathSegArcRel = f508011038_284;
// 599
f508011038_285 = function() { return f508011038_285.returns[f508011038_285.inst++]; };
f508011038_285.returns = [];
f508011038_285.inst = 0;
// 600
ow508011038.JSBNG__EventException = f508011038_285;
// 601
f508011038_286 = function() { return f508011038_286.returns[f508011038_286.inst++]; };
f508011038_286.returns = [];
f508011038_286.inst = 0;
// 602
ow508011038.JSBNG__SVGAnimatedString = f508011038_286;
// 603
f508011038_287 = function() { return f508011038_287.returns[f508011038_287.inst++]; };
f508011038_287.returns = [];
f508011038_287.inst = 0;
// 604
ow508011038.JSBNG__SVGTransformList = f508011038_287;
// 605
f508011038_288 = function() { return f508011038_288.returns[f508011038_288.inst++]; };
f508011038_288.returns = [];
f508011038_288.inst = 0;
// 606
ow508011038.JSBNG__SVGFEMorphologyElement = f508011038_288;
// 607
f508011038_289 = function() { return f508011038_289.returns[f508011038_289.inst++]; };
f508011038_289.returns = [];
f508011038_289.inst = 0;
// 608
ow508011038.JSBNG__SVGAnimatedLength = f508011038_289;
// 609
f508011038_290 = function() { return f508011038_290.returns[f508011038_290.inst++]; };
f508011038_290.returns = [];
f508011038_290.inst = 0;
// 610
ow508011038.JSBNG__SVGPolygonElement = f508011038_290;
// 611
f508011038_291 = function() { return f508011038_291.returns[f508011038_291.inst++]; };
f508011038_291.returns = [];
f508011038_291.inst = 0;
// 612
ow508011038.JSBNG__SVGPathSegLinetoAbs = f508011038_291;
// 613
f508011038_292 = function() { return f508011038_292.returns[f508011038_292.inst++]; };
f508011038_292.returns = [];
f508011038_292.inst = 0;
// 614
ow508011038.JSBNG__HTMLMediaElement = f508011038_292;
// 615
ow508011038.JSBNG__XMLDocument = f508011038_156;
// 616
f508011038_293 = function() { return f508011038_293.returns[f508011038_293.inst++]; };
f508011038_293.returns = [];
f508011038_293.inst = 0;
// 617
ow508011038.JSBNG__SVGMaskElement = f508011038_293;
// 618
f508011038_294 = function() { return f508011038_294.returns[f508011038_294.inst++]; };
f508011038_294.returns = [];
f508011038_294.inst = 0;
// 619
ow508011038.JSBNG__HTMLHeadingElement = f508011038_294;
// 620
f508011038_295 = function() { return f508011038_295.returns[f508011038_295.inst++]; };
f508011038_295.returns = [];
f508011038_295.inst = 0;
// 621
ow508011038.JSBNG__TextEvent = f508011038_295;
// 622
f508011038_296 = function() { return f508011038_296.returns[f508011038_296.inst++]; };
f508011038_296.returns = [];
f508011038_296.inst = 0;
// 623
ow508011038.JSBNG__HTMLMeterElement = f508011038_296;
// 624
f508011038_297 = function() { return f508011038_297.returns[f508011038_297.inst++]; };
f508011038_297.returns = [];
f508011038_297.inst = 0;
// 625
ow508011038.JSBNG__SVGPathElement = f508011038_297;
// 626
f508011038_298 = function() { return f508011038_298.returns[f508011038_298.inst++]; };
f508011038_298.returns = [];
f508011038_298.inst = 0;
// 627
ow508011038.JSBNG__SVGStringList = f508011038_298;
// 628
f508011038_299 = function() { return f508011038_299.returns[f508011038_299.inst++]; };
f508011038_299.returns = [];
f508011038_299.inst = 0;
// 629
ow508011038.JSBNG__HTMLAppletElement = f508011038_299;
// 630
f508011038_300 = function() { return f508011038_300.returns[f508011038_300.inst++]; };
f508011038_300.returns = [];
f508011038_300.inst = 0;
// 631
ow508011038.JSBNG__FileList = f508011038_300;
// 632
f508011038_301 = function() { return f508011038_301.returns[f508011038_301.inst++]; };
f508011038_301.returns = [];
f508011038_301.inst = 0;
// 633
ow508011038.JSBNG__CanvasRenderingContext2D = f508011038_301;
// 634
f508011038_302 = function() { return f508011038_302.returns[f508011038_302.inst++]; };
f508011038_302.returns = [];
f508011038_302.inst = 0;
// 635
ow508011038.JSBNG__MessageChannel = f508011038_302;
// 636
f508011038_303 = function() { return f508011038_303.returns[f508011038_303.inst++]; };
f508011038_303.returns = [];
f508011038_303.inst = 0;
// 637
ow508011038.JSBNG__WebGLRenderingContext = f508011038_303;
// 638
f508011038_304 = function() { return f508011038_304.returns[f508011038_304.inst++]; };
f508011038_304.returns = [];
f508011038_304.inst = 0;
// 639
ow508011038.JSBNG__HTMLMarqueeElement = f508011038_304;
// 640
f508011038_305 = function() { return f508011038_305.returns[f508011038_305.inst++]; };
f508011038_305.returns = [];
f508011038_305.inst = 0;
// 641
ow508011038.JSBNG__WebKitCSSKeyframesRule = f508011038_305;
// 642
f508011038_306 = function() { return f508011038_306.returns[f508011038_306.inst++]; };
f508011038_306.returns = [];
f508011038_306.inst = 0;
// 643
ow508011038.JSBNG__XSLTProcessor = f508011038_306;
// 644
f508011038_307 = function() { return f508011038_307.returns[f508011038_307.inst++]; };
f508011038_307.returns = [];
f508011038_307.inst = 0;
// 645
ow508011038.JSBNG__CSSImportRule = f508011038_307;
// 646
f508011038_308 = function() { return f508011038_308.returns[f508011038_308.inst++]; };
f508011038_308.returns = [];
f508011038_308.inst = 0;
// 647
ow508011038.JSBNG__BeforeLoadEvent = f508011038_308;
// 648
f508011038_309 = function() { return f508011038_309.returns[f508011038_309.inst++]; };
f508011038_309.returns = [];
f508011038_309.inst = 0;
// 649
ow508011038.JSBNG__PageTransitionEvent = f508011038_309;
// 650
f508011038_310 = function() { return f508011038_310.returns[f508011038_310.inst++]; };
f508011038_310.returns = [];
f508011038_310.inst = 0;
// 651
ow508011038.JSBNG__CSSRuleList = f508011038_310;
// 652
f508011038_311 = function() { return f508011038_311.returns[f508011038_311.inst++]; };
f508011038_311.returns = [];
f508011038_311.inst = 0;
// 653
ow508011038.JSBNG__SVGAnimatedLengthList = f508011038_311;
// 654
f508011038_312 = function() { return f508011038_312.returns[f508011038_312.inst++]; };
f508011038_312.returns = [];
f508011038_312.inst = 0;
// 655
ow508011038.JSBNG__SVGTransform = f508011038_312;
// 656
f508011038_313 = function() { return f508011038_313.returns[f508011038_313.inst++]; };
f508011038_313.returns = [];
f508011038_313.inst = 0;
// 657
ow508011038.JSBNG__SVGTextContentElement = f508011038_313;
// 658
f508011038_314 = function() { return f508011038_314.returns[f508011038_314.inst++]; };
f508011038_314.returns = [];
f508011038_314.inst = 0;
// 659
ow508011038.JSBNG__HTMLTableSectionElement = f508011038_314;
// 660
f508011038_315 = function() { return f508011038_315.returns[f508011038_315.inst++]; };
f508011038_315.returns = [];
f508011038_315.inst = 0;
// 661
ow508011038.JSBNG__SVGRadialGradientElement = f508011038_315;
// 662
f508011038_316 = function() { return f508011038_316.returns[f508011038_316.inst++]; };
f508011038_316.returns = [];
f508011038_316.inst = 0;
// 663
ow508011038.JSBNG__HTMLTableCellElement = f508011038_316;
// 664
f508011038_317 = function() { return f508011038_317.returns[f508011038_317.inst++]; };
f508011038_317.returns = [];
f508011038_317.inst = 0;
// 665
ow508011038.JSBNG__SVGCursorElement = f508011038_317;
// 666
f508011038_318 = function() { return f508011038_318.returns[f508011038_318.inst++]; };
f508011038_318.returns = [];
f508011038_318.inst = 0;
// 667
ow508011038.JSBNG__DocumentFragment = f508011038_318;
// 668
f508011038_319 = function() { return f508011038_319.returns[f508011038_319.inst++]; };
f508011038_319.returns = [];
f508011038_319.inst = 0;
// 669
ow508011038.JSBNG__SVGPathSegCurvetoCubicAbs = f508011038_319;
// 670
f508011038_320 = function() { return f508011038_320.returns[f508011038_320.inst++]; };
f508011038_320.returns = [];
f508011038_320.inst = 0;
// 671
ow508011038.JSBNG__SVGUseElement = f508011038_320;
// 672
f508011038_321 = function() { return f508011038_321.returns[f508011038_321.inst++]; };
f508011038_321.returns = [];
f508011038_321.inst = 0;
// 673
ow508011038.JSBNG__FormData = f508011038_321;
// 674
f508011038_322 = function() { return f508011038_322.returns[f508011038_322.inst++]; };
f508011038_322.returns = [];
f508011038_322.inst = 0;
// 675
ow508011038.JSBNG__SVGPreserveAspectRatio = f508011038_322;
// 676
f508011038_323 = function() { return f508011038_323.returns[f508011038_323.inst++]; };
f508011038_323.returns = [];
f508011038_323.inst = 0;
// 677
ow508011038.JSBNG__HTMLMapElement = f508011038_323;
// 678
f508011038_324 = function() { return f508011038_324.returns[f508011038_324.inst++]; };
f508011038_324.returns = [];
f508011038_324.inst = 0;
// 679
ow508011038.JSBNG__XPathResult = f508011038_324;
// 680
f508011038_325 = function() { return f508011038_325.returns[f508011038_325.inst++]; };
f508011038_325.returns = [];
f508011038_325.inst = 0;
// 681
ow508011038.JSBNG__HTMLLIElement = f508011038_325;
// 682
f508011038_326 = function() { return f508011038_326.returns[f508011038_326.inst++]; };
f508011038_326.returns = [];
f508011038_326.inst = 0;
// 683
ow508011038.JSBNG__SVGSwitchElement = f508011038_326;
// 684
f508011038_327 = function() { return f508011038_327.returns[f508011038_327.inst++]; };
f508011038_327.returns = [];
f508011038_327.inst = 0;
// 685
ow508011038.JSBNG__SVGLengthList = f508011038_327;
// 686
f508011038_328 = function() { return f508011038_328.returns[f508011038_328.inst++]; };
f508011038_328.returns = [];
f508011038_328.inst = 0;
// 687
ow508011038.JSBNG__Plugin = f508011038_328;
// 688
f508011038_329 = function() { return f508011038_329.returns[f508011038_329.inst++]; };
f508011038_329.returns = [];
f508011038_329.inst = 0;
// 689
ow508011038.JSBNG__HTMLParagraphElement = f508011038_329;
// 690
f508011038_330 = function() { return f508011038_330.returns[f508011038_330.inst++]; };
f508011038_330.returns = [];
f508011038_330.inst = 0;
// 691
ow508011038.JSBNG__SVGPathSegArcAbs = f508011038_330;
// 692
f508011038_331 = function() { return f508011038_331.returns[f508011038_331.inst++]; };
f508011038_331.returns = [];
f508011038_331.inst = 0;
// 693
ow508011038.JSBNG__SVGAnimatedBoolean = f508011038_331;
// 694
f508011038_332 = function() { return f508011038_332.returns[f508011038_332.inst++]; };
f508011038_332.returns = [];
f508011038_332.inst = 0;
// 695
ow508011038.JSBNG__CSSStyleRule = f508011038_332;
// 696
f508011038_333 = function() { return f508011038_333.returns[f508011038_333.inst++]; };
f508011038_333.returns = [];
f508011038_333.inst = 0;
// 697
ow508011038.JSBNG__SVGFontFaceUriElement = f508011038_333;
// 698
f508011038_334 = function() { return f508011038_334.returns[f508011038_334.inst++]; };
f508011038_334.returns = [];
f508011038_334.inst = 0;
// 699
ow508011038.JSBNG__Text = f508011038_334;
// 700
f508011038_335 = function() { return f508011038_335.returns[f508011038_335.inst++]; };
f508011038_335.returns = [];
f508011038_335.inst = 0;
// 701
ow508011038.JSBNG__HTMLUListElement = f508011038_335;
// 702
f508011038_336 = function() { return f508011038_336.returns[f508011038_336.inst++]; };
f508011038_336.returns = [];
f508011038_336.inst = 0;
// 703
ow508011038.JSBNG__WebGLUniformLocation = f508011038_336;
// 704
f508011038_337 = function() { return f508011038_337.returns[f508011038_337.inst++]; };
f508011038_337.returns = [];
f508011038_337.inst = 0;
// 705
ow508011038.JSBNG__SVGPointList = f508011038_337;
// 706
f508011038_338 = function() { return f508011038_338.returns[f508011038_338.inst++]; };
f508011038_338.returns = [];
f508011038_338.inst = 0;
// 707
ow508011038.JSBNG__CSSPrimitiveValue = f508011038_338;
// 708
f508011038_339 = function() { return f508011038_339.returns[f508011038_339.inst++]; };
f508011038_339.returns = [];
f508011038_339.inst = 0;
// 709
ow508011038.JSBNG__HTMLEmbedElement = f508011038_339;
// 710
f508011038_340 = function() { return f508011038_340.returns[f508011038_340.inst++]; };
f508011038_340.returns = [];
f508011038_340.inst = 0;
// 711
ow508011038.JSBNG__PluginArray = f508011038_340;
// 712
f508011038_341 = function() { return f508011038_341.returns[f508011038_341.inst++]; };
f508011038_341.returns = [];
f508011038_341.inst = 0;
// 713
ow508011038.JSBNG__SVGPathSegCurvetoCubicRel = f508011038_341;
// 714
f508011038_342 = function() { return f508011038_342.returns[f508011038_342.inst++]; };
f508011038_342.returns = [];
f508011038_342.inst = 0;
// 715
ow508011038.JSBNG__ClientRectList = f508011038_342;
// 716
f508011038_343 = function() { return f508011038_343.returns[f508011038_343.inst++]; };
f508011038_343.returns = [];
f508011038_343.inst = 0;
// 717
ow508011038.JSBNG__SVGMetadataElement = f508011038_343;
// 718
f508011038_344 = function() { return f508011038_344.returns[f508011038_344.inst++]; };
f508011038_344.returns = [];
f508011038_344.inst = 0;
// 719
ow508011038.JSBNG__SVGTitleElement = f508011038_344;
// 720
f508011038_345 = function() { return f508011038_345.returns[f508011038_345.inst++]; };
f508011038_345.returns = [];
f508011038_345.inst = 0;
// 721
ow508011038.JSBNG__SVGAnimatedAngle = f508011038_345;
// 722
f508011038_346 = function() { return f508011038_346.returns[f508011038_346.inst++]; };
f508011038_346.returns = [];
f508011038_346.inst = 0;
// 723
ow508011038.JSBNG__CSSCharsetRule = f508011038_346;
// 724
f508011038_347 = function() { return f508011038_347.returns[f508011038_347.inst++]; };
f508011038_347.returns = [];
f508011038_347.inst = 0;
// 725
ow508011038.JSBNG__SVGAnimateColorElement = f508011038_347;
// 726
f508011038_348 = function() { return f508011038_348.returns[f508011038_348.inst++]; };
f508011038_348.returns = [];
f508011038_348.inst = 0;
// 727
ow508011038.JSBNG__SVGMatrix = f508011038_348;
// 728
f508011038_349 = function() { return f508011038_349.returns[f508011038_349.inst++]; };
f508011038_349.returns = [];
f508011038_349.inst = 0;
// 729
ow508011038.JSBNG__HTMLBodyElement = f508011038_349;
// 730
f508011038_350 = function() { return f508011038_350.returns[f508011038_350.inst++]; };
f508011038_350.returns = [];
f508011038_350.inst = 0;
// 731
ow508011038.JSBNG__SVGSymbolElement = f508011038_350;
// 732
f508011038_351 = function() { return f508011038_351.returns[f508011038_351.inst++]; };
f508011038_351.returns = [];
f508011038_351.inst = 0;
// 733
ow508011038.JSBNG__HTMLAudioElement = f508011038_351;
// 734
f508011038_352 = function() { return f508011038_352.returns[f508011038_352.inst++]; };
f508011038_352.returns = [];
f508011038_352.inst = 0;
// 735
ow508011038.JSBNG__CDATASection = f508011038_352;
// 736
f508011038_353 = function() { return f508011038_353.returns[f508011038_353.inst++]; };
f508011038_353.returns = [];
f508011038_353.inst = 0;
// 737
ow508011038.JSBNG__SVGFEDiffuseLightingElement = f508011038_353;
// 738
f508011038_354 = function() { return f508011038_354.returns[f508011038_354.inst++]; };
f508011038_354.returns = [];
f508011038_354.inst = 0;
// 739
ow508011038.JSBNG__SVGFETurbulenceElement = f508011038_354;
// 740
f508011038_355 = function() { return f508011038_355.returns[f508011038_355.inst++]; };
f508011038_355.returns = [];
f508011038_355.inst = 0;
// 741
ow508011038.JSBNG__SVGAnimatedEnumeration = f508011038_355;
// 742
f508011038_356 = function() { return f508011038_356.returns[f508011038_356.inst++]; };
f508011038_356.returns = [];
f508011038_356.inst = 0;
// 743
ow508011038.JSBNG__WebKitCSSKeyframeRule = f508011038_356;
// 744
f508011038_357 = function() { return f508011038_357.returns[f508011038_357.inst++]; };
f508011038_357.returns = [];
f508011038_357.inst = 0;
// 745
ow508011038.JSBNG__Audio = f508011038_357;
// 746
f508011038_358 = function() { return f508011038_358.returns[f508011038_358.inst++]; };
f508011038_358.returns = [];
f508011038_358.inst = 0;
// 747
ow508011038.JSBNG__SVGFEMergeNodeElement = f508011038_358;
// 748
f508011038_359 = function() { return f508011038_359.returns[f508011038_359.inst++]; };
f508011038_359.returns = [];
f508011038_359.inst = 0;
// 749
ow508011038.JSBNG__Entity = f508011038_359;
// 750
f508011038_360 = function() { return f508011038_360.returns[f508011038_360.inst++]; };
f508011038_360.returns = [];
f508011038_360.inst = 0;
// 751
ow508011038.JSBNG__SQLException = f508011038_360;
// 752
f508011038_361 = function() { return f508011038_361.returns[f508011038_361.inst++]; };
f508011038_361.returns = [];
f508011038_361.inst = 0;
// 753
ow508011038.JSBNG__HTMLTableCaptionElement = f508011038_361;
// 754
f508011038_362 = function() { return f508011038_362.returns[f508011038_362.inst++]; };
f508011038_362.returns = [];
f508011038_362.inst = 0;
// 755
ow508011038.JSBNG__DOMStringMap = f508011038_362;
// 756
f508011038_363 = function() { return f508011038_363.returns[f508011038_363.inst++]; };
f508011038_363.returns = [];
f508011038_363.inst = 0;
// 757
ow508011038.JSBNG__MimeType = f508011038_363;
// 758
f508011038_364 = function() { return f508011038_364.returns[f508011038_364.inst++]; };
f508011038_364.returns = [];
f508011038_364.inst = 0;
// 759
ow508011038.JSBNG__EventSource = f508011038_364;
// 760
f508011038_365 = function() { return f508011038_365.returns[f508011038_365.inst++]; };
f508011038_365.returns = [];
f508011038_365.inst = 0;
// 761
ow508011038.JSBNG__SVGException = f508011038_365;
// 762
f508011038_366 = function() { return f508011038_366.returns[f508011038_366.inst++]; };
f508011038_366.returns = [];
f508011038_366.inst = 0;
// 763
ow508011038.JSBNG__NamedNodeMap = f508011038_366;
// 764
f508011038_367 = function() { return f508011038_367.returns[f508011038_367.inst++]; };
f508011038_367.returns = [];
f508011038_367.inst = 0;
// 765
ow508011038.JSBNG__WebGLFramebuffer = f508011038_367;
// 766
f508011038_368 = function() { return f508011038_368.returns[f508011038_368.inst++]; };
f508011038_368.returns = [];
f508011038_368.inst = 0;
// 767
ow508011038.JSBNG__XMLHttpRequestUpload = f508011038_368;
// 768
f508011038_369 = function() { return f508011038_369.returns[f508011038_369.inst++]; };
f508011038_369.returns = [];
f508011038_369.inst = 0;
// 769
ow508011038.JSBNG__WebKitAnimationEvent = f508011038_369;
// 770
f508011038_370 = function() { return f508011038_370.returns[f508011038_370.inst++]; };
f508011038_370.returns = [];
f508011038_370.inst = 0;
// 771
ow508011038.JSBNG__Uint8Array = f508011038_370;
// 772
f508011038_371 = function() { return f508011038_371.returns[f508011038_371.inst++]; };
f508011038_371.returns = [];
f508011038_371.inst = 0;
// 773
ow508011038.JSBNG__SVGAnimatedInteger = f508011038_371;
// 774
f508011038_372 = function() { return f508011038_372.returns[f508011038_372.inst++]; };
f508011038_372.returns = [];
f508011038_372.inst = 0;
// 775
ow508011038.JSBNG__HTMLMenuElement = f508011038_372;
// 776
f508011038_373 = function() { return f508011038_373.returns[f508011038_373.inst++]; };
f508011038_373.returns = [];
f508011038_373.inst = 0;
// 777
ow508011038.JSBNG__SVGDefsElement = f508011038_373;
// 778
f508011038_374 = function() { return f508011038_374.returns[f508011038_374.inst++]; };
f508011038_374.returns = [];
f508011038_374.inst = 0;
// 779
ow508011038.JSBNG__SVGAngle = f508011038_374;
// 780
f508011038_375 = function() { return f508011038_375.returns[f508011038_375.inst++]; };
f508011038_375.returns = [];
f508011038_375.inst = 0;
// 781
ow508011038.JSBNG__SVGSVGElement = f508011038_375;
// 782
f508011038_376 = function() { return f508011038_376.returns[f508011038_376.inst++]; };
f508011038_376.returns = [];
f508011038_376.inst = 0;
// 783
ow508011038.JSBNG__XPathEvaluator = f508011038_376;
// 784
f508011038_377 = function() { return f508011038_377.returns[f508011038_377.inst++]; };
f508011038_377.returns = [];
f508011038_377.inst = 0;
// 785
ow508011038.JSBNG__HTMLImageElement = f508011038_377;
// 786
f508011038_378 = function() { return f508011038_378.returns[f508011038_378.inst++]; };
f508011038_378.returns = [];
f508011038_378.inst = 0;
// 787
ow508011038.JSBNG__NodeFilter = f508011038_378;
// 788
f508011038_379 = function() { return f508011038_379.returns[f508011038_379.inst++]; };
f508011038_379.returns = [];
f508011038_379.inst = 0;
// 789
ow508011038.JSBNG__SVGAltGlyphElement = f508011038_379;
// 790
f508011038_380 = function() { return f508011038_380.returns[f508011038_380.inst++]; };
f508011038_380.returns = [];
f508011038_380.inst = 0;
// 791
ow508011038.JSBNG__SVGClipPathElement = f508011038_380;
// 792
f508011038_381 = function() { return f508011038_381.returns[f508011038_381.inst++]; };
f508011038_381.returns = [];
f508011038_381.inst = 0;
// 793
ow508011038.JSBNG__Attr = f508011038_381;
// 794
f508011038_382 = function() { return f508011038_382.returns[f508011038_382.inst++]; };
f508011038_382.returns = [];
f508011038_382.inst = 0;
// 795
ow508011038.JSBNG__Counter = f508011038_382;
// 796
f508011038_383 = function() { return f508011038_383.returns[f508011038_383.inst++]; };
f508011038_383.returns = [];
f508011038_383.inst = 0;
// 797
ow508011038.JSBNG__SVGPolylineElement = f508011038_383;
// 798
f508011038_384 = function() { return f508011038_384.returns[f508011038_384.inst++]; };
f508011038_384.returns = [];
f508011038_384.inst = 0;
// 799
ow508011038.JSBNG__DOMSettableTokenList = f508011038_384;
// 800
f508011038_385 = function() { return f508011038_385.returns[f508011038_385.inst++]; };
f508011038_385.returns = [];
f508011038_385.inst = 0;
// 801
ow508011038.JSBNG__SVGPatternElement = f508011038_385;
// 802
f508011038_386 = function() { return f508011038_386.returns[f508011038_386.inst++]; };
f508011038_386.returns = [];
f508011038_386.inst = 0;
// 803
ow508011038.JSBNG__SVGFECompositeElement = f508011038_386;
// 804
f508011038_387 = function() { return f508011038_387.returns[f508011038_387.inst++]; };
f508011038_387.returns = [];
f508011038_387.inst = 0;
// 805
ow508011038.JSBNG__CSSValueList = f508011038_387;
// 806
f508011038_388 = function() { return f508011038_388.returns[f508011038_388.inst++]; };
f508011038_388.returns = [];
f508011038_388.inst = 0;
// 807
ow508011038.JSBNG__SVGFEColorMatrixElement = f508011038_388;
// 808
f508011038_389 = function() { return f508011038_389.returns[f508011038_389.inst++]; };
f508011038_389.returns = [];
f508011038_389.inst = 0;
// 809
ow508011038.JSBNG__SVGTRefElement = f508011038_389;
// 810
f508011038_390 = function() { return f508011038_390.returns[f508011038_390.inst++]; };
f508011038_390.returns = [];
f508011038_390.inst = 0;
// 811
ow508011038.JSBNG__WheelEvent = f508011038_390;
// 812
f508011038_391 = function() { return f508011038_391.returns[f508011038_391.inst++]; };
f508011038_391.returns = [];
f508011038_391.inst = 0;
// 813
ow508011038.JSBNG__SVGUnitTypes = f508011038_391;
// 814
f508011038_392 = function() { return f508011038_392.returns[f508011038_392.inst++]; };
f508011038_392.returns = [];
f508011038_392.inst = 0;
// 815
ow508011038.JSBNG__HTMLLabelElement = f508011038_392;
// 816
f508011038_393 = function() { return f508011038_393.returns[f508011038_393.inst++]; };
f508011038_393.returns = [];
f508011038_393.inst = 0;
// 817
ow508011038.JSBNG__HTMLAnchorElement = f508011038_393;
// 818
f508011038_394 = function() { return f508011038_394.returns[f508011038_394.inst++]; };
f508011038_394.returns = [];
f508011038_394.inst = 0;
// 819
ow508011038.JSBNG__SVGFEFuncAElement = f508011038_394;
// 820
f508011038_395 = function() { return f508011038_395.returns[f508011038_395.inst++]; };
f508011038_395.returns = [];
f508011038_395.inst = 0;
// 821
ow508011038.JSBNG__CanvasGradient = f508011038_395;
// 822
f508011038_396 = function() { return f508011038_396.returns[f508011038_396.inst++]; };
f508011038_396.returns = [];
f508011038_396.inst = 0;
// 823
ow508011038.JSBNG__DocumentType = f508011038_396;
// 824
f508011038_397 = function() { return f508011038_397.returns[f508011038_397.inst++]; };
f508011038_397.returns = [];
f508011038_397.inst = 0;
// 825
ow508011038.JSBNG__DOMParser = f508011038_397;
// 826
f508011038_398 = function() { return f508011038_398.returns[f508011038_398.inst++]; };
f508011038_398.returns = [];
f508011038_398.inst = 0;
// 827
ow508011038.JSBNG__SVGRenderingIntent = f508011038_398;
// 828
f508011038_399 = function() { return f508011038_399.returns[f508011038_399.inst++]; };
f508011038_399.returns = [];
f508011038_399.inst = 0;
// 829
ow508011038.JSBNG__WebKitPoint = f508011038_399;
// 830
f508011038_400 = function() { return f508011038_400.returns[f508011038_400.inst++]; };
f508011038_400.returns = [];
f508011038_400.inst = 0;
// 831
ow508011038.JSBNG__HTMLLinkElement = f508011038_400;
// 832
f508011038_401 = function() { return f508011038_401.returns[f508011038_401.inst++]; };
f508011038_401.returns = [];
f508011038_401.inst = 0;
// 833
ow508011038.JSBNG__SVGFontFaceNameElement = f508011038_401;
// 834
ow508011038.JSBNG__TEMPORARY = 0;
// 835
ow508011038.JSBNG__PERSISTENT = 1;
// 836
f508011038_402 = function() { return f508011038_402.returns[f508011038_402.inst++]; };
f508011038_402.returns = [];
f508011038_402.inst = 0;
// 837
ow508011038.JSBNG__SVGZoomAndPan = f508011038_402;
// 838
f508011038_403 = function() { return f508011038_403.returns[f508011038_403.inst++]; };
f508011038_403.returns = [];
f508011038_403.inst = 0;
// 839
ow508011038.JSBNG__OfflineAudioCompletionEvent = f508011038_403;
// 840
f508011038_404 = function() { return f508011038_404.returns[f508011038_404.inst++]; };
f508011038_404.returns = [];
f508011038_404.inst = 0;
// 841
ow508011038.JSBNG__XMLHttpRequestProgressEvent = f508011038_404;
// 842
f508011038_405 = function() { return f508011038_405.returns[f508011038_405.inst++]; };
f508011038_405.returns = [];
f508011038_405.inst = 0;
// 843
ow508011038.JSBNG__HTMLSpanElement = f508011038_405;
// 844
f508011038_406 = function() { return f508011038_406.returns[f508011038_406.inst++]; };
f508011038_406.returns = [];
f508011038_406.inst = 0;
// 845
ow508011038.JSBNG__ErrorEvent = f508011038_406;
// 846
f508011038_407 = function() { return f508011038_407.returns[f508011038_407.inst++]; };
f508011038_407.returns = [];
f508011038_407.inst = 0;
// 847
ow508011038.JSBNG__HTMLUnknownElement = f508011038_407;
// 848
f508011038_408 = function() { return f508011038_408.returns[f508011038_408.inst++]; };
f508011038_408.returns = [];
f508011038_408.inst = 0;
// 849
ow508011038.JSBNG__MediaStreamEvent = f508011038_408;
// 850
f508011038_409 = function() { return f508011038_409.returns[f508011038_409.inst++]; };
f508011038_409.returns = [];
f508011038_409.inst = 0;
// 851
ow508011038.JSBNG__WebGLContextEvent = f508011038_409;
// 852
f508011038_410 = function() { return f508011038_410.returns[f508011038_410.inst++]; };
f508011038_410.returns = [];
f508011038_410.inst = 0;
// 853
ow508011038.JSBNG__AudioProcessingEvent = f508011038_410;
// 854
f508011038_411 = function() { return f508011038_411.returns[f508011038_411.inst++]; };
f508011038_411.returns = [];
f508011038_411.inst = 0;
// 855
ow508011038.JSBNG__CompositionEvent = f508011038_411;
// 856
f508011038_412 = function() { return f508011038_412.returns[f508011038_412.inst++]; };
f508011038_412.returns = [];
f508011038_412.inst = 0;
// 857
ow508011038.JSBNG__PopStateEvent = f508011038_412;
// 858
f508011038_413 = function() { return f508011038_413.returns[f508011038_413.inst++]; };
f508011038_413.returns = [];
f508011038_413.inst = 0;
// 859
ow508011038.JSBNG__CustomEvent = f508011038_413;
// 860
f508011038_414 = function() { return f508011038_414.returns[f508011038_414.inst++]; };
f508011038_414.returns = [];
f508011038_414.inst = 0;
// 861
ow508011038.JSBNG__HTMLSourceElement = f508011038_414;
// 862
f508011038_415 = function() { return f508011038_415.returns[f508011038_415.inst++]; };
f508011038_415.returns = [];
f508011038_415.inst = 0;
// 863
ow508011038.JSBNG__SpeechInputEvent = f508011038_415;
// 864
f508011038_416 = function() { return f508011038_416.returns[f508011038_416.inst++]; };
f508011038_416.returns = [];
f508011038_416.inst = 0;
// 865
ow508011038.JSBNG__MediaController = f508011038_416;
// 866
f508011038_417 = function() { return f508011038_417.returns[f508011038_417.inst++]; };
f508011038_417.returns = [];
f508011038_417.inst = 0;
// 867
ow508011038.JSBNG__WebKitMutationObserver = f508011038_417;
// 868
f508011038_418 = function() { return f508011038_418.returns[f508011038_418.inst++]; };
f508011038_418.returns = [];
f508011038_418.inst = 0;
// 869
ow508011038.JSBNG__WebKitCSSFilterValue = f508011038_418;
// 870
f508011038_419 = function() { return f508011038_419.returns[f508011038_419.inst++]; };
f508011038_419.returns = [];
f508011038_419.inst = 0;
// 871
ow508011038.JSBNG__webkitCancelAnimationFrame = f508011038_419;
// 872
f508011038_420 = function() { return f508011038_420.returns[f508011038_420.inst++]; };
f508011038_420.returns = [];
f508011038_420.inst = 0;
// 873
ow508011038.JSBNG__Window = f508011038_420;
// 874
f508011038_421 = function() { return f508011038_421.returns[f508011038_421.inst++]; };
f508011038_421.returns = [];
f508011038_421.inst = 0;
// 875
ow508011038.JSBNG__Selection = f508011038_421;
// 876
f508011038_422 = function() { return f508011038_422.returns[f508011038_422.inst++]; };
f508011038_422.returns = [];
f508011038_422.inst = 0;
// 877
ow508011038.JSBNG__Uint8ClampedArray = f508011038_422;
// 878
f508011038_423 = function() { return f508011038_423.returns[f508011038_423.inst++]; };
f508011038_423.returns = [];
f508011038_423.inst = 0;
// 879
ow508011038.JSBNG__WebGLShaderPrecisionFormat = f508011038_423;
// 880
f508011038_424 = function() { return f508011038_424.returns[f508011038_424.inst++]; };
f508011038_424.returns = [];
f508011038_424.inst = 0;
// 881
ow508011038.JSBNG__Notification = f508011038_424;
// 882
f508011038_425 = function() { return f508011038_425.returns[f508011038_425.inst++]; };
f508011038_425.returns = [];
f508011038_425.inst = 0;
// 883
ow508011038.JSBNG__HTMLDataListElement = f508011038_425;
// 884
f508011038_426 = function() { return f508011038_426.returns[f508011038_426.inst++]; };
f508011038_426.returns = [];
f508011038_426.inst = 0;
// 885
ow508011038.JSBNG__SVGViewSpec = f508011038_426;
// 886
ow508011038.JSBNG__indexedDB = o6;
// undefined
o6 = null;
// 887
o6 = {};
// 888
ow508011038.JSBNG__Intl = o6;
// 889
ow508011038.JSBNG__v8Intl = o6;
// undefined
o6 = null;
// 890
f508011038_428 = function() { return f508011038_428.returns[f508011038_428.inst++]; };
f508011038_428.returns = [];
f508011038_428.inst = 0;
// 891
ow508011038.JSBNG__webkitRTCPeerConnection = f508011038_428;
// 892
f508011038_429 = function() { return f508011038_429.returns[f508011038_429.inst++]; };
f508011038_429.returns = [];
f508011038_429.inst = 0;
// 893
ow508011038.JSBNG__webkitMediaStream = f508011038_429;
// 894
f508011038_430 = function() { return f508011038_430.returns[f508011038_430.inst++]; };
f508011038_430.returns = [];
f508011038_430.inst = 0;
// 895
ow508011038.JSBNG__webkitOfflineAudioContext = f508011038_430;
// 896
f508011038_431 = function() { return f508011038_431.returns[f508011038_431.inst++]; };
f508011038_431.returns = [];
f508011038_431.inst = 0;
// 897
ow508011038.JSBNG__webkitSpeechGrammarList = f508011038_431;
// 898
f508011038_432 = function() { return f508011038_432.returns[f508011038_432.inst++]; };
f508011038_432.returns = [];
f508011038_432.inst = 0;
// 899
ow508011038.JSBNG__webkitSpeechGrammar = f508011038_432;
// 900
f508011038_433 = function() { return f508011038_433.returns[f508011038_433.inst++]; };
f508011038_433.returns = [];
f508011038_433.inst = 0;
// 901
ow508011038.JSBNG__webkitSpeechRecognitionEvent = f508011038_433;
// 902
f508011038_434 = function() { return f508011038_434.returns[f508011038_434.inst++]; };
f508011038_434.returns = [];
f508011038_434.inst = 0;
// 903
ow508011038.JSBNG__webkitSpeechRecognitionError = f508011038_434;
// 904
f508011038_435 = function() { return f508011038_435.returns[f508011038_435.inst++]; };
f508011038_435.returns = [];
f508011038_435.inst = 0;
// 905
ow508011038.JSBNG__webkitSpeechRecognition = f508011038_435;
// 906
f508011038_436 = function() { return f508011038_436.returns[f508011038_436.inst++]; };
f508011038_436.returns = [];
f508011038_436.inst = 0;
// 907
ow508011038.JSBNG__WebKitSourceBufferList = f508011038_436;
// 908
f508011038_437 = function() { return f508011038_437.returns[f508011038_437.inst++]; };
f508011038_437.returns = [];
f508011038_437.inst = 0;
// 909
ow508011038.JSBNG__WebKitSourceBuffer = f508011038_437;
// 910
f508011038_438 = function() { return f508011038_438.returns[f508011038_438.inst++]; };
f508011038_438.returns = [];
f508011038_438.inst = 0;
// 911
ow508011038.JSBNG__WebKitMediaSource = f508011038_438;
// 912
f508011038_439 = function() { return f508011038_439.returns[f508011038_439.inst++]; };
f508011038_439.returns = [];
f508011038_439.inst = 0;
// 913
ow508011038.JSBNG__TrackEvent = f508011038_439;
// 914
f508011038_440 = function() { return f508011038_440.returns[f508011038_440.inst++]; };
f508011038_440.returns = [];
f508011038_440.inst = 0;
// 915
ow508011038.JSBNG__TextTrackList = f508011038_440;
// 916
f508011038_441 = function() { return f508011038_441.returns[f508011038_441.inst++]; };
f508011038_441.returns = [];
f508011038_441.inst = 0;
// 917
ow508011038.JSBNG__TextTrackCueList = f508011038_441;
// 918
f508011038_442 = function() { return f508011038_442.returns[f508011038_442.inst++]; };
f508011038_442.returns = [];
f508011038_442.inst = 0;
// 919
ow508011038.JSBNG__TextTrackCue = f508011038_442;
// 920
f508011038_443 = function() { return f508011038_443.returns[f508011038_443.inst++]; };
f508011038_443.returns = [];
f508011038_443.inst = 0;
// 921
ow508011038.JSBNG__TextTrack = f508011038_443;
// 922
f508011038_444 = function() { return f508011038_444.returns[f508011038_444.inst++]; };
f508011038_444.returns = [];
f508011038_444.inst = 0;
// 923
ow508011038.JSBNG__HTMLTrackElement = f508011038_444;
// 924
f508011038_445 = function() { return f508011038_445.returns[f508011038_445.inst++]; };
f508011038_445.returns = [];
f508011038_445.inst = 0;
// 925
ow508011038.JSBNG__MediaKeyError = f508011038_445;
// 926
f508011038_446 = function() { return f508011038_446.returns[f508011038_446.inst++]; };
f508011038_446.returns = [];
f508011038_446.inst = 0;
// 927
ow508011038.JSBNG__MediaKeyEvent = f508011038_446;
// 928
f508011038_447 = function() { return f508011038_447.returns[f508011038_447.inst++]; };
f508011038_447.returns = [];
f508011038_447.inst = 0;
// 929
ow508011038.JSBNG__HTMLShadowElement = f508011038_447;
// 930
f508011038_448 = function() { return f508011038_448.returns[f508011038_448.inst++]; };
f508011038_448.returns = [];
f508011038_448.inst = 0;
// 931
ow508011038.JSBNG__HTMLContentElement = f508011038_448;
// 932
f508011038_449 = function() { return f508011038_449.returns[f508011038_449.inst++]; };
f508011038_449.returns = [];
f508011038_449.inst = 0;
// 933
ow508011038.JSBNG__WebKitShadowRoot = f508011038_449;
// 934
f508011038_450 = function() { return f508011038_450.returns[f508011038_450.inst++]; };
f508011038_450.returns = [];
f508011038_450.inst = 0;
// 935
ow508011038.JSBNG__RTCIceCandidate = f508011038_450;
// 936
f508011038_451 = function() { return f508011038_451.returns[f508011038_451.inst++]; };
f508011038_451.returns = [];
f508011038_451.inst = 0;
// 937
ow508011038.JSBNG__RTCSessionDescription = f508011038_451;
// 938
f508011038_452 = function() { return f508011038_452.returns[f508011038_452.inst++]; };
f508011038_452.returns = [];
f508011038_452.inst = 0;
// 939
ow508011038.JSBNG__IDBVersionChangeEvent = f508011038_452;
// 940
ow508011038.JSBNG__IDBTransaction = f508011038_49;
// 941
ow508011038.JSBNG__IDBRequest = f508011038_59;
// 942
f508011038_453 = function() { return f508011038_453.returns[f508011038_453.inst++]; };
f508011038_453.returns = [];
f508011038_453.inst = 0;
// 943
ow508011038.JSBNG__IDBOpenDBRequest = f508011038_453;
// 944
ow508011038.JSBNG__IDBObjectStore = f508011038_60;
// 945
ow508011038.JSBNG__IDBKeyRange = f508011038_62;
// 946
ow508011038.JSBNG__IDBIndex = f508011038_51;
// 947
ow508011038.JSBNG__IDBFactory = f508011038_53;
// 948
ow508011038.JSBNG__IDBDatabase = f508011038_57;
// 949
f508011038_454 = function() { return f508011038_454.returns[f508011038_454.inst++]; };
f508011038_454.returns = [];
f508011038_454.inst = 0;
// 950
ow508011038.JSBNG__IDBCursorWithValue = f508011038_454;
// 951
ow508011038.JSBNG__IDBCursor = f508011038_54;
// 952
ow508011038.JSBNG__MutationObserver = f508011038_417;
// 953
ow508011038.JSBNG__TransitionEvent = f508011038_151;
// 954
f508011038_455 = function() { return f508011038_455.returns[f508011038_455.inst++]; };
f508011038_455.returns = [];
f508011038_455.inst = 0;
// 955
ow508011038.JSBNG__FocusEvent = f508011038_455;
// 956
f508011038_456 = function() { return f508011038_456.returns[f508011038_456.inst++]; };
f508011038_456.returns = [];
f508011038_456.inst = 0;
// 957
ow508011038.JSBNG__ArrayBufferView = f508011038_456;
// 958
f508011038_457 = function() { return f508011038_457.returns[f508011038_457.inst++]; };
f508011038_457.returns = [];
f508011038_457.inst = 0;
// 959
ow508011038.JSBNG__HTMLOptionsCollection = f508011038_457;
// 960
f508011038_458 = function() { return f508011038_458.returns[f508011038_458.inst++]; };
f508011038_458.returns = [];
f508011038_458.inst = 0;
// 961
ow508011038.JSBNG__HTMLFormControlsCollection = f508011038_458;
// 962
f508011038_459 = function() { return f508011038_459.returns[f508011038_459.inst++]; };
f508011038_459.returns = [];
f508011038_459.inst = 0;
// 963
ow508011038.JSBNG__HTMLTemplateElement = f508011038_459;
// 964
f508011038_460 = function() { return f508011038_460.returns[f508011038_460.inst++]; };
f508011038_460.returns = [];
f508011038_460.inst = 0;
// 965
ow508011038.JSBNG__CSSHostRule = f508011038_460;
// 966
f508011038_461 = function() { return f508011038_461.returns[f508011038_461.inst++]; };
f508011038_461.returns = [];
f508011038_461.inst = 0;
// 967
ow508011038.JSBNG__WebKitCSSMixFunctionValue = f508011038_461;
// 968
f508011038_462 = function() { return f508011038_462.returns[f508011038_462.inst++]; };
f508011038_462.returns = [];
f508011038_462.inst = 0;
// 969
ow508011038.JSBNG__WebKitCSSFilterRule = f508011038_462;
// 970
f508011038_463 = function() { return f508011038_463.returns[f508011038_463.inst++]; };
f508011038_463.returns = [];
f508011038_463.inst = 0;
// 971
ow508011038.JSBNG__requestAnimationFrame = f508011038_463;
// 972
f508011038_464 = function() { return f508011038_464.returns[f508011038_464.inst++]; };
f508011038_464.returns = [];
f508011038_464.inst = 0;
// 973
ow508011038.JSBNG__cancelAnimationFrame = f508011038_464;
// 974
ow508011038.JSBNG__onerror = null;
// 975
o6 = {};
// 976
ow508011038.JSBNG__CSS = o6;
// undefined
o6 = null;
// 977
f508011038_466 = function() { return f508011038_466.returns[f508011038_466.inst++]; };
f508011038_466.returns = [];
f508011038_466.inst = 0;
// 978
ow508011038.Math.JSBNG__random = f508011038_466;
// 981
// 983
o6 = {};
// 984
o0.documentElement = o6;
// 986
o6.className = "";
// 988
f508011038_468 = function() { return f508011038_468.returns[f508011038_468.inst++]; };
f508011038_468.returns = [];
f508011038_468.inst = 0;
// 989
o6.getAttribute = f508011038_468;
// 990
f508011038_468.returns.push("swift-loading");
// 991
// 993
// 994
// 995
// 996
// 997
f508011038_12.returns.push(1);
// 999
f508011038_469 = function() { return f508011038_469.returns[f508011038_469.inst++]; };
f508011038_469.returns = [];
f508011038_469.inst = 0;
// 1000
o0.JSBNG__addEventListener = f508011038_469;
// 1002
f508011038_469.returns.push(undefined);
// 1004
f508011038_469.returns.push(undefined);
// 1006
// 1007
o0.nodeType = 9;
// 1008
f508011038_470 = function() { return f508011038_470.returns[f508011038_470.inst++]; };
f508011038_470.returns = [];
f508011038_470.inst = 0;
// 1009
o0.createElement = f508011038_470;
// 1010
o8 = {};
// 1011
f508011038_470.returns.push(o8);
// 1012
f508011038_472 = function() { return f508011038_472.returns[f508011038_472.inst++]; };
f508011038_472.returns = [];
f508011038_472.inst = 0;
// 1013
o8.setAttribute = f508011038_472;
// 1014
f508011038_472.returns.push(undefined);
// 1015
// 1016
f508011038_473 = function() { return f508011038_473.returns[f508011038_473.inst++]; };
f508011038_473.returns = [];
f508011038_473.inst = 0;
// 1017
o8.getElementsByTagName = f508011038_473;
// 1018
o9 = {};
// 1019
f508011038_473.returns.push(o9);
// 1021
o10 = {};
// 1022
f508011038_473.returns.push(o10);
// 1023
o11 = {};
// 1024
o10["0"] = o11;
// undefined
o10 = null;
// 1025
o9.length = 4;
// undefined
o9 = null;
// 1027
o9 = {};
// 1028
f508011038_470.returns.push(o9);
// 1029
f508011038_478 = function() { return f508011038_478.returns[f508011038_478.inst++]; };
f508011038_478.returns = [];
f508011038_478.inst = 0;
// 1030
o9.appendChild = f508011038_478;
// 1032
o10 = {};
// 1033
f508011038_470.returns.push(o10);
// 1034
f508011038_478.returns.push(o10);
// 1036
o12 = {};
// 1037
f508011038_473.returns.push(o12);
// 1038
o13 = {};
// 1039
o12["0"] = o13;
// undefined
o12 = null;
// 1040
o12 = {};
// 1041
o11.style = o12;
// 1042
// 1043
o14 = {};
// 1044
o8.firstChild = o14;
// 1045
o14.nodeType = 3;
// undefined
o14 = null;
// 1047
o14 = {};
// 1048
f508011038_473.returns.push(o14);
// 1049
o14.length = 0;
// undefined
o14 = null;
// 1051
o14 = {};
// 1052
f508011038_473.returns.push(o14);
// 1053
o14.length = 1;
// undefined
o14 = null;
// 1054
o11.getAttribute = f508011038_468;
// undefined
o11 = null;
// 1055
f508011038_468.returns.push("top: 1px; float: left; opacity: 0.5;");
// 1057
f508011038_468.returns.push("/a");
// 1059
o12.opacity = "0.5";
// 1061
o12.cssFloat = "left";
// undefined
o12 = null;
// 1062
o13.value = "on";
// 1063
o10.selected = true;
// 1064
o8.className = "";
// 1066
o11 = {};
// 1067
f508011038_470.returns.push(o11);
// 1068
o11.enctype = "application/x-www-form-urlencoded";
// undefined
o11 = null;
// 1070
o11 = {};
// 1071
f508011038_470.returns.push(o11);
// 1072
f508011038_488 = function() { return f508011038_488.returns[f508011038_488.inst++]; };
f508011038_488.returns = [];
f508011038_488.inst = 0;
// 1073
o11.cloneNode = f508011038_488;
// undefined
o11 = null;
// 1074
o11 = {};
// 1075
f508011038_488.returns.push(o11);
// 1076
o11.outerHTML = "<nav></nav>";
// undefined
o11 = null;
// 1077
o0.compatMode = "CSS1Compat";
// 1078
// 1079
o13.cloneNode = f508011038_488;
// undefined
o13 = null;
// 1080
o11 = {};
// 1081
f508011038_488.returns.push(o11);
// 1082
o11.checked = true;
// undefined
o11 = null;
// 1083
// undefined
o9 = null;
// 1084
o10.disabled = false;
// undefined
o10 = null;
// 1085
// 1086
o8.JSBNG__addEventListener = f508011038_469;
// 1088
o9 = {};
// 1089
f508011038_470.returns.push(o9);
// 1090
// 1091
o9.setAttribute = f508011038_472;
// 1092
f508011038_472.returns.push(undefined);
// 1094
f508011038_472.returns.push(undefined);
// 1096
f508011038_472.returns.push(undefined);
// 1097
o8.appendChild = f508011038_478;
// 1098
f508011038_478.returns.push(o9);
// 1099
f508011038_492 = function() { return f508011038_492.returns[f508011038_492.inst++]; };
f508011038_492.returns = [];
f508011038_492.inst = 0;
// 1100
o0.createDocumentFragment = f508011038_492;
// 1101
o10 = {};
// 1102
f508011038_492.returns.push(o10);
// 1103
o10.appendChild = f508011038_478;
// 1104
o8.lastChild = o9;
// 1105
f508011038_478.returns.push(o9);
// 1106
o10.cloneNode = f508011038_488;
// 1107
o11 = {};
// 1108
f508011038_488.returns.push(o11);
// 1109
o11.cloneNode = f508011038_488;
// undefined
o11 = null;
// 1110
o11 = {};
// 1111
f508011038_488.returns.push(o11);
// 1112
o12 = {};
// 1113
o11.lastChild = o12;
// undefined
o11 = null;
// 1114
o12.checked = true;
// undefined
o12 = null;
// 1115
o9.checked = true;
// 1116
f508011038_497 = function() { return f508011038_497.returns[f508011038_497.inst++]; };
f508011038_497.returns = [];
f508011038_497.inst = 0;
// 1117
o10.removeChild = f508011038_497;
// undefined
o10 = null;
// 1118
f508011038_497.returns.push(o9);
// undefined
o9 = null;
// 1120
f508011038_478.returns.push(o8);
// 1121
o8.JSBNG__attachEvent = void 0;
// 1122
o0.readyState = "interactive";
// 1125
f508011038_469.returns.push(undefined);
// 1126
f508011038_7.returns.push(undefined);
// 1128
f508011038_497.returns.push(o8);
// undefined
o8 = null;
// 1129
f508011038_466.returns.push(0.5379572303500026);
// 1130
f508011038_498 = function() { return f508011038_498.returns[f508011038_498.inst++]; };
f508011038_498.returns = [];
f508011038_498.inst = 0;
// 1131
o0.JSBNG__removeEventListener = f508011038_498;
// 1132
f508011038_466.returns.push(0.9989213712979108);
// 1135
o8 = {};
// 1136
f508011038_470.returns.push(o8);
// 1137
o8.appendChild = f508011038_478;
// 1138
f508011038_500 = function() { return f508011038_500.returns[f508011038_500.inst++]; };
f508011038_500.returns = [];
f508011038_500.inst = 0;
// 1139
o0.createComment = f508011038_500;
// 1140
o9 = {};
// 1141
f508011038_500.returns.push(o9);
// 1142
f508011038_478.returns.push(o9);
// undefined
o9 = null;
// 1143
o8.getElementsByTagName = f508011038_473;
// undefined
o8 = null;
// 1144
o8 = {};
// 1145
f508011038_473.returns.push(o8);
// 1146
o8.length = 0;
// undefined
o8 = null;
// 1148
o8 = {};
// 1149
f508011038_470.returns.push(o8);
// 1150
// 1151
o9 = {};
// 1152
o8.firstChild = o9;
// undefined
o8 = null;
// 1154
o9.getAttribute = f508011038_468;
// undefined
o9 = null;
// 1157
f508011038_468.returns.push("#");
// 1159
o8 = {};
// 1160
f508011038_470.returns.push(o8);
// 1161
// 1162
o9 = {};
// 1163
o8.lastChild = o9;
// undefined
o8 = null;
// 1164
o9.getAttribute = f508011038_468;
// undefined
o9 = null;
// 1165
f508011038_468.returns.push(null);
// 1167
o8 = {};
// 1168
f508011038_470.returns.push(o8);
// 1169
// 1170
f508011038_508 = function() { return f508011038_508.returns[f508011038_508.inst++]; };
f508011038_508.returns = [];
f508011038_508.inst = 0;
// 1171
o8.getElementsByClassName = f508011038_508;
// 1173
o9 = {};
// 1174
f508011038_508.returns.push(o9);
// 1175
o9.length = 1;
// undefined
o9 = null;
// 1176
o9 = {};
// 1177
o8.lastChild = o9;
// undefined
o8 = null;
// 1178
// undefined
o9 = null;
// 1180
o8 = {};
// 1181
f508011038_508.returns.push(o8);
// 1182
o8.length = 2;
// undefined
o8 = null;
// 1184
o8 = {};
// 1185
f508011038_470.returns.push(o8);
// 1186
// 1187
// 1188
f508011038_513 = function() { return f508011038_513.returns[f508011038_513.inst++]; };
f508011038_513.returns = [];
f508011038_513.inst = 0;
// 1189
o6.insertBefore = f508011038_513;
// 1190
o9 = {};
// 1191
o6.firstChild = o9;
// 1192
f508011038_513.returns.push(o8);
// 1193
f508011038_515 = function() { return f508011038_515.returns[f508011038_515.inst++]; };
f508011038_515.returns = [];
f508011038_515.inst = 0;
// 1194
o0.getElementsByName = f508011038_515;
// 1196
o10 = {};
// 1197
f508011038_515.returns.push(o10);
// 1198
o10.length = 2;
// undefined
o10 = null;
// 1200
o10 = {};
// 1201
f508011038_515.returns.push(o10);
// 1202
o10.length = 0;
// undefined
o10 = null;
// 1203
f508011038_518 = function() { return f508011038_518.returns[f508011038_518.inst++]; };
f508011038_518.returns = [];
f508011038_518.inst = 0;
// 1204
o0.getElementById = f508011038_518;
// 1205
f508011038_518.returns.push(null);
// 1206
o6.removeChild = f508011038_497;
// 1207
f508011038_497.returns.push(o8);
// undefined
o8 = null;
// 1208
o8 = {};
// 1209
o6.childNodes = o8;
// 1210
o8.length = 3;
// 1211
o8["0"] = o9;
// 1212
o10 = {};
// 1213
o8["1"] = o10;
// undefined
o10 = null;
// 1214
o10 = {};
// 1215
o8["2"] = o10;
// undefined
o8 = null;
// 1216
f508011038_522 = function() { return f508011038_522.returns[f508011038_522.inst++]; };
f508011038_522.returns = [];
f508011038_522.inst = 0;
// 1217
o6.contains = f508011038_522;
// 1218
f508011038_523 = function() { return f508011038_523.returns[f508011038_523.inst++]; };
f508011038_523.returns = [];
f508011038_523.inst = 0;
// 1219
o6.compareDocumentPosition = f508011038_523;
// 1220
f508011038_524 = function() { return f508011038_524.returns[f508011038_524.inst++]; };
f508011038_524.returns = [];
f508011038_524.inst = 0;
// 1221
o0.querySelectorAll = f508011038_524;
// 1222
o6.matchesSelector = void 0;
// 1223
o6.mozMatchesSelector = void 0;
// 1224
f508011038_525 = function() { return f508011038_525.returns[f508011038_525.inst++]; };
f508011038_525.returns = [];
f508011038_525.inst = 0;
// 1225
o6.webkitMatchesSelector = f508011038_525;
// 1227
o8 = {};
// 1228
f508011038_470.returns.push(o8);
// 1229
// 1230
f508011038_527 = function() { return f508011038_527.returns[f508011038_527.inst++]; };
f508011038_527.returns = [];
f508011038_527.inst = 0;
// 1231
o8.querySelectorAll = f508011038_527;
// undefined
o8 = null;
// 1232
o8 = {};
// 1233
f508011038_527.returns.push(o8);
// 1234
o8.length = 1;
// undefined
o8 = null;
// 1236
o8 = {};
// 1237
f508011038_527.returns.push(o8);
// 1238
o8.length = 1;
// undefined
o8 = null;
// 1240
o8 = {};
// 1241
f508011038_470.returns.push(o8);
// 1242
// 1243
o8.querySelectorAll = f508011038_527;
// 1244
o11 = {};
// 1245
f508011038_527.returns.push(o11);
// 1246
o11.length = 0;
// undefined
o11 = null;
// 1247
// undefined
o8 = null;
// 1249
o8 = {};
// 1250
f508011038_527.returns.push(o8);
// 1251
o8.length = 1;
// undefined
o8 = null;
// 1253
o8 = {};
// 1254
f508011038_470.returns.push(o8);
// undefined
o8 = null;
// 1255
f508011038_525.returns.push(true);
// 1257
o8 = {};
// 1258
f508011038_492.returns.push(o8);
// 1259
o8.createElement = void 0;
// 1260
o8.appendChild = f508011038_478;
// undefined
o8 = null;
// 1262
o8 = {};
// 1263
f508011038_470.returns.push(o8);
// 1264
f508011038_478.returns.push(o8);
// undefined
o8 = null;
// 1265
o3.userAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36";
// 1266
o5.href = "https://twitter.com/search?q=javascript";
// 1267
o8 = {};
// 1268
f508011038_0.returns.push(o8);
// 1269
f508011038_537 = function() { return f508011038_537.returns[f508011038_537.inst++]; };
f508011038_537.returns = [];
f508011038_537.inst = 0;
// 1270
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1271
f508011038_537.returns.push(1374696746972);
// 1272
o8 = {};
// 1273
f508011038_70.returns.push(o8);
// undefined
o8 = null;
// 1274
o8 = {};
// 1275
f508011038_0.prototype = o8;
// 1276
f508011038_540 = function() { return f508011038_540.returns[f508011038_540.inst++]; };
f508011038_540.returns = [];
f508011038_540.inst = 0;
// 1277
o8.toISOString = f508011038_540;
// 1278
o11 = {};
// 1279
f508011038_0.returns.push(o11);
// 1280
o11.toISOString = f508011038_540;
// undefined
o11 = null;
// 1281
f508011038_540.returns.push("-000001-01-01T00:00:00.000Z");
// 1282
f508011038_542 = function() { return f508011038_542.returns[f508011038_542.inst++]; };
f508011038_542.returns = [];
f508011038_542.inst = 0;
// 1283
f508011038_0.now = f508011038_542;
// 1285
f508011038_543 = function() { return f508011038_543.returns[f508011038_543.inst++]; };
f508011038_543.returns = [];
f508011038_543.inst = 0;
// 1286
o8.toJSON = f508011038_543;
// undefined
o8 = null;
// 1287
f508011038_544 = function() { return f508011038_544.returns[f508011038_544.inst++]; };
f508011038_544.returns = [];
f508011038_544.inst = 0;
// 1288
f508011038_0.parse = f508011038_544;
// 1290
f508011038_544.returns.push(8640000000000000);
// 1292
o8 = {};
// 1293
f508011038_470.returns.push(o8);
// undefined
o8 = null;
// 1294
ow508011038.JSBNG__attachEvent = undefined;
// 1295
f508011038_546 = function() { return f508011038_546.returns[f508011038_546.inst++]; };
f508011038_546.returns = [];
f508011038_546.inst = 0;
// 1296
o0.getElementsByTagName = f508011038_546;
// 1297
o8 = {};
// 1298
f508011038_546.returns.push(o8);
// 1300
o11 = {};
// 1301
f508011038_470.returns.push(o11);
// 1302
o12 = {};
// 1303
o8["0"] = o12;
// 1304
o12.src = "http://jsbngssl.twitter.com/JSBENCH_NG_RECORD_OBJECTS.js";
// 1305
o13 = {};
// 1306
o8["1"] = o13;
// 1307
o13.src = "http://jsbngssl.twitter.com/JSBENCH_NG_RECORD.js";
// undefined
o13 = null;
// 1308
o13 = {};
// 1309
o8["2"] = o13;
// 1310
o13.src = "";
// undefined
o13 = null;
// 1311
o13 = {};
// 1312
o8["3"] = o13;
// 1313
o13.src = "";
// undefined
o13 = null;
// 1314
o13 = {};
// 1315
o8["4"] = o13;
// 1316
o13.src = "";
// undefined
o13 = null;
// 1317
o13 = {};
// 1318
o8["5"] = o13;
// 1319
o13.src = "";
// undefined
o13 = null;
// 1320
o13 = {};
// 1321
o8["6"] = o13;
// 1322
o13.src = "http://jsbngssl.abs.twimg.com/c/swift/en/init.93a6e6d3378f6d3136fc84c59ec06af763344a0a.js";
// undefined
o13 = null;
// 1323
o8["7"] = void 0;
// undefined
o8 = null;
// 1325
o8 = {};
// 1326
f508011038_518.returns.push(o8);
// 1327
o8.parentNode = o10;
// 1328
o8.id = "swift-module-path";
// 1329
o8.type = "hidden";
// 1330
o8.nodeName = "INPUT";
// 1331
o8.value = "http://jsbngssl.abs.twimg.com/c/swift/en";
// undefined
o8 = null;
// 1333
o0.ownerDocument = null;
// 1335
o6.nodeName = "HTML";
// 1339
o8 = {};
// 1340
f508011038_524.returns.push(o8);
// 1341
o8["0"] = void 0;
// undefined
o8 = null;
// 1346
f508011038_558 = function() { return f508011038_558.returns[f508011038_558.inst++]; };
f508011038_558.returns = [];
f508011038_558.inst = 0;
// 1347
o0.getElementsByClassName = f508011038_558;
// 1349
o8 = {};
// 1350
f508011038_558.returns.push(o8);
// 1351
o8["0"] = void 0;
// undefined
o8 = null;
// 1352
o8 = {};
// 1353
f508011038_0.returns.push(o8);
// 1354
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1355
f508011038_537.returns.push(1374696746990);
// 1356
o8 = {};
// 1357
f508011038_0.returns.push(o8);
// 1358
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1359
f508011038_537.returns.push(1374696746990);
// 1360
o8 = {};
// 1361
f508011038_0.returns.push(o8);
// 1362
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1363
f508011038_537.returns.push(1374696746990);
// 1364
o8 = {};
// 1365
f508011038_0.returns.push(o8);
// 1366
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1367
f508011038_537.returns.push(1374696746990);
// 1368
o8 = {};
// 1369
f508011038_0.returns.push(o8);
// 1370
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1371
f508011038_537.returns.push(1374696746991);
// 1372
o8 = {};
// 1373
f508011038_0.returns.push(o8);
// 1374
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1375
f508011038_537.returns.push(1374696746991);
// 1376
o8 = {};
// 1377
f508011038_0.returns.push(o8);
// 1378
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1379
f508011038_537.returns.push(1374696746991);
// 1380
o8 = {};
// 1381
f508011038_0.returns.push(o8);
// 1382
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1383
f508011038_537.returns.push(1374696746991);
// 1384
o8 = {};
// 1385
f508011038_0.returns.push(o8);
// 1386
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1387
f508011038_537.returns.push(1374696746992);
// 1388
o8 = {};
// 1389
f508011038_0.returns.push(o8);
// 1390
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1391
f508011038_537.returns.push(1374696746992);
// 1392
o8 = {};
// 1393
f508011038_0.returns.push(o8);
// 1394
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1395
f508011038_537.returns.push(1374696746992);
// 1396
o8 = {};
// 1397
f508011038_0.returns.push(o8);
// 1398
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1399
f508011038_537.returns.push(1374696746993);
// 1400
o8 = {};
// 1401
f508011038_0.returns.push(o8);
// 1402
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1403
f508011038_537.returns.push(1374696746993);
// 1404
o8 = {};
// 1405
f508011038_0.returns.push(o8);
// 1406
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1407
f508011038_537.returns.push(1374696746993);
// 1408
o8 = {};
// 1409
f508011038_0.returns.push(o8);
// 1410
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1411
f508011038_537.returns.push(1374696746993);
// 1412
f508011038_575 = function() { return f508011038_575.returns[f508011038_575.inst++]; };
f508011038_575.returns = [];
f508011038_575.inst = 0;
// 1413
o2.getItem = f508011038_575;
// 1414
f508011038_575.returns.push(null);
// 1416
f508011038_575.returns.push(null);
// 1417
o8 = {};
// 1418
f508011038_0.returns.push(o8);
// 1419
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1420
f508011038_537.returns.push(1374696746994);
// 1421
o8 = {};
// 1422
f508011038_0.returns.push(o8);
// 1423
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1424
f508011038_537.returns.push(1374696746994);
// 1425
o8 = {};
// 1426
f508011038_0.returns.push(o8);
// 1427
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1428
f508011038_537.returns.push(1374696746994);
// 1429
o8 = {};
// 1430
f508011038_0.returns.push(o8);
// 1431
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1432
f508011038_537.returns.push(1374696746994);
// 1433
o8 = {};
// 1434
f508011038_0.returns.push(o8);
// 1435
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1436
f508011038_537.returns.push(1374696746994);
// 1437
o8 = {};
// 1438
f508011038_0.returns.push(o8);
// 1439
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1440
f508011038_537.returns.push(1374696746995);
// 1446
o8 = {};
// 1447
f508011038_546.returns.push(o8);
// 1448
o8["0"] = o6;
// 1449
o8["1"] = void 0;
// undefined
o8 = null;
// 1450
o6.nodeType = 1;
// 1458
o8 = {};
// 1459
f508011038_524.returns.push(o8);
// 1460
o13 = {};
// 1461
o8["0"] = o13;
// 1462
o8["1"] = void 0;
// undefined
o8 = null;
// 1463
o13.nodeType = 1;
// 1464
o13.type = "hidden";
// 1465
o13.nodeName = "INPUT";
// 1466
o13.value = "app/pages/search/search";
// undefined
o13 = null;
// 1467
o8 = {};
// 1468
f508011038_0.returns.push(o8);
// 1469
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1470
f508011038_537.returns.push(1374696746998);
// 1471
o8 = {};
// 1472
f508011038_0.returns.push(o8);
// 1473
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1474
f508011038_537.returns.push(1374696747010);
// 1475
o11.cloneNode = f508011038_488;
// undefined
o11 = null;
// 1476
o8 = {};
// 1477
f508011038_488.returns.push(o8);
// 1478
// 1479
// 1480
// 1481
// 1482
// 1483
// 1484
// 1486
o12.parentNode = o9;
// undefined
o12 = null;
// 1487
o9.insertBefore = f508011038_513;
// undefined
o9 = null;
// 1489
f508011038_513.returns.push(o8);
// 1491
// 1492
// 1493
// 1494
// 1496
o9 = {};
// undefined
fow508011038_JSBNG__event = function() { return fow508011038_JSBNG__event.returns[fow508011038_JSBNG__event.inst++]; };
fow508011038_JSBNG__event.returns = [];
fow508011038_JSBNG__event.inst = 0;
defineGetter(ow508011038, "JSBNG__event", fow508011038_JSBNG__event, undefined);
// undefined
fow508011038_JSBNG__event.returns.push(o9);
// 1498
o9.type = "load";
// undefined
o9 = null;
// 1499
// undefined
o8 = null;
// 1500
o8 = {};
// 1501
f508011038_0.returns.push(o8);
// 1502
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1503
f508011038_537.returns.push(1374696760710);
// 1504
o8 = {};
// 1505
f508011038_0.returns.push(o8);
// 1506
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1507
f508011038_537.returns.push(1374696760710);
// 1508
o8 = {};
// 1509
f508011038_0.returns.push(o8);
// 1510
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1511
f508011038_537.returns.push(1374696760711);
// 1512
o8 = {};
// 1513
f508011038_0.returns.push(o8);
// 1514
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1515
f508011038_537.returns.push(1374696760712);
// 1516
o8 = {};
// 1517
f508011038_0.returns.push(o8);
// 1518
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1519
f508011038_537.returns.push(1374696760712);
// 1520
o8 = {};
// 1521
f508011038_0.returns.push(o8);
// 1522
o8.getTime = f508011038_537;
// undefined
o8 = null;
// 1523
f508011038_537.returns.push(1374696760716);
// 1525
o8 = {};
// 1526
f508011038_488.returns.push(o8);
// 1527
// 1528
// 1529
// 1530
// 1531
// 1532
// 1533
// 1538
f508011038_513.returns.push(o8);
// 1539
o9 = {};
// 1540
f508011038_0.returns.push(o9);
// 1541
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1542
f508011038_537.returns.push(1374696760717);
// 1543
o9 = {};
// 1544
f508011038_0.returns.push(o9);
// 1545
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1546
f508011038_537.returns.push(1374696760717);
// 1547
o9 = {};
// 1548
f508011038_0.returns.push(o9);
// 1549
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1550
f508011038_537.returns.push(1374696760717);
// 1551
o9 = {};
// 1552
f508011038_0.returns.push(o9);
// 1553
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1554
f508011038_537.returns.push(1374696760718);
// 1555
o9 = {};
// 1556
f508011038_0.returns.push(o9);
// 1557
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1558
f508011038_537.returns.push(1374696760718);
// 1559
o9 = {};
// 1560
f508011038_0.returns.push(o9);
// 1561
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1562
f508011038_537.returns.push(1374696760718);
// 1563
o9 = {};
// 1564
f508011038_0.returns.push(o9);
// 1565
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1566
f508011038_537.returns.push(1374696760718);
// 1567
o9 = {};
// 1568
f508011038_0.returns.push(o9);
// 1569
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1570
f508011038_537.returns.push(1374696760719);
// 1571
o9 = {};
// 1572
f508011038_0.returns.push(o9);
// 1573
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1574
f508011038_537.returns.push(1374696760719);
// 1575
o9 = {};
// 1576
f508011038_0.returns.push(o9);
// 1577
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1578
f508011038_537.returns.push(1374696760719);
// 1579
o9 = {};
// 1580
f508011038_0.returns.push(o9);
// 1581
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1582
f508011038_537.returns.push(1374696760719);
// 1583
o9 = {};
// 1584
f508011038_0.returns.push(o9);
// 1585
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1586
f508011038_537.returns.push(1374696760719);
// 1587
o9 = {};
// 1588
f508011038_0.returns.push(o9);
// 1589
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1590
f508011038_537.returns.push(1374696760720);
// 1591
o9 = {};
// 1592
f508011038_0.returns.push(o9);
// 1593
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1594
f508011038_537.returns.push(1374696760720);
// 1595
o9 = {};
// 1596
f508011038_0.returns.push(o9);
// 1597
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1598
f508011038_537.returns.push(1374696760720);
// 1599
o9 = {};
// 1600
f508011038_0.returns.push(o9);
// 1601
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1602
f508011038_537.returns.push(1374696760720);
// 1603
o9 = {};
// 1604
f508011038_0.returns.push(o9);
// 1605
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1606
f508011038_537.returns.push(1374696760727);
// 1607
o9 = {};
// 1608
f508011038_0.returns.push(o9);
// 1609
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1610
f508011038_537.returns.push(1374696760727);
// 1611
o9 = {};
// 1612
f508011038_0.returns.push(o9);
// 1613
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1614
f508011038_537.returns.push(1374696760727);
// 1615
o9 = {};
// 1616
f508011038_0.returns.push(o9);
// 1617
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1618
f508011038_537.returns.push(1374696760727);
// 1619
o9 = {};
// 1620
f508011038_0.returns.push(o9);
// 1621
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1622
f508011038_537.returns.push(1374696760727);
// 1623
o9 = {};
// 1624
f508011038_0.returns.push(o9);
// 1625
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1626
f508011038_537.returns.push(1374696760727);
// 1627
o9 = {};
// 1628
f508011038_0.returns.push(o9);
// 1629
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1630
f508011038_537.returns.push(1374696760727);
// 1631
o9 = {};
// 1632
f508011038_0.returns.push(o9);
// 1633
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1634
f508011038_537.returns.push(1374696760727);
// 1635
o9 = {};
// 1636
f508011038_0.returns.push(o9);
// 1637
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1638
f508011038_537.returns.push(1374696760727);
// 1639
o9 = {};
// 1640
f508011038_0.returns.push(o9);
// 1641
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1642
f508011038_537.returns.push(1374696760727);
// 1643
o9 = {};
// 1644
f508011038_0.returns.push(o9);
// 1645
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1646
f508011038_537.returns.push(1374696760727);
// 1647
o9 = {};
// 1648
f508011038_0.returns.push(o9);
// 1649
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1650
f508011038_537.returns.push(1374696760727);
// 1651
o9 = {};
// 1652
f508011038_0.returns.push(o9);
// 1653
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1654
f508011038_537.returns.push(1374696760727);
// 1655
o9 = {};
// 1656
f508011038_0.returns.push(o9);
// 1657
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1658
f508011038_537.returns.push(1374696760727);
// 1659
o9 = {};
// 1660
f508011038_0.returns.push(o9);
// 1661
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1662
f508011038_537.returns.push(1374696760727);
// 1663
o9 = {};
// 1664
f508011038_0.returns.push(o9);
// 1665
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1666
f508011038_537.returns.push(1374696760727);
// 1667
o9 = {};
// 1668
f508011038_0.returns.push(o9);
// 1669
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1670
f508011038_537.returns.push(1374696760728);
// 1671
o9 = {};
// 1672
f508011038_0.returns.push(o9);
// 1673
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1674
f508011038_537.returns.push(1374696760728);
// 1675
o9 = {};
// 1676
f508011038_0.returns.push(o9);
// 1677
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1678
f508011038_537.returns.push(1374696760728);
// 1679
o9 = {};
// 1680
f508011038_0.returns.push(o9);
// 1681
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1682
f508011038_537.returns.push(1374696760728);
// 1683
o9 = {};
// 1684
f508011038_0.returns.push(o9);
// 1685
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1686
f508011038_537.returns.push(1374696760728);
// 1687
o9 = {};
// 1688
f508011038_0.returns.push(o9);
// 1689
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1690
f508011038_537.returns.push(1374696760728);
// 1691
o9 = {};
// 1692
f508011038_0.returns.push(o9);
// 1693
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1694
f508011038_537.returns.push(1374696760728);
// 1695
o9 = {};
// 1696
f508011038_0.returns.push(o9);
// 1697
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1698
f508011038_537.returns.push(1374696760728);
// 1699
o9 = {};
// 1700
f508011038_0.returns.push(o9);
// 1701
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1702
f508011038_537.returns.push(1374696760728);
// 1703
o9 = {};
// 1704
f508011038_0.returns.push(o9);
// 1705
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1706
f508011038_537.returns.push(1374696760728);
// 1707
o9 = {};
// 1708
f508011038_0.returns.push(o9);
// 1709
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1710
f508011038_537.returns.push(1374696760729);
// 1711
o9 = {};
// 1712
f508011038_0.returns.push(o9);
// 1713
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1714
f508011038_537.returns.push(1374696760735);
// 1715
o9 = {};
// 1716
f508011038_0.returns.push(o9);
// 1717
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1718
f508011038_537.returns.push(1374696760735);
// 1719
o9 = {};
// 1720
f508011038_0.returns.push(o9);
// 1721
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1722
f508011038_537.returns.push(1374696760735);
// 1723
o9 = {};
// 1724
f508011038_0.returns.push(o9);
// 1725
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1726
f508011038_537.returns.push(1374696760735);
// 1727
o9 = {};
// 1728
f508011038_0.returns.push(o9);
// 1729
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1730
f508011038_537.returns.push(1374696760736);
// 1731
o9 = {};
// 1732
f508011038_0.returns.push(o9);
// 1733
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1734
f508011038_537.returns.push(1374696760736);
// 1735
o9 = {};
// 1736
f508011038_0.returns.push(o9);
// 1737
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1738
f508011038_537.returns.push(1374696760736);
// 1739
o9 = {};
// 1740
f508011038_0.returns.push(o9);
// 1741
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1742
f508011038_537.returns.push(1374696760736);
// 1743
o9 = {};
// 1744
f508011038_0.returns.push(o9);
// 1745
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1746
f508011038_537.returns.push(1374696760736);
// 1747
o9 = {};
// 1748
f508011038_0.returns.push(o9);
// 1749
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1750
f508011038_537.returns.push(1374696760736);
// 1751
o9 = {};
// 1752
f508011038_0.returns.push(o9);
// 1753
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1754
f508011038_537.returns.push(1374696760736);
// 1755
o9 = {};
// 1756
f508011038_0.returns.push(o9);
// 1757
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1758
f508011038_537.returns.push(1374696760736);
// 1759
o9 = {};
// 1760
f508011038_0.returns.push(o9);
// 1761
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1762
f508011038_537.returns.push(1374696760737);
// 1763
o9 = {};
// 1764
f508011038_0.returns.push(o9);
// 1765
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1766
f508011038_537.returns.push(1374696760737);
// 1767
o9 = {};
// 1768
f508011038_0.returns.push(o9);
// 1769
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1770
f508011038_537.returns.push(1374696760737);
// 1771
o9 = {};
// 1772
f508011038_0.returns.push(o9);
// 1773
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1774
f508011038_537.returns.push(1374696760738);
// 1775
o9 = {};
// 1776
f508011038_0.returns.push(o9);
// 1777
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1778
f508011038_537.returns.push(1374696760738);
// 1779
o9 = {};
// 1780
f508011038_0.returns.push(o9);
// 1781
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1782
f508011038_537.returns.push(1374696760738);
// 1783
o9 = {};
// 1784
f508011038_0.returns.push(o9);
// 1785
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1786
f508011038_537.returns.push(1374696760738);
// 1787
o9 = {};
// 1788
f508011038_0.returns.push(o9);
// 1789
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1790
f508011038_537.returns.push(1374696760738);
// 1791
o9 = {};
// 1792
f508011038_0.returns.push(o9);
// 1793
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1794
f508011038_537.returns.push(1374696760738);
// 1795
o9 = {};
// 1796
f508011038_0.returns.push(o9);
// 1797
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1798
f508011038_537.returns.push(1374696760739);
// 1799
o9 = {};
// 1800
f508011038_0.returns.push(o9);
// 1801
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1802
f508011038_537.returns.push(1374696760739);
// 1803
o9 = {};
// 1804
f508011038_0.returns.push(o9);
// 1805
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1806
f508011038_537.returns.push(1374696760739);
// 1807
o9 = {};
// 1808
f508011038_0.returns.push(o9);
// 1809
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1810
f508011038_537.returns.push(1374696760739);
// 1811
o9 = {};
// 1812
f508011038_0.returns.push(o9);
// 1813
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1814
f508011038_537.returns.push(1374696760740);
// 1815
o9 = {};
// 1816
f508011038_0.returns.push(o9);
// 1817
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1818
f508011038_537.returns.push(1374696760740);
// 1819
o9 = {};
// 1820
f508011038_0.returns.push(o9);
// 1821
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1822
f508011038_537.returns.push(1374696760744);
// 1823
o9 = {};
// 1824
f508011038_0.returns.push(o9);
// 1825
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1826
f508011038_537.returns.push(1374696760744);
// 1827
o9 = {};
// 1828
f508011038_0.returns.push(o9);
// 1829
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1830
f508011038_537.returns.push(1374696760744);
// 1831
o9 = {};
// 1832
f508011038_0.returns.push(o9);
// 1833
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1834
f508011038_537.returns.push(1374696760744);
// 1835
o9 = {};
// 1836
f508011038_0.returns.push(o9);
// 1837
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1838
f508011038_537.returns.push(1374696760744);
// 1839
o9 = {};
// 1840
f508011038_0.returns.push(o9);
// 1841
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1842
f508011038_537.returns.push(1374696760744);
// 1843
o9 = {};
// 1844
f508011038_0.returns.push(o9);
// 1845
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1846
f508011038_537.returns.push(1374696760744);
// 1847
o9 = {};
// 1848
f508011038_0.returns.push(o9);
// 1849
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1850
f508011038_537.returns.push(1374696760744);
// 1851
o9 = {};
// 1852
f508011038_0.returns.push(o9);
// 1853
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1854
f508011038_537.returns.push(1374696760744);
// 1855
o9 = {};
// 1856
f508011038_0.returns.push(o9);
// 1857
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1858
f508011038_537.returns.push(1374696760745);
// 1859
o9 = {};
// 1860
f508011038_0.returns.push(o9);
// 1861
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1862
f508011038_537.returns.push(1374696760745);
// 1863
o9 = {};
// 1864
f508011038_0.returns.push(o9);
// 1865
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1866
f508011038_537.returns.push(1374696760745);
// 1867
o9 = {};
// 1868
f508011038_0.returns.push(o9);
// 1869
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1870
f508011038_537.returns.push(1374696760746);
// 1871
o9 = {};
// 1872
f508011038_0.returns.push(o9);
// 1873
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1874
f508011038_537.returns.push(1374696760747);
// 1875
o9 = {};
// 1876
f508011038_0.returns.push(o9);
// 1877
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1878
f508011038_537.returns.push(1374696760747);
// 1879
o9 = {};
// 1880
f508011038_0.returns.push(o9);
// 1881
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1882
f508011038_537.returns.push(1374696760747);
// 1883
o9 = {};
// 1884
f508011038_0.returns.push(o9);
// 1885
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1886
f508011038_537.returns.push(1374696760747);
// 1887
o9 = {};
// 1888
f508011038_0.returns.push(o9);
// 1889
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1890
f508011038_537.returns.push(1374696760747);
// 1891
o9 = {};
// 1892
f508011038_0.returns.push(o9);
// 1893
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1894
f508011038_537.returns.push(1374696760747);
// 1895
o9 = {};
// 1896
f508011038_0.returns.push(o9);
// 1897
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1898
f508011038_537.returns.push(1374696760747);
// 1899
o9 = {};
// 1900
f508011038_0.returns.push(o9);
// 1901
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1902
f508011038_537.returns.push(1374696760747);
// 1903
o9 = {};
// 1904
f508011038_0.returns.push(o9);
// 1905
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1906
f508011038_537.returns.push(1374696760747);
// 1907
o9 = {};
// 1908
f508011038_0.returns.push(o9);
// 1909
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1910
f508011038_537.returns.push(1374696760748);
// 1911
o9 = {};
// 1912
f508011038_0.returns.push(o9);
// 1913
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1914
f508011038_537.returns.push(1374696760748);
// 1915
o9 = {};
// 1916
f508011038_0.returns.push(o9);
// 1917
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1918
f508011038_537.returns.push(1374696760748);
// 1919
o9 = {};
// 1920
f508011038_0.returns.push(o9);
// 1921
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1922
f508011038_537.returns.push(1374696760749);
// 1923
o9 = {};
// 1924
f508011038_0.returns.push(o9);
// 1925
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1926
f508011038_537.returns.push(1374696760749);
// 1927
o9 = {};
// 1928
f508011038_0.returns.push(o9);
// 1929
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1930
f508011038_537.returns.push(1374696760752);
// 1931
o9 = {};
// 1932
f508011038_0.returns.push(o9);
// 1933
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1934
f508011038_537.returns.push(1374696760752);
// 1935
o9 = {};
// 1936
f508011038_0.returns.push(o9);
// 1937
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1938
f508011038_537.returns.push(1374696760752);
// 1939
o9 = {};
// 1940
f508011038_0.returns.push(o9);
// 1941
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1942
f508011038_537.returns.push(1374696760752);
// 1943
o9 = {};
// 1944
f508011038_0.returns.push(o9);
// 1945
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1946
f508011038_537.returns.push(1374696760753);
// 1947
o9 = {};
// 1948
f508011038_0.returns.push(o9);
// 1949
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1950
f508011038_537.returns.push(1374696760753);
// 1951
o9 = {};
// 1952
f508011038_0.returns.push(o9);
// 1953
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1954
f508011038_537.returns.push(1374696760753);
// 1955
o9 = {};
// 1956
f508011038_0.returns.push(o9);
// 1957
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1958
f508011038_537.returns.push(1374696760753);
// 1959
o9 = {};
// 1960
f508011038_0.returns.push(o9);
// 1961
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1962
f508011038_537.returns.push(1374696760753);
// 1963
o9 = {};
// 1964
f508011038_0.returns.push(o9);
// 1965
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1966
f508011038_537.returns.push(1374696760753);
// 1967
o9 = {};
// 1968
f508011038_0.returns.push(o9);
// 1969
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1970
f508011038_537.returns.push(1374696760753);
// 1971
o9 = {};
// 1972
f508011038_0.returns.push(o9);
// 1973
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1974
f508011038_537.returns.push(1374696760753);
// 1975
o9 = {};
// 1976
f508011038_0.returns.push(o9);
// 1977
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1978
f508011038_537.returns.push(1374696760754);
// 1979
o9 = {};
// 1980
f508011038_0.returns.push(o9);
// 1981
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1982
f508011038_537.returns.push(1374696760754);
// 1983
o9 = {};
// 1984
f508011038_0.returns.push(o9);
// 1985
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1986
f508011038_537.returns.push(1374696760754);
// 1987
o9 = {};
// 1988
f508011038_0.returns.push(o9);
// 1989
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1990
f508011038_537.returns.push(1374696760754);
// 1991
o9 = {};
// 1992
f508011038_0.returns.push(o9);
// 1993
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1994
f508011038_537.returns.push(1374696760754);
// 1995
o9 = {};
// 1996
f508011038_0.returns.push(o9);
// 1997
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 1998
f508011038_537.returns.push(1374696760754);
// 1999
o9 = {};
// 2000
f508011038_0.returns.push(o9);
// 2001
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2002
f508011038_537.returns.push(1374696760754);
// 2003
o9 = {};
// 2004
f508011038_0.returns.push(o9);
// 2005
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2006
f508011038_537.returns.push(1374696760754);
// 2007
o9 = {};
// 2008
f508011038_0.returns.push(o9);
// 2009
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2010
f508011038_537.returns.push(1374696760754);
// 2011
o9 = {};
// 2012
f508011038_0.returns.push(o9);
// 2013
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2014
f508011038_537.returns.push(1374696760754);
// 2015
o9 = {};
// 2016
f508011038_0.returns.push(o9);
// 2017
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2018
f508011038_537.returns.push(1374696760755);
// 2019
o9 = {};
// 2020
f508011038_0.returns.push(o9);
// 2021
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2022
f508011038_537.returns.push(1374696760755);
// 2023
o9 = {};
// 2024
f508011038_0.returns.push(o9);
// 2025
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2026
f508011038_537.returns.push(1374696760755);
// 2027
o9 = {};
// 2028
f508011038_0.returns.push(o9);
// 2029
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2030
f508011038_537.returns.push(1374696760755);
// 2031
o9 = {};
// 2032
f508011038_0.returns.push(o9);
// 2033
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2034
f508011038_537.returns.push(1374696760755);
// 2035
o9 = {};
// 2036
f508011038_0.returns.push(o9);
// 2037
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2038
f508011038_537.returns.push(1374696760758);
// 2039
o9 = {};
// 2040
f508011038_0.returns.push(o9);
// 2041
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2042
f508011038_537.returns.push(1374696760758);
// 2043
o9 = {};
// 2044
f508011038_0.returns.push(o9);
// 2045
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2046
f508011038_537.returns.push(1374696760758);
// 2047
o9 = {};
// 2048
f508011038_0.returns.push(o9);
// 2049
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2050
f508011038_537.returns.push(1374696760759);
// 2051
o9 = {};
// 2052
f508011038_0.returns.push(o9);
// 2053
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2054
f508011038_537.returns.push(1374696760759);
// 2055
o9 = {};
// 2056
f508011038_0.returns.push(o9);
// 2057
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2058
f508011038_537.returns.push(1374696760759);
// 2059
o9 = {};
// 2060
f508011038_0.returns.push(o9);
// 2061
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2062
f508011038_537.returns.push(1374696760759);
// 2063
o9 = {};
// 2064
f508011038_0.returns.push(o9);
// 2065
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2066
f508011038_537.returns.push(1374696760759);
// 2067
o9 = {};
// 2068
f508011038_0.returns.push(o9);
// 2069
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2070
f508011038_537.returns.push(1374696760759);
// 2071
o9 = {};
// 2072
f508011038_0.returns.push(o9);
// 2073
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2074
f508011038_537.returns.push(1374696760759);
// 2075
o9 = {};
// 2076
f508011038_0.returns.push(o9);
// 2077
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2078
f508011038_537.returns.push(1374696760759);
// 2079
o9 = {};
// 2080
f508011038_0.returns.push(o9);
// 2081
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2082
f508011038_537.returns.push(1374696760759);
// 2083
o9 = {};
// 2084
f508011038_0.returns.push(o9);
// 2085
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2086
f508011038_537.returns.push(1374696760760);
// 2087
o9 = {};
// 2088
f508011038_0.returns.push(o9);
// 2089
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2090
f508011038_537.returns.push(1374696760760);
// 2091
o9 = {};
// 2092
f508011038_0.returns.push(o9);
// 2093
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2094
f508011038_537.returns.push(1374696760760);
// 2095
o9 = {};
// 2096
f508011038_0.returns.push(o9);
// 2097
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2098
f508011038_537.returns.push(1374696760760);
// 2099
o9 = {};
// 2100
f508011038_0.returns.push(o9);
// 2101
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2102
f508011038_537.returns.push(1374696760760);
// 2103
o9 = {};
// 2104
f508011038_0.returns.push(o9);
// 2105
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2106
f508011038_537.returns.push(1374696760760);
// 2107
o9 = {};
// 2108
f508011038_0.returns.push(o9);
// 2109
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2110
f508011038_537.returns.push(1374696760761);
// 2111
o9 = {};
// 2112
f508011038_0.returns.push(o9);
// 2113
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2114
f508011038_537.returns.push(1374696760761);
// 2115
o9 = {};
// 2116
f508011038_0.returns.push(o9);
// 2117
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2118
f508011038_537.returns.push(1374696760761);
// 2119
o9 = {};
// 2120
f508011038_0.returns.push(o9);
// 2121
o9.getTime = f508011038_537;
// undefined
o9 = null;
// 2122
f508011038_537.returns.push(1374696760761);
// 2123
f508011038_742 = function() { return f508011038_742.returns[f508011038_742.inst++]; };
f508011038_742.returns = [];
f508011038_742.inst = 0;
// 2124
o2.setItem = f508011038_742;
// 2125
f508011038_742.returns.push(undefined);
// 2126
f508011038_743 = function() { return f508011038_743.returns[f508011038_743.inst++]; };
f508011038_743.returns = [];
f508011038_743.inst = 0;
// 2127
o2.removeItem = f508011038_743;
// undefined
o2 = null;
// 2128
f508011038_743.returns.push(undefined);
// 2129
o2 = {};
// 2130
f508011038_0.returns.push(o2);
// 2131
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2132
f508011038_537.returns.push(1374696760763);
// 2133
o2 = {};
// 2134
f508011038_0.returns.push(o2);
// 2135
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2136
f508011038_537.returns.push(1374696760763);
// 2137
o2 = {};
// 2138
f508011038_0.returns.push(o2);
// 2139
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2140
f508011038_537.returns.push(1374696760763);
// 2141
o2 = {};
// 2142
f508011038_0.returns.push(o2);
// 2143
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2144
f508011038_537.returns.push(1374696760769);
// 2145
o2 = {};
// 2146
f508011038_0.returns.push(o2);
// 2147
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2148
f508011038_537.returns.push(1374696760769);
// 2149
o2 = {};
// 2150
f508011038_0.returns.push(o2);
// 2151
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2152
f508011038_537.returns.push(1374696760769);
// 2153
o2 = {};
// 2154
f508011038_0.returns.push(o2);
// 2155
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2156
f508011038_537.returns.push(1374696760769);
// 2157
o2 = {};
// 2158
f508011038_0.returns.push(o2);
// 2159
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2160
f508011038_537.returns.push(1374696760770);
// 2161
o2 = {};
// 2162
f508011038_0.returns.push(o2);
// 2163
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2164
f508011038_537.returns.push(1374696760770);
// 2165
o2 = {};
// 2166
f508011038_0.returns.push(o2);
// 2167
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2168
f508011038_537.returns.push(1374696760770);
// 2169
o2 = {};
// 2170
f508011038_0.returns.push(o2);
// 2171
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2172
f508011038_537.returns.push(1374696760770);
// 2173
o2 = {};
// 2174
f508011038_0.returns.push(o2);
// 2175
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2176
f508011038_537.returns.push(1374696760770);
// 2177
o2 = {};
// 2178
f508011038_0.returns.push(o2);
// 2179
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2180
f508011038_537.returns.push(1374696760770);
// 2181
o2 = {};
// 2182
f508011038_0.returns.push(o2);
// 2183
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2184
f508011038_537.returns.push(1374696760770);
// 2185
o2 = {};
// 2186
f508011038_0.returns.push(o2);
// 2187
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2188
f508011038_537.returns.push(1374696760770);
// 2189
o2 = {};
// 2190
f508011038_0.returns.push(o2);
// 2191
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2192
f508011038_537.returns.push(1374696760770);
// 2193
o2 = {};
// 2194
f508011038_0.returns.push(o2);
// 2195
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2196
f508011038_537.returns.push(1374696760770);
// 2197
o2 = {};
// 2198
f508011038_0.returns.push(o2);
// 2199
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2200
f508011038_537.returns.push(1374696760771);
// 2201
o2 = {};
// 2202
f508011038_0.returns.push(o2);
// 2203
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2204
f508011038_537.returns.push(1374696760771);
// 2205
o2 = {};
// 2206
f508011038_0.returns.push(o2);
// 2207
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2208
f508011038_537.returns.push(1374696760772);
// 2209
o2 = {};
// 2210
f508011038_0.returns.push(o2);
// 2211
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2212
f508011038_537.returns.push(1374696760772);
// 2213
o2 = {};
// 2214
f508011038_0.returns.push(o2);
// 2215
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2216
f508011038_537.returns.push(1374696760772);
// 2217
o2 = {};
// 2218
f508011038_0.returns.push(o2);
// 2219
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2220
f508011038_537.returns.push(1374696760772);
// 2221
o2 = {};
// 2222
f508011038_0.returns.push(o2);
// 2223
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2224
f508011038_537.returns.push(1374696760772);
// 2225
o2 = {};
// 2226
f508011038_0.returns.push(o2);
// 2227
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2228
f508011038_537.returns.push(1374696760773);
// 2229
o2 = {};
// 2230
f508011038_0.returns.push(o2);
// 2231
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2232
f508011038_537.returns.push(1374696760773);
// 2233
o2 = {};
// 2234
f508011038_0.returns.push(o2);
// 2235
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2236
f508011038_537.returns.push(1374696760773);
// 2237
o2 = {};
// 2238
f508011038_0.returns.push(o2);
// 2239
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2240
f508011038_537.returns.push(1374696760773);
// 2241
o2 = {};
// 2242
f508011038_0.returns.push(o2);
// 2243
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2244
f508011038_537.returns.push(1374696760773);
// 2245
o2 = {};
// 2246
f508011038_0.returns.push(o2);
// 2247
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2248
f508011038_537.returns.push(1374696760773);
// 2249
o2 = {};
// 2250
f508011038_0.returns.push(o2);
// 2251
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2252
f508011038_537.returns.push(1374696760776);
// 2253
o2 = {};
// 2254
f508011038_0.returns.push(o2);
// 2255
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2256
f508011038_537.returns.push(1374696760776);
// 2257
o2 = {};
// 2258
f508011038_0.returns.push(o2);
// 2259
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2260
f508011038_537.returns.push(1374696760776);
// 2261
o2 = {};
// 2262
f508011038_0.returns.push(o2);
// 2263
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2264
f508011038_537.returns.push(1374696760776);
// 2265
o2 = {};
// 2266
f508011038_0.returns.push(o2);
// 2267
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2268
f508011038_537.returns.push(1374696760777);
// 2269
o2 = {};
// 2270
f508011038_0.returns.push(o2);
// 2271
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2272
f508011038_537.returns.push(1374696760777);
// 2273
o2 = {};
// 2274
f508011038_0.returns.push(o2);
// 2275
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2276
f508011038_537.returns.push(1374696760777);
// 2277
o2 = {};
// 2278
f508011038_0.returns.push(o2);
// 2279
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2280
f508011038_537.returns.push(1374696760777);
// 2281
o2 = {};
// 2282
f508011038_0.returns.push(o2);
// 2283
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2284
f508011038_537.returns.push(1374696760777);
// 2285
o2 = {};
// 2286
f508011038_0.returns.push(o2);
// 2287
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2288
f508011038_537.returns.push(1374696760777);
// 2289
o2 = {};
// 2290
f508011038_0.returns.push(o2);
// 2291
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2292
f508011038_537.returns.push(1374696760777);
// 2293
o2 = {};
// 2294
f508011038_0.returns.push(o2);
// 2295
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2296
f508011038_537.returns.push(1374696760778);
// 2297
o2 = {};
// 2298
f508011038_0.returns.push(o2);
// 2299
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2300
f508011038_537.returns.push(1374696760778);
// 2301
o2 = {};
// 2302
f508011038_0.returns.push(o2);
// 2303
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2304
f508011038_537.returns.push(1374696760778);
// 2305
o2 = {};
// 2306
f508011038_0.returns.push(o2);
// 2307
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2308
f508011038_537.returns.push(1374696760778);
// 2309
o2 = {};
// 2310
f508011038_0.returns.push(o2);
// 2311
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2312
f508011038_537.returns.push(1374696760778);
// 2313
o2 = {};
// 2314
f508011038_0.returns.push(o2);
// 2315
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2316
f508011038_537.returns.push(1374696760778);
// 2317
o2 = {};
// 2318
f508011038_0.returns.push(o2);
// 2319
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2320
f508011038_537.returns.push(1374696760778);
// 2321
o2 = {};
// 2322
f508011038_0.returns.push(o2);
// 2323
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2324
f508011038_537.returns.push(1374696760778);
// 2325
o2 = {};
// 2326
f508011038_0.returns.push(o2);
// 2327
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2328
f508011038_537.returns.push(1374696760778);
// 2329
o2 = {};
// 2330
f508011038_0.returns.push(o2);
// 2331
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2332
f508011038_537.returns.push(1374696760779);
// 2333
o2 = {};
// 2334
f508011038_0.returns.push(o2);
// 2335
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2336
f508011038_537.returns.push(1374696760779);
// 2337
o2 = {};
// 2338
f508011038_0.returns.push(o2);
// 2339
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2340
f508011038_537.returns.push(1374696760779);
// 2341
o2 = {};
// 2342
f508011038_0.returns.push(o2);
// 2343
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2344
f508011038_537.returns.push(1374696760779);
// 2345
o2 = {};
// 2346
f508011038_0.returns.push(o2);
// 2347
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2348
f508011038_537.returns.push(1374696760779);
// 2349
o2 = {};
// 2350
f508011038_0.returns.push(o2);
// 2351
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2352
f508011038_537.returns.push(1374696760779);
// 2353
o2 = {};
// 2354
f508011038_0.returns.push(o2);
// 2355
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2356
f508011038_537.returns.push(1374696760781);
// 2357
o2 = {};
// 2358
f508011038_0.returns.push(o2);
// 2359
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2360
f508011038_537.returns.push(1374696760784);
// 2361
o2 = {};
// 2362
f508011038_0.returns.push(o2);
// 2363
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2364
f508011038_537.returns.push(1374696760784);
// 2365
o2 = {};
// 2366
f508011038_0.returns.push(o2);
// 2367
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2368
f508011038_537.returns.push(1374696760784);
// 2369
o2 = {};
// 2370
f508011038_0.returns.push(o2);
// 2371
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2372
f508011038_537.returns.push(1374696760784);
// 2373
o2 = {};
// 2374
f508011038_0.returns.push(o2);
// 2375
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2376
f508011038_537.returns.push(1374696760784);
// 2377
o2 = {};
// 2378
f508011038_0.returns.push(o2);
// 2379
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2380
f508011038_537.returns.push(1374696760784);
// 2381
o2 = {};
// 2382
f508011038_0.returns.push(o2);
// 2383
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2384
f508011038_537.returns.push(1374696760784);
// 2385
o2 = {};
// 2386
f508011038_0.returns.push(o2);
// 2387
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2388
f508011038_537.returns.push(1374696760784);
// 2389
o2 = {};
// 2390
f508011038_0.returns.push(o2);
// 2391
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2392
f508011038_537.returns.push(1374696760784);
// 2393
o2 = {};
// 2394
f508011038_0.returns.push(o2);
// 2395
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2396
f508011038_537.returns.push(1374696760784);
// 2397
o2 = {};
// 2398
f508011038_0.returns.push(o2);
// 2399
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2400
f508011038_537.returns.push(1374696760784);
// 2401
o2 = {};
// 2402
f508011038_0.returns.push(o2);
// 2403
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2404
f508011038_537.returns.push(1374696760784);
// 2405
o2 = {};
// 2406
f508011038_0.returns.push(o2);
// 2407
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2408
f508011038_537.returns.push(1374696760784);
// 2409
o2 = {};
// 2410
f508011038_0.returns.push(o2);
// 2411
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2412
f508011038_537.returns.push(1374696760784);
// 2413
o2 = {};
// 2414
f508011038_0.returns.push(o2);
// 2415
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2416
f508011038_537.returns.push(1374696760785);
// 2417
o2 = {};
// 2418
f508011038_0.returns.push(o2);
// 2419
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2420
f508011038_537.returns.push(1374696760785);
// 2421
o2 = {};
// 2422
f508011038_0.returns.push(o2);
// 2423
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2424
f508011038_537.returns.push(1374696760785);
// 2425
o2 = {};
// 2426
f508011038_0.returns.push(o2);
// 2427
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2428
f508011038_537.returns.push(1374696760785);
// 2429
o2 = {};
// 2430
f508011038_0.returns.push(o2);
// 2431
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2432
f508011038_537.returns.push(1374696760785);
// 2433
o2 = {};
// 2434
f508011038_0.returns.push(o2);
// 2435
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2436
f508011038_537.returns.push(1374696760785);
// 2437
o2 = {};
// 2438
f508011038_0.returns.push(o2);
// 2439
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2440
f508011038_537.returns.push(1374696760785);
// 2441
o2 = {};
// 2442
f508011038_0.returns.push(o2);
// 2443
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2444
f508011038_537.returns.push(1374696760785);
// 2445
o2 = {};
// 2446
f508011038_0.returns.push(o2);
// 2447
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2448
f508011038_537.returns.push(1374696760785);
// 2449
o2 = {};
// 2450
f508011038_0.returns.push(o2);
// 2451
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2452
f508011038_537.returns.push(1374696760785);
// 2453
o2 = {};
// 2454
f508011038_0.returns.push(o2);
// 2455
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2456
f508011038_537.returns.push(1374696760785);
// 2457
o2 = {};
// 2458
f508011038_0.returns.push(o2);
// 2459
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2460
f508011038_537.returns.push(1374696760786);
// 2461
o2 = {};
// 2462
f508011038_0.returns.push(o2);
// 2463
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2464
f508011038_537.returns.push(1374696760786);
// 2465
o2 = {};
// 2466
f508011038_0.returns.push(o2);
// 2467
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2468
f508011038_537.returns.push(1374696760789);
// 2469
o2 = {};
// 2470
f508011038_0.returns.push(o2);
// 2471
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2472
f508011038_537.returns.push(1374696760791);
// 2473
o2 = {};
// 2474
f508011038_0.returns.push(o2);
// 2475
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2476
f508011038_537.returns.push(1374696760791);
// 2477
o2 = {};
// 2478
f508011038_0.returns.push(o2);
// 2479
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2480
f508011038_537.returns.push(1374696760791);
// 2481
o2 = {};
// 2482
f508011038_0.returns.push(o2);
// 2483
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2484
f508011038_537.returns.push(1374696760793);
// 2485
o2 = {};
// 2486
f508011038_0.returns.push(o2);
// 2487
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2488
f508011038_537.returns.push(1374696760793);
// 2489
o2 = {};
// 2490
f508011038_0.returns.push(o2);
// 2491
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2492
f508011038_537.returns.push(1374696760793);
// 2493
o2 = {};
// 2494
f508011038_0.returns.push(o2);
// 2495
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2496
f508011038_537.returns.push(1374696760794);
// 2497
o2 = {};
// 2498
f508011038_0.returns.push(o2);
// 2499
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2500
f508011038_537.returns.push(1374696760794);
// 2501
o2 = {};
// 2502
f508011038_0.returns.push(o2);
// 2503
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2504
f508011038_537.returns.push(1374696760794);
// 2505
o2 = {};
// 2506
f508011038_0.returns.push(o2);
// 2507
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2508
f508011038_537.returns.push(1374696760794);
// 2509
o2 = {};
// 2510
f508011038_0.returns.push(o2);
// 2511
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2512
f508011038_537.returns.push(1374696760794);
// 2513
o2 = {};
// 2514
f508011038_0.returns.push(o2);
// 2515
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2516
f508011038_537.returns.push(1374696760794);
// 2517
o2 = {};
// 2518
f508011038_0.returns.push(o2);
// 2519
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2520
f508011038_537.returns.push(1374696760794);
// 2521
o2 = {};
// 2522
f508011038_0.returns.push(o2);
// 2523
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2524
f508011038_537.returns.push(1374696760795);
// 2525
o2 = {};
// 2526
f508011038_0.returns.push(o2);
// 2527
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2528
f508011038_537.returns.push(1374696760795);
// 2529
o2 = {};
// 2530
f508011038_0.returns.push(o2);
// 2531
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2532
f508011038_537.returns.push(1374696760795);
// 2533
o2 = {};
// 2534
f508011038_0.returns.push(o2);
// 2535
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2536
f508011038_537.returns.push(1374696760795);
// 2537
o2 = {};
// 2538
f508011038_0.returns.push(o2);
// 2539
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2540
f508011038_537.returns.push(1374696760796);
// 2541
o2 = {};
// 2542
f508011038_0.returns.push(o2);
// 2543
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2544
f508011038_537.returns.push(1374696760796);
// 2545
o2 = {};
// 2546
f508011038_0.returns.push(o2);
// 2547
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2548
f508011038_537.returns.push(1374696760796);
// 2549
o2 = {};
// 2550
f508011038_0.returns.push(o2);
// 2551
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2552
f508011038_537.returns.push(1374696760797);
// 2553
o2 = {};
// 2554
f508011038_0.returns.push(o2);
// 2555
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2556
f508011038_537.returns.push(1374696760797);
// 2557
o2 = {};
// 2558
f508011038_0.returns.push(o2);
// 2559
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2560
f508011038_537.returns.push(1374696760797);
// 2561
o2 = {};
// 2562
f508011038_0.returns.push(o2);
// 2563
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2564
f508011038_537.returns.push(1374696760797);
// 2565
o2 = {};
// 2566
f508011038_0.returns.push(o2);
// 2567
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2568
f508011038_537.returns.push(1374696760797);
// 2569
o2 = {};
// 2570
f508011038_0.returns.push(o2);
// 2571
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2572
f508011038_537.returns.push(1374696760797);
// 2573
o2 = {};
// 2574
f508011038_0.returns.push(o2);
// 2575
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2576
f508011038_537.returns.push(1374696760801);
// 2577
o2 = {};
// 2578
f508011038_0.returns.push(o2);
// 2579
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2580
f508011038_537.returns.push(1374696760801);
// 2581
o2 = {};
// 2582
f508011038_0.returns.push(o2);
// 2583
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2584
f508011038_537.returns.push(1374696760802);
// 2585
o2 = {};
// 2586
f508011038_0.returns.push(o2);
// 2587
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2588
f508011038_537.returns.push(1374696760802);
// 2589
o2 = {};
// 2590
f508011038_0.returns.push(o2);
// 2591
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2592
f508011038_537.returns.push(1374696760802);
// 2593
o2 = {};
// 2594
f508011038_0.returns.push(o2);
// 2595
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2596
f508011038_537.returns.push(1374696760802);
// 2597
o2 = {};
// 2598
f508011038_0.returns.push(o2);
// 2599
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2600
f508011038_537.returns.push(1374696760803);
// 2601
o2 = {};
// 2602
f508011038_0.returns.push(o2);
// 2603
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2604
f508011038_537.returns.push(1374696760803);
// 2605
o2 = {};
// 2606
f508011038_0.returns.push(o2);
// 2607
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2608
f508011038_537.returns.push(1374696760803);
// 2609
o2 = {};
// 2610
f508011038_0.returns.push(o2);
// 2611
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2612
f508011038_537.returns.push(1374696760803);
// 2613
o2 = {};
// 2614
f508011038_0.returns.push(o2);
// 2615
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2616
f508011038_537.returns.push(1374696760803);
// 2617
o2 = {};
// 2618
f508011038_0.returns.push(o2);
// 2619
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2620
f508011038_537.returns.push(1374696760803);
// 2621
o2 = {};
// 2622
f508011038_0.returns.push(o2);
// 2623
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2624
f508011038_537.returns.push(1374696760803);
// 2625
o2 = {};
// 2626
f508011038_0.returns.push(o2);
// 2627
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2628
f508011038_537.returns.push(1374696760803);
// 2629
o2 = {};
// 2630
f508011038_0.returns.push(o2);
// 2631
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2632
f508011038_537.returns.push(1374696760803);
// 2633
o2 = {};
// 2634
f508011038_0.returns.push(o2);
// 2635
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2636
f508011038_537.returns.push(1374696760803);
// 2637
o2 = {};
// 2638
f508011038_0.returns.push(o2);
// 2639
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2640
f508011038_537.returns.push(1374696760806);
// 2641
o2 = {};
// 2642
f508011038_0.returns.push(o2);
// 2643
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2644
f508011038_537.returns.push(1374696760806);
// 2645
o2 = {};
// 2646
f508011038_0.returns.push(o2);
// 2647
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2648
f508011038_537.returns.push(1374696760806);
// 2649
o2 = {};
// 2650
f508011038_0.returns.push(o2);
// 2651
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2652
f508011038_537.returns.push(1374696760807);
// 2653
o2 = {};
// 2654
f508011038_0.returns.push(o2);
// 2655
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2656
f508011038_537.returns.push(1374696760807);
// 2657
o2 = {};
// 2658
f508011038_0.returns.push(o2);
// 2659
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2660
f508011038_537.returns.push(1374696760807);
// 2661
o2 = {};
// 2662
f508011038_0.returns.push(o2);
// 2663
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2664
f508011038_537.returns.push(1374696760807);
// 2665
o2 = {};
// 2666
f508011038_0.returns.push(o2);
// 2667
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2668
f508011038_537.returns.push(1374696760807);
// 2669
o2 = {};
// 2670
f508011038_0.returns.push(o2);
// 2671
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2672
f508011038_537.returns.push(1374696760814);
// 2673
o2 = {};
// 2674
f508011038_0.returns.push(o2);
// 2675
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2676
f508011038_537.returns.push(1374696760814);
// 2677
o2 = {};
// 2678
f508011038_0.returns.push(o2);
// 2679
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2680
f508011038_537.returns.push(1374696760814);
// 2681
o2 = {};
// 2682
f508011038_0.returns.push(o2);
// 2683
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2684
f508011038_537.returns.push(1374696760817);
// 2685
o2 = {};
// 2686
f508011038_0.returns.push(o2);
// 2687
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2688
f508011038_537.returns.push(1374696760818);
// 2689
o2 = {};
// 2690
f508011038_0.returns.push(o2);
// 2691
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2692
f508011038_537.returns.push(1374696760818);
// 2693
o2 = {};
// 2694
f508011038_0.returns.push(o2);
// 2695
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2696
f508011038_537.returns.push(1374696760818);
// 2697
o2 = {};
// 2698
f508011038_0.returns.push(o2);
// 2699
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2700
f508011038_537.returns.push(1374696760818);
// 2701
o2 = {};
// 2702
f508011038_0.returns.push(o2);
// 2703
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2704
f508011038_537.returns.push(1374696760818);
// 2705
o2 = {};
// 2706
f508011038_0.returns.push(o2);
// 2707
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2708
f508011038_537.returns.push(1374696760818);
// 2709
o2 = {};
// 2710
f508011038_0.returns.push(o2);
// 2711
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2712
f508011038_537.returns.push(1374696760818);
// 2713
o2 = {};
// 2714
f508011038_0.returns.push(o2);
// 2715
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2716
f508011038_537.returns.push(1374696760819);
// 2717
o2 = {};
// 2718
f508011038_0.returns.push(o2);
// 2719
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2720
f508011038_537.returns.push(1374696760819);
// 2721
o2 = {};
// 2722
f508011038_0.returns.push(o2);
// 2723
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2724
f508011038_537.returns.push(1374696760819);
// 2725
o2 = {};
// 2726
f508011038_0.returns.push(o2);
// 2727
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2728
f508011038_537.returns.push(1374696760820);
// 2729
o2 = {};
// 2730
f508011038_0.returns.push(o2);
// 2731
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2732
f508011038_537.returns.push(1374696760820);
// 2733
o2 = {};
// 2734
f508011038_0.returns.push(o2);
// 2735
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2736
f508011038_537.returns.push(1374696760820);
// 2737
o2 = {};
// 2738
f508011038_0.returns.push(o2);
// 2739
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2740
f508011038_537.returns.push(1374696760820);
// 2741
o2 = {};
// 2742
f508011038_0.returns.push(o2);
// 2743
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2744
f508011038_537.returns.push(1374696760820);
// 2745
o2 = {};
// 2746
f508011038_0.returns.push(o2);
// 2747
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2748
f508011038_537.returns.push(1374696760820);
// 2749
o2 = {};
// 2750
f508011038_0.returns.push(o2);
// 2751
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2752
f508011038_537.returns.push(1374696760821);
// 2753
o2 = {};
// 2754
f508011038_0.returns.push(o2);
// 2755
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2756
f508011038_537.returns.push(1374696760821);
// 2757
o2 = {};
// 2758
f508011038_0.returns.push(o2);
// 2759
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2760
f508011038_537.returns.push(1374696760823);
// 2761
o2 = {};
// 2762
f508011038_0.returns.push(o2);
// 2763
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2764
f508011038_537.returns.push(1374696760823);
// 2765
o2 = {};
// 2766
f508011038_0.returns.push(o2);
// 2767
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2768
f508011038_537.returns.push(1374696760823);
// 2769
o2 = {};
// 2770
f508011038_0.returns.push(o2);
// 2771
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2772
f508011038_537.returns.push(1374696760823);
// 2773
o2 = {};
// 2774
f508011038_0.returns.push(o2);
// 2775
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2776
f508011038_537.returns.push(1374696760823);
// 2777
o2 = {};
// 2778
f508011038_0.returns.push(o2);
// 2779
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2780
f508011038_537.returns.push(1374696760823);
// 2781
o2 = {};
// 2782
f508011038_0.returns.push(o2);
// 2783
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2784
f508011038_537.returns.push(1374696760823);
// 2785
o2 = {};
// 2786
f508011038_0.returns.push(o2);
// 2787
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2788
f508011038_537.returns.push(1374696760824);
// 2789
o2 = {};
// 2790
f508011038_0.returns.push(o2);
// 2791
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2792
f508011038_537.returns.push(1374696760826);
// 2793
o2 = {};
// 2794
f508011038_0.returns.push(o2);
// 2795
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2796
f508011038_537.returns.push(1374696760827);
// 2797
o2 = {};
// 2798
f508011038_0.returns.push(o2);
// 2799
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2800
f508011038_537.returns.push(1374696760827);
// 2801
o2 = {};
// 2802
f508011038_0.returns.push(o2);
// 2803
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2804
f508011038_537.returns.push(1374696760827);
// 2805
o2 = {};
// 2806
f508011038_0.returns.push(o2);
// 2807
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2808
f508011038_537.returns.push(1374696760828);
// 2809
o2 = {};
// 2810
f508011038_0.returns.push(o2);
// 2811
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2812
f508011038_537.returns.push(1374696760828);
// 2813
o2 = {};
// 2814
f508011038_0.returns.push(o2);
// 2815
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2816
f508011038_537.returns.push(1374696760828);
// 2817
o2 = {};
// 2818
f508011038_0.returns.push(o2);
// 2819
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2820
f508011038_537.returns.push(1374696760828);
// 2821
o2 = {};
// 2822
f508011038_0.returns.push(o2);
// 2823
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2824
f508011038_537.returns.push(1374696760828);
// 2825
o2 = {};
// 2826
f508011038_0.returns.push(o2);
// 2827
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2828
f508011038_537.returns.push(1374696760829);
// 2829
o2 = {};
// 2830
f508011038_0.returns.push(o2);
// 2831
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2832
f508011038_537.returns.push(1374696760829);
// 2833
o2 = {};
// 2834
f508011038_0.returns.push(o2);
// 2835
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2836
f508011038_537.returns.push(1374696760829);
// 2837
o2 = {};
// 2838
f508011038_0.returns.push(o2);
// 2839
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2840
f508011038_537.returns.push(1374696760830);
// 2841
o2 = {};
// 2842
f508011038_0.returns.push(o2);
// 2843
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2844
f508011038_537.returns.push(1374696760830);
// 2845
o2 = {};
// 2846
f508011038_0.returns.push(o2);
// 2847
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2848
f508011038_537.returns.push(1374696760830);
// 2849
o2 = {};
// 2850
f508011038_0.returns.push(o2);
// 2851
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2852
f508011038_537.returns.push(1374696760831);
// 2853
o2 = {};
// 2854
f508011038_0.returns.push(o2);
// 2855
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2856
f508011038_537.returns.push(1374696760831);
// 2857
o2 = {};
// 2858
f508011038_0.returns.push(o2);
// 2859
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2860
f508011038_537.returns.push(1374696760831);
// 2861
o2 = {};
// 2862
f508011038_0.returns.push(o2);
// 2863
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2864
f508011038_537.returns.push(1374696760831);
// 2865
o2 = {};
// 2866
f508011038_0.returns.push(o2);
// 2867
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2868
f508011038_537.returns.push(1374696760831);
// 2869
o2 = {};
// 2870
f508011038_0.returns.push(o2);
// 2871
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2872
f508011038_537.returns.push(1374696760832);
// 2873
o2 = {};
// 2874
f508011038_0.returns.push(o2);
// 2875
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2876
f508011038_537.returns.push(1374696760833);
// 2877
o2 = {};
// 2878
f508011038_0.returns.push(o2);
// 2879
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2880
f508011038_537.returns.push(1374696760833);
// 2881
o2 = {};
// 2882
f508011038_0.returns.push(o2);
// 2883
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2884
f508011038_537.returns.push(1374696760834);
// 2885
o2 = {};
// 2886
f508011038_0.returns.push(o2);
// 2887
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2888
f508011038_537.returns.push(1374696760835);
// 2889
o2 = {};
// 2890
f508011038_0.returns.push(o2);
// 2891
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2892
f508011038_537.returns.push(1374696760835);
// 2893
o2 = {};
// 2894
f508011038_0.returns.push(o2);
// 2895
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2896
f508011038_537.returns.push(1374696760835);
// 2897
o2 = {};
// 2898
f508011038_0.returns.push(o2);
// 2899
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2900
f508011038_537.returns.push(1374696760838);
// 2901
o2 = {};
// 2902
f508011038_0.returns.push(o2);
// 2903
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2904
f508011038_537.returns.push(1374696760838);
// 2905
o2 = {};
// 2906
f508011038_0.returns.push(o2);
// 2907
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2908
f508011038_537.returns.push(1374696760839);
// 2909
o2 = {};
// 2910
f508011038_0.returns.push(o2);
// 2911
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2912
f508011038_537.returns.push(1374696760839);
// 2913
o2 = {};
// 2914
f508011038_0.returns.push(o2);
// 2915
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2916
f508011038_537.returns.push(1374696760839);
// 2917
o2 = {};
// 2918
f508011038_0.returns.push(o2);
// 2919
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2920
f508011038_537.returns.push(1374696760839);
// 2921
o2 = {};
// 2922
f508011038_0.returns.push(o2);
// 2923
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2924
f508011038_537.returns.push(1374696760839);
// 2925
o2 = {};
// 2926
f508011038_0.returns.push(o2);
// 2927
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2928
f508011038_537.returns.push(1374696760839);
// 2929
o2 = {};
// 2930
f508011038_0.returns.push(o2);
// 2931
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2932
f508011038_537.returns.push(1374696760840);
// 2933
o2 = {};
// 2934
f508011038_0.returns.push(o2);
// 2935
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2936
f508011038_537.returns.push(1374696760841);
// 2937
o2 = {};
// 2938
f508011038_0.returns.push(o2);
// 2939
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2940
f508011038_537.returns.push(1374696760841);
// 2941
o2 = {};
// 2942
f508011038_0.returns.push(o2);
// 2943
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2944
f508011038_537.returns.push(1374696760841);
// 2945
o2 = {};
// 2946
f508011038_0.returns.push(o2);
// 2947
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2948
f508011038_537.returns.push(1374696760841);
// 2949
o2 = {};
// 2950
f508011038_0.returns.push(o2);
// 2951
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2952
f508011038_537.returns.push(1374696760841);
// 2953
o2 = {};
// 2954
f508011038_0.returns.push(o2);
// 2955
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2956
f508011038_537.returns.push(1374696760842);
// 2957
o2 = {};
// 2958
f508011038_0.returns.push(o2);
// 2959
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2960
f508011038_537.returns.push(1374696760842);
// 2961
o2 = {};
// 2962
f508011038_0.returns.push(o2);
// 2963
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2964
f508011038_537.returns.push(1374696760842);
// 2965
o2 = {};
// 2966
f508011038_0.returns.push(o2);
// 2967
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2968
f508011038_537.returns.push(1374696760842);
// 2969
o2 = {};
// 2970
f508011038_0.returns.push(o2);
// 2971
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2972
f508011038_537.returns.push(1374696760842);
// 2973
o2 = {};
// 2974
f508011038_0.returns.push(o2);
// 2975
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2976
f508011038_537.returns.push(1374696760843);
// 2977
o2 = {};
// 2978
f508011038_0.returns.push(o2);
// 2979
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2980
f508011038_537.returns.push(1374696760843);
// 2981
o2 = {};
// 2982
f508011038_0.returns.push(o2);
// 2983
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2984
f508011038_537.returns.push(1374696760843);
// 2985
o2 = {};
// 2986
f508011038_0.returns.push(o2);
// 2987
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2988
f508011038_537.returns.push(1374696760844);
// 2989
o2 = {};
// 2990
f508011038_0.returns.push(o2);
// 2991
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2992
f508011038_537.returns.push(1374696760844);
// 2993
o2 = {};
// 2994
f508011038_0.returns.push(o2);
// 2995
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 2996
f508011038_537.returns.push(1374696760844);
// 2997
o2 = {};
// 2998
f508011038_0.returns.push(o2);
// 2999
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3000
f508011038_537.returns.push(1374696760844);
// 3001
o2 = {};
// 3002
f508011038_0.returns.push(o2);
// 3003
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3004
f508011038_537.returns.push(1374696760844);
// 3005
o2 = {};
// 3006
f508011038_0.returns.push(o2);
// 3007
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3008
f508011038_537.returns.push(1374696760848);
// 3009
o2 = {};
// 3010
f508011038_0.returns.push(o2);
// 3011
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3012
f508011038_537.returns.push(1374696760848);
// 3013
o2 = {};
// 3014
f508011038_0.returns.push(o2);
// 3015
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3016
f508011038_537.returns.push(1374696760848);
// 3017
o2 = {};
// 3018
f508011038_0.returns.push(o2);
// 3019
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3020
f508011038_537.returns.push(1374696760848);
// 3021
o2 = {};
// 3022
f508011038_0.returns.push(o2);
// 3023
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3024
f508011038_537.returns.push(1374696760848);
// 3025
o2 = {};
// 3026
f508011038_0.returns.push(o2);
// 3027
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3028
f508011038_537.returns.push(1374696760849);
// 3029
o2 = {};
// 3030
f508011038_0.returns.push(o2);
// 3031
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3032
f508011038_537.returns.push(1374696760849);
// 3033
o2 = {};
// 3034
f508011038_0.returns.push(o2);
// 3035
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3036
f508011038_537.returns.push(1374696760850);
// 3037
o2 = {};
// 3038
f508011038_0.returns.push(o2);
// 3039
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3040
f508011038_537.returns.push(1374696760850);
// 3041
o2 = {};
// 3042
f508011038_0.returns.push(o2);
// 3043
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3044
f508011038_537.returns.push(1374696760850);
// 3045
o2 = {};
// 3046
f508011038_0.returns.push(o2);
// 3047
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3048
f508011038_537.returns.push(1374696760850);
// 3049
o2 = {};
// 3050
f508011038_0.returns.push(o2);
// 3051
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3052
f508011038_537.returns.push(1374696760850);
// 3053
o2 = {};
// 3054
f508011038_0.returns.push(o2);
// 3055
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3056
f508011038_537.returns.push(1374696760851);
// 3057
o2 = {};
// 3058
f508011038_0.returns.push(o2);
// 3059
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3060
f508011038_537.returns.push(1374696760851);
// 3061
o2 = {};
// 3062
f508011038_0.returns.push(o2);
// 3063
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3064
f508011038_537.returns.push(1374696760852);
// 3065
o2 = {};
// 3066
f508011038_0.returns.push(o2);
// 3067
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3068
f508011038_537.returns.push(1374696760852);
// 3069
o2 = {};
// 3070
f508011038_0.returns.push(o2);
// 3071
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3072
f508011038_537.returns.push(1374696760852);
// 3073
o2 = {};
// 3074
f508011038_0.returns.push(o2);
// 3075
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3076
f508011038_537.returns.push(1374696760852);
// 3077
o2 = {};
// 3078
f508011038_0.returns.push(o2);
// 3079
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3080
f508011038_537.returns.push(1374696760852);
// 3081
o2 = {};
// 3082
f508011038_0.returns.push(o2);
// 3083
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3084
f508011038_537.returns.push(1374696760852);
// 3085
o2 = {};
// 3086
f508011038_0.returns.push(o2);
// 3087
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3088
f508011038_537.returns.push(1374696760852);
// 3089
o2 = {};
// 3090
f508011038_0.returns.push(o2);
// 3091
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3092
f508011038_537.returns.push(1374696760852);
// 3093
o2 = {};
// 3094
f508011038_0.returns.push(o2);
// 3095
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3096
f508011038_537.returns.push(1374696760853);
// 3097
o2 = {};
// 3098
f508011038_0.returns.push(o2);
// 3099
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3100
f508011038_537.returns.push(1374696760854);
// 3101
o2 = {};
// 3102
f508011038_0.returns.push(o2);
// 3103
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3104
f508011038_537.returns.push(1374696760854);
// 3105
o2 = {};
// 3106
f508011038_0.returns.push(o2);
// 3107
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3108
f508011038_537.returns.push(1374696760854);
// 3109
o2 = {};
// 3110
f508011038_0.returns.push(o2);
// 3111
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3112
f508011038_537.returns.push(1374696760854);
// 3113
o2 = {};
// 3114
f508011038_0.returns.push(o2);
// 3115
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3116
f508011038_537.returns.push(1374696760856);
// 3117
o2 = {};
// 3118
f508011038_0.returns.push(o2);
// 3119
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3120
f508011038_537.returns.push(1374696760856);
// 3121
o2 = {};
// 3122
f508011038_0.returns.push(o2);
// 3123
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3124
f508011038_537.returns.push(1374696760856);
// 3125
o2 = {};
// 3126
f508011038_0.returns.push(o2);
// 3127
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3128
f508011038_537.returns.push(1374696760857);
// 3129
o2 = {};
// 3130
f508011038_0.returns.push(o2);
// 3131
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3132
f508011038_537.returns.push(1374696760857);
// 3133
o2 = {};
// 3134
f508011038_0.returns.push(o2);
// 3135
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3136
f508011038_537.returns.push(1374696760857);
// 3137
o2 = {};
// 3138
f508011038_0.returns.push(o2);
// 3139
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3140
f508011038_537.returns.push(1374696760858);
// 3141
o2 = {};
// 3142
f508011038_0.returns.push(o2);
// 3143
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3144
f508011038_537.returns.push(1374696760858);
// 3145
o2 = {};
// 3146
f508011038_0.returns.push(o2);
// 3147
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3148
f508011038_537.returns.push(1374696760858);
// 3149
o2 = {};
// 3150
f508011038_0.returns.push(o2);
// 3151
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3152
f508011038_537.returns.push(1374696760858);
// 3153
o2 = {};
// 3154
f508011038_0.returns.push(o2);
// 3155
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3156
f508011038_537.returns.push(1374696760858);
// 3157
o2 = {};
// 3158
f508011038_0.returns.push(o2);
// 3159
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3160
f508011038_537.returns.push(1374696760859);
// 3161
o2 = {};
// 3162
f508011038_0.returns.push(o2);
// 3163
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3164
f508011038_537.returns.push(1374696760859);
// 3165
o2 = {};
// 3166
f508011038_0.returns.push(o2);
// 3167
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3168
f508011038_537.returns.push(1374696760859);
// 3169
o2 = {};
// 3170
f508011038_0.returns.push(o2);
// 3171
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3172
f508011038_537.returns.push(1374696760859);
// 3173
o2 = {};
// 3174
f508011038_0.returns.push(o2);
// 3175
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3176
f508011038_537.returns.push(1374696760860);
// 3177
o2 = {};
// 3178
f508011038_0.returns.push(o2);
// 3179
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3180
f508011038_537.returns.push(1374696760860);
// 3181
o2 = {};
// 3182
f508011038_0.returns.push(o2);
// 3183
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3184
f508011038_537.returns.push(1374696760860);
// 3185
o2 = {};
// 3186
f508011038_0.returns.push(o2);
// 3187
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3188
f508011038_537.returns.push(1374696760861);
// 3189
o2 = {};
// 3190
f508011038_0.returns.push(o2);
// 3191
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3192
f508011038_537.returns.push(1374696760861);
// 3193
o2 = {};
// 3194
f508011038_0.returns.push(o2);
// 3195
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3196
f508011038_537.returns.push(1374696760861);
// 3197
o2 = {};
// 3198
f508011038_0.returns.push(o2);
// 3199
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3200
f508011038_537.returns.push(1374696760861);
// 3201
o2 = {};
// 3202
f508011038_0.returns.push(o2);
// 3203
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3204
f508011038_537.returns.push(1374696760861);
// 3205
o2 = {};
// 3206
f508011038_0.returns.push(o2);
// 3207
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3208
f508011038_537.returns.push(1374696760861);
// 3209
o2 = {};
// 3210
f508011038_0.returns.push(o2);
// 3211
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3212
f508011038_537.returns.push(1374696760861);
// 3213
o2 = {};
// 3214
f508011038_0.returns.push(o2);
// 3215
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3216
f508011038_537.returns.push(1374696760863);
// 3217
o2 = {};
// 3218
f508011038_0.returns.push(o2);
// 3219
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3220
f508011038_537.returns.push(1374696760864);
// 3221
o2 = {};
// 3222
f508011038_0.returns.push(o2);
// 3223
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3224
f508011038_537.returns.push(1374696760867);
// 3225
o2 = {};
// 3226
f508011038_0.returns.push(o2);
// 3227
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3228
f508011038_537.returns.push(1374696760869);
// 3229
o2 = {};
// 3230
f508011038_0.returns.push(o2);
// 3231
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3232
f508011038_537.returns.push(1374696760869);
// 3233
o2 = {};
// 3234
f508011038_0.returns.push(o2);
// 3235
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3236
f508011038_537.returns.push(1374696760869);
// 3237
o2 = {};
// 3238
f508011038_0.returns.push(o2);
// 3239
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3240
f508011038_537.returns.push(1374696760869);
// 3241
o2 = {};
// 3242
f508011038_0.returns.push(o2);
// 3243
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3244
f508011038_537.returns.push(1374696760869);
// 3245
o2 = {};
// 3246
f508011038_0.returns.push(o2);
// 3247
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3248
f508011038_537.returns.push(1374696760873);
// 3249
o2 = {};
// 3250
f508011038_0.returns.push(o2);
// 3251
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3252
f508011038_537.returns.push(1374696760873);
// 3253
o2 = {};
// 3254
f508011038_0.returns.push(o2);
// 3255
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3256
f508011038_537.returns.push(1374696760873);
// 3257
o2 = {};
// 3258
f508011038_0.returns.push(o2);
// 3259
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3260
f508011038_537.returns.push(1374696760873);
// 3261
o2 = {};
// 3262
f508011038_0.returns.push(o2);
// 3263
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3264
f508011038_537.returns.push(1374696760873);
// 3265
o2 = {};
// 3266
f508011038_0.returns.push(o2);
// 3267
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3268
f508011038_537.returns.push(1374696760873);
// 3269
o2 = {};
// 3270
f508011038_0.returns.push(o2);
// 3271
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3272
f508011038_537.returns.push(1374696760873);
// 3273
o2 = {};
// 3274
f508011038_0.returns.push(o2);
// 3275
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3276
f508011038_537.returns.push(1374696760873);
// 3277
o2 = {};
// 3278
f508011038_0.returns.push(o2);
// 3279
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3280
f508011038_537.returns.push(1374696760874);
// 3281
o2 = {};
// 3282
f508011038_0.returns.push(o2);
// 3283
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3284
f508011038_537.returns.push(1374696760874);
// 3285
o2 = {};
// 3286
f508011038_0.returns.push(o2);
// 3287
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3288
f508011038_537.returns.push(1374696760874);
// 3289
o2 = {};
// 3290
f508011038_0.returns.push(o2);
// 3291
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3292
f508011038_537.returns.push(1374696760874);
// 3293
o2 = {};
// 3294
f508011038_0.returns.push(o2);
// 3295
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3296
f508011038_537.returns.push(1374696760875);
// 3297
o2 = {};
// 3298
f508011038_0.returns.push(o2);
// 3299
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3300
f508011038_537.returns.push(1374696760875);
// 3301
o2 = {};
// 3302
f508011038_0.returns.push(o2);
// 3303
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3304
f508011038_537.returns.push(1374696760875);
// 3305
o2 = {};
// 3306
f508011038_0.returns.push(o2);
// 3307
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3308
f508011038_537.returns.push(1374696760875);
// 3309
o2 = {};
// 3310
f508011038_0.returns.push(o2);
// 3311
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3312
f508011038_537.returns.push(1374696760876);
// 3313
o2 = {};
// 3314
f508011038_0.returns.push(o2);
// 3315
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3316
f508011038_537.returns.push(1374696760876);
// 3317
o2 = {};
// 3318
f508011038_0.returns.push(o2);
// 3319
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3320
f508011038_537.returns.push(1374696760876);
// 3321
o2 = {};
// 3322
f508011038_0.returns.push(o2);
// 3323
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3324
f508011038_537.returns.push(1374696760876);
// 3325
o2 = {};
// 3326
f508011038_0.returns.push(o2);
// 3327
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3328
f508011038_537.returns.push(1374696760876);
// 3329
o2 = {};
// 3330
f508011038_0.returns.push(o2);
// 3331
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3332
f508011038_537.returns.push(1374696760880);
// 3333
o2 = {};
// 3334
f508011038_0.returns.push(o2);
// 3335
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3336
f508011038_537.returns.push(1374696760880);
// 3337
o2 = {};
// 3338
f508011038_0.returns.push(o2);
// 3339
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3340
f508011038_537.returns.push(1374696760880);
// 3341
o2 = {};
// 3342
f508011038_0.returns.push(o2);
// 3343
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3344
f508011038_537.returns.push(1374696760880);
// 3345
o2 = {};
// 3346
f508011038_0.returns.push(o2);
// 3347
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3348
f508011038_537.returns.push(1374696760881);
// 3349
o2 = {};
// 3350
f508011038_0.returns.push(o2);
// 3351
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3352
f508011038_537.returns.push(1374696760881);
// 3353
o2 = {};
// 3354
f508011038_0.returns.push(o2);
// 3355
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3356
f508011038_537.returns.push(1374696760881);
// 3357
o2 = {};
// 3358
f508011038_0.returns.push(o2);
// 3359
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3360
f508011038_537.returns.push(1374696760881);
// 3361
o2 = {};
// 3362
f508011038_0.returns.push(o2);
// 3363
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3364
f508011038_537.returns.push(1374696760882);
// 3365
o2 = {};
// 3366
f508011038_0.returns.push(o2);
// 3367
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3368
f508011038_537.returns.push(1374696760882);
// 3369
o2 = {};
// 3370
f508011038_0.returns.push(o2);
// 3371
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3372
f508011038_537.returns.push(1374696760882);
// 3373
o2 = {};
// 3374
f508011038_0.returns.push(o2);
// 3375
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3376
f508011038_537.returns.push(1374696760883);
// 3377
o2 = {};
// 3378
f508011038_0.returns.push(o2);
// 3379
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3380
f508011038_537.returns.push(1374696760883);
// 3381
o2 = {};
// 3382
f508011038_0.returns.push(o2);
// 3383
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3384
f508011038_537.returns.push(1374696760883);
// 3385
o2 = {};
// 3386
f508011038_0.returns.push(o2);
// 3387
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3388
f508011038_537.returns.push(1374696760884);
// 3389
o2 = {};
// 3390
f508011038_0.returns.push(o2);
// 3391
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3392
f508011038_537.returns.push(1374696760884);
// 3393
o2 = {};
// 3394
f508011038_0.returns.push(o2);
// 3395
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3396
f508011038_537.returns.push(1374696760884);
// 3397
o2 = {};
// 3398
f508011038_0.returns.push(o2);
// 3399
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3400
f508011038_537.returns.push(1374696760884);
// 3401
o2 = {};
// 3402
f508011038_0.returns.push(o2);
// 3403
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3404
f508011038_537.returns.push(1374696760884);
// 3405
o2 = {};
// 3406
f508011038_0.returns.push(o2);
// 3407
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3408
f508011038_537.returns.push(1374696760884);
// 3409
o2 = {};
// 3410
f508011038_0.returns.push(o2);
// 3411
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3412
f508011038_537.returns.push(1374696760885);
// 3413
o2 = {};
// 3414
f508011038_0.returns.push(o2);
// 3415
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3416
f508011038_537.returns.push(1374696760885);
// 3417
o2 = {};
// 3418
f508011038_0.returns.push(o2);
// 3419
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3420
f508011038_537.returns.push(1374696760885);
// 3421
o2 = {};
// 3422
f508011038_0.returns.push(o2);
// 3423
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3424
f508011038_537.returns.push(1374696760886);
// 3425
o2 = {};
// 3426
f508011038_0.returns.push(o2);
// 3427
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3428
f508011038_537.returns.push(1374696760886);
// 3429
o2 = {};
// 3430
f508011038_0.returns.push(o2);
// 3431
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3432
f508011038_537.returns.push(1374696760886);
// 3433
o2 = {};
// 3434
f508011038_0.returns.push(o2);
// 3435
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3436
f508011038_537.returns.push(1374696760897);
// 3437
o2 = {};
// 3438
f508011038_0.returns.push(o2);
// 3439
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3440
f508011038_537.returns.push(1374696760897);
// 3441
o2 = {};
// 3442
f508011038_0.returns.push(o2);
// 3443
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3444
f508011038_537.returns.push(1374696760897);
// 3445
o2 = {};
// 3446
f508011038_0.returns.push(o2);
// 3447
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3448
f508011038_537.returns.push(1374696760897);
// 3449
o2 = {};
// 3450
f508011038_0.returns.push(o2);
// 3451
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3452
f508011038_537.returns.push(1374696760897);
// 3453
o2 = {};
// 3454
f508011038_0.returns.push(o2);
// 3455
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3456
f508011038_537.returns.push(1374696760897);
// 3457
o2 = {};
// 3458
f508011038_0.returns.push(o2);
// 3459
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3460
f508011038_537.returns.push(1374696760897);
// 3461
o2 = {};
// 3462
f508011038_0.returns.push(o2);
// 3463
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3464
f508011038_537.returns.push(1374696760897);
// 3465
o2 = {};
// 3466
f508011038_0.returns.push(o2);
// 3467
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3468
f508011038_537.returns.push(1374696760897);
// 3469
o2 = {};
// 3470
f508011038_0.returns.push(o2);
// 3471
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3472
f508011038_537.returns.push(1374696760898);
// 3473
o2 = {};
// 3474
f508011038_0.returns.push(o2);
// 3475
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3476
f508011038_537.returns.push(1374696760898);
// 3477
o2 = {};
// 3478
f508011038_0.returns.push(o2);
// 3479
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3480
f508011038_537.returns.push(1374696760898);
// 3481
o2 = {};
// 3482
f508011038_0.returns.push(o2);
// 3483
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3484
f508011038_537.returns.push(1374696760898);
// 3485
o2 = {};
// 3486
f508011038_0.returns.push(o2);
// 3487
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3488
f508011038_537.returns.push(1374696760899);
// 3489
o2 = {};
// 3490
f508011038_0.returns.push(o2);
// 3491
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3492
f508011038_537.returns.push(1374696760899);
// 3493
o2 = {};
// 3494
f508011038_0.returns.push(o2);
// 3495
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3496
f508011038_537.returns.push(1374696760899);
// 3497
o2 = {};
// 3498
f508011038_0.returns.push(o2);
// 3499
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3500
f508011038_537.returns.push(1374696760900);
// 3501
o2 = {};
// 3502
f508011038_0.returns.push(o2);
// 3503
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3504
f508011038_537.returns.push(1374696760900);
// 3505
o2 = {};
// 3506
f508011038_0.returns.push(o2);
// 3507
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3508
f508011038_537.returns.push(1374696760900);
// 3509
o2 = {};
// 3510
f508011038_0.returns.push(o2);
// 3511
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3512
f508011038_537.returns.push(1374696760900);
// 3513
o2 = {};
// 3514
f508011038_0.returns.push(o2);
// 3515
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3516
f508011038_537.returns.push(1374696760900);
// 3517
o2 = {};
// 3518
f508011038_0.returns.push(o2);
// 3519
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3520
f508011038_537.returns.push(1374696760901);
// 3521
o2 = {};
// 3522
f508011038_0.returns.push(o2);
// 3523
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3524
f508011038_537.returns.push(1374696760901);
// 3525
o2 = {};
// 3526
f508011038_0.returns.push(o2);
// 3527
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3528
f508011038_537.returns.push(1374696760901);
// 3529
o2 = {};
// 3530
f508011038_0.returns.push(o2);
// 3531
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3532
f508011038_537.returns.push(1374696760901);
// 3533
o2 = {};
// 3534
f508011038_0.returns.push(o2);
// 3535
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3536
f508011038_537.returns.push(1374696760902);
// 3537
o2 = {};
// 3538
f508011038_0.returns.push(o2);
// 3539
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3540
f508011038_537.returns.push(1374696760902);
// 3541
o2 = {};
// 3542
f508011038_0.returns.push(o2);
// 3543
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3544
f508011038_537.returns.push(1374696760905);
// 3545
o2 = {};
// 3546
f508011038_0.returns.push(o2);
// 3547
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3548
f508011038_537.returns.push(1374696760905);
// 3549
o2 = {};
// 3550
f508011038_0.returns.push(o2);
// 3551
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3552
f508011038_537.returns.push(1374696760905);
// 3553
o2 = {};
// 3554
f508011038_0.returns.push(o2);
// 3555
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3556
f508011038_537.returns.push(1374696760906);
// 3557
o2 = {};
// 3558
f508011038_0.returns.push(o2);
// 3559
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3560
f508011038_537.returns.push(1374696760907);
// 3561
o2 = {};
// 3562
f508011038_0.returns.push(o2);
// 3563
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3564
f508011038_537.returns.push(1374696760907);
// 3565
o2 = {};
// 3566
f508011038_0.returns.push(o2);
// 3567
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3568
f508011038_537.returns.push(1374696760907);
// 3569
o2 = {};
// 3570
f508011038_0.returns.push(o2);
// 3571
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3572
f508011038_537.returns.push(1374696760907);
// 3573
o2 = {};
// 3574
f508011038_0.returns.push(o2);
// 3575
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3576
f508011038_537.returns.push(1374696760907);
// 3577
o2 = {};
// 3578
f508011038_0.returns.push(o2);
// 3579
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3580
f508011038_537.returns.push(1374696760908);
// 3581
o2 = {};
// 3582
f508011038_0.returns.push(o2);
// 3583
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3584
f508011038_537.returns.push(1374696760908);
// 3585
o2 = {};
// 3586
f508011038_0.returns.push(o2);
// 3587
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3588
f508011038_537.returns.push(1374696760909);
// 3589
o2 = {};
// 3590
f508011038_0.returns.push(o2);
// 3591
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3592
f508011038_537.returns.push(1374696760909);
// 3593
o2 = {};
// 3594
f508011038_0.returns.push(o2);
// 3595
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3596
f508011038_537.returns.push(1374696760909);
// 3597
o2 = {};
// 3598
f508011038_0.returns.push(o2);
// 3599
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3600
f508011038_537.returns.push(1374696760910);
// 3601
o2 = {};
// 3602
f508011038_0.returns.push(o2);
// 3603
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3604
f508011038_537.returns.push(1374696760910);
// 3605
o2 = {};
// 3606
f508011038_0.returns.push(o2);
// 3607
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3608
f508011038_537.returns.push(1374696760910);
// 3609
o2 = {};
// 3610
f508011038_0.returns.push(o2);
// 3611
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3612
f508011038_537.returns.push(1374696760910);
// 3613
o2 = {};
// 3614
f508011038_0.returns.push(o2);
// 3615
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3616
f508011038_537.returns.push(1374696760910);
// 3617
o2 = {};
// 3618
f508011038_0.returns.push(o2);
// 3619
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3620
f508011038_537.returns.push(1374696760911);
// 3621
o2 = {};
// 3622
f508011038_0.returns.push(o2);
// 3623
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3624
f508011038_537.returns.push(1374696760911);
// 3625
o2 = {};
// 3626
f508011038_0.returns.push(o2);
// 3627
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3628
f508011038_537.returns.push(1374696760911);
// 3629
o2 = {};
// 3630
f508011038_0.returns.push(o2);
// 3631
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3632
f508011038_537.returns.push(1374696760911);
// 3633
o2 = {};
// 3634
f508011038_0.returns.push(o2);
// 3635
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3636
f508011038_537.returns.push(1374696760912);
// 3637
o2 = {};
// 3638
f508011038_0.returns.push(o2);
// 3639
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3640
f508011038_537.returns.push(1374696760912);
// 3641
o2 = {};
// 3642
f508011038_0.returns.push(o2);
// 3643
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3644
f508011038_537.returns.push(1374696760913);
// 3645
o2 = {};
// 3646
f508011038_0.returns.push(o2);
// 3647
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3648
f508011038_537.returns.push(1374696760916);
// 3649
o2 = {};
// 3650
f508011038_0.returns.push(o2);
// 3651
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3652
f508011038_537.returns.push(1374696760916);
// 3653
o2 = {};
// 3654
f508011038_0.returns.push(o2);
// 3655
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3656
f508011038_537.returns.push(1374696760916);
// 3657
o2 = {};
// 3658
f508011038_0.returns.push(o2);
// 3659
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3660
f508011038_537.returns.push(1374696760917);
// 3661
o2 = {};
// 3662
f508011038_0.returns.push(o2);
// 3663
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3664
f508011038_537.returns.push(1374696760917);
// 3665
o2 = {};
// 3666
f508011038_0.returns.push(o2);
// 3667
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3668
f508011038_537.returns.push(1374696760917);
// 3669
o2 = {};
// 3670
f508011038_0.returns.push(o2);
// 3671
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3672
f508011038_537.returns.push(1374696760917);
// 3673
o2 = {};
// 3674
f508011038_0.returns.push(o2);
// 3675
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3676
f508011038_537.returns.push(1374696760917);
// 3677
o2 = {};
// 3678
f508011038_0.returns.push(o2);
// 3679
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3680
f508011038_537.returns.push(1374696760918);
// 3681
o2 = {};
// 3682
f508011038_0.returns.push(o2);
// 3683
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3684
f508011038_537.returns.push(1374696760918);
// 3685
o2 = {};
// 3686
f508011038_0.returns.push(o2);
// 3687
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3688
f508011038_537.returns.push(1374696760918);
// 3689
o2 = {};
// 3690
f508011038_0.returns.push(o2);
// 3691
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3692
f508011038_537.returns.push(1374696760918);
// 3693
o2 = {};
// 3694
f508011038_0.returns.push(o2);
// 3695
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3696
f508011038_537.returns.push(1374696760919);
// 3697
o2 = {};
// 3698
f508011038_0.returns.push(o2);
// 3699
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3700
f508011038_537.returns.push(1374696760919);
// 3701
o2 = {};
// 3702
f508011038_0.returns.push(o2);
// 3703
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3704
f508011038_537.returns.push(1374696760919);
// 3705
o2 = {};
// 3706
f508011038_0.returns.push(o2);
// 3707
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3708
f508011038_537.returns.push(1374696760919);
// 3709
o2 = {};
// 3710
f508011038_0.returns.push(o2);
// 3711
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3712
f508011038_537.returns.push(1374696760919);
// 3713
o2 = {};
// 3714
f508011038_0.returns.push(o2);
// 3715
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3716
f508011038_537.returns.push(1374696760920);
// 3717
o2 = {};
// 3718
f508011038_0.returns.push(o2);
// 3719
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3720
f508011038_537.returns.push(1374696760920);
// 3721
o2 = {};
// 3722
f508011038_0.returns.push(o2);
// 3723
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3724
f508011038_537.returns.push(1374696760920);
// 3725
o2 = {};
// 3726
f508011038_0.returns.push(o2);
// 3727
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3728
f508011038_537.returns.push(1374696760920);
// 3729
o2 = {};
// 3730
f508011038_0.returns.push(o2);
// 3731
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3732
f508011038_537.returns.push(1374696760920);
// 3733
o2 = {};
// 3734
f508011038_0.returns.push(o2);
// 3735
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3736
f508011038_537.returns.push(1374696760920);
// 3737
o2 = {};
// 3738
f508011038_0.returns.push(o2);
// 3739
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3740
f508011038_537.returns.push(1374696760921);
// 3741
o2 = {};
// 3742
f508011038_0.returns.push(o2);
// 3743
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3744
f508011038_537.returns.push(1374696760921);
// 3745
o2 = {};
// 3746
f508011038_0.returns.push(o2);
// 3747
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3748
f508011038_537.returns.push(1374696760921);
// 3749
o2 = {};
// 3750
f508011038_0.returns.push(o2);
// 3751
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3752
f508011038_537.returns.push(1374696760922);
// 3753
o2 = {};
// 3754
f508011038_0.returns.push(o2);
// 3755
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3756
f508011038_537.returns.push(1374696760926);
// 3757
o2 = {};
// 3758
f508011038_0.returns.push(o2);
// 3759
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3760
f508011038_537.returns.push(1374696760926);
// 3761
o2 = {};
// 3762
f508011038_0.returns.push(o2);
// 3763
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3764
f508011038_537.returns.push(1374696760926);
// 3765
o2 = {};
// 3766
f508011038_0.returns.push(o2);
// 3767
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3768
f508011038_537.returns.push(1374696760926);
// 3769
o2 = {};
// 3770
f508011038_0.returns.push(o2);
// 3771
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3772
f508011038_537.returns.push(1374696760926);
// 3773
o2 = {};
// 3774
f508011038_0.returns.push(o2);
// 3775
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3776
f508011038_537.returns.push(1374696760927);
// 3777
o2 = {};
// 3778
f508011038_0.returns.push(o2);
// 3779
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3780
f508011038_537.returns.push(1374696760927);
// 3781
o2 = {};
// 3782
f508011038_0.returns.push(o2);
// 3783
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3784
f508011038_537.returns.push(1374696760927);
// 3785
o2 = {};
// 3786
f508011038_0.returns.push(o2);
// 3787
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3788
f508011038_537.returns.push(1374696760927);
// 3789
o2 = {};
// 3790
f508011038_0.returns.push(o2);
// 3791
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3792
f508011038_537.returns.push(1374696760927);
// 3793
o2 = {};
// 3794
f508011038_0.returns.push(o2);
// 3795
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3796
f508011038_537.returns.push(1374696760929);
// 3797
o2 = {};
// 3798
f508011038_0.returns.push(o2);
// 3799
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3800
f508011038_537.returns.push(1374696760929);
// 3801
o2 = {};
// 3802
f508011038_0.returns.push(o2);
// 3803
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3804
f508011038_537.returns.push(1374696760929);
// 3805
o2 = {};
// 3806
f508011038_0.returns.push(o2);
// 3807
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3808
f508011038_537.returns.push(1374696760929);
// 3809
o2 = {};
// 3810
f508011038_0.returns.push(o2);
// 3811
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3812
f508011038_537.returns.push(1374696760929);
// 3813
o2 = {};
// 3814
f508011038_0.returns.push(o2);
// 3815
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3816
f508011038_537.returns.push(1374696760930);
// 3817
o2 = {};
// 3818
f508011038_0.returns.push(o2);
// 3819
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3820
f508011038_537.returns.push(1374696760930);
// 3821
o2 = {};
// 3822
f508011038_0.returns.push(o2);
// 3823
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3824
f508011038_537.returns.push(1374696760931);
// 3825
o2 = {};
// 3826
f508011038_0.returns.push(o2);
// 3827
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3828
f508011038_537.returns.push(1374696760931);
// 3829
o2 = {};
// 3830
f508011038_0.returns.push(o2);
// 3831
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3832
f508011038_537.returns.push(1374696760931);
// 3833
o2 = {};
// 3834
f508011038_0.returns.push(o2);
// 3835
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3836
f508011038_537.returns.push(1374696760932);
// 3837
o2 = {};
// 3838
f508011038_0.returns.push(o2);
// 3839
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3840
f508011038_537.returns.push(1374696760932);
// 3841
o2 = {};
// 3842
f508011038_0.returns.push(o2);
// 3843
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3844
f508011038_537.returns.push(1374696760932);
// 3845
o2 = {};
// 3846
f508011038_0.returns.push(o2);
// 3847
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3848
f508011038_537.returns.push(1374696760932);
// 3849
o2 = {};
// 3850
f508011038_0.returns.push(o2);
// 3851
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3852
f508011038_537.returns.push(1374696760933);
// 3853
o2 = {};
// 3854
f508011038_0.returns.push(o2);
// 3855
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3856
f508011038_537.returns.push(1374696760933);
// 3857
o2 = {};
// 3858
f508011038_0.returns.push(o2);
// 3859
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3860
f508011038_537.returns.push(1374696760935);
// 3861
o2 = {};
// 3862
f508011038_0.returns.push(o2);
// 3863
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3864
f508011038_537.returns.push(1374696760935);
// 3865
o2 = {};
// 3866
f508011038_0.returns.push(o2);
// 3867
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3868
f508011038_537.returns.push(1374696760935);
// 3869
o2 = {};
// 3870
f508011038_0.returns.push(o2);
// 3871
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3872
f508011038_537.returns.push(1374696760936);
// 3873
o2 = {};
// 3874
f508011038_0.returns.push(o2);
// 3875
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3876
f508011038_537.returns.push(1374696760936);
// 3877
o2 = {};
// 3878
f508011038_0.returns.push(o2);
// 3879
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3880
f508011038_537.returns.push(1374696760937);
// 3881
o2 = {};
// 3882
f508011038_0.returns.push(o2);
// 3883
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3884
f508011038_537.returns.push(1374696760937);
// 3885
o2 = {};
// 3886
f508011038_0.returns.push(o2);
// 3887
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3888
f508011038_537.returns.push(1374696760937);
// 3889
o2 = {};
// 3890
f508011038_0.returns.push(o2);
// 3891
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3892
f508011038_537.returns.push(1374696760937);
// 3893
o2 = {};
// 3894
f508011038_0.returns.push(o2);
// 3895
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3896
f508011038_537.returns.push(1374696760937);
// 3897
o2 = {};
// 3898
f508011038_0.returns.push(o2);
// 3899
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3900
f508011038_537.returns.push(1374696760938);
// 3901
o2 = {};
// 3902
f508011038_0.returns.push(o2);
// 3903
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3904
f508011038_537.returns.push(1374696760938);
// 3905
o2 = {};
// 3906
f508011038_0.returns.push(o2);
// 3907
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3908
f508011038_537.returns.push(1374696760938);
// 3909
o2 = {};
// 3910
f508011038_0.returns.push(o2);
// 3911
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3912
f508011038_537.returns.push(1374696760939);
// 3913
o2 = {};
// 3914
f508011038_0.returns.push(o2);
// 3915
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3916
f508011038_537.returns.push(1374696760939);
// 3917
o2 = {};
// 3918
f508011038_0.returns.push(o2);
// 3919
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3920
f508011038_537.returns.push(1374696760940);
// 3921
o2 = {};
// 3922
f508011038_0.returns.push(o2);
// 3923
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3924
f508011038_537.returns.push(1374696760940);
// 3925
o2 = {};
// 3926
f508011038_0.returns.push(o2);
// 3927
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3928
f508011038_537.returns.push(1374696760940);
// 3929
o2 = {};
// 3930
f508011038_0.returns.push(o2);
// 3931
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3932
f508011038_537.returns.push(1374696760941);
// 3933
o2 = {};
// 3934
f508011038_0.returns.push(o2);
// 3935
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3936
f508011038_537.returns.push(1374696760941);
// 3937
o2 = {};
// 3938
f508011038_0.returns.push(o2);
// 3939
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3940
f508011038_537.returns.push(1374696760942);
// 3941
o2 = {};
// 3942
f508011038_0.returns.push(o2);
// 3943
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3944
f508011038_537.returns.push(1374696760942);
// 3945
o2 = {};
// 3946
f508011038_0.returns.push(o2);
// 3947
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3948
f508011038_537.returns.push(1374696760942);
// 3949
o2 = {};
// 3950
f508011038_0.returns.push(o2);
// 3951
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3952
f508011038_537.returns.push(1374696760943);
// 3953
o2 = {};
// 3954
f508011038_0.returns.push(o2);
// 3955
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3956
f508011038_537.returns.push(1374696760943);
// 3957
o2 = {};
// 3958
f508011038_0.returns.push(o2);
// 3959
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3960
f508011038_537.returns.push(1374696760943);
// 3961
o2 = {};
// 3962
f508011038_0.returns.push(o2);
// 3963
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3964
f508011038_537.returns.push(1374696760943);
// 3965
o2 = {};
// 3966
f508011038_0.returns.push(o2);
// 3967
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3968
f508011038_537.returns.push(1374696760962);
// 3969
o2 = {};
// 3970
f508011038_0.returns.push(o2);
// 3971
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3972
f508011038_537.returns.push(1374696760967);
// 3973
o2 = {};
// 3974
f508011038_0.returns.push(o2);
// 3975
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3976
f508011038_537.returns.push(1374696760970);
// 3977
o2 = {};
// 3978
f508011038_0.returns.push(o2);
// 3979
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3980
f508011038_537.returns.push(1374696760971);
// 3981
o2 = {};
// 3982
f508011038_0.returns.push(o2);
// 3983
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3984
f508011038_537.returns.push(1374696760971);
// 3985
o2 = {};
// 3986
f508011038_0.returns.push(o2);
// 3987
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3988
f508011038_537.returns.push(1374696760971);
// 3989
o2 = {};
// 3990
f508011038_0.returns.push(o2);
// 3991
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3992
f508011038_537.returns.push(1374696760972);
// 3993
o2 = {};
// 3994
f508011038_0.returns.push(o2);
// 3995
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 3996
f508011038_537.returns.push(1374696760973);
// 3997
o2 = {};
// 3998
f508011038_0.returns.push(o2);
// 3999
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4000
f508011038_537.returns.push(1374696760973);
// 4001
o2 = {};
// 4002
f508011038_0.returns.push(o2);
// 4003
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4004
f508011038_537.returns.push(1374696760973);
// 4005
o2 = {};
// 4006
f508011038_0.returns.push(o2);
// 4007
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4008
f508011038_537.returns.push(1374696760973);
// 4009
o2 = {};
// 4010
f508011038_0.returns.push(o2);
// 4011
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4012
f508011038_537.returns.push(1374696760974);
// 4013
o2 = {};
// 4014
f508011038_0.returns.push(o2);
// 4015
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4016
f508011038_537.returns.push(1374696760974);
// 4017
o2 = {};
// 4018
f508011038_0.returns.push(o2);
// 4019
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4020
f508011038_537.returns.push(1374696760975);
// 4021
o2 = {};
// 4022
f508011038_0.returns.push(o2);
// 4023
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4024
f508011038_537.returns.push(1374696760975);
// 4025
o2 = {};
// 4026
f508011038_0.returns.push(o2);
// 4027
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4028
f508011038_537.returns.push(1374696760977);
// 4029
o2 = {};
// 4030
f508011038_0.returns.push(o2);
// 4031
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4032
f508011038_537.returns.push(1374696760977);
// 4033
o2 = {};
// 4034
f508011038_0.returns.push(o2);
// 4035
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4036
f508011038_537.returns.push(1374696760977);
// 4037
o2 = {};
// 4038
f508011038_0.returns.push(o2);
// 4039
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4040
f508011038_537.returns.push(1374696760979);
// 4041
o2 = {};
// 4042
f508011038_0.returns.push(o2);
// 4043
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4044
f508011038_537.returns.push(1374696760979);
// 4045
o2 = {};
// 4046
f508011038_0.returns.push(o2);
// 4047
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4048
f508011038_537.returns.push(1374696760979);
// 4049
o2 = {};
// 4050
f508011038_0.returns.push(o2);
// 4051
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4052
f508011038_537.returns.push(1374696760979);
// 4053
o2 = {};
// 4054
f508011038_0.returns.push(o2);
// 4055
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4056
f508011038_537.returns.push(1374696760980);
// 4057
o2 = {};
// 4058
f508011038_0.returns.push(o2);
// 4059
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4060
f508011038_537.returns.push(1374696760980);
// 4061
o2 = {};
// 4062
f508011038_0.returns.push(o2);
// 4063
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4064
f508011038_537.returns.push(1374696760980);
// 4065
o2 = {};
// 4066
f508011038_0.returns.push(o2);
// 4067
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4068
f508011038_537.returns.push(1374696760980);
// 4069
o2 = {};
// 4070
f508011038_0.returns.push(o2);
// 4071
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4072
f508011038_537.returns.push(1374696768859);
// 4073
o2 = {};
// 4074
f508011038_0.returns.push(o2);
// 4075
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4076
f508011038_537.returns.push(1374696768859);
// 4077
o2 = {};
// 4078
f508011038_0.returns.push(o2);
// 4079
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4080
f508011038_537.returns.push(1374696768859);
// 4081
o2 = {};
// 4082
f508011038_0.returns.push(o2);
// 4083
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4084
f508011038_537.returns.push(1374696768860);
// 4085
o2 = {};
// 4086
f508011038_0.returns.push(o2);
// 4087
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4088
f508011038_537.returns.push(1374696768860);
// 4089
o2 = {};
// 4090
f508011038_0.returns.push(o2);
// 4091
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4092
f508011038_537.returns.push(1374696768860);
// 4093
o2 = {};
// 4094
f508011038_0.returns.push(o2);
// 4095
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4096
f508011038_537.returns.push(1374696768860);
// 4097
o2 = {};
// 4098
f508011038_0.returns.push(o2);
// 4099
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4100
f508011038_537.returns.push(1374696768860);
// 4101
o2 = {};
// 4102
f508011038_0.returns.push(o2);
// 4103
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4104
f508011038_537.returns.push(1374696768860);
// 4105
o2 = {};
// 4106
f508011038_0.returns.push(o2);
// 4107
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4108
f508011038_537.returns.push(1374696768861);
// 4109
o2 = {};
// 4110
f508011038_0.returns.push(o2);
// 4111
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4112
f508011038_537.returns.push(1374696768861);
// 4113
o2 = {};
// 4114
f508011038_0.returns.push(o2);
// 4115
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4116
f508011038_537.returns.push(1374696768861);
// 4117
o2 = {};
// 4118
f508011038_0.returns.push(o2);
// 4119
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4120
f508011038_537.returns.push(1374696768861);
// 4121
o2 = {};
// 4122
f508011038_0.returns.push(o2);
// 4123
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4124
f508011038_537.returns.push(1374696768861);
// 4125
o2 = {};
// 4126
f508011038_0.returns.push(o2);
// 4127
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4128
f508011038_537.returns.push(1374696768862);
// 4129
o2 = {};
// 4130
f508011038_0.returns.push(o2);
// 4131
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4132
f508011038_537.returns.push(1374696768862);
// 4133
o2 = {};
// 4134
f508011038_0.returns.push(o2);
// 4135
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4136
f508011038_537.returns.push(1374696768862);
// 4137
o2 = {};
// 4138
f508011038_0.returns.push(o2);
// 4139
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4140
f508011038_537.returns.push(1374696768862);
// 4141
o2 = {};
// 4142
f508011038_0.returns.push(o2);
// 4143
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4144
f508011038_537.returns.push(1374696768862);
// 4145
o2 = {};
// 4146
f508011038_0.returns.push(o2);
// 4147
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4148
f508011038_537.returns.push(1374696768863);
// 4149
o2 = {};
// 4150
f508011038_0.returns.push(o2);
// 4151
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4152
f508011038_537.returns.push(1374696768863);
// 4153
o2 = {};
// 4154
f508011038_0.returns.push(o2);
// 4155
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4156
f508011038_537.returns.push(1374696768863);
// 4157
o2 = {};
// 4158
f508011038_0.returns.push(o2);
// 4159
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4160
f508011038_537.returns.push(1374696768863);
// 4161
o2 = {};
// 4162
f508011038_0.returns.push(o2);
// 4163
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4164
f508011038_537.returns.push(1374696768863);
// 4165
o2 = {};
// 4166
f508011038_0.returns.push(o2);
// 4167
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4168
f508011038_537.returns.push(1374696768863);
// 4169
o2 = {};
// 4170
f508011038_0.returns.push(o2);
// 4171
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4172
f508011038_537.returns.push(1374696768863);
// 4173
o2 = {};
// 4174
f508011038_0.returns.push(o2);
// 4175
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4176
f508011038_537.returns.push(1374696768863);
// 4177
o2 = {};
// 4178
f508011038_0.returns.push(o2);
// 4179
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4180
f508011038_537.returns.push(1374696768866);
// 4181
o2 = {};
// 4182
f508011038_0.returns.push(o2);
// 4183
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4184
f508011038_537.returns.push(1374696768867);
// 4185
o2 = {};
// 4186
f508011038_0.returns.push(o2);
// 4187
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4188
f508011038_537.returns.push(1374696768867);
// 4189
o2 = {};
// 4190
f508011038_0.returns.push(o2);
// 4191
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4192
f508011038_537.returns.push(1374696768868);
// 4193
o2 = {};
// 4194
f508011038_0.returns.push(o2);
// 4195
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4196
f508011038_537.returns.push(1374696768868);
// 4197
o2 = {};
// 4198
f508011038_0.returns.push(o2);
// 4199
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4200
f508011038_537.returns.push(1374696768868);
// 4201
o2 = {};
// 4202
f508011038_0.returns.push(o2);
// 4203
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4204
f508011038_537.returns.push(1374696768868);
// 4205
o2 = {};
// 4206
f508011038_0.returns.push(o2);
// 4207
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4208
f508011038_537.returns.push(1374696768868);
// 4209
o2 = {};
// 4210
f508011038_0.returns.push(o2);
// 4211
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4212
f508011038_537.returns.push(1374696768868);
// 4213
o2 = {};
// 4214
f508011038_0.returns.push(o2);
// 4215
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4216
f508011038_537.returns.push(1374696768868);
// 4217
o2 = {};
// 4218
f508011038_0.returns.push(o2);
// 4219
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4220
f508011038_537.returns.push(1374696768868);
// 4221
o2 = {};
// 4222
f508011038_0.returns.push(o2);
// 4223
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4224
f508011038_537.returns.push(1374696768869);
// 4225
o2 = {};
// 4226
f508011038_0.returns.push(o2);
// 4227
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4228
f508011038_537.returns.push(1374696768869);
// 4229
o2 = {};
// 4230
f508011038_0.returns.push(o2);
// 4231
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4232
f508011038_537.returns.push(1374696768869);
// 4233
o2 = {};
// 4234
f508011038_0.returns.push(o2);
// 4235
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4236
f508011038_537.returns.push(1374696768869);
// 4237
o2 = {};
// 4238
f508011038_0.returns.push(o2);
// 4239
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4240
f508011038_537.returns.push(1374696768869);
// 4241
o2 = {};
// 4242
f508011038_0.returns.push(o2);
// 4243
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4244
f508011038_537.returns.push(1374696768869);
// 4245
o2 = {};
// 4246
f508011038_0.returns.push(o2);
// 4247
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4248
f508011038_537.returns.push(1374696768869);
// 4249
o2 = {};
// 4250
f508011038_0.returns.push(o2);
// 4251
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4252
f508011038_537.returns.push(1374696768869);
// 4253
o2 = {};
// 4254
f508011038_0.returns.push(o2);
// 4255
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4256
f508011038_537.returns.push(1374696768870);
// 4257
o2 = {};
// 4258
f508011038_0.returns.push(o2);
// 4259
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4260
f508011038_537.returns.push(1374696768870);
// 4261
o2 = {};
// 4262
f508011038_0.returns.push(o2);
// 4263
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4264
f508011038_537.returns.push(1374696768870);
// 4265
o2 = {};
// 4266
f508011038_0.returns.push(o2);
// 4267
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4268
f508011038_537.returns.push(1374696768870);
// 4269
o2 = {};
// 4270
f508011038_0.returns.push(o2);
// 4271
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4272
f508011038_537.returns.push(1374696768870);
// 4273
o2 = {};
// 4274
f508011038_0.returns.push(o2);
// 4275
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4276
f508011038_537.returns.push(1374696768870);
// 4277
o2 = {};
// 4278
f508011038_0.returns.push(o2);
// 4279
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4280
f508011038_537.returns.push(1374696768871);
// 4281
o2 = {};
// 4282
f508011038_0.returns.push(o2);
// 4283
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4284
f508011038_537.returns.push(1374696768874);
// 4285
o2 = {};
// 4286
f508011038_0.returns.push(o2);
// 4287
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4288
f508011038_537.returns.push(1374696768874);
// 4289
o2 = {};
// 4290
f508011038_0.returns.push(o2);
// 4291
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4292
f508011038_537.returns.push(1374696768874);
// 4293
o2 = {};
// 4294
f508011038_0.returns.push(o2);
// 4295
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4296
f508011038_537.returns.push(1374696768874);
// 4297
o2 = {};
// 4298
f508011038_0.returns.push(o2);
// 4299
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4300
f508011038_537.returns.push(1374696768874);
// 4301
o2 = {};
// 4302
f508011038_0.returns.push(o2);
// 4303
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4304
f508011038_537.returns.push(1374696768875);
// 4305
o2 = {};
// 4306
f508011038_0.returns.push(o2);
// 4307
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4308
f508011038_537.returns.push(1374696768875);
// 4309
o2 = {};
// 4310
f508011038_0.returns.push(o2);
// 4311
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4312
f508011038_537.returns.push(1374696768875);
// 4313
o2 = {};
// 4314
f508011038_0.returns.push(o2);
// 4315
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4316
f508011038_537.returns.push(1374696768875);
// 4317
o2 = {};
// 4318
f508011038_0.returns.push(o2);
// 4319
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4320
f508011038_537.returns.push(1374696768875);
// 4321
o2 = {};
// 4322
f508011038_0.returns.push(o2);
// 4323
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4324
f508011038_537.returns.push(1374696768875);
// 4325
o2 = {};
// 4326
f508011038_0.returns.push(o2);
// 4327
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4328
f508011038_537.returns.push(1374696768875);
// 4329
o2 = {};
// 4330
f508011038_0.returns.push(o2);
// 4331
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4332
f508011038_537.returns.push(1374696768875);
// 4333
o2 = {};
// 4334
f508011038_0.returns.push(o2);
// 4335
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4336
f508011038_537.returns.push(1374696768875);
// 4337
o2 = {};
// 4338
f508011038_0.returns.push(o2);
// 4339
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4340
f508011038_537.returns.push(1374696768876);
// 4341
o2 = {};
// 4342
f508011038_0.returns.push(o2);
// 4343
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4344
f508011038_537.returns.push(1374696768876);
// 4345
o2 = {};
// 4346
f508011038_0.returns.push(o2);
// 4347
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4348
f508011038_537.returns.push(1374696768876);
// 4349
o2 = {};
// 4350
f508011038_0.returns.push(o2);
// 4351
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4352
f508011038_537.returns.push(1374696768876);
// 4353
o2 = {};
// 4354
f508011038_0.returns.push(o2);
// 4355
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4356
f508011038_537.returns.push(1374696768876);
// 4357
o2 = {};
// 4358
f508011038_0.returns.push(o2);
// 4359
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4360
f508011038_537.returns.push(1374696768877);
// 4361
o2 = {};
// 4362
f508011038_0.returns.push(o2);
// 4363
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4364
f508011038_537.returns.push(1374696768877);
// 4365
o2 = {};
// 4366
f508011038_0.returns.push(o2);
// 4367
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4368
f508011038_537.returns.push(1374696768877);
// 4369
o2 = {};
// 4370
f508011038_0.returns.push(o2);
// 4371
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4372
f508011038_537.returns.push(1374696768877);
// 4373
o2 = {};
// 4374
f508011038_0.returns.push(o2);
// 4375
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4376
f508011038_537.returns.push(1374696768877);
// 4377
o2 = {};
// 4378
f508011038_0.returns.push(o2);
// 4379
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4380
f508011038_537.returns.push(1374696768878);
// 4381
o2 = {};
// 4382
f508011038_0.returns.push(o2);
// 4383
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4384
f508011038_537.returns.push(1374696768878);
// 4385
o2 = {};
// 4386
f508011038_0.returns.push(o2);
// 4387
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4388
f508011038_537.returns.push(1374696768878);
// 4389
o2 = {};
// 4390
f508011038_0.returns.push(o2);
// 4391
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4392
f508011038_537.returns.push(1374696768881);
// 4393
o2 = {};
// 4394
f508011038_0.returns.push(o2);
// 4395
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4396
f508011038_537.returns.push(1374696768881);
// 4397
o2 = {};
// 4398
f508011038_0.returns.push(o2);
// 4399
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4400
f508011038_537.returns.push(1374696768881);
// 4401
o2 = {};
// 4402
f508011038_0.returns.push(o2);
// 4403
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4404
f508011038_537.returns.push(1374696768881);
// 4405
o2 = {};
// 4406
f508011038_0.returns.push(o2);
// 4407
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4408
f508011038_537.returns.push(1374696768881);
// 4409
o2 = {};
// 4410
f508011038_0.returns.push(o2);
// 4411
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4412
f508011038_537.returns.push(1374696768882);
// 4413
o2 = {};
// 4414
f508011038_0.returns.push(o2);
// 4415
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4416
f508011038_537.returns.push(1374696768882);
// 4417
o2 = {};
// 4418
f508011038_0.returns.push(o2);
// 4419
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4420
f508011038_537.returns.push(1374696768882);
// 4421
o2 = {};
// 4422
f508011038_0.returns.push(o2);
// 4423
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4424
f508011038_537.returns.push(1374696768882);
// 4425
o2 = {};
// 4426
f508011038_0.returns.push(o2);
// 4427
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4428
f508011038_537.returns.push(1374696768882);
// 4429
o2 = {};
// 4430
f508011038_0.returns.push(o2);
// 4431
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4432
f508011038_537.returns.push(1374696768882);
// 4433
o2 = {};
// 4434
f508011038_0.returns.push(o2);
// 4435
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4436
f508011038_537.returns.push(1374696768883);
// 4437
o2 = {};
// 4438
f508011038_0.returns.push(o2);
// 4439
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4440
f508011038_537.returns.push(1374696768883);
// 4441
o2 = {};
// 4442
f508011038_0.returns.push(o2);
// 4443
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4444
f508011038_537.returns.push(1374696768884);
// 4445
o2 = {};
// 4446
f508011038_0.returns.push(o2);
// 4447
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4448
f508011038_537.returns.push(1374696768884);
// 4449
o2 = {};
// 4450
f508011038_0.returns.push(o2);
// 4451
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4452
f508011038_537.returns.push(1374696768884);
// 4453
o2 = {};
// 4454
f508011038_0.returns.push(o2);
// 4455
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4456
f508011038_537.returns.push(1374696768885);
// 4457
o2 = {};
// 4458
f508011038_0.returns.push(o2);
// 4459
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4460
f508011038_537.returns.push(1374696768885);
// 4461
o2 = {};
// 4462
f508011038_0.returns.push(o2);
// 4463
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4464
f508011038_537.returns.push(1374696768885);
// 4465
o2 = {};
// 4466
f508011038_0.returns.push(o2);
// 4467
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4468
f508011038_537.returns.push(1374696768885);
// 4469
o2 = {};
// 4470
f508011038_0.returns.push(o2);
// 4471
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4472
f508011038_537.returns.push(1374696768886);
// 4473
o2 = {};
// 4474
f508011038_0.returns.push(o2);
// 4475
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4476
f508011038_537.returns.push(1374696768888);
// 4477
o2 = {};
// 4478
f508011038_0.returns.push(o2);
// 4479
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4480
f508011038_537.returns.push(1374696768889);
// 4481
o2 = {};
// 4482
f508011038_0.returns.push(o2);
// 4483
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4484
f508011038_537.returns.push(1374696768889);
// 4485
o2 = {};
// 4486
f508011038_0.returns.push(o2);
// 4487
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4488
f508011038_537.returns.push(1374696768889);
// 4489
o2 = {};
// 4490
f508011038_0.returns.push(o2);
// 4491
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4492
f508011038_537.returns.push(1374696768890);
// 4493
o2 = {};
// 4494
f508011038_0.returns.push(o2);
// 4495
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4496
f508011038_537.returns.push(1374696768893);
// 4497
o2 = {};
// 4498
f508011038_0.returns.push(o2);
// 4499
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4500
f508011038_537.returns.push(1374696768893);
// 4501
o2 = {};
// 4502
f508011038_0.returns.push(o2);
// 4503
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4504
f508011038_537.returns.push(1374696768895);
// 4505
o2 = {};
// 4506
f508011038_0.returns.push(o2);
// 4507
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4508
f508011038_537.returns.push(1374696768895);
// 4509
o2 = {};
// 4510
f508011038_0.returns.push(o2);
// 4511
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4512
f508011038_537.returns.push(1374696768895);
// 4513
o2 = {};
// 4514
f508011038_0.returns.push(o2);
// 4515
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4516
f508011038_537.returns.push(1374696768896);
// 4517
o2 = {};
// 4518
f508011038_0.returns.push(o2);
// 4519
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4520
f508011038_537.returns.push(1374696768896);
// 4521
o2 = {};
// 4522
f508011038_0.returns.push(o2);
// 4523
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4524
f508011038_537.returns.push(1374696768896);
// 4525
o2 = {};
// 4526
f508011038_0.returns.push(o2);
// 4527
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4528
f508011038_537.returns.push(1374696768896);
// 4529
o2 = {};
// 4530
f508011038_0.returns.push(o2);
// 4531
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4532
f508011038_537.returns.push(1374696768896);
// 4533
o2 = {};
// 4534
f508011038_0.returns.push(o2);
// 4535
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4536
f508011038_537.returns.push(1374696768897);
// 4537
o2 = {};
// 4538
f508011038_0.returns.push(o2);
// 4539
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4540
f508011038_537.returns.push(1374696768897);
// 4541
o2 = {};
// 4542
f508011038_0.returns.push(o2);
// 4543
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4544
f508011038_537.returns.push(1374696768897);
// 4545
o2 = {};
// 4546
f508011038_0.returns.push(o2);
// 4547
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4548
f508011038_537.returns.push(1374696768897);
// 4549
o2 = {};
// 4550
f508011038_0.returns.push(o2);
// 4551
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4552
f508011038_537.returns.push(1374696768897);
// 4553
o2 = {};
// 4554
f508011038_0.returns.push(o2);
// 4555
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4556
f508011038_537.returns.push(1374696768897);
// 4557
o2 = {};
// 4558
f508011038_0.returns.push(o2);
// 4559
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4560
f508011038_537.returns.push(1374696768897);
// 4561
o2 = {};
// 4562
f508011038_0.returns.push(o2);
// 4563
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4564
f508011038_537.returns.push(1374696768898);
// 4565
o2 = {};
// 4566
f508011038_0.returns.push(o2);
// 4567
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4568
f508011038_537.returns.push(1374696768898);
// 4569
o2 = {};
// 4570
f508011038_0.returns.push(o2);
// 4571
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4572
f508011038_537.returns.push(1374696768898);
// 4573
o2 = {};
// 4574
f508011038_0.returns.push(o2);
// 4575
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4576
f508011038_537.returns.push(1374696768898);
// 4577
o2 = {};
// 4578
f508011038_0.returns.push(o2);
// 4579
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4580
f508011038_537.returns.push(1374696768898);
// 4581
o2 = {};
// 4582
f508011038_0.returns.push(o2);
// 4583
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4584
f508011038_537.returns.push(1374696768898);
// 4585
o2 = {};
// 4586
f508011038_0.returns.push(o2);
// 4587
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4588
f508011038_537.returns.push(1374696768899);
// 4589
o2 = {};
// 4590
f508011038_0.returns.push(o2);
// 4591
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4592
f508011038_537.returns.push(1374696768899);
// 4593
o2 = {};
// 4594
f508011038_0.returns.push(o2);
// 4595
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4596
f508011038_537.returns.push(1374696768899);
// 4597
o2 = {};
// 4598
f508011038_0.returns.push(o2);
// 4599
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4600
f508011038_537.returns.push(1374696768899);
// 4601
o2 = {};
// 4602
f508011038_0.returns.push(o2);
// 4603
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4604
f508011038_537.returns.push(1374696768903);
// 4606
o2 = {};
// 4607
f508011038_470.returns.push(o2);
// 4608
o9 = {};
// 4609
o2.style = o9;
// undefined
o2 = null;
// undefined
o9 = null;
// 4610
o2 = {};
// 4611
f508011038_0.returns.push(o2);
// 4612
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4613
f508011038_537.returns.push(1374696768903);
// 4614
o2 = {};
// 4615
f508011038_0.returns.push(o2);
// 4616
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4617
f508011038_537.returns.push(1374696768903);
// 4618
o2 = {};
// 4619
f508011038_0.returns.push(o2);
// 4620
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4621
f508011038_537.returns.push(1374696768903);
// 4622
o2 = {};
// 4623
f508011038_0.returns.push(o2);
// 4624
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4625
f508011038_537.returns.push(1374696768904);
// 4626
o2 = {};
// 4627
f508011038_0.returns.push(o2);
// 4628
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4629
f508011038_537.returns.push(1374696768904);
// 4630
o2 = {};
// 4631
f508011038_0.returns.push(o2);
// 4632
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4633
f508011038_537.returns.push(1374696768904);
// 4634
o2 = {};
// 4635
f508011038_0.returns.push(o2);
// 4636
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4637
f508011038_537.returns.push(1374696768907);
// 4638
o2 = {};
// 4639
f508011038_0.returns.push(o2);
// 4640
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4641
f508011038_537.returns.push(1374696768907);
// 4642
o2 = {};
// 4643
f508011038_0.returns.push(o2);
// 4644
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4645
f508011038_537.returns.push(1374696768907);
// 4646
o2 = {};
// 4647
f508011038_0.returns.push(o2);
// 4648
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4649
f508011038_537.returns.push(1374696768907);
// 4650
o2 = {};
// 4651
f508011038_0.returns.push(o2);
// 4652
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4653
f508011038_537.returns.push(1374696768907);
// 4654
o2 = {};
// 4655
f508011038_0.returns.push(o2);
// 4656
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4657
f508011038_537.returns.push(1374696768907);
// 4658
o2 = {};
// 4659
f508011038_0.returns.push(o2);
// 4660
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4661
f508011038_537.returns.push(1374696768908);
// 4662
o2 = {};
// 4663
f508011038_0.returns.push(o2);
// 4664
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4665
f508011038_537.returns.push(1374696768908);
// 4666
o2 = {};
// 4667
f508011038_0.returns.push(o2);
// 4668
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4669
f508011038_537.returns.push(1374696768908);
// 4670
o2 = {};
// 4671
f508011038_0.returns.push(o2);
// 4672
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4673
f508011038_537.returns.push(1374696768908);
// 4674
o2 = {};
// 4675
f508011038_0.returns.push(o2);
// 4676
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4677
f508011038_537.returns.push(1374696768908);
// 4678
o2 = {};
// 4679
f508011038_0.returns.push(o2);
// 4680
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4681
f508011038_537.returns.push(1374696768909);
// 4682
o2 = {};
// 4683
f508011038_0.returns.push(o2);
// 4684
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4685
f508011038_537.returns.push(1374696768909);
// 4686
o2 = {};
// 4687
f508011038_0.returns.push(o2);
// 4688
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4689
f508011038_537.returns.push(1374696768909);
// 4690
o2 = {};
// 4691
f508011038_0.returns.push(o2);
// 4692
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4693
f508011038_537.returns.push(1374696768909);
// 4694
o2 = {};
// 4695
f508011038_0.returns.push(o2);
// 4696
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4697
f508011038_537.returns.push(1374696768909);
// 4698
o2 = {};
// 4699
f508011038_0.returns.push(o2);
// 4700
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4701
f508011038_537.returns.push(1374696768909);
// 4702
o2 = {};
// 4703
f508011038_0.returns.push(o2);
// 4704
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4705
f508011038_537.returns.push(1374696768909);
// 4706
o2 = {};
// 4707
f508011038_0.returns.push(o2);
// 4708
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4709
f508011038_537.returns.push(1374696768914);
// 4710
o2 = {};
// 4711
f508011038_0.returns.push(o2);
// 4712
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4713
f508011038_537.returns.push(1374696768914);
// 4714
o2 = {};
// 4715
f508011038_0.returns.push(o2);
// 4716
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4717
f508011038_537.returns.push(1374696768914);
// 4718
o2 = {};
// 4719
f508011038_0.returns.push(o2);
// 4720
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4721
f508011038_537.returns.push(1374696768914);
// 4722
o2 = {};
// 4723
f508011038_0.returns.push(o2);
// 4724
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4725
f508011038_537.returns.push(1374696768915);
// 4726
o2 = {};
// 4727
f508011038_0.returns.push(o2);
// 4728
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4729
f508011038_537.returns.push(1374696768915);
// 4730
o2 = {};
// 4731
f508011038_0.returns.push(o2);
// 4732
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4733
f508011038_537.returns.push(1374696768915);
// 4734
o2 = {};
// 4735
f508011038_0.returns.push(o2);
// 4736
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4737
f508011038_537.returns.push(1374696768915);
// 4738
o2 = {};
// 4739
f508011038_0.returns.push(o2);
// 4740
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4741
f508011038_537.returns.push(1374696768916);
// 4742
o2 = {};
// 4743
f508011038_0.returns.push(o2);
// 4744
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4745
f508011038_537.returns.push(1374696768916);
// 4746
o2 = {};
// 4747
f508011038_0.returns.push(o2);
// 4748
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4749
f508011038_537.returns.push(1374696768916);
// 4750
o2 = {};
// 4751
f508011038_0.returns.push(o2);
// 4752
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4753
f508011038_537.returns.push(1374696768916);
// 4754
o2 = {};
// 4755
f508011038_0.returns.push(o2);
// 4756
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4757
f508011038_537.returns.push(1374696768917);
// 4758
o2 = {};
// 4759
f508011038_0.returns.push(o2);
// 4760
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4761
f508011038_537.returns.push(1374696768917);
// 4762
o2 = {};
// 4763
f508011038_0.returns.push(o2);
// 4764
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4765
f508011038_537.returns.push(1374696768917);
// 4766
o2 = {};
// 4767
f508011038_0.returns.push(o2);
// 4768
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4769
f508011038_537.returns.push(1374696768917);
// 4770
o2 = {};
// 4771
f508011038_0.returns.push(o2);
// 4772
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4773
f508011038_537.returns.push(1374696768917);
// 4774
o2 = {};
// 4775
f508011038_0.returns.push(o2);
// 4776
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4777
f508011038_537.returns.push(1374696768917);
// 4778
o2 = {};
// 4779
f508011038_0.returns.push(o2);
// 4780
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4781
f508011038_537.returns.push(1374696768917);
// 4782
o2 = {};
// 4783
f508011038_0.returns.push(o2);
// 4784
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4785
f508011038_537.returns.push(1374696768918);
// 4786
o2 = {};
// 4787
f508011038_0.returns.push(o2);
// 4788
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4789
f508011038_537.returns.push(1374696768918);
// 4790
o2 = {};
// 4791
f508011038_0.returns.push(o2);
// 4792
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4793
f508011038_537.returns.push(1374696768918);
// 4794
o2 = {};
// 4795
f508011038_0.returns.push(o2);
// 4796
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4797
f508011038_537.returns.push(1374696768918);
// 4798
o2 = {};
// 4799
f508011038_0.returns.push(o2);
// 4800
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4801
f508011038_537.returns.push(1374696768918);
// 4802
o2 = {};
// 4803
f508011038_0.returns.push(o2);
// 4804
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4805
f508011038_537.returns.push(1374696768918);
// 4806
o2 = {};
// 4807
f508011038_0.returns.push(o2);
// 4808
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4809
f508011038_537.returns.push(1374696768918);
// 4810
o2 = {};
// 4811
f508011038_0.returns.push(o2);
// 4812
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4813
f508011038_537.returns.push(1374696768918);
// 4814
o2 = {};
// 4815
f508011038_0.returns.push(o2);
// 4816
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4817
f508011038_537.returns.push(1374696768923);
// 4819
o2 = {};
// undefined
fow508011038_JSBNG__event.returns.push(o2);
// 4821
o2.type = "load";
// undefined
o2 = null;
// 4822
// undefined
o8 = null;
// 4823
o2 = {};
// 4824
f508011038_0.returns.push(o2);
// 4825
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4826
f508011038_537.returns.push(1374696769312);
// 4827
o2 = {};
// 4828
f508011038_0.returns.push(o2);
// 4829
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4830
f508011038_537.returns.push(1374696769312);
// 4831
o2 = {};
// 4832
f508011038_0.returns.push(o2);
// 4833
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4834
f508011038_537.returns.push(1374696769313);
// 4835
o2 = {};
// 4836
f508011038_0.returns.push(o2);
// 4837
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4838
f508011038_537.returns.push(1374696769313);
// 4839
o2 = {};
// 4840
f508011038_0.returns.push(o2);
// 4841
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4842
f508011038_537.returns.push(1374696769314);
// 4843
o2 = {};
// 4844
f508011038_0.returns.push(o2);
// 4845
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4846
f508011038_537.returns.push(1374696769314);
// 4847
o2 = {};
// 4848
f508011038_0.returns.push(o2);
// 4849
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4850
f508011038_537.returns.push(1374696769314);
// 4851
o2 = {};
// 4852
f508011038_0.returns.push(o2);
// 4853
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4854
f508011038_537.returns.push(1374696769314);
// 4855
o2 = {};
// 4856
f508011038_0.returns.push(o2);
// 4857
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4858
f508011038_537.returns.push(1374696769314);
// 4859
o2 = {};
// 4860
f508011038_0.returns.push(o2);
// 4861
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4862
f508011038_537.returns.push(1374696769315);
// 4863
o2 = {};
// 4864
f508011038_0.returns.push(o2);
// 4865
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4866
f508011038_537.returns.push(1374696769315);
// 4867
o2 = {};
// 4868
f508011038_0.returns.push(o2);
// 4869
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4870
f508011038_537.returns.push(1374696769315);
// 4871
o2 = {};
// 4872
f508011038_0.returns.push(o2);
// 4873
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4874
f508011038_537.returns.push(1374696769315);
// 4875
o2 = {};
// 4876
f508011038_0.returns.push(o2);
// 4877
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4878
f508011038_537.returns.push(1374696769316);
// 4879
o2 = {};
// 4880
f508011038_0.returns.push(o2);
// 4881
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4882
f508011038_537.returns.push(1374696769316);
// 4883
o2 = {};
// 4884
f508011038_0.returns.push(o2);
// 4885
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4886
f508011038_537.returns.push(1374696769316);
// 4887
o2 = {};
// 4888
f508011038_0.returns.push(o2);
// 4889
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4890
f508011038_537.returns.push(1374696769316);
// 4891
o2 = {};
// 4892
f508011038_0.returns.push(o2);
// 4893
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4894
f508011038_537.returns.push(1374696769316);
// 4895
o2 = {};
// 4896
f508011038_0.returns.push(o2);
// 4897
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4898
f508011038_537.returns.push(1374696769316);
// 4899
o2 = {};
// 4900
f508011038_0.returns.push(o2);
// 4901
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4902
f508011038_537.returns.push(1374696769316);
// 4903
o2 = {};
// 4904
f508011038_0.returns.push(o2);
// 4905
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4906
f508011038_537.returns.push(1374696769316);
// 4907
o2 = {};
// 4908
f508011038_0.returns.push(o2);
// 4909
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4910
f508011038_537.returns.push(1374696769316);
// 4911
o2 = {};
// 4912
f508011038_0.returns.push(o2);
// 4913
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4914
f508011038_537.returns.push(1374696769316);
// 4915
o2 = {};
// 4916
f508011038_0.returns.push(o2);
// 4917
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4918
f508011038_537.returns.push(1374696769316);
// 4919
o2 = {};
// 4920
f508011038_0.returns.push(o2);
// 4921
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4922
f508011038_537.returns.push(1374696769316);
// 4923
o2 = {};
// 4924
f508011038_0.returns.push(o2);
// 4925
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4926
f508011038_537.returns.push(1374696769317);
// 4927
o2 = {};
// 4928
f508011038_0.returns.push(o2);
// 4929
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4930
f508011038_537.returns.push(1374696769321);
// 4931
o2 = {};
// 4932
f508011038_0.returns.push(o2);
// 4933
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4934
f508011038_537.returns.push(1374696769321);
// 4935
o2 = {};
// 4936
f508011038_0.returns.push(o2);
// 4937
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4938
f508011038_537.returns.push(1374696769321);
// 4939
o2 = {};
// 4940
f508011038_0.returns.push(o2);
// 4941
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4942
f508011038_537.returns.push(1374696769321);
// 4943
o2 = {};
// 4944
f508011038_0.returns.push(o2);
// 4945
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4946
f508011038_537.returns.push(1374696769321);
// 4947
o2 = {};
// 4948
f508011038_0.returns.push(o2);
// 4949
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4950
f508011038_537.returns.push(1374696769321);
// 4951
o2 = {};
// 4952
f508011038_0.returns.push(o2);
// 4953
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4954
f508011038_537.returns.push(1374696769321);
// 4955
o2 = {};
// 4956
f508011038_0.returns.push(o2);
// 4957
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4958
f508011038_537.returns.push(1374696769321);
// 4959
o2 = {};
// 4960
f508011038_0.returns.push(o2);
// 4961
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4962
f508011038_537.returns.push(1374696769322);
// 4963
o2 = {};
// 4964
f508011038_0.returns.push(o2);
// 4965
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4966
f508011038_537.returns.push(1374696769322);
// 4967
o2 = {};
// 4968
f508011038_0.returns.push(o2);
// 4969
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4970
f508011038_537.returns.push(1374696769323);
// 4971
o2 = {};
// 4972
f508011038_0.returns.push(o2);
// 4973
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4974
f508011038_537.returns.push(1374696769323);
// 4975
o2 = {};
// 4976
f508011038_0.returns.push(o2);
// 4977
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4978
f508011038_537.returns.push(1374696769323);
// 4979
o2 = {};
// 4980
f508011038_0.returns.push(o2);
// 4981
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4982
f508011038_537.returns.push(1374696769323);
// 4983
o2 = {};
// 4984
f508011038_0.returns.push(o2);
// 4985
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4986
f508011038_537.returns.push(1374696769323);
// 4987
o2 = {};
// 4988
f508011038_0.returns.push(o2);
// 4989
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4990
f508011038_537.returns.push(1374696769323);
// 4991
o2 = {};
// 4992
f508011038_0.returns.push(o2);
// 4993
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4994
f508011038_537.returns.push(1374696769323);
// 4995
o2 = {};
// 4996
f508011038_0.returns.push(o2);
// 4997
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 4998
f508011038_537.returns.push(1374696769324);
// 4999
o2 = {};
// 5000
f508011038_0.returns.push(o2);
// 5001
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5002
f508011038_537.returns.push(1374696769324);
// 5003
o2 = {};
// 5004
f508011038_0.returns.push(o2);
// 5005
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5006
f508011038_537.returns.push(1374696769324);
// 5007
o2 = {};
// 5008
f508011038_0.returns.push(o2);
// 5009
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5010
f508011038_537.returns.push(1374696769325);
// 5011
o2 = {};
// 5012
f508011038_0.returns.push(o2);
// 5013
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5014
f508011038_537.returns.push(1374696769325);
// 5015
o2 = {};
// 5016
f508011038_0.returns.push(o2);
// 5017
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5018
f508011038_537.returns.push(1374696769325);
// 5019
o2 = {};
// 5020
f508011038_0.returns.push(o2);
// 5021
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5022
f508011038_537.returns.push(1374696769325);
// 5023
o2 = {};
// 5024
f508011038_0.returns.push(o2);
// 5025
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5026
f508011038_537.returns.push(1374696769325);
// 5027
o2 = {};
// 5028
f508011038_0.returns.push(o2);
// 5029
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5030
f508011038_537.returns.push(1374696769325);
// 5031
o2 = {};
// 5032
f508011038_0.returns.push(o2);
// 5033
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5034
f508011038_537.returns.push(1374696769328);
// 5035
o2 = {};
// 5036
f508011038_0.returns.push(o2);
// 5037
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5038
f508011038_537.returns.push(1374696769328);
// 5039
o2 = {};
// 5040
f508011038_0.returns.push(o2);
// 5041
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5042
f508011038_537.returns.push(1374696769329);
// 5043
o2 = {};
// 5044
f508011038_0.returns.push(o2);
// 5045
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5046
f508011038_537.returns.push(1374696769329);
// 5047
o2 = {};
// 5048
f508011038_0.returns.push(o2);
// 5049
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5050
f508011038_537.returns.push(1374696769329);
// 5051
o2 = {};
// 5052
f508011038_0.returns.push(o2);
// 5053
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5054
f508011038_537.returns.push(1374696769329);
// 5055
o2 = {};
// 5056
f508011038_0.returns.push(o2);
// 5057
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5058
f508011038_537.returns.push(1374696769329);
// 5059
o2 = {};
// 5060
f508011038_0.returns.push(o2);
// 5061
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5062
f508011038_537.returns.push(1374696769329);
// 5063
o2 = {};
// 5064
f508011038_0.returns.push(o2);
// 5065
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5066
f508011038_537.returns.push(1374696769329);
// 5067
o2 = {};
// 5068
f508011038_0.returns.push(o2);
// 5069
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5070
f508011038_537.returns.push(1374696769330);
// 5071
o2 = {};
// 5072
f508011038_0.returns.push(o2);
// 5073
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5074
f508011038_537.returns.push(1374696769330);
// 5075
o2 = {};
// 5076
f508011038_0.returns.push(o2);
// 5077
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5078
f508011038_537.returns.push(1374696769330);
// 5079
o2 = {};
// 5080
f508011038_0.returns.push(o2);
// 5081
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5082
f508011038_537.returns.push(1374696769330);
// 5083
o2 = {};
// 5084
f508011038_0.returns.push(o2);
// 5085
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5086
f508011038_537.returns.push(1374696769330);
// 5087
o2 = {};
// 5088
f508011038_0.returns.push(o2);
// 5089
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5090
f508011038_537.returns.push(1374696769330);
// 5091
o2 = {};
// 5092
f508011038_0.returns.push(o2);
// 5093
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5094
f508011038_537.returns.push(1374696769330);
// 5095
o2 = {};
// 5096
f508011038_0.returns.push(o2);
// 5097
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5098
f508011038_537.returns.push(1374696769331);
// 5099
o2 = {};
// 5100
f508011038_0.returns.push(o2);
// 5101
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5102
f508011038_537.returns.push(1374696769331);
// 5103
o2 = {};
// 5104
f508011038_0.returns.push(o2);
// 5105
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5106
f508011038_537.returns.push(1374696769331);
// 5107
o2 = {};
// 5108
f508011038_0.returns.push(o2);
// 5109
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5110
f508011038_537.returns.push(1374696769332);
// 5111
o2 = {};
// 5112
f508011038_0.returns.push(o2);
// 5113
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5114
f508011038_537.returns.push(1374696769332);
// 5115
o2 = {};
// 5116
f508011038_0.returns.push(o2);
// 5117
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5118
f508011038_537.returns.push(1374696769332);
// 5119
o2 = {};
// 5120
f508011038_0.returns.push(o2);
// 5121
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5122
f508011038_537.returns.push(1374696769332);
// 5123
o2 = {};
// 5124
f508011038_0.returns.push(o2);
// 5125
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5126
f508011038_537.returns.push(1374696769332);
// 5127
o2 = {};
// 5128
f508011038_0.returns.push(o2);
// 5129
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5130
f508011038_537.returns.push(1374696769332);
// 5131
o2 = {};
// 5132
f508011038_0.returns.push(o2);
// 5133
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5134
f508011038_537.returns.push(1374696769332);
// 5135
o2 = {};
// 5136
f508011038_0.returns.push(o2);
// 5137
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5138
f508011038_537.returns.push(1374696769332);
// 5139
o2 = {};
// 5140
f508011038_0.returns.push(o2);
// 5141
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5142
f508011038_537.returns.push(1374696769340);
// 5143
o2 = {};
// 5144
f508011038_0.returns.push(o2);
// 5145
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5146
f508011038_537.returns.push(1374696769340);
// 5147
o2 = {};
// 5148
f508011038_0.returns.push(o2);
// 5149
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5150
f508011038_537.returns.push(1374696769340);
// 5151
o2 = {};
// 5152
f508011038_0.returns.push(o2);
// 5153
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5154
f508011038_537.returns.push(1374696769342);
// 5155
o2 = {};
// 5156
f508011038_0.returns.push(o2);
// 5157
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5158
f508011038_537.returns.push(1374696769342);
// 5159
o2 = {};
// 5160
f508011038_0.returns.push(o2);
// 5161
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5162
f508011038_537.returns.push(1374696769343);
// 5163
o2 = {};
// 5164
f508011038_0.returns.push(o2);
// 5165
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5166
f508011038_537.returns.push(1374696769343);
// 5167
o2 = {};
// 5168
f508011038_0.returns.push(o2);
// 5169
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5170
f508011038_537.returns.push(1374696769343);
// 5171
o2 = {};
// 5172
f508011038_0.returns.push(o2);
// 5173
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5174
f508011038_537.returns.push(1374696769343);
// 5175
o2 = {};
// 5176
f508011038_0.returns.push(o2);
// 5177
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5178
f508011038_537.returns.push(1374696769343);
// 5179
o2 = {};
// 5180
f508011038_0.returns.push(o2);
// 5181
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5182
f508011038_537.returns.push(1374696769343);
// 5183
o2 = {};
// 5184
f508011038_0.returns.push(o2);
// 5185
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5186
f508011038_537.returns.push(1374696769343);
// 5187
o2 = {};
// 5188
f508011038_0.returns.push(o2);
// 5189
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5190
f508011038_537.returns.push(1374696769343);
// 5191
o2 = {};
// 5192
f508011038_0.returns.push(o2);
// 5193
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5194
f508011038_537.returns.push(1374696769344);
// 5195
o2 = {};
// 5196
f508011038_0.returns.push(o2);
// 5197
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5198
f508011038_537.returns.push(1374696769344);
// 5199
o2 = {};
// 5200
f508011038_0.returns.push(o2);
// 5201
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5202
f508011038_537.returns.push(1374696769344);
// 5203
o5.pathname = "/search";
// 5204
o2 = {};
// 5205
f508011038_0.returns.push(o2);
// 5206
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5207
f508011038_537.returns.push(1374696769344);
// 5208
o2 = {};
// 5209
f508011038_0.returns.push(o2);
// 5210
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5211
f508011038_537.returns.push(1374696769344);
// 5212
o2 = {};
// 5213
f508011038_0.returns.push(o2);
// 5214
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5215
f508011038_537.returns.push(1374696769344);
// 5216
o2 = {};
// 5217
f508011038_0.returns.push(o2);
// 5218
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5219
f508011038_537.returns.push(1374696769345);
// 5220
o2 = {};
// 5221
f508011038_0.returns.push(o2);
// 5222
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5223
f508011038_537.returns.push(1374696769345);
// 5224
o2 = {};
// 5225
f508011038_0.returns.push(o2);
// 5226
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5227
f508011038_537.returns.push(1374696769345);
// 5228
o2 = {};
// 5229
f508011038_0.returns.push(o2);
// 5230
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5231
f508011038_537.returns.push(1374696769345);
// 5232
o2 = {};
// 5233
f508011038_0.returns.push(o2);
// 5234
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5235
f508011038_537.returns.push(1374696769345);
// 5236
o2 = {};
// 5237
f508011038_0.returns.push(o2);
// 5238
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5239
f508011038_537.returns.push(1374696769345);
// 5240
o2 = {};
// 5241
f508011038_0.returns.push(o2);
// 5242
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5243
f508011038_537.returns.push(1374696769346);
// 5244
o2 = {};
// 5245
f508011038_0.returns.push(o2);
// 5246
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5247
f508011038_537.returns.push(1374696769349);
// 5248
o2 = {};
// 5249
f508011038_0.returns.push(o2);
// 5250
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5251
f508011038_537.returns.push(1374696769350);
// 5252
o2 = {};
// 5253
f508011038_0.returns.push(o2);
// 5254
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5255
f508011038_537.returns.push(1374696769350);
// 5256
o2 = {};
// 5257
f508011038_0.returns.push(o2);
// 5258
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5259
f508011038_537.returns.push(1374696769350);
// 5260
o2 = {};
// 5261
f508011038_0.returns.push(o2);
// 5262
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5263
f508011038_537.returns.push(1374696769351);
// 5264
o2 = {};
// 5265
f508011038_0.returns.push(o2);
// 5266
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5267
f508011038_537.returns.push(1374696769351);
// 5268
o2 = {};
// 5269
f508011038_0.returns.push(o2);
// 5270
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5271
f508011038_537.returns.push(1374696769352);
// 5272
o2 = {};
// 5273
f508011038_0.returns.push(o2);
// 5274
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5275
f508011038_537.returns.push(1374696769352);
// 5276
o2 = {};
// 5277
f508011038_0.returns.push(o2);
// 5278
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5279
f508011038_537.returns.push(1374696769352);
// 5280
o2 = {};
// 5281
f508011038_0.returns.push(o2);
// 5282
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5283
f508011038_537.returns.push(1374696769352);
// 5284
o2 = {};
// 5285
f508011038_0.returns.push(o2);
// 5286
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5287
f508011038_537.returns.push(1374696769353);
// 5288
o2 = {};
// 5289
f508011038_0.returns.push(o2);
// 5290
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5291
f508011038_537.returns.push(1374696769353);
// 5292
o2 = {};
// 5293
f508011038_0.returns.push(o2);
// 5294
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5295
f508011038_537.returns.push(1374696769353);
// 5296
o2 = {};
// 5297
f508011038_0.returns.push(o2);
// 5298
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5299
f508011038_537.returns.push(1374696769353);
// 5300
o2 = {};
// 5301
f508011038_0.returns.push(o2);
// 5302
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5303
f508011038_537.returns.push(1374696769353);
// 5304
o2 = {};
// 5305
f508011038_0.returns.push(o2);
// 5306
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5307
f508011038_537.returns.push(1374696769353);
// 5308
o2 = {};
// 5309
f508011038_0.returns.push(o2);
// 5310
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5311
f508011038_537.returns.push(1374696769354);
// 5312
o2 = {};
// 5313
f508011038_0.returns.push(o2);
// 5314
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5315
f508011038_537.returns.push(1374696769354);
// 5316
o2 = {};
// 5317
f508011038_0.returns.push(o2);
// 5318
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5319
f508011038_537.returns.push(1374696769354);
// 5320
o2 = {};
// 5321
f508011038_0.returns.push(o2);
// 5322
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5323
f508011038_537.returns.push(1374696769354);
// 5324
o2 = {};
// 5325
f508011038_0.returns.push(o2);
// 5326
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5327
f508011038_537.returns.push(1374696769354);
// 5328
o2 = {};
// 5329
f508011038_0.returns.push(o2);
// 5330
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5331
f508011038_537.returns.push(1374696769354);
// 5332
o2 = {};
// 5333
f508011038_0.returns.push(o2);
// 5334
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5335
f508011038_537.returns.push(1374696769354);
// 5336
o2 = {};
// 5337
f508011038_0.returns.push(o2);
// 5338
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5339
f508011038_537.returns.push(1374696769355);
// 5340
o2 = {};
// 5341
f508011038_0.returns.push(o2);
// 5342
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5343
f508011038_537.returns.push(1374696769356);
// 5344
o2 = {};
// 5345
f508011038_0.returns.push(o2);
// 5346
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5347
f508011038_537.returns.push(1374696769356);
// 5348
o2 = {};
// 5349
f508011038_0.returns.push(o2);
// 5350
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5351
f508011038_537.returns.push(1374696769356);
// 5352
o2 = {};
// 5353
f508011038_0.returns.push(o2);
// 5354
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5355
f508011038_537.returns.push(1374696769359);
// 5356
o2 = {};
// 5357
f508011038_0.returns.push(o2);
// 5358
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5359
f508011038_537.returns.push(1374696769359);
// 5360
o2 = {};
// 5361
f508011038_0.returns.push(o2);
// 5362
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5363
f508011038_537.returns.push(1374696769359);
// 5364
o2 = {};
// 5365
f508011038_0.returns.push(o2);
// 5366
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5367
f508011038_537.returns.push(1374696769359);
// 5368
o2 = {};
// 5369
f508011038_0.returns.push(o2);
// 5370
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5371
f508011038_537.returns.push(1374696769359);
// 5372
o2 = {};
// 5373
f508011038_0.returns.push(o2);
// 5374
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5375
f508011038_537.returns.push(1374696769359);
// 5376
o2 = {};
// 5377
f508011038_0.returns.push(o2);
// 5378
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5379
f508011038_537.returns.push(1374696769359);
// 5380
o2 = {};
// 5381
f508011038_0.returns.push(o2);
// 5382
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5383
f508011038_537.returns.push(1374696769360);
// 5384
o2 = {};
// 5385
f508011038_0.returns.push(o2);
// 5386
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5387
f508011038_537.returns.push(1374696769360);
// 5388
o2 = {};
// 5389
f508011038_0.returns.push(o2);
// 5390
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5391
f508011038_537.returns.push(1374696769360);
// 5392
o2 = {};
// 5393
f508011038_0.returns.push(o2);
// 5394
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5395
f508011038_537.returns.push(1374696769361);
// 5396
o2 = {};
// 5397
f508011038_0.returns.push(o2);
// 5398
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5399
f508011038_537.returns.push(1374696769361);
// 5400
o2 = {};
// 5401
f508011038_0.returns.push(o2);
// 5402
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5403
f508011038_537.returns.push(1374696769361);
// 5404
o2 = {};
// 5405
f508011038_0.returns.push(o2);
// 5406
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5407
f508011038_537.returns.push(1374696769361);
// 5408
o2 = {};
// 5409
f508011038_0.returns.push(o2);
// 5410
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5411
f508011038_537.returns.push(1374696769361);
// 5412
o2 = {};
// 5413
f508011038_0.returns.push(o2);
// 5414
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5415
f508011038_537.returns.push(1374696769362);
// 5416
o2 = {};
// 5417
f508011038_0.returns.push(o2);
// 5418
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5419
f508011038_537.returns.push(1374696769362);
// 5420
o2 = {};
// 5421
f508011038_0.returns.push(o2);
// 5422
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5423
f508011038_537.returns.push(1374696769362);
// 5424
o2 = {};
// 5425
f508011038_0.returns.push(o2);
// 5426
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5427
f508011038_537.returns.push(1374696769362);
// 5428
o2 = {};
// 5429
f508011038_0.returns.push(o2);
// 5430
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5431
f508011038_537.returns.push(1374696769362);
// 5432
o2 = {};
// 5433
f508011038_0.returns.push(o2);
// 5434
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5435
f508011038_537.returns.push(1374696769362);
// 5436
o2 = {};
// 5437
f508011038_0.returns.push(o2);
// 5438
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5439
f508011038_537.returns.push(1374696769362);
// 5440
o2 = {};
// 5441
f508011038_0.returns.push(o2);
// 5442
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5443
f508011038_537.returns.push(1374696769364);
// 5444
o2 = {};
// 5445
f508011038_0.returns.push(o2);
// 5446
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5447
f508011038_537.returns.push(1374696769364);
// 5448
o2 = {};
// 5449
f508011038_0.returns.push(o2);
// 5450
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5451
f508011038_537.returns.push(1374696769364);
// 5452
o2 = {};
// 5453
f508011038_0.returns.push(o2);
// 5454
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5455
f508011038_537.returns.push(1374696769364);
// 5456
o2 = {};
// 5457
f508011038_0.returns.push(o2);
// 5458
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5459
f508011038_537.returns.push(1374696769367);
// 5460
o2 = {};
// 5461
f508011038_0.returns.push(o2);
// 5462
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5463
f508011038_537.returns.push(1374696769367);
// 5464
o2 = {};
// 5465
f508011038_0.returns.push(o2);
// 5466
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5467
f508011038_537.returns.push(1374696769367);
// 5468
o2 = {};
// 5469
f508011038_0.returns.push(o2);
// 5470
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5471
f508011038_537.returns.push(1374696769367);
// 5472
o2 = {};
// 5473
f508011038_0.returns.push(o2);
// 5474
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5475
f508011038_537.returns.push(1374696769367);
// 5476
o2 = {};
// 5477
f508011038_0.returns.push(o2);
// 5478
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5479
f508011038_537.returns.push(1374696769369);
// 5480
o2 = {};
// 5481
f508011038_0.returns.push(o2);
// 5482
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5483
f508011038_537.returns.push(1374696769369);
// 5484
o2 = {};
// 5485
f508011038_0.returns.push(o2);
// 5486
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5487
f508011038_537.returns.push(1374696769369);
// 5488
o2 = {};
// 5489
f508011038_0.returns.push(o2);
// 5490
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5491
f508011038_537.returns.push(1374696769369);
// 5492
o2 = {};
// 5493
f508011038_0.returns.push(o2);
// 5494
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5495
f508011038_537.returns.push(1374696769370);
// 5496
o2 = {};
// 5497
f508011038_0.returns.push(o2);
// 5498
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5499
f508011038_537.returns.push(1374696769370);
// 5500
o2 = {};
// 5501
f508011038_0.returns.push(o2);
// 5502
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5503
f508011038_537.returns.push(1374696769370);
// 5504
o2 = {};
// 5505
f508011038_0.returns.push(o2);
// 5506
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5507
f508011038_537.returns.push(1374696769370);
// 5508
o2 = {};
// 5509
f508011038_0.returns.push(o2);
// 5510
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5511
f508011038_537.returns.push(1374696769370);
// 5512
o2 = {};
// 5513
f508011038_0.returns.push(o2);
// 5514
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5515
f508011038_537.returns.push(1374696769370);
// 5516
o2 = {};
// 5517
f508011038_0.returns.push(o2);
// 5518
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5519
f508011038_537.returns.push(1374696769370);
// 5520
o2 = {};
// 5521
f508011038_0.returns.push(o2);
// 5522
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5523
f508011038_537.returns.push(1374696769371);
// 5524
o2 = {};
// 5525
f508011038_0.returns.push(o2);
// 5526
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5527
f508011038_537.returns.push(1374696769371);
// 5528
o2 = {};
// 5529
f508011038_0.returns.push(o2);
// 5530
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5531
f508011038_537.returns.push(1374696769372);
// 5532
o2 = {};
// 5533
f508011038_0.returns.push(o2);
// 5534
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5535
f508011038_537.returns.push(1374696769372);
// 5536
o2 = {};
// 5537
f508011038_0.returns.push(o2);
// 5538
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5539
f508011038_537.returns.push(1374696769372);
// 5540
o2 = {};
// 5541
f508011038_0.returns.push(o2);
// 5542
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5543
f508011038_537.returns.push(1374696769372);
// 5544
o2 = {};
// 5545
f508011038_0.returns.push(o2);
// 5546
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5547
f508011038_537.returns.push(1374696769372);
// 5548
o2 = {};
// 5549
f508011038_0.returns.push(o2);
// 5550
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5551
f508011038_537.returns.push(1374696769372);
// 5552
o2 = {};
// 5553
f508011038_0.returns.push(o2);
// 5554
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5555
f508011038_537.returns.push(1374696769373);
// 5556
o2 = {};
// 5557
f508011038_0.returns.push(o2);
// 5558
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5559
f508011038_537.returns.push(1374696769373);
// 5560
o2 = {};
// 5561
f508011038_0.returns.push(o2);
// 5562
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5563
f508011038_537.returns.push(1374696769373);
// 5564
o2 = {};
// 5565
f508011038_0.returns.push(o2);
// 5566
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5567
f508011038_537.returns.push(1374696769376);
// 5568
o2 = {};
// 5569
f508011038_0.returns.push(o2);
// 5570
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5571
f508011038_537.returns.push(1374696769376);
// 5572
o2 = {};
// 5573
f508011038_0.returns.push(o2);
// 5574
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5575
f508011038_537.returns.push(1374696769377);
// 5576
o2 = {};
// 5577
f508011038_0.returns.push(o2);
// 5578
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5579
f508011038_537.returns.push(1374696769377);
// 5580
o2 = {};
// 5581
f508011038_0.returns.push(o2);
// 5582
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5583
f508011038_537.returns.push(1374696769378);
// 5584
o2 = {};
// 5585
f508011038_0.returns.push(o2);
// 5586
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5587
f508011038_537.returns.push(1374696769378);
// 5588
o2 = {};
// 5589
f508011038_0.returns.push(o2);
// 5590
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5591
f508011038_537.returns.push(1374696769378);
// 5592
o2 = {};
// 5593
f508011038_0.returns.push(o2);
// 5594
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5595
f508011038_537.returns.push(1374696769378);
// 5596
o2 = {};
// 5597
f508011038_0.returns.push(o2);
// 5598
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5599
f508011038_537.returns.push(1374696769379);
// 5600
o2 = {};
// 5601
f508011038_0.returns.push(o2);
// 5602
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5603
f508011038_537.returns.push(1374696769379);
// 5604
o2 = {};
// 5605
f508011038_0.returns.push(o2);
// 5606
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5607
f508011038_537.returns.push(1374696769379);
// 5608
o2 = {};
// 5609
f508011038_0.returns.push(o2);
// 5610
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5611
f508011038_537.returns.push(1374696769379);
// 5612
o2 = {};
// 5613
f508011038_0.returns.push(o2);
// 5614
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5615
f508011038_537.returns.push(1374696769379);
// 5616
o2 = {};
// 5617
f508011038_0.returns.push(o2);
// 5618
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5619
f508011038_537.returns.push(1374696769421);
// 5620
o2 = {};
// 5621
f508011038_0.returns.push(o2);
// 5622
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5623
f508011038_537.returns.push(1374696769422);
// 5624
o2 = {};
// 5625
f508011038_0.returns.push(o2);
// 5626
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5627
f508011038_537.returns.push(1374696769422);
// 5628
o2 = {};
// 5629
f508011038_0.returns.push(o2);
// 5630
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5631
f508011038_537.returns.push(1374696769422);
// 5632
o2 = {};
// 5633
f508011038_0.returns.push(o2);
// 5634
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5635
f508011038_537.returns.push(1374696769422);
// 5636
o2 = {};
// 5637
f508011038_0.returns.push(o2);
// 5638
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5639
f508011038_537.returns.push(1374696769422);
// 5640
o2 = {};
// 5641
f508011038_0.returns.push(o2);
// 5642
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5643
f508011038_537.returns.push(1374696769422);
// 5644
o2 = {};
// 5645
f508011038_0.returns.push(o2);
// 5646
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5647
f508011038_537.returns.push(1374696769423);
// 5648
o2 = {};
// 5649
f508011038_0.returns.push(o2);
// 5650
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5651
f508011038_537.returns.push(1374696769423);
// 5652
o2 = {};
// 5653
f508011038_0.returns.push(o2);
// 5654
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5655
f508011038_537.returns.push(1374696769423);
// 5656
o2 = {};
// 5657
f508011038_0.returns.push(o2);
// 5658
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5659
f508011038_537.returns.push(1374696769423);
// 5660
o2 = {};
// 5661
f508011038_0.returns.push(o2);
// 5662
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5663
f508011038_537.returns.push(1374696769423);
// 5664
o2 = {};
// 5665
f508011038_0.returns.push(o2);
// 5666
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5667
f508011038_537.returns.push(1374696769423);
// 5668
o2 = {};
// 5669
f508011038_0.returns.push(o2);
// 5670
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5671
f508011038_537.returns.push(1374696769429);
// 5672
o2 = {};
// 5673
f508011038_0.returns.push(o2);
// 5674
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5675
f508011038_537.returns.push(1374696769429);
// 5676
o2 = {};
// 5677
f508011038_0.returns.push(o2);
// 5678
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5679
f508011038_537.returns.push(1374696769429);
// 5680
o2 = {};
// 5681
f508011038_0.returns.push(o2);
// 5682
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5683
f508011038_537.returns.push(1374696769429);
// 5684
o2 = {};
// 5685
f508011038_0.returns.push(o2);
// 5686
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5687
f508011038_537.returns.push(1374696769429);
// 5688
o2 = {};
// 5689
f508011038_0.returns.push(o2);
// 5690
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5691
f508011038_537.returns.push(1374696769429);
// 5692
o2 = {};
// 5693
f508011038_0.returns.push(o2);
// 5694
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5695
f508011038_537.returns.push(1374696769429);
// 5696
o2 = {};
// 5697
f508011038_0.returns.push(o2);
// 5698
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5699
f508011038_537.returns.push(1374696769429);
// 5700
o2 = {};
// 5701
f508011038_0.returns.push(o2);
// 5702
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5703
f508011038_537.returns.push(1374696769429);
// 5704
o2 = {};
// 5705
f508011038_0.returns.push(o2);
// 5706
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5707
f508011038_537.returns.push(1374696769430);
// 5708
o2 = {};
// 5709
f508011038_0.returns.push(o2);
// 5710
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5711
f508011038_537.returns.push(1374696769430);
// 5712
o2 = {};
// 5713
f508011038_0.returns.push(o2);
// 5714
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5715
f508011038_537.returns.push(1374696769430);
// 5716
o2 = {};
// 5717
f508011038_0.returns.push(o2);
// 5718
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5719
f508011038_537.returns.push(1374696769430);
// 5720
o2 = {};
// 5721
f508011038_0.returns.push(o2);
// 5722
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5723
f508011038_537.returns.push(1374696769430);
// 5724
o2 = {};
// 5725
f508011038_0.returns.push(o2);
// 5726
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5727
f508011038_537.returns.push(1374696769430);
// 5728
o2 = {};
// 5729
f508011038_0.returns.push(o2);
// 5730
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5731
f508011038_537.returns.push(1374696769430);
// 5732
o2 = {};
// 5733
f508011038_0.returns.push(o2);
// 5734
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5735
f508011038_537.returns.push(1374696769430);
// 5736
o2 = {};
// 5737
f508011038_0.returns.push(o2);
// 5738
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5739
f508011038_537.returns.push(1374696769430);
// 5740
o2 = {};
// 5741
f508011038_0.returns.push(o2);
// 5742
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5743
f508011038_537.returns.push(1374696769430);
// 5744
o2 = {};
// 5745
f508011038_0.returns.push(o2);
// 5746
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5747
f508011038_537.returns.push(1374696769430);
// 5748
o2 = {};
// 5749
f508011038_0.returns.push(o2);
// 5750
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5751
f508011038_537.returns.push(1374696769430);
// 5752
o2 = {};
// 5753
f508011038_0.returns.push(o2);
// 5754
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5755
f508011038_537.returns.push(1374696769431);
// 5756
o2 = {};
// 5757
f508011038_0.returns.push(o2);
// 5758
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5759
f508011038_537.returns.push(1374696769431);
// 5760
o2 = {};
// 5761
f508011038_0.returns.push(o2);
// 5762
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5763
f508011038_537.returns.push(1374696769431);
// 5764
o2 = {};
// 5765
f508011038_0.returns.push(o2);
// 5766
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5767
f508011038_537.returns.push(1374696769431);
// 5768
o2 = {};
// 5769
f508011038_0.returns.push(o2);
// 5770
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5771
f508011038_537.returns.push(1374696769432);
// 5772
o2 = {};
// 5773
f508011038_0.returns.push(o2);
// 5774
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5775
f508011038_537.returns.push(1374696769432);
// 5776
o2 = {};
// 5777
f508011038_0.returns.push(o2);
// 5778
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5779
f508011038_537.returns.push(1374696769435);
// 5780
o2 = {};
// 5781
f508011038_0.returns.push(o2);
// 5782
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5783
f508011038_537.returns.push(1374696769436);
// 5784
o2 = {};
// 5785
f508011038_0.returns.push(o2);
// 5786
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5787
f508011038_537.returns.push(1374696769436);
// 5788
o2 = {};
// 5789
f508011038_0.returns.push(o2);
// 5790
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5791
f508011038_537.returns.push(1374696769436);
// 5792
o2 = {};
// 5793
f508011038_0.returns.push(o2);
// 5794
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5795
f508011038_537.returns.push(1374696769436);
// 5796
o2 = {};
// 5797
f508011038_0.returns.push(o2);
// 5798
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5799
f508011038_537.returns.push(1374696769437);
// 5800
o2 = {};
// 5801
f508011038_0.returns.push(o2);
// 5802
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5803
f508011038_537.returns.push(1374696769437);
// 5804
o2 = {};
// 5805
f508011038_0.returns.push(o2);
// 5806
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5807
f508011038_537.returns.push(1374696769437);
// 5808
o2 = {};
// 5809
f508011038_0.returns.push(o2);
// 5810
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5811
f508011038_537.returns.push(1374696769437);
// 5812
o2 = {};
// 5813
f508011038_0.returns.push(o2);
// 5814
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5815
f508011038_537.returns.push(1374696769437);
// 5816
o2 = {};
// 5817
f508011038_0.returns.push(o2);
// 5818
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5819
f508011038_537.returns.push(1374696769437);
// 5820
o2 = {};
// 5821
f508011038_0.returns.push(o2);
// 5822
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5823
f508011038_537.returns.push(1374696769438);
// 5824
o3.appName = "Netscape";
// 5825
o2 = {};
// 5826
f508011038_0.returns.push(o2);
// 5827
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5828
f508011038_537.returns.push(1374696769438);
// 5829
o2 = {};
// 5830
f508011038_0.returns.push(o2);
// 5831
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5832
f508011038_537.returns.push(1374696769438);
// 5833
o2 = {};
// 5834
f508011038_0.returns.push(o2);
// 5835
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5836
f508011038_537.returns.push(1374696769438);
// 5837
o2 = {};
// 5838
f508011038_0.returns.push(o2);
// 5839
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5840
f508011038_537.returns.push(1374696769438);
// 5841
o2 = {};
// 5842
f508011038_0.returns.push(o2);
// 5843
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5844
f508011038_537.returns.push(1374696769439);
// 5845
o2 = {};
// 5846
f508011038_0.returns.push(o2);
// 5847
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5848
f508011038_537.returns.push(1374696769439);
// 5849
o2 = {};
// 5850
f508011038_0.returns.push(o2);
// 5851
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5852
f508011038_537.returns.push(1374696769439);
// 5853
o2 = {};
// 5854
f508011038_0.returns.push(o2);
// 5855
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5856
f508011038_537.returns.push(1374696769439);
// 5857
o2 = {};
// 5858
f508011038_0.returns.push(o2);
// 5859
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5860
f508011038_537.returns.push(1374696769439);
// 5861
o2 = {};
// 5862
f508011038_0.returns.push(o2);
// 5863
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5864
f508011038_537.returns.push(1374696769440);
// 5865
o2 = {};
// 5866
f508011038_0.returns.push(o2);
// 5867
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5868
f508011038_537.returns.push(1374696769440);
// 5869
o2 = {};
// 5870
f508011038_0.returns.push(o2);
// 5871
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5872
f508011038_537.returns.push(1374696769440);
// 5873
o2 = {};
// 5874
f508011038_0.returns.push(o2);
// 5875
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5876
f508011038_537.returns.push(1374696769440);
// 5877
o2 = {};
// 5878
f508011038_0.returns.push(o2);
// 5879
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5880
f508011038_537.returns.push(1374696769440);
// 5881
o2 = {};
// 5882
f508011038_0.returns.push(o2);
// 5883
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5884
f508011038_537.returns.push(1374696769443);
// 5885
o2 = {};
// 5886
f508011038_0.returns.push(o2);
// 5887
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5888
f508011038_537.returns.push(1374696769443);
// 5889
o2 = {};
// 5890
o3.plugins = o2;
// undefined
o3 = null;
// 5891
o3 = {};
// 5892
o2["Shockwave Flash"] = o3;
// undefined
o2 = null;
// 5893
o3.description = "Shockwave Flash 11.8 r800";
// 5894
o3.JSBNG__name = "Shockwave Flash";
// undefined
o3 = null;
// 5895
o2 = {};
// 5896
f508011038_0.returns.push(o2);
// 5897
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5898
f508011038_537.returns.push(1374696769445);
// 5899
o2 = {};
// 5900
f508011038_0.returns.push(o2);
// 5901
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5902
f508011038_537.returns.push(1374696769445);
// 5903
o2 = {};
// 5904
f508011038_0.returns.push(o2);
// 5905
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5906
f508011038_537.returns.push(1374696769445);
// 5907
o2 = {};
// 5908
f508011038_0.returns.push(o2);
// 5909
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5910
f508011038_537.returns.push(1374696769445);
// 5911
o2 = {};
// 5912
f508011038_0.returns.push(o2);
// 5913
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5914
f508011038_537.returns.push(1374696769446);
// 5915
o2 = {};
// 5916
f508011038_0.returns.push(o2);
// 5917
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5918
f508011038_537.returns.push(1374696769446);
// 5919
o2 = {};
// 5920
f508011038_0.returns.push(o2);
// 5921
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5922
f508011038_537.returns.push(1374696769446);
// 5923
o2 = {};
// 5924
f508011038_0.returns.push(o2);
// 5925
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5926
f508011038_537.returns.push(1374696769446);
// 5927
o2 = {};
// 5928
f508011038_0.returns.push(o2);
// 5929
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5930
f508011038_537.returns.push(1374696769446);
// 5931
o2 = {};
// 5932
f508011038_0.returns.push(o2);
// 5933
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5934
f508011038_537.returns.push(1374696769446);
// 5935
o2 = {};
// 5936
f508011038_0.returns.push(o2);
// 5937
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5938
f508011038_537.returns.push(1374696769446);
// 5939
o2 = {};
// 5940
f508011038_0.returns.push(o2);
// 5941
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5942
f508011038_537.returns.push(1374696769446);
// 5943
o2 = {};
// 5944
f508011038_0.returns.push(o2);
// 5945
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5946
f508011038_537.returns.push(1374696769446);
// 5947
o2 = {};
// 5948
f508011038_0.returns.push(o2);
// 5949
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5950
f508011038_537.returns.push(1374696769446);
// 5951
o2 = {};
// 5952
f508011038_0.returns.push(o2);
// 5953
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5954
f508011038_537.returns.push(1374696769446);
// 5960
o2 = {};
// 5961
f508011038_546.returns.push(o2);
// 5962
o2["0"] = o10;
// 5963
o2["1"] = void 0;
// undefined
o2 = null;
// 5964
o10.nodeType = 1;
// 5965
o10.getAttribute = f508011038_468;
// 5966
o10.ownerDocument = o0;
// 5970
f508011038_468.returns.push("ltr");
// 5971
o2 = {};
// 5972
f508011038_0.returns.push(o2);
// 5973
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5974
f508011038_537.returns.push(1374696769457);
// 5975
o2 = {};
// 5976
f508011038_0.returns.push(o2);
// 5977
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5978
f508011038_537.returns.push(1374696769457);
// 5979
o2 = {};
// 5980
f508011038_0.returns.push(o2);
// 5981
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5982
f508011038_537.returns.push(1374696769457);
// 5983
o2 = {};
// 5984
f508011038_0.returns.push(o2);
// 5985
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5986
f508011038_537.returns.push(1374696769457);
// 5987
o2 = {};
// 5988
f508011038_0.returns.push(o2);
// 5989
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5990
f508011038_537.returns.push(1374696769460);
// 5991
o2 = {};
// 5992
f508011038_0.returns.push(o2);
// 5993
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5994
f508011038_537.returns.push(1374696769460);
// 5995
o2 = {};
// 5996
f508011038_0.returns.push(o2);
// 5997
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 5998
f508011038_537.returns.push(1374696769460);
// 5999
o2 = {};
// 6000
f508011038_0.returns.push(o2);
// 6001
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6002
f508011038_537.returns.push(1374696769460);
// 6003
o2 = {};
// 6004
f508011038_0.returns.push(o2);
// 6005
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6006
f508011038_537.returns.push(1374696769460);
// 6007
o2 = {};
// 6008
f508011038_0.returns.push(o2);
// 6009
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6010
f508011038_537.returns.push(1374696769460);
// 6011
o2 = {};
// 6012
f508011038_0.returns.push(o2);
// 6013
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6014
f508011038_537.returns.push(1374696769460);
// 6015
o2 = {};
// 6016
f508011038_0.returns.push(o2);
// 6017
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6018
f508011038_537.returns.push(1374696769460);
// 6019
o2 = {};
// 6020
f508011038_0.returns.push(o2);
// 6021
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6022
f508011038_537.returns.push(1374696769461);
// 6023
o2 = {};
// 6024
f508011038_0.returns.push(o2);
// 6025
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6026
f508011038_537.returns.push(1374696769461);
// 6027
o2 = {};
// 6028
f508011038_0.returns.push(o2);
// 6029
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6030
f508011038_537.returns.push(1374696769461);
// 6031
o2 = {};
// 6032
f508011038_0.returns.push(o2);
// 6033
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6034
f508011038_537.returns.push(1374696769462);
// 6035
o2 = {};
// 6036
f508011038_0.returns.push(o2);
// 6037
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6038
f508011038_537.returns.push(1374696769462);
// 6039
o2 = {};
// 6040
f508011038_0.returns.push(o2);
// 6041
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6042
f508011038_537.returns.push(1374696769462);
// 6043
o2 = {};
// 6044
f508011038_0.returns.push(o2);
// 6045
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6046
f508011038_537.returns.push(1374696769462);
// 6047
o2 = {};
// 6048
f508011038_0.returns.push(o2);
// 6049
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6050
f508011038_537.returns.push(1374696769462);
// 6051
o2 = {};
// 6052
f508011038_0.returns.push(o2);
// 6053
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6054
f508011038_537.returns.push(1374696769462);
// 6055
o2 = {};
// 6056
f508011038_0.returns.push(o2);
// 6057
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6058
f508011038_537.returns.push(1374696769462);
// 6059
o2 = {};
// 6060
f508011038_0.returns.push(o2);
// 6061
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6062
f508011038_537.returns.push(1374696769462);
// 6063
o2 = {};
// 6064
f508011038_0.returns.push(o2);
// 6065
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6066
f508011038_537.returns.push(1374696769462);
// 6067
o2 = {};
// 6068
f508011038_0.returns.push(o2);
// 6069
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6070
f508011038_537.returns.push(1374696769463);
// 6071
o2 = {};
// 6072
f508011038_0.returns.push(o2);
// 6073
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6074
f508011038_537.returns.push(1374696769463);
// 6075
o2 = {};
// 6076
f508011038_0.returns.push(o2);
// 6077
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6078
f508011038_537.returns.push(1374696769463);
// 6079
o2 = {};
// 6080
f508011038_0.returns.push(o2);
// 6081
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6082
f508011038_537.returns.push(1374696769463);
// 6083
o2 = {};
// 6084
f508011038_0.returns.push(o2);
// 6085
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6086
f508011038_537.returns.push(1374696769463);
// 6087
o2 = {};
// 6088
f508011038_0.returns.push(o2);
// 6089
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6090
f508011038_537.returns.push(1374696769463);
// 6091
o2 = {};
// 6092
f508011038_0.returns.push(o2);
// 6093
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6094
f508011038_537.returns.push(1374696769463);
// 6095
o2 = {};
// 6096
f508011038_0.returns.push(o2);
// 6097
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6098
f508011038_537.returns.push(1374696769466);
// 6099
o2 = {};
// 6100
f508011038_0.returns.push(o2);
// 6101
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6102
f508011038_537.returns.push(1374696769466);
// 6103
o2 = {};
// 6104
f508011038_0.returns.push(o2);
// 6105
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6106
f508011038_537.returns.push(1374696769469);
// 6107
o2 = {};
// 6108
f508011038_0.returns.push(o2);
// 6109
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6110
f508011038_537.returns.push(1374696769469);
// 6111
o2 = {};
// 6112
f508011038_0.returns.push(o2);
// 6113
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6114
f508011038_537.returns.push(1374696769469);
// 6115
o2 = {};
// 6116
f508011038_0.returns.push(o2);
// 6117
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6118
f508011038_537.returns.push(1374696769469);
// 6119
o2 = {};
// 6120
f508011038_0.returns.push(o2);
// 6121
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6122
f508011038_537.returns.push(1374696769470);
// 6123
o2 = {};
// 6124
f508011038_0.returns.push(o2);
// 6125
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6126
f508011038_537.returns.push(1374696769470);
// 6127
o2 = {};
// 6128
f508011038_0.returns.push(o2);
// 6129
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6130
f508011038_537.returns.push(1374696769470);
// 6131
o2 = {};
// 6132
f508011038_0.returns.push(o2);
// 6133
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6134
f508011038_537.returns.push(1374696769470);
// 6135
o2 = {};
// 6136
f508011038_0.returns.push(o2);
// 6137
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6138
f508011038_537.returns.push(1374696769470);
// 6139
o2 = {};
// 6140
f508011038_0.returns.push(o2);
// 6141
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6142
f508011038_537.returns.push(1374696769470);
// 6143
o2 = {};
// 6144
f508011038_0.returns.push(o2);
// 6145
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6146
f508011038_537.returns.push(1374696769470);
// 6147
o2 = {};
// 6148
f508011038_0.returns.push(o2);
// 6149
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6150
f508011038_537.returns.push(1374696769471);
// 6151
o2 = {};
// 6152
f508011038_0.returns.push(o2);
// 6153
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6154
f508011038_537.returns.push(1374696769472);
// 6155
o2 = {};
// 6156
f508011038_0.returns.push(o2);
// 6157
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6158
f508011038_537.returns.push(1374696769472);
// 6159
o2 = {};
// 6160
f508011038_0.returns.push(o2);
// 6161
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6162
f508011038_537.returns.push(1374696769472);
// 6163
o2 = {};
// 6164
f508011038_0.returns.push(o2);
// 6165
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6166
f508011038_537.returns.push(1374696769472);
// 6167
o2 = {};
// 6168
f508011038_0.returns.push(o2);
// 6169
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6170
f508011038_537.returns.push(1374696769472);
// 6171
o2 = {};
// 6172
f508011038_0.returns.push(o2);
// 6173
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6174
f508011038_537.returns.push(1374696769472);
// 6175
o2 = {};
// 6176
f508011038_0.returns.push(o2);
// 6177
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6178
f508011038_537.returns.push(1374696769472);
// 6179
o2 = {};
// 6180
f508011038_0.returns.push(o2);
// 6181
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6182
f508011038_537.returns.push(1374696769473);
// 6183
o2 = {};
// 6184
f508011038_0.returns.push(o2);
// 6185
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6186
f508011038_537.returns.push(1374696769473);
// 6187
o2 = {};
// 6188
f508011038_0.returns.push(o2);
// 6189
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6190
f508011038_537.returns.push(1374696769473);
// 6191
o2 = {};
// 6192
f508011038_0.returns.push(o2);
// 6193
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6194
f508011038_537.returns.push(1374696769473);
// 6195
o2 = {};
// 6196
f508011038_0.returns.push(o2);
// 6197
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6198
f508011038_537.returns.push(1374696769474);
// 6199
o2 = {};
// 6200
f508011038_0.returns.push(o2);
// 6201
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6202
f508011038_537.returns.push(1374696769476);
// 6203
o2 = {};
// 6204
f508011038_0.returns.push(o2);
// 6205
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6206
f508011038_537.returns.push(1374696769476);
// 6207
o2 = {};
// 6208
f508011038_0.returns.push(o2);
// 6209
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6210
f508011038_537.returns.push(1374696769477);
// 6211
o2 = {};
// 6212
f508011038_0.returns.push(o2);
// 6213
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6214
f508011038_537.returns.push(1374696769477);
// 6215
o2 = {};
// 6216
f508011038_0.returns.push(o2);
// 6217
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6218
f508011038_537.returns.push(1374696769477);
// 6219
o2 = {};
// 6220
f508011038_0.returns.push(o2);
// 6221
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6222
f508011038_537.returns.push(1374696769477);
// 6223
o2 = {};
// 6224
f508011038_0.returns.push(o2);
// 6225
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6226
f508011038_537.returns.push(1374696769478);
// 6227
o2 = {};
// 6228
f508011038_0.returns.push(o2);
// 6229
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6230
f508011038_537.returns.push(1374696769478);
// 6231
o2 = {};
// 6232
f508011038_0.returns.push(o2);
// 6233
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6234
f508011038_537.returns.push(1374696769478);
// 6235
o2 = {};
// 6236
f508011038_0.returns.push(o2);
// 6237
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6238
f508011038_537.returns.push(1374696769478);
// 6239
o2 = {};
// 6240
f508011038_0.returns.push(o2);
// 6241
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6242
f508011038_537.returns.push(1374696769478);
// 6243
o2 = {};
// 6244
f508011038_0.returns.push(o2);
// 6245
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6246
f508011038_537.returns.push(1374696769478);
// 6247
o2 = {};
// 6248
f508011038_0.returns.push(o2);
// 6249
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6250
f508011038_537.returns.push(1374696769478);
// 6251
o2 = {};
// 6252
f508011038_0.returns.push(o2);
// 6253
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6254
f508011038_537.returns.push(1374696769479);
// 6255
o2 = {};
// 6256
f508011038_0.returns.push(o2);
// 6257
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6258
f508011038_537.returns.push(1374696769479);
// 6259
o2 = {};
// 6260
f508011038_0.returns.push(o2);
// 6261
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6262
f508011038_537.returns.push(1374696769479);
// 6263
o2 = {};
// 6264
f508011038_0.returns.push(o2);
// 6265
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6266
f508011038_537.returns.push(1374696769479);
// 6267
o2 = {};
// 6268
f508011038_0.returns.push(o2);
// 6269
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6270
f508011038_537.returns.push(1374696769480);
// 6271
o2 = {};
// 6272
f508011038_0.returns.push(o2);
// 6273
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6274
f508011038_537.returns.push(1374696769480);
// 6275
o2 = {};
// 6276
f508011038_0.returns.push(o2);
// 6277
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6278
f508011038_537.returns.push(1374696769480);
// 6279
o2 = {};
// 6280
f508011038_0.returns.push(o2);
// 6281
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6282
f508011038_537.returns.push(1374696769480);
// 6283
o2 = {};
// 6284
f508011038_0.returns.push(o2);
// 6285
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6286
f508011038_537.returns.push(1374696769481);
// 6287
o2 = {};
// 6288
f508011038_0.returns.push(o2);
// 6289
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6290
f508011038_537.returns.push(1374696769481);
// 6291
o2 = {};
// 6292
f508011038_0.returns.push(o2);
// 6293
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6294
f508011038_537.returns.push(1374696769481);
// 6295
o2 = {};
// 6296
f508011038_0.returns.push(o2);
// 6297
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6298
f508011038_537.returns.push(1374696769481);
// 6300
o2 = {};
// 6301
f508011038_0.returns.push(o2);
// 6302
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6303
f508011038_537.returns.push(1374696769481);
// 6304
o2 = {};
// 6305
f508011038_0.returns.push(o2);
// 6306
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6307
f508011038_537.returns.push(1374696769484);
// 6308
o2 = {};
// 6309
f508011038_0.returns.push(o2);
// 6310
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6311
f508011038_537.returns.push(1374696769484);
// 6312
o2 = {};
// 6313
f508011038_0.returns.push(o2);
// 6314
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6315
f508011038_537.returns.push(1374696769486);
// 6316
o2 = {};
// 6317
f508011038_0.returns.push(o2);
// 6318
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6319
f508011038_537.returns.push(1374696769487);
// 6320
o2 = {};
// 6321
f508011038_0.returns.push(o2);
// 6322
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6323
f508011038_537.returns.push(1374696769487);
// 6324
o2 = {};
// 6325
f508011038_0.returns.push(o2);
// 6326
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6327
f508011038_537.returns.push(1374696769487);
// 6328
o2 = {};
// 6329
f508011038_0.returns.push(o2);
// 6330
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6331
f508011038_537.returns.push(1374696769487);
// 6332
o2 = {};
// 6333
f508011038_0.returns.push(o2);
// 6334
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6335
f508011038_537.returns.push(1374696769487);
// 6336
o2 = {};
// 6337
f508011038_0.returns.push(o2);
// 6338
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6339
f508011038_537.returns.push(1374696769487);
// 6340
o2 = {};
// 6341
f508011038_0.returns.push(o2);
// 6342
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6343
f508011038_537.returns.push(1374696769487);
// 6344
o2 = {};
// 6345
f508011038_0.returns.push(o2);
// 6346
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6347
f508011038_537.returns.push(1374696769487);
// 6348
o2 = {};
// 6349
f508011038_0.returns.push(o2);
// 6350
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6351
f508011038_537.returns.push(1374696769488);
// 6352
o2 = {};
// 6353
f508011038_0.returns.push(o2);
// 6354
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6355
f508011038_537.returns.push(1374696769488);
// 6356
o2 = {};
// 6357
f508011038_0.returns.push(o2);
// 6358
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6359
f508011038_537.returns.push(1374696769488);
// 6360
o2 = {};
// 6361
f508011038_0.returns.push(o2);
// 6362
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6363
f508011038_537.returns.push(1374696769488);
// 6364
o2 = {};
// 6365
f508011038_0.returns.push(o2);
// 6366
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6367
f508011038_537.returns.push(1374696769488);
// 6368
o2 = {};
// 6369
f508011038_0.returns.push(o2);
// 6370
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6371
f508011038_537.returns.push(1374696769488);
// 6372
o2 = {};
// 6373
f508011038_0.returns.push(o2);
// 6374
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6375
f508011038_537.returns.push(1374696769490);
// 6376
o2 = {};
// 6377
f508011038_0.returns.push(o2);
// 6378
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6379
f508011038_537.returns.push(1374696769490);
// 6380
o2 = {};
// 6381
f508011038_0.returns.push(o2);
// 6382
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6383
f508011038_537.returns.push(1374696769490);
// 6384
o2 = {};
// 6385
f508011038_0.returns.push(o2);
// 6386
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6387
f508011038_537.returns.push(1374696769492);
// 6388
o2 = {};
// 6389
f508011038_0.returns.push(o2);
// 6390
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6391
f508011038_537.returns.push(1374696769492);
// 6392
o2 = {};
// 6393
f508011038_0.returns.push(o2);
// 6394
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6395
f508011038_537.returns.push(1374696769492);
// 6396
o2 = {};
// 6397
f508011038_0.returns.push(o2);
// 6398
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6399
f508011038_537.returns.push(1374696769492);
// 6400
o2 = {};
// 6401
f508011038_0.returns.push(o2);
// 6402
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6403
f508011038_537.returns.push(1374696769492);
// 6404
o2 = {};
// 6405
f508011038_0.returns.push(o2);
// 6406
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6407
f508011038_537.returns.push(1374696769492);
// 6408
o2 = {};
// 6409
f508011038_0.returns.push(o2);
// 6410
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6411
f508011038_537.returns.push(1374696769493);
// 6412
o2 = {};
// 6413
f508011038_0.returns.push(o2);
// 6414
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6415
f508011038_537.returns.push(1374696769495);
// 6416
o2 = {};
// 6417
f508011038_0.returns.push(o2);
// 6418
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6419
f508011038_537.returns.push(1374696769498);
// 6420
o2 = {};
// 6421
f508011038_0.returns.push(o2);
// 6422
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6423
f508011038_537.returns.push(1374696769498);
// 6424
o2 = {};
// 6425
f508011038_0.returns.push(o2);
// 6426
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6427
f508011038_537.returns.push(1374696769499);
// 6428
o2 = {};
// 6429
f508011038_0.returns.push(o2);
// 6430
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6431
f508011038_537.returns.push(1374696769499);
// 6432
o2 = {};
// 6433
f508011038_0.returns.push(o2);
// 6434
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6435
f508011038_537.returns.push(1374696769499);
// 6436
o2 = {};
// 6437
f508011038_0.returns.push(o2);
// 6438
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6439
f508011038_537.returns.push(1374696769500);
// 6440
o2 = {};
// 6441
f508011038_0.returns.push(o2);
// 6442
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6443
f508011038_537.returns.push(1374696769500);
// 6444
o2 = {};
// 6445
f508011038_0.returns.push(o2);
// 6446
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6447
f508011038_537.returns.push(1374696769500);
// 6448
o2 = {};
// 6449
f508011038_0.returns.push(o2);
// 6450
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6451
f508011038_537.returns.push(1374696769500);
// 6452
o2 = {};
// 6453
f508011038_0.returns.push(o2);
// 6454
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6455
f508011038_537.returns.push(1374696769500);
// 6456
o2 = {};
// 6457
f508011038_0.returns.push(o2);
// 6458
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6459
f508011038_537.returns.push(1374696769500);
// 6460
o2 = {};
// 6461
f508011038_0.returns.push(o2);
// 6462
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6463
f508011038_537.returns.push(1374696769501);
// 6464
o2 = {};
// 6465
f508011038_0.returns.push(o2);
// 6466
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6467
f508011038_537.returns.push(1374696769501);
// 6468
o2 = {};
// 6469
f508011038_0.returns.push(o2);
// 6470
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6471
f508011038_537.returns.push(1374696769501);
// 6472
o2 = {};
// 6473
f508011038_0.returns.push(o2);
// 6474
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6475
f508011038_537.returns.push(1374696769501);
// 6476
o2 = {};
// 6477
f508011038_0.returns.push(o2);
// 6478
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6479
f508011038_537.returns.push(1374696769501);
// 6480
o2 = {};
// 6481
f508011038_0.returns.push(o2);
// 6482
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6483
f508011038_537.returns.push(1374696769502);
// 6484
o2 = {};
// 6485
f508011038_0.returns.push(o2);
// 6486
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6487
f508011038_537.returns.push(1374696769502);
// 6488
o2 = {};
// 6489
f508011038_0.returns.push(o2);
// 6490
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6491
f508011038_537.returns.push(1374696769502);
// 6492
o2 = {};
// 6493
f508011038_0.returns.push(o2);
// 6494
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6495
f508011038_537.returns.push(1374696769502);
// 6496
o2 = {};
// 6497
f508011038_0.returns.push(o2);
// 6498
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6499
f508011038_537.returns.push(1374696769502);
// 6500
o2 = {};
// 6501
f508011038_0.returns.push(o2);
// 6502
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6503
f508011038_537.returns.push(1374696769502);
// 6504
o2 = {};
// 6505
f508011038_0.returns.push(o2);
// 6506
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6507
f508011038_537.returns.push(1374696769502);
// 6508
o2 = {};
// 6509
f508011038_0.returns.push(o2);
// 6510
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6511
f508011038_537.returns.push(1374696769503);
// 6512
o2 = {};
// 6513
f508011038_0.returns.push(o2);
// 6514
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6515
f508011038_537.returns.push(1374696769503);
// 6516
o2 = {};
// 6517
f508011038_0.returns.push(o2);
// 6518
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6519
f508011038_537.returns.push(1374696769506);
// 6520
o2 = {};
// 6521
f508011038_0.returns.push(o2);
// 6522
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6523
f508011038_537.returns.push(1374696769506);
// 6524
o2 = {};
// 6525
f508011038_0.returns.push(o2);
// 6526
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6527
f508011038_537.returns.push(1374696769506);
// 6528
o2 = {};
// 6529
f508011038_0.returns.push(o2);
// 6530
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6531
f508011038_537.returns.push(1374696769506);
// 6532
o2 = {};
// 6533
f508011038_0.returns.push(o2);
// 6534
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6535
f508011038_537.returns.push(1374696769507);
// 6536
o2 = {};
// 6537
f508011038_0.returns.push(o2);
// 6538
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6539
f508011038_537.returns.push(1374696769507);
// 6540
o2 = {};
// 6541
f508011038_0.returns.push(o2);
// 6542
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6543
f508011038_537.returns.push(1374696769507);
// 6544
o2 = {};
// 6545
f508011038_0.returns.push(o2);
// 6546
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6547
f508011038_537.returns.push(1374696769508);
// 6548
o2 = {};
// 6549
f508011038_0.returns.push(o2);
// 6550
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6551
f508011038_537.returns.push(1374696769508);
// 6552
o2 = {};
// 6553
f508011038_0.returns.push(o2);
// 6554
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6555
f508011038_537.returns.push(1374696769508);
// 6556
o2 = {};
// 6557
f508011038_0.returns.push(o2);
// 6558
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6559
f508011038_537.returns.push(1374696769508);
// 6560
o2 = {};
// 6561
f508011038_0.returns.push(o2);
// 6562
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6563
f508011038_537.returns.push(1374696769508);
// 6564
o2 = {};
// 6565
f508011038_0.returns.push(o2);
// 6566
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6567
f508011038_537.returns.push(1374696769508);
// 6568
o2 = {};
// 6569
f508011038_0.returns.push(o2);
// 6570
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6571
f508011038_537.returns.push(1374696769508);
// 6572
o2 = {};
// 6573
f508011038_0.returns.push(o2);
// 6574
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6575
f508011038_537.returns.push(1374696769509);
// 6576
o2 = {};
// 6577
f508011038_0.returns.push(o2);
// 6578
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6579
f508011038_537.returns.push(1374696769509);
// 6580
o2 = {};
// 6581
f508011038_0.returns.push(o2);
// 6582
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6583
f508011038_537.returns.push(1374696769509);
// 6584
o2 = {};
// 6585
f508011038_0.returns.push(o2);
// 6586
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6587
f508011038_537.returns.push(1374696769509);
// 6588
o2 = {};
// 6589
f508011038_0.returns.push(o2);
// 6590
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6591
f508011038_537.returns.push(1374696769509);
// 6592
o2 = {};
// 6593
f508011038_0.returns.push(o2);
// 6594
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6595
f508011038_537.returns.push(1374696769509);
// 6596
o2 = {};
// 6597
f508011038_0.returns.push(o2);
// 6598
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6599
f508011038_537.returns.push(1374696769510);
// 6600
o2 = {};
// 6601
f508011038_0.returns.push(o2);
// 6602
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6603
f508011038_537.returns.push(1374696769510);
// 6604
o2 = {};
// 6605
f508011038_0.returns.push(o2);
// 6606
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6607
f508011038_537.returns.push(1374696769510);
// 6608
o2 = {};
// 6609
f508011038_0.returns.push(o2);
// 6610
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6611
f508011038_537.returns.push(1374696769510);
// 6612
o2 = {};
// 6613
f508011038_0.returns.push(o2);
// 6614
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6615
f508011038_537.returns.push(1374696769510);
// 6616
o2 = {};
// 6617
f508011038_0.returns.push(o2);
// 6618
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6619
f508011038_537.returns.push(1374696769510);
// 6620
o2 = {};
// 6621
f508011038_0.returns.push(o2);
// 6622
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6623
f508011038_537.returns.push(1374696769510);
// 6624
o2 = {};
// 6625
f508011038_0.returns.push(o2);
// 6626
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6627
f508011038_537.returns.push(1374696769513);
// 6628
o2 = {};
// 6629
f508011038_0.returns.push(o2);
// 6630
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6631
f508011038_537.returns.push(1374696769513);
// 6632
o2 = {};
// 6633
f508011038_0.returns.push(o2);
// 6634
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6635
f508011038_537.returns.push(1374696769513);
// 6636
o2 = {};
// 6637
f508011038_0.returns.push(o2);
// 6638
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6639
f508011038_537.returns.push(1374696769514);
// 6640
o2 = {};
// 6641
f508011038_0.returns.push(o2);
// 6642
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6643
f508011038_537.returns.push(1374696769514);
// 6644
o2 = {};
// 6645
f508011038_0.returns.push(o2);
// 6646
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6647
f508011038_537.returns.push(1374696769514);
// 6648
o2 = {};
// 6649
f508011038_0.returns.push(o2);
// 6650
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6651
f508011038_537.returns.push(1374696769514);
// 6652
o2 = {};
// 6653
f508011038_0.returns.push(o2);
// 6654
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6655
f508011038_537.returns.push(1374696769515);
// 6656
o2 = {};
// 6657
f508011038_0.returns.push(o2);
// 6658
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6659
f508011038_537.returns.push(1374696769515);
// 6660
o2 = {};
// 6661
f508011038_0.returns.push(o2);
// 6662
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6663
f508011038_537.returns.push(1374696769515);
// 6664
o2 = {};
// 6665
f508011038_0.returns.push(o2);
// 6666
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6667
f508011038_537.returns.push(1374696769515);
// 6668
o2 = {};
// 6669
f508011038_0.returns.push(o2);
// 6670
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6671
f508011038_537.returns.push(1374696769515);
// 6672
o2 = {};
// 6673
f508011038_0.returns.push(o2);
// 6674
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6675
f508011038_537.returns.push(1374696769515);
// 6676
o2 = {};
// 6677
f508011038_0.returns.push(o2);
// 6678
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6679
f508011038_537.returns.push(1374696769515);
// 6680
o2 = {};
// 6681
f508011038_0.returns.push(o2);
// 6682
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6683
f508011038_537.returns.push(1374696769516);
// 6684
o2 = {};
// 6685
f508011038_0.returns.push(o2);
// 6686
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6687
f508011038_537.returns.push(1374696769517);
// 6688
o2 = {};
// 6689
f508011038_0.returns.push(o2);
// 6690
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6691
f508011038_537.returns.push(1374696769517);
// 6692
o2 = {};
// 6693
f508011038_0.returns.push(o2);
// 6694
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6695
f508011038_537.returns.push(1374696769517);
// 6696
o2 = {};
// 6697
f508011038_0.returns.push(o2);
// 6698
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6699
f508011038_537.returns.push(1374696769517);
// 6700
o2 = {};
// 6701
f508011038_0.returns.push(o2);
// 6702
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6703
f508011038_537.returns.push(1374696769517);
// 6704
o2 = {};
// 6705
f508011038_0.returns.push(o2);
// 6706
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6707
f508011038_537.returns.push(1374696769517);
// 6708
o2 = {};
// 6709
f508011038_0.returns.push(o2);
// 6710
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6711
f508011038_537.returns.push(1374696769517);
// 6712
o2 = {};
// 6713
f508011038_0.returns.push(o2);
// 6714
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6715
f508011038_537.returns.push(1374696769517);
// 6716
o2 = {};
// 6717
f508011038_0.returns.push(o2);
// 6718
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6719
f508011038_537.returns.push(1374696769518);
// 6720
o2 = {};
// 6721
f508011038_0.returns.push(o2);
// 6722
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6723
f508011038_537.returns.push(1374696769518);
// 6724
o2 = {};
// 6725
f508011038_0.returns.push(o2);
// 6726
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6727
f508011038_537.returns.push(1374696769518);
// 6728
o2 = {};
// 6729
f508011038_0.returns.push(o2);
// 6730
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6731
f508011038_537.returns.push(1374696769521);
// 6732
o2 = {};
// 6733
f508011038_0.returns.push(o2);
// 6734
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6735
f508011038_537.returns.push(1374696769521);
// 6736
o2 = {};
// 6737
f508011038_0.returns.push(o2);
// 6738
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6739
f508011038_537.returns.push(1374696769521);
// 6740
o2 = {};
// 6741
f508011038_0.returns.push(o2);
// 6742
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6743
f508011038_537.returns.push(1374696769522);
// 6744
o2 = {};
// 6745
f508011038_0.returns.push(o2);
// 6746
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6747
f508011038_537.returns.push(1374696769522);
// 6748
o2 = {};
// 6749
f508011038_0.returns.push(o2);
// 6750
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6751
f508011038_537.returns.push(1374696769522);
// 6752
o2 = {};
// 6753
f508011038_0.returns.push(o2);
// 6754
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6755
f508011038_537.returns.push(1374696769522);
// 6756
o2 = {};
// 6757
f508011038_0.returns.push(o2);
// 6758
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6759
f508011038_537.returns.push(1374696769523);
// 6760
o2 = {};
// 6761
f508011038_0.returns.push(o2);
// 6762
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6763
f508011038_537.returns.push(1374696769523);
// 6764
o2 = {};
// 6765
f508011038_0.returns.push(o2);
// 6766
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6767
f508011038_537.returns.push(1374696769523);
// 6768
o2 = {};
// 6769
f508011038_0.returns.push(o2);
// 6770
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6771
f508011038_537.returns.push(1374696769523);
// 6772
o2 = {};
// 6773
f508011038_0.returns.push(o2);
// 6774
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6775
f508011038_537.returns.push(1374696769523);
// 6776
o2 = {};
// 6777
f508011038_0.returns.push(o2);
// 6778
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6779
f508011038_537.returns.push(1374696769523);
// 6780
o2 = {};
// 6781
f508011038_0.returns.push(o2);
// 6782
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6783
f508011038_537.returns.push(1374696769523);
// 6784
o2 = {};
// 6785
f508011038_0.returns.push(o2);
// 6786
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6787
f508011038_537.returns.push(1374696769524);
// 6788
o2 = {};
// 6789
f508011038_0.returns.push(o2);
// 6790
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6791
f508011038_537.returns.push(1374696769524);
// 6792
o2 = {};
// 6793
f508011038_0.returns.push(o2);
// 6794
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6795
f508011038_537.returns.push(1374696769525);
// 6796
o2 = {};
// 6797
f508011038_0.returns.push(o2);
// 6798
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6799
f508011038_537.returns.push(1374696769525);
// 6800
o2 = {};
// 6801
f508011038_0.returns.push(o2);
// 6802
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6803
f508011038_537.returns.push(1374696769525);
// 6804
o2 = {};
// 6805
f508011038_0.returns.push(o2);
// 6806
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6807
f508011038_537.returns.push(1374696769525);
// 6808
o2 = {};
// 6809
f508011038_0.returns.push(o2);
// 6810
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6811
f508011038_537.returns.push(1374696769525);
// 6812
o2 = {};
// 6813
f508011038_0.returns.push(o2);
// 6814
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6815
f508011038_537.returns.push(1374696769526);
// 6816
o2 = {};
// 6817
f508011038_0.returns.push(o2);
// 6818
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6819
f508011038_537.returns.push(1374696769526);
// 6820
o2 = {};
// 6821
f508011038_0.returns.push(o2);
// 6822
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6823
f508011038_537.returns.push(1374696769526);
// 6824
o2 = {};
// 6825
f508011038_0.returns.push(o2);
// 6826
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6827
f508011038_537.returns.push(1374696769526);
// 6828
o2 = {};
// 6829
f508011038_0.returns.push(o2);
// 6830
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6831
f508011038_537.returns.push(1374696769527);
// 6832
o2 = {};
// 6833
f508011038_0.returns.push(o2);
// 6834
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6835
f508011038_537.returns.push(1374696769527);
// 6836
o2 = {};
// 6837
f508011038_0.returns.push(o2);
// 6838
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6839
f508011038_537.returns.push(1374696769531);
// 6840
o2 = {};
// 6841
f508011038_0.returns.push(o2);
// 6842
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6843
f508011038_537.returns.push(1374696769531);
// 6844
o2 = {};
// 6845
f508011038_0.returns.push(o2);
// 6846
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6847
f508011038_537.returns.push(1374696769532);
// 6848
o2 = {};
// 6849
f508011038_0.returns.push(o2);
// 6850
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6851
f508011038_537.returns.push(1374696769532);
// 6852
o2 = {};
// 6853
f508011038_0.returns.push(o2);
// 6854
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6855
f508011038_537.returns.push(1374696769532);
// 6856
o2 = {};
// 6857
f508011038_0.returns.push(o2);
// 6858
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6859
f508011038_537.returns.push(1374696769532);
// 6860
o2 = {};
// 6861
f508011038_0.returns.push(o2);
// 6862
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6863
f508011038_537.returns.push(1374696769532);
// 6864
o2 = {};
// 6865
f508011038_0.returns.push(o2);
// 6866
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6867
f508011038_537.returns.push(1374696769534);
// 6868
o2 = {};
// 6869
f508011038_0.returns.push(o2);
// 6870
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6871
f508011038_537.returns.push(1374696769534);
// 6872
o2 = {};
// 6873
f508011038_0.returns.push(o2);
// 6874
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6875
f508011038_537.returns.push(1374696769534);
// 6876
o2 = {};
// 6877
f508011038_0.returns.push(o2);
// 6878
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6879
f508011038_537.returns.push(1374696769534);
// 6880
o2 = {};
// 6881
f508011038_0.returns.push(o2);
// 6882
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6883
f508011038_537.returns.push(1374696769534);
// 6884
o2 = {};
// 6885
f508011038_0.returns.push(o2);
// 6886
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6887
f508011038_537.returns.push(1374696769534);
// 6888
o2 = {};
// 6889
f508011038_0.returns.push(o2);
// 6890
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6891
f508011038_537.returns.push(1374696769534);
// 6892
o2 = {};
// 6893
f508011038_0.returns.push(o2);
// 6894
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6895
f508011038_537.returns.push(1374696769534);
// 6896
o2 = {};
// 6897
f508011038_0.returns.push(o2);
// 6898
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6899
f508011038_537.returns.push(1374696769535);
// 6900
o2 = {};
// 6901
f508011038_0.returns.push(o2);
// 6902
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6903
f508011038_537.returns.push(1374696769535);
// 6904
o2 = {};
// 6905
f508011038_0.returns.push(o2);
// 6906
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6907
f508011038_537.returns.push(1374696769535);
// 6908
o2 = {};
// 6909
f508011038_0.returns.push(o2);
// 6910
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6911
f508011038_537.returns.push(1374696769535);
// 6912
o2 = {};
// 6913
f508011038_0.returns.push(o2);
// 6914
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6915
f508011038_537.returns.push(1374696769535);
// 6916
o2 = {};
// 6917
f508011038_0.returns.push(o2);
// 6918
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6919
f508011038_537.returns.push(1374696769535);
// 6920
o2 = {};
// 6921
f508011038_0.returns.push(o2);
// 6922
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6923
f508011038_537.returns.push(1374696769535);
// 6924
o2 = {};
// 6925
f508011038_0.returns.push(o2);
// 6926
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6927
f508011038_537.returns.push(1374696769535);
// 6928
o2 = {};
// 6929
f508011038_0.returns.push(o2);
// 6930
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6931
f508011038_537.returns.push(1374696769537);
// 6932
o2 = {};
// 6933
f508011038_0.returns.push(o2);
// 6934
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6935
f508011038_537.returns.push(1374696769537);
// 6936
o2 = {};
// 6937
f508011038_0.returns.push(o2);
// 6938
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6939
f508011038_537.returns.push(1374696769537);
// 6940
o2 = {};
// 6941
f508011038_0.returns.push(o2);
// 6942
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6943
f508011038_537.returns.push(1374696769539);
// 6944
o2 = {};
// 6945
f508011038_0.returns.push(o2);
// 6946
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6947
f508011038_537.returns.push(1374696769539);
// 6948
o2 = {};
// 6949
f508011038_0.returns.push(o2);
// 6950
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6951
f508011038_537.returns.push(1374696769539);
// 6952
o2 = {};
// 6953
f508011038_0.returns.push(o2);
// 6954
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6955
f508011038_537.returns.push(1374696769539);
// 6956
o2 = {};
// 6957
f508011038_0.returns.push(o2);
// 6958
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6959
f508011038_537.returns.push(1374696769539);
// 6960
o2 = {};
// 6961
f508011038_0.returns.push(o2);
// 6962
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6963
f508011038_537.returns.push(1374696769539);
// 6964
o2 = {};
// 6965
f508011038_0.returns.push(o2);
// 6966
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6967
f508011038_537.returns.push(1374696769539);
// 6968
o2 = {};
// 6969
f508011038_0.returns.push(o2);
// 6970
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6971
f508011038_537.returns.push(1374696769541);
// 6972
o2 = {};
// 6973
f508011038_0.returns.push(o2);
// 6974
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6975
f508011038_537.returns.push(1374696769541);
// 6976
o2 = {};
// 6977
f508011038_0.returns.push(o2);
// 6978
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6979
f508011038_537.returns.push(1374696769541);
// 6980
o2 = {};
// 6981
f508011038_0.returns.push(o2);
// 6982
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6983
f508011038_537.returns.push(1374696769541);
// 6984
o2 = {};
// 6985
f508011038_0.returns.push(o2);
// 6986
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6987
f508011038_537.returns.push(1374696769541);
// 6988
o2 = {};
// 6989
f508011038_0.returns.push(o2);
// 6990
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6991
f508011038_537.returns.push(1374696769542);
// 6992
o2 = {};
// 6993
f508011038_0.returns.push(o2);
// 6994
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6995
f508011038_537.returns.push(1374696769542);
// 6996
o2 = {};
// 6997
f508011038_0.returns.push(o2);
// 6998
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 6999
f508011038_537.returns.push(1374696769542);
// 7000
o2 = {};
// 7001
f508011038_0.returns.push(o2);
// 7002
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7003
f508011038_537.returns.push(1374696769542);
// 7004
o2 = {};
// 7005
f508011038_0.returns.push(o2);
// 7006
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7007
f508011038_537.returns.push(1374696769542);
// 7008
o2 = {};
// 7009
f508011038_0.returns.push(o2);
// 7010
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7011
f508011038_537.returns.push(1374696769542);
// 7012
o2 = {};
// 7013
f508011038_0.returns.push(o2);
// 7014
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7015
f508011038_537.returns.push(1374696769542);
// 7016
o2 = {};
// 7017
f508011038_0.returns.push(o2);
// 7018
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7019
f508011038_537.returns.push(1374696769543);
// 7020
o2 = {};
// 7021
f508011038_0.returns.push(o2);
// 7022
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7023
f508011038_537.returns.push(1374696769543);
// 7024
o2 = {};
// 7025
f508011038_0.returns.push(o2);
// 7026
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7027
f508011038_537.returns.push(1374696769543);
// 7028
o2 = {};
// 7029
f508011038_0.returns.push(o2);
// 7030
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7031
f508011038_537.returns.push(1374696769544);
// 7032
o2 = {};
// 7033
f508011038_0.returns.push(o2);
// 7034
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7035
f508011038_537.returns.push(1374696769544);
// 7036
o2 = {};
// 7037
f508011038_0.returns.push(o2);
// 7038
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7039
f508011038_537.returns.push(1374696769544);
// 7040
o2 = {};
// 7041
f508011038_0.returns.push(o2);
// 7042
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7043
f508011038_537.returns.push(1374696769544);
// 7044
o2 = {};
// 7045
f508011038_0.returns.push(o2);
// 7046
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7047
f508011038_537.returns.push(1374696769544);
// 7048
o2 = {};
// 7049
f508011038_0.returns.push(o2);
// 7050
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7051
f508011038_537.returns.push(1374696769548);
// 7052
o2 = {};
// 7053
f508011038_0.returns.push(o2);
// 7054
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7055
f508011038_537.returns.push(1374696769548);
// 7056
o2 = {};
// 7057
f508011038_0.returns.push(o2);
// 7058
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7059
f508011038_537.returns.push(1374696769548);
// 7060
o2 = {};
// 7061
f508011038_0.returns.push(o2);
// 7062
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7063
f508011038_537.returns.push(1374696769548);
// 7064
o2 = {};
// 7065
f508011038_0.returns.push(o2);
// 7066
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7067
f508011038_537.returns.push(1374696769548);
// 7068
o2 = {};
// 7069
f508011038_0.returns.push(o2);
// 7070
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7071
f508011038_537.returns.push(1374696769549);
// 7072
o2 = {};
// 7073
f508011038_0.returns.push(o2);
// 7074
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7075
f508011038_537.returns.push(1374696769549);
// 7076
o2 = {};
// 7077
f508011038_0.returns.push(o2);
// 7078
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7079
f508011038_537.returns.push(1374696769549);
// 7080
o2 = {};
// 7081
f508011038_0.returns.push(o2);
// 7082
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7083
f508011038_537.returns.push(1374696769549);
// 7084
o2 = {};
// 7085
f508011038_0.returns.push(o2);
// 7086
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7087
f508011038_537.returns.push(1374696769549);
// 7088
o2 = {};
// 7089
f508011038_0.returns.push(o2);
// 7090
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7091
f508011038_537.returns.push(1374696769549);
// 7092
o2 = {};
// 7093
f508011038_0.returns.push(o2);
// 7094
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7095
f508011038_537.returns.push(1374696769549);
// 7096
o2 = {};
// 7097
f508011038_0.returns.push(o2);
// 7098
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7099
f508011038_537.returns.push(1374696769549);
// 7100
o2 = {};
// 7101
f508011038_0.returns.push(o2);
// 7102
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7103
f508011038_537.returns.push(1374696769549);
// 7104
o2 = {};
// 7105
f508011038_0.returns.push(o2);
// 7106
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7107
f508011038_537.returns.push(1374696769550);
// 7108
o2 = {};
// 7109
f508011038_0.returns.push(o2);
// 7110
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7111
f508011038_537.returns.push(1374696769550);
// 7112
o2 = {};
// 7113
f508011038_0.returns.push(o2);
// 7114
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7115
f508011038_537.returns.push(1374696769550);
// 7116
o2 = {};
// 7117
f508011038_0.returns.push(o2);
// 7118
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7119
f508011038_537.returns.push(1374696769550);
// 7120
o2 = {};
// 7121
f508011038_0.returns.push(o2);
// 7122
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7123
f508011038_537.returns.push(1374696769550);
// 7124
o2 = {};
// 7125
f508011038_0.returns.push(o2);
// 7126
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7127
f508011038_537.returns.push(1374696769550);
// 7128
o2 = {};
// 7129
f508011038_0.returns.push(o2);
// 7130
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7131
f508011038_537.returns.push(1374696769550);
// 7132
o2 = {};
// 7133
f508011038_0.returns.push(o2);
// 7134
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7135
f508011038_537.returns.push(1374696769550);
// 7136
o2 = {};
// 7137
f508011038_0.returns.push(o2);
// 7138
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7139
f508011038_537.returns.push(1374696769550);
// 7140
o2 = {};
// 7141
f508011038_0.returns.push(o2);
// 7142
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7143
f508011038_537.returns.push(1374696769550);
// 7144
o2 = {};
// 7145
f508011038_0.returns.push(o2);
// 7146
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7147
f508011038_537.returns.push(1374696769551);
// 7148
o2 = {};
// 7149
f508011038_0.returns.push(o2);
// 7150
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7151
f508011038_537.returns.push(1374696769551);
// 7152
o2 = {};
// 7153
f508011038_0.returns.push(o2);
// 7154
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7155
f508011038_537.returns.push(1374696769553);
// 7156
o2 = {};
// 7157
f508011038_0.returns.push(o2);
// 7158
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7159
f508011038_537.returns.push(1374696769554);
// 7160
o2 = {};
// 7161
f508011038_0.returns.push(o2);
// 7162
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7163
f508011038_537.returns.push(1374696769554);
// 7164
o2 = {};
// 7165
f508011038_0.returns.push(o2);
// 7166
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7167
f508011038_537.returns.push(1374696769554);
// 7168
o2 = {};
// 7169
f508011038_0.returns.push(o2);
// 7170
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7171
f508011038_537.returns.push(1374696769554);
// 7172
o2 = {};
// 7173
f508011038_0.returns.push(o2);
// 7174
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7175
f508011038_537.returns.push(1374696769557);
// 7176
o2 = {};
// 7177
f508011038_0.returns.push(o2);
// 7178
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7179
f508011038_537.returns.push(1374696769557);
// 7180
o2 = {};
// 7181
f508011038_0.returns.push(o2);
// 7182
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7183
f508011038_537.returns.push(1374696769563);
// 7184
o2 = {};
// 7185
f508011038_0.returns.push(o2);
// 7186
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7187
f508011038_537.returns.push(1374696769563);
// 7188
o2 = {};
// 7189
f508011038_0.returns.push(o2);
// 7190
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7191
f508011038_537.returns.push(1374696769563);
// 7192
o2 = {};
// 7193
f508011038_0.returns.push(o2);
// 7194
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7195
f508011038_537.returns.push(1374696769563);
// 7196
o2 = {};
// 7197
f508011038_0.returns.push(o2);
// 7198
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7199
f508011038_537.returns.push(1374696769563);
// 7201
f508011038_518.returns.push(null);
// 7202
o2 = {};
// 7203
f508011038_0.returns.push(o2);
// 7204
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7205
f508011038_537.returns.push(1374696769564);
// 7206
o2 = {};
// 7207
f508011038_0.returns.push(o2);
// 7208
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7209
f508011038_537.returns.push(1374696769564);
// 7210
o2 = {};
// 7211
f508011038_0.returns.push(o2);
// 7212
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7213
f508011038_537.returns.push(1374696769564);
// 7214
o2 = {};
// 7215
f508011038_0.returns.push(o2);
// 7216
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7217
f508011038_537.returns.push(1374696769564);
// 7218
o2 = {};
// 7219
f508011038_0.returns.push(o2);
// 7220
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7221
f508011038_537.returns.push(1374696769564);
// 7222
o2 = {};
// 7223
f508011038_0.returns.push(o2);
// 7224
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7225
f508011038_537.returns.push(1374696769564);
// 7226
o2 = {};
// 7227
f508011038_0.returns.push(o2);
// 7228
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7229
f508011038_537.returns.push(1374696769564);
// 7230
o2 = {};
// 7231
f508011038_0.returns.push(o2);
// 7232
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7233
f508011038_537.returns.push(1374696769564);
// 7234
o2 = {};
// 7235
f508011038_0.returns.push(o2);
// 7236
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7237
f508011038_537.returns.push(1374696769565);
// 7238
o2 = {};
// 7239
f508011038_0.returns.push(o2);
// 7240
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7241
f508011038_537.returns.push(1374696769565);
// 7242
o2 = {};
// 7243
f508011038_0.returns.push(o2);
// 7244
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7245
f508011038_537.returns.push(1374696769566);
// 7246
o2 = {};
// 7247
f508011038_0.returns.push(o2);
// 7248
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7249
f508011038_537.returns.push(1374696769566);
// 7250
o2 = {};
// 7251
f508011038_0.returns.push(o2);
// 7252
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7253
f508011038_537.returns.push(1374696769566);
// 7254
o2 = {};
// 7255
f508011038_0.returns.push(o2);
// 7256
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7257
f508011038_537.returns.push(1374696769566);
// 7258
o2 = {};
// 7259
f508011038_0.returns.push(o2);
// 7260
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7261
f508011038_537.returns.push(1374696769569);
// 7262
o2 = {};
// 7263
f508011038_0.returns.push(o2);
// 7264
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7265
f508011038_537.returns.push(1374696769570);
// 7266
o2 = {};
// 7267
f508011038_0.returns.push(o2);
// 7268
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7269
f508011038_537.returns.push(1374696769570);
// 7270
o2 = {};
// 7271
f508011038_0.returns.push(o2);
// 7272
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7273
f508011038_537.returns.push(1374696769570);
// 7274
o2 = {};
// 7275
f508011038_0.returns.push(o2);
// 7276
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7277
f508011038_537.returns.push(1374696769570);
// 7278
o2 = {};
// 7279
f508011038_0.returns.push(o2);
// 7280
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7281
f508011038_537.returns.push(1374696769571);
// 7282
o2 = {};
// 7283
f508011038_0.returns.push(o2);
// 7284
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7285
f508011038_537.returns.push(1374696769571);
// 7286
o2 = {};
// 7287
f508011038_0.returns.push(o2);
// 7288
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7289
f508011038_537.returns.push(1374696769571);
// 7290
o2 = {};
// 7291
f508011038_0.returns.push(o2);
// 7292
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7293
f508011038_537.returns.push(1374696769571);
// 7294
o2 = {};
// 7295
f508011038_0.returns.push(o2);
// 7296
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7297
f508011038_537.returns.push(1374696769571);
// 7298
o2 = {};
// 7299
f508011038_0.returns.push(o2);
// 7300
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7301
f508011038_537.returns.push(1374696769571);
// 7302
o2 = {};
// 7303
f508011038_0.returns.push(o2);
// 7304
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7305
f508011038_537.returns.push(1374696769572);
// 7306
o2 = {};
// 7307
f508011038_0.returns.push(o2);
// 7308
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7309
f508011038_537.returns.push(1374696769572);
// 7310
o2 = {};
// 7311
f508011038_0.returns.push(o2);
// 7312
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7313
f508011038_537.returns.push(1374696769572);
// 7314
o2 = {};
// 7315
f508011038_0.returns.push(o2);
// 7316
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7317
f508011038_537.returns.push(1374696769572);
// 7318
o2 = {};
// 7319
f508011038_0.returns.push(o2);
// 7320
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7321
f508011038_537.returns.push(1374696769572);
// 7322
o2 = {};
// 7323
f508011038_0.returns.push(o2);
// 7324
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7325
f508011038_537.returns.push(1374696769572);
// 7326
o2 = {};
// 7327
f508011038_0.returns.push(o2);
// 7328
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7329
f508011038_537.returns.push(1374696769572);
// 7330
o2 = {};
// 7331
f508011038_0.returns.push(o2);
// 7332
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7333
f508011038_537.returns.push(1374696769572);
// 7334
o2 = {};
// 7335
f508011038_0.returns.push(o2);
// 7336
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7337
f508011038_537.returns.push(1374696769572);
// 7338
o2 = {};
// 7339
f508011038_0.returns.push(o2);
// 7340
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7341
f508011038_537.returns.push(1374696769572);
// 7342
o2 = {};
// 7343
f508011038_0.returns.push(o2);
// 7344
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7345
f508011038_537.returns.push(1374696769573);
// 7346
o2 = {};
// 7347
f508011038_0.returns.push(o2);
// 7348
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7349
f508011038_537.returns.push(1374696769573);
// 7350
o2 = {};
// 7351
f508011038_0.returns.push(o2);
// 7352
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7353
f508011038_537.returns.push(1374696769573);
// 7354
o2 = {};
// 7355
f508011038_0.returns.push(o2);
// 7356
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7357
f508011038_537.returns.push(1374696769573);
// 7358
o2 = {};
// 7359
f508011038_0.returns.push(o2);
// 7360
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7361
f508011038_537.returns.push(1374696769573);
// 7362
o2 = {};
// 7363
f508011038_0.returns.push(o2);
// 7364
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7365
f508011038_537.returns.push(1374696769573);
// 7366
o2 = {};
// 7367
f508011038_0.returns.push(o2);
// 7368
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7369
f508011038_537.returns.push(1374696769576);
// 7370
o2 = {};
// 7371
f508011038_0.returns.push(o2);
// 7372
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7373
f508011038_537.returns.push(1374696769576);
// 7374
o2 = {};
// 7375
f508011038_0.returns.push(o2);
// 7376
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7377
f508011038_537.returns.push(1374696769576);
// 7378
o2 = {};
// 7379
f508011038_0.returns.push(o2);
// 7380
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7381
f508011038_537.returns.push(1374696769577);
// 7382
o2 = {};
// 7383
f508011038_0.returns.push(o2);
// 7384
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7385
f508011038_537.returns.push(1374696769577);
// 7386
o2 = {};
// 7387
f508011038_0.returns.push(o2);
// 7388
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7389
f508011038_537.returns.push(1374696769577);
// 7390
o2 = {};
// 7391
f508011038_0.returns.push(o2);
// 7392
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7393
f508011038_537.returns.push(1374696769577);
// 7394
o2 = {};
// 7395
f508011038_0.returns.push(o2);
// 7396
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7397
f508011038_537.returns.push(1374696769577);
// 7398
o2 = {};
// 7399
f508011038_0.returns.push(o2);
// 7400
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7401
f508011038_537.returns.push(1374696769577);
// 7402
o2 = {};
// 7403
f508011038_0.returns.push(o2);
// 7404
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7405
f508011038_537.returns.push(1374696769577);
// 7406
o2 = {};
// 7407
f508011038_0.returns.push(o2);
// 7408
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7409
f508011038_537.returns.push(1374696769577);
// 7410
o2 = {};
// 7411
f508011038_0.returns.push(o2);
// 7412
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7413
f508011038_537.returns.push(1374696769581);
// 7414
o2 = {};
// 7415
f508011038_0.returns.push(o2);
// 7416
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7417
f508011038_537.returns.push(1374696769581);
// 7418
o2 = {};
// 7419
f508011038_0.returns.push(o2);
// 7420
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7421
f508011038_537.returns.push(1374696769582);
// 7422
o2 = {};
// 7423
f508011038_0.returns.push(o2);
// 7424
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7425
f508011038_537.returns.push(1374696769582);
// 7426
o2 = {};
// 7427
f508011038_0.returns.push(o2);
// 7428
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7429
f508011038_537.returns.push(1374696769583);
// 7430
o2 = {};
// 7431
f508011038_0.returns.push(o2);
// 7432
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7433
f508011038_537.returns.push(1374696769583);
// 7434
o2 = {};
// 7435
f508011038_0.returns.push(o2);
// 7436
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7437
f508011038_537.returns.push(1374696769583);
// 7438
o2 = {};
// 7439
f508011038_0.returns.push(o2);
// 7440
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7441
f508011038_537.returns.push(1374696769583);
// 7442
o2 = {};
// 7443
f508011038_0.returns.push(o2);
// 7444
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7445
f508011038_537.returns.push(1374696769583);
// 7446
o2 = {};
// 7447
f508011038_0.returns.push(o2);
// 7448
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7449
f508011038_537.returns.push(1374696769583);
// 7450
o2 = {};
// 7451
f508011038_0.returns.push(o2);
// 7452
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7453
f508011038_537.returns.push(1374696769584);
// 7454
o2 = {};
// 7455
f508011038_0.returns.push(o2);
// 7456
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7457
f508011038_537.returns.push(1374696769584);
// 7458
o2 = {};
// 7459
f508011038_0.returns.push(o2);
// 7460
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7461
f508011038_537.returns.push(1374696769584);
// 7462
o2 = {};
// 7463
f508011038_0.returns.push(o2);
// 7464
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7465
f508011038_537.returns.push(1374696769584);
// 7466
o2 = {};
// 7467
f508011038_0.returns.push(o2);
// 7468
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7469
f508011038_537.returns.push(1374696769584);
// 7470
o2 = {};
// 7471
f508011038_0.returns.push(o2);
// 7472
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7473
f508011038_537.returns.push(1374696769588);
// 7474
o2 = {};
// 7475
f508011038_0.returns.push(o2);
// 7476
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7477
f508011038_537.returns.push(1374696769590);
// 7478
o2 = {};
// 7479
f508011038_0.returns.push(o2);
// 7480
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7481
f508011038_537.returns.push(1374696769590);
// 7482
o2 = {};
// 7483
f508011038_0.returns.push(o2);
// 7484
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7485
f508011038_537.returns.push(1374696769590);
// 7486
o2 = {};
// 7487
f508011038_0.returns.push(o2);
// 7488
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7489
f508011038_537.returns.push(1374696769590);
// 7490
o2 = {};
// 7491
f508011038_0.returns.push(o2);
// 7492
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7493
f508011038_537.returns.push(1374696769590);
// 7494
o2 = {};
// 7495
f508011038_0.returns.push(o2);
// 7496
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7497
f508011038_537.returns.push(1374696769590);
// 7498
o2 = {};
// 7499
f508011038_0.returns.push(o2);
// 7500
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7501
f508011038_537.returns.push(1374696769590);
// 7502
o2 = {};
// 7503
f508011038_0.returns.push(o2);
// 7504
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7505
f508011038_537.returns.push(1374696769591);
// 7506
o2 = {};
// 7507
f508011038_0.returns.push(o2);
// 7508
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7509
f508011038_537.returns.push(1374696769591);
// 7510
o2 = {};
// 7511
f508011038_0.returns.push(o2);
// 7512
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7513
f508011038_537.returns.push(1374696769591);
// 7515
o2 = {};
// 7516
f508011038_518.returns.push(o2);
// 7517
o2.parentNode = o10;
// 7518
o2.id = "profile_popup";
// undefined
o2 = null;
// 7519
o2 = {};
// 7520
f508011038_0.returns.push(o2);
// 7521
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7522
f508011038_537.returns.push(1374696769592);
// 7523
o2 = {};
// 7524
f508011038_0.returns.push(o2);
// 7525
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7526
f508011038_537.returns.push(1374696769592);
// 7527
o2 = {};
// 7528
f508011038_0.returns.push(o2);
// 7529
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7530
f508011038_537.returns.push(1374696769592);
// 7531
o2 = {};
// 7532
f508011038_0.returns.push(o2);
// 7533
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7534
f508011038_537.returns.push(1374696769593);
// 7535
o2 = {};
// 7536
f508011038_0.returns.push(o2);
// 7537
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7538
f508011038_537.returns.push(1374696769593);
// 7539
o2 = {};
// 7540
f508011038_0.returns.push(o2);
// 7541
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7542
f508011038_537.returns.push(1374696769593);
// 7543
o2 = {};
// 7544
f508011038_0.returns.push(o2);
// 7545
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7546
f508011038_537.returns.push(1374696769593);
// 7547
o2 = {};
// 7548
f508011038_0.returns.push(o2);
// 7549
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7550
f508011038_537.returns.push(1374696769593);
// 7551
o2 = {};
// 7552
f508011038_0.returns.push(o2);
// 7553
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7554
f508011038_537.returns.push(1374696769593);
// 7555
o2 = {};
// 7556
f508011038_0.returns.push(o2);
// 7557
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7558
f508011038_537.returns.push(1374696769593);
// 7559
o2 = {};
// 7560
f508011038_0.returns.push(o2);
// 7561
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7562
f508011038_537.returns.push(1374696769593);
// 7563
o2 = {};
// 7564
f508011038_0.returns.push(o2);
// 7565
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7566
f508011038_537.returns.push(1374696769594);
// 7567
o2 = {};
// 7568
f508011038_0.returns.push(o2);
// 7569
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7570
f508011038_537.returns.push(1374696769594);
// 7571
o2 = {};
// 7572
f508011038_0.returns.push(o2);
// 7573
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7574
f508011038_537.returns.push(1374696769594);
// 7575
o2 = {};
// 7576
f508011038_0.returns.push(o2);
// 7577
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7578
f508011038_537.returns.push(1374696769594);
// 7579
o2 = {};
// 7580
f508011038_0.returns.push(o2);
// 7581
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7582
f508011038_537.returns.push(1374696769597);
// 7583
o2 = {};
// 7584
f508011038_0.returns.push(o2);
// 7585
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7586
f508011038_537.returns.push(1374696769597);
// 7587
o2 = {};
// 7588
f508011038_0.returns.push(o2);
// 7589
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7590
f508011038_537.returns.push(1374696769597);
// 7591
o2 = {};
// 7592
f508011038_0.returns.push(o2);
// 7593
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7594
f508011038_537.returns.push(1374696769597);
// 7595
o2 = {};
// 7596
f508011038_0.returns.push(o2);
// 7597
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7598
f508011038_537.returns.push(1374696769597);
// 7599
o2 = {};
// 7600
f508011038_0.returns.push(o2);
// 7601
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7602
f508011038_537.returns.push(1374696769597);
// 7603
o2 = {};
// 7604
f508011038_0.returns.push(o2);
// 7605
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7606
f508011038_537.returns.push(1374696769597);
// 7607
o2 = {};
// 7608
f508011038_0.returns.push(o2);
// 7609
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7610
f508011038_537.returns.push(1374696769597);
// 7611
o2 = {};
// 7612
f508011038_0.returns.push(o2);
// 7613
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7614
f508011038_537.returns.push(1374696769597);
// 7615
o2 = {};
// 7616
f508011038_0.returns.push(o2);
// 7617
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7618
f508011038_537.returns.push(1374696769597);
// 7619
o2 = {};
// 7620
f508011038_0.returns.push(o2);
// 7621
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7622
f508011038_537.returns.push(1374696769598);
// 7623
o2 = {};
// 7624
f508011038_0.returns.push(o2);
// 7625
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7626
f508011038_537.returns.push(1374696769598);
// 7627
o2 = {};
// 7628
f508011038_0.returns.push(o2);
// 7629
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7630
f508011038_537.returns.push(1374696769598);
// 7631
o2 = {};
// 7632
f508011038_0.returns.push(o2);
// 7633
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7634
f508011038_537.returns.push(1374696769598);
// 7635
o2 = {};
// 7636
f508011038_0.returns.push(o2);
// 7637
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7638
f508011038_537.returns.push(1374696769598);
// 7639
o2 = {};
// 7640
f508011038_0.returns.push(o2);
// 7641
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7642
f508011038_537.returns.push(1374696769598);
// 7643
o2 = {};
// 7644
f508011038_0.returns.push(o2);
// 7645
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7646
f508011038_537.returns.push(1374696769598);
// 7647
o2 = {};
// 7648
f508011038_0.returns.push(o2);
// 7649
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7650
f508011038_537.returns.push(1374696769598);
// 7651
o2 = {};
// 7652
f508011038_0.returns.push(o2);
// 7653
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7654
f508011038_537.returns.push(1374696769598);
// 7655
o2 = {};
// 7656
f508011038_0.returns.push(o2);
// 7657
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7658
f508011038_537.returns.push(1374696769598);
// 7659
o2 = {};
// 7660
f508011038_0.returns.push(o2);
// 7661
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7662
f508011038_537.returns.push(1374696769598);
// 7663
o2 = {};
// 7664
f508011038_0.returns.push(o2);
// 7665
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7666
f508011038_537.returns.push(1374696769599);
// 7667
o2 = {};
// 7668
f508011038_0.returns.push(o2);
// 7669
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7670
f508011038_537.returns.push(1374696769599);
// 7671
o2 = {};
// 7672
f508011038_0.returns.push(o2);
// 7673
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7674
f508011038_537.returns.push(1374696769599);
// 7675
o2 = {};
// 7676
f508011038_0.returns.push(o2);
// 7677
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7678
f508011038_537.returns.push(1374696769599);
// 7679
o2 = {};
// 7680
f508011038_0.returns.push(o2);
// 7681
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7682
f508011038_537.returns.push(1374696769599);
// 7683
o2 = {};
// 7684
f508011038_0.returns.push(o2);
// 7685
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7686
f508011038_537.returns.push(1374696769602);
// 7687
o2 = {};
// 7688
f508011038_0.returns.push(o2);
// 7689
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7690
f508011038_537.returns.push(1374696769602);
// 7691
o2 = {};
// 7692
f508011038_0.returns.push(o2);
// 7693
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7694
f508011038_537.returns.push(1374696769602);
// 7695
o2 = {};
// 7696
f508011038_0.returns.push(o2);
// 7697
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7698
f508011038_537.returns.push(1374696769602);
// 7699
o2 = {};
// 7700
f508011038_0.returns.push(o2);
// 7701
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7702
f508011038_537.returns.push(1374696769602);
// 7703
o2 = {};
// 7704
f508011038_0.returns.push(o2);
// 7705
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7706
f508011038_537.returns.push(1374696769602);
// 7707
o2 = {};
// 7708
f508011038_0.returns.push(o2);
// 7709
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7710
f508011038_537.returns.push(1374696769602);
// 7711
o2 = {};
// 7712
f508011038_0.returns.push(o2);
// 7713
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7714
f508011038_537.returns.push(1374696769602);
// 7715
o2 = {};
// 7716
f508011038_0.returns.push(o2);
// 7717
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7718
f508011038_537.returns.push(1374696769602);
// 7719
o2 = {};
// 7720
f508011038_0.returns.push(o2);
// 7721
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7722
f508011038_537.returns.push(1374696769603);
// 7723
o2 = {};
// 7724
f508011038_0.returns.push(o2);
// 7725
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7726
f508011038_537.returns.push(1374696769603);
// 7727
o2 = {};
// 7728
f508011038_0.returns.push(o2);
// 7729
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7730
f508011038_537.returns.push(1374696769603);
// 7731
o2 = {};
// 7732
f508011038_0.returns.push(o2);
// 7733
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7734
f508011038_537.returns.push(1374696769603);
// 7735
o2 = {};
// 7736
f508011038_0.returns.push(o2);
// 7737
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7738
f508011038_537.returns.push(1374696769603);
// 7739
o2 = {};
// 7740
f508011038_0.returns.push(o2);
// 7741
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7742
f508011038_537.returns.push(1374696769603);
// 7743
o2 = {};
// 7744
f508011038_0.returns.push(o2);
// 7745
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7746
f508011038_537.returns.push(1374696769603);
// 7747
o2 = {};
// 7748
f508011038_0.returns.push(o2);
// 7749
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7750
f508011038_537.returns.push(1374696769603);
// 7751
o2 = {};
// 7752
f508011038_0.returns.push(o2);
// 7753
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7754
f508011038_537.returns.push(1374696769603);
// 7755
o2 = {};
// 7756
f508011038_0.returns.push(o2);
// 7757
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7758
f508011038_537.returns.push(1374696769604);
// 7759
o2 = {};
// 7760
f508011038_0.returns.push(o2);
// 7761
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7762
f508011038_537.returns.push(1374696769604);
// 7763
o2 = {};
// 7764
f508011038_0.returns.push(o2);
// 7765
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7766
f508011038_537.returns.push(1374696769604);
// 7767
o2 = {};
// 7768
f508011038_0.returns.push(o2);
// 7769
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7770
f508011038_537.returns.push(1374696769604);
// 7771
o2 = {};
// 7772
f508011038_0.returns.push(o2);
// 7773
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7774
f508011038_537.returns.push(1374696769604);
// 7775
o2 = {};
// 7776
f508011038_0.returns.push(o2);
// 7777
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7778
f508011038_537.returns.push(1374696769604);
// 7779
o2 = {};
// 7780
f508011038_0.returns.push(o2);
// 7781
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7782
f508011038_537.returns.push(1374696769604);
// 7783
o2 = {};
// 7784
f508011038_0.returns.push(o2);
// 7785
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7786
f508011038_537.returns.push(1374696769604);
// 7787
o2 = {};
// 7788
f508011038_0.returns.push(o2);
// 7789
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7790
f508011038_537.returns.push(1374696769604);
// 7791
o2 = {};
// 7792
f508011038_0.returns.push(o2);
// 7793
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7794
f508011038_537.returns.push(1374696769607);
// 7795
o2 = {};
// 7796
f508011038_0.returns.push(o2);
// 7797
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7798
f508011038_537.returns.push(1374696769607);
// 7799
o2 = {};
// 7800
f508011038_0.returns.push(o2);
// 7801
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7802
f508011038_537.returns.push(1374696769607);
// 7803
o2 = {};
// 7804
f508011038_0.returns.push(o2);
// 7805
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7806
f508011038_537.returns.push(1374696769607);
// 7807
o2 = {};
// 7808
f508011038_0.returns.push(o2);
// 7809
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7810
f508011038_537.returns.push(1374696769612);
// 7811
o2 = {};
// 7812
f508011038_0.returns.push(o2);
// 7813
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7814
f508011038_537.returns.push(1374696769612);
// 7815
o2 = {};
// 7816
f508011038_0.returns.push(o2);
// 7817
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7818
f508011038_537.returns.push(1374696769613);
// 7819
o2 = {};
// 7820
f508011038_0.returns.push(o2);
// 7821
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7822
f508011038_537.returns.push(1374696769613);
// 7823
o2 = {};
// 7824
f508011038_0.returns.push(o2);
// 7825
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7826
f508011038_537.returns.push(1374696769613);
// 7827
o2 = {};
// 7828
f508011038_0.returns.push(o2);
// 7829
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7830
f508011038_537.returns.push(1374696769613);
// 7831
o2 = {};
// 7832
f508011038_0.returns.push(o2);
// 7833
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7834
f508011038_537.returns.push(1374696769613);
// 7835
o2 = {};
// 7836
f508011038_0.returns.push(o2);
// 7837
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7838
f508011038_537.returns.push(1374696769613);
// 7839
o2 = {};
// 7840
f508011038_0.returns.push(o2);
// 7841
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7842
f508011038_537.returns.push(1374696769613);
// 7843
o2 = {};
// 7844
f508011038_0.returns.push(o2);
// 7845
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7846
f508011038_537.returns.push(1374696769614);
// 7847
o2 = {};
// 7848
f508011038_0.returns.push(o2);
// 7849
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7850
f508011038_537.returns.push(1374696769614);
// 7851
o2 = {};
// 7852
f508011038_0.returns.push(o2);
// 7853
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7854
f508011038_537.returns.push(1374696769614);
// 7855
o2 = {};
// 7856
f508011038_0.returns.push(o2);
// 7857
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7858
f508011038_537.returns.push(1374696769615);
// 7859
o2 = {};
// 7860
f508011038_0.returns.push(o2);
// 7861
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7862
f508011038_537.returns.push(1374696769615);
// 7863
o2 = {};
// 7864
f508011038_0.returns.push(o2);
// 7865
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7866
f508011038_537.returns.push(1374696769615);
// 7867
o2 = {};
// 7868
f508011038_0.returns.push(o2);
// 7869
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7870
f508011038_537.returns.push(1374696769615);
// 7871
o2 = {};
// 7872
f508011038_0.returns.push(o2);
// 7873
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7874
f508011038_537.returns.push(1374696769615);
// 7875
o2 = {};
// 7876
f508011038_0.returns.push(o2);
// 7877
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7878
f508011038_537.returns.push(1374696769615);
// 7879
o2 = {};
// 7880
f508011038_0.returns.push(o2);
// 7881
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7882
f508011038_537.returns.push(1374696769615);
// 7883
o2 = {};
// 7884
f508011038_0.returns.push(o2);
// 7885
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7886
f508011038_537.returns.push(1374696769616);
// 7887
o2 = {};
// 7888
f508011038_0.returns.push(o2);
// 7889
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7890
f508011038_537.returns.push(1374696769616);
// 7891
o2 = {};
// 7892
f508011038_0.returns.push(o2);
// 7893
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7894
f508011038_537.returns.push(1374696769616);
// 7895
o2 = {};
// 7896
f508011038_0.returns.push(o2);
// 7897
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7898
f508011038_537.returns.push(1374696769621);
// 7899
o2 = {};
// 7900
f508011038_0.returns.push(o2);
// 7901
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7902
f508011038_537.returns.push(1374696769621);
// 7903
o2 = {};
// 7904
f508011038_0.returns.push(o2);
// 7905
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7906
f508011038_537.returns.push(1374696769621);
// 7907
o2 = {};
// 7908
f508011038_0.returns.push(o2);
// 7909
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7910
f508011038_537.returns.push(1374696769621);
// 7911
o2 = {};
// 7912
f508011038_0.returns.push(o2);
// 7913
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7914
f508011038_537.returns.push(1374696769622);
// 7915
o2 = {};
// 7916
f508011038_0.returns.push(o2);
// 7917
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7918
f508011038_537.returns.push(1374696769622);
// 7919
o2 = {};
// 7920
f508011038_0.returns.push(o2);
// 7921
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7922
f508011038_537.returns.push(1374696769622);
// 7923
o2 = {};
// 7924
f508011038_0.returns.push(o2);
// 7925
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7926
f508011038_537.returns.push(1374696769622);
// 7927
o2 = {};
// 7928
f508011038_0.returns.push(o2);
// 7929
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7930
f508011038_537.returns.push(1374696769622);
// 7931
o2 = {};
// 7932
f508011038_0.returns.push(o2);
// 7933
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7934
f508011038_537.returns.push(1374696769622);
// 7935
o2 = {};
// 7936
f508011038_0.returns.push(o2);
// 7937
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7938
f508011038_537.returns.push(1374696769623);
// 7939
o2 = {};
// 7940
f508011038_0.returns.push(o2);
// 7941
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7942
f508011038_537.returns.push(1374696769623);
// 7943
o2 = {};
// 7944
f508011038_0.returns.push(o2);
// 7945
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7946
f508011038_537.returns.push(1374696769623);
// 7947
o2 = {};
// 7948
f508011038_0.returns.push(o2);
// 7949
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7950
f508011038_537.returns.push(1374696769623);
// 7951
o2 = {};
// 7952
f508011038_0.returns.push(o2);
// 7953
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7954
f508011038_537.returns.push(1374696769623);
// 7955
o2 = {};
// 7956
f508011038_0.returns.push(o2);
// 7957
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7958
f508011038_537.returns.push(1374696769624);
// 7959
o2 = {};
// 7960
f508011038_0.returns.push(o2);
// 7961
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7962
f508011038_537.returns.push(1374696769624);
// 7963
o2 = {};
// 7964
f508011038_0.returns.push(o2);
// 7965
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7966
f508011038_537.returns.push(1374696769624);
// 7967
o2 = {};
// 7968
f508011038_0.returns.push(o2);
// 7969
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7970
f508011038_537.returns.push(1374696769624);
// 7971
o2 = {};
// 7972
f508011038_0.returns.push(o2);
// 7973
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7974
f508011038_537.returns.push(1374696769624);
// 7975
o2 = {};
// 7976
f508011038_0.returns.push(o2);
// 7977
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7978
f508011038_537.returns.push(1374696769624);
// 7979
o2 = {};
// 7980
f508011038_0.returns.push(o2);
// 7981
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7982
f508011038_537.returns.push(1374696769625);
// 7983
o2 = {};
// 7984
f508011038_0.returns.push(o2);
// 7985
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7986
f508011038_537.returns.push(1374696769625);
// 7987
o2 = {};
// 7988
f508011038_0.returns.push(o2);
// 7989
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7990
f508011038_537.returns.push(1374696769625);
// 7991
o2 = {};
// 7992
f508011038_0.returns.push(o2);
// 7993
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7994
f508011038_537.returns.push(1374696769625);
// 7995
o2 = {};
// 7996
f508011038_0.returns.push(o2);
// 7997
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 7998
f508011038_537.returns.push(1374696769625);
// 7999
o2 = {};
// 8000
f508011038_0.returns.push(o2);
// 8001
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8002
f508011038_537.returns.push(1374696769625);
// 8003
o2 = {};
// 8004
f508011038_0.returns.push(o2);
// 8005
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8006
f508011038_537.returns.push(1374696769631);
// 8007
o2 = {};
// 8008
f508011038_0.returns.push(o2);
// 8009
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8010
f508011038_537.returns.push(1374696769631);
// 8011
o2 = {};
// 8012
f508011038_0.returns.push(o2);
// 8013
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8014
f508011038_537.returns.push(1374696769631);
// 8015
o2 = {};
// 8016
f508011038_0.returns.push(o2);
// 8017
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8018
f508011038_537.returns.push(1374696769631);
// 8019
o2 = {};
// 8020
f508011038_0.returns.push(o2);
// 8021
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8022
f508011038_537.returns.push(1374696769631);
// 8023
o2 = {};
// 8024
f508011038_0.returns.push(o2);
// 8025
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8026
f508011038_537.returns.push(1374696769632);
// 8027
o2 = {};
// 8028
f508011038_0.returns.push(o2);
// 8029
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8030
f508011038_537.returns.push(1374696769632);
// 8031
o2 = {};
// 8032
f508011038_0.returns.push(o2);
// 8033
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8034
f508011038_537.returns.push(1374696769632);
// 8035
o2 = {};
// 8036
f508011038_0.returns.push(o2);
// 8037
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8038
f508011038_537.returns.push(1374696769632);
// 8039
o2 = {};
// 8040
f508011038_0.returns.push(o2);
// 8041
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8042
f508011038_537.returns.push(1374696769632);
// 8043
o2 = {};
// 8044
f508011038_0.returns.push(o2);
// 8045
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8046
f508011038_537.returns.push(1374696769632);
// 8047
o2 = {};
// 8048
f508011038_0.returns.push(o2);
// 8049
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8050
f508011038_537.returns.push(1374696769632);
// 8051
o2 = {};
// 8052
f508011038_0.returns.push(o2);
// 8053
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8054
f508011038_537.returns.push(1374696769635);
// 8055
o2 = {};
// 8056
f508011038_0.returns.push(o2);
// 8057
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8058
f508011038_537.returns.push(1374696769635);
// 8059
o2 = {};
// 8060
f508011038_0.returns.push(o2);
// 8061
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8062
f508011038_537.returns.push(1374696769636);
// 8063
o2 = {};
// 8064
f508011038_0.returns.push(o2);
// 8065
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8066
f508011038_537.returns.push(1374696769636);
// 8067
o2 = {};
// 8068
f508011038_0.returns.push(o2);
// 8069
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8070
f508011038_537.returns.push(1374696769636);
// 8071
o2 = {};
// 8072
f508011038_0.returns.push(o2);
// 8073
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8074
f508011038_537.returns.push(1374696769636);
// 8075
o2 = {};
// 8076
f508011038_0.returns.push(o2);
// 8077
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8078
f508011038_537.returns.push(1374696769637);
// 8079
o2 = {};
// 8080
f508011038_0.returns.push(o2);
// 8081
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8082
f508011038_537.returns.push(1374696769637);
// 8083
o2 = {};
// 8084
f508011038_0.returns.push(o2);
// 8085
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8086
f508011038_537.returns.push(1374696769637);
// 8087
o2 = {};
// 8088
f508011038_0.returns.push(o2);
// 8089
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8090
f508011038_537.returns.push(1374696769637);
// 8091
o2 = {};
// 8092
f508011038_0.returns.push(o2);
// 8093
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8094
f508011038_537.returns.push(1374696769637);
// 8095
o2 = {};
// 8096
f508011038_0.returns.push(o2);
// 8097
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8098
f508011038_537.returns.push(1374696769637);
// 8099
o2 = {};
// 8100
f508011038_0.returns.push(o2);
// 8101
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8102
f508011038_537.returns.push(1374696769637);
// 8103
o2 = {};
// 8104
f508011038_0.returns.push(o2);
// 8105
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8106
f508011038_537.returns.push(1374696769637);
// 8107
o2 = {};
// 8108
f508011038_0.returns.push(o2);
// 8109
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8110
f508011038_537.returns.push(1374696769642);
// 8111
o2 = {};
// 8112
f508011038_0.returns.push(o2);
// 8113
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8114
f508011038_537.returns.push(1374696769642);
// 8115
o2 = {};
// 8116
f508011038_0.returns.push(o2);
// 8117
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8118
f508011038_537.returns.push(1374696769642);
// 8119
o2 = {};
// 8120
f508011038_0.returns.push(o2);
// 8121
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8122
f508011038_537.returns.push(1374696769642);
// 8123
o2 = {};
// 8124
f508011038_0.returns.push(o2);
// 8125
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8126
f508011038_537.returns.push(1374696769643);
// 8127
o2 = {};
// 8128
f508011038_0.returns.push(o2);
// 8129
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8130
f508011038_537.returns.push(1374696769643);
// 8131
o2 = {};
// 8132
f508011038_0.returns.push(o2);
// 8133
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8134
f508011038_537.returns.push(1374696769643);
// 8135
o2 = {};
// 8136
f508011038_0.returns.push(o2);
// 8137
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8138
f508011038_537.returns.push(1374696769643);
// 8139
o2 = {};
// 8140
f508011038_0.returns.push(o2);
// 8141
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8142
f508011038_537.returns.push(1374696769643);
// 8143
o2 = {};
// 8144
f508011038_0.returns.push(o2);
// 8145
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8146
f508011038_537.returns.push(1374696769643);
// 8147
o2 = {};
// 8148
f508011038_0.returns.push(o2);
// 8149
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8150
f508011038_537.returns.push(1374696769644);
// 8151
o2 = {};
// 8152
f508011038_0.returns.push(o2);
// 8153
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8154
f508011038_537.returns.push(1374696769644);
// 8155
o2 = {};
// 8156
f508011038_0.returns.push(o2);
// 8157
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8158
f508011038_537.returns.push(1374696769644);
// 8159
o2 = {};
// 8160
f508011038_0.returns.push(o2);
// 8161
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8162
f508011038_537.returns.push(1374696769644);
// 8163
o2 = {};
// 8164
f508011038_0.returns.push(o2);
// 8165
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8166
f508011038_537.returns.push(1374696769644);
// 8167
o2 = {};
// 8168
f508011038_0.returns.push(o2);
// 8169
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8170
f508011038_537.returns.push(1374696769644);
// 8171
o2 = {};
// 8172
f508011038_0.returns.push(o2);
// 8173
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8174
f508011038_537.returns.push(1374696769645);
// 8175
o2 = {};
// 8176
f508011038_0.returns.push(o2);
// 8177
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8178
f508011038_537.returns.push(1374696769645);
// 8179
o2 = {};
// 8180
f508011038_0.returns.push(o2);
// 8181
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8182
f508011038_537.returns.push(1374696769645);
// 8183
o2 = {};
// 8184
f508011038_0.returns.push(o2);
// 8185
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8186
f508011038_537.returns.push(1374696769645);
// 8187
o2 = {};
// 8188
f508011038_0.returns.push(o2);
// 8189
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8190
f508011038_537.returns.push(1374696769645);
// 8191
o2 = {};
// 8192
f508011038_0.returns.push(o2);
// 8193
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8194
f508011038_537.returns.push(1374696769645);
// 8195
o2 = {};
// 8196
f508011038_0.returns.push(o2);
// 8197
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8198
f508011038_537.returns.push(1374696769646);
// 8199
o2 = {};
// 8200
f508011038_0.returns.push(o2);
// 8201
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8202
f508011038_537.returns.push(1374696769646);
// 8203
o2 = {};
// 8204
f508011038_0.returns.push(o2);
// 8205
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8206
f508011038_537.returns.push(1374696769646);
// 8207
o2 = {};
// 8208
f508011038_0.returns.push(o2);
// 8209
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8210
f508011038_537.returns.push(1374696769646);
// 8211
o2 = {};
// 8212
f508011038_0.returns.push(o2);
// 8213
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8214
f508011038_537.returns.push(1374696769646);
// 8215
o2 = {};
// 8216
f508011038_0.returns.push(o2);
// 8217
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8218
f508011038_537.returns.push(1374696769651);
// 8219
o2 = {};
// 8220
f508011038_0.returns.push(o2);
// 8221
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8222
f508011038_537.returns.push(1374696769651);
// 8223
o2 = {};
// 8224
f508011038_0.returns.push(o2);
// 8225
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8226
f508011038_537.returns.push(1374696769651);
// 8227
o2 = {};
// 8228
f508011038_0.returns.push(o2);
// 8229
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8230
f508011038_537.returns.push(1374696769652);
// 8231
o2 = {};
// 8232
f508011038_0.returns.push(o2);
// 8233
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8234
f508011038_537.returns.push(1374696769652);
// 8235
o2 = {};
// 8236
f508011038_0.returns.push(o2);
// 8237
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8238
f508011038_537.returns.push(1374696769652);
// 8239
o2 = {};
// 8240
f508011038_0.returns.push(o2);
// 8241
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8242
f508011038_537.returns.push(1374696769652);
// 8243
o2 = {};
// 8244
f508011038_0.returns.push(o2);
// 8245
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8246
f508011038_537.returns.push(1374696769652);
// 8247
o2 = {};
// 8248
f508011038_0.returns.push(o2);
// 8249
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8250
f508011038_537.returns.push(1374696769652);
// 8251
o2 = {};
// 8252
f508011038_0.returns.push(o2);
// 8253
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8254
f508011038_537.returns.push(1374696769652);
// 8255
o2 = {};
// 8256
f508011038_0.returns.push(o2);
// 8257
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8258
f508011038_537.returns.push(1374696769652);
// 8259
o5.protocol = "https:";
// 8260
o2 = {};
// 8261
f508011038_0.returns.push(o2);
// 8262
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8263
f508011038_537.returns.push(1374696769653);
// 8264
o2 = {};
// 8265
f508011038_0.returns.push(o2);
// 8266
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8267
f508011038_537.returns.push(1374696769653);
// 8268
o2 = {};
// 8269
f508011038_0.returns.push(o2);
// 8270
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8271
f508011038_537.returns.push(1374696769653);
// 8272
o2 = {};
// 8273
f508011038_0.returns.push(o2);
// 8274
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8275
f508011038_537.returns.push(1374696769654);
// 8276
o2 = {};
// 8277
f508011038_0.returns.push(o2);
// 8278
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8279
f508011038_537.returns.push(1374696769654);
// 8280
o2 = {};
// 8281
f508011038_0.returns.push(o2);
// 8282
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8283
f508011038_537.returns.push(1374696769654);
// 8284
o2 = {};
// 8285
f508011038_0.returns.push(o2);
// 8286
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8287
f508011038_537.returns.push(1374696769654);
// 8288
o2 = {};
// 8289
f508011038_0.returns.push(o2);
// 8290
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8291
f508011038_537.returns.push(1374696769654);
// 8292
o2 = {};
// 8293
f508011038_0.returns.push(o2);
// 8294
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8295
f508011038_537.returns.push(1374696769654);
// 8296
o2 = {};
// 8297
f508011038_0.returns.push(o2);
// 8298
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8299
f508011038_537.returns.push(1374696769655);
// 8300
o2 = {};
// 8301
f508011038_0.returns.push(o2);
// 8302
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8303
f508011038_537.returns.push(1374696769655);
// 8304
f508011038_466.returns.push(0.557951265014708);
// 8307
o5.search = "?q=javascript";
// 8308
o5.hash = "";
// undefined
o5 = null;
// 8309
o2 = {};
// 8310
f508011038_0.returns.push(o2);
// 8311
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8312
f508011038_537.returns.push(1374696769656);
// 8313
o2 = {};
// 8314
f508011038_0.returns.push(o2);
// 8315
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8316
f508011038_537.returns.push(1374696769656);
// 8317
o2 = {};
// 8318
f508011038_0.returns.push(o2);
// 8319
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8320
f508011038_537.returns.push(1374696769656);
// 8321
o2 = {};
// 8322
f508011038_0.returns.push(o2);
// 8323
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8324
f508011038_537.returns.push(1374696769659);
// 8325
o2 = {};
// 8326
f508011038_0.returns.push(o2);
// 8327
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8328
f508011038_537.returns.push(1374696769659);
// 8329
o2 = {};
// 8330
f508011038_0.returns.push(o2);
// 8331
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8332
f508011038_537.returns.push(1374696769660);
// 8333
o2 = {};
// 8334
f508011038_0.returns.push(o2);
// 8335
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8336
f508011038_537.returns.push(1374696769660);
// 8337
o2 = {};
// 8338
f508011038_0.returns.push(o2);
// 8339
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8340
f508011038_537.returns.push(1374696769660);
// 8341
o2 = {};
// 8342
f508011038_0.returns.push(o2);
// 8343
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8344
f508011038_537.returns.push(1374696769660);
// 8345
o2 = {};
// 8346
f508011038_0.returns.push(o2);
// 8347
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8348
f508011038_537.returns.push(1374696769660);
// 8349
o2 = {};
// 8350
f508011038_0.returns.push(o2);
// 8351
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8352
f508011038_537.returns.push(1374696769660);
// 8353
o2 = {};
// 8354
f508011038_0.returns.push(o2);
// 8355
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8356
f508011038_537.returns.push(1374696769660);
// 8357
o2 = {};
// 8358
f508011038_0.returns.push(o2);
// 8359
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8360
f508011038_537.returns.push(1374696769660);
// 8361
o2 = {};
// 8362
f508011038_0.returns.push(o2);
// 8363
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8364
f508011038_537.returns.push(1374696769660);
// 8365
o2 = {};
// 8366
f508011038_0.returns.push(o2);
// 8367
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8368
f508011038_537.returns.push(1374696769661);
// 8369
o2 = {};
// 8370
f508011038_0.returns.push(o2);
// 8371
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8372
f508011038_537.returns.push(1374696769661);
// 8373
o2 = {};
// 8374
f508011038_0.returns.push(o2);
// 8375
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8376
f508011038_537.returns.push(1374696769661);
// 8377
o2 = {};
// 8378
f508011038_0.returns.push(o2);
// 8379
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8380
f508011038_537.returns.push(1374696769661);
// 8381
o2 = {};
// 8382
f508011038_0.returns.push(o2);
// 8383
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8384
f508011038_537.returns.push(1374696769661);
// 8385
o2 = {};
// 8386
f508011038_0.returns.push(o2);
// 8387
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8388
f508011038_537.returns.push(1374696769661);
// 8389
o2 = {};
// 8390
f508011038_0.returns.push(o2);
// 8391
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8392
f508011038_537.returns.push(1374696769661);
// 8393
o2 = {};
// 8394
f508011038_0.returns.push(o2);
// 8395
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8396
f508011038_537.returns.push(1374696769661);
// 8397
o2 = {};
// 8398
f508011038_0.returns.push(o2);
// 8399
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8400
f508011038_537.returns.push(1374696769661);
// 8401
o2 = {};
// 8402
f508011038_0.returns.push(o2);
// 8403
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8404
f508011038_537.returns.push(1374696769661);
// 8405
o2 = {};
// 8406
f508011038_0.returns.push(o2);
// 8407
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8408
f508011038_537.returns.push(1374696769661);
// 8409
o2 = {};
// 8410
f508011038_0.returns.push(o2);
// 8411
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8412
f508011038_537.returns.push(1374696769661);
// 8413
o2 = {};
// 8414
f508011038_0.returns.push(o2);
// 8415
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8416
f508011038_537.returns.push(1374696769662);
// 8417
o2 = {};
// 8418
f508011038_0.returns.push(o2);
// 8419
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8420
f508011038_537.returns.push(1374696769662);
// 8421
o2 = {};
// 8422
f508011038_0.returns.push(o2);
// 8423
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8424
f508011038_537.returns.push(1374696769662);
// 8425
o2 = {};
// 8426
f508011038_0.returns.push(o2);
// 8427
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8428
f508011038_537.returns.push(1374696769665);
// 8429
o2 = {};
// 8430
f508011038_0.returns.push(o2);
// 8431
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8432
f508011038_537.returns.push(1374696769665);
// 8433
o2 = {};
// 8434
f508011038_0.returns.push(o2);
// 8435
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8436
f508011038_537.returns.push(1374696769665);
// 8437
o2 = {};
// 8438
f508011038_0.returns.push(o2);
// 8439
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8440
f508011038_537.returns.push(1374696769665);
// 8441
o2 = {};
// 8442
f508011038_0.returns.push(o2);
// 8443
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8444
f508011038_537.returns.push(1374696769665);
// 8445
o2 = {};
// 8446
f508011038_0.returns.push(o2);
// 8447
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8448
f508011038_537.returns.push(1374696769665);
// 8449
o2 = {};
// 8450
f508011038_0.returns.push(o2);
// 8451
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8452
f508011038_537.returns.push(1374696769665);
// 8453
o2 = {};
// 8454
f508011038_0.returns.push(o2);
// 8455
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8456
f508011038_537.returns.push(1374696769665);
// 8457
o2 = {};
// 8458
f508011038_0.returns.push(o2);
// 8459
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8460
f508011038_537.returns.push(1374696769665);
// 8461
o2 = {};
// 8462
f508011038_0.returns.push(o2);
// 8463
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8464
f508011038_537.returns.push(1374696769665);
// 8465
o2 = {};
// 8466
f508011038_0.returns.push(o2);
// 8467
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8468
f508011038_537.returns.push(1374696769665);
// 8469
o2 = {};
// 8470
f508011038_0.returns.push(o2);
// 8471
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8472
f508011038_537.returns.push(1374696769665);
// 8473
o2 = {};
// 8474
f508011038_0.returns.push(o2);
// 8475
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8476
f508011038_537.returns.push(1374696769666);
// 8477
o2 = {};
// 8478
f508011038_0.returns.push(o2);
// 8479
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8480
f508011038_537.returns.push(1374696769669);
// 8481
o2 = {};
// 8482
f508011038_0.returns.push(o2);
// 8483
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8484
f508011038_537.returns.push(1374696769669);
// 8485
o2 = {};
// 8486
f508011038_0.returns.push(o2);
// 8487
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8488
f508011038_537.returns.push(1374696769669);
// 8489
o2 = {};
// 8490
f508011038_0.returns.push(o2);
// 8491
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8492
f508011038_537.returns.push(1374696769669);
// 8493
o2 = {};
// 8494
f508011038_0.returns.push(o2);
// 8495
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8496
f508011038_537.returns.push(1374696769670);
// 8497
o2 = {};
// 8498
f508011038_0.returns.push(o2);
// 8499
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8500
f508011038_537.returns.push(1374696769670);
// 8501
o2 = {};
// 8502
f508011038_0.returns.push(o2);
// 8503
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8504
f508011038_537.returns.push(1374696769670);
// 8505
o2 = {};
// 8506
f508011038_0.returns.push(o2);
// 8507
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8508
f508011038_537.returns.push(1374696769670);
// 8509
o2 = {};
// 8510
f508011038_0.returns.push(o2);
// 8511
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8512
f508011038_537.returns.push(1374696769670);
// 8513
o2 = {};
// 8514
f508011038_0.returns.push(o2);
// 8515
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8516
f508011038_537.returns.push(1374696769670);
// 8517
o2 = {};
// 8518
f508011038_0.returns.push(o2);
// 8519
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8520
f508011038_537.returns.push(1374696769670);
// 8521
o2 = {};
// 8522
f508011038_0.returns.push(o2);
// 8523
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8524
f508011038_537.returns.push(1374696769670);
// 8525
o2 = {};
// 8526
f508011038_0.returns.push(o2);
// 8527
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8528
f508011038_537.returns.push(1374696769671);
// 8529
o2 = {};
// 8530
f508011038_0.returns.push(o2);
// 8531
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8532
f508011038_537.returns.push(1374696769671);
// 8533
o2 = {};
// 8534
f508011038_0.returns.push(o2);
// 8535
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8536
f508011038_537.returns.push(1374696769673);
// 8537
o2 = {};
// 8538
f508011038_0.returns.push(o2);
// 8539
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8540
f508011038_537.returns.push(1374696769674);
// 8541
o2 = {};
// 8542
f508011038_0.returns.push(o2);
// 8543
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8544
f508011038_537.returns.push(1374696769674);
// 8545
o2 = {};
// 8546
f508011038_0.returns.push(o2);
// 8547
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8548
f508011038_537.returns.push(1374696769683);
// 8549
o2 = {};
// 8550
f508011038_0.returns.push(o2);
// 8551
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8552
f508011038_537.returns.push(1374696769683);
// 8553
o2 = {};
// 8554
f508011038_0.returns.push(o2);
// 8555
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8556
f508011038_537.returns.push(1374696769683);
// 8557
o2 = {};
// 8558
f508011038_0.returns.push(o2);
// 8559
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8560
f508011038_537.returns.push(1374696769683);
// 8561
o2 = {};
// 8562
f508011038_0.returns.push(o2);
// 8563
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8564
f508011038_537.returns.push(1374696769683);
// 8565
o2 = {};
// 8566
f508011038_0.returns.push(o2);
// 8567
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8568
f508011038_537.returns.push(1374696769684);
// 8569
o2 = {};
// 8570
f508011038_0.returns.push(o2);
// 8571
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8572
f508011038_537.returns.push(1374696769684);
// 8573
o2 = {};
// 8574
f508011038_0.returns.push(o2);
// 8575
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8576
f508011038_537.returns.push(1374696769685);
// 8577
o2 = {};
// 8578
f508011038_0.returns.push(o2);
// 8579
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8580
f508011038_537.returns.push(1374696769685);
// 8581
o2 = {};
// 8582
f508011038_0.returns.push(o2);
// 8583
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8584
f508011038_537.returns.push(1374696769685);
// 8585
o2 = {};
// 8586
f508011038_0.returns.push(o2);
// 8587
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8588
f508011038_537.returns.push(1374696769686);
// 8589
o2 = {};
// 8590
f508011038_0.returns.push(o2);
// 8591
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8592
f508011038_537.returns.push(1374696769686);
// 8593
o2 = {};
// 8594
f508011038_0.returns.push(o2);
// 8595
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8596
f508011038_537.returns.push(1374696769687);
// 8597
o2 = {};
// 8598
f508011038_0.returns.push(o2);
// 8599
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8600
f508011038_537.returns.push(1374696769687);
// 8601
o2 = {};
// 8602
f508011038_0.returns.push(o2);
// 8603
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8604
f508011038_537.returns.push(1374696769687);
// 8605
o2 = {};
// 8606
f508011038_0.returns.push(o2);
// 8607
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8608
f508011038_537.returns.push(1374696769687);
// 8609
o2 = {};
// 8610
f508011038_0.returns.push(o2);
// 8611
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8612
f508011038_537.returns.push(1374696769687);
// 8613
o2 = {};
// 8614
f508011038_0.returns.push(o2);
// 8615
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8616
f508011038_537.returns.push(1374696769687);
// 8617
o2 = {};
// 8618
f508011038_0.returns.push(o2);
// 8619
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8620
f508011038_537.returns.push(1374696769687);
// 8621
o2 = {};
// 8622
f508011038_0.returns.push(o2);
// 8623
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8624
f508011038_537.returns.push(1374696769687);
// 8625
o2 = {};
// 8626
f508011038_0.returns.push(o2);
// 8627
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8628
f508011038_537.returns.push(1374696769688);
// 8629
o2 = {};
// 8630
f508011038_0.returns.push(o2);
// 8631
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8632
f508011038_537.returns.push(1374696769688);
// 8633
o2 = {};
// 8634
f508011038_0.returns.push(o2);
// 8635
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8636
f508011038_537.returns.push(1374696769688);
// 8637
o2 = {};
// 8638
f508011038_0.returns.push(o2);
// 8639
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8640
f508011038_537.returns.push(1374696769691);
// 8641
o2 = {};
// 8642
f508011038_0.returns.push(o2);
// 8643
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8644
f508011038_537.returns.push(1374696769691);
// 8645
o2 = {};
// 8646
f508011038_0.returns.push(o2);
// 8647
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8648
f508011038_537.returns.push(1374696769691);
// 8649
o2 = {};
// 8650
f508011038_0.returns.push(o2);
// 8651
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8652
f508011038_537.returns.push(1374696769692);
// 8653
o2 = {};
// 8654
f508011038_0.returns.push(o2);
// 8655
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8656
f508011038_537.returns.push(1374696769693);
// 8657
o2 = {};
// 8658
f508011038_0.returns.push(o2);
// 8659
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8660
f508011038_537.returns.push(1374696769693);
// 8661
o2 = {};
// 8662
f508011038_0.returns.push(o2);
// 8663
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8664
f508011038_537.returns.push(1374696769694);
// 8665
o2 = {};
// 8666
f508011038_0.returns.push(o2);
// 8667
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8668
f508011038_537.returns.push(1374696769694);
// 8669
o2 = {};
// 8670
f508011038_0.returns.push(o2);
// 8671
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8672
f508011038_537.returns.push(1374696769694);
// 8673
o2 = {};
// 8674
f508011038_0.returns.push(o2);
// 8675
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8676
f508011038_537.returns.push(1374696769694);
// 8677
o2 = {};
// 8678
f508011038_0.returns.push(o2);
// 8679
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8680
f508011038_537.returns.push(1374696769694);
// 8681
o2 = {};
// 8682
f508011038_0.returns.push(o2);
// 8683
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8684
f508011038_537.returns.push(1374696769695);
// 8685
o2 = {};
// 8686
f508011038_0.returns.push(o2);
// 8687
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8688
f508011038_537.returns.push(1374696769695);
// 8689
o2 = {};
// 8690
f508011038_0.returns.push(o2);
// 8691
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8692
f508011038_537.returns.push(1374696769695);
// 8693
o2 = {};
// 8694
f508011038_0.returns.push(o2);
// 8695
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8696
f508011038_537.returns.push(1374696769695);
// 8697
o2 = {};
// 8698
f508011038_0.returns.push(o2);
// 8699
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8700
f508011038_537.returns.push(1374696769695);
// 8701
o2 = {};
// 8702
f508011038_0.returns.push(o2);
// 8703
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8704
f508011038_537.returns.push(1374696769696);
// 8705
o2 = {};
// 8706
f508011038_0.returns.push(o2);
// 8707
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8708
f508011038_537.returns.push(1374696769696);
// 8709
o2 = {};
// 8710
f508011038_0.returns.push(o2);
// 8711
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8712
f508011038_537.returns.push(1374696769696);
// 8713
o2 = {};
// 8714
f508011038_0.returns.push(o2);
// 8715
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8716
f508011038_537.returns.push(1374696769701);
// 8717
o2 = {};
// 8718
f508011038_0.returns.push(o2);
// 8719
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8720
f508011038_537.returns.push(1374696769701);
// 8721
o2 = {};
// 8722
f508011038_0.returns.push(o2);
// 8723
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8724
f508011038_537.returns.push(1374696769702);
// 8725
o2 = {};
// 8726
f508011038_0.returns.push(o2);
// 8727
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8728
f508011038_537.returns.push(1374696769702);
// 8729
o2 = {};
// 8730
f508011038_0.returns.push(o2);
// 8731
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8732
f508011038_537.returns.push(1374696769702);
// 8733
o2 = {};
// 8734
f508011038_0.returns.push(o2);
// 8735
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8736
f508011038_537.returns.push(1374696769702);
// 8737
o2 = {};
// 8738
f508011038_0.returns.push(o2);
// 8739
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8740
f508011038_537.returns.push(1374696769702);
// 8741
o2 = {};
// 8742
f508011038_0.returns.push(o2);
// 8743
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8744
f508011038_537.returns.push(1374696769702);
// 8745
o2 = {};
// 8746
f508011038_0.returns.push(o2);
// 8747
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8748
f508011038_537.returns.push(1374696769705);
// 8749
o2 = {};
// 8750
f508011038_0.returns.push(o2);
// 8751
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8752
f508011038_537.returns.push(1374696769706);
// 8753
o2 = {};
// 8754
f508011038_0.returns.push(o2);
// 8755
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8756
f508011038_537.returns.push(1374696769707);
// 8757
o2 = {};
// 8758
f508011038_0.returns.push(o2);
// 8759
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8760
f508011038_537.returns.push(1374696769707);
// 8761
o2 = {};
// 8762
f508011038_0.returns.push(o2);
// 8763
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8764
f508011038_537.returns.push(1374696769707);
// 8765
o2 = {};
// 8766
f508011038_0.returns.push(o2);
// 8767
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8768
f508011038_537.returns.push(1374696769708);
// 8769
o2 = {};
// 8770
f508011038_0.returns.push(o2);
// 8771
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8772
f508011038_537.returns.push(1374696769708);
// 8773
o2 = {};
// 8774
f508011038_0.returns.push(o2);
// 8775
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8776
f508011038_537.returns.push(1374696769708);
// 8777
o2 = {};
// 8778
f508011038_0.returns.push(o2);
// 8779
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8780
f508011038_537.returns.push(1374696769708);
// 8781
o2 = {};
// 8782
f508011038_0.returns.push(o2);
// 8783
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8784
f508011038_537.returns.push(1374696769709);
// 8785
o2 = {};
// 8786
f508011038_0.returns.push(o2);
// 8787
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8788
f508011038_537.returns.push(1374696769709);
// 8789
o2 = {};
// 8790
f508011038_0.returns.push(o2);
// 8791
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8792
f508011038_537.returns.push(1374696769709);
// 8793
o2 = {};
// 8794
f508011038_0.returns.push(o2);
// 8795
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8796
f508011038_537.returns.push(1374696769709);
// 8797
o2 = {};
// 8798
f508011038_0.returns.push(o2);
// 8799
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8800
f508011038_537.returns.push(1374696769709);
// 8801
o2 = {};
// 8802
f508011038_0.returns.push(o2);
// 8803
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8804
f508011038_537.returns.push(1374696769709);
// 8805
o2 = {};
// 8806
f508011038_0.returns.push(o2);
// 8807
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8808
f508011038_537.returns.push(1374696769709);
// 8809
o2 = {};
// 8810
f508011038_0.returns.push(o2);
// 8811
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8812
f508011038_537.returns.push(1374696769711);
// 8813
o2 = {};
// 8814
f508011038_0.returns.push(o2);
// 8815
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8816
f508011038_537.returns.push(1374696769711);
// 8817
o2 = {};
// 8818
f508011038_0.returns.push(o2);
// 8819
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8820
f508011038_537.returns.push(1374696769711);
// 8821
o2 = {};
// 8822
f508011038_0.returns.push(o2);
// 8823
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8824
f508011038_537.returns.push(1374696769711);
// 8825
o2 = {};
// 8826
f508011038_0.returns.push(o2);
// 8827
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8828
f508011038_537.returns.push(1374696769711);
// 8829
o2 = {};
// 8830
f508011038_0.returns.push(o2);
// 8831
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8832
f508011038_537.returns.push(1374696769711);
// 8833
o2 = {};
// 8834
f508011038_0.returns.push(o2);
// 8835
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8836
f508011038_537.returns.push(1374696769712);
// 8837
o2 = {};
// 8838
f508011038_0.returns.push(o2);
// 8839
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8840
f508011038_537.returns.push(1374696769712);
// 8841
o2 = {};
// 8842
f508011038_0.returns.push(o2);
// 8843
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8844
f508011038_537.returns.push(1374696769712);
// 8845
o2 = {};
// 8846
f508011038_0.returns.push(o2);
// 8847
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8848
f508011038_537.returns.push(1374696769712);
// 8849
o2 = {};
// 8850
f508011038_0.returns.push(o2);
// 8851
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8852
f508011038_537.returns.push(1374696769715);
// 8853
o2 = {};
// 8854
f508011038_0.returns.push(o2);
// 8855
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8856
f508011038_537.returns.push(1374696769715);
// 8857
o2 = {};
// 8858
f508011038_0.returns.push(o2);
// 8859
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8860
f508011038_537.returns.push(1374696769716);
// 8861
o2 = {};
// 8862
f508011038_0.returns.push(o2);
// 8863
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8864
f508011038_537.returns.push(1374696769716);
// 8865
o2 = {};
// 8866
f508011038_0.returns.push(o2);
// 8867
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8868
f508011038_537.returns.push(1374696769716);
// 8869
o2 = {};
// 8870
f508011038_0.returns.push(o2);
// 8871
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8872
f508011038_537.returns.push(1374696769716);
// 8873
o2 = {};
// 8874
f508011038_0.returns.push(o2);
// 8875
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8876
f508011038_537.returns.push(1374696769716);
// 8877
o2 = {};
// 8878
f508011038_0.returns.push(o2);
// 8879
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8880
f508011038_537.returns.push(1374696769716);
// 8881
o2 = {};
// 8882
f508011038_0.returns.push(o2);
// 8883
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8884
f508011038_537.returns.push(1374696769716);
// 8885
o2 = {};
// 8886
f508011038_0.returns.push(o2);
// 8887
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8888
f508011038_537.returns.push(1374696769717);
// 8889
o2 = {};
// 8890
f508011038_0.returns.push(o2);
// 8891
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8892
f508011038_537.returns.push(1374696769718);
// 8893
o2 = {};
// 8894
f508011038_0.returns.push(o2);
// 8895
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8896
f508011038_537.returns.push(1374696769718);
// 8897
o2 = {};
// 8898
f508011038_0.returns.push(o2);
// 8899
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8900
f508011038_537.returns.push(1374696769718);
// 8901
o2 = {};
// 8902
f508011038_0.returns.push(o2);
// 8903
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8904
f508011038_537.returns.push(1374696769718);
// 8905
o2 = {};
// 8906
f508011038_0.returns.push(o2);
// 8907
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8908
f508011038_537.returns.push(1374696769718);
// 8909
o2 = {};
// 8910
f508011038_0.returns.push(o2);
// 8911
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8912
f508011038_537.returns.push(1374696769718);
// 8913
o2 = {};
// 8914
f508011038_0.returns.push(o2);
// 8915
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8916
f508011038_537.returns.push(1374696769718);
// 8917
o2 = {};
// 8918
f508011038_0.returns.push(o2);
// 8919
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8920
f508011038_537.returns.push(1374696769718);
// 8921
o2 = {};
// 8922
f508011038_0.returns.push(o2);
// 8923
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8924
f508011038_537.returns.push(1374696769719);
// 8925
o2 = {};
// 8926
f508011038_0.returns.push(o2);
// 8927
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8928
f508011038_537.returns.push(1374696769720);
// 8929
o2 = {};
// 8930
f508011038_0.returns.push(o2);
// 8931
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8932
f508011038_537.returns.push(1374696769720);
// 8933
o2 = {};
// 8934
f508011038_0.returns.push(o2);
// 8935
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8936
f508011038_537.returns.push(1374696769720);
// 8937
o2 = {};
// 8938
f508011038_0.returns.push(o2);
// 8939
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8940
f508011038_537.returns.push(1374696769721);
// 8941
o2 = {};
// 8942
f508011038_0.returns.push(o2);
// 8943
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8944
f508011038_537.returns.push(1374696769721);
// 8945
o2 = {};
// 8946
f508011038_0.returns.push(o2);
// 8947
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8948
f508011038_537.returns.push(1374696769721);
// 8949
o2 = {};
// 8950
f508011038_0.returns.push(o2);
// 8951
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8952
f508011038_537.returns.push(1374696769721);
// 8953
o2 = {};
// 8954
f508011038_0.returns.push(o2);
// 8955
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8956
f508011038_537.returns.push(1374696769721);
// 8957
o2 = {};
// 8958
f508011038_0.returns.push(o2);
// 8959
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8960
f508011038_537.returns.push(1374696769730);
// 8961
o2 = {};
// 8962
f508011038_0.returns.push(o2);
// 8963
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8964
f508011038_537.returns.push(1374696769730);
// 8965
o2 = {};
// 8966
f508011038_0.returns.push(o2);
// 8967
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8968
f508011038_537.returns.push(1374696769730);
// 8969
o2 = {};
// 8970
f508011038_0.returns.push(o2);
// 8971
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8972
f508011038_537.returns.push(1374696769731);
// 8973
o2 = {};
// 8974
f508011038_0.returns.push(o2);
// 8975
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8976
f508011038_537.returns.push(1374696769731);
// 8977
o2 = {};
// 8978
f508011038_0.returns.push(o2);
// 8979
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8980
f508011038_537.returns.push(1374696769731);
// 8981
o2 = {};
// 8982
f508011038_0.returns.push(o2);
// 8983
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8984
f508011038_537.returns.push(1374696769731);
// 8985
o2 = {};
// 8986
f508011038_0.returns.push(o2);
// 8987
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8988
f508011038_537.returns.push(1374696769733);
// 8989
o2 = {};
// 8990
f508011038_0.returns.push(o2);
// 8991
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8992
f508011038_537.returns.push(1374696769733);
// 8993
o2 = {};
// 8994
f508011038_0.returns.push(o2);
// 8995
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 8996
f508011038_537.returns.push(1374696769733);
// 8997
o2 = {};
// 8998
f508011038_0.returns.push(o2);
// 8999
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9000
f508011038_537.returns.push(1374696769733);
// 9001
o2 = {};
// 9002
f508011038_0.returns.push(o2);
// 9003
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9004
f508011038_537.returns.push(1374696769733);
// 9005
o2 = {};
// 9006
f508011038_0.returns.push(o2);
// 9007
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9008
f508011038_537.returns.push(1374696769736);
// 9009
o2 = {};
// 9010
f508011038_0.returns.push(o2);
// 9011
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9012
f508011038_537.returns.push(1374696769736);
// 9013
o2 = {};
// 9014
f508011038_0.returns.push(o2);
// 9015
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9016
f508011038_537.returns.push(1374696769736);
// 9017
o2 = {};
// 9018
f508011038_0.returns.push(o2);
// 9019
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9020
f508011038_537.returns.push(1374696769736);
// 9021
o2 = {};
// 9022
f508011038_0.returns.push(o2);
// 9023
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9024
f508011038_537.returns.push(1374696769736);
// 9025
o2 = {};
// 9026
f508011038_0.returns.push(o2);
// 9027
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9028
f508011038_537.returns.push(1374696769737);
// 9029
o2 = {};
// 9030
f508011038_0.returns.push(o2);
// 9031
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9032
f508011038_537.returns.push(1374696769737);
// 9033
o2 = {};
// 9034
f508011038_0.returns.push(o2);
// 9035
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9036
f508011038_537.returns.push(1374696769737);
// 9037
o2 = {};
// 9038
f508011038_0.returns.push(o2);
// 9039
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9040
f508011038_537.returns.push(1374696769739);
// 9041
o2 = {};
// 9042
f508011038_0.returns.push(o2);
// 9043
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9044
f508011038_537.returns.push(1374696769739);
// 9045
o2 = {};
// 9046
f508011038_0.returns.push(o2);
// 9047
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9048
f508011038_537.returns.push(1374696769739);
// 9049
o2 = {};
// 9050
f508011038_0.returns.push(o2);
// 9051
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9052
f508011038_537.returns.push(1374696769740);
// 9053
o2 = {};
// 9054
f508011038_0.returns.push(o2);
// 9055
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9056
f508011038_537.returns.push(1374696769740);
// 9057
o2 = {};
// 9058
f508011038_0.returns.push(o2);
// 9059
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9060
f508011038_537.returns.push(1374696769740);
// 9061
o2 = {};
// 9062
f508011038_0.returns.push(o2);
// 9063
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9064
f508011038_537.returns.push(1374696769744);
// 9065
o2 = {};
// 9066
f508011038_0.returns.push(o2);
// 9067
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9068
f508011038_537.returns.push(1374696769745);
// 9069
o2 = {};
// 9070
f508011038_0.returns.push(o2);
// 9071
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9072
f508011038_537.returns.push(1374696769747);
// 9073
o2 = {};
// 9074
f508011038_0.returns.push(o2);
// 9075
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9076
f508011038_537.returns.push(1374696769747);
// 9077
o2 = {};
// 9078
f508011038_0.returns.push(o2);
// 9079
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9080
f508011038_537.returns.push(1374696769748);
// 9081
o2 = {};
// 9082
f508011038_0.returns.push(o2);
// 9083
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9084
f508011038_537.returns.push(1374696769748);
// 9085
o2 = {};
// 9086
f508011038_0.returns.push(o2);
// 9087
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9088
f508011038_537.returns.push(1374696769749);
// 9089
o2 = {};
// 9090
f508011038_0.returns.push(o2);
// 9091
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9092
f508011038_537.returns.push(1374696769749);
// 9093
o2 = {};
// 9094
f508011038_0.returns.push(o2);
// 9095
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9096
f508011038_537.returns.push(1374696769749);
// 9097
o2 = {};
// 9098
f508011038_0.returns.push(o2);
// 9099
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9100
f508011038_537.returns.push(1374696769749);
// 9101
o2 = {};
// 9102
f508011038_0.returns.push(o2);
// 9103
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9104
f508011038_537.returns.push(1374696769749);
// 9105
o2 = {};
// 9106
f508011038_0.returns.push(o2);
// 9107
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9108
f508011038_537.returns.push(1374696769752);
// 9109
o2 = {};
// 9110
f508011038_0.returns.push(o2);
// 9111
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9112
f508011038_537.returns.push(1374696769752);
// 9113
o2 = {};
// 9114
f508011038_0.returns.push(o2);
// 9115
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9116
f508011038_537.returns.push(1374696769752);
// 9117
o2 = {};
// 9118
f508011038_0.returns.push(o2);
// 9119
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9120
f508011038_537.returns.push(1374696769752);
// 9121
o2 = {};
// 9122
f508011038_0.returns.push(o2);
// 9123
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9124
f508011038_537.returns.push(1374696769753);
// 9125
o2 = {};
// 9126
f508011038_0.returns.push(o2);
// 9127
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9128
f508011038_537.returns.push(1374696769753);
// 9129
o2 = {};
// 9130
f508011038_0.returns.push(o2);
// 9131
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9132
f508011038_537.returns.push(1374696769753);
// 9133
o2 = {};
// 9134
f508011038_0.returns.push(o2);
// 9135
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9136
f508011038_537.returns.push(1374696769753);
// 9137
o2 = {};
// 9138
f508011038_0.returns.push(o2);
// 9139
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9140
f508011038_537.returns.push(1374696769753);
// 9141
o2 = {};
// 9142
f508011038_0.returns.push(o2);
// 9143
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9144
f508011038_537.returns.push(1374696769753);
// 9145
o2 = {};
// 9146
f508011038_0.returns.push(o2);
// 9147
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9148
f508011038_537.returns.push(1374696769753);
// 9149
o2 = {};
// 9150
f508011038_0.returns.push(o2);
// 9151
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9152
f508011038_537.returns.push(1374696769753);
// 9153
o2 = {};
// 9154
f508011038_0.returns.push(o2);
// 9155
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9156
f508011038_537.returns.push(1374696769753);
// 9157
o2 = {};
// 9158
f508011038_0.returns.push(o2);
// 9159
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9160
f508011038_537.returns.push(1374696769753);
// 9161
o2 = {};
// 9162
f508011038_0.returns.push(o2);
// 9163
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9164
f508011038_537.returns.push(1374696769754);
// 9165
o2 = {};
// 9166
f508011038_0.returns.push(o2);
// 9167
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9168
f508011038_537.returns.push(1374696769758);
// 9169
o2 = {};
// 9170
f508011038_0.returns.push(o2);
// 9171
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9172
f508011038_537.returns.push(1374696769760);
// 9173
o2 = {};
// 9174
f508011038_0.returns.push(o2);
// 9175
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9176
f508011038_537.returns.push(1374696769760);
// 9177
o2 = {};
// 9178
f508011038_0.returns.push(o2);
// 9179
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9180
f508011038_537.returns.push(1374696769760);
// 9181
o2 = {};
// 9182
f508011038_0.returns.push(o2);
// 9183
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9184
f508011038_537.returns.push(1374696769760);
// 9185
o2 = {};
// 9186
f508011038_0.returns.push(o2);
// 9187
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9188
f508011038_537.returns.push(1374696769760);
// 9189
o2 = {};
// 9190
f508011038_0.returns.push(o2);
// 9191
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9192
f508011038_537.returns.push(1374696769760);
// 9193
o2 = {};
// 9194
f508011038_0.returns.push(o2);
// 9195
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9196
f508011038_537.returns.push(1374696769761);
// 9197
o2 = {};
// 9198
f508011038_0.returns.push(o2);
// 9199
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9200
f508011038_537.returns.push(1374696769768);
// 9201
o2 = {};
// 9202
f508011038_0.returns.push(o2);
// 9203
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9204
f508011038_537.returns.push(1374696769768);
// 9205
o2 = {};
// 9206
f508011038_0.returns.push(o2);
// 9207
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9208
f508011038_537.returns.push(1374696769768);
// 9209
o2 = {};
// 9210
f508011038_0.returns.push(o2);
// 9211
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9212
f508011038_537.returns.push(1374696769768);
// 9213
o2 = {};
// 9214
f508011038_0.returns.push(o2);
// 9215
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9216
f508011038_537.returns.push(1374696769769);
// 9217
o2 = {};
// 9218
f508011038_0.returns.push(o2);
// 9219
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9220
f508011038_537.returns.push(1374696769769);
// 9221
o2 = {};
// 9222
f508011038_0.returns.push(o2);
// 9223
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9224
f508011038_537.returns.push(1374696769769);
// 9225
o2 = {};
// 9226
f508011038_0.returns.push(o2);
// 9227
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9228
f508011038_537.returns.push(1374696769770);
// 9229
o2 = {};
// 9230
f508011038_0.returns.push(o2);
// 9231
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9232
f508011038_537.returns.push(1374696769771);
// 9233
o2 = {};
// 9234
f508011038_0.returns.push(o2);
// 9235
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9236
f508011038_537.returns.push(1374696769771);
// 9237
o2 = {};
// 9238
f508011038_0.returns.push(o2);
// 9239
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9240
f508011038_537.returns.push(1374696769771);
// 9241
o2 = {};
// 9242
f508011038_0.returns.push(o2);
// 9243
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9244
f508011038_537.returns.push(1374696769772);
// 9245
o2 = {};
// 9246
f508011038_0.returns.push(o2);
// 9247
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9248
f508011038_537.returns.push(1374696769772);
// 9249
o2 = {};
// 9250
f508011038_0.returns.push(o2);
// 9251
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9252
f508011038_537.returns.push(1374696769772);
// 9253
o2 = {};
// 9254
f508011038_0.returns.push(o2);
// 9255
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9256
f508011038_537.returns.push(1374696769772);
// 9257
o2 = {};
// 9258
f508011038_0.returns.push(o2);
// 9259
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9260
f508011038_537.returns.push(1374696769772);
// 9261
o2 = {};
// 9262
f508011038_0.returns.push(o2);
// 9263
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9264
f508011038_537.returns.push(1374696769772);
// 9265
o2 = {};
// 9266
f508011038_0.returns.push(o2);
// 9267
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9268
f508011038_537.returns.push(1374696769772);
// 9269
o2 = {};
// 9270
f508011038_0.returns.push(o2);
// 9271
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9272
f508011038_537.returns.push(1374696769772);
// 9273
o2 = {};
// 9274
f508011038_0.returns.push(o2);
// 9275
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9276
f508011038_537.returns.push(1374696769777);
// 9277
o2 = {};
// 9278
f508011038_0.returns.push(o2);
// 9279
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9280
f508011038_537.returns.push(1374696769777);
// 9281
o2 = {};
// 9282
f508011038_0.returns.push(o2);
// 9283
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9284
f508011038_537.returns.push(1374696769777);
// 9285
o2 = {};
// 9286
f508011038_0.returns.push(o2);
// 9287
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9288
f508011038_537.returns.push(1374696769777);
// 9289
o2 = {};
// 9290
f508011038_0.returns.push(o2);
// 9291
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9292
f508011038_537.returns.push(1374696769778);
// 9293
o2 = {};
// 9294
f508011038_0.returns.push(o2);
// 9295
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9296
f508011038_537.returns.push(1374696769778);
// 9297
o2 = {};
// 9298
f508011038_0.returns.push(o2);
// 9299
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9300
f508011038_537.returns.push(1374696769778);
// 9301
o2 = {};
// 9302
f508011038_0.returns.push(o2);
// 9303
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9304
f508011038_537.returns.push(1374696769778);
// 9305
o2 = {};
// 9306
f508011038_0.returns.push(o2);
// 9307
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9308
f508011038_537.returns.push(1374696769778);
// 9309
o2 = {};
// 9310
f508011038_0.returns.push(o2);
// 9311
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9312
f508011038_537.returns.push(1374696769779);
// 9313
o2 = {};
// 9314
f508011038_0.returns.push(o2);
// 9315
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9316
f508011038_537.returns.push(1374696769779);
// 9317
o2 = {};
// 9318
f508011038_0.returns.push(o2);
// 9319
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9320
f508011038_537.returns.push(1374696769779);
// 9321
o2 = {};
// 9322
f508011038_0.returns.push(o2);
// 9323
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9324
f508011038_537.returns.push(1374696769779);
// 9325
o2 = {};
// 9326
f508011038_0.returns.push(o2);
// 9327
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9328
f508011038_537.returns.push(1374696769779);
// 9329
o2 = {};
// 9330
f508011038_0.returns.push(o2);
// 9331
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9332
f508011038_537.returns.push(1374696769779);
// 9333
o2 = {};
// 9334
f508011038_0.returns.push(o2);
// 9335
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9336
f508011038_537.returns.push(1374696769779);
// 9337
o2 = {};
// 9338
f508011038_0.returns.push(o2);
// 9339
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9340
f508011038_537.returns.push(1374696769779);
// 9341
o2 = {};
// 9342
f508011038_0.returns.push(o2);
// 9343
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9344
f508011038_537.returns.push(1374696769779);
// 9345
o2 = {};
// 9346
f508011038_0.returns.push(o2);
// 9347
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9348
f508011038_537.returns.push(1374696769779);
// 9349
o2 = {};
// 9350
f508011038_0.returns.push(o2);
// 9351
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9352
f508011038_537.returns.push(1374696769779);
// 9353
o2 = {};
// 9354
f508011038_0.returns.push(o2);
// 9355
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9356
f508011038_537.returns.push(1374696769780);
// 9357
o2 = {};
// 9358
f508011038_0.returns.push(o2);
// 9359
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9360
f508011038_537.returns.push(1374696769780);
// 9361
o2 = {};
// 9362
f508011038_0.returns.push(o2);
// 9363
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9364
f508011038_537.returns.push(1374696769780);
// 9365
o2 = {};
// 9366
f508011038_0.returns.push(o2);
// 9367
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9368
f508011038_537.returns.push(1374696769780);
// 9369
o2 = {};
// 9370
f508011038_0.returns.push(o2);
// 9371
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9372
f508011038_537.returns.push(1374696769797);
// 9373
o2 = {};
// 9374
f508011038_0.returns.push(o2);
// 9375
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9376
f508011038_537.returns.push(1374696769797);
// 9377
o2 = {};
// 9378
f508011038_0.returns.push(o2);
// 9379
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9380
f508011038_537.returns.push(1374696769797);
// 9381
o2 = {};
// 9382
f508011038_0.returns.push(o2);
// 9383
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9384
f508011038_537.returns.push(1374696769801);
// 9385
o2 = {};
// 9386
f508011038_0.returns.push(o2);
// 9387
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9388
f508011038_537.returns.push(1374696769801);
// 9389
o2 = {};
// 9390
f508011038_0.returns.push(o2);
// 9391
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9392
f508011038_537.returns.push(1374696769801);
// 9393
o2 = {};
// 9394
f508011038_0.returns.push(o2);
// 9395
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9396
f508011038_537.returns.push(1374696769801);
// 9397
o2 = {};
// 9398
f508011038_0.returns.push(o2);
// 9399
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9400
f508011038_537.returns.push(1374696769801);
// 9401
o2 = {};
// 9402
f508011038_0.returns.push(o2);
// 9403
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9404
f508011038_537.returns.push(1374696769802);
// 9405
o2 = {};
// 9406
f508011038_0.returns.push(o2);
// 9407
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9408
f508011038_537.returns.push(1374696769802);
// 9409
o2 = {};
// 9410
f508011038_0.returns.push(o2);
// 9411
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9412
f508011038_537.returns.push(1374696769802);
// 9413
o2 = {};
// 9414
f508011038_0.returns.push(o2);
// 9415
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9416
f508011038_537.returns.push(1374696769802);
// 9417
o2 = {};
// 9418
f508011038_0.returns.push(o2);
// 9419
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9420
f508011038_537.returns.push(1374696769802);
// 9421
o2 = {};
// 9422
f508011038_0.returns.push(o2);
// 9423
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9424
f508011038_537.returns.push(1374696769802);
// 9425
o2 = {};
// 9426
f508011038_0.returns.push(o2);
// 9427
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9428
f508011038_537.returns.push(1374696769809);
// 9429
o2 = {};
// 9430
f508011038_0.returns.push(o2);
// 9431
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9432
f508011038_537.returns.push(1374696769809);
// 9433
o2 = {};
// 9434
f508011038_0.returns.push(o2);
// 9435
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9436
f508011038_537.returns.push(1374696769810);
// 9437
o2 = {};
// 9438
f508011038_0.returns.push(o2);
// 9439
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9440
f508011038_537.returns.push(1374696769810);
// 9441
o2 = {};
// 9442
f508011038_0.returns.push(o2);
// 9443
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9444
f508011038_537.returns.push(1374696769810);
// 9445
o2 = {};
// 9446
f508011038_0.returns.push(o2);
// 9447
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9448
f508011038_537.returns.push(1374696769811);
// 9449
o2 = {};
// 9450
f508011038_0.returns.push(o2);
// 9451
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9452
f508011038_537.returns.push(1374696769811);
// 9453
o2 = {};
// 9454
f508011038_0.returns.push(o2);
// 9455
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9456
f508011038_537.returns.push(1374696769812);
// 9457
o2 = {};
// 9458
f508011038_0.returns.push(o2);
// 9459
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9460
f508011038_537.returns.push(1374696769812);
// 9461
o2 = {};
// 9462
f508011038_0.returns.push(o2);
// 9463
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9464
f508011038_537.returns.push(1374696769812);
// 9465
o2 = {};
// 9466
f508011038_0.returns.push(o2);
// 9467
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9468
f508011038_537.returns.push(1374696769812);
// 9469
o2 = {};
// 9470
f508011038_0.returns.push(o2);
// 9471
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9472
f508011038_537.returns.push(1374696769814);
// 9473
o2 = {};
// 9474
f508011038_0.returns.push(o2);
// 9475
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9476
f508011038_537.returns.push(1374696769814);
// 9477
o2 = {};
// 9478
f508011038_0.returns.push(o2);
// 9479
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9480
f508011038_537.returns.push(1374696769814);
// 9481
o2 = {};
// 9482
f508011038_0.returns.push(o2);
// 9483
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9484
f508011038_537.returns.push(1374696769815);
// 9485
o2 = {};
// 9486
f508011038_0.returns.push(o2);
// 9487
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9488
f508011038_537.returns.push(1374696769819);
// 9489
o2 = {};
// 9490
f508011038_0.returns.push(o2);
// 9491
o2.getTime = f508011038_537;
// undefined
o2 = null;
// 9492
f508011038_537.returns.push(1374696769819);
// 9494
o2 = {};
// 9495
f508011038_518.returns.push(o2);
// 9496
o2.parentNode = o10;
// 9497
o2.id = "init-data";
// 9498
o2.type = "hidden";
// 9499
o2.nodeName = "INPUT";
// 9500
o2.value = "{\"baseFoucClass\":\"swift-loading\",\"htmlFoucClassNames\":\"swift-loading\",\"htmlClassNames\":\"\",\"macawSwift\":true,\"assetsBasePath\":\"http:\\/\\/jsbngssl.abs.twimg.com\\/a\\/1374512922\\/\",\"environment\":\"production\",\"sandboxes\":{\"jsonp\":\"http:\\/\\/jsbngssl.abs.twimg.com\\/a\\/1374512922\\/jsonp_sandbox.html\",\"detailsPane\":\"http:\\/\\/jsbngssl.abs.twimg.com\\/a\\/1374512922\\/details_pane_content_sandbox.html\"},\"formAuthenticityToken\":\"a25b8139b201868f12abc5ed3fa4ea22f1a06930\",\"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,\"showTypeaheadTopicSocialContext\":false,\"showDebugInfo\":false,\"useThrottle\":true,\"accountsOnTop\":false,\"remoteDebounceInterval\":300,\"remoteThrottleInterval\":300,\"tweetContextEnabled\":false,\"fullNameMatchingInCompose\":false,\"fullNameMatchingInComposeRequiresFollow\":false},\"pushStatePageLimit\":500000,\"routes\":{\"profile\":\"\\/\"},\"pushState\":true,\"viewContainer\":\"#page-container\",\"asyncSocialProof\":true,\"dragAndDropPhotoUpload\":true,\"href\":\"\\/search?q=javascript\",\"searchPathWithQuery\":\"\\/search?q=query&src=typd\",\"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,\"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 ms-windows\",\"doc_class_names\":null,\"page_container_class_names\":\"wrapper wrapper-search white\",\"ttft_navigation\":false}}";
// undefined
o2 = null;
// 9501
// 9502
// 9503
// 9504
// undefined
o7 = null;
// 9506
o0.jQuery = void 0;
// 9507
o0.jquery = void 0;
// 9511
o0.nodeName = "#document";
// undefined
fo508011038_1_jQuery18305379572303500026 = function() { return fo508011038_1_jQuery18305379572303500026.returns[fo508011038_1_jQuery18305379572303500026.inst++]; };
fo508011038_1_jQuery18305379572303500026.returns = [];
fo508011038_1_jQuery18305379572303500026.inst = 0;
defineGetter(o0, "jQuery18305379572303500026", fo508011038_1_jQuery18305379572303500026, undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(void 0);
// 9515
// 9518
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9527
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9540
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9549
f508011038_469.returns.push(undefined);
// 9550
o1.setItem = f508011038_742;
// 9551
f508011038_742.returns.push(undefined);
// 9552
o1.getItem = f508011038_575;
// 9553
f508011038_575.returns.push("test");
// 9554
o1.removeItem = f508011038_743;
// undefined
o1 = null;
// 9555
f508011038_743.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9566
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9575
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9584
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9593
f508011038_469.returns.push(undefined);
// 9594
f508011038_7.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9607
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9616
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9625
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9634
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9643
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9652
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9661
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9670
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9679
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9693
f508011038_469.returns.push(undefined);
// 9696
f508011038_469.returns.push(undefined);
// 9699
f508011038_469.returns.push(undefined);
// 9702
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9712
f508011038_469.returns.push(undefined);
// 9715
f508011038_469.returns.push(undefined);
// 9718
f508011038_469.returns.push(undefined);
// 9721
f508011038_469.returns.push(undefined);
// 9724
f508011038_469.returns.push(undefined);
// 9727
f508011038_469.returns.push(undefined);
// 9730
f508011038_469.returns.push(undefined);
// 9733
f508011038_469.returns.push(undefined);
// 9736
f508011038_469.returns.push(undefined);
// 9739
f508011038_469.returns.push(undefined);
// 9742
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9756
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9766
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9776
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9786
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9796
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9806
f508011038_469.returns.push(undefined);
// 9809
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9819
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9829
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9839
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9863
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9873
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9883
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9898
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9917
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9926
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9939
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9948
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9957
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9972
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9981
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 9996
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10005
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10014
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10024
f508011038_469.returns.push(undefined);
// 10025
f508011038_2581 = function() { return f508011038_2581.returns[f508011038_2581.inst++]; };
f508011038_2581.returns = [];
f508011038_2581.inst = 0;
// 10026
o4.pushState = f508011038_2581;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10037
f508011038_7.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10052
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10061
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10087
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10096
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10106
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10116
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10150
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10159
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10178
f508011038_469.returns.push(undefined);
// 10180
o1 = {};
// 10181
f508011038_518.returns.push(o1);
// 10182
o1.parentNode = o10;
// 10183
o1.id = "message-drawer";
// 10184
o1.jQuery = void 0;
// 10185
o1.jquery = void 0;
// 10186
o1.nodeType = 1;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10196
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10206
f508011038_469.returns.push(undefined);
// 10209
o1.nodeName = "DIV";
// 10212
o1.jQuery18305379572303500026 = void 0;
// 10213
// 10214
o1.JSBNG__addEventListener = f508011038_469;
// undefined
o1 = null;
// 10216
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10244
f508011038_469.returns.push(undefined);
// 10247
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10257
f508011038_469.returns.push(undefined);
// 10260
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10270
f508011038_469.returns.push(undefined);
// 10273
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10283
f508011038_469.returns.push(undefined);
// 10286
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10303
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10313
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10323
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10333
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10343
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10353
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10363
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10373
f508011038_469.returns.push(undefined);
// 10376
f508011038_469.returns.push(undefined);
// 10379
f508011038_469.returns.push(undefined);
// 10382
f508011038_469.returns.push(undefined);
// 10385
f508011038_469.returns.push(undefined);
// 10388
f508011038_469.returns.push(undefined);
// 10395
o1 = {};
// 10396
f508011038_558.returns.push(o1);
// 10397
o2 = {};
// 10398
o1["0"] = o2;
// 10399
o1["1"] = void 0;
// undefined
o1 = null;
// 10400
o2.jQuery = void 0;
// 10401
o2.jquery = void 0;
// 10402
o2.nodeType = 1;
// 10405
o2.nodeName = "LI";
// 10408
o2.jQuery18305379572303500026 = void 0;
// 10409
// 10410
o2.JSBNG__addEventListener = f508011038_469;
// undefined
o2 = null;
// 10412
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10429
f508011038_469.returns.push(undefined);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10439
f508011038_469.returns.push(undefined);
// 10441
f508011038_518.returns.push(null);
// 10443
o1 = {};
// 10444
f508011038_518.returns.push(o1);
// 10445
o2 = {};
// 10446
o1.parentNode = o2;
// undefined
o2 = null;
// 10447
o1.id = "global-nav-search";
// 10448
o1.jQuery = void 0;
// 10449
o1.jquery = void 0;
// 10450
o1.nodeType = 1;
// 10452
o1.ownerDocument = o0;
// 10458
o2 = {};
// 10459
f508011038_518.returns.push(o2);
// 10461
o2.parentNode = o1;
// 10462
o2.id = "search-query";
// 10470
o3 = {};
// 10471
f508011038_518.returns.push(o3);
// 10473
o3.parentNode = o1;
// 10474
o3.id = "search-query-hint";
// undefined
o3 = null;
// 10475
o2.nodeType = 1;
// 10477
o2.type = "text";
// 10478
o2.nodeName = "INPUT";
// 10479
// 10482
o1.nodeName = "FORM";
// undefined
fo508011038_2585_jQuery18305379572303500026 = function() { return fo508011038_2585_jQuery18305379572303500026.returns[fo508011038_2585_jQuery18305379572303500026.inst++]; };
fo508011038_2585_jQuery18305379572303500026.returns = [];
fo508011038_2585_jQuery18305379572303500026.inst = 0;
defineGetter(o1, "jQuery18305379572303500026", fo508011038_2585_jQuery18305379572303500026, undefined);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(void 0);
// 10486
// 10487
o1.JSBNG__addEventListener = f508011038_469;
// 10489
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10498
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026 = function() { return fo508011038_2587_jQuery18305379572303500026.returns[fo508011038_2587_jQuery18305379572303500026.inst++]; };
fo508011038_2587_jQuery18305379572303500026.returns = [];
fo508011038_2587_jQuery18305379572303500026.inst = 0;
defineGetter(o2, "jQuery18305379572303500026", fo508011038_2587_jQuery18305379572303500026, undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026.returns.push(void 0);
// 10505
// 10506
o2.JSBNG__addEventListener = f508011038_469;
// 10508
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026.returns.push(93);
// 10517
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10526
f508011038_469.returns.push(undefined);
// 10531
o1.getElementsByClassName = f508011038_508;
// 10533
o3 = {};
// 10534
f508011038_508.returns.push(o3);
// 10535
o5 = {};
// 10536
o3["0"] = o5;
// 10537
o3["1"] = void 0;
// undefined
o3 = null;
// 10538
o5.nodeType = 1;
// 10540
o5.nodeName = "SPAN";
// 10543
o5.jQuery18305379572303500026 = void 0;
// 10544
// 10545
o5.JSBNG__addEventListener = f508011038_469;
// undefined
o5 = null;
// 10547
f508011038_469.returns.push(undefined);
// 10549
f508011038_518.returns.push(o1);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10563
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10572
f508011038_469.returns.push(undefined);
// 10575
f508011038_469.returns.push(undefined);
// 10577
f508011038_518.returns.push(o1);
// undefined
o1 = null;
// 10590
f508011038_518.returns.push(o2);
// 10594
o2.ownerDocument = o0;
// undefined
o2 = null;
// 10597
f508011038_525.returns.push(true);
// 10601
f508011038_525.returns.push(false);
// 10608
o1 = {};
// 10609
f508011038_508.returns.push(o1);
// 10610
o2 = {};
// 10611
o1["0"] = o2;
// 10612
o1["1"] = void 0;
// undefined
o1 = null;
// 10614
o1 = {};
// 10615
f508011038_470.returns.push(o1);
// 10616
o1.setAttribute = f508011038_472;
// 10617
f508011038_472.returns.push(undefined);
// 10618
o1.JSBNG__oninput = null;
// undefined
o1 = null;
// 10619
o2.nodeType = 1;
// 10620
o2.getAttribute = f508011038_468;
// 10621
o2.ownerDocument = o0;
// 10624
o2.setAttribute = f508011038_472;
// undefined
o2 = null;
// 10625
f508011038_472.returns.push(undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026.returns.push(93);
// 10634
f508011038_469.returns.push(undefined);
// 10637
f508011038_469.returns.push(undefined);
// 10640
f508011038_469.returns.push(undefined);
// 10643
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026.returns.push(93);
// 10652
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10661
f508011038_469.returns.push(undefined);
// undefined
fo508011038_2587_jQuery18305379572303500026.returns.push(93);
// undefined
fo508011038_2585_jQuery18305379572303500026.returns.push(90);
// 10676
f508011038_469.returns.push(undefined);
// 10684
// 10685
o1 = {};
// undefined
o1 = null;
// 10686
o0.body = o10;
// 10688
o1 = {};
// 10689
f508011038_546.returns.push(o1);
// 10690
o1["0"] = o10;
// undefined
o1 = null;
// 10692
o1 = {};
// 10693
f508011038_470.returns.push(o1);
// 10694
o2 = {};
// 10695
o1.style = o2;
// 10696
// 10697
o10.insertBefore = f508011038_513;
// 10698
o3 = {};
// 10699
o10.firstChild = o3;
// undefined
o3 = null;
// 10700
f508011038_513.returns.push(o1);
// 10702
o3 = {};
// 10703
f508011038_470.returns.push(o3);
// 10704
o1.appendChild = f508011038_478;
// 10705
f508011038_478.returns.push(o3);
// 10706
// 10707
o3.getElementsByTagName = f508011038_473;
// 10708
o5 = {};
// 10709
f508011038_473.returns.push(o5);
// 10710
o7 = {};
// 10711
o5["0"] = o7;
// 10712
o8 = {};
// 10713
o7.style = o8;
// 10714
// 10716
o7.offsetHeight = 0;
// undefined
o7 = null;
// 10719
// undefined
o8 = null;
// 10720
o7 = {};
// 10721
o5["1"] = o7;
// undefined
o5 = null;
// 10722
o5 = {};
// 10723
o7.style = o5;
// undefined
o7 = null;
// 10724
// undefined
o5 = null;
// 10727
// 10728
o5 = {};
// 10729
o3.style = o5;
// 10730
// undefined
fo508011038_2599_offsetWidth = function() { return fo508011038_2599_offsetWidth.returns[fo508011038_2599_offsetWidth.inst++]; };
fo508011038_2599_offsetWidth.returns = [];
fo508011038_2599_offsetWidth.inst = 0;
defineGetter(o3, "offsetWidth", fo508011038_2599_offsetWidth, undefined);
// undefined
fo508011038_2599_offsetWidth.returns.push(4);
// 10732
o10.offsetTop = 0;
// 10733
o7 = {};
// 10734
f508011038_4.returns.push(o7);
// 10735
o7.JSBNG__top = "7.265625px";
// undefined
o7 = null;
// 10736
o7 = {};
// 10737
f508011038_4.returns.push(o7);
// 10738
o7.width = "4px";
// undefined
o7 = null;
// 10740
o7 = {};
// 10741
f508011038_470.returns.push(o7);
// 10742
o8 = {};
// 10743
o7.style = o8;
// 10745
// 10746
// 10749
// 10750
// undefined
o8 = null;
// 10752
// 10753
o3.appendChild = f508011038_478;
// 10754
f508011038_478.returns.push(o7);
// undefined
o7 = null;
// 10755
o7 = {};
// 10756
f508011038_4.returns.push(o7);
// 10757
o7.marginRight = "0px";
// undefined
o7 = null;
// 10759
o5.zoom = "";
// 10760
// 10762
// undefined
fo508011038_2599_offsetWidth.returns.push(2);
// 10765
// 10767
// undefined
o5 = null;
// 10768
// 10769
o5 = {};
// 10770
o3.firstChild = o5;
// undefined
o3 = null;
// 10771
o3 = {};
// 10772
o5.style = o3;
// undefined
o5 = null;
// 10773
// undefined
o3 = null;
// undefined
fo508011038_2599_offsetWidth.returns.push(3);
// 10776
// undefined
o2 = null;
// 10777
o10.removeChild = f508011038_497;
// 10778
f508011038_497.returns.push(o1);
// undefined
o1 = null;
// 10782
o1 = {};
// 10783
f508011038_0.returns.push(o1);
// 10784
o1.getTime = f508011038_537;
// undefined
o1 = null;
// 10785
f508011038_537.returns.push(1374696769933);
// 10786
o0.window = void 0;
// 10787
o0.parentNode = null;
// 10789
o0.defaultView = ow508011038;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10794
o0.JSBNG__onready = void 0;
// 10795
ow508011038.JSBNG__onready = undefined;
// 10798
o0.ready = void 0;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10805
o1 = {};
// 10806
o1.type = "popstate";
// 10807
o1.jQuery18305379572303500026 = void 0;
// 10811
o1.defaultPrevented = false;
// 10812
o1.returnValue = true;
// 10813
o1.getPreventDefault = void 0;
// 10814
o1.timeStamp = 1374696769937;
// 10815
o1.which = void 0;
// 10816
o1.view = void 0;
// 10818
o1.target = ow508011038;
// 10819
o1.shiftKey = void 0;
// 10820
o1.relatedTarget = void 0;
// 10821
o1.metaKey = void 0;
// 10822
o1.eventPhase = 2;
// 10823
o1.currentTarget = ow508011038;
// 10824
o1.ctrlKey = void 0;
// 10825
o1.cancelable = true;
// 10826
o1.bubbles = false;
// 10827
o1.altKey = void 0;
// 10828
o1.srcElement = ow508011038;
// 10829
o1.relatedNode = void 0;
// 10830
o1.attrName = void 0;
// 10831
o1.attrChange = void 0;
// 10832
o1.state = null;
// undefined
o1 = null;
// 10833
o1 = {};
// 10834
o1.type = "mouseout";
// 10835
o1.jQuery18305379572303500026 = void 0;
// 10839
o1.defaultPrevented = false;
// 10840
o1.returnValue = true;
// 10841
o1.getPreventDefault = void 0;
// 10842
o1.timeStamp = 1374696770589;
// 10843
o2 = {};
// 10844
o1.toElement = o2;
// 10845
o1.screenY = 739;
// 10846
o1.screenX = 159;
// 10847
o1.pageY = 574;
// 10848
o1.pageX = 91;
// 10849
o1.offsetY = 574;
// 10850
o1.offsetX = 15;
// 10851
o3 = {};
// 10852
o1.fromElement = o3;
// 10853
o1.clientY = 574;
// 10854
o1.clientX = 91;
// 10855
o1.buttons = void 0;
// 10856
o1.button = 0;
// 10857
o1.which = 0;
// 10858
o1.view = ow508011038;
// 10860
o1.target = o3;
// 10861
o1.shiftKey = false;
// 10862
o1.relatedTarget = o2;
// 10863
o1.metaKey = false;
// 10864
o1.eventPhase = 3;
// 10865
o1.currentTarget = o0;
// 10866
o1.ctrlKey = false;
// 10867
o1.cancelable = true;
// 10868
o1.bubbles = true;
// 10869
o1.altKey = false;
// 10870
o1.srcElement = o3;
// 10871
o1.relatedNode = void 0;
// 10872
o1.attrName = void 0;
// 10873
o1.attrChange = void 0;
// undefined
o1 = null;
// 10874
o3.nodeType = 1;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10881
o3.disabled = void 0;
// 10886
o3.className = "wrapper wrapper-search white";
// 10887
o1 = {};
// 10888
o3.parentNode = o1;
// 10889
o1.disabled = void 0;
// 10894
o1.className = "";
// 10895
o1.getAttribute = f508011038_468;
// 10897
f508011038_468.returns.push(null);
// 10898
o5 = {};
// 10899
o1.parentNode = o5;
// undefined
o1 = null;
// 10900
o5.disabled = void 0;
// 10905
o5.className = "";
// 10906
o5.getAttribute = f508011038_468;
// 10908
f508011038_468.returns.push("");
// 10909
o5.parentNode = o10;
// undefined
o5 = null;
// 10910
o10.disabled = void 0;
// 10915
o10.className = "t1 logged-out ms-windows";
// 10916
o10.parentNode = o6;
// undefined
o10 = null;
// 10917
o6.disabled = void 0;
// 10922
o6.parentNode = o0;
// undefined
o6 = null;
// 10923
o1 = {};
// 10924
o1.type = "mouseover";
// 10925
o1.jQuery18305379572303500026 = void 0;
// 10929
o1.defaultPrevented = false;
// 10930
o1.returnValue = true;
// 10931
o1.getPreventDefault = void 0;
// 10932
o1.timeStamp = 1374696770601;
// 10933
o1.toElement = o2;
// 10934
o1.screenY = 739;
// 10935
o1.screenX = 159;
// 10936
o1.pageY = 574;
// 10937
o1.pageX = 91;
// 10938
o1.offsetY = 520;
// 10939
o1.offsetX = 1;
// 10940
o1.fromElement = o3;
// 10941
o1.clientY = 574;
// 10942
o1.clientX = 91;
// 10943
o1.buttons = void 0;
// 10944
o1.button = 0;
// 10945
o1.which = 0;
// 10946
o1.view = ow508011038;
// 10948
o1.target = o2;
// 10949
o1.shiftKey = false;
// 10950
o1.relatedTarget = o3;
// 10951
o1.metaKey = false;
// 10952
o1.eventPhase = 3;
// 10953
o1.currentTarget = o0;
// 10954
o1.ctrlKey = false;
// 10955
o1.cancelable = true;
// 10956
o1.bubbles = true;
// 10957
o1.altKey = false;
// 10958
o1.srcElement = o2;
// 10959
o1.relatedNode = void 0;
// 10960
o1.attrName = void 0;
// 10961
o1.attrChange = void 0;
// undefined
o1 = null;
// 10962
o2.nodeType = 1;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 10969
o2.disabled = void 0;
// 10974
o2.className = "dashboard";
// 10975
o2.parentNode = o3;
// 10991
f508011038_468.returns.push(null);
// 11001
f508011038_468.returns.push("");
// 11016
o1 = {};
// 11017
o1.type = "mouseout";
// 11018
o1.jQuery18305379572303500026 = void 0;
// 11022
o1.defaultPrevented = false;
// 11023
o1.returnValue = true;
// 11024
o1.getPreventDefault = void 0;
// 11025
o1.timeStamp = 1374696771073;
// 11026
o1.toElement = o3;
// 11027
o1.screenY = 739;
// 11028
o1.screenX = 159;
// 11029
o1.pageY = 1074;
// 11030
o1.pageX = 91;
// 11031
o1.offsetY = 1020;
// 11032
o1.offsetX = 1;
// 11033
o1.fromElement = o2;
// 11034
o1.clientY = 574;
// 11035
o1.clientX = 91;
// 11036
o1.buttons = void 0;
// 11037
o1.button = 0;
// 11038
o1.which = 0;
// 11039
o1.view = ow508011038;
// 11041
o1.target = o2;
// 11042
o1.shiftKey = false;
// 11043
o1.relatedTarget = o3;
// 11044
o1.metaKey = false;
// 11045
o1.eventPhase = 3;
// 11046
o1.currentTarget = o0;
// 11047
o1.ctrlKey = false;
// 11048
o1.cancelable = true;
// 11049
o1.bubbles = true;
// 11050
o1.altKey = false;
// 11051
o1.srcElement = o2;
// 11052
o1.relatedNode = void 0;
// 11053
o1.attrName = void 0;
// 11054
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 11084
f508011038_468.returns.push(null);
// 11094
f508011038_468.returns.push("");
// 11109
o1 = {};
// 11110
o1.type = "mouseover";
// 11111
o1.jQuery18305379572303500026 = void 0;
// 11115
o1.defaultPrevented = false;
// 11116
o1.returnValue = true;
// 11117
o1.getPreventDefault = void 0;
// 11118
o1.timeStamp = 1374696771082;
// 11119
o1.toElement = o3;
// 11120
o1.screenY = 739;
// 11121
o1.screenX = 159;
// 11122
o1.pageY = 1074;
// 11123
o1.pageX = 91;
// 11124
o1.offsetY = 1074;
// 11125
o1.offsetX = 15;
// 11126
o1.fromElement = o2;
// 11127
o1.clientY = 574;
// 11128
o1.clientX = 91;
// 11129
o1.buttons = void 0;
// 11130
o1.button = 0;
// 11131
o1.which = 0;
// 11132
o1.view = ow508011038;
// 11134
o1.target = o3;
// 11135
o1.shiftKey = false;
// 11136
o1.relatedTarget = o2;
// 11137
o1.metaKey = false;
// 11138
o1.eventPhase = 3;
// 11139
o1.currentTarget = o0;
// 11140
o1.ctrlKey = false;
// 11141
o1.cancelable = true;
// 11142
o1.bubbles = true;
// 11143
o1.altKey = false;
// 11144
o1.srcElement = o3;
// 11145
o1.relatedNode = void 0;
// 11146
o1.attrName = void 0;
// 11147
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 11170
f508011038_468.returns.push(null);
// 11180
f508011038_468.returns.push("");
// 11195
o1 = {};
// 11196
o1.type = "mouseout";
// 11197
o1.jQuery18305379572303500026 = void 0;
// 11201
o1.defaultPrevented = false;
// 11202
o1.returnValue = true;
// 11203
o1.getPreventDefault = void 0;
// 11204
o1.timeStamp = 1374696772627;
// 11205
o5 = {};
// 11206
o1.toElement = o5;
// 11207
o1.screenY = 732;
// 11208
o1.screenX = 218;
// 11209
o1.pageY = 567;
// 11210
o1.pageX = 150;
// 11211
o1.offsetY = 567;
// 11212
o1.offsetX = 74;
// 11213
o1.fromElement = o3;
// 11214
o1.clientY = 567;
// 11215
o1.clientX = 150;
// 11216
o1.buttons = void 0;
// 11217
o1.button = 0;
// 11218
o1.which = 0;
// 11219
o1.view = ow508011038;
// 11221
o1.target = o3;
// 11222
o1.shiftKey = false;
// 11223
o1.relatedTarget = o5;
// 11224
o1.metaKey = false;
// 11225
o1.eventPhase = 3;
// 11226
o1.currentTarget = o0;
// 11227
o1.ctrlKey = false;
// 11228
o1.cancelable = true;
// 11229
o1.bubbles = true;
// 11230
o1.altKey = false;
// 11231
o1.srcElement = o3;
// 11232
o1.relatedNode = void 0;
// 11233
o1.attrName = void 0;
// 11234
o1.attrChange = void 0;
// undefined
o1 = null;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 11257
f508011038_468.returns.push(null);
// 11267
f508011038_468.returns.push("");
// 11282
o1 = {};
// 11283
o1.type = "mouseover";
// 11284
o1.jQuery18305379572303500026 = void 0;
// 11288
o1.defaultPrevented = false;
// 11289
o1.returnValue = true;
// 11290
o1.getPreventDefault = void 0;
// 11291
o1.timeStamp = 1374696772674;
// 11292
o1.toElement = o5;
// 11293
o1.screenY = 732;
// 11294
o1.screenX = 218;
// 11295
o1.pageY = 567;
// 11296
o1.pageX = 150;
// 11297
o1.offsetY = 94;
// 11298
o1.offsetX = 59;
// 11299
o1.fromElement = o3;
// 11300
o1.clientY = 567;
// 11301
o1.clientX = 150;
// 11302
o1.buttons = void 0;
// 11303
o1.button = 0;
// 11304
o1.which = 0;
// 11305
o1.view = ow508011038;
// 11307
o1.target = o5;
// 11308
o1.shiftKey = false;
// 11309
o1.relatedTarget = o3;
// undefined
o3 = null;
// 11310
o1.metaKey = false;
// 11311
o1.eventPhase = 3;
// 11312
o1.currentTarget = o0;
// 11313
o1.ctrlKey = false;
// 11314
o1.cancelable = true;
// 11315
o1.bubbles = true;
// 11316
o1.altKey = false;
// 11317
o1.srcElement = o5;
// 11318
o1.relatedNode = void 0;
// 11319
o1.attrName = void 0;
// 11320
o1.attrChange = void 0;
// undefined
o1 = null;
// 11321
o5.nodeType = 1;
// undefined
fo508011038_1_jQuery18305379572303500026.returns.push(1);
// 11328
o5.disabled = void 0;
// 11333
o5.className = "flex-module";
// 11334
o1 = {};
// 11335
o5.parentNode = o1;
// undefined
o5 = null;
// 11336
o1.disabled = void 0;
// 11341
o1.className = "module site-footer ";
// 11342
o1.parentNode = o2;
// undefined
o1 = null;
// undefined
o2 = null;
// 11365
f508011038_468.returns.push(null);
// 11375
f508011038_468.returns.push("");
// 11390
o1 = {};
// 11391
o1.type = "beforeunload";
// 11392
o1.jQuery18305379572303500026 = void 0;
// 11396
o1.defaultPrevented = false;
// 11397
o1.returnValue = true;
// 11398
o1.getPreventDefault = void 0;
// 11399
o1.timeStamp = 1374696773143;
// 11400
o1.which = void 0;
// 11401
o1.view = void 0;
// 11403
o1.target = o0;
// 11404
o1.shiftKey = void 0;
// 11405
o1.relatedTarget = void 0;
// 11406
o1.metaKey = void 0;
// 11407
o1.eventPhase = 2;
// 11408
o1.currentTarget = ow508011038;
// 11409
o1.ctrlKey = void 0;
// 11410
o1.cancelable = true;
// 11411
o1.bubbles = false;
// 11412
o1.altKey = void 0;
// 11413
o1.srcElement = o0;
// 11414
o1.relatedNode = void 0;
// 11415
o1.attrName = void 0;
// 11416
o1.attrChange = void 0;
// undefined
o1 = null;
// 11418
f508011038_2628 = function() { return f508011038_2628.returns[f508011038_2628.inst++]; };
f508011038_2628.returns = [];
f508011038_2628.inst = 0;
// 11419
o4.replaceState = f508011038_2628;
// undefined
o4 = null;
// 11420
o0.title = "Twitter / Search - javascript";
// undefined
o0 = null;
// 11421
f508011038_2628.returns.push(undefined);
// 11422
// 0
JSBNG_Replay$ = function(real, cb) { if (!real) return;
// 979
geval("Function.prototype.bind = function(to) {\n    var f = this;\n    return function() {\n        Function.prototype.apply.call(f, to, arguments);\n    };\n};");
// 980
geval("Function.prototype.bind = function(to) {\n    var f = this;\n    return function() {\n        Function.prototype.apply.call(f, to, arguments);\n    };\n};");
// 982
geval("JSBNG__document.documentElement.className = ((((JSBNG__document.documentElement.className + \" \")) + JSBNG__document.documentElement.getAttribute(\"data-fouc-class-names\")));");
// 992
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})();");
// 998
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})();");
// 1005
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(\"JSBNG__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.JSBNG__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(\"JSBNG__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.JSBNG__onreadystatechange = function(_, a) {\n                            if (((((a || !c.readyState)) || /loaded|complete/.test(c.readyState)))) {\n                                c.JSBNG__onload = c.JSBNG__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.JSBNG__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.JSBNG__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.JSBNG__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.JSBNG__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.JSBNG__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.ab65100d806a31abbb8c2b07c8fae7afbf2d1242.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/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.f66654100a6bd9d7e3a9cd575ee1d4bf526a8986.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/with_item_actions\",\"app/ui/direct_message_dialog\",\"app/boot/direct_messages\",\"app/data/profile_popup\",\"app/data/profile_popup_scribe\",\"app/ui/user_actions_dropdown\",\"app/ui/with_user_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.0c72f0b55560d18392e0530b987f9aafe1a673bf.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/utils/prefetch_core_css_bundle\",\"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.df7c4b2dab8741a44457d58bdd1fa779cc427199.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.verifyHost = function(a) {\n                return ((a && a.match(/^(staging[0-9]+\\.[^\\.]+\\.twitter.com|twitter\\.com|localhost\\.twitter\\.com)(\\:[0-9]+)?$/)));\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                        ((this.verifyHost(c) || (c = \"twitter.com\"))), 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.JSBNG__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, \"JSBNG__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/connect/timeline\",\"/i/discover/timeline\",\"/i/search/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};");
// 1490
JSBNG_Replay.s19277ddcd28db6dd01a1d67d562dfbbffa3c6a17_4[0]();
// 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            }), this.animateTweetOpen({\n                expando: b,\n                complete: function() {\n                    this.afterOpeningTweet(b);\n                }.bind(this)\n            });\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.update_module_html && this.trigger(\"uiRefreshTrends\", 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.update_module_html && this.trigger(\"uiRefreshTrends\", 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.JSBNG__item.woeid == -1))) {\n                this.trigger(\"uiTrendsLocationSearchNoResults\");\n                return;\n            }\n        ;\n        ;\n            this.currentSelection = b.JSBNG__item, this.changeLocationInfo({\n                woeid: b.JSBNG__item.woeid,\n                JSBNG__name: b.JSBNG__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: 94748\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 uiShortcutEnter\", {\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/utils/prefetch_core_css_bundle\", [\"module\",\"require\",\"exports\",\"core/component\",], function(module, require, exports) {\n    function PrefetchCoreCssBundle() {\n        this.prefetch = function() {\n            var a, b, c, d = this.attr.href;\n            a = $(\"\\u003Ciframe src=\\\"javascript:false\\\" style=\\\"width:0;height:0;border:0\\\"/\\u003E\"), $(\"script\").last().before(a);\n            try {\n                b = a[0].contentWindow.JSBNG__document;\n            } catch (e) {\n                c = doc.domain, a[0].src = ((((\"javascript:var d=document.open();d.domain=\\\"\" + c)) + \"\\\";void(0);\")), b = a[0].contentWindow.JSBNG__document;\n            };\n        ;\n            b.open()._load = function() {\n                var a = this, b = a.createElement(\"link\");\n                ((c && (this.domain = c))), b.rel = \"stylesheet\", b.type = \"text/css\", b.media = \"prefetch\", b.href = d, JSBNG__setTimeout(function() {\n                    a.body.appendChild(b);\n                }, 0);\n            }, b.write(\"\\u003Cbody onload=\\\"document._load()\\\"\\u003E\"), b.close();\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(window, \"load\", this.prefetch);\n        });\n    };\n;\n    var defineComponent = require(\"core/component\");\n    module.exports = defineComponent(PrefetchCoreCssBundle);\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\",\"app/utils/prefetch_core_css_bundle\",], 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\"), PrefetchCoreCssBundle = require(\"app/utils/prefetch_core_css_bundle\");\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))), ((a.prefetchCoreCssBundle && PrefetchCoreCssBundle.attachTo(JSBNG__document, {\n            href: a.prefetchCoreCssBundle\n        })));\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                    JSBNG__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                    JSBNG__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                        JSBNG__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].JSBNG__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].JSBNG__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\", 236399) : 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.notifyDropdownToHide = function() {\n            this.trigger(\"uiCloseDropdowns\");\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.notifyDropdownToHide))), 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.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.processGrid.bind(this), 50);\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            this.markFailedMedia(a), 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                    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(339120, 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 + 339834)), i), g.lineTo(((n + 339851)), 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                    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 - 340524)), i), g.lineTo(((n - 340541)), 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.currentRow++, this.setCurrentRow(), 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), 50);\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
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.$text.toggleClass(\"notie\", !$.browser.msie), 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.queryData.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(\"JSBNG__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(\"JSBNG__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(\"JSBNG__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.queryData.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(\"JSBNG__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(\"JSBNG__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(\"JSBNG__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 = 92708, 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            datasourceOptions: {\n            },\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;\n            var c = utils.merge(this.attr.datasourceOptions, {\n                query: b.value,\n                tweetContext: b.tweetContext\n            });\n            this.trigger(\"uiNeedsTypeaheadSuggestions\", {\n                datasources: this.datasources,\n                queryData: c,\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                JSBNG__item: i\n            }), this.forceHide();\n        }, this.getItemData = function(a) {\n            return a.data(\"JSBNG__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                JSBNG__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.queryData.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.queryData.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.realNameRegexp = /([A-Z][\\w]*\\s[A-Z][\\w]*)|([A-Z][\\w]{3,})/g, this.defaultAttrs({\n            inputSelector: \"#search-query\",\n            buttonSelector: \".nav-search\",\n            completeAllEntities: !1,\n            includeTweetContext: !1,\n            tweetContextEnabled: !1,\n            allowAccountsWithoutAtSign: !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                    var c = ((b.screenName && !b.listSlug)), d = ((this.attr.completeAllEntities && ((b.cashtag || b.hashtag)))), e = ((((this.position > b.indices[0])) && ((this.position <= b.indices[1]))));\n                    ((((((c || d)) && e)) && (a = this.text.slice(b.indices[0], b.indices[1]))));\n                }, this), ((this.attr.allowAccountsWithoutAtSign && (a = ((a || stringUtils.wordAtPosition(this.text, this.position, this.realNameRegexp))))));\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.JSBNG__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.JSBNG__item.screen_name)), this.currentQuery = b.JSBNG__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                allowAccountsWithoutAtSign: this.attr.typeaheadData.fullNameMatchingInCompose\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                datasourceOptions: {\n                    accountsWithoutAtSignLocalOnly: !0,\n                    accountsWithoutAtSignRequiresFollow: this.attr.typeaheadData.fullNameMatchingInComposeRequiresFollow,\n                    topicsMustStartWithHashtag: !0\n                },\n                deciders: this.attr.typeaheadData\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.JSBNG__item ? a.JSBNG__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.isPublic || (this.$privacyInput[1].checked = !0))), this.$saveButton.attr(\"data-list-id\", this.listId).attr(\"data-operation\", \"update\"), this.toggleSaveButtonDisabled(), this.modified = !0, this.$descriptionInput.JSBNG__on(\"keyup\", this.toggleSaveButtonDisabled.bind(this)), this.$privacyInput.JSBNG__on(\"change\", this.toggleSaveButtonDisabled.bind(this));\n        }, this.revertModifications = function() {\n            ((this.modified && (this.revertDialog(), this.$editor.JSBNG__find(\"input,textarea\").val(\"\"), this.$descriptionInput.off(\"keyup\"), this.$privacyInput.off(\"change\"), this.modified = !1)));\n        }, this.revertDialog = function() {\n            this.$modalTitle.text(this.originalTitle), this.$saveButton.removeAttr(\"data-list-id\").removeAttr(\"data-operation\"), ((this.isPublic || (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.updateState = function(a, b) {\n            this.listId = b.init_data.list_id, this.isPublic = b.init_data.is_public;\n        }, this.after(\"initialize\", function(a) {\n            this.listId = a.list_id, this.isPublic = a.is_public, 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), this.JSBNG__on(JSBNG__document, \"uiPageChanged\", this.updateState);\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        }), this.pollConversationList = function(a, b) {\n            this.requestConversationList(null, {\n                since_id: this.lastMessageId\n            });\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            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;\n            ((((((c.JSBNG__status === \"ok\")) && ((c.response != null)))) && this.triggerUnreadCount(null, {\n                msgCount: c.response\n            })));\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)));\n            var d = function(a) {\n                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                    fromInitData: !0\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(\"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/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/direct_message_dialog\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/ui/with_dialog\",\"app/ui/with_position\",\"app/ui/with_timestamp_updating\",\"app/utils/string\",\"app/ui/with_item_actions\",], function(module, require, exports) {\n    function directMessageDialog() {\n        this.defaultAttrs({\n            itemType: \"user\",\n            dialogSelector: \"#dm_dialog\",\n            closeSelector: \".js-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-item\",\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            ((((b && b.fromInitData)) && this.JSBNG__on(\"uiDialogClosed\", function() {\n                ((this.isDialogNavigation || this.trigger(\"uiNavigate\", {\n                    href: \"/\"\n                })));\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            if (((a && this.isProfileLink($(a.target))))) {\n                a.preventDefault(), this.isDialogNavigation = !0, this.closeImmediately();\n                return;\n            }\n        ;\n        ;\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, ((((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-item[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.JSBNG__item ? b.JSBNG__item.screen_name : b.screen_name)), d = ((b.JSBNG__item ? b.JSBNG__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.JSBNG__item ? b.JSBNG__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            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.$dialogContainer.hasClass(this.attr.classConversation) && (this.lastMessageIdInConversation = -1, this.renderConversationView(null, {\n                screen_name: this.$dialogContainer.JSBNG__find(\".dm-convo\").attr(\"data-thread-id\"),\n                JSBNG__name: this.$dialogContainer.JSBNG__find(\".dm_dialog_real_name\").text()\n            })))))))), 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.isProfileLink = function(a) {\n            return !!a.closest(\"a.js-user-profile-link\").length;\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\"), withItemActions = require(\"app/ui/with_item_actions\"), DirectMessageDialog = defineComponent(directMessageDialog, withDialog, withPosition, withTimestampUpdating, withItemActions), 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: a.typeaheadData,\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/user_actions_dropdown\", [\"module\",\"require\",\"exports\",\"core/component\",\"app/data/ddg\",\"app/ui/with_dropdown\",], function(module, require, exports) {\n    function userActionsDropdown() {\n        this.defaultAttrs({\n            toggler: \".user-dropdown\",\n            dropdownThresholdSelector: \".dropdown-threshold\",\n            dropdownMenuSelector: \".dropdown-menu\"\n        }), this.scrollIntoView = function() {\n            ddg.impression(\"mobile_notifications_tweaks_608\");\n            var a = this.$node.closest(this.attr.dropdownThresholdSelector), b, c;\n            ((a.length && (b = this.$node.JSBNG__find(this.attr.dropdownMenuSelector), c = ((((b.offset().JSBNG__top + b.JSBNG__outerHeight())) - ((a.offset().JSBNG__top + a.height())))), ((((c > 0)) && a.animate({\n                scrollTop: ((a.scrollTop() + c))\n            }))))));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"uiDropdownOpened\", this.scrollIntoView), this.toggleDisplay();\n        });\n    };\n;\n    var defineComponent = require(\"core/component\"), ddg = require(\"app/data/ddg\"), withDropdown = require(\"app/ui/with_dropdown\"), UserActionsDropdown = defineComponent(userActionsDropdown, withDropdown);\n    module.exports = UserActionsDropdown;\n});\ndefine(\"app/ui/with_user_actions\", [\"module\",\"require\",\"exports\",\"core/compose\",\"core/i18n\",\"core/utils\",\"app/ui/with_interaction_data\",\"app/ui/user_actions_dropdown\",\"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-actions .dropdown\",\n            dropdownItemSelector: \".user-actions .dropdown.open .dropdown-menu li\",\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.stopPropagation(), this.trigger($(a.target), \"uiCloseDropdowns\");\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            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.trigger($(a.target), \"uiCloseDropdowns\"), 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)))), this.trigger(b, \"uiCloseDropdowns\");\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.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.initializeDropdown = function() {\n            ((this.dropdownInitialized || (UserActionsDropdown.attachTo(this.attr.dropdownSelector), this.dropdownInitialized = !0)));\n        }, this.after(\"initialize\", function() {\n            this.JSBNG__on(\"click\", {\n                dropdownSelector: this.initializeDropdown\n            });\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                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, \"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\"), withInteractionData = require(\"app/ui/with_interaction_data\"), UserActionsDropdown = require(\"app/ui/user_actions_dropdown\"), StringUtils = require(\"app/utils/string\");\n    module.exports = withUserActions;\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.query.replace(\"@\", \"\")), c = this.getPotentiallyMatchingIds(b), d = this.getAccountsFromIds(c), e = d.filter(this.matcher(b));\n            return ((a.accountsWithoutAtSignRequiresFollow && (e = e.filter(function(a) {\n                return ((a.social_context && a.social_context.following));\n            })))), 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.requiresRemoteSuggestions(a.queryData) && 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(a) {\n            return ((((a && a.accountsWithoutAtSignLocalOnly)) ? ((this.attr.remoteQueriesEnabled && ((helpers.getFirstChar(a.query) == \"@\")))) : 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(a) {\n            return !1;\n        }, this.getLocalSuggestions = function(a) {\n            return ((((!a || !a.query)) ? this.attr.items : this.attr.items.filter(function(b) {\n                return ((b.JSBNG__name.indexOf(a.query) == 0));\n            }).slice(0, this.attr.limit)));\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 || ((a.query === \"\")))) ? this.items.slice(0, this.attr.limit) : this.items.filter(function(b) {\n                return ((b.JSBNG__name.indexOf(a.query) == 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                normalized_name: a.query.toLowerCase(),\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, d = a.toLowerCase();\n            for (var e = 0; ((e < b.length)); e++) {\n                if (((b[e].normalized_name === d))) {\n                    c = e;\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            var b = a.query.toLowerCase(), c = helpers.getFirstChar(b);\n            if (((((this.attr.remoteType == \"hashtags\")) && (([\"$\",\"#\",].indexOf(c) === -1))))) {\n                return [];\n            }\n        ;\n        ;\n            var d = ((this.adjacencyList[c] || []));\n            d = this.getTopicObjectsFromStrings(d);\n            var e = d.filter(function(a) {\n                return ((a.topic.toLowerCase().indexOf(b) === 0));\n            }, this);\n            return e.sort(function(a, b) {\n                return ((b.rounded_score - a.rounded_score));\n            }.bind(this)), e = e.slice(0, this.attr.limit), e;\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(a) {\n            var b = helpers.getFirstChar(a.query);\n            return ((((a.topicsMustStartWithHashtag && (([\"$\",\"#\",].indexOf(b) === -1)))) ? !1 : 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                var b = ((a.topic || a.hashtag));\n                e[b.toLowerCase()] = !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                var b = ((a.topic || a.hashtag));\n                ((e[b.toLowerCase()] || 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 || ((a.query == \"\"))))) {\n                return [];\n            }\n        ;\n        ;\n            var b = a.query, c;\n            return ((((this.currentPage == \"JSBNG__home\")) ? c = {\n                text: _(\"Search for {{strong_query}} from people you follow\"),\n                query: b,\n                rewrittenQuery: b,\n                mode: \"timeline\"\n            } : ((((this.currentPage == \"profile\")) ? c = {\n                text: _(\"Search for {{strong_query}} in {{screen_name}}'s timeline\", {\n                    strong_query: \"{{strong_query}}\",\n                    screen_name: this.currentProfileUser\n                }),\n                query: b,\n                rewrittenQuery: ((((b + \" from:\")) + this.currentProfileUser))\n            } : ((((this.currentPage == \"me\")) && (c = {\n                text: _(\"Search for {{strong_query}} in your timeline\"),\n                query: b,\n                rewrittenQuery: ((((b + \" from:\")) + this.currentProfileUser))\n            }))))))), ((c ? [c,] : []));\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(a) {\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            };\n            if (((a && a.query))) {\n                var e = d(a.query);\n                c = this.attr.items.filter(function(a) {\n                    return ((d(a.JSBNG__name).indexOf(e) == 0));\n                });\n            }\n        ;\n        ;\n            return ((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                queryData: 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, 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.processSuggestionsByDataset(c), this.triggerSuggestionsEvent(b.id, b.queryData, c, !1), this.makeQueuedRemoteRequestIfPossible();\n        }, this.getRemoteSuggestions = function(a, b, c, d) {\n            var e = d.some(function(a) {\n                return ((((this.datasources[a] && this.datasources[a].requiresRemoteSuggestions)) && this.datasources[a].requiresRemoteSuggestions(b)));\n            }, this);\n            if (((((!e || !b)) || !b.query))) {\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);\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.queryData, 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) {\n            var e = {\n            };\n            d.forEach(function(a) {\n                if (((((this[a] && this[a].requiresRemoteSuggestions)) && this[a].requiresRemoteSuggestions(b)))) {\n                    var c = this[a];\n                    ((e[c.attr.remotePath] ? e[c.attr.remotePath].push(c) : e[c.attr.remotePath] = [c,]));\n                }\n            ;\n            ;\n            }, this.datasources);\n            {\n                var fin69keys = ((window.top.JSBNG_Replay.forInKeys)((e))), fin69i = (0);\n                var f;\n                for (; (fin69i < fin69keys.length); (fin69i++)) {\n                    ((f) = (fin69keys[fin69i]));\n                    {\n                        this.executeRemoteRequest(a, b, c, e[f]);\n                        break;\n                    };\n                };\n            };\n        ;\n        }, this.executeRemoteRequest = function(a, b, c, d) {\n            var e = {\n                id: a,\n                queryData: b,\n                suggestions: c,\n                datasources: d\n            };\n            if (!this.canMakeRemoteRequest(e)) {\n                return;\n            }\n        ;\n        ;\n            if (((!this.attr.tweetContextEnabled || ((b.tweetContext && ((b.tweetContext.length > 1000))))))) {\n                b.tweetContext = undefined;\n            }\n        ;\n        ;\n            this.adjustRequestCount(1), this.get({\n                url: d[0].attr.remotePath,\n                headers: {\n                    \"X-Phx\": !0\n                },\n                data: {\n                    q: b.query,\n                    tweet_context: b.tweetContext,\n                    count: this.attr.limit,\n                    result_type: d.map(function(a) {\n                        return a.attr.remoteType;\n                    }).join(\",\")\n                },\n                eventData: e,\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                var b = ((a.topic || a.JSBNG__name));\n                return !d[b.toLowerCase()];\n            };\n        ;\n            if (((!c[a] || !e()))) {\n                return;\n            }\n        ;\n        ;\n            var d = {\n            };\n            c[a].forEach(function(a) {\n                var b = ((a.JSBNG__name || a.topic));\n                d[b.toLowerCase()] = !0;\n            }), b.forEach(function(a) {\n                ((((a in c)) && (c[a] = c[a].filter(f))));\n            });\n        }, this.processSuggestionsByDataset = function(a) {\n            this.dedupSuggestions(\"recentSearches\", [\"topics\",], a), this.truncateTopicsWithRecentSearches(a);\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.queryData == \"undefined\"))) {\n                throw \"No query data specified\";\n            }\n        ;\n        ;\n            if (((typeof b.queryData.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.queryData, b.datasources);\n            this.processSuggestionsByDataset(c), this.triggerSuggestionsEvent(b.id, b.queryData, c, !0);\n            if (((((b.query === \"@\")) || ((b.localOnly === !0))))) {\n                return;\n            }\n        ;\n        ;\n            this.getRemoteSuggestions(b.id, b.queryData, 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.JSBNG__item.woeid, ((((b.JSBNG__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.JSBNG__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.JSBNG__item))) {\n                this.select(\"inputSelector\").val(b.JSBNG__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.JSBNG__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(((278692 * 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: \"/i/notifications\",\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            };\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 = 333371, 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});");
// 11423
cb(); return null; }
finalize(); })();
