Overview

URLwww.linkedin.comhttps:///pulse/4skasriya1844-666-4660-quickbooks-number-24-hour-support-susan-bill
IP91.225.248.129
ASNAS197612 LinkedIn Corporation
Location United States
Report completed2017-01-11 22:35:20 CET
StatusLoading report..
urlQuery Alerts No alerts detected


Settings

UserAgentMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Referer
Pool
Access Levelpublic


Intrusion Detection Systems

Snort /w Sourcefire VRT No alerts detected
Suricata /w Emerging Threats Pro No alerts detected


Blacklists

Fortinet's Web Filter / fortiguard.com No alerts detected
MDL / malwaredomainlist.com No alerts detected
DNS-BH / malwaredomains.com No alerts detected
mnemonic secure DNS / mnemonic.no No alerts detected
OpenPhish / openphish.com No alerts detected
PhishTank / phishtank.com No alerts detected
Spamhaus DBL / spamhaus.org No alerts detected


Files Captured



Recent reports on same IP/ASN/Domain

Last 6 reports on IP: 91.225.248.129

Date UQ / IDS / BL URL IP
2017-01-18 04:34:140 - 0 - 0www.linkedin.comhttps:///pulse/fox-noah-rubin-v-s-roger-federer-live-stream-tennis-pl (...)91.225.248.129
2017-01-18 00:26:490 - 0 - 0www.linkedin.comhttps:///pulse/best-copyttyps-welcomeisraelpres18443302330-netgear-ro (...)91.225.248.129
2017-01-18 00:25:280 - 0 - 0www.linkedin.comhttps:///pulse/best-copyyyttyps-welcomeisraelpres18442349752-netgear- (...)91.225.248.129
2017-01-17 23:31:050 - 0 - 0www.linkedin.comhttps:///pulse/ncaamek-texas-vs-baylor-live-stream-18-01-2017-onl-ine (...)91.225.248.129
2017-01-17 23:30:260 - 0 - 0www.linkedin.comhttps:///pulse/welcomeisrealpresiaqwerr18446664660quickbooks-247-supp (...)91.225.248.129
2017-01-17 23:28:340 - 0 - 0www.linkedin.comhttps:///pulse/laudduuubaskar-welcomeisraelpres1844-234-9752-netgear- (...)91.225.248.129

Last 6 reports on ASN: AS197612 LinkedIn Corporation

Date UQ / IDS / BL URL IP
2017-01-18 04:34:140 - 0 - 0www.linkedin.comhttps:///pulse/fox-noah-rubin-v-s-roger-federer-live-stream-tennis-playoffs-isl (...)91.225.248.129
2017-01-18 00:26:490 - 0 - 0www.linkedin.comhttps:///pulse/best-copyttyps-welcomeisraelpres18443302330-netgear-router-tony- (...)91.225.248.129
2017-01-18 00:25:280 - 0 - 0www.linkedin.comhttps:///pulse/best-copyyyttyps-welcomeisraelpres18442349752-netgear-jonell-rob (...)91.225.248.129
2017-01-17 23:31:050 - 0 - 0www.linkedin.comhttps:///pulse/ncaamek-texas-vs-baylor-live-stream-18-01-2017-onl-ine-adhar-alo91.225.248.129
2017-01-17 23:30:260 - 0 - 0www.linkedin.comhttps:///pulse/welcomeisrealpresiaqwerr18446664660quickbooks-247-support-susan- (...)91.225.248.129
2017-01-17 23:28:340 - 0 - 0www.linkedin.comhttps:///pulse/laudduuubaskar-welcomeisraelpres1844-234-9752-netgear-jonell-rob (...)91.225.248.129

Last 6 reports on domain: www.linkedin.com

Date UQ / IDS / BL URL IP
2017-01-18 04:34:140 - 0 - 0www.linkedin.comhttps:///pulse/fox-noah-rubin-v-s-roger-federer-live-stream-tennis-playoffs-isl (...)91.225.248.129
2017-01-18 02:23:410 - 0 - 0www.linkedin.comhttps:///pulse/fox-australian-open-live-stream-tennis-playoffs-all-match-islam185.63.144.1
2017-01-18 00:35:410 - 0 - 0www.linkedin.comhttps:///pulse/ttyps-welcomeisraelpres00218442349752-netgear-router-technical-s (...)185.63.144.1
2017-01-18 00:26:490 - 0 - 0www.linkedin.comhttps:///pulse/best-copyttyps-welcomeisraelpres18443302330-netgear-router-tony- (...)91.225.248.129
2017-01-18 00:25:280 - 0 - 0www.linkedin.comhttps:///pulse/best-copyyyttyps-welcomeisraelpres18442349752-netgear-jonell-rob (...)91.225.248.129
2017-01-18 00:16:130 - 0 - 0www.linkedin.comhttps:///pulse/payaaaa-netgear-router-tech-support-customer-service-phone-robbi (...)185.63.144.1



JavaScript

Executed Scripts (54)


Executed Evals (77)

#1 JavaScript::Eval (size: 4236, repeated: 1)

Inject.INTERNAL.executor.exec0.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec0.innerFn = function() {
            // id: javascripts/news/page/detailsStream uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fpage%2FdetailsStream.js
            var module = Inject.INTERNAL.executor.exec0.module,
                require = Inject.INTERNAL.executor.exec0.require,
                define = Inject.INTERNAL.executor.exec0.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            require(["jquery", "underscore", "backbone", "scripts/core/Events", "../stream/views/DetailsAppView", "../stream/appTracking", "javascripts/util/UrlUtils", "javascripts/news/listeners/followListener"], function($, _, Backbone, LiEvents, DetailsAppView, appTracking, UrlUtils, followListener) {
                var $app = $("#stream-app"),
                    LIKE_UETRK = "LIKE",
                    UNLIKE_UETRK = "UNLIKE",
                    CLICK_UETRK = "CLICK",
                    FOLLOW_UETRK = "FOLLOW",
                    UNFOLLOW_UETRK = "UNFOLLOW",
                    COMMENT_UETRK = "COMMENT",
                    DELETE_CMNT_UETRK = "DELETE_COMMENT",
                    streamApp;
                streamApp = (new DetailsAppView({
                    el: $app,
                    viewLimit: 1
                })).on("select", function(articleId) {}).on("view", function(articleId, data) {
                    var model = streamApp.articles.collection.get(articleId),
                        path = UrlUtils.parseUrl(model.get("url")).pathname,
                        trackingParam = data.trackingParam || null,
                        title = model.get("title"),
                        authorFullName = model.get("authorFullName");
                    appTracking.track("ARTICLE_VIEW", model.get("trackingToken"), {
                        trk: trackingParam
                    });
                    if (window._gaq) window._gaq.push(["_trackPageview"]);
                    if (data.viewCountAll > 1) {
                        if (window.pSUPERFLY) window.pSUPERFLY.virtualPage(path, title);
                        if (streamApp.cbClient) streamApp.cbClient.trackPage(path, title)
                    } else if (data.viewCountAll === 1) if (streamApp.cbClient) streamApp.cbClient.track({
                        title: title,
                        path: path,
                        authors: authorFullName
                    })
                }).on("view:delay", function(articleId, data) {
                    var model = streamApp.articles.collection.get(articleId),
                        trackingParam = data.trackingParam || null;
                    appTracking.track("ARTICLE_VIEW_DELAY", model.get("trackingToken"), {
                        trk: trackingParam
                    })
                });
                followListener.start($app);
                LiEvents.on({
                    "follow-toggler:follow:success": function(followeeId, inst) {
                        appTracking.trackByElement(FOLLOW_UETRK, inst._$el)
                    },
                    "follow-toggler:unfollow:success": function(followeeId, inst) {
                        appTracking.trackByElement(UNFOLLOW_UETRK, inst._$el)
                    },
                    "likeToggler:like:success": function(inst) {
                        appTracking.trackByElement(LIKE_UETRK, inst._$el)
                    },
                    "likeToggler:unlike:success": function(inst) {
                        appTracking.trackByElement(UNLIKE_UETRK, inst._$el)
                    },
                    "PulseComments:like:success": function(el) {
                        appTracking.trackByElement(LIKE_UETRK, el)
                    },
                    "PulseComments:unlike:success": function(el) {
                        appTracking.trackByElement(UNLIKE_UETRK, el)
                    },
                    "PulseComments:reply:open": function(el) {
                        appTracking.trackByElement(CLICK_UETRK, el)
                    },
                    "PulseComments:reply:cancel": function(el) {
                        appTracking.trackByElement(CLICK_UETRK, el)
                    },
                    "PulseComments:comment:success": function(el) {
                        appTracking.trackByElement(COMMENT_UETRK, el)
                    },
                    "PulseComments:reply:success": function(el) {
                        appTracking.trackByElement(COMMENT_UETRK, el)
                    },
                    "PulseComments:delete:open": function(el) {
                        appTracking.trackByElement(CLICK_UETRK, el)
                    },
                    "PulseComments:delete:success": function(el) {
                        appTracking.trackByElement(DELETE_CMNT_UETRK, el)
                    },
                    "PulseComments:flag:success": function(el) {
                        appTracking.trackByElement(CLICK_UETRK, el)
                    }
                });
                streamApp.articles.selectAt(0, {
                    quiet: true
                });
                Backbone.history.start({
                    pushState: true,
                    hashChange: false,
                    silent: true
                });
                streamApp.trigger("dexter:historyStarted")
            });

            Inject.INTERNAL.executor.exec0.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/page/detailsStream", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fpage%2FdetailsStream.js");
        try {
            Inject.INTERNAL.executor.exec0.innerFn.call(Inject.INTERNAL.executor.exec0.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec0.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fpage%2FdetailsStream.js

#2 JavaScript::Eval (size: 62365, repeated: 1)

Inject.INTERNAL.executor.exec1.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec1.innerFn = function() {
            // id: lib/backbone/1.1.2/backbone.js uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fbackbone%2F1.1.2%2Fbackbone.js
            var module = Inject.INTERNAL.executor.exec1.module,
                require = Inject.INTERNAL.executor.exec1.require,
                define = Inject.INTERNAL.executor.exec1.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            //     Backbone.js 1.1.2
            //     (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
            //     Backbone may be freely distributed under the MIT license.
            //     For all details and documentation:
            //     http://backbonejs.org
            (function(root, factory) {

                // Set up Backbone appropriately for the environment. Start with AMD.
                if (typeof define === 'function' && define.amd) {
                    define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
                        // Export global even in AMD case in case this script is loaded with
                        // others that may still expect a global Backbone.
                        root.Backbone = factory(root, exports, _, $);
                    });

                    // Next for Node.js or CommonJS. jQuery may not be needed as a module.
                } else if (typeof exports !== 'undefined') {
                    var _ = require('underscore');
                    factory(root, exports, _);

                    // Finally, as a browser global.
                } else {
                    root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
                }

            }(this, function(root, Backbone, _, $) {

                // Initial Setup
                // -------------
                // Save the previous value of the `Backbone` variable, so that it can be
                // restored later on, if `noConflict` is used.
                var previousBackbone = root.Backbone;

                // Create local references to array methods we'll want to use later.
                var array = [];
                var push = array.push;
                var slice = array.slice;
                var splice = array.splice;

                // Current version of the library. Keep in sync with `package.json`.
                Backbone.VERSION = '1.1.2';

                // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
                // the `$` variable.
                Backbone.$ = $;

                // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable
                // to its previous owner. Returns a reference to this Backbone object.
                Backbone.noConflict = function() {
                    root.Backbone = previousBackbone;
                    return this;
                };

                // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option
                // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and
                // set a `X-Http-Method-Override` header.
                Backbone.emulateHTTP = false;

                // Turn on `emulateJSON` to support legacy servers that can't deal with direct
                // `application/json` requests ... will encode the body as
                // `application/x-www-form-urlencoded` instead and will send the model in a
                // form param named `model`.
                Backbone.emulateJSON = false;

                // Backbone.Events
                // ---------------
                // A module that can be mixed in to *any object* in order to provide it with
                // custom events. You may bind with `on` or remove with `off` callback
                // functions to an event; `trigger`-ing an event fires all callbacks in
                // succession.
                //
                //     var object = {};
                //     _.extend(object, Backbone.Events);
                //     object.on('expand', function(){ alert('expanded'); });
                //     object.trigger('expand');
                //
                var Events = Backbone.Events = {

                    // Bind an event to a `callback` function. Passing `"all"` will bind
                    // the callback to all events fired.
                    on: function(name, callback, context) {
                        if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
                        this._events || (this._events = {});
                        var events = this._events[name] || (this._events[name] = []);
                        events.push({
                            callback: callback,
                            context: context,
                            ctx: context || this
                        });
                        return this;
                    },

                    // Bind an event to only be triggered a single time. After the first time
                    // the callback is invoked, it will be removed.
                    once: function(name, callback, context) {
                        if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;
                        var self = this;
                        var once = _.once(function() {
                            self.off(name, once);
                            callback.apply(this, arguments);
                        });
                        once._callback = callback;
                        return this.on(name, once, context);
                    },

                    // Remove one or many callbacks. If `context` is null, removes all
                    // callbacks with that function. If `callback` is null, removes all
                    // callbacks for the event. If `name` is null, removes all bound
                    // callbacks for all events.
                    off: function(name, callback, context) {
                        var retain, ev, events, names, i, l, j, k;
                        if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;
                        if (!name && !callback && !context) {
                            this._events = void 0;
                            return this;
                        }
                        names = name ? [name] : _.keys(this._events);
                        for (i = 0, l = names.length; i < l; i++) {
                            name = names[i];
                            if (events = this._events[name]) {
                                this._events[name] = retain = [];
                                if (callback || context) {
                                    for (j = 0, k = events.length; j < k; j++) {
                                        ev = events[j];
                                        if ((callback && callback !== ev.callback && callback !== ev.callback._callback) || (context && context !== ev.context)) {
                                            retain.push(ev);
                                        }
                                    }
                                }
                                if (!retain.length) delete this._events[name];
                            }
                        }

                        return this;
                    },

                    // Trigger one or many events, firing all bound callbacks. Callbacks are
                    // passed the same arguments as `trigger` is, apart from the event name
                    // (unless you're listening on `"all"`, which will cause your callback to
                    // receive the true name of the event as the first argument).
                    trigger: function(name) {
                        if (!this._events) return this;
                        var args = slice.call(arguments, 1);
                        if (!eventsApi(this, 'trigger', name, args)) return this;
                        var events = this._events[name];
                        var allEvents = this._events.all;
                        if (events) triggerEvents(events, args);
                        if (allEvents) triggerEvents(allEvents, arguments);
                        return this;
                    },

                    // Tell this object to stop listening to either specific events ... or
                    // to every object it's currently listening to.
                    stopListening: function(obj, name, callback) {
                        var listeningTo = this._listeningTo;
                        if (!listeningTo) return this;
                        var remove = !name && !callback;
                        if (!callback && typeof name === 'object') callback = this;
                        if (obj)(listeningTo = {})[obj._listenId] = obj;
                        for (var id in listeningTo) {
                            obj = listeningTo[id];
                            obj.off(name, callback, this);
                            if (remove || _.isEmpty(obj._events)) delete this._listeningTo[id];
                        }
                        return this;
                    }

                };

                // Regular expression used to split event strings.
                var eventSplitter = /\s+/;

                // Implement fancy features of the Events API such as multiple event
                // names `"change blur"` and jQuery-style event maps `{change: action}`
                // in terms of the existing API.
                var eventsApi = function(obj, action, name, rest) {
                        if (!name) return true;

                        // Handle event maps.
                        if (typeof name === 'object') {
                            for (var key in name) {
                                obj[action].apply(obj, [key, name[key]].concat(rest));
                            }
                            return false;
                        }

                        // Handle space separated event names.
                        if (eventSplitter.test(name)) {
                            var names = name.split(eventSplitter);
                            for (var i = 0, l = names.length; i < l; i++) {
                                obj[action].apply(obj, [names[i]].concat(rest));
                            }
                            return false;
                        }

                        return true;
                    };

                // A difficult-to-believe, but optimized internal dispatch function for
                // triggering events. Tries to keep the usual cases speedy (most internal
                // Backbone events have 3 arguments).
                var triggerEvents = function(events, args) {
                        var ev, i = -1,
                            l = events.length,
                            a1 = args[0],
                            a2 = args[1],
                            a3 = args[2];
                        switch (args.length) {
                        case 0:
                            while (++i < l)(ev = events[i]).callback.call(ev.ctx);
                            return;
                        case 1:
                            while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1);
                            return;
                        case 2:
                            while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2);
                            return;
                        case 3:
                            while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2, a3);
                            return;
                        default:
                            while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args);
                            return;
                        }
                    };

                var listenMethods = {
                    listenTo: 'on',
                    listenToOnce: 'once'
                };

                // Inversion-of-control versions of `on` and `once`. Tell *this* object to
                // listen to an event in another object ... keeping track of what it's
                // listening to.
                _.each(listenMethods, function(implementation, method) {
                    Events[method] = function(obj, name, callback) {
                        var listeningTo = this._listeningTo || (this._listeningTo = {});
                        var id = obj._listenId || (obj._listenId = _.uniqueId('l'));
                        listeningTo[id] = obj;
                        if (!callback && typeof name === 'object') callback = this;
                        obj[implementation](name, callback, this);
                        return this;
                    };
                });

                // Aliases for backwards compatibility.
                Events.bind = Events.on;
                Events.unbind = Events.off;

                // Allow the `Backbone` object to serve as a global event bus, for folks who
                // want global "pubsub" in a convenient place.
                _.extend(Backbone, Events);

                // Backbone.Model
                // --------------
                // Backbone **Models** are the basic data object in the framework --
                // frequently representing a row in a table in a database on your server.
                // A discrete chunk of data and a bunch of useful, related methods for
                // performing computations and transformations on that data.
                // Create a new model with the specified attributes. A client id (`cid`)
                // is automatically generated and assigned for you.
                var Model = Backbone.Model = function(attributes, options) {
                        var attrs = attributes || {};
                        options || (options = {});
                        this.cid = _.uniqueId('c');
                        this.attributes = {};
                        if (options.collection) this.collection = options.collection;
                        if (options.parse) attrs = this.parse(attrs, options) || {};
                        attrs = _.defaults({}, attrs, _.result(this, 'defaults'));
                        this.set(attrs, options);
                        this.changed = {};
                        this.initialize.apply(this, arguments);
                    };

                // Attach all inheritable methods to the Model prototype.
                _.extend(Model.prototype, Events, {

                    // A hash of attributes whose current and previous value differ.
                    changed: null,

                    // The value returned during the last failed validation.
                    validationError: null,

                    // The default name for the JSON `id` attribute is `"id"`. MongoDB and
                    // CouchDB users may want to set this to `"_id"`.
                    idAttribute: 'id',

                    // Initialize is an empty function by default. Override it with your own
                    // initialization logic.
                    initialize: function() {},

                    // Return a copy of the model's `attributes` object.
                    toJSON: function(options) {
                        return _.clone(this.attributes);
                    },

                    // Proxy `Backbone.sync` by default -- but override this if you need
                    // custom syncing semantics for *this* particular model.
                    sync: function() {
                        return Backbone.sync.apply(this, arguments);
                    },

                    // Get the value of an attribute.
                    get: function(attr) {
                        return this.attributes[attr];
                    },

                    // Get the HTML-escaped value of an attribute.
                    escape: function(attr) {
                        return _.escape(this.get(attr));
                    },

                    // Returns `true` if the attribute contains a value that is not null
                    // or undefined.
                    has: function(attr) {
                        return this.get(attr) != null;
                    },

                    // Set a hash of model attributes on the object, firing `"change"`. This is
                    // the core primitive operation of a model, updating the data and notifying
                    // anyone who needs to know about the change in state. The heart of the beast.
                    set: function(key, val, options) {
                        var attr, attrs, unset, changes, silent, changing, prev, current;
                        if (key == null) return this;

                        // Handle both `"key", value` and `{key: value}` -style arguments.
                        if (typeof key === 'object') {
                            attrs = key;
                            options = val;
                        } else {
                            (attrs = {})[key] = val;
                        }

                        options || (options = {});

                        // Run validation.
                        if (!this._validate(attrs, options)) return false;

                        // Extract attributes and options.
                        unset = options.unset;
                        silent = options.silent;
                        changes = [];
                        changing = this._changing;
                        this._changing = true;

                        if (!changing) {
                            this._previousAttributes = _.clone(this.attributes);
                            this.changed = {};
                        }
                        current = this.attributes, prev = this._previousAttributes;

                        // Check for changes of `id`.
                        if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];

                        // For each `set` attribute, update or delete the current value.
                        for (attr in attrs) {
                            val = attrs[attr];
                            if (!_.isEqual(current[attr], val)) changes.push(attr);
                            if (!_.isEqual(prev[attr], val)) {
                                this.changed[attr] = val;
                            } else {
                                delete this.changed[attr];
                            }
                            unset ? delete current[attr] : current[attr] = val;
                        }

                        // Trigger all relevant attribute changes.
                        if (!silent) {
                            if (changes.length) this._pending = options;
                            for (var i = 0, l = changes.length; i < l; i++) {
                                this.trigger('change:' + changes[i], this, current[changes[i]], options);
                            }
                        }

                        // You might be wondering why there's a `while` loop here. Changes can
                        // be recursively nested within `"change"` events.
                        if (changing) return this;
                        if (!silent) {
                            while (this._pending) {
                                options = this._pending;
                                this._pending = false;
                                this.trigger('change', this, options);
                            }
                        }
                        this._pending = false;
                        this._changing = false;
                        return this;
                    },

                    // Remove an attribute from the model, firing `"change"`. `unset` is a noop
                    // if the attribute doesn't exist.
                    unset: function(attr, options) {
                        return this.set(attr, void 0, _.extend({}, options, {
                            unset: true
                        }));
                    },

                    // Clear all attributes on the model, firing `"change"`.
                    clear: function(options) {
                        var attrs = {};
                        for (var key in this.attributes) attrs[key] = void 0;
                        return this.set(attrs, _.extend({}, options, {
                            unset: true
                        }));
                    },

                    // Determine if the model has changed since the last `"change"` event.
                    // If you specify an attribute name, determine if that attribute has changed.
                    hasChanged: function(attr) {
                        if (attr == null) return !_.isEmpty(this.changed);
                        return _.has(this.changed, attr);
                    },

                    // Return an object containing all the attributes that have changed, or
                    // false if there are no changed attributes. Useful for determining what
                    // parts of a view need to be updated and/or what attributes need to be
                    // persisted to the server. Unset attributes will be set to undefined.
                    // You can also pass an attributes object to diff against the model,
                    // determining if there *would be* a change.
                    changedAttributes: function(diff) {
                        if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;
                        var val, changed = false;
                        var old = this._changing ? this._previousAttributes : this.attributes;
                        for (var attr in diff) {
                            if (_.isEqual(old[attr], (val = diff[attr]))) continue;
                            (changed || (changed = {}))[attr] = val;
                        }
                        return changed;
                    },

                    // Get the previous value of an attribute, recorded at the time the last
                    // `"change"` event was fired.
                    previous: function(attr) {
                        if (attr == null || !this._previousAttributes) return null;
                        return this._previousAttributes[attr];
                    },

                    // Get all of the attributes of the model at the time of the previous
                    // `"change"` event.
                    previousAttributes: function() {
                        return _.clone(this._previousAttributes);
                    },

                    // Fetch the model from the server. If the server's representation of the
                    // model differs from its current attributes, they will be overridden,
                    // triggering a `"change"` event.
                    fetch: function(options) {
                        options = options ? _.clone(options) : {};
                        if (options.parse === void 0) options.parse = true;
                        var model = this;
                        var success = options.success;
                        options.success = function(resp) {
                            if (!model.set(model.parse(resp, options), options)) return false;
                            if (success) success(model, resp, options);
                            model.trigger('sync', model, resp, options);
                        };
                        wrapError(this, options);
                        return this.sync('read', this, options);
                    },

                    // Set a hash of model attributes, and sync the model to the server.
                    // If the server returns an attributes hash that differs, the model's
                    // state will be `set` again.
                    save: function(key, val, options) {
                        var attrs, method, xhr, attributes = this.attributes;

                        // Handle both `"key", value` and `{key: value}` -style arguments.
                        if (key == null || typeof key === 'object') {
                            attrs = key;
                            options = val;
                        } else {
                            (attrs = {})[key] = val;
                        }

                        options = _.extend({
                            validate: true
                        }, options);

                        // If we're not waiting and attributes exist, save acts as
                        // `set(attr).save(null, opts)` with validation. Otherwise, check if
                        // the model will be valid when the attributes, if any, are set.
                        if (attrs && !options.wait) {
                            if (!this.set(attrs, options)) return false;
                        } else {
                            if (!this._validate(attrs, options)) return false;
                        }

                        // Set temporary attributes if `{wait: true}`.
                        if (attrs && options.wait) {
                            this.attributes = _.extend({}, attributes, attrs);
                        }

                        // After a successful server-side save, the client is (optionally)
                        // updated with the server-side state.
                        if (options.parse === void 0) options.parse = true;
                        var model = this;
                        var success = options.success;
                        options.success = function(resp) {
                            // Ensure attributes are restored during synchronous saves.
                            model.attributes = attributes;
                            var serverAttrs = model.parse(resp, options);
                            if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs);
                            if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) {
                                return false;
                            }
                            if (success) success(model, resp, options);
                            model.trigger('sync', model, resp, options);
                        };
                        wrapError(this, options);

                        method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');
                        if (method === 'patch') options.attrs = attrs;
                        xhr = this.sync(method, this, options);

                        // Restore attributes.
                        if (attrs && options.wait) this.attributes = attributes;

                        return xhr;
                    },

                    // Destroy this model on the server if it was already persisted.
                    // Optimistically removes the model from its collection, if it has one.
                    // If `wait: true` is passed, waits for the server to respond before removal.
                    destroy: function(options) {
                        options = options ? _.clone(options) : {};
                        var model = this;
                        var success = options.success;

                        var destroy = function() {
                                model.trigger('destroy', model, model.collection, options);
                            };

                        options.success = function(resp) {
                            if (options.wait || model.isNew()) destroy();
                            if (success) success(model, resp, options);
                            if (!model.isNew()) model.trigger('sync', model, resp, options);
                        };

                        if (this.isNew()) {
                            options.success();
                            return false;
                        }
                        wrapError(this, options);

                        var xhr = this.sync('delete', this, options);
                        if (!options.wait) destroy();
                        return xhr;
                    },

                    // Default URL for the model's representation on the server -- if you're
                    // using Backbone's restful methods, override this to change the endpoint
                    // that will be called.
                    url: function() {
                        var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
                        if (this.isNew()) return base;
                        return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id);
                    },

                    // **parse** converts a response into the hash of attributes to be `set` on
                    // the model. The default implementation is just to pass the response along.
                    parse: function(resp, options) {
                        return resp;
                    },

                    // Create a new model with identical attributes to this one.
                    clone: function() {
                        return new this.constructor(this.attributes);
                    },

                    // A model is new if it has never been saved to the server, and lacks an id.
                    isNew: function() {
                        return !this.has(this.idAttribute);
                    },

                    // Check if the model is currently in a valid state.
                    isValid: function(options) {
                        return this._validate({}, _.extend(options || {}, {
                            validate: true
                        }));
                    },

                    // Run validation against the next complete set of model attributes,
                    // returning `true` if all is well. Otherwise, fire an `"invalid"` event.
                    _validate: function(attrs, options) {
                        if (!options.validate || !this.validate) return true;
                        attrs = _.extend({}, this.attributes, attrs);
                        var error = this.validationError = this.validate(attrs, options) || null;
                        if (!error) return true;
                        this.trigger('invalid', this, error, _.extend(options, {
                            validationError: error
                        }));
                        return false;
                    }

                });

                // Underscore methods that we want to implement on the Model.
                var modelMethods = ['keys', 'values', 'pairs', 'invert', 'pick', 'omit'];

                // Mix in each Underscore method as a proxy to `Model#attributes`.
                _.each(modelMethods, function(method) {
                    Model.prototype[method] = function() {
                        var args = slice.call(arguments);
                        args.unshift(this.attributes);
                        return _[method].apply(_, args);
                    };
                });

                // Backbone.Collection
                // -------------------
                // If models tend to represent a single row of data, a Backbone Collection is
                // more analagous to a table full of data ... or a small slice or page of that
                // table, or a collection of rows that belong together for a particular reason
                // -- all of the messages in this particular folder, all of the documents
                // belonging to this particular author, and so on. Collections maintain
                // indexes of their models, both in order, and for lookup by `id`.
                // Create a new **Collection**, perhaps to contain a specific type of `model`.
                // If a `comparator` is specified, the Collection will maintain
                // its models in sort order, as they're added and removed.
                var Collection = Backbone.Collection = function(models, options) {
                        options || (options = {});
                        if (options.model) this.model = options.model;
                        if (options.comparator !== void 0) this.comparator = options.comparator;
                        this._reset();
                        this.initialize.apply(this, arguments);
                        if (models) this.reset(models, _.extend({
                            silent: true
                        }, options));
                    };

                // Default options for `Collection#set`.
                var setOptions = {
                    add: true,
                    remove: true,
                    merge: true
                };
                var addOptions = {
                    add: true,
                    remove: false
                };

                // Define the Collection's inheritable methods.
                _.extend(Collection.prototype, Events, {

                    // The default model for a collection is just a **Backbone.Model**.
                    // This should be overridden in most cases.
                    model: Model,

                    // Initialize is an empty function by default. Override it with your own
                    // initialization logic.
                    initialize: function() {},

                    // The JSON representation of a Collection is an array of the
                    // models' attributes.
                    toJSON: function(options) {
                        return this.map(function(model) {
                            return model.toJSON(options);
                        });
                    },

                    // Proxy `Backbone.sync` by default.
                    sync: function() {
                        return Backbone.sync.apply(this, arguments);
                    },

                    // Add a model, or list of models to the set.
                    add: function(models, options) {
                        return this.set(models, _.extend({
                            merge: false
                        }, options, addOptions));
                    },

                    // Remove a model, or a list of models from the set.
                    remove: function(models, options) {
                        var singular = !_.isArray(models);
                        models = singular ? [models] : _.clone(models);
                        options || (options = {});
                        var i, l, index, model;
                        for (i = 0, l = models.length; i < l; i++) {
                            model = models[i] = this.get(models[i]);
                            if (!model) continue;
                            delete this._byId[model.id];
                            delete this._byId[model.cid];
                            index = this.indexOf(model);
                            this.models.splice(index, 1);
                            this.length--;
                            if (!options.silent) {
                                options.index = index;
                                model.trigger('remove', model, this, options);
                            }
                            this._removeReference(model, options);
                        }
                        return singular ? models[0] : models;
                    },

                    // Update a collection by `set`-ing a new list of models, adding new ones,
                    // removing models that are no longer present, and merging models that
                    // already exist in the collection, as necessary. Similar to **Model#set**,
                    // the core operation for updating the data contained by the collection.
                    set: function(models, options) {
                        options = _.defaults({}, options, setOptions);
                        if (options.parse) models = this.parse(models, options);
                        var singular = !_.isArray(models);
                        models = singular ? (models ? [models] : []) : _.clone(models);
                        var i, l, id, model, attrs, existing, sort;
                        var at = options.at;
                        var targetModel = this.model;
                        var sortable = this.comparator && (at == null) && options.sort !== false;
                        var sortAttr = _.isString(this.comparator) ? this.comparator : null;
                        var toAdd = [],
                            toRemove = [],
                            modelMap = {};
                        var add = options.add,
                            merge = options.merge,
                            remove = options.remove;
                        var order = !sortable && add && remove ? [] : false;

                        // Turn bare objects into model references, and prevent invalid models
                        // from being added.
                        for (i = 0, l = models.length; i < l; i++) {
                            attrs = models[i] || {};
                            if (attrs instanceof Model) {
                                id = model = attrs;
                            } else {
                                id = attrs[targetModel.prototype.idAttribute || 'id'];
                            }

                            // If a duplicate is found, prevent it from being added and
                            // optionally merge it into the existing model.
                            if (existing = this.get(id)) {
                                if (remove) modelMap[existing.cid] = true;
                                if (merge) {
                                    attrs = attrs === model ? model.attributes : attrs;
                                    if (options.parse) attrs = existing.parse(attrs, options);
                                    existing.set(attrs, options);
                                    if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;
                                }
                                models[i] = existing;

                                // If this is a new, valid model, push it to the `toAdd` list.
                            } else if (add) {
                                model = models[i] = this._prepareModel(attrs, options);
                                if (!model) continue;
                                toAdd.push(model);
                                this._addReference(model, options);
                            }

                            // Do not add multiple models with the same `id`.
                            model = existing || model;
                            if (order && (model.isNew() || !modelMap[model.id])) order.push(model);
                            modelMap[model.id] = true;
                        }

                        // Remove nonexistent models if appropriate.
                        if (remove) {
                            for (i = 0, l = this.length; i < l; ++i) {
                                if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model);
                            }
                            if (toRemove.length) this.remove(toRemove, options);
                        }

                        // See if sorting is needed, update `length` and splice in new models.
                        if (toAdd.length || (order && order.length)) {
                            if (sortable) sort = true;
                            this.length += toAdd.length;
                            if (at != null) {
                                for (i = 0, l = toAdd.length; i < l; i++) {
                                    this.models.splice(at + i, 0, toAdd[i]);
                                }
                            } else {
                                if (order) this.models.length = 0;
                                var orderedModels = order || toAdd;
                                for (i = 0, l = orderedModels.length; i < l; i++) {
                                    this.models.push(orderedModels[i]);
                                }
                            }
                        }

                        // Silently sort the collection if appropriate.
                        if (sort) this.sort({
                            silent: true
                        });

                        // Unless silenced, it's time to fire all appropriate add/sort events.
                        if (!options.silent) {
                            for (i = 0, l = toAdd.length; i < l; i++) {
                                (model = toAdd[i]).trigger('add', model, this, options);
                            }
                            if (sort || (order && order.length)) this.trigger('sort', this, options);
                        }

                        // Return the added (or merged) model (or models).
                        return singular ? models[0] : models;
                    },

                    // When you have more items than you want to add or remove individually,
                    // you can reset the entire set with a new list of models, without firing
                    // any granular `add` or `remove` events. Fires `reset` when finished.
                    // Useful for bulk operations and optimizations.
                    reset: function(models, options) {
                        options || (options = {});
                        for (var i = 0, l = this.models.length; i < l; i++) {
                            this._removeReference(this.models[i], options);
                        }
                        options.previousModels = this.models;
                        this._reset();
                        models = this.add(models, _.extend({
                            silent: true
                        }, options));
                        if (!options.silent) this.trigger('reset', this, options);
                        return models;
                    },

                    // Add a model to the end of the collection.
                    push: function(model, options) {
                        return this.add(model, _.extend({
                            at: this.length
                        }, options));
                    },

                    // Remove a model from the end of the collection.
                    pop: function(options) {
                        var model = this.at(this.length - 1);
                        this.remove(model, options);
                        return model;
                    },

                    // Add a model to the beginning of the collection.
                    unshift: function(model, options) {
                        return this.add(model, _.extend({
                            at: 0
                        }, options));
                    },

                    // Remove a model from the beginning of the collection.
                    shift: function(options) {
                        var model = this.at(0);
                        this.remove(model, options);
                        return model;
                    },

                    // Slice out a sub-array of models from the collection.
                    slice: function() {
                        return slice.apply(this.models, arguments);
                    },

                    // Get a model from the set by id.
                    get: function(obj) {
                        if (obj == null) return void 0;
                        return this._byId[obj] || this._byId[obj.id] || this._byId[obj.cid];
                    },

                    // Get the model at the given index.
                    at: function(index) {
                        return this.models[index];
                    },

                    // Return models with matching attributes. Useful for simple cases of
                    // `filter`.
                    where: function(attrs, first) {
                        if (_.isEmpty(attrs)) return first ? void 0 : [];
                        return this[first ? 'find' : 'filter'](function(model) {
                            for (var key in attrs) {
                                if (attrs[key] !== model.get(key)) return false;
                            }
                            return true;
                        });
                    },

                    // Return the first model with matching attributes. Useful for simple cases
                    // of `find`.
                    findWhere: function(attrs) {
                        return this.where(attrs, true);
                    },

                    // Force the collection to re-sort itself. You don't need to call this under
                    // normal circumstances, as the set will maintain sort order as each item
                    // is added.
                    sort: function(options) {
                        if (!this.comparator) throw new Error('Cannot sort a set without a comparator');
                        options || (options = {});

                        // Run sort based on type of `comparator`.
                        if (_.isString(this.comparator) || this.comparator.length === 1) {
                            this.models = this.sortBy(this.comparator, this);
                        } else {
                            this.models.sort(_.bind(this.comparator, this));
                        }

                        if (!options.silent) this.trigger('sort', this, options);
                        return this;
                    },

                    // Pluck an attribute from each model in the collection.
                    pluck: function(attr) {
                        return _.invoke(this.models, 'get', attr);
                    },

                    // Fetch the default set of models for this collection, resetting the
                    // collection when they arrive. If `reset: true` is passed, the response
                    // data will be passed through the `reset` method instead of `set`.
                    fetch: function(options) {
                        options = options ? _.clone(options) : {};
                        if (options.parse === void 0) options.parse = true;
                        var success = options.success;
                        var collection = this;
                        options.success = function(resp) {
                            var method = options.reset ? 'reset' : 'set';
                            collection[method](resp, options);
                            if (success) success(collection, resp, options);
                            collection.trigger('sync', collection, resp, options);
                        };
                        wrapError(this, options);
                        return this.sync('read', this, options);
                    },

                    // Create a new instance of a model in this collection. Add the model to the
                    // collection immediately, unless `wait: true` is passed, in which case we
                    // wait for the server to agree.
                    create: function(model, options) {
                        options = options ? _.clone(options) : {};
                        if (!(model = this._prepareModel(model, options))) return false;
                        if (!options.wait) this.add(model, options);
                        var collection = this;
                        var success = options.success;
                        options.success = function(model, resp) {
                            if (options.wait) collection.add(model, options);
                            if (success) success(model, resp, options);
                        };
                        model.save(null, options);
                        return model;
                    },

                    // **parse** converts a response into a list of models to be added to the
                    // collection. The default implementation is just to pass it through.
                    parse: function(resp, options) {
                        return resp;
                    },

                    // Create a new collection with an identical list of models as this one.
                    clone: function() {
                        return new this.constructor(this.models);
                    },

                    // Private method to reset all internal state. Called when the collection
                    // is first initialized or reset.
                    _reset: function() {
                        this.length = 0;
                        this.models = [];
                        this._byId = {};
                    },

                    // Prepare a hash of attributes (or other model) to be added to this
                    // collection.
                    _prepareModel: function(attrs, options) {
                        if (attrs instanceof Model) return attrs;
                        options = options ? _.clone(options) : {};
                        options.collection = this;
                        var model = new this.model(attrs, options);
                        if (!model.validationError) return model;
                        this.trigger('invalid', this, model.validationError, options);
                        return false;
                    },

                    // Internal method to create a model's ties to a collection.
                    _addReference: function(model, options) {
                        this._byId[model.cid] = model;
                        if (model.id != null) this._byId[model.id] = model;
                        if (!model.collection) model.collection = this;
                        model.on('all', this._onModelEvent, this);
                    },

                    // Internal method to sever a model's ties to a collection.
                    _removeReference: function(model, options) {
                        if (this === model.collection) delete model.collection;
                        model.off('all', this._onModelEvent, this);
                    },

                    // Internal method called every time a model in the set fires an event.
                    // Sets need to update their indexes when models change ids. All other
                    // events simply proxy through. "add" and "remove" events that originate
                    // in other collections are ignored.
                    _onModelEvent: function(event, model, collection, options) {
                        if ((event === 'add' || event === 'remove') && collection !== this) return;
                        if (event === 'destroy') this.remove(model, options);
                        if (model && event === 'change:' + model.idAttribute) {
                            delete this._byId[model.previous(model.idAttribute)];
                            if (model.id != null) this._byId[model.id] = model;
                        }
                        this.trigger.apply(this, arguments);
                    }

                });

                // Underscore methods that we want to implement on the Collection.
                // 90% of the core usefulness of Backbone Collections is actually implemented
                // right here:
                var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl', 'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select', 'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke', 'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest', 'tail', 'drop', 'last', 'without', 'difference', 'indexOf', 'shuffle', 'lastIndexOf', 'isEmpty', 'chain', 'sample'];

                // Mix in each Underscore method as a proxy to `Collection#models`.
                _.each(methods, function(method) {
                    Collection.prototype[method] = function() {
                        var args = slice.call(arguments);
                        args.unshift(this.models);
                        return _[method].apply(_, args);
                    };
                });

                // Underscore methods that take a property name as an argument.
                var attributeMethods = ['groupBy', 'countBy', 'sortBy', 'indexBy'];

                // Use attributes instead of properties.
                _.each(attributeMethods, function(method) {
                    Collection.prototype[method] = function(value, context) {
                        var iterator = _.isFunction(value) ? value : function(model) {
                                return model.get(value);
                            };
                        return _[method](this.models, iterator, context);
                    };
                });

                // Backbone.View
                // -------------
                // Backbone Views are almost more convention than they are actual code. A View
                // is simply a JavaScript object that represents a logical chunk of UI in the
                // DOM. This might be a single item, an entire list, a sidebar or panel, or
                // even the surrounding frame which wraps your whole app. Defining a chunk of
                // UI as a **View** allows you to define your DOM events declaratively, without
                // having to worry about render order ... and makes it easy for the view to
                // react to specific changes in the state of your models.
                // Creating a Backbone.View creates its initial element outside of the DOM,
                // if an existing element is not provided...
                var View = Backbone.View = function(options) {
                        this.cid = _.uniqueId('view');
                        options || (options = {});
                        _.extend(this, _.pick(options, viewOptions));
                        this._ensureElement();
                        this.initialize.apply(this, arguments);
                        this.delegateEvents();
                    };

                // Cached regex to split keys for `delegate`.
                var delegateEventSplitter = /^(\S+)\s*(.*)$/;

                // List of view options to be merged as properties.
                var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];

                // Set up all inheritable **Backbone.View** properties and methods.
                _.extend(View.prototype, Events, {

                    // The default `tagName` of a View's element is `"div"`.
                    tagName: 'div',

                    // jQuery delegate for element lookup, scoped to DOM elements within the
                    // current view. This should be preferred to global lookups where possible.
                    $: function(selector) {
                        return this.$el.find(selector);
                    },

                    // Initialize is an empty function by default. Override it with your own
                    // initialization logic.
                    initialize: function() {},

                    // **render** is the core function that your view should override, in order
                    // to populate its element (`this.el`), with the appropriate HTML. The
                    // convention is for **render** to always return `this`.
                    render: function() {
                        return this;
                    },

                    // Remove this view by taking the element out of the DOM, and removing any
                    // applicable Backbone.Events listeners.
                    remove: function() {
                        this.$el.remove();
                        this.stopListening();
                        return this;
                    },

                    // Change the view's element (`this.el` property), including event
                    // re-delegation.
                    setElement: function(element, delegate) {
                        if (this.$el) this.undelegateEvents();
                        this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
                        this.el = this.$el[0];
                        if (delegate !== false) this.delegateEvents();
                        return this;
                    },

                    // Set callbacks, where `this.events` is a hash of
                    //
                    // *{"event selector": "callback"}*
                    //
                    //     {
                    //       'mousedown .title':  'edit',
                    //       'click .button':     'save',
                    //       'click .open':       function(e) { ... }
                    //     }
                    //
                    // pairs. Callbacks will be bound to the view, with `this` set properly.
                    // Uses event delegation for efficiency.
                    // Omitting the selector binds the event to `this.el`.
                    // This only works for delegate-able events: not `focus`, `blur`, and
                    // not `change`, `submit`, and `reset` in Internet Explorer.
                    delegateEvents: function(events) {
                        if (!(events || (events = _.result(this, 'events')))) return this;
                        this.undelegateEvents();
                        for (var key in events) {
                            var method = events[key];
                            if (!_.isFunction(method)) method = this[events[key]];
                            if (!method) continue;

                            var match = key.match(delegateEventSplitter);
                            var eventName = match[1],
                                selector = match[2];
                            method = _.bind(method, this);
                            eventName += '.delegateEvents' + this.cid;
                            if (selector === '') {
                                this.$el.on(eventName, method);
                            } else {
                                this.$el.on(eventName, selector, method);
                            }
                        }
                        return this;
                    },

                    // Clears all callbacks previously bound to the view with `delegateEvents`.
                    // You usually don't need to use this, but may wish to if you have multiple
                    // Backbone views attached to the same DOM element.
                    undelegateEvents: function() {
                        this.$el.off('.delegateEvents' + this.cid);
                        return this;
                    },

                    // Ensure that the View has a DOM element to render into.
                    // If `this.el` is a string, pass it through `$()`, take the first
                    // matching element, and re-assign it to `el`. Otherwise, create
                    // an element from the `id`, `className` and `tagName` properties.
                    _ensureElement: function() {
                        if (!this.el) {
                            var attrs = _.extend({}, _.result(this, 'attributes'));
                            if (this.id) attrs.id = _.result(this, 'id');
                            if (this.className) attrs['class'] = _.result(this, 'className');
                            var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);
                            this.setElement($el, false);
                        } else {
                            this.setElement(_.result(this, 'el'), false);
                        }
                    }

                });

                // Backbone.sync
                // -------------
                // Override this function to change the manner in which Backbone persists
                // models to the server. You will be passed the type of request, and the
                // model in question. By default, makes a RESTful Ajax request
                // to the model's `url()`. Some possible customizations could be:
                //
                // * Use `setTimeout` to batch rapid-fire updates into a single request.
                // * Send up the models as XML instead of JSON.
                // * Persist models via WebSockets instead of Ajax.
                //
                // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests
                // as `POST`, with a `_method` parameter containing the true HTTP method,
                // as well as all requests with the body as `application/x-www-form-urlencoded`
                // instead of `application/json` with the model in a param named `model`.
                // Useful when interfacing with server-side languages like **PHP** that make
                // it difficult to read the body of `PUT` requests.
                Backbone.sync = function(method, model, options) {
                    var type = methodMap[method];

                    // Default options, unless specified.
                    _.defaults(options || (options = {}), {
                        emulateHTTP: Backbone.emulateHTTP,
                        emulateJSON: Backbone.emulateJSON
                    });

                    // Default JSON-request options.
                    var params = {
                        type: type,
                        dataType: 'json'
                    };

                    // Ensure that we have a URL.
                    if (!options.url) {
                        params.url = _.result(model, 'url') || urlError();
                    }

                    // Ensure that we have the appropriate request data.
                    if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
                        params.contentType = 'application/json';
                        params.data = JSON.stringify(options.attrs || model.toJSON(options));
                    }

                    // For older servers, emulate JSON by encoding the request into an HTML-form.
                    if (options.emulateJSON) {
                        params.contentType = 'application/x-www-form-urlencoded';
                        params.data = params.data ? {
                            model: params.data
                        } : {};
                    }

                    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
                    // And an `X-HTTP-Method-Override` header.
                    if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {
                        params.type = 'POST';
                        if (options.emulateJSON) params.data._method = type;
                        var beforeSend = options.beforeSend;
                        options.beforeSend = function(xhr) {
                            xhr.setRequestHeader('X-HTTP-Method-Override', type);
                            if (beforeSend) return beforeSend.apply(this, arguments);
                        };
                    }

                    // Don't process data on a non-GET request.
                    if (params.type !== 'GET' && !options.emulateJSON) {
                        params.processData = false;
                    }

                    // If we're sending a `PATCH` request, and we're in an old Internet Explorer
                    // that still has ActiveX enabled by default, override jQuery to use that
                    // for XHR instead. Remove this line when jQuery supports `PATCH` on IE8.
                    if (params.type === 'PATCH' && noXhrPatch) {
                        params.xhr = function() {
                            return new ActiveXObject("Microsoft.XMLHTTP");
                        };
                    }

                    // Make the request, allowing the user to override any Ajax options.
                    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
                    model.trigger('request', model, xhr, options);
                    return xhr;
                };

                var noXhrPatch = typeof window !== 'undefined' && !! window.ActiveXObject && !(window.XMLHttpRequest && (new XMLHttpRequest).dispatchEvent);

                // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
                var methodMap = {
                    'create': 'POST',
                    'update': 'PUT',
                    'patch': 'PATCH',
                    'delete': 'DELETE',
                    'read': 'GET'
                };

                // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
                // Override this if you'd like to use a different library.
                Backbone.ajax = function() {
                    return Backbone.$.ajax.apply(Backbone.$, arguments);
                };

                // Backbone.Router
                // ---------------
                // Routers map faux-URLs to actions, and fire events when routes are
                // matched. Creating a new one sets its `routes` hash, if not set statically.
                var Router = Backbone.Router = function(options) {
                        options || (options = {});
                        if (options.routes) this.routes = options.routes;
                        this._bindRoutes();
                        this.initialize.apply(this, arguments);
                    };

                // Cached regular expressions for matching named param parts and splatted
                // parts of route strings.
                var optionalParam = /\((.*?)\)/g;
                var namedParam = /(\(\?)?:\w+/g;
                var splatParam = /\*\w+/g;
                var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g;

                // Set up all inheritable **Backbone.Router** properties and methods.
                _.extend(Router.prototype, Events, {

                    // Initialize is an empty function by default. Override it with your own
                    // initialization logic.
                    initialize: function() {},

                    // Manually bind a single named route to a callback. For example:
                    //
                    //     this.route('search/:query/p:num', 'search', function(query, num) {
                    //       ...
                    //     });
                    //
                    route: function(route, name, callback) {
                        if (!_.isRegExp(route)) route = this._routeToRegExp(route);
                        if (_.isFunction(name)) {
                            callback = name;
                            name = '';
                        }
                        if (!callback) callback = this[name];
                        var router = this;
                        Backbone.history.route(route, function(fragment) {
                            var args = router._extractParameters(route, fragment);
                            router.execute(callback, args);
                            router.trigger.apply(router, ['route:' + name].concat(args));
                            router.trigger('route', name, args);
                            Backbone.history.trigger('route', router, name, args);
                        });
                        return this;
                    },

                    // Execute a route handler with the provided parameters.  This is an
                    // excellent place to do pre-route setup or post-route cleanup.
                    execute: function(callback, args) {
                        if (callback) callback.apply(this, args);
                    },

                    // Simple proxy to `Backbone.history` to save a fragment into the history.
                    navigate: function(fragment, options) {
                        Backbone.history.navigate(fragment, options);
                        return this;
                    },

                    // Bind all defined routes to `Backbone.history`. We have to reverse the
                    // order of the routes here to support behavior where the most general
                    // routes can be defined at the bottom of the route map.
                    _bindRoutes: function() {
                        if (!this.routes) return;
                        this.routes = _.result(this, 'routes');
                        var route, routes = _.keys(this.routes);
                        while ((route = routes.pop()) != null) {
                            this.route(route, this.routes[route]);
                        }
                    },

                    // Convert a route string into a regular expression, suitable for matching
                    // against the current location hash.
                    _routeToRegExp: function(route) {
                        route = route.replace(escapeRegExp, '\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, function(match, optional) {
                            return optional ? match : '([^/?]+)';
                        }).replace(splatParam, '([^?]*?)');
                        return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
                    },

                    // Given a route, and a URL fragment that it matches, return the array of
                    // extracted decoded parameters. Empty or unmatched parameters will be
                    // treated as `null` to normalize cross-browser behavior.
                    _extractParameters: function(route, fragment) {
                        var params = route.exec(fragment).slice(1);
                        return _.map(params, function(param, i) {
                            // Don't decode the search params.
                            if (i === params.length - 1) return param || null;
                            return param ? decodeURIComponent(param) : null;
                        });
                    }

                });

                // Backbone.History
                // ----------------
                // Handles cross-browser history management, based on either
                // [pushState](http://diveintohtml5.info/history.html) and real URLs, or
                // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)
                // and URL fragments. If the browser supports neither (old IE, natch),
                // falls back to polling.
                var History = Backbone.History = function() {
                        this.handlers = [];
                        _.bindAll(this, 'checkUrl');

                        // Ensure that `History` can be used outside of the browser.
                        if (typeof window !== 'undefined') {
                            this.location = window.location;
                            this.history = window.history;
                        }
                    };

                // Cached regex for stripping a leading hash/slash and trailing space.
                var routeStripper = /^[#\/]|\s+$/g;

                // Cached regex for stripping leading and trailing slashes.
                var rootStripper = /^\/+|\/+$/g;

                // Cached regex for detecting MSIE.
                var isExplorer = /msie [\w.]+/;

                // Cached regex for removing a trailing slash.
                var trailingSlash = /\/$/;

                // Cached regex for stripping urls of hash.
                var pathStripper = /#.*$/;

                // Has the history handling already been started?
                History.started = false;

                // Set up all inheritable **Backbone.History** properties and methods.
                _.extend(History.prototype, Events, {

                    // The default interval to poll for hash changes, if necessary, is
                    // twenty times a second.
                    interval: 50,

                    // Are we at the app root?
                    atRoot: function() {
                        return this.location.pathname.replace(/[^\/]$/, '$&/') === this.root;
                    },

                    // Gets the true hash value. Cannot use location.hash directly due to bug
                    // in Firefox where location.hash will always be decoded.
                    getHash: function(window) {
                        var match = (window || this).location.href.match(/#(.*)$/);
                        return match ? match[1] : '';
                    },

                    // Get the cross-browser normalized URL fragment, either from the URL,
                    // the hash, or the override.
                    getFragment: function(fragment, forcePushState) {
                        if (fragment == null) {
                            if (this._hasPushState || !this._wantsHashChange || forcePushState) {
                                fragment = decodeURI(this.location.pathname + this.location.search);
                                var root = this.root.replace(trailingSlash, '');
                                if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);
                            } else {
                                fragment = this.getHash();
                            }
                        }
                        return fragment.replace(routeStripper, '');
                    },

                    // Start the hash change handling, returning `true` if the current URL matches
                    // an existing route, and `false` otherwise.
                    start: function(options) {
                        if (History.started) throw new Error("Backbone.history has already been started");
                        History.started = true;

                        // Figure out the initial configuration. Do we need an iframe?
                        // Is pushState desired ... is it available?
                        this.options = _.extend({
                            root: '/'
                        }, this.options, options);
                        this.root = this.options.root;
                        this._wantsHashChange = this.options.hashChange !== false;
                        this._wantsPushState = !! this.options.pushState;
                        this._hasPushState = !! (this.options.pushState && this.history && this.history.pushState);
                        var fragment = this.getFragment();
                        var docMode = document.documentMode;
                        var oldIE = (isExplorer.exec(navigator.userAgent.toLowerCase()) && (!docMode || docMode <= 7));

                        // Normalize root to always include a leading and trailing slash.
                        this.root = ('/' + this.root + '/').replace(rootStripper, '/');

                        if (oldIE && this._wantsHashChange) {
                            var frame = Backbone.$('<iframe src="javascript:0" tabindex="-1">');
                            this.iframe = frame.hide().appendTo('body')[0].contentWindow;
                            this.navigate(fragment);
                        }

                        // Depending on whether we're using pushState or hashes, and whether
                        // 'onhashchange' is supported, determine how we check the URL state.
                        if (this._hasPushState) {
                            Backbone.$(window).on('popstate', this.checkUrl);
                        } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) {
                            Backbone.$(window).on('hashchange', this.checkUrl);
                        } else if (this._wantsHashChange) {
                            this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
                        }

                        // Determine if we need to change the base url, for a pushState link
                        // opened by a non-pushState browser.
                        this.fragment = fragment;
                        var loc = this.location;

                        // Transition from hashChange to pushState or vice versa if both are
                        // requested.
                        if (this._wantsHashChange && this._wantsPushState) {

                            // If we've started off with a route from a `pushState`-enabled
                            // browser, but we're currently in a browser that doesn't support it...
                            if (!this._hasPushState && !this.atRoot()) {
                                this.fragment = this.getFragment(null, true);
                                this.location.replace(this.root + '#' + this.fragment);
                                // Return immediately as browser will do redirect to new url
                                return true;

                                // Or if we've started out with a hash-based route, but we're currently
                                // in a browser where it could be `pushState`-based instead...
                            } else if (this._hasPushState && this.atRoot() && loc.hash) {
                                this.fragment = this.getHash().replace(routeStripper, '');
                                this.history.replaceState({}, document.title, this.root + this.fragment);
                            }

                        }

                        if (!this.options.silent) return this.loadUrl();
                    },

                    // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
                    // but possibly useful for unit testing Routers.
                    stop: function() {
                        Backbone.$(window).off('popstate', this.checkUrl).off('hashchange', this.checkUrl);
                        if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);
                        History.started = false;
                    },

                    // Add a route to be tested when the fragment changes. Routes added later
                    // may override previous routes.
                    route: function(route, callback) {
                        this.handlers.unshift({
                            route: route,
                            callback: callback
                        });
                    },

                    // Checks the current URL to see if it has changed, and if it has,
                    // calls `loadUrl`, normalizing across the hidden iframe.
                    checkUrl: function(e) {
                        var current = this.getFragment();
                        if (current === this.fragment && this.iframe) {
                            current = this.getFragment(this.getHash(this.iframe));
                        }
                        if (current === this.fragment) return false;
                        if (this.iframe) this.navigate(current);
                        this.loadUrl();
                    },

                    // Attempt to load the current URL fragment. If a route succeeds with a
                    // match, returns `true`. If no defined routes matches the fragment,
                    // returns `false`.
                    loadUrl: function(fragment) {
                        fragment = this.fragment = this.getFragment(fragment);
                        return _.any(this.handlers, function(handler) {
                            if (handler.route.test(fragment)) {
                                handler.callback(fragment);
                                return true;
                            }
                        });
                    },

                    // Save a fragment into the hash history, or replace the URL state if the
                    // 'replace' option is passed. You are responsible for properly URL-encoding
                    // the fragment in advance.
                    //
                    // The options object can contain `trigger: true` if you wish to have the
                    // route callback be fired (not usually desirable), or `replace: true`, if
                    // you wish to modify the current URL without adding an entry to the history.
                    navigate: function(fragment, options) {
                        if (!History.started) return false;
                        if (!options || options === true) options = {
                            trigger: !! options
                        };

                        var url = this.root + (fragment = this.getFragment(fragment || ''));

                        // Strip the hash for matching.
                        fragment = fragment.replace(pathStripper, '');

                        if (this.fragment === fragment) return;
                        this.fragment = fragment;

                        // Don't include a trailing slash on the root.
                        if (fragment === '' && url !== '/') url = url.slice(0, -1);

                        // If pushState is available, we use it to set the fragment as a real URL.
                        if (this._hasPushState) {
                            this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);

                            // If hash changes haven't been explicitly disabled, update the hash
                            // fragment to store history.
                        } else if (this._wantsHashChange) {
                            this._updateHash(this.location, fragment, options.replace);
                            if (this.iframe && (fragment !== this.getFragment(this.getHash(this.iframe)))) {
                                // Opening and closing the iframe tricks IE7 and earlier to push a
                                // history entry on hash-tag change.  When replace is true, we don't
                                // want this.
                                if (!options.replace) this.iframe.document.open().close();
                                this._updateHash(this.iframe.location, fragment, options.replace);
                            }

                            // If you've told us that you explicitly don't want fallback hashchange-
                            // based history, then `navigate` becomes a page refresh.
                        } else {
                            return this.location.assign(url);
                        }
                        if (options.trigger) return this.loadUrl(fragment);
                    },

                    // Update the hash location, either replacing the current entry, or adding
                    // a new one to the browser history.
                    _updateHash: function(location, fragment, replace) {
                        if (replace) {
                            var href = location.href.replace(/(javascript:|#).*$/, '');
                            location.replace(href + '#' + fragment);
                        } else {
                            // Some browsers require that `hash` contains a leading #.
                            location.hash = '#' + fragment;
                        }
                    }

                });

                // Create the default Backbone.history.
                Backbone.history = new History;

                // Helpers
                // -------
                // Helper function to correctly set up the prototype chain, for subclasses.
                // Similar to `goog.inherits`, but uses a hash of prototype properties and
                // class properties to be extended.
                var extend = function(protoProps, staticProps) {
                        var parent = this;
                        var child;

                        // The constructor function for the new subclass is either defined by you
                        // (the "constructor" property in your `extend` definition), or defaulted
                        // by us to simply call the parent's constructor.
                        if (protoProps && _.has(protoProps, 'constructor')) {
                            child = protoProps.constructor;
                        } else {
                            child = function() {
                                return parent.apply(this, arguments);
                            };
                        }

                        // Add static properties to the constructor function, if supplied.
                        _.extend(child, parent, staticProps);

                        // Set the prototype chain to inherit from `parent`, without calling
                        // `parent`'s constructor function.
                        var Surrogate = function() {
                                this.constructor = child;
                            };
                        Surrogate.prototype = parent.prototype;
                        child.prototype = new Surrogate;

                        // Add prototype properties (instance properties) to the subclass,
                        // if supplied.
                        if (protoProps) _.extend(child.prototype, protoProps);

                        // Set a convenience property in case the parent's prototype is needed
                        // later.
                        child.__super__ = parent.prototype;

                        return child;
                    };

                // Set up inheritance for the model, collection, router, view and history.
                Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;

                // Throw an error when a URL is needed, and none is supplied.
                var urlError = function() {
                        throw new Error('A "url" property or function must be specified');
                    };

                // Wrap an optional error callback with a fallback error event.
                var wrapError = function(model, options) {
                        var error = options.error;
                        options.error = function(resp) {
                            if (error) error(model, resp, options);
                            model.trigger('error', model, resp, options);
                        };
                    };

                return Backbone;

            }));


            Inject.INTERNAL.executor.exec1.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("lib/backbone/1.1.2/backbone.js", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fbackbone%2F1.1.2%2Fbackbone.js");
        try {
            Inject.INTERNAL.executor.exec1.innerFn.call(Inject.INTERNAL.executor.exec1.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec1.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fbackbone%2F1.1.2%2Fbackbone.js

#3 JavaScript::Eval (size: 2274, repeated: 1)

Inject.INTERNAL.executor.exec10.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec10.innerFn = function() {
            // id: javascripts/util/UrlUtils uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FUrlUtils.js
            var module = Inject.INTERNAL.executor.exec10.module,
                require = Inject.INTERNAL.executor.exec10.require,
                define = Inject.INTERNAL.executor.exec10.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore"], function(_) {
                return {
                    parseUrl: function(url) {
                        var parser = document.createElement("a"),
                            searchObject = {},
                            queries, split;
                        parser.href = url;
                        queries = parser.search.replace(/^\?/, "").replace("\x26amp;", "\x26").split("\x26");
                        _.each(_.compact(queries), function(query) {
                            split = query.split("\x3d");
                            searchObject[split[0]] = split[1]
                        });
                        return {
                            hash: parser.hash,
                            host: parser.host,
                            hostname: parser.hostname,
                            pathname: parser.pathname,
                            port: parser.port,
                            protocol: parser.protocol,
                            search: parser.search,
                            searchObject: searchObject
                        }
                    },
                    addUrlParams: function(url, params) {
                        var parsedUrl = this.parseUrl(url);
                        _.defaults(params, parsedUrl.searchObject);
                        url = url.split("?")[0];
                        _.each(params, function(val, name) {
                            var paramVar = ":" + name,
                                nameEncoded = encodeURIComponent(name),
                                valEncoded = val ? encodeURIComponent(val) : "";
                            if (url.search(paramVar) > -1) url = url.replace(paramVar, valEncoded);
                            else {
                                url += url.search(/\?/) === -1 ? "?" : "\x26";
                                url += nameEncoded + "\x3d" + valEncoded
                            }
                        });
                        return url
                    }
                }
            });

            Inject.INTERNAL.executor.exec10.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/util/UrlUtils", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FUrlUtils.js");
        try {
            Inject.INTERNAL.executor.exec10.innerFn.call(Inject.INTERNAL.executor.exec10.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec10.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FUrlUtils.js

#4 JavaScript::Eval (size: 1883, repeated: 1)

Inject.INTERNAL.executor.exec11.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec11.innerFn = function() {
            // id: javascripts/news/stream/appConfig uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappConfig.js
            var module = Inject.INTERNAL.executor.exec11.module,
                require = Inject.INTERNAL.executor.exec11.require,
                define = Inject.INTERNAL.executor.exec11.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore", "play", "javascripts/util/LangUtils", "javascripts/util/UrlUtils"], function(_, play, LangUtils, UrlUtils) {
                var urls = LangUtils.tryOrElse(_.partial(play.getEmbeddedContent, "app-urls"), {}),
                    lixes = LangUtils.tryOrElse(_.partial(play.getEmbeddedContent, "app-lixes"), {});
                return {
                    getUrl: function(key, params) {
                        var url = urls[key] || null;
                        if (url && params) url = UrlUtils.addUrlParams(url, params);
                        return url
                    },
                    getLix: function(key) {
                        return lixes[key] || null
                    },
                    getConfig: function() {
                        return {
                            lixes: lixes,
                            urls: urls
                        }
                    }
                }
            });

            Inject.INTERNAL.executor.exec11.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/appConfig", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappConfig.js");
        try {
            Inject.INTERNAL.executor.exec11.innerFn.call(Inject.INTERNAL.executor.exec11.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec11.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappConfig.js

#5 JavaScript::Eval (size: 2310, repeated: 1)

Inject.INTERNAL.executor.exec12.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec12.innerFn = function() {
            // id: javascripts/news/editor/requiredFields uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2FrequiredFields.js
            var module = Inject.INTERNAL.executor.exec12.module,
                require = Inject.INTERNAL.executor.exec12.require,
                define = Inject.INTERNAL.executor.exec12.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "fiber"], function($, _, Backbone, Fiber) {
                var i18n = LIModules.requires("i18n"),
                    DEFAULT_ERROR = "i18n_editor_invalid_fields";
                RequiredField = Fiber.extend(function() {
                    return {
                        init: function(field, validation, message) {
                            this.field = field;
                            this.message = i18n.get(message || DEFAULT_ERROR);
                            this.validate = _.bind(validation, this)
                        },
                        getMessage: function() {
                            return this.message
                        }
                    }
                }), RequiredFieldCollection = RequiredField.extend(function() {
                    return {
                        init: function(fields, message) {
                            var args = Array.prototype.slice.call(arguments);
                            this.fields = fields;
                            this.message = i18n.get(message || DEFAULT_ERROR)
                        },
                        validate: function(model) {
                            var self = this,
                                validatedValues = Array.prototype.slice.call(_.invoke(self.fields, "validate", model)),
                                fieldsValid = !_.every(validatedValues, function(e) {
                                    if (e === false) return true
                                });
                            return fieldsValid
                        }
                    }
                });
                return {
                    RequiredField: RequiredField,
                    RequiredFieldCollection: RequiredFieldCollection
                }
            });

            Inject.INTERNAL.executor.exec12.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/editor/requiredFields", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2FrequiredFields.js");
        try {
            Inject.INTERNAL.executor.exec12.innerFn.call(Inject.INTERNAL.executor.exec12.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec12.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2FrequiredFields.js

#6 JavaScript::Eval (size: 1938, repeated: 1)

Inject.INTERNAL.executor.exec13.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec13.innerFn = function() {
            // id: javascripts/news/editor/validators uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2Fvalidators.js
            var module = Inject.INTERNAL.executor.exec13.module,
                require = Inject.INTERNAL.executor.exec13.require,
                define = Inject.INTERNAL.executor.exec13.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone"], function($, _, Backbone) {
                return {
                    offsetValidator: function(model) {
                        return model.has(this.field) && parseInt(model.get(this.field), 10) > -1
                    },
                    existsValidator: function(model) {
                        return model.has(this.field, true)
                    },
                    hasContentValidator: function(model) {
                        return model.has(this.field, true) && model.get(this.field).replace(/&nbsp;|<\/?p>/g, "").trim().length > 0
                    },
                    gtLengthValidator: function(length, model) {
                        return model.get(this.field).length > length
                    },
                    ltLengthValidator: function(length, model) {
                        return model.get(this.field).length < length
                    }
                }
            });

            Inject.INTERNAL.executor.exec13.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/editor/validators", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2Fvalidators.js");
        try {
            Inject.INTERNAL.executor.exec13.innerFn.call(Inject.INTERNAL.executor.exec13.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec13.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Feditor%2Fvalidators.js

#7 JavaScript::Eval (size: 9371, repeated: 1)

Inject.INTERNAL.executor.exec14.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec14.innerFn = function() {
            // id: javascripts/news/stream/models/ArticleModel uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fmodels%2FArticleModel.js
            var module = Inject.INTERNAL.executor.exec14.module,
                require = Inject.INTERNAL.executor.exec14.require,
                define = Inject.INTERNAL.executor.exec14.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "javascripts/news/stream/appConfig", "javascripts/news/editor/requiredFields", "javascripts/news/editor/validators"], function($, _, Backbone, appConfig, RequiredFields, Validators) {
                var NEW_ARTICLE_ID = "new",
                    NEW_TOPIC_ARTICLE_ID = "newFromTopic",
                    DRAFT_STATE = "DRAFT",
                    PUBLISHED_STATE = "PUBLISHED",
                    RequiredField = RequiredFields.RequiredField,
                    RequiredFieldCollection = RequiredFields.RequiredFieldCollection,
                    offsetValidator = Validators.offsetValidator,
                    ltLengthValidator = Validators.ltLengthValidator,
                    existsValidator = Validators.existsValidator,
                    hasContentValidator = Validators.hasContentValidator,
                    BLANK_ATTRIBUTES = {
                        title: "",
                        content: "",
                        coverImageMediaId: "",
                        srcImageMediaId: "",
                        xOffset: "",
                        yOffset: ""
                    },
                    WHITELIST_ATTRIBUTES = ["published"],
                    IMMUTABLE_ATTRIBUTES = ["editorId"],
                    PROCESS_CONTENT_PIPE_METHODS = ["processEmbeds", "stripWhiteSpace"],
                    SRC_CACHE_DATA_ATTR = "data-src-cache";
                return Backbone.Model.extend({
                    idAttribute: "articleId",
                    saveQueue: $.Deferred().resolve(),
                    _requiredFields: [],
                    _publishedRequiredFields: [],
                    _corequiredFields: [new RequiredField("coverImageMediaId", existsValidator), new RequiredField("srcImageMediaId", existsValidator), new RequiredField("xOffset", offsetValidator), new RequiredField("yOffset", offsetValidator)],
                    initialize: function(options) {
                        var titleValidation = new RequiredField("title", hasContentValidator, "i18n_editor_title_missing"),
                            titleLengthValidation = new RequiredField("title", _.partial(ltLengthValidator, 151), "i18n_editor_title_too_long"),
                            contentValidation = new RequiredField("content", hasContentValidator, "i18n_editor_content_missing"),
                            contentLengthValidation = new RequiredField("content", _.partial(ltLengthValidator, 125E3), "i18n_editor_content_too_long"),
                            titleAndContentExists = new RequiredFieldCollection([titleValidation, contentValidation], "i18n_editor_title_and_content_missing"),
                            stateValidation = new RequiredField("state", existsValidator);
                        Backbone.Model.prototype.initialize.apply(this, arguments);
                        if (this.id) {
                            this.id = this.id.toString();
                            this.attributes.articleId = this.attributes.articleId.toString()
                        }
                        this.set({
                            "state": this.has("permLink") ? PUBLISHED_STATE : DRAFT_STATE
                        });
                        if (this.isNew()) this.originalAttributes = _.extend({}, BLANK_ATTRIBUTES, this.attributes);
                        if (appConfig.getLix("blankDraftsAllowed")) {
                            this._requiredFields = [stateValidation];
                            this._publishedRequiredFields = [titleAndContentExists, titleValidation, contentValidation, titleLengthValidation, contentLengthValidation]
                        } else this._requiredFields = [titleAndContentExists, titleValidation, contentValidation, stateValidation, titleLengthValidation, contentLengthValidation];
                        this.set(this.originalAttributes, {
                            silent: true
                        })
                    },
                    _xhr: null,
                    withCsrf: true,
                    resolve: function() {
                        this.canonical = _.clone(this.attributes);
                        this._xhr = $.Deferred().resolve()
                    },
                    fetch: function(options) {
                        var collection = this.collection,
                            data = {},
                            o;
                        options = options || {};
                        if (collection) {
                            o = collection.options;
                            if (o) {
                                data.contextId = o.contextId;
                                if (o.channel) data.channel = o.channel
                            }
                            data.index = collection.indexOf(this)
                        }
                        options.data = _.extend(data, options.data || {});
                        if (!this._xhr) this._xhr = Backbone.Model.prototype.fetch.call(this, options).fail(_.bind(function() {
                            this._xhr = null
                        }, this));
                        return this._xhr
                    },
                    setProcessedContent: function(content) {
                        if (!this.contentProcessed) {
                            if (this.syncedAttributes) this.syncedAttributes.content = content;
                            else if (this.originalAttributes) this.originalAttributes.content = content;
                            this.set("content", content, {
                                silent: true
                            });
                            this.contentProcessed = true
                        }
                    },
                    parse: function(response, options) {
                        if (response.article) response = response.article;
                        if (response.permLink) response.state = PUBLISHED_STATE;
                        if (response.content) response.content = response.content.replace(/>\n/g, "\x3e").replace(/\s?\/>/g, "\x3e");
                        if (response.permLink && !response.articleId) response.published = true;
                        _.each(response, function(value, key) {
                            response[key] = _.isNull(value) ? "" : value
                        }, this);
                        if (this.syncedAttributes) _.extend(this.syncedAttributes, response);
                        else this.syncedAttributes = _.defaults(response, this.attributes);
                        return response
                    },
                    revertAllChanges: function(options) {
                        this.trigger("clean");
                        return this.set(this.syncedAttributes || this.originalAttributes || {}, options)
                    },
                    has: function(attribute, truthy) {
                        var self;
                        if (_.isArray(attribute)) {
                            self = this;
                            return _.every(attribute, function(attr) {
                                return truthy ? this.has(attr) && this.get(attr) != false : this.has(attr)
                            }, this)
                        } else return truthy ? this.has(attribute) && this.get(attribute) != false : Backbone.Model.prototype.has.apply(this, arguments)
                    },
                    isOutOfSync: function() {
                        var syncedAttributes = this.syncedAttributes || this.originalAttributes || this.changedAttributes(),
                            changedAttributes = this.changedAttributes(syncedAttributes),
                            hasWhiteListKey = _.isObject(changedAttributes) && !_.isEmpty(_.pick(changedAttributes, WHITELIST_ATTRIBUTES));
                        changedAttributes = !_.isEmpty(_.filter(changedAttributes, function(item, key) {
                            return IMMUTABLE_ATTRIBUTES.indexOf(key) < 0
                        }));
                        return changedAttributes && !hasWhiteListKey
                    },
                    hasSome: function(attributes, truthy) {
                        return _.some(attributes, function(attr) {
                            attr = attr.field || attr;
                            return truthy ? this.has(attr, true) : this.has(attr)
                        }, this)
                    },
                    url: function() {
                        var url = Backbone.Model.prototype.url.call(this);
                        url = this.withCsrf ? play.addCsrfTokenToUrl(url) : url;
                        return url
                    },
                    isNew: function() {
                        return this.get(this.idAttribute) === NEW_ARTICLE_ID || this.get(this.idAttribute).indexOf(NEW_TOPIC_ARTICLE_ID) !== -1 || Backbone.Model.prototype.isNew.apply(this)
                    },
                    processContent: function(content) {
                        var finalContent;
                        for (var x = 0; x < PROCESS_CONTENT_PIPE_METHODS.length; x++) finalContent = this[PROCESS_CONTENT_PIPE_METHODS[x]].call(this, finalContent || content);
                        return finalContent
                    },
                    stripWhiteSpace: function(content) {
                        var $content = $(content),
                            $lastEl = $content.last(),
                            $iterateEl;
                        if (isEmpty($lastEl)) for (var x = $content.length - 1; x > 0; x--) {
                            $iterateEl = $($content[x]);
                            if (isEmpty($iterateEl) && $iterateEl.not("iframe").length) Array.prototype.splice.call($content, x, 1);
                            else break
                        }
                        function isEmpty($el) {
                            return $.trim($el.text()) === "" && $el.children().length === 0
                        }
                        return $.fn.append.apply($("\x3cdiv\x3e"), $content).html()
                    },
                    save: function(key, val, options) {
                        var keyIsString = _.isString(key),
                            processedContent = this.processContent(this.get("content")),
                            args = _.toArray(arguments),
                            saveResult = $.Deferred(),
                            savePromise = saveResult.promise(),
                            boundQueueSave;
                        if (!keyIsString || key === "content") {
                            if (!options && !keyIsString && _.isObject(val)) options = val;
                            else if (!_.isObject(options)) options = {};
                            options.attrs = _.extend({}, this.attributes, {
                                content: processedContent
                            });
                            if (keyIsString) args[2] = options;
                            else args[1] = options
                        }
                        function queueSave() {
                            this.saveQueue = Backbone.Model.prototype.save.apply(this, args);
                            if (!this.saveQueue) {
                                saveResult.reject(this.saveQueue);
                                this.saveQueue = $.Deferred().resolve()
                            } else this.saveQueue.then(_.bind(function(data) {
                                saveResult.resolve(data);
                                this.syncedAttributes = _.clone(this.attributes)
                            }, this), _.bind(function(data) {
                                saveResult.reject(data || {})
                            }, this))
                        }
                        boundQueueSave = _.bind(queueSave, this);
                        this.saveQueue.then(boundQueueSave, boundQueueSave);
                        return savePromise
                    },
                    publish: function(key, val, options) {
                        this.set("publish", true);
                        return this.save.apply(this, arguments)
                    },
                    processEmbeds: function() {
                        var content = this.attributes.content,
                            contentElement = document.createElement("html");
                        contentElement.innerHTML = content;
                        if (!appConfig.getLix("embedlyEmbedsEnabled")) return content;
                        iframes = contentElement.querySelectorAll("iframe");
                        _.each(iframes, function(val, key) {
                            var dataSrc = val.getAttribute(SRC_CACHE_DATA_ATTR);
                            if (dataSrc) {
                                val.src = val.src + "\x26embedData\x3d" + dataSrc.replace(/'/g, "%27");
                                val.removeAttribute(SRC_CACHE_DATA_ATTR)
                            }
                        });
                        return contentElement.querySelector("body").innerHTML
                    },
                    validate: function(attributes, options) {
                        var requiredFields = this._requiredFields,
                            field, invalidFields = [];
                        if (this.hasSome(this._corequiredFields, true)) requiredFields = requiredFields.concat(this._corequiredFields);
                        if (this.get("state") === PUBLISHED_STATE) requiredFields = requiredFields.concat(this._publishedRequiredFields);
                        invalidFields = _.filter(requiredFields, function(requiredField) {
                            return !requiredField.validate(this)
                        }, this);
                        if (invalidFields.length) return invalidFields
                    }
                })
            });

            Inject.INTERNAL.executor.exec14.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/models/ArticleModel", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fmodels%2FArticleModel.js");
        try {
            Inject.INTERNAL.executor.exec14.innerFn.call(Inject.INTERNAL.executor.exec14.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec14.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fmodels%2FArticleModel.js

#8 JavaScript::Eval (size: 2560, repeated: 1)

Inject.INTERNAL.executor.exec15.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec15.innerFn = function() {
            // id: javascripts/news/stream/collections/NavCollection uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fcollections%2FNavCollection.js
            var module = Inject.INTERNAL.executor.exec15.module,
                require = Inject.INTERNAL.executor.exec15.require,
                define = Inject.INTERNAL.executor.exec15.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["backbone", "underscore", "../models/ArticleModel"], function(Backbone, _, ArticleModel) {
                return Backbone.Collection.extend({
                    options: {
                        count: 10,
                        start: 0,
                        token: null,
                        contextId: null
                    },
                    model: ArticleModel,
                    url: "/pulse/api/stream-list",
                    initialize: function(models, options) {
                        _.extend(this.options, options);
                        this.url = this.options.url || this.url;
                        this.currentCategoryTitle = "";
                        this.setPaging(this.options)
                    },
                    setPaging: function(data, setNext) {
                        this._paging = _.defaults({
                            start: data.start,
                            count: data.count,
                            token: data.token,
                            contextId: data.contextId,
                            channel: data.channel
                        }, this._paging);
                        if (setNext) this._paging.start = this._paging.start + this._paging.count
                    },
                    parse: function(res) {
                        res = (res && this.options.dataRootKey ? res[this.options.dataRootKey] : res) || {};
                        this.setPaging(res.paging, true);
                        if (res.paging.total) this.totalArticleCount = res.paging.total;
                        if (res.channelTitle) this.currentCategoryTitle = res.channelTitle;
                        return res.elements || []
                    },
                    fetch: function(options) {
                        options = _.extend({
                            data: {},
                            remove: false
                        }, options);
                        options.data = _.extend(this._paging, options.data);
                        return Backbone.Collection.prototype.fetch.call(this, options)
                    }
                })
            });

            Inject.INTERNAL.executor.exec15.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/collections/NavCollection", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fcollections%2FNavCollection.js");
        try {
            Inject.INTERNAL.executor.exec15.innerFn.call(Inject.INTERNAL.executor.exec15.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec15.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fcollections%2FNavCollection.js

#9 JavaScript::Eval (size: 2254, repeated: 1)

Inject.INTERNAL.executor.exec16.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec16.innerFn = function() {
            // id: javascripts/news/stream/AppRouter uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FAppRouter.js
            var module = Inject.INTERNAL.executor.exec16.module,
                require = Inject.INTERNAL.executor.exec16.require,
                define = Inject.INTERNAL.executor.exec16.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["backbone", "underscore", "javascripts/util/UrlUtils", "./appConfig"], function(Backbone, _, UrlUtils, appConfig) {
                var oldRoutes = {
                    "pulse/article/:articleId/edit(/)": "edit",
                    "pulse/article/new(/)": "create",
                    "pulse/article/:articleId(/)": "article"
                };
                var newRoutes = {
                    "pulse/article/:articleId/edit(/)": "edit",
                    "pulse/article/new(/)": "create",
                    "pulse/:category/:categoryId(/)": "category",
                    "pulse/:articleId(/)": "article",
                    "pulse(/)": "default"
                };
                var isUrlMigrationEnabled = !! appConfig.getLix("dexterUrlMigrationEnabled");
                return Backbone.Router.extend({
                    routes: isUrlMigrationEnabled ? newRoutes : oldRoutes,
                    urlFor: function(route, params) {
                        var path = _.invert(this.routes)[route] || "";
                        path = path.match(/(?:[\w:\/])+/)[0];
                        if (path && params) path = UrlUtils.addUrlParams(path, params);
                        return path
                    },
                    navigateRoute: function(route, params, options) {
                        var url = this.urlFor(route, params);
                        this.navigate(url, options)
                    }
                })
            });

            Inject.INTERNAL.executor.exec16.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/AppRouter", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FAppRouter.js");
        try {
            Inject.INTERNAL.executor.exec16.innerFn.call(Inject.INTERNAL.executor.exec16.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec16.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FAppRouter.js

#10 JavaScript::Eval (size: 3122, repeated: 1)

Inject.INTERNAL.executor.exec17.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec17.innerFn = function() {
            // id: javascripts/news/UnifiedEventTracking uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FUnifiedEventTracking.js
            var module = Inject.INTERNAL.executor.exec17.module,
                require = Inject.INTERNAL.executor.exec17.require,
                define = Inject.INTERNAL.executor.exec17.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl"], function($) {
                (function() {
                    var BaseControl = LIModules.requires("BaseControl"),
                        UnifiedEventTracking = BaseControl.extend(function(base) {
                            var DEFAULT_CONFIG = {
                                trackingUrl: "/api/tracking",
                                trackingData: {}
                            },
                                CLICK = "click",
                                CLICK_TRACK_ACTION = "CLICK",
                                DATA_ATTR_NAMESPACE = "li-uetrk";
                            return {
                                beforeDecoration: function() {
                                    _.defaults(this._config, DEFAULT_CONFIG);
                                    this._dataAttrPrefix = "data-" + DATA_ATTR_NAMESPACE
                                },
                                attachEventListeners: function() {
                                    this._$el.on(CLICK, "[" + this._dataAttrPrefix + "-click]", this._evtTrackClick)
                                },
                                removeEventListeners: function() {
                                    this._$el.off("." + DATA_ATTR_NAMESPACE)
                                },
                                _getElementTrackingToken: function($el) {
                                    var $token = $el.closest("[" + this._dataAttrPrefix + "-token]");
                                    return $token.length ? $token.data(DATA_ATTR_NAMESPACE + "-token") : null
                                },
                                _evtTrackClick: function(evt) {
                                    var $el = $(evt.currentTarget),
                                        isCustomAction = $el.data(DATA_ATTR_NAMESPACE + "-action");
                                    this.trackByElement(isCustomAction ? isCustomAction.toUpperCase() : CLICK_TRACK_ACTION, $el, {
                                        target: $el.data(DATA_ATTR_NAMESPACE + "-click")
                                    }, false)
                                },
                                track: function(action, token, data, isAsync) {
                                    var c = this._config;
                                    if (!action || !token) return false;
                                    isAsync = isAsync !== false ? true : false;
                                    data = _.extend({}, c.trackingData || {}, data || {}, {
                                        action: action,
                                        tracking: token
                                    });
                                    return $.ajax({
                                        method: "POST",
                                        url: c.trackingUrl,
                                        data: data,
                                        async: isAsync
                                    })
                                },
                                trackByElement: function(action, el, data, isAsync) {
                                    var trackParam = $(el).data(DATA_ATTR_NAMESPACE + "-el");
                                    if (!data && trackParam) data = {
                                        target: trackParam
                                    };
                                    this.track(action, this._getElementTrackingToken($(el)), data, isAsync)
                                }
                            }
                        });
                    LIModules.exports("news.UnifiedEventTracking", UnifiedEventTracking)
                })();;
                if (typeof LI.news.UnifiedEventTracking !== "undefined") {
                    module.setExports(LI.news.UnifiedEventTracking);
                }
            });

            Inject.INTERNAL.executor.exec17.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/UnifiedEventTracking", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FUnifiedEventTracking.js");
        try {
            Inject.INTERNAL.executor.exec17.innerFn.call(Inject.INTERNAL.executor.exec17.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec17.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FUnifiedEventTracking.js

#11 JavaScript::Eval (size: 1740, repeated: 1)

Inject.INTERNAL.executor.exec18.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec18.innerFn = function() {
            // id: javascripts/news/stream/appTracking uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappTracking.js
            var module = Inject.INTERNAL.executor.exec18.module,
                require = Inject.INTERNAL.executor.exec18.require,
                define = Inject.INTERNAL.executor.exec18.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["javascripts/news/UnifiedEventTracking"], function(UnifiedEventTracking) {
                var ueTracking;
                UnifiedEventTracking = UnifiedEventTracking || LIModules.requires("UnifiedEventTracking");
                ueTracking = new UnifiedEventTracking("#main", {
                    trackingUrl: play.url({
                        alias: "com.linkedin.news.controllers.ApiController.trackAction",
                        withCsrf: true
                    })
                });
                return ueTracking
            });

            Inject.INTERNAL.executor.exec18.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/appTracking", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappTracking.js");
        try {
            Inject.INTERNAL.executor.exec18.innerFn.call(Inject.INTERNAL.executor.exec18.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec18.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2FappTracking.js

#12 JavaScript::Eval (size: 4283, repeated: 1)

Inject.INTERNAL.executor.exec19.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec19.innerFn = function() {
            // id: scripts/shared/StickyBox uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FStickyBox.js
            var module = Inject.INTERNAL.executor.exec19.module,
                require = Inject.INTERNAL.executor.exec19.require,
                define = Inject.INTERNAL.executor.exec19.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var BaseControl = LIModules.requires("BaseControl"),
                    $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore");
                var StickyBox = BaseControl.extend(function(base) {
                    var $win = $(window),
                        stickyBoxList = [],
                        INTERVAL = 50;

                    function updateAll() {
                        for (var i = 0; i < stickyBoxList.length; ++i) stickyBoxList[i].update()
                    }
                    $win.scroll(_.throttle(updateAll, INTERVAL));
                    return {
                        DEFAULTS: {
                            "stickyClass": "stuck",
                            "stickyBottomClass": "stuck-bottom",
                            "topOffset": 0,
                            "bottomOffset": 0
                        },
                        init: function(el, config) {
                            base.init.call(this, el, config);
                            _.defaults(this._config, this.DEFAULTS);
                            stickyBoxList.push(this)
                        },
                        beforeDecoration: function() {
                            this._$prev = this._$el.prev();
                            this._$parent = this._$el.parent();
                            this._stuck = false;
                            this._stuckAtBottom = false;
                            if (_.has(this._config, "upperBoundEl")) this._$upperBoundEl = $(this._config["upperBoundEl"]);
                            if (_.has(this._config, "lowerBoundEl")) this._$lowerBoundEl = $(this._config["lowerBoundEl"])
                        },
                        getUpperBoundElHeight: function() {
                            return this._$upperBoundEl ? this._$upperBoundEl.outerHeight() : 0
                        },
                        getScrollTop: function() {
                            return $win.scrollTop() + this.getUpperBoundElHeight() + this._config.topOffset
                        },
                        isScrolledBelow: function() {
                            var top = this._$el.offset().top,
                                scrollTop = this.getScrollTop();
                            return scrollTop > top
                        },
                        isScrolledAbove: function() {
                            var top = this._$prev.length ? this._$prev.offset().top + this._$prev.outerHeight() : this._$parent.offset().top,
                                scrollTop = this.getScrollTop();
                            return top > scrollTop
                        },
                        isAtBottom: function() {
                            if (this._$lowerBoundEl) return !this.isAboveBottom();
                            return false
                        },
                        isAboveBottom: function() {
                            if (this._$lowerBoundEl) {
                                var scrollTop = this.getScrollTop(),
                                    lowerBoundOffsetTop = this._$lowerBoundEl.offset().top;
                                return scrollTop + this._$el.outerHeight() + this._config.bottomOffset < lowerBoundOffsetTop
                            }
                            return true
                        },
                        stick: function() {
                            this._stuck = true;
                            this._$el.addClass(this._config.stickyClass);
                            this._$el.css("top", this.getUpperBoundElHeight() + this._config.topOffset + "px")
                        },
                        unstick: function() {
                            this._$el.removeClass(this._config.stickyClass);
                            this._stuck = false
                        },
                        stickAtBottom: function() {
                            if (this._stuck) this.unstick();
                            this._stuckAtBottom = true;
                            this._$el.addClass(this._config.stickyBottomClass);
                            if (this._$lowerBoundEl) {
                                var top = this._$lowerBoundEl.offset().top - this._$el.outerHeight() - this._config.bottomOffset;
                                this._$el.css("top", top + "px")
                            }
                        },
                        unstickFromBottom: function() {
                            this._stuckAtBottom = false;
                            this._$el.removeClass(this._config.stickyBottomClass);
                            this._$el.css("top", "")
                        },
                        update: function(force) {
                            if (force) this.reset();
                            if (!this._stuckAtBottom) if (this.isAtBottom()) this.stickAtBottom();
                            else if (!this._stuck && this.isScrolledBelow()) this.stick();
                            else {
                                if (this._stuck && this.isScrolledAbove()) this.unstick()
                            } else if (this.isAboveBottom()) {
                                this.unstickFromBottom();
                                this.update()
                            }
                        },
                        reset: function() {
                            if (this._stuck) this.unstick();
                            else if (this._stuckAtBottom) this.unstickFromBottom()
                        },
                        updateUpperBoundElHeight: function(elHeight) {
                            if (this._stuck) this._$el.css("top", elHeight + this._config.topOffset)
                        }
                    }
                });
                LIModules.exports("StickyBox", StickyBox)
            })();

            Inject.INTERNAL.executor.exec19.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/StickyBox", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FStickyBox.js");
        try {
            Inject.INTERNAL.executor.exec19.innerFn.call(Inject.INTERNAL.executor.exec19.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec19.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FStickyBox.js

#13 JavaScript::Eval (size: 4838, repeated: 1)

Inject.INTERNAL.executor.exec2.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec2.innerFn = function() {
            // id: scripts/core/Events uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FEvents.js
            var module = Inject.INTERNAL.executor.exec2.module,
                require = Inject.INTERNAL.executor.exec2.require,
                define = Inject.INTERNAL.executor.exec2.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["backbone"], function(Backbone) {
                (function(modules) {
                    var array = [],
                        push = array.push,
                        slice = array.slice,
                        splice = array.splice,
                        _ = modules.requires("underscore"),
                        Backbone = modules.imports("Backbone"),
                        Events = Backbone && Backbone.Events;
                    if (!Events) {
                        Events = {
                            on: function(name, callback, context) {
                                if (!eventsApi(this, "on", name, [callback, context]) || !callback) return this;
                                this._events = this._events || {};
                                var events = this._events[name] || (this._events[name] = []);
                                events.push({
                                    callback: callback,
                                    context: context,
                                    ctx: context || this
                                });
                                return this
                            },
                            once: function(name, callback, context) {
                                if (!eventsApi(this, "once", name, [callback, context]) || !callback) return this;
                                var self = this;
                                var once = _.once(function() {
                                    self.off(name, once);
                                    callback.apply(this, arguments)
                                });
                                once._callback = callback;
                                return this.on(name, once, context)
                            },
                            off: function(name, callback, context) {
                                var retain, ev, events, names, i, l, j, k;
                                if (!this._events || !eventsApi(this, "off", name, [callback, context])) return this;
                                if (!name && !callback && !context) {
                                    this._events = {};
                                    return this
                                }
                                names = name ? [name] : _.keys(this._events);
                                for (i = 0, l = names.length; i < l; i++) {
                                    name = names[i];
                                    events = this._events[name];
                                    if (events) {
                                        this._events[name] = retain = [];
                                        if (callback || context) for (j = 0, k = events.length; j < k; j++) {
                                            ev = events[j];
                                            if (callback && callback !== ev.callback && callback !== ev.callback._callback || context && context !== ev.context) retain.push(ev)
                                        }
                                        if (!retain.length) delete this._events[name]
                                    }
                                }
                                return this
                            },
                            trigger: function(name) {
                                if (!this._events) return this;
                                var args = slice.call(arguments, 1);
                                if (!eventsApi(this, "trigger", name, args)) return this;
                                var events = this._events[name];
                                var allEvents = this._events.all;
                                if (events) triggerEvents(events, args);
                                if (allEvents) triggerEvents(allEvents, arguments);
                                return this
                            },
                            stopListening: function(obj, name, callback) {
                                var listeners = this._listeners;
                                if (!listeners) return this;
                                var deleteListener = !name && !callback;
                                if (typeof name === "object") callback = this;
                                if (obj)(listeners = {})[obj._listenerId] = obj;
                                for (var id in listeners) {
                                    listeners[id].off(name, callback, this);
                                    if (deleteListener) delete this._listeners[id]
                                }
                                return this
                            }
                        };
                        var eventSplitter = /\s+/;
                        var eventsApi = function(obj, action, name, rest) {
                                if (!name) return true;
                                if (typeof name === "object") {
                                    for (var key in name) obj[action].apply(obj, [key, name[key]].concat(rest));
                                    return false
                                }
                                if (eventSplitter.test(name)) {
                                    var names = name.split(eventSplitter);
                                    for (var i = 0, l = names.length; i < l; i++) obj[action].apply(obj, [names[i]].concat(rest));
                                    return false
                                }
                                return true
                            };
                        var triggerEvents = function(events, args) {
                                var ev, i = -1,
                                    l = events.length,
                                    a1 = args[0],
                                    a2 = args[1],
                                    a3 = args[2];
                                switch (args.length) {
                                case 0:
                                    while (++i < l)(ev = events[i]).callback.call(ev.ctx);
                                    return;
                                case 1:
                                    while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1);
                                    return;
                                case 2:
                                    while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2);
                                    return;
                                case 3:
                                    while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2, a3);
                                    return;
                                default:
                                    while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args)
                                }
                            };
                        var listenMethods = {
                            listenTo: "on",
                            listenToOnce: "once"
                        };
                        _.each(listenMethods, function(implementation, method) {
                            Events[method] = function(obj, name, callback) {
                                var listeners = this._listeners || (this._listeners = {});
                                var id = obj._listenerId || (obj._listenerId = _.uniqueId("l"));
                                listeners[id] = obj;
                                if (typeof name === "object") callback = this;
                                obj[implementation](name, callback, this);
                                return this
                            }
                        });
                        _.each(_.keys(Events), function(methodName) {
                            Events[methodName] = _.bind(Events[methodName], Events)
                        })
                    }
                    Events.bind = Events.on;
                    Events.unbind = Events.off;
                    Events.fire = Events.trigger;
                    modules.exports("Events", Events)
                })(LIModules);;
                if (typeof LI.Events !== "undefined") {
                    module.setExports(LI.Events);
                }
            });

            Inject.INTERNAL.executor.exec2.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/core/Events", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FEvents.js");
        try {
            Inject.INTERNAL.executor.exec2.innerFn.call(Inject.INTERNAL.executor.exec2.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec2.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FEvents.js

#14 JavaScript::Eval (size: 3289, repeated: 1)

Inject.INTERNAL.executor.exec20.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec20.innerFn = function() {
            // id: scripts/apps/plato/rankings/RankingsStickyBox uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fplato%2Frankings%2FRankingsStickyBox.js
            var module = Inject.INTERNAL.executor.exec20.module,
                require = Inject.INTERNAL.executor.exec20.require,
                define = Inject.INTERNAL.executor.exec20.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl", "scripts/shared/StickyBox"], function($) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        Events = LIModules.requires("Events"),
                        StickyBox = LIModules.requires("StickyBox"),
                        RankingsStickyBox = StickyBox.extend(function(base) {
                            var $topHeader = $("#header-banner").length ? $("#header-banner") : $("#top-header"),
                                $respNav = $("#header-navigation").length ? $("#header-navigation") : $("#responsive-nav-scrollable"),
                                topHeaderHeight = $topHeader.height(),
                                respNavHeight = $respNav.height();
                            return {
                                init: function(el, config) {
                                    base.init.call(this, el, config);
                                    var self = this;
                                    if (this._$el.data("nav-collapse") === "disabled") {
                                        if (!config.topOffset) config.topOffset = 0;
                                        config.topOffset += respNavHeight
                                    } else if (window.globalNav && window.globalNav.subNav) {
                                        window.globalNav.subNav.onWillAnimateDown(function() {
                                            self.updateUpperBoundElHeight(topHeaderHeight + respNavHeight)
                                        });
                                        window.globalNav.subNav.onWillAnimateUp(function() {
                                            self.updateUpperBoundElHeight(topHeaderHeight)
                                        })
                                    } else {
                                        Events.bind("globalnav:show", function() {
                                            self.updateUpperBoundElHeight(topHeaderHeight + respNavHeight)
                                        });
                                        Events.bind("globalnav:hide", function() {
                                            self.updateUpperBoundElHeight(topHeaderHeight)
                                        });
                                        Events.bind("globalnav:show:animation:step", function(evt) {
                                            var newNavHeight = evt.delta * respNavHeight + topHeaderHeight;
                                            self.updateUpperBoundElHeight(newNavHeight)
                                        });
                                        Events.bind("globalnav:hide:animation:step", function(evt) {
                                            var newNavHeight = topHeaderHeight + respNavHeight - respNavHeight * evt.delta;
                                            self.updateUpperBoundElHeight(newNavHeight)
                                        })
                                    }
                                },
                                unstick: function() {
                                    base.unstick.call(this);
                                    this._$el.css("top", "")
                                }
                            }
                        });
                    LIModules.exports("Plato.RankingsStickyBox", RankingsStickyBox)
                })(window.LIModules);;
                if (typeof LI.Plato.RankingsStickyBox !== "undefined") {
                    module.setExports(LI.Plato.RankingsStickyBox);
                }
            });

            Inject.INTERNAL.executor.exec20.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/plato/rankings/RankingsStickyBox", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fplato%2Frankings%2FRankingsStickyBox.js");
        try {
            Inject.INTERNAL.executor.exec20.innerFn.call(Inject.INTERNAL.executor.exec20.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec20.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fplato%2Frankings%2FRankingsStickyBox.js

#15 JavaScript::Eval (size: 10513, repeated: 1)

Inject.INTERNAL.executor.exec21.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec21.innerFn = function() {
            // id: scripts/shared/Dialog uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDialog.js
            var module = Inject.INTERNAL.executor.exec21.module,
                require = Inject.INTERNAL.executor.exec21.require,
                define = Inject.INTERNAL.executor.exec21.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(LIModules) {
                var $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore"),
                    dust = LIModules.requires("dust"),
                    Controls = LIModules.imports("Controls") || {},
                    BaseControl = LIModules.requires("BaseControl"),
                    i18n = LIModules.requires("i18n"),
                    parseFragment = LIModules.imports("Controls.parseFragment") ||
                function() {}, env = LIModules.imports("environment"), lix = LIModules.imports("LiX"), jSecure = LIModules.imports("jSecure"), previousClose = null;
                var _registerSingleton = function(closeFunction) {
                        if (previousClose && typeof previousClose === "function") previousClose();
                        previousClose = closeFunction
                    };
                var _noop = function() {};

                function _setHtml(el, html, isUnsafe) {
                    var jSecureSetHtml = jSecure && jSecure.setElementContent;
                    var canUseJSecure = !isUnsafe && lix && lix.get("jsecure_Dialog") === "enabled";
                    if (canUseJSecure && jSecureSetHtml) jSecure.setElementContent(el, html, {});
                    else $(el).html(html)
                }
                var DialogBox = BaseControl.extend(function(base) {
                    var DEFAULT_CONFIG = {
                        width: 500,
                        top: 150,
                        xOffset: 0,
                        yOffset: 0,
                        errorMessage: "We're sorry. Something unexpected happened and your request could not be completed. Please try again.",
                        closeText: "Close",
                        startText: "Dialog start",
                        endText: "Dialog end",
                        customClassName: undefined,
                        dialogTemplate: "tl/shared/dialog",
                        dialogCss: env && env.consumer2 ? ["css!scss/modules/dialog/dialog_standalone"] : ["css!scss/modules/dialog_v3"],
                        cssDependencies: null,
                        templateDataUrl: null,
                        centerVertically: false,
                        fitDialogBoxToWindow: true,
                        callbacks: {
                            beforeOpen: _noop,
                            afterOpen: _noop,
                            beforeClose: _noop,
                            afterClose: _noop
                        }
                    },
                        CLICK = "click",
                        KEYUP = "keyup",
                        RESIZE = "resize",
                        CLASS_DIALOG_BODY = "dialog-body",
                        BOTTOM_SPACE = 50;

                    function getRegisteredI18n() {
                        var dialogi18n = [{
                            key: "errorMessage",
                            value: "dialogbox_error_generic"
                        }, {
                            key: "closeText",
                            value: "dialogbox_close"
                        }, {
                            key: "startText",
                            value: "dialogbox_start"
                        }, {
                            key: "endText",
                            value: "dialogbox_end"
                        }],
                            len = dialogi18n.length,
                            i = 0,
                            output = {},
                            i18nValue = "";
                        for (; i < len; i++) {
                            i18nValue = i18n.get(dialogi18n[i].value);
                            if (i18nValue) output[dialogi18n[i].key] = i18nValue
                        }
                        return output
                    }
                    return {
                        beforeDecoration: function() {
                            this._$dialog = undefined;
                            this._config = _.defaults(this._config, getRegisteredI18n(), DEFAULT_CONFIG);
                            this._config.callbacks = _.defaults(this._config.callbacks, DEFAULT_CONFIG.callbacks);
                            this._requiredTemplates = [this._config.dialogTemplate];
                            this._requiredCSS = _.flatten(_.compact([this._config.dialogCss, this._config.cssDependencies]));
                            this._href = this._config.templateDataUrl || this._$el.data("href") || this._$el.attr("href")
                        },
                        attachEventListeners: function() {
                            this._$el.on(CLICK, _.bind(this._eventOpen, this))
                        },
                        detachEventListeners: function() {
                            this._$el.off(CLICK)
                        },
                        onResolve: function(mapping) {
                            this.open()
                        },
                        _eventOpen: function(evt) {
                            evt.preventDefault();
                            this.open()
                        },
                        _eventClose: function(evt) {
                            evt.preventDefault();
                            this.close()
                        },
                        _keyupHandler: function(evt) {
                            if (evt.which === 27) this._eventClose(evt)
                        },
                        _resizeHandler: _.throttle(function(evt) {
                            if (this._$dialog && this._$dialog.length) {
                                this._$dialog.css(this._getPosition());
                                this._fitToWindow()
                            }
                        }, 500),
                        _attachEventListeners: function() {
                            this._$dialog.on(CLICK, ".dialog-close", this._eventClose);
                            $(document).on(KEYUP, this._keyupHandler);
                            $(window).on(RESIZE, this._resizeHandler)
                        },
                        open: function() {
                            if (!this._opened) {
                                this._config.callbacks.beforeOpen(this);
                                this._opened = true;
                                return $.when(this.loadDependencies(this._requiredTemplates), this.loadCss(this._requiredCSS)).then(_registerSingleton(_.bind(this.close, this))).then(_.bind(this._render, this)).then(_.bind(this.setFocusToDialog, this)).then(_.bind(function() {
                                    this._config.callbacks.afterOpen(this)
                                }, this)).fail(_.bind(this.close, this))
                            }
                        },
                        close: function() {
                            if (this._opened) this._config.callbacks.beforeClose(this);
                            if (this._$dialog) this._$dialog.remove();
                            this._rendered = false;
                            $(document).off(KEYUP, this._keyupHandler);
                            $(window).off(RESIZE, this._resizeHandler);
                            if (this._opened) {
                                this._opened = false;
                                this._$el.focus();
                                this._config.callbacks.afterClose(this)
                            }
                        },
                        destroy: function() {
                            this.close();
                            this.detachEventListeners();
                            base.destroy.apply(this, arguments)
                        },
                        setFocusToDialog: function() {
                            this._$dialog.attr("tabindex", -1);
                            this._$dialog.focus()
                        },
                        _loadContent: function() {
                            var $targetEl = $(this._href),
                                targetElContent = $targetEl.html(),
                                deferral = new $.Deferred;
                            if ($targetEl[0] || !this._href) deferral.resolve(targetElContent);
                            else deferral.reject();
                            return deferral.promise()
                        },
                        _buildMarkup: function() {
                            return this._renderDialogMarkup().then(this._renderMarkUpSuccess, this._renderMarkUpFailure)
                        },
                        _renderMarkUpSuccess: function(dialogMarkup) {
                            this._$dialog = $(dialogMarkup).prop("id", "modeless-dialog");
                            if (this._config.customClassName) this._$dialog.addClass(this._config.customClassName);
                            $("body").append(this._$dialog);
                            this._$dialog.css(this._getPosition());
                            this._rendered = true
                        },
                        _renderMarkUpFailure: function() {
                            throw new Error("Unable to render dialog markup");
                        },
                        _loadContentSuccess: function(dialogContent) {
                            this.setDialogBodyContent(dialogContent)
                        },
                        _loadContentFail: function() {
                            this.setDialogBodyContent(this._config.errorMessage)
                        },
                        setDialogBodyContent: function(html, options) {
                            var dialogBody = this._$dialog.find("." + CLASS_DIALOG_BODY)[0];
                            options = options || {};
                            _setHtml(dialogBody, html, options.isUnsafe);
                            parseFragment(this._$dialog);
                            this._$dialog.css(this._getPosition());
                            this._fitToWindow()
                        },
                        _render: function() {
                            return this._buildMarkup().then(this._loadContent).then(this._loadContentSuccess, this._loadContentFail).always(this._attachEventListeners)
                        },
                        _renderDialogMarkup: function() {
                            var deferral = new $.Deferred;
                            dust.render(this._config.dialogTemplate, this._config, function postDustRender(err, out) {
                                if (err) deferral.reject(err);
                                else deferral.resolve(out)
                            });
                            return deferral.promise()
                        },
                        _getPosition: function() {
                            var $win = $(window),
                                verticalOffset = this._config.top,
                                horizontalOffset = $win.innerWidth() / 2 - this._config.width / 2 + this._config.xOffset;
                            if (this._config.centerVertically) {
                                verticalOffset = $win.innerHeight() / 2 - this._$dialog.outerHeight() / 2 + this._config.yOffset;
                                verticalOffset = Math.max(verticalOffset, this._config.top)
                            }
                            return {
                                left: horizontalOffset,
                                top: verticalOffset
                            }
                        },
                        _fitToWindow: function() {
                            var availableVerticalSpace = $(window).innerHeight() - this._config.top - BOTTOM_SPACE,
                                titleHeight = this._$dialog.find(".dialog-title").outerHeight(),
                                $ghostDialog;
                            $ghostDialog = this._$dialog.clone().css("visibility", "hidden");
                            $ghostDialog.find(".dialog-body").height("auto");
                            $("body").append($ghostDialog);
                            if ($ghostDialog.height() > availableVerticalSpace && this._config.fitDialogBoxToWindow) this._$dialog.find(".dialog-body").height(availableVerticalSpace - titleHeight);
                            else this._$dialog.find(".dialog-body").height("auto");
                            $ghostDialog.remove()
                        }
                    }
                });
                LIModules.exports("DialogBox", DialogBox)
            })(window.LIModules);
            (function(LIModules) {
                var $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore"),
                    dust = LIModules.requires("dust"),
                    DialogBox = LIModules.requires("DialogBox");
                var ModalDialogBox = DialogBox.extend(function(base) {
                    var DEFAULT_CONFIG = {
                        maskTemplate: "tl/shared/dialog_mask",
                        fitToWindow: true,
                        closeOnMaskClick: true
                    },
                        CLICK = "click",
                        KEYUP = "keyup",
                        RESIZE = "resize",
                        FOCUSIN = "focusin";
                    return {
                        beforeDecoration: function() {
                            base.beforeDecoration.call(this);
                            this._config = _.defaults(this._config, DEFAULT_CONFIG);
                            this._requiredTemplates = [this._config.maskTemplate, this._config.dialogTemplate];
                            this._requiredCSS = _.flatten(_.compact([this._config.dialogCss, this._config.cssDependencies]));
                            this._$mask = undefined;
                            this._initialHtmlOverflowValue = undefined;
                            if (!this._config.fitToWindow) this._fitToWindow = function() {}
                        },
                        _maskClickHandler: function(evt) {
                            if ($(evt.target).is("#dialog-mask")) this._eventClose(evt)
                        },
                        _attachEventListeners: function() {
                            base._attachEventListeners.call(this);
                            if (this._config.closeOnMaskClick) this._$mask.on(CLICK, this._maskClickHandler);
                            $(document).on(FOCUSIN, this._trapFocus)
                        },
                        close: function() {
                            if (this._opened) this._config.callbacks.beforeClose(this);
                            if (this._$mask) this._$mask.remove();
                            $(document).off(KEYUP, this._keyupHandler);
                            $(window).off(RESIZE, this._resizeHandler);
                            $("html").css({
                                overflow: this._initialHtmlOverflowValue
                            });
                            this._rendered = false;
                            if (this._opened) {
                                this._opened = false;
                                this._$el.focus();
                                this._config.callbacks.afterClose(this)
                            }
                        },
                        _buildMarkup: function() {
                            return $.when(this._renderMaskMarkup(), this._renderDialogMarkup()).then(this._renderMarkUpSuccess, this._renderMarkUpFailure)
                        },
                        _renderMarkUpSuccess: function(maskMarkup, dialogMarkup) {
                            this._$mask = $(maskMarkup);
                            this._$dialog = $(dialogMarkup);
                            this._$mask.append(this._$dialog);
                            if (!this._config.fitToWindow) this._$mask.css({
                                "overflow-y": "auto"
                            });
                            $("body").append(this._$mask);
                            this._$dialog.css(this._getPosition());
                            this._rendered = true
                        },
                        _render: function() {
                            this._initialHtmlOverflowValue = $("html").css("overflow");
                            $("html").css({
                                overflow: "hidden"
                            });
                            return this._buildMarkup().then(this._loadContent).then(this._loadContentSuccess, this._loadContentFail).always(this._attachEventListeners)
                        },
                        _renderMaskMarkup: function() {
                            var deferral = new $.Deferred;
                            dust.render(this._config.maskTemplate, this._config, function postDustRender(err, out) {
                                if (err) deferral.reject(err);
                                else deferral.resolve(out)
                            });
                            return deferral.promise()
                        },
                        _trapFocus: function(evt) {
                            evt.stopPropagation();
                            if (this._opened) if (this._$dialog.is($(evt.target)) || this._$dialog.has($(evt.target)).length > 0) return false;
                            else this._$dialog.focus()
                        }
                    }
                });
                LIModules.exports("ModalDialogBox", ModalDialogBox)
            })(window.LIModules);

            Inject.INTERNAL.executor.exec21.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/Dialog", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDialog.js");
        try {
            Inject.INTERNAL.executor.exec21.innerFn.call(Inject.INTERNAL.executor.exec21.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec21.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDialog.js

#16 JavaScript::Eval (size: 4256, repeated: 1)

Inject.INTERNAL.executor.exec22.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec22.innerFn = function() {
            // id: javascripts/news/helpers/appViewHelpers uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fhelpers%2FappViewHelpers.js
            var module = Inject.INTERNAL.executor.exec22.module,
                require = Inject.INTERNAL.executor.exec22.require,
                define = Inject.INTERNAL.executor.exec22.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "scripts/shared/Dialog", "../stream/appConfig"], function($, _, Dialog, appConfig) {
                var ModalDialogBox = LIModules.requires("ModalDialogBox"),
                    NEW_ARTICLE_ID = "new",
                    NEW_TOPIC_ARTICLE_ID = "newFromTopic",
                    DIALOG_TEMPLATE = "templates/shared/embeds/dialog/dialog",
                    DIALOG_MASK_TEMPLATE = DIALOG_TEMPLATE + "_mask",
                    CLICK_EVENT = "click",
                    DATA_SRC_ATTR = "data-li-src";

                function isPermLink(articleId) {
                    return !_.isFinite(articleId) && articleId !== NEW_ARTICLE_ID && articleId.indexOf(NEW_TOPIC_ARTICLE_ID) === -1
                }
                function getModelByIdOrPermLink(articleId, collection) {
                    var model;
                    if (isPermLink(articleId)) model = collection.findWhere({
                        permLink: articleId
                    });
                    else model = collection.get(articleId);
                    return model
                }
                function confirmedAction(confirmation, action, context, inaction) {
                    var confirmationResult;
                    action = _.bind(action, context);
                    inaction = _.isFunction(inaction) ? _.bind(inaction, context) : $.noop;
                    confirmationResult = confirmation.apply(context);
                    if (confirmationResult === true) if (confirmationResult) action();
                    else inaction();
                    else confirmationResult.done(action).fail(inaction);
                    return confirmationResult
                }
                function confirmDialog($el, config, confirmCB, openedCB, closedCB) {
                    var modalDialogConfig = _.defaults(config, {
                        dialogTemplate: DIALOG_TEMPLATE,
                        maskTemplate: DIALOG_MASK_TEMPLATE,
                        dialogCss: [],
                        customClassName: "editor-dialog"
                    }),
                        modalDialog, $modalDialog;
                    modalDialog = new ModalDialogBox($el, modalDialogConfig);
                    modalDialog.close = _.bind(closeModal, modalDialog);

                    function closeModal() {
                        ModalDialogBox.prototype.close.apply(this);
                        if (closedCB) closedCB()
                    }
                    modalDialog.open().done(function() {
                        $modalDialog = $("#dialog");
                        if (openedCB) openedCB();
                        $modalDialog.on(CLICK_EVENT, ".cancel", _.bind(closeModal, modalDialog)).on(CLICK_EVENT, ".confirm", function() {
                            confirmCB();
                            modalDialog.close();
                            $modalDialog.off(CLICK_EVENT, ".cancel, .confirm")
                        })
                    });
                    return modalDialog
                }
                function navigateToPublishedArticle(permLinkOrId, update) {
                    var isUrlMigrationAuthorEnabled = appConfig.getLix("dexterUrlMigrationAuthorEnabled"),
                        promptToShareEnabled = appConfig.getLix("promptToShareEnabled"),
                        dexterUrlAlias = isUrlMigrationAuthorEnabled ? "com.linkedin.news.controllers.PresentationController.detailsStreamNewURL" : "com.linkedin.news.controllers.PresentationController.detailsStreamOldURL",
                        urlArgs = {
                            alias: dexterUrlAlias,
                            arg0: permLinkOrId
                        };
                    if (promptToShareEnabled && !update) urlArgs.arg1 = "t";
                    if (update) urlArgs.arg1 = "u";
                    window.location = play.url(urlArgs)
                }
                function lazyLoadImgCollection(images) {
                    _.each(images, lazyLoadImg)
                }
                function lazyLoadImg(imgEl) {
                    var dataSrc = imgEl.getAttribute(DATA_SRC_ATTR);
                    if (dataSrc) {
                        imgEl.setAttribute("src", dataSrc);
                        imgEl.removeAttribute(DATA_SRC_ATTR)
                    }
                }
                return {
                    isPermLink: isPermLink,
                    getModelByIdOrPermLink: getModelByIdOrPermLink,
                    confirmedAction: confirmedAction,
                    navigateToPublishedArticle: navigateToPublishedArticle,
                    confirmDialog: confirmDialog,
                    lazyLoadImgCollection: lazyLoadImgCollection,
                    lazyLoadImg: lazyLoadImg
                }
            });

            Inject.INTERNAL.executor.exec22.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/helpers/appViewHelpers", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fhelpers%2FappViewHelpers.js");
        try {
            Inject.INTERNAL.executor.exec22.innerFn.call(Inject.INTERNAL.executor.exec22.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec22.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fhelpers%2FappViewHelpers.js

#17 JavaScript::Eval (size: 1758, repeated: 1)

Inject.INTERNAL.executor.exec23.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec23.innerFn = function() {
            // id: javascripts/util/plugins/dataPrefix uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2Fplugins%2FdataPrefix.js
            var module = Inject.INTERNAL.executor.exec23.module,
                require = Inject.INTERNAL.executor.exec23.require,
                define = Inject.INTERNAL.executor.exec23.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery"], function($) {
                $.fn.dataPrefix = function(prefix) {
                    var $el = $(this[0]),
                        data = $el.data(),
                        out = {},
                        item, key;
                    prefix = prefix.replace(/-([a-z])/g, function(g) {
                        return g[1].toUpperCase()
                    });
                    for (item in data) if (data.hasOwnProperty(item) && item.indexOf(prefix) === 0) {
                        key = item.replace(prefix, "");
                        key = key.charAt(0).toLowerCase() + key.slice(1);
                        out[key] = data[item]
                    }
                    return out
                }
            });

            Inject.INTERNAL.executor.exec23.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/util/plugins/dataPrefix", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2Fplugins%2FdataPrefix.js");
        try {
            Inject.INTERNAL.executor.exec23.innerFn.call(Inject.INTERNAL.executor.exec23.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec23.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2Fplugins%2FdataPrefix.js

#18 JavaScript::Eval (size: 7017, repeated: 1)

Inject.INTERNAL.executor.exec24.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec24.innerFn = function() {
            // id: javascripts/news/Pulitzer uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FPulitzer.js
            var module = Inject.INTERNAL.executor.exec24.module,
                require = Inject.INTERNAL.executor.exec24.require,
                define = Inject.INTERNAL.executor.exec24.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var BaseControl = LIModules.requires("BaseControl"),
                    $ = LIModules.requires("jQuery"),
                    _ = LIModules.requires("underscore"),
                    liTrackClient = LIModules.requires("liTrackClient"),
                    getPageKey = LIModules.imports("getPageKey") ||
                function() {
                    if (document.body.id) return document.body.id.substring("pagekey-".length);
                    return ""
                }, pageKey = getPageKey();
                var Pulitzer = BaseControl.extend(function(base) {
                    var DEFAULT_CONFIG = {
                        enqueueInterval: 5E3,
                        queueTimeout: 3E3,
                        scrollStopLatency: 300,
                        workerTimeLimit: 18E5
                    };
                    return {
                        beforeInit: function() {
                            liTrackClient.setProperty("queueTimeout", this._config.queueTimeout);
                            this._config = _.defaults(this._config, DEFAULT_CONFIG);
                            this.$win = $(window);
                            this.articleMetadata = this._config.articleMetadata;
                            this.dwellStartTime = $.now();
                            this.scrollStopTime = this._isArticleViewable() ? $.now() : null;
                            this.isPageVisible = true;
                            this.isWorkerActive = true;
                            this.wordCount = this._config.articleBody.text().split(/\s/).length;
                            this.scrollStop = true;
                            this.uuid = this._uuid();
                            this._initUiView(this._config.articleBody.offset().top, this._config.articleBody.offset().left, this._config.articleBody.innerHeight(), this._config.articleBody.innerWidth());
                            this.viewport = {
                                top: this.$win.scrollTop(),
                                left: this.$win.scrollLeft(),
                                height: this.$win.height(),
                                width: this.$win.width()
                            }
                        },
                        attachEventListeners: function() {
                            var self = this;
                            self.$win.scroll(function() {
                                if (self.scrollStop) {
                                    self.scrollStop = false;
                                    if (self._isArticleViewable() && self.scrollStopTime) self._calculateDurationAndAddSegment.call(self)
                                }
                                clearTimeout($.data(this, "scrollTimer"));
                                $.data(this, "scrollTimer", setTimeout(function() {
                                    self.scrollStop = true;
                                    if (self._isArticleViewable()) self._initializeViewportAndStartScrollTime.call(self);
                                    else self.scrollStopTime = null
                                }, self._config.scrollStopLatency))
                            });
                            document.addEventListener("visibilitychange", function() {
                                if (document.visibilityState === "visible") {
                                    self.isPageVisible = true;
                                    if (self._isArticleViewable()) self._initializeViewportAndStartScrollTime.call(self)
                                } else {
                                    self.isPageVisible = false;
                                    if (self._isArticleViewable() && self.scrollStopTime) self._calculateDurationAndAddSegment.call(self)
                                }
                            })
                        },
                        _calculateDurationAndAddSegment: function() {
                            if (!this._isElementAreaSame(this._config.articleBody.offset().top, this._config.articleBody.offset().left, this._config.articleBody.innerHeight(), this._config.articleBody.innerWidth())) liTrackClient.track(this._getTrackBody());
                            this._addUiSegment(this.viewport.top, this.viewport.left, this.viewport.height, this.viewport.width, $.now() - this.scrollStopTime)
                        },
                        _initializeViewportAndStartScrollTime: function() {
                            this.viewport = {
                                top: this.$win.scrollTop(),
                                left: this.$win.scrollLeft(),
                                height: this.$win.height(),
                                width: this.$win.width()
                            };
                            this.scrollStopTime = $.now()
                        },
                        startWorker: function() {
                            var self = this;
                            self.workerStartTime = $.now();
                            (function worker() {
                                if (self.isWorkerActive && self._isUnderWorkerTimeLimit()) {
                                    if (self.isPageVisible) if (self._isArticleViewable() && self.scrollStopTime && self.scrollStop) {
                                        self._calculateDurationAndAddSegment.call(self);
                                        self._initializeViewportAndStartScrollTime.call(self);
                                        liTrackClient.track(self._getTrackBody(true))
                                    } else if (self.uiView.segments.length > 0) liTrackClient.track(self._getTrackBody(true));
                                    else liTrackClient.track(self._getTrackBody(false));
                                    setTimeout(worker, self._config.enqueueInterval)
                                }
                            })()
                        },
                        stopWorker: function() {
                            this.isWorkerActive = false
                        },
                        _isUnderWorkerTimeLimit: function() {
                            return $.now() - this.workerStartTime < this._config.workerTimeLimit
                        },
                        _getTrackBody: function(isArticleViewable) {
                            var uiView = null;
                            if (isArticleViewable) uiView = this._assembleUiView(this._config.articleBody.offset().top, this._config.articleBody.offset().left, this._config.articleBody.innerHeight(), this._config.articleBody.innerWidth());
                            return {
                                eventInfo: {
                                    eventName: "ArticleReadEvent",
                                    appId: "js.pulitzer.app"
                                },
                                eventBody: {
                                    requestHeader: {
                                        pageKey: pageKey
                                    },
                                    dwellTime: $.now() - this.dwellStartTime,
                                    articleMetadata: this.articleMetadata,
                                    articleTrackingId: this.uuid,
                                    articleUrn: this._config.articleUrn,
                                    renderedWordCount: this.wordCount,
                                    uiView: uiView
                                }
                            }
                        },
                        _uuid: function() {
                            var s = _p8() + _p8() + _p8() + _p8(),
                                uuid = [];

                            function _p8() {
                                return (Math.random().toString(16) + "000000000").substr(2, 8)
                            }
                            for (var i = 0; i < s.length; i = i + 2) uuid.push(parseInt(s.charAt(i) + s.charAt(i + 1), 16));
                            return uuid
                        },
                        _isArticleViewable: function() {
                            var viewportTopPos = this.$win.scrollTop(),
                                viewportBottomPos = viewportTopPos + this.$win.height(),
                                articleTopPos = this._config.articleBody.offset().top,
                                articleBottomPos = articleTopPos + this._config.articleBody.innerHeight(),
                                articleViewableFromViewportTopPos = viewportTopPos >= articleTopPos && viewportTopPos < articleBottomPos,
                                articleViewableFromViewportBottomPos = viewportBottomPos > articleTopPos && viewportTopPos <= articleBottomPos;
                            return articleViewableFromViewportBottomPos || articleViewableFromViewportTopPos
                        },
                        _initUiView: function(elementTop, elementLeft, elementHeight, elementWidth) {
                            this.uiView = {
                                elementArea: {
                                    top: elementTop,
                                    left: elementLeft,
                                    size: {
                                        height: elementHeight,
                                        width: elementWidth
                                    }
                                },
                                segments: []
                            }
                        },
                        _isElementAreaSame: function(elementTop, elementLeft, elementHeight, elementWidth) {
                            var ea = this.uiView.elementArea;
                            return ea.top.toFixed() === elementTop.toFixed() && ea.left.toFixed() === elementLeft.toFixed() && ea.size.height.toFixed() === elementHeight.toFixed() && ea.size.width.toFixed() === elementWidth.toFixed()
                        },
                        _addUiSegment: function(viewportTop, viewportLeft, viewportHeight, viewportWidth, duration) {
                            var uiViewSegment = {
                                viewport: {
                                    top: viewportTop,
                                    left: viewportLeft,
                                    size: {
                                        height: viewportHeight,
                                        width: viewportWidth
                                    }
                                },
                                duration: duration,
                                time: $.now()
                            };
                            this.uiView.segments.push(uiViewSegment)
                        },
                        _assembleUiView: function(elementTop, elementLeft, elementHeight, elementWidth) {
                            var uiView = this.uiView;
                            this._initUiView(elementTop, elementLeft, elementHeight, elementWidth);
                            return uiView
                        }
                    }
                });
                LIModules.exports("Pulitzer", Pulitzer)
            })();

            Inject.INTERNAL.executor.exec24.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/Pulitzer", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FPulitzer.js");
        try {
            Inject.INTERNAL.executor.exec24.innerFn.call(Inject.INTERNAL.executor.exec24.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec24.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2FPulitzer.js

#19 JavaScript::Eval (size: 14211, repeated: 1)

Inject.INTERNAL.executor.exec25.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec25.innerFn = function() {
            // id: javascripts/news/stream/views/AppView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FAppView.js
            var module = Inject.INTERNAL.executor.exec25.module,
                require = Inject.INTERNAL.executor.exec25.require,
                define = Inject.INTERNAL.executor.exec25.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "./NavListView", "../collections/NavCollection", "../AppRouter", "../../controls/ScrollMonitor", "../appTracking", "../appConfig", "scripts/apps/plato/rankings/RankingsStickyBox", "../../helpers/appViewHelpers", "../../../util/plugins/dataPrefix", "../../Pulitzer"], function($, _, Backbone, NavListView, NavCollection, AppRouter, ScrollMonitor, appTracking, appConfig, RankingsStickyBox, appViewHelpers, dataPrefix, Pulitzer) {
                var VIEWPORT_SCROLL_ID = "stream-viewport",
                    VIEWPORT_EVENT_NAMESPACE = ".stream-sidebar",
                    hasPushState = !! (window.history && window.history.pushState),
                    isInWeChat = navigator.userAgent.match(/micromessenger/i),
                    Pulitzer = LIModules.requires("Pulitzer"),
                    injectAlert = LIModules.imports("injectAlert"),
                    i18n = LIModules.requires("i18n"),
                    LOADERS_FADE_RATE = 400,
                    lazyLoadImgs;
                return Backbone.View.extend({
                    options: {},
                    defaults: {
                        route: "article",
                        categoryRoute: "category",
                        defaultRoute: "default",
                        fixedViewportClass: "stream-fixed-viewport",
                        navListTrackParam: "pulse_dexter_nav_click",
                        viewDelay: 1E3,
                        viewLimit: null
                    },
                    _viewCounts: {},
                    _viewCountAll: 0,
                    initialize: function(options) {
                        this.options = _.extend({}, this.defaults, this.options, options);
                        this.$window = $(window);
                        this.$document = $(document);
                        this.$sidebar = this.$el.find(".stream-sidebar");
                        this.$header = this.$el.find(".stream-header");
                        this.$html = $("html");
                        this.$streamContent = this.$el.find(".stream-content");
                        this.$loader = this.$("#pulse-loaders");
                        this.$loaderNavItems = this.$loader.find(".fake-nav-item");
                        this.headerOffset = this.$header.outerHeight();
                        this.siteHeaderOffset = $("#header").css("position") === "fixed" ? $("#top-header").outerHeight() : 0;
                        this.isMobile = this.$html.hasClass("os-ios") || this.$html.hasClass("os-android");
                        this.selectedCategory = this.$el.data("category") || null;
                        this.selectedCategoryId = this.$el.data("categoryId") || null;
                        this.channelMetadata = null;
                        this._setCategory();
                        this._setHeader();
                        this._setNav();
                        this._setArticles();
                        this._setRouter();
                        this._addEvents();
                        this._initFixedViewport();
                        this._registerArticles();
                        if (appConfig.getLix("dexterLazyLoadImages")) {
                            lazyLoadImgs = this.$sidebar.find("img[data-li-src]");
                            this._lazyLoadImages(lazyLoadImgs)
                        }
                    },
                    _addEvents: function() {
                        this.listenTo(this.nav, "select", _.bind(this._handleNavSelect, this));
                        this.listenTo(this.articles, "selecting", _.bind(this._handleArticleSelecting, this));
                        this.listenTo(this.articles, "select", _.bind(this._handleArticleSelect, this));
                        this.listenTo(this.nav.collection, "add", _.bind(this._syncArticles, this));
                        this.$window.on("orientationchange", _.bind(this._resetSidebar, this))
                    },
                    _setHeader: function() {},
                    _setNav: function() {
                        this.nav = new NavListView({
                            el: this.$el.find(".stream-nav"),
                            collection: new NavCollection
                        })
                    },
                    _setArticles: function() {
                        this.articles = new Backbone.View({
                            el: this.$el.find(".stream-content"),
                            collection: new Backbone.Collection
                        })
                    },
                    _setRouter: function() {
                        this.router = (new AppRouter).on("route:" + this.options.route, _.bind(function(articleIdOrPermLink) {
                            var selectResult = this.articles.select(articleIdOrPermLink, {
                                navigate: false
                            }).fail(_.bind(function() {
                                appViewHelpers.navigateToPublishedArticle(articleIdOrPermLink, true)
                            }, this))
                        }, this)).on("route:" + this.options.categoryRoute, _.bind(this._setCategory, this)).on("route:" + this.options.defaultRoute, _.bind(function() {
                            this._setCategory(null, null, {
                                defaultRoute: true
                            })
                        }, this))
                    },
                    _setCategory: function(category, categoryId, options) {
                        var pagingOptions, prevPagingOptions, nextPagingOptions, channelTitle, currentFirstArticleId, articlesOptions, contextId, navCollectionClone, isCurrentCategory = category ? categoryId === this.selectedCategoryId : false;
                        if (category && !isCurrentCategory || options && options.defaultRoute && this.selectedCategory) {
                            currentFirstArticleId = this.articles.collection.at(0).id;
                            articlesOptions = this.articles.collection.options, pagingOptions = {
                                count: 20,
                                start: 0,
                                token: null,
                                contextId: articlesOptions.contextId
                            };
                            prevPagingOptions = _.clone(pagingOptions);
                            nextPagingOptions = _.clone(pagingOptions);
                            if (this.selectedCategoryId) prevPagingOptions.channel = this.selectedCategoryId;
                            this._hideCategory();
                            nextPagingOptions = this._setCategoryLoadParams(category, categoryId, nextPagingOptions);
                            this.articles.scrollTo(currentFirstArticleId);
                            this._clearArticles();
                            this.listenToOnce(this.nav.collection, "reloaded", function() {
                                var firstArticleId = this.articles.collection.at(0).id;
                                channelTitle = this.selectedCategory ? this.nav.collection.currentCategoryTitle : null;
                                this.listenTo(this.articles, "select", _.bind(this._revealCategory, this, channelTitle));
                                this.header._reloadChannelsCard(categoryId);
                                this.header._updateFollowToggle(this.channelMetadata);
                                this.articles.select(firstArticleId, {
                                    categorySwitch: true,
                                    scroll: false
                                })
                            });
                            this._resetNav();
                            this.nav.collection.setPaging(nextPagingOptions);
                            this._fetchNavCollection(prevPagingOptions)
                        } else return
                    },
                    _setCategoryLoadParams: function(category, categoryId, nextPagingOptions) {
                        this.selectedCategory = category || null;
                        this.selectedCategoryId = categoryId || null;
                        if (category) {
                            this.articles.collection.options.channel = categoryId;
                            nextPagingOptions.channel = categoryId
                        } else {
                            this.nav.collection._paging = _.omit(this.nav.collection._paging, "channel");
                            this.articles.collection.options = _.omit(this.articles.collection.options, "channel")
                        }
                        return nextPagingOptions
                    },
                    _clearArticles: function() {
                        this.articles.collection.reset();
                        this.articles.clearListView()
                    },
                    _resetNav: function() {
                        this.nav.collection.reset();
                        this.nav.clearListView()
                    },
                    _fetchNavCollection: function(fallbackPagingOptions) {
                        this.nav.collection.fetch({
                            success: _.bind(function(collection, response, options) {
                                if (collection.length < 1) {
                                    this._fetchPreviousCategory(fallbackPagingOptions);
                                    this._displayAlert(i18n.get("i18n_details_stream_load_channel_error"))
                                } else {
                                    this.channelMetadata = response.channelMetadata || null;
                                    this.nav.collection.trigger("reloaded")
                                }
                            }, this),
                            error: _.bind(function(collection, response, options) {
                                this._fetchPreviousCategory(fallbackPagingOptions);
                                this._displayAlert(i18n.get("i18n_details_stream_load_channel_error"))
                            }, this)
                        })
                    },
                    _fetchPreviousCategory: function(prevPagingOptions) {
                        var category = _.has(prevPagingOptions, "channel") ? "channel" : null;
                        categoryId = category ? prevPagingOptions.channel : null;
                        this.nav.collection.setPaging(prevPagingOptions);
                        if (category) this._setCategoryLoadParams(category, categoryId, prevPagingOptions);
                        else this._setCategoryLoadParams(null, null, prevPagingOptions);
                        this._fetchNavCollection()
                    },
                    _displayAlert: function(msg, type) {
                        var alertEl = injectAlert({
                            message: msg,
                            type: type || "error",
                            animate: false,
                            dismissable: true
                        });
                        $(alertEl).on("click", function(e) {
                            e.preventDefault();
                            $(alertEl).html("")
                        })
                    },
                    _hideCategory: function() {
                        this.hideElement(this.nav.$el);
                        this.hideElement(this.$streamContent);
                        this.showElement(this.$loaderEl);
                        this._loaderAnimate()
                    },
                    _revealCategory: function(channelTitle) {
                        this.header.setChannelTitle(channelTitle);
                        this.hideElement(this.$loader);
                        this.showElement(this.nav.$el);
                        this.showElement(this.$streamContent)
                    },
                    _loaderAnimate: function() {
                        var navItemlength = this.$loaderNavItems.length - 1,
                            navItemIdx = 0,
                            that = this;
                        var revealNav = setInterval(function() {
                            var $navItem = $(that.$loaderNavItems[navItemIdx]);
                            $navItem.addClass("reveal");
                            if (navItemIdx === navItemlength) clearInterval(revealNav);
                            else navItemIdx++
                        }, 150);
                        setTimeout(function() {
                            that.$loaderArticleItem.addClass("reveal")
                        }, 1E3)
                    },
                    hideElement: function($el) {
                        this.toggleLoader($el, false)
                    },
                    showElement: function($el) {
                        this.toggleLoader($el, true)
                    },
                    toggleLoader: function($el, show) {
                        var level = show ? 1 : 0;
                        $el.finish().fadeTo(LOADERS_FADE_RATE, level, function() {
                            $el[show ? "show" : "hide"]()
                        })
                    },
                    _syncArticles: function(model) {
                        this.articles.collection.add(model.clone(), {
                            placeholder: true
                        })
                    },
                    _handleNavSelect: function(model) {
                        this.articles.select(model.id, {
                            focus: true,
                            trackingParam: this.options.navListTrackParam
                        }).done(function() {
                            appTracking.track("CLICK", model.get("navTrackingToken") || model.get("trackingToken"))
                        })
                    },
                    _handleArticleSelecting: function(articleId, options) {
                        var view;
                        if (options.focus) {
                            view = this.articles.getView(articleId);
                            scrollTop = this.$window.scrollTop();
                            view.$el.attr("tabIndex", -1).focus();
                            this.$window.scrollTop(scrollTop)
                        }
                        this.nav.select(articleId, {
                            silent: true
                        })
                    },
                    _handleArticleSelect: function(articleId, options) {
                        var o = this.options,
                            view = this.articles.getView(articleId),
                            viewLimit = o.viewLimit || Infinity,
                            viewEventData, intlTitle = $("#pulse-title-intl");
                        options = options || {};
                        options.navigate = options.navigate !== false && options.quiet !== true;
                        this.trigger("select", articleId);
                        if (this._viewTimeout) clearTimeout(this._viewTimeout);
                        if (this.getViewCount(articleId) < viewLimit) {
                            this._addViewCount(articleId);
                            viewEventData = {
                                view: view,
                                viewCount: this.getViewCount(articleId),
                                viewCountAll: this.getViewCount(),
                                trackingParam: options.trackingParam
                            };
                            this.trigger("view", articleId, viewEventData);
                            this._viewTimeout = setTimeout(_.bind(this.trigger, this, "view:delay", articleId, viewEventData), o.viewDelay)
                        }
                        if (options.navigate) this._navigateArticle(articleId);
                        if (appConfig.getLix("pulitzerReadTrackingEnabled")) this._initPulitzer(articleId, view);
                        if (intlTitle.length > 0) this._updateIntlTitle(intlTitle)
                    },
                    _navigateArticle: function(articleId) {
                        var model = this.articles.collection.get(articleId),
                            permLink = decodeURIComponent(model.get("permLink"));
                        if (permLink && permLink !== "undefined") articleId = permLink;
                        if (hasPushState && !isInWeChat) {
                            this.router.navigateRoute(this.options.route, {
                                articleId: articleId
                            });
                            if (model.has("title")) document.title = model.get("title");
                            else;
                        }
                    },
                    _registerArticles: function() {
                        var o = this.options,
                            self = this;
                        _.each(["articles", "nav"], function(type) {
                            self[type].$el.find("[data-stream-article-id]").each(function() {
                                var $article = $(this);
                                self[type].collection.add($article.dataPrefix("stream"), {
                                    el: $article,
                                    merge: true
                                })
                            })
                        })
                    },
                    _addViewCount: function(articleId) {
                        if (articleId) {
                            this._viewCounts[articleId] = this._viewCounts[articleId] || 0;
                            this._viewCounts[articleId]++;
                            this._viewCountAll++
                        }
                    },
                    getViewCount: function(articleId) {
                        if (articleId) return this._viewCounts[articleId] || 0;
                        else return this._viewCountAll
                    },
                    _initFixedViewport: function() {
                        var self = this,
                            globalNavDropdownPermanence = this.$header.data("nav-collapse") === "disabled",
                            fixedViewport, topOffset, RankingsStickyBox = LIModules.requires("Plato.RankingsStickyBox");
                        this._isViewportFixed = false;
                        this._sidebarTop = this.$sidebar.offset().top;
                        this._winHeight = this.$window.height();
                        this.$window.on("resize", _.throttle(function() {
                            self._winHeight = self.$window.height();
                            self._resetSidebar()
                        }, 50));
                        if (globalNavDropdownPermanence) this.siteHeaderOffset = this.siteHeaderOffset + $("#responsive-nav-scrollable").height();
                        fixedViewport = (new ScrollMonitor(window, {
                            scrollThrottle: 20,
                            offsetTop: this.siteHeaderOffset - 1
                        })).on(VIEWPORT_SCROLL_ID + ":top:arrive", _.bind(this._setViewportState, this, true)).on(VIEWPORT_SCROLL_ID + ":top:depart", _.bind(this._setViewportState, this, false));
                        if (this.isMobile && appConfig.getLix("basicChromeEnabled")) topOffset = 0;
                        else topOffset = this.isMobile ? -42 : null;
                        this.stickyHeader = new RankingsStickyBox(this.$header[0], {
                            stickyClass: "stuck",
                            upperBoundEl: $("#header-banner").length ? "#header-banner" : "#header",
                            disabled: false,
                            debug: false,
                            topOffset: topOffset
                        });
                        fixedViewport.addTracker(VIEWPORT_SCROLL_ID, this.$el);
                        this._resetSidebar()
                    },
                    _setViewportState: function(isFixed) {
                        var o = this.options;
                        if (isFixed === this._isViewportFixed) return false;
                        this._isViewportFixed = isFixed;
                        this.$el[isFixed ? "addClass" : "removeClass"](o.fixedViewportClass);
                        this._resetSidebar();
                        this[isFixed ? "_untrackSidebar" : "_trackSidebar"]();
                        this.trigger("viewport:" + (isFixed ? "fixed" : "unfixed"))
                    },
                    _resetSidebar: function() {
                        var height = this._isViewportFixed ? "auto" : this._winHeight - this._sidebarTop + this.$window.scrollTop();
                        this.$sidebar.css("height", height);
                        this.nav.resetScroll()
                    },
                    _trackSidebar: function() {
                        var self = this;
                        this.$window.on("scroll" + VIEWPORT_EVENT_NAMESPACE, _.throttle(function() {
                            self._resetSidebar()
                        }, 50))
                    },
                    _untrackSidebar: function() {
                        this.$window.off(VIEWPORT_EVENT_NAMESPACE);
                        setTimeout(_.bind(this._resetSidebar, this), 50)
                    },
                    _lazyLoadImages: function(images) {
                        appViewHelpers.lazyLoadImgCollection(images)
                    },
                    _initPulitzer: function(articleId, view) {
                        var model = this.articles.collection.get(articleId),
                            authorId = model.get("authorId") || "",
                            publishedTime = model.get("publishedTime"),
                            isInfluencerArticle = model.get("isInfluencerArticle") == "true" ? true : false,
                            contextId = model.get("contextId"),
                            articleMetadata = {
                                authorUrn: "urn:li:member:" + authorId,
                                publishedTime: parseInt(publishedTime),
                                influencer: isInfluencerArticle,
                                contextId: contextId
                            };
                        if (this.pulitzerInstance) this.pulitzerInstance.stopWorker();
                        this.pulitzerInstance = new Pulitzer(window, {
                            enqueueInterval: 5E3,
                            queueTimeout: 3E3,
                            scrollStopLatency: 300,
                            articleUrn: "urn:li:ingestedContent:" + articleId,
                            articleBody: view.$el.find(".article-body"),
                            articleMetadata: articleMetadata
                        });
                        this.pulitzerInstance.startWorker()
                    },
                    _updateIntlTitle: function(intlTitle) {
                        var origTitle = $("#pulse-title");
                        if (this.nav.$el.find(".nav-item").first().hasClass("selected")) {
                            intlTitle.removeClass("hide");
                            origTitle.addClass("hide")
                        } else {
                            origTitle.removeClass("hide");
                            intlTitle.addClass("hide")
                        }
                    }
                })
            });

            Inject.INTERNAL.executor.exec25.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/AppView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FAppView.js");
        try {
            Inject.INTERNAL.executor.exec25.innerFn.call(Inject.INTERNAL.executor.exec25.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec25.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FAppView.js

#20 JavaScript::Eval (size: 1658, repeated: 1)

Inject.INTERNAL.executor.exec26.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec26.innerFn = function() {
            // id: javascripts/news/stream/views/HeaderView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FHeaderView.js
            var module = Inject.INTERNAL.executor.exec26.module,
                require = Inject.INTERNAL.executor.exec26.require,
                define = Inject.INTERNAL.executor.exec26.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone"], function($, _, Backbone) {
                return Backbone.View.extend({
                    options: {},
                    events: {},
                    initialize: function(options) {
                        _.extend(this.options, options);
                        Backbone.View.prototype.initialize.apply(this, arguments)
                    }
                })
            });

            Inject.INTERNAL.executor.exec26.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/HeaderView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FHeaderView.js");
        try {
            Inject.INTERNAL.executor.exec26.innerFn.call(Inject.INTERNAL.executor.exec26.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec26.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FHeaderView.js

#21 JavaScript::Eval (size: 5789, repeated: 1)

Inject.INTERNAL.executor.exec27.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec27.innerFn = function() {
            // id: scripts/shared/FollowToggler uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FFollowToggler.js
            var module = Inject.INTERNAL.executor.exec27.module,
                require = Inject.INTERNAL.executor.exec27.require,
                define = Inject.INTERNAL.executor.exec27.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl"], function($) {
                (function(LIModules) {
                    var _ = LIModules.requires("underscore"),
                        $ = LIModules.requires("jquery"),
                        BaseControl = LIModules.requires("BaseControl"),
                        asyncRequest = LIModules.requires("asyncRequest"),
                        Events = LIModules.requires("Events");
                    LIModules.exports("scripts.FollowToggler", BaseControl.extend(function(base) {
                        var DEFAULTS = {
                            urlAttribute: "href",
                            toggleClass: "is-following",
                            toggleContainerClass: "",
                            actionClassSuffix: "",
                            globalEventSuffix: "",
                            selectedClass: "",
                            loadingClass: "loading",
                            requestMethod: "GET"
                        },
                            EVENT_NAMESPACE = "follow-toggler:",
                            ACTION_PREFIX = "action-",
                            FOLLOW = "follow",
                            UNFOLLOW = "unfollow",
                            FOLLOW_CLASS = ACTION_PREFIX + FOLLOW,
                            UNFOLLOW_CLASS = ACTION_PREFIX + UNFOLLOW,
                            proto = {
                                init: function(el, config) {
                                    _.defaults(config, DEFAULTS);
                                    base.init.call(this, el, config)
                                },
                                beforeDecoration: function() {
                                    var c = this._config;
                                    this._globalEventSuffix = c.globalEventSuffix.length ? ":" + c.globalEventSuffix : "";
                                    this._followButtonClass = "." + FOLLOW_CLASS + c.actionClassSuffix;
                                    this._unfollowButtonClass = "." + UNFOLLOW_CLASS + c.actionClassSuffix
                                },
                                attachEventListeners: function() {
                                    var preventDefaultWrapper = function(cb, evt) {
                                            evt.preventDefault();
                                            cb(evt)
                                        };
                                    this._$el.on("click", this._followButtonClass, _.bind(preventDefaultWrapper, this, _.bind(this.follow, this)));
                                    this._$el.on("click", this._unfollowButtonClass, _.bind(preventDefaultWrapper, this, _.bind(this.unfollow, this)))
                                },
                                _makeRequest: function(url, onSuccess, onFailure) {
                                    if (LI && LI.asyncRequest) asyncRequest(this._config.requestMethod, url, {
                                        scope: this,
                                        success: onSuccess,
                                        failure: onFailure,
                                        custom: {
                                            exception: onFailure,
                                            error: onFailure
                                        }
                                    });
                                    else asyncRequest({
                                        url: url,
                                        type: this._config.requestMethod,
                                        success: onSuccess,
                                        error: onFailure
                                    })
                                },
                                _doAction: function(followObj, actionName, onSuccess) {
                                    var onFailure, removeLoadingWrapper, url;
                                    removeLoadingWrapper = _.bind(function(cb) {
                                        followObj._$toggleContainer.removeClass(this._config.loadingClass);
                                        cb(followObj)
                                    }, this);
                                    onFailure = _.wrap(_.bind(this._triggerFailureEvent, this, followObj, actionName), removeLoadingWrapper);
                                    onSuccess = _.wrap(_.bind(onSuccess, this), removeLoadingWrapper);
                                    switch (actionName) {
                                    case FOLLOW:
                                        url = followObj._followUrl;
                                        break;
                                    case UNFOLLOW:
                                        url = followObj._unfollowUrl;
                                        break;
                                    default:
                                        throw new Error("Unrecognized action");
                                    }
                                    followObj._$toggleContainer.addClass(this._config.loadingClass);
                                    this._makeRequest(url, onSuccess, onFailure)
                                },
                                _triggerFailureEvent: function(followObj, actionName) {
                                    Events.trigger(EVENT_NAMESPACE + actionName + ":failure" + this._globalEventSuffix, followObj._id, this)
                                },
                                _triggerSuccessEvent: function(followObj, actionName) {
                                    Events.trigger(EVENT_NAMESPACE + actionName + ":success" + this._globalEventSuffix, followObj._id, this)
                                },
                                _afterFollowSuccess: function(followObj) {
                                    followObj._$toggleContainer.addClass(this._config.toggleClass);
                                    followObj._$unfollowEl.addClass(this._config.selectedClass);
                                    followObj._$followEl.removeClass(this._config.selectedClass)
                                },
                                follow: function(evt) {
                                    var followObj = this._getFollowObj(evt);
                                    this._doAction(followObj, FOLLOW, function(followObj) {
                                        this._afterFollowSuccess(followObj);
                                        if (_.isFunction(this._followCB)) this._followCB();
                                        this._triggerSuccessEvent(followObj, FOLLOW)
                                    })
                                },
                                _followCB: null,
                                _afterUnfollowSuccess: function(followObj) {
                                    followObj._$toggleContainer.removeClass(this._config.toggleClass);
                                    followObj._$unfollowEl.removeClass(this._config.selectedClass);
                                    followObj._$followEl.addClass(this._config.selectedClass)
                                },
                                unfollow: function(evt) {
                                    var followObj = this._getFollowObj(evt);
                                    this._doAction(followObj, UNFOLLOW, function(followObj) {
                                        this._afterUnfollowSuccess(followObj);
                                        if (_.isFunction(this._unfollowCB)) this._unfollowCB();
                                        this._triggerSuccessEvent(followObj, UNFOLLOW)
                                    })
                                },
                                _unfollowCB: null,
                                _getFollowObj: function(evt) {
                                    var followObj = {},
                                        match, $target = $(evt.target);
                                    followObj._$toggleContainer = this._config.toggleContainerClass ? $target.closest("." + this._config.toggleContainerClass) : this._$el;
                                    followObj._$followEl = followObj._$toggleContainer.find(this._followButtonClass);
                                    followObj._followUrl = followObj._$followEl.attr(this._config.urlAttribute);
                                    followObj._$unfollowEl = followObj._$toggleContainer.find(this._unfollowButtonClass);
                                    followObj._unfollowUrl = followObj._$unfollowEl.attr(this._config.urlAttribute);
                                    match = followObj._followUrl.match(/(followee|memberId|channels)[=|\/](\d+)/i);
                                    if (match && match.length >= 3) followObj._id = match[2];
                                    return followObj
                                }
                            };
                        return proto
                    }))
                })(window.LIModules);;
                if (typeof LI.scripts.FollowToggler !== "undefined") {
                    module.setExports(LI.scripts.FollowToggler);
                }
            });

            Inject.INTERNAL.executor.exec27.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/FollowToggler", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FFollowToggler.js");
        try {
            Inject.INTERNAL.executor.exec27.innerFn.call(Inject.INTERNAL.executor.exec27.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec27.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FFollowToggler.js

#22 JavaScript::Eval (size: 6884, repeated: 1)

Inject.INTERNAL.executor.exec28.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec28.innerFn = function() {
            // id: javascripts/news/stream/views/DetailsHeaderView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsHeaderView.js
            var module = Inject.INTERNAL.executor.exec28.module,
                require = Inject.INTERNAL.executor.exec28.require,
                define = Inject.INTERNAL.executor.exec28.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "../appConfig", "./HeaderView", "../appTracking", "scripts/shared/FollowToggler"], function($, _, Backbone, appConfig, HeaderView, appTracking, FollowToggler) {
                var Tooltip = LIModules.requires("Tooltip"),
                    Events = LIModules.requires("Events"),
                    CHANNEL_DROPDOWN_PREFIX = "pulseChannelsDropdown",
                    CHANNEL_DROPDOWN_SELECTOR = "#pulse-channels",
                    CHANNEL_ICON_SELECTOR = "#channels-icon",
                    TITLE_SELECTOR = "#pulse-title",
                    ARTICLE_ACTIONS_SELECTOR = ".article-actions",
                    CHANNEL_TITLE_SELECTOR = ".channel-title",
                    CHANNEL_FOLLOW_SELECTOR = ".follow-toggle",
                    CHANNEL_FOLLOWING_CLASS = "is-following",
                    EVENTS = {
                        CLICK: "click",
                        READY: "ready",
                        OPEN: "open",
                        KEYDOWN: "keydown",
                        LOAD_CHANNEL: "loadChannel"
                    },
                    MOBILE_DEVICE_WIDTH = 736,
                    areChannelsActivated = appConfig.getLix("dexterChannelsEnabled"),
                    cardInitialized = false,
                    channelDropdown, isMobile, menuOffsetX, $channels, $channelsIcon, $channelLinks, $pulseTitle, $channelTitle, $channelFollow, $articleActions;
                return HeaderView.extend({
                    options: {
                        channelTitleTemplate: "templates/news/partials/stream/source/channelTitle",
                        channelFollowTemplate: "templates/shared/partials/buttons/channelFollowToggle"
                    },
                    events: {},
                    initialize: function(options) {
                        $channelsIcon = $(CHANNEL_ICON_SELECTOR);
                        $pulseTitle = $(TITLE_SELECTOR);
                        $channelTitle = this.$el.find(CHANNEL_TITLE_SELECTOR);
                        $channelFollow = this.$el.find(CHANNEL_FOLLOW_SELECTOR);
                        $articleActions = this.$el.find(ARTICLE_ACTIONS_SELECTOR);
                        this.hasChannelFollow = $channelFollow.length > 0;
                        HeaderView.prototype.initialize.call(this, options);
                        isMobile = $(window).width() < MOBILE_DEVICE_WIDTH;
                        this.selectedCategoryId = options.channelId || null;
                        this.paging = this.$el.dataPrefix("paging");
                        $pulseTitle.on("click", _.bind(function(e) {
                            e.preventDefault();
                            if (this.selectedCategoryId) this.trigger(EVENTS.LOAD_CHANNEL, {})
                        }, this));
                        if (areChannelsActivated) {
                            menuOffsetX = appConfig.getLix("dexterShift1Design") ? 125 : isMobile ? 112 : 150;
                            this._initChannelsCard()
                        }
                        if (this.hasChannelFollow) this._initChannelFollow()
                    },
                    _initChannelsCard: function() {
                        var baseUrl = play.addQueryParameter("/pulse/api/channels/", "contextId", this.paging.contextId),
                            fullUrl = this.selectedCategoryId ? play.addQueryParameter(baseUrl, "channel", this.selectedCategoryId) : baseUrl;
                        channelDropdown = new Tooltip($channelsIcon, {
                            direction: "top",
                            type: "hovercard",
                            tooltipContentID: "channels-dropdown-container",
                            delayOpen: 0,
                            cssDependencies: [],
                            decorators: ["scripts/shared/Tooltip/DynamicContentTip"],
                            cardTemplate: "templates/news/partials/stream/nav/channelsList",
                            triggerEvent: EVENTS.CLICK,
                            offsetX: menuOffsetX,
                            width: "auto",
                            isFlippable: false,
                            globalEventPrefix: CHANNEL_DROPDOWN_PREFIX,
                            i18nErrorKey: "i18n_details_stream_channel_dropdown_error",
                            overlayClasses: "pulse-channels",
                            url: fullUrl,
                            preload: false
                        });
                        Events.on(CHANNEL_DROPDOWN_PREFIX + ":" + EVENTS.OPEN, _.bind(this._onChannelsCardOpen, this))
                    },
                    _initChannelFollow: function() {
                        var o = this.options;
                        $channelFollow.each(function(i, el) {
                            var toggler = new FollowToggler($(el), {
                                requestMethod: "POST",
                                toggleContainerClass: "follow-toggle",
                                selectedClass: "selected"
                            })
                        })
                    },
                    _updateFollowToggle: function(metadata) {
                        var m = metadata;
                        if (m) if (this.hasChannelFollow) $channelFollow.each(function(i, el) {
                            var $el = $(el);
                            $followLink = $el.find(".action-follow"), $unfollowLink = $el.find(".action-unfollow");
                            $followLink.attr("href", m.followUrl);
                            $unfollowLink.attr("href", m.unfollowUrl);
                            if (m.isFollowing) $el.addClass(CHANNEL_FOLLOWING_CLASS);
                            else $el.removeClass(CHANNEL_FOLLOWING_CLASS)
                        });
                        else dust.render(this.options.channelFollowTemplate, m, _.bind(function(err, out) {
                            if (!err) {
                                $articleActions.prepend(out);
                                this.hasChannelFollow = true;
                                $channelFollow = this.$el.find(CHANNEL_FOLLOW_SELECTOR);
                                this._initChannelFollow()
                            }
                        }, this));
                        else if (this.hasChannelFollow) {
                            $channelFollow.off().remove();
                            this.hasChannelFollow = false
                        }
                    },
                    _reloadChannelsCard: function(categoryId) {
                        this.selectedCategoryId = categoryId || null
                    },
                    _cleanUpPreviousCard: function() {
                        $channelsIcon.off(EVENTS.CLICK);
                        if ($channels) {
                            $channels.off(EVENTS.KEYDOWN);
                            $channels.off(EVENTS.CLICK)
                        }
                        channelDropdown.destroy()
                    },
                    _onChannelsCardOpen: function() {
                        if (!cardInitialized) this._onCardFirstOpen();
                        else $channelLinks.eq(0).focus()
                    },
                    _onCardFirstOpen: function() {
                        $channels = $(CHANNEL_DROPDOWN_SELECTOR);
                        var idx = 1,
                            that = this,
                            $seeMoreEl = $channels.find(".see-more"),
                            discoveryPageUrl;
                        if (isMobile) $seeMoreEl.remove();
                        else {
                            discoveryPageUrl = play.addQueryParameter(appConfig.getUrl("discoveryPage"), "trk", CHANNEL_DROPDOWN_PREFIX);
                            $seeMoreEl.attr("href", discoveryPageUrl)
                        }
                        $channelLinks = $channels.find(".link");
                        $channelLinks.eq(0).focus();
                        $channels.on(EVENTS.KEYDOWN, function(e) {
                            if (e.which === 9) {
                                e.preventDefault();
                                if (idx !== $channelLinks.length) {
                                    $channelLinks.eq(idx).focus();
                                    idx++
                                } else {
                                    channelDropdown._hideTooltip();
                                    $pulseTitle.focus();
                                    idx = 1
                                }
                            }
                        }).on(EVENTS.CLICK, ".channel", function(e) {
                            var $channelEl = $(e.currentTarget),
                                $clickedEl = $(e.target),
                                $liData = $channelEl.data(),
                                paramKey = $liData.liType,
                                paramVal = $liData.liApiparam,
                                channelTitle = $liData.liName,
                                options;
                            if (paramKey && paramVal) {
                                options = {
                                    url: {},
                                    name: channelTitle
                                };
                                options.url[paramKey] = paramVal
                            } else options = {};
                            if ($liData.liTrackingToken) {
                                var clickedElClass = $clickedEl.attr("class");
                                appTracking.track(EVENTS.CLICK, $liData.liTrackingToken, {
                                    target: clickedElClass
                                }, false)
                            }
                            that.trigger(EVENTS.LOAD_CHANNEL, options);
                            that.setChannelTitle(channelTitle);
                            channelDropdown._hideTooltip()
                        });
                        cardInitialized = true
                    },
                    setChannelTitle: function(name) {
                        var data = {
                            title: name
                        };
                        dust.render(this.options.channelTitleTemplate, data, _.bind(function(err, out) {
                            if (!err) $channelTitle.html(out)
                        }, this))
                    }
                })
            });

            Inject.INTERNAL.executor.exec28.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/DetailsHeaderView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsHeaderView.js");
        try {
            Inject.INTERNAL.executor.exec28.innerFn.call(Inject.INTERNAL.executor.exec28.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec28.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsHeaderView.js

#23 JavaScript::Eval (size: 6616, repeated: 1)

Inject.INTERNAL.executor.exec29.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec29.innerFn = function() {
            // id: DwellTimeTracker uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fbowtie-dwelltime%2FDwellTimeTracker.js
            var module = Inject.INTERNAL.executor.exec29.module,
                require = Inject.INTERNAL.executor.exec29.require,
                define = Inject.INTERNAL.executor.exec29.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(global, factory) {
                if (typeof define === "function" && define.amd) define(["exports"], factory);
                else if (typeof exports !== "undefined") factory(exports);
                else {
                    var mod = {
                        exports: {}
                    };
                    factory(mod.exports);
                    global.DwellTimeTracker = mod.exports
                }
            })(this, function(exports) {
                Object.defineProperty(exports, "__esModule", {
                    value: true
                });
                exports["default"] = DwellTimeTracker;

                function _defineProperty(obj, key, value) {
                    if (key in obj) Object.defineProperty(obj, key, {
                        value: value,
                        enumerable: true,
                        configurable: true,
                        writable: true
                    });
                    else obj[key] = value;
                    return obj
                }
                var ARTICLE_READ_EVENT = "ArticleReadEvent";
                exports.ARTICLE_READ_EVENT = ARTICLE_READ_EVENT;
                var EVENT_NATURE = {
                    BEACON: "BEACON",
                    SINGLE: "SINGLE"
                };
                exports.EVENT_NATURE = EVENT_NATURE;
                var DEFAULT_BEACON_INTERVAL = 3E3,
                    BLUR = "blur",
                    FOCUS = "focus",
                    BEFORE_UNLOAD = "beforeunload";

                function generateUuid() {
                    var s = _p8() + _p8() + _p8() + _p8(),
                        uuid = [];

                    function _p8() {
                        return (Math.random().toString(16) + "000000000").substr(2, 8)
                    }
                    for (var i = 0; i < s.length; i = i + 2) uuid.push(parseInt(s.charAt(i) + s.charAt(i + 1), 16));
                    return uuid
                }

                function getTimestamp() {
                    return (new Date).getTime()
                }
                var HIDDEN, VISIBLITY_CHANGE = "visibilitychange";
                (function() {
                    var prefixes = ["webkit", "moz", "ms", "o"];
                    if ("hidden" in document) {
                        HIDDEN = "hidden";
                        return
                    }
                    for (var i = 0; i < prefixes.length; i++) {
                        var prefix = prefixes[i],
                            prefixedState = prefix + "Hidden";
                        if (prefixedState in document) {
                            HIDDEN = prefixedState;
                            VISIBLITY_CHANGE = prefixes[i] + VISIBLITY_CHANGE;
                            return
                        }
                    }
                })();

                function DwellTimeTracker() {
                    var requestHeader = arguments.length <= 0 || arguments[0] === undefined ? {
                        pageKey: undefined
                    } : arguments[0];
                    var article = arguments.length <= 1 || arguments[1] === undefined ? {
                        urn: undefined
                    } : arguments[1];
                    var beacon = arguments.length <= 2 || arguments[2] === undefined ? {
                        appId: undefined,
                        callback: function callback(schema) {}
                    } : arguments[2];
                    var single = arguments.length <= 3 || arguments[3] === undefined ? {
                        appId: undefined,
                        callback: function callback(schema) {}
                    } : arguments[3];
                    var _value, _this = this;
                    var shouldStartOnFocus = arguments.length <= 4 || arguments[4] === undefined ?
                    function() {
                        return true
                    } : arguments[4];
                    var _beaconStartTime, _countStartTime, _beaconId, _constructSchema = function(options, dwellTime) {
                            return {
                                eventInfo: {
                                    eventName: ARTICLE_READ_EVENT,
                                    appId: options.appId
                                },
                                eventBody: {
                                    requestHeader: _this.requestHeader,
                                    articleTrackingId: _this.sessionId,
                                    articleUrn: _this.article.urn,
                                    articleMetadata: _this.article.metadata,
                                    dwellTime: dwellTime
                                }
                            }
                        }.bind(this),
                        _startBeacon = function _startBeacon(interval, startTime) {
                            _beaconBegin(startTime);
                            _beaconId = setInterval(function() {
                                var now = getTimestamp();
                                _beaconEnd(now);
                                _beaconBegin(now)
                            }, interval || DEFAULT_BEACON_INTERVAL)
                        },
                        _stopBeacon = function _stopBeacon(endTime) {
                            if (_beaconId) {
                                clearInterval(_beaconId);
                                _beaconEnd(endTime);
                                _beaconId = null
                            }
                        },
                        _beaconBegin = function _beaconBegin(startTime) {
                            _beaconStartTime = startTime
                        },
                        _beaconEnd = function(endTime) {
                            var beaconLength = endTime - _beaconStartTime;
                            if (_beaconStartTime !== undefined && beaconLength) {
                                _this.fireEvent(EVENT_NATURE.BEACON, beaconLength);
                                _beaconStartTime = undefined
                            }
                        }.bind(this),
                        _startCounting = function _startCounting(startTime) {
                            _countStartTime = startTime
                        },
                        _stopCounting = function(endTime) {
                            if (_countStartTime !== undefined) {
                                _this.fireEvent(EVENT_NATURE.SINGLE, endTime - _countStartTime);
                                _countStartTime = undefined
                            }
                        }.bind(this),
                        _conditionalStartSession = function() {
                            if (typeof shouldStartOnFocus === "function" && shouldStartOnFocus()) _this.startSession()
                        }.bind(this),
                        _onVisibilityChange = function(evt) {
                            if (document[HIDDEN]) _this.endSession();
                            else _conditionalStartSession()
                        }.bind(this),
                        _onWindowFocus = _conditionalStartSession;
                    if (!requestHeader.pageKey) throw new Error("DwellTimeTracker: Must specify a pageKey");
                    if (!article.urn) throw new Error("DwellTimeTracker: Must specify an article urn");
                    if (!beacon.appId && !single.appId) throw new Error("DwellTimeTracker: Must specify an appId for beacon or single (or both)");
                    Object.defineProperties(this, {
                        "article": {
                            value: article
                        },
                        "requestHeader": {
                            value: requestHeader
                        },
                        "options": {
                            value: (_value = {}, _defineProperty(_value, EVENT_NATURE.BEACON, beacon), _defineProperty(_value, EVENT_NATURE.SINGLE, single), _value)
                        }
                    });
                    this.fireEvent = function(nature, dwellTime) {
                        var options = _this.options[nature],
                            schema, callback;
                        if (!options.appId) throw new Error("DwellTimeTracker: This instance does not fire events for " + nature);
                        schema = _constructSchema.call(_this, options, dwellTime), callback = options.callback;
                        if (typeof callback === "function") callback(schema)
                    };
                    this.endSession = function() {
                        var endTime = getTimestamp();
                        _stopBeacon(endTime);
                        _stopCounting(endTime);
                        _this.sessionId = null
                    }.bind(this);
                    this.startSession = function() {
                        var opts = _this.options,
                            beaconOpts = opts[EVENT_NATURE.BEACON],
                            startTime = getTimestamp();
                        if (_this.sessionId) _this.endSession();
                        _this.sessionId = generateUuid();
                        if (beaconOpts.appId) _startBeacon(beaconOpts.interval, startTime);
                        if (opts[EVENT_NATURE.SINGLE].appId) _startCounting(startTime)
                    }.bind(this);
                    this.destroy = function() {
                        _this.endSession();
                        document.removeEventListener(VISIBLITY_CHANGE, _onVisibilityChange);
                        window.removeEventListener(BLUR, _this.endSession);
                        window.removeEventListener(FOCUS, _onWindowFocus);
                        window.removeEventListener(BEFORE_UNLOAD, _this.endSession)
                    }.bind(this);
                    document.addEventListener(VISIBLITY_CHANGE, _onVisibilityChange);
                    window.addEventListener(BLUR, this.endSession);
                    window.addEventListener(FOCUS, _onWindowFocus);
                    window.addEventListener(BEFORE_UNLOAD, this.endSession)
                }
            });

            Inject.INTERNAL.executor.exec29.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("DwellTimeTracker", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fbowtie-dwelltime%2FDwellTimeTracker.js");
        try {
            Inject.INTERNAL.executor.exec29.innerFn.call(Inject.INTERNAL.executor.exec29.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec29.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fbowtie-dwelltime%2FDwellTimeTracker.js

#24 JavaScript::Eval (size: 12097, repeated: 1)

Inject.INTERNAL.executor.exec3.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec3.innerFn = function() {
            // id: scripts/core/Controls uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FControls.js
            var module = Inject.INTERNAL.executor.exec3.module,
                require = Inject.INTERNAL.executor.exec3.require,
                define = Inject.INTERNAL.executor.exec3.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            LI.define("Controls");
            (function($, track) {
                var scopeRegistry = {},
                    instanceRegistry = {},
                    lazyControlsRegistry = {},
                    singletonControlRegistry = {},
                    controlSearchCache = {},
                    queue = [],
                    win = window,
                    liNamespaceRegEx = /^LI\./i,
                    controlIdPrefix = "control_gen_",
                    $doc = $(document),
                    watchingForDynamicContent = false;
                var log = function(message) {
                        LI.log(message, "LI.Controls", "controls.js")
                    };
                var warn = function(message) {
                        LI.log(message, "warn", "controls.js")
                    };
                var error = function(message) {
                        LI.log(message, "error", "controls.js")
                    };
                if (!win.LI) win.LI = {};
                var _addControl = function(id, objectName, config) {
                        log("addControl: Adding " + objectName + " for control ID " + id);
                        var $scriptNode = $("#" + id),
                            targetEl = $scriptNode.prevAll(":not(script):not(.li-control)")[0];
                        __addControl(targetEl, objectName, config, $scriptNode[0])
                    };
                var __addControl = function(targetEl, objectName, config, scriptNode, lazy, lazyConfig) {
                        lazy = lazy || false;
                        if (lazyConfig && lazyConfig.loaded === false) {
                            var loader = new LI.Loader({
                                require: ["LI." + objectName.replace(liNamespaceRegEx, "")],
                                onSuccess: function() {
                                    __addControl(targetEl, objectName, config, scriptNode, true, {
                                        loaded: true,
                                        lazyTrigger: lazyConfig.lazyTrigger || null
                                    })
                                },
                                timeout: 1E4,
                                base: LI.comboBaseUrl,
                                comboBase: LI.comboBaseUrl,
                                combine: true,
                                hashingEnabled: LI.staticUrlHashEnabled
                            });
                            loader.insert();
                            return
                        }
                        if (targetEl) {
                            if (!targetEl.id) targetEl.id = _.uniqueId(controlIdPrefix);
                            log("addControl: Target element for control: id\x3d" + targetEl.id)
                        }
                        var Control = _findControl(objectName);

                        function enqueue(targetEl, objectName, config, scriptNode, error) {
                            queue.push({
                                targetEl: targetEl,
                                objectName: objectName,
                                config: config,
                                scriptNode: scriptNode,
                                error: error
                            })
                        }
                        if (!Control) {
                            log("addControl: control not found. placing object onto queue");
                            return enqueue(targetEl, objectName, config, scriptNode)
                        }
                        log("addControl: Instantiating " + objectName);
                        try {
                            var obj = new Control(targetEl, config);
                            if (lazy && typeof obj.open === "function") {
                                if (!obj.handlesOwnLazyLoading) obj.open(config.lazyEvent, config);
                                if (lazyConfig && lazyConfig.lazyTrigger) {
                                    var arr = lazyControlsRegistry[lazyConfig.lazyTrigger];
                                    for (var i = 0, len = arr.length; i < len; i++) arr[i]();
                                    lazyControlsRegistry[lazyConfig.lazyTrigger] = []
                                }
                            }
                            log("addControl: Instantiated " + objectName);
                            _storeControl(targetEl, objectName, obj);
                            _setInitialized(scriptNode)
                        } catch (e) {
                            log("addControl: Exception thrown (requeue): " + e);
                            if (track && track.errors) track.errors.push({
                                code: track.errors.codes.CTRL_INIT,
                                message: e.message,
                                unique: objectName
                            });
                            return enqueue(targetEl, objectName, config, scriptNode, true)
                        }
                    };
                var _processQueue = function(showExceptions) {
                        var newQueue = [],
                            exceptionQueue = [];
                        _purgeControlSearchCache();

                        function enqueue(queuedObj) {
                            newQueue.push(queuedObj)
                        }
                        for (var i = 0, len = queue.length; i < len; i++) {
                            var queueObject = queue[i],
                                targetEl = queueObject.targetEl,
                                objectName = queueObject.objectName,
                                config = queueObject.config,
                                scriptNode = queueObject.scriptNode,
                                Control = _findControl(objectName);
                            if (!Control) {
                                enqueue(queueObject);
                                continue
                            }
                            log("processQueue: Instantiating " + objectName);
                            try {
                                var obj = new Control(targetEl, config);
                                log("processQueue: Instantiated " + objectName);
                                _storeControl(targetEl, objectName, obj);
                                _setInitialized(scriptNode)
                            } catch (e) {
                                log("processQueue: Exception thrown (requeue)");
                                exceptionQueue.push(e);
                                enqueue(queueObject);
                                if (!queueObject.error && track && track.errors) {
                                    track.errors.push({
                                        code: track.errors.codes.CTRL_INIT,
                                        message: e.message,
                                        unique: objectName
                                    });
                                    queueObject.error = true
                                }
                                continue
                            }
                        }
                        if (newQueue.length) warn("processQueue: " + newQueue.length + " controls did not initialize on this pass.");
                        else {
                            log("processQueue: all controls in the queue processed");
                            window.clearInterval(watchingForDynamicContent)
                        }
                        if (newQueue.length > 0 && showExceptions) for (var i = 0, len = newQueue.length; i < len; i++) {
                            var e = exceptionQueue[i];
                            warn(newQueue[i].objectName + " did not initialize");
                            try {
                                error(e.fileName + "@line:" + e.lineNumber + ":: " + e.message)
                            } catch (e2) {
                                error("Could not get exception for item " + i)
                            }
                            if (console && console.log) console.log(e)
                        }
                        queue = null;
                        queue = newQueue;
                        _purgeControlSearchCache()
                    };
                var _getControlNodes = function(domNode) {
                        return $(domNode).find('*[id^\x3d"control-"].li-control').toArray()
                    };
                var _parseFragment = function(domNode) {
                        log("parseFragment: Parsing Fragment " + (domNode.id ? domNode.id : domNode.tagName));
                        var controlNodes = _getControlNodes(domNode),
                            controlIds = [];
                        for (var i = 0, len = controlNodes.length; i < len; i++) controlIds.push(controlNodes[i].id);
                        _writeControlTag(controlIds);
                        if (!watchingForDynamicContent) watchingForDynamicContent = window.setInterval(function() {
                            log("Periodic check for dynamic js controls");
                            LI.Controls.processQueue()
                        }, 100)
                    };
                var _findControl = function(objectName) {
                        log("findControl: Searching cache for " + objectName);
                        if (typeof controlSearchCache[objectName] !== "undefined") {
                            log("findControl: Found in cache");
                            return controlSearchCache[objectName]
                        }
                        log("findControl: Not found in cache. Searching window.LI");
                        var control = _locateControl(objectName, win.LI);
                        if (!control) {
                            log("findControl: checking window scope for " + objectName);
                            control = _locateControl(objectName, win)
                        }
                        controlSearchCache[objectName] = control;
                        return control
                    };
                var _purgeControlSearchCache = function() {
                        log("purgeControlSearchCache: Purging search cache");
                        controlSearchCache = {}
                    };
                var _locateControl = function(searchPath, initialScope) {
                        var scope = initialScope || win,
                            debugScope = scope,
                            debugPath = debugScope,
                            control = _getControlObject(searchPath);
                        if (debugScope === win) debugScope = "window";
                        else if (debugScope === win.LI) debugScope = "window.LI";
                        else debugScope = scope.constructor;
                        if (control) {
                            log("locateControl: Control found in registry");
                            return control
                        }
                        log("locateControl: Begining scope search");
                        for (var i = 0, pieces = searchPath.split("."), len = pieces.length; i < len; i++) {
                            var piece = pieces[i];
                            log("locateControl: Checking " + debugPath + "." + piece);
                            if (!scope[piece]) {
                                log("locateControl: Scope not found");
                                return false
                            }
                            debugPath = debugPath + "." + piece;
                            scope = scope[piece]
                        }
                        log("locateControl: Object found");
                        _storeControlObject(name, scope);
                        return scope
                    };
                var _getControlObject = function(name) {
                        return scopeRegistry[name] || false
                    };
                var _storeControlObject = function(name, obj) {
                        name = name.replace(liNamespaceRegEx, "");
                        scopeRegistry[name] = obj
                    };
                var _getControl = function(el, name) {
                        var elId = typeof el === "string" ? el : el.id;
                        name = name.replace(liNamespaceRegEx, "");
                        if (!instanceRegistry[elId]) return null;
                        if (!instanceRegistry[elId][name]) return null;
                        return instanceRegistry[elId][name]
                    };
                var _storeControl = function(el, name, obj) {
                        var elId = typeof el === "string" ? el : el.id;
                        name = name.replace(liNamespaceRegEx, "");
                        if (!instanceRegistry[elId]) instanceRegistry[elId] = {};
                        instanceRegistry[elId][name] = obj
                    };
                var _writeControlTag = function(ids) {
                        var el, content = [],
                            scr = document.createElement("script"),
                            head = document.getElementsByTagName("head")[0];
                        ids = typeof ids === "string" ? [ids] : ids;
                        for (var i = 0, len = ids.length; i < len; i++) {
                            el = document.getElementById(ids[i]);
                            if (el) {
                                if (el.tagName.toLowerCase() !== "script") el = $(el).children(":first")[0];
                                content.push(el.innerHTML)
                            }
                        }
                        scr.type = "text/javascript";
                        content = content.join("\n");
                        try {
                            scr.text = content
                        } catch (innerTextException) {
                            try {
                                scr.innerHTML = content
                            } catch (innerHTMLException) {}
                        }
                        try {
                            head.appendChild(scr)
                        } catch (appendChildException) {
                            eval(content)
                        }
                    };
                var _setInitialized = function(node) {
                        node.id = node.id.replace(/control/g, "controlinit");
                        if (node.type) node.type = "text/javascript+initialized"
                    };
                var _setFragmentInitialized = function(domNode) {
                        var controlNodes = _getControlNodes(domNode);
                        for (var i = 0, len = controlNodes.length; i < len; i++) _setInitialized(controlNodes[i])
                    };
                var _register = function() {};
                var _registerCustomLazyLoad = function(id, controlName, config, lazyConfig) {
                        var $scriptNode = $(id),
                            targetEl = $scriptNode.prevAll(":not(script.li-control)")[0];
                        if (!lazyConfig) return;
                        if (!lazyControlsRegistry[lazyConfig.lazyTrigger]) lazyControlsRegistry[lazyConfig.lazyTrigger] = [];
                        lazyControlsRegistry[lazyConfig.lazyTrigger].push(function() {
                            __addControl(targetEl, controlName, config, $scriptNode[0], true, {
                                loaded: false
                            })
                        })
                    };
                var _procrastinate = function(mappings) {
                        _.each(mappings, function(mapping) {
                            $doc.on(mapping.eventType, mapping.selector, function(evt) {
                                var control = this.id ? _getControl(this, mapping.control) : null,
                                    Control, defaultMappingConfig = mapping.defaultConfig || {},
                                    elementConfig = $(this).data("config") || {},
                                    config = {},
                                    decorators;
                                evt.preventDefault();
                                if (control) return;
                                decorators = _.chain([defaultMappingConfig, elementConfig]).pluck("decorators").flatten().compact().uniq().value();
                                $.extend(true, config, defaultMappingConfig, elementConfig);
                                if (decorators.length > 0) config.decorators = decorators;
                                Control = LI.namespace(mapping.control);
                                control = new Control(this, config);
                                control.isReady.then(function() {
                                    control.onResolve(mapping)
                                });
                                if (!this.id) this.id = _.uniqueId(controlIdPrefix);
                                _storeControl(this, mapping.control, control)
                            })
                        })
                    };
                var _addControlWithoutScriptTag = function(id, objectName, config) {
                        var el = $("#" + id)[0],
                            control;
                        control = new LI[objectName](el, config);
                        _storeControl(el, objectName, control)
                    };
                var _registerSingleton = function(controlName, closeFunction) {
                        if (singletonControlRegistry[controlName]) singletonControlRegistry[controlName]();
                        singletonControlRegistry[controlName] = closeFunction
                    };
                var _export = function(mod, def, factory) {
                        var ranFactory = null;
                        if (mod && mod.exports) {
                            ranFactory = factory();
                            mod.exports = ranFactory
                        } else if (def && def.amd) def(factory);
                        else {
                            ranFactory = factory();
                            window[factory.id] = ranFactory
                        }
                        return ranFactory
                    };
                LI.Controls = {
                    addControl: _addControl,
                    add: _addControlWithoutScriptTag,
                    getControl: _getControl,
                    processQueue: _processQueue,
                    parseFragment: _parseFragment,
                    resolveName: _findControl,
                    setInitialized: _setInitialized,
                    setFragmentInitialized: _setFragmentInitialized,
                    writeControlTag: _writeControlTag,
                    register: _register,
                    registerCustomLazyLoad: _registerCustomLazyLoad,
                    procrastinate: _procrastinate,
                    registerSingleton: _registerSingleton,
                    exporter: _export
                };
                window.LI_WCT = LI.Controls.writeControlTag;

                function initializeLazyLoadControls(evt, eventType) {
                    var target = evt.target,
                        sibling, on, config, controlData, lazyConfig;
                    while (target && target.parentNode && !$(target).is("html")) {
                        sibling = $(target).next();
                        while (sibling.length > 0) {
                            on = false;
                            sibling = sibling[0];
                            if (sibling.getAttribute) {
                                on = sibling.getAttribute("data-li-on");
                                if (on && on === eventType) {
                                    evt.preventDefault();
                                    controlData = eval("(" + sibling.innerHTML + ")");
                                    config = controlData.config;
                                    config.lazyEvent = window.event && LI.browser.ie ? $.extend(true, {}, evt) : evt;
                                    sibling.setAttribute("data-li-on", "");
                                    lazyConfig = {
                                        lazyTrigger: controlData.lazyTrigger
                                    };
                                    if (controlData.lazyConfig) lazyConfig.loaded = false;
                                    __addControl(target, controlData.name, config, sibling, true, lazyConfig)
                                }
                            }
                            if (!on && sibling.tagName.toLowerCase() !== "script" && !$(sibling).hasClass("li-control")) sibling = [];
                            else sibling = $(sibling).next()
                        }
                        target = target.parentNode
                    }
                }
                $(document).on("click", function(e) {
                    initializeLazyLoadControls(e, "click")
                });
                $(function() {
                    log("onDOMReady Control Initialization");
                    LI.Controls.processQueue()
                });
                $(win).on("load", function() {
                    log("windowEvent: Final initialization");
                    LI.Controls.processQueue()
                })
            })(jQuery, window.track);

            Inject.INTERNAL.executor.exec3.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/core/Controls", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FControls.js");
        try {
            Inject.INTERNAL.executor.exec3.innerFn.call(Inject.INTERNAL.executor.exec3.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec3.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fcore%2FControls.js

#25 JavaScript::Eval (size: 3724, repeated: 1)

Inject.INTERNAL.executor.exec30.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec30.innerFn = function() {
            // id: javascripts/news/stream/views/ArticleView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleView.js
            var module = Inject.INTERNAL.executor.exec30.module,
                require = Inject.INTERNAL.executor.exec30.require,
                define = Inject.INTERNAL.executor.exec30.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "../appConfig"], function($, _, Backbone, appConfig) {
                return Backbone.View.extend({
                    options: {},
                    defaults: {
                        template: null,
                        articleIdDataAttr: "stream-article-id",
                        selectedClass: "selected",
                        loadingClass: "loading",
                        loaderHtml: '\x3cdiv class\x3d"loader"\x3e\x3c/div\x3e'
                    },
                    _isRendered: false,
                    initialize: function(options) {
                        this.options = _.extend({}, this.defaults, this.options, options);
                        this.articleId = this.model.id;
                        this.on("select", _.partial(this._updateSelected, true));
                        this.on("deselect", _.partial(this._updateSelected, false));
                        if (options.el) {
                            this.setElement(options.el);
                            this._isRendered = true;
                            this.resolve();
                            this.trigger("render", this)
                        } else this.$loader = $(this.options.loaderHtml)
                    },
                    setElement: function(el) {
                        var o = this.options;
                        Backbone.View.prototype.setElement.call(this, el);
                        this.$el.attr("data-" + o.articleIdDataAttr, this.articleId)
                    },
                    render: function(options) {
                        var o = this.options,
                            deferred = $.Deferred();
                        options = options || {};
                        if (this._isRendered && !options.forceRender) deferred.resolve();
                        else if (options.placeholder) deferred.resolve(this.$el);
                        else {
                            dust.render(o.template, _.extend(this.model.toJSON(), appConfig.getConfig()), _.bind(function(err, out) {
                                var $el;
                                if (err) deferred.reject();
                                else {
                                    $el = $(out);
                                    this.trigger("prerender", $el);
                                    this.$el.replaceWith($el);
                                    this.setElement($el);
                                    deferred.resolve(this.$el);
                                    this.trigger("render", this)
                                }
                            }, this));
                            this._isRendered = true
                        }
                        return deferred.promise()
                    },
                    _updateSelected: function(isSelect) {
                        this.$el[isSelect ? "addClass" : "removeClass"](this.options.selectedClass)
                    },
                    _setLoading: function(add) {
                        var o = this.options;
                        if (add) this.$el.addClass(o.loadingClass).append(this.$loader);
                        else {
                            this.$el.removeClass(o.loadingClass);
                            this.$loader.remove()
                        }
                    },
                    fetch: function() {
                        var o = this.options,
                            xhr, deferred;
                        if (!this._fetch) {
                            deferred = $.Deferred().notify("start");
                            this._fetch = deferred;
                            this._setLoading(true);
                            xhr = this.model.fetch();
                            xhr.fail(_.bind(function() {
                                deferred.reject("load");
                                this._fetch = null
                            }, this)).then(function() {
                                deferred.notify("load")
                            }).then(_.bind(this.render, this)).then(function() {
                                deferred.notify("render")
                            }).then(function() {
                                deferred.notify("complete").resolve()
                            });
                            deferred.fail(function() {
                                xhr.abort()
                            }).always(_.bind(function() {
                                this._setLoading(false)
                            }, this))
                        }
                        return this._fetch
                    },
                    resolve: function() {
                        this._fetch = $.Deferred().resolve();
                        this.model.resolve()
                    }
                })
            });

            Inject.INTERNAL.executor.exec30.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/ArticleView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleView.js");
        try {
            Inject.INTERNAL.executor.exec30.innerFn.call(Inject.INTERNAL.executor.exec30.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec30.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleView.js

#26 JavaScript::Eval (size: 4383, repeated: 1)

Inject.INTERNAL.executor.exec31.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec31.innerFn = function() {
            // id: scripts/shared/utils/alertManager uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FalertManager.js
            var module = Inject.INTERNAL.executor.exec31.module,
                require = Inject.INTERNAL.executor.exec31.require,
                define = Inject.INTERNAL.executor.exec31.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(globalNav) {
                if (window.LI && window.LI.injectAlert) return;
                var globalAlertManager = globalNav && globalNav.alertManager,
                    AlertFactory;

                function normalizeInterface() {
                    var config;
                    if (arguments[0] && typeof arguments[0] === "object") config = arguments[0];
                    else config = {
                        message: arguments[0],
                        type: arguments[1],
                        node: arguments[2],
                        animate: arguments[3],
                        dismissable: arguments[4],
                        dismissMsg: arguments[5]
                    };
                    if (config.node && typeof config.node === "string") config.node = document.getElementById(config.node);
                    return config
                }
                if (globalAlertManager) AlertFactory = {
                    create: globalAlertManager.injectAlert,
                    remove: globalAlertManager.removeAlert
                };
                else AlertFactory = {
                    create: function(config) {
                        var el = config.node || document.createElement("div"),
                            msg = config.message || "",
                            type = config.type || "error",
                            animated = !! config.animate,
                            dismissable = !! config.dismissable,
                            dismissMsg = config.dismissMsg || "";
                        el.innerHTML = "";
                        el.appendChild(this._buildNode(type, msg, dismissMsg, dismissable));
                        if (animated && config.node) this.animate(config);
                        if (dismissable && !config.disableDismissHandler) el.addEventListener("click", function(evt) {
                            if (evt.target.classList.contains("dismiss")) {
                                evt.preventDefault();
                                this.remove(el, animated)
                            }
                        }.bind(this));
                        return el
                    },
                    remove: function(el, animate) {
                        if (animate) this.animate({
                            node: el,
                            shouldRemove: true,
                            callback: function() {
                                el.innerHTML = ""
                            }
                        });
                        else el.innerHTML = ""
                    },
                    animate: function(options) {
                        if (!options.node) throw new Error("you must provide a node");
                        var node = options.node,
                            cb = options.callback,
                            shouldRemove = options.shouldRemove;
                        if (node.length) Array.prototype.forEach.call(node, function(n) {
                            this._determineAnimation(n, cb, shouldRemove)
                        }.bind(this));
                        else this._determineAnimation(node, cb, shouldRemove)
                    },
                    _buildNode: function(type, msg, dismissMsg, dismissable) {
                        var alertNode = document.createElement("div"),
                            dismissNode;
                        alertNode.className = "alert " + type;
                        alertNode.setAttribute("role", "alert");
                        alertNode.innerHTML = msg;
                        if (dismissable) {
                            dismissNode = document.createElement("button");
                            dismissNode.className = "dismiss";
                            dismissNode.setAttribute("type", "button");
                            dismissNode.setAttribute("id", "dismiss-alert");
                            if (dismissMsg) dismissNode.innerHTML = dismissMsg;
                            alertNode.appendChild(dismissNode)
                        }
                        return alertNode
                    },
                    _determineAnimation: function(node, cb, remove) {
                        if (node.firstChild) node.firstChild.classList.add(remove ? "animate-out" : "animate-in");
                        if (typeof cb === "function") cb()
                    }
                };
                var alertManager = {
                    injectAlert: function() {
                        var config = normalizeInterface.apply(this, arguments),
                            result = AlertFactory.create.call(AlertFactory, config);
                        return globalAlertManager ? result : config.node
                    },
                    removeAlert: AlertFactory.remove.bind(AlertFactory),
                    showMobileError: function() {
                        var config = normalizeInterface.apply(this, arguments);
                        if (config.message) window.alert(config.message)
                    }
                };
                alertManager.injectAlert.normalizeInterface = normalizeInterface;
                LIModules.exports("alertManager", alertManager);
                LIModules.exports("injectAlert", alertManager.injectAlert);
                LIModules.exports("removeAlert", alertManager.removeAlert);
                LIModules.exports("showMobileError", alertManager.showMobileError)
            })(window.globalNav);

            Inject.INTERNAL.executor.exec31.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/utils/alertManager", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FalertManager.js");
        try {
            Inject.INTERNAL.executor.exec31.innerFn.call(Inject.INTERNAL.executor.exec31.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec31.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FalertManager.js

#27 JavaScript::Eval (size: 3712, repeated: 1)

Inject.INTERNAL.executor.exec32.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec32.innerFn = function() {
            // id: javascripts/news/controls/LikeToggler uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FLikeToggler.js
            var module = Inject.INTERNAL.executor.exec32.module,
                require = Inject.INTERNAL.executor.exec32.require,
                define = Inject.INTERNAL.executor.exec32.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "scripts/shared/BaseControl", "javascripts/util/EventUtils", "scripts/core/Events", "scripts/shared/utils/alertManager"], function($, _, BaseControl, EventUtils, LiEvents) {
                var injectAlert = LIModules.imports("injectAlert");
                return BaseControl.extend(function(base) {
                    var LOADING_CLASS = "loading",
                        ON_CLASS = "on",
                        LIKE_EVENT_SUCCESS_NAME = "like:success",
                        UNLIKE_EVENT_SUCCESS_NAME = "unlike:success",
                        GLOBAL_EVENT_PREFIX = "likeToggler",
                        isClickDisabled = false;
                    return _.extend({
                        attachEventListeners: function() {
                            if (this._validateConfig()) this._$el.on("click", _.bind(this.handleClick, this));
                            this._trigger(GLOBAL_EVENT_PREFIX + ":initialized", this, this._$el)
                        },
                        _validateConfig: function() {
                            return _.every(["likeUrl", "unlikeUrl", "permLink", "articleId", "csrfToken"], _.partial(_.has, this._config))
                        },
                        _submitAction: function(url) {
                            return $.ajax({
                                type: "POST",
                                url: url,
                                data: {
                                    articleId: this._config.articleId,
                                    redirectArticleId: this._config.articleId,
                                    permLink: this._config.permLink,
                                    csrfToken: this._config.csrfToken
                                },
                                headers: {
                                    "X-IsAJAXForm": "1"
                                }
                            }).then(function(data) {
                                var content = data.content,
                                    location = data.redirectUrl || "",
                                    errors = data.errors || null,
                                    status = data.status.toLowerCase(),
                                    deferred = $.Deferred();
                                if (status === "ok" && !content && location) window.location = location;
                                else if (status === "fail" && errors && errors.globalError && injectAlert) {
                                    injectAlert(errors.globalError, "error");
                                    deferred.reject(errors)
                                } else deferred.resolve(content);
                                return deferred.promise()
                            })
                        },
                        _submitLike: function() {
                            var that = this,
                                promise = this._submitAction(this._config.likeUrl);
                            promise.done(function() {
                                that._$el.addClass(ON_CLASS);
                                that._trigger(LIKE_EVENT_SUCCESS_NAME)
                            });
                            return promise
                        },
                        _submitUnlike: function() {
                            var that = this,
                                promise = this._submitAction(this._config.unlikeUrl);
                            promise.done(function() {
                                that._$el.removeClass(ON_CLASS);
                                that._trigger(UNLIKE_EVENT_SUCCESS_NAME)
                            });
                            return promise
                        },
                        handleClick: function(e) {
                            e.preventDefault();
                            if (isClickDisabled) return;
                            isClickDisabled = true;
                            this._$el.addClass(LOADING_CLASS);
                            var that = this,
                                isUnlike = this._$el.hasClass(ON_CLASS),
                                submitPromise = this["_submit" + (isUnlike ? "Unlike" : "Like")]();
                            submitPromise.always(function() {
                                that._$el.removeClass(LOADING_CLASS);
                                isClickDisabled = false
                            })
                        },
                        _trigger: function(eventName) {
                            this.trigger(eventName);
                            LiEvents.trigger(GLOBAL_EVENT_PREFIX + ":" + eventName, this)
                        }
                    }, EventUtils.getEventBus())
                })
            });

            Inject.INTERNAL.executor.exec32.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/controls/LikeToggler", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FLikeToggler.js");
        try {
            Inject.INTERNAL.executor.exec32.innerFn.call(Inject.INTERNAL.executor.exec32.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec32.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FLikeToggler.js

#28 JavaScript::Eval (size: 4287, repeated: 1)

Inject.INTERNAL.executor.exec33.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec33.innerFn = function() {
            // id: scripts/apps/sharing/SocialShareButton uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fsharing%2FSocialShareButton.js
            var module = Inject.INTERNAL.executor.exec33.module,
                require = Inject.INTERNAL.executor.exec33.require,
                define = Inject.INTERNAL.executor.exec33.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define([], function() {
                (function(require, LIModules) {
                    var SocialShareButton = function(el, config) {
                            var WebTracking = LIModules.imports("WebTracking"),
                                encodeURIComponent = window.encodeURIComponent,
                                facebookConfig = {
                                    classNames: {
                                        LIKE: "fb-like",
                                        SHARE: "fb-share-button"
                                    },
                                    types: {
                                        LIKE: "LIKE",
                                        SHARE: "SHARE"
                                    }
                                };
                            var htmlUnencode = LIModules.imports("htmlUnencode");
                            config = _.defaults(config || {}, {
                                type: null,
                                actionType: null,
                                text: null,
                                url: null,
                                webtrack: null,
                                winParams: "width\x3d550,height\x3d380"
                            });

                            function webTrackSender(webtrack) {
                                return function() {
                                    if (webtrack && WebTracking) WebTracking.trackUserAction(webtrack)
                                }
                            }
                            function createPopupTrigger(url, htmlizedUrl) {
                                if (!el) return;
                                if (el.tagName === "A") el.href = htmlizedUrl;
                                el.addEventListener("click", function(evt) {
                                    evt.preventDefault();
                                    webTrackSender(config.webtrack)();
                                    window.open(url, null, config.winParams)
                                })
                            }
                            function createFacebookButton(type) {
                                type = type || facebookConfig.types.LIKE;
                                return function() {
                                    var url, htmlizedUrl;
                                    if (config.url) {
                                        var baseUrl = "https://www.facebook.com/sharer/sharer.php?u\x3d" + encodeURIComponent(config.url);
                                        url = baseUrl + (config.text ? "\x26t\x3d" + encodeURIComponent(htmlUnencode ? htmlUnencode(config.text) : config.text) : "");
                                        htmlizedUrl = baseUrl + (config.text ? "\x26t\x3d" + encodeURIComponent(config.text) : "");
                                        createPopupTrigger(url, htmlizedUrl)
                                    }
                                }
                            }
                            this.linkedinLoad = function() {
                                var url, htmlizedUrl;
                                if (config.url) {
                                    var baseUrl = "https://www.linkedin.com/shareArticle?url\x3d" + encodeURIComponent(config.url);
                                    url = baseUrl + (config.text ? "\x26summary\x3d" + encodeURIComponent(htmlUnencode ? htmlUnencode(config.text) : config.text) : "");
                                    url += config.title ? "\x26title\x3d" + encodeURIComponent(config.title) : "";
                                    htmlizedUrl = baseUrl + (config.text ? "\x26summary\x3d" + encodeURIComponent(config.text) : "");
                                    htmlizedUrl += config.title ? "\x26title\x3d" + encodeURIComponent(config.title) : "";
                                    createPopupTrigger(url, htmlizedUrl)
                                }
                            };
                            this.facebookShareLoad = createFacebookButton(facebookConfig.types.SHARE);
                            this.facebookLikeLoad = createFacebookButton(facebookConfig.types.LIKE);
                            this.facebookLoad = createFacebookButton(facebookConfig.types.SHARE);
                            this.twitterLoad = function() {
                                var url, htmlizedUrl;
                                if (config.url) {
                                    var baseUrl = "https://twitter.com/intent/tweet?\x26url\x3d" + encodeURIComponent(config.url);
                                    url = baseUrl + (config.text ? "\x26text\x3d" + encodeURIComponent(htmlUnencode ? htmlUnencode(config.text) : config.text) : "");
                                    htmlizedUrl = baseUrl + (config.text ? "\x26text\x3d" + encodeURIComponent(config.text) : "");
                                    createPopupTrigger(url, htmlizedUrl)
                                }
                            };
                            this.googleplusLoad = function() {
                                var url;
                                if (config.url) {
                                    url = "https://plus.google.com/u/0/share?url\x3d" + encodeURIComponent(config.url);
                                    createPopupTrigger(url, url)
                                }
                            };
                            if (config.type) this[config.type + "Load"]()
                        };
                    LIModules.exports("SocialShareButton", SocialShareButton)
                })(window.require, window.LIModules);;
                if (typeof LI.SocialShareButton !== "undefined") {
                    module.setExports(LI.SocialShareButton);
                }
            });

            Inject.INTERNAL.executor.exec33.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/sharing/SocialShareButton", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fsharing%2FSocialShareButton.js");
        try {
            Inject.INTERNAL.executor.exec33.innerFn.call(Inject.INTERNAL.executor.exec33.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec33.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fsharing%2FSocialShareButton.js

#29 JavaScript::Eval (size: 2689, repeated: 1)

Inject.INTERNAL.executor.exec34.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec34.innerFn = function() {
            // id: scripts/shared/china/WeChatShareButton uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Fchina%2FWeChatShareButton.js
            var module = Inject.INTERNAL.executor.exec34.module,
                require = Inject.INTERNAL.executor.exec34.require,
                define = Inject.INTERNAL.executor.exec34.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(LIModules) {
                var WeChatShareButton = function(el, config) {
                        var $ = LIModules.requires("jquery"),
                            _ = LIModules.requires("underscore"),
                            Tooltip = LIModules.requires("Tooltip"),
                            $el = $(el);
                        config = config || {};
                        config.url = config.url || window.location.href;
                        config.cssDependencies = config.cssDependencies || ["css!scss/apps/china/qr/qr_share"];
                        this._openTooltip = function() {
                            if (!WeChatShareButton.xhr || WeChatShareButton.xhr.state() !== "pending") WeChatShareButton.xhr = $.get("/chatin/qr/sharewechat?url\x3d" + config.url).done(function(result) {
                                var tooltipContent = $(result),
                                    tooltip = WeChatShareButton.tooltip;
                                $("body").append(tooltipContent);
                                if (!tooltip || tooltip._$el !== $el) {
                                    if (tooltip) tooltip.destroy();
                                    tooltip = new Tooltip($el, {
                                        direction: "top",
                                        type: "hovercard",
                                        tooltipContentID: "wechat-share-content-id",
                                        delayOpen: 0,
                                        isFlippable: true,
                                        overlayClasses: ["wechat-tooltip-overlay"],
                                        cssDependencies: config.cssDependencies
                                    });
                                    WeChatShareButton.tooltip = tooltip
                                }
                                tooltipContent.on("click", ".wechat-share-close", _.bind(tooltip.destroy, tooltip));
                                tooltip.isReady.then(function() {
                                    tooltip.detachEventListeners();
                                    $el.on("click", tooltip._setTriggerMouseover);
                                    tooltip._setTriggerMouseover()
                                })
                            })
                        };
                        $el.on("click", this._openTooltip)
                    };
                LIModules.exports("WeChatShareButton", WeChatShareButton)
            })(window.LIModules);

            Inject.INTERNAL.executor.exec34.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/china/WeChatShareButton", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Fchina%2FWeChatShareButton.js");
        try {
            Inject.INTERNAL.executor.exec34.innerFn.call(Inject.INTERNAL.executor.exec34.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec34.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Fchina%2FWeChatShareButton.js

#30 JavaScript::Eval (size: 2599, repeated: 1)

Inject.INTERNAL.executor.exec35.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec35.innerFn = function() {
            // id: scripts/shared/ImagesLoaded uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FImagesLoaded.js
            var module = Inject.INTERNAL.executor.exec35.module,
                require = Inject.INTERNAL.executor.exec35.require,
                define = Inject.INTERNAL.executor.exec35.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["fiber", "jquery"], function(Fiber, $) {
                (function() {
                    var $ = LIModules.requires("jquery"),
                        _ = LIModules.requires("underscore"),
                        Fiber = LIModules.requires("fiber");
                    var ImagesLoaded = Fiber.extend(function ImagesLoaded(base) {
                        var ImagesLoadedInstances = {};
                        return {
                            init: function(el) {
                                var previousInstance;
                                this._$el = typeof el === "string" ? $("#" + el) : $(el);
                                previousInstance = ImagesLoadedInstances[this._$el[0]];
                                if (previousInstance && previousInstance._deferred.state() !== "resolved") this.promise = previousInstance.promise;
                                else {
                                    this._deferred = $.Deferred();
                                    this._unloadedImageCount = 0;
                                    this.setUpListeners();
                                    ImagesLoadedInstances[this._$el[0]] = this;
                                    this.promise = this._deferred.promise()
                                }
                            },
                            setUpListeners: function() {
                                var $images = this._$el.find("img[data-loading-tracked!\x3dtrue]"),
                                    me = this;
                                if ($images.length === 0) me._deferred.resolve();
                                _.each($images, function(img, i, images) {
                                    var $img = $(img);
                                    $img.attr("data-loading-tracked", "true");
                                    me._unloadedImageCount++;
                                    var newImg = document.createElement("img");
                                    newImg.onload = function(ev) {
                                        if (--me._unloadedImageCount === 0) me.setUpListeners();
                                        newImg.onload = null
                                    };
                                    newImg.src = img.src
                                })
                            }
                        }
                    });
                    LIModules.exports("ImagesLoaded", ImagesLoaded)
                })();;
                if (typeof LI.ImagesLoaded !== "undefined") {
                    module.setExports(LI.ImagesLoaded);
                }
            });

            Inject.INTERNAL.executor.exec35.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/ImagesLoaded", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FImagesLoaded.js");
        try {
            Inject.INTERNAL.executor.exec35.innerFn.call(Inject.INTERNAL.executor.exec35.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec35.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FImagesLoaded.js

#31 JavaScript::Eval (size: 1695, repeated: 1)

Inject.INTERNAL.executor.exec36.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec36.innerFn = function() {
            // id: javascripts/util/PromiseUtils uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FPromiseUtils.js
            var module = Inject.INTERNAL.executor.exec36.module,
                require = Inject.INTERNAL.executor.exec36.require,
                define = Inject.INTERNAL.executor.exec36.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore"], function($, _) {
                return {
                    promisify: function(action, context) {
                        return function() {
                            var origArgs = _.toArray(arguments);
                            return (new $.Deferred(function(deferred) {
                                origArgs.push(function(err) {
                                    if (err) deferred.fail(err);
                                    else deferred.resolve.apply(deferred, _.rest(arguments))
                                });
                                action.apply(context, origArgs)
                            })).promise()
                        }
                    }
                }
            });

            Inject.INTERNAL.executor.exec36.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/util/PromiseUtils", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FPromiseUtils.js");
        try {
            Inject.INTERNAL.executor.exec36.innerFn.call(Inject.INTERNAL.executor.exec36.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec36.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FPromiseUtils.js

#32 JavaScript::Eval (size: 1730, repeated: 1)

Inject.INTERNAL.executor.exec37.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec37.innerFn = function() {
            // id: javascripts/util/DustUtils uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FDustUtils.js
            var module = Inject.INTERNAL.executor.exec37.module,
                require = Inject.INTERNAL.executor.exec37.require,
                define = Inject.INTERNAL.executor.exec37.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["dust", "jquery", "underscore", "./PromiseUtils"], function(dust, $, _, PromiseUtils) {
                var promiseRender = PromiseUtils.promisify(dust.render, dust);

                function renderJquery(templateName, data) {
                    return promiseRender(templateName, data).then($)
                }
                return {
                    promiseRender: promiseRender,
                    renderJquery: renderJquery,
                    renderDom: function(templateName, data) {
                        return renderJquery(templateName, data).then(_.first)
                    }
                }
            });

            Inject.INTERNAL.executor.exec37.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/util/DustUtils", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FDustUtils.js");
        try {
            Inject.INTERNAL.executor.exec37.innerFn.call(Inject.INTERNAL.executor.exec37.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec37.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FDustUtils.js

#33 JavaScript::Eval (size: 12692, repeated: 1)

Inject.INTERNAL.executor.exec38.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec38.innerFn = function() {
            // id: js/apps/pulse/PulseSocial uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseSocial.js
            var module = Inject.INTERNAL.executor.exec38.module,
                require = Inject.INTERNAL.executor.exec38.require,
                define = Inject.INTERNAL.executor.exec38.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define([], function() {
                LI.define("PulseSocial");
                LI.PulseSocial = function() {
                    var main = YDom.get("main"),
                        sessionId = (LI.readCookie("JSESSIONID") || "").replace(/"/g, ""),
                        memberId = parseInt(LI.getDataAttribute(main, "member-id"), 10),
                        info = LI.PulsePageInfo || {},
                        urls = info.urls || {},
                        lix = info.lix || {},
                        formatTimestamp, isPulse = YDom.hasClass(main, "pulse"),
                        isArticleDetail = !! YDom.get("article-activity"),
                        isArticleAuthor = YDom.hasClass(main, "author"),
                        bigProfilePicture = lix.bigProfilePicture,
                        ERROR, Social, tCommentControl;
                    formatTimestamp = function() {
                        var SECOND = 1E3,
                            MINUTE = SECOND * 60,
                            HOUR = MINUTE * 60,
                            DAY = HOUR * 24,
                            WEEK = DAY * 7,
                            MONTH = WEEK * 4,
                            YEAR = DAY * 365;
                        return function(timestamp) {
                            var now = new Date,
                                date = new Date(timestamp),
                                difference = now - date,
                                output = "",
                                timeCount;
                            if (difference < 0 || difference < SECOND) output = LI.i18n.get("article_activity_en_US_comment_posted_just_now");
                            else if (difference < MINUTE) {
                                timeCount = Math.round(difference / SECOND);
                                output = LI.i18n.get("i18n_text_comment_post_time_seconds")
                            } else if (difference < HOUR) {
                                timeCount = Math.round(difference / MINUTE);
                                output = LI.i18n.get("i18n_text_comment_post_time_minutes")
                            } else if (difference < DAY) {
                                timeCount = Math.round(difference / HOUR);
                                output = LI.i18n.get("i18n_text_comment_post_time_hours")
                            } else if (difference < WEEK) {
                                timeCount = Math.round(difference / DAY);
                                output = LI.i18n.get("i18n_text_comment_post_time_days")
                            } else if (difference < MONTH) {
                                timeCount = Math.round(difference / WEEK);
                                output = LI.i18n.get("i18n_text_comment_post_time_weeks")
                            } else if (difference < YEAR) {
                                timeCount = Math.round(difference / MONTH);
                                output = LI.i18n.get("i18n_text_comment_post_time_months")
                            } else {
                                timeCount = Math.round(difference / YEAR);
                                output = LI.i18n.get("i18n_text_comment_post_time_years")
                            }
                            if (timeCount) output = output.replace("{0}", timeCount);
                            return output
                        }
                    }();
                    ERROR = {
                        NO_IDS: "no id's to fetch.",
                        REQUEST_FAILED: "request failed to complete."
                    };

                    function globalError(i18nKey) {
                        LI.scrollWindow(LI.injectAlert(LI.i18n.get(i18nKey || "showMoreError") || "Error", "error"));
                        setTimeout(function() {
                            LI.removeAlert(null, true)
                        }, 5E3)
                    }
                    Social = {
                        init: function() {
                            Social.loadSocialSignals(Y$(".card"), function(err, cards, json) {
                                Social.decorateCards.apply(this, arguments);
                                Social.performLoadAction();
                                YDom.removeClass(main, "loading-social");
                                if (err && err.message !== ERROR.NO_IDS) globalError("socialError")
                            })
                        },
                        performLoadAction: function() {
                            var click = LI.PulseRedesign.events.click;
                            LI.each(Y$(".share-onload"), function(anchor) {
                                click({
                                    target: anchor
                                });
                                YDom.removeClass(anchor, "share-onload")
                            });
                            LI.each(Y$(".like-onload"), function(anchor) {
                                click({
                                    target: anchor
                                });
                                YDom.removeClass(anchor, "like-onload");
                                LI.injectAlert(LI.i18n.get("likeActionSuccess") || "You liked this.", "success")
                            });
                            LI.each(Y$(".comment-onload"), function(anchor) {
                                LI.PulseComments.events.click({
                                    target: anchor
                                });
                                YDom.removeClass(anchor, "comment-onload")
                            })
                        },
                        loadSocialSignals: function(cards, callback) {
                            var ids = [];
                            LI.each([].concat(cards), function(card) {
                                var articleId = LI.getDataAttribute(card, "social-article-id") || LI.getDataAttribute(card, "article-id");
                                if (articleId) ids.push(articleId)
                            });
                            if (!ids.length) return callback({
                                message: ERROR.NO_IDS
                            }, null);
                            LI.asyncRequest("GET", urls.SIGNALS.replace("*", ids.join(";")), {
                                success: function(xhr) {
                                    try {
                                        var response = YAHOO.lang.JSON.parse(xhr.responseText);
                                        callback(null, cards, response)
                                    } catch (err) {
                                        if (window.console) window.console.log("Error getting social signal: " + err.message);
                                        callback(null, cards, {})
                                    }
                                },
                                failure: function() {
                                    callback({
                                        message: ERROR.REQUEST_FAILED
                                    }, cards, null)
                                },
                                custom: {
                                    exception: function(err) {
                                        callback(err, cards, null)
                                    },
                                    error: function(err) {
                                        callback(err, cards, null)
                                    }
                                }
                            })
                        },
                        generateCommentHtml: function(comment, member, extraClass, flagEnabled, dustRenderCallback) {
                            var bodyEscaped = comment.bodyEscaped || false,
                                commentId = comment.commentIdStr || comment.commentId,
                                articleId = comment.articleIdStr || comment.articleId,
                                isCommentAuthor = comment.memberId === memberId,
                                isInfluencer = comment.profile.isInfluencer && lix.showInfluencerIcon,
                                dustContext;
                            if (!bodyEscaped) comment.body = LI.htmlEncode(comment.body);
                            if (bigProfilePicture) {
                                if (!extraClass) extraClass = "";
                                extraClass += " big-picture"
                            }
                            comment.createdDate = comment.createdDate || +new Date;
                            dustContext = {
                                comment: comment,
                                commentId: commentId,
                                articleId: articleId,
                                extraClass: extraClass,
                                member: member,
                                isInfluencer: isInfluencer,
                                isCommentAuthor: isCommentAuthor,
                                flagEnabled: flagEnabled,
                                picSize: bigProfilePicture ? 65 : 40,
                                allowDelete: function() {
                                    return isCommentAuthor || lix.isLinkedInEmployee
                                },
                                showProfessionalHeadline: function() {
                                    return lix.commentUiVersion2 && lix.enableCommenterPosition && !! member.headline && isArticleDetail
                                },
                                showAuthorBadge: function() {
                                    return lix.commentUiVersion2 && lix.enableAuthorBadge && isArticleAuthor
                                },
                                showYouBadge: function() {
                                    return lix.commentUiVersion2 && lix.enableCommenterDegree
                                },
                                fmt_timestamp_created_date: formatTimestamp(comment.createdDate),
                                i18n_text_delete: LI.i18n.get("article_activity_en_US_delete"),
                                i18n_text_flag_and_hide: LI.i18n.get("article_activity_en_US_flag_hide"),
                                i18n_text_you: LI.i18n.get("i18n_text_you"),
                                i18n_text_author: LI.i18n.get("i18n_text_author"),
                                i18n_text_influencer: LI.i18n.get("i18n_text_influencer"),
                                i18n_text_influencer_title: LI.i18n.get("i18n_text_influencer_title", member.firstName)
                            };
                            dust.render("tl/apps/pulse/partial/comment", dustContext, dustRenderCallback)
                        },
                        decorateArticleActivity: function(cards, json) {
                            LI.each(cards, function(card) {
                                var articleId = LI.getDataAttribute(card, "article-id"),
                                    signal = json.social[articleId],
                                    seeMoreLnk = Y$(".seemore", card, true),
                                    commentList = Y$(".comment-list", card, true),
                                    comments, likeEl;
                                if (!signal) return;
                                comments = signal.comments || [];
                                if (signal.activeCommentCount > 2) {
                                    YDom.addClass(seeMoreLnk, "enable-lnk");
                                    YDom.removeClass(seeMoreLnk, "no-see-more")
                                } else YDom.addClass(seeMoreLnk, "enable-lnk");
                                if (signal.formatted && signal.formatted.like) {
                                    likeEl = LI.domify('\x3cli class\x3d"likers"\x3e\x3cp\x3e' + signal.formatted.like + "\x3c/p\x3e\x3c/li\x3e");
                                    YDom.insertBefore(likeEl, seeMoreLnk)
                                }
                                LI.each(comments.slice(0, 2), function(comment, i, a) {
                                    var memberId = comment.memberId,
                                        member = json.members && json.members[memberId] || {},
                                        pic = json.pictures && json.pictures[memberId],
                                        picUrl = pic && pic.pictureID && urls.MPR_STUB.replace("*", pic.pictureID),
                                        commentEl;
                                    if (!comment.flag) Social.generateCommentHtml(comment, {
                                        picture: picUrl || urls.NO_PHOTO,
                                        profileUrl: "/profile/view?id\x3d" + memberId,
                                        formattedName: member.fullName
                                    }, i === a.length - 1 ? "first" : "", YDom.hasClass(commentList, "comment-flagging"), function(error, html) {
                                        if (error) {
                                            if (window.console) window.console.error(error.message)
                                        } else {
                                            commentEl = LI.domify(YAHOO.lang.trim(html));
                                            YDom.insertAfter(commentEl, seeMoreLnk)
                                        }
                                    })
                                })
                            })
                        },
                        decorateCards: function(err, cards, json) {
                            var articleId, isLiker = false,
                                social;
                            if (json && json.social) {
                                for (articleId in json.social) if (json.social.hasOwnProperty(articleId)) {
                                    social = json.social[articleId];
                                    isLiker = LI.indexOf(social.likes || [], memberId) > -1;
                                    Social.updateSocialGestures("article-" + articleId, social.likeCount || 0, isLiker, social.activeCommentCount || 0)
                                }
                                Social.injectFirstDegreeSocial(cards, json);
                                Social.decorateArticleActivity(cards, json)
                            }
                        },
                        injectComment: function(opts) {
                            var comment = opts.comment || {},
                                position = opts.position || "after",
                                picture = bigProfilePicture ? urls.NO_PHOTO_65_65 : urls.NO_PHOTO,
                                member = comment.profile || comment.member || {},
                                mprStub;
                            if (comment && comment.body && opts.inject) {
                                if (member.pictureID) {
                                    mprStub = bigProfilePicture ? urls.MPR_65_STUB : urls.MPR_STUB;
                                    picture = mprStub.replace("*", member.pictureID)
                                }
                                Social.generateCommentHtml(comment, {
                                    picture: picture,
                                    profileUrl: member.profileUrl || member.profileLink || "",
                                    formattedName: member.fullName || "",
                                    firstName: member.firstName || member.fullName || "",
                                    headline: member.headline || ""
                                }, "", false, function(error, html) {
                                    if (error) {
                                        if (window.console) window.console.error(error.message)
                                    } else {
                                        var commentEl = LI.domify(YAHOO.lang.trim(html)),
                                            commentList;
                                        YDom[position === "before" ? "insertBefore" : "insertAfter"](commentEl, opts.inject);
                                        if (!tCommentControl) {
                                            commentList = Y$("ul.comment-list", main, true);
                                            tCommentControl = LI.Controls.getControl(commentList, "LI.TruncateCommentList")
                                        }
                                        if (tCommentControl) tCommentControl.addSubcontrol(commentEl)
                                    }
                                })
                            }
                        },
                        injectFirstDegreeSocial: function(cards, json) {
                            var articleId, social, currentFirstDegreeSocial, currentVerb, firstDegreeSocial, verb, card;
                            for (articleId in json.social) if (json.social.hasOwnProperty(articleId)) {
                                social = json.social[articleId];
                                card = YDom.get("article-" + articleId);
                                currentFirstDegreeSocial = Y$(".first-degree-social", card, true);
                                currentVerb = LI.getDataAttribute(currentFirstDegreeSocial, "verb");
                                if (currentFirstDegreeSocial && social.formatted && social.formatted.firstDegreeSocial) {
                                    firstDegreeSocial = LI.domify(social.formatted.firstDegreeSocial);
                                    if (!YDom.hasClass(firstDegreeSocial, "today-icon")) {
                                        verb = LI.getDataAttribute(firstDegreeSocial, "verb");
                                        if (YDom.hasClass(card, "pageview-feed") && verb === "comment" && currentVerb !== "mentioned" || YDom.hasClass(currentFirstDegreeSocial, "today-icon")) if (currentFirstDegreeSocial.parentNode) currentFirstDegreeSocial.parentNode.replaceChild(firstDegreeSocial, currentFirstDegreeSocial)
                                    }
                                }
                            }
                        },
                        updateSocialGestures: function(card, likeCount, isLiker, commentCount, isSaved) {
                            var commentEl, likeEl, saveEl, likerEl;
                            if (likeCount !== null && !isNaN(likeCount)) {
                                likeEl = Y$("li.social-gestures-likes span.count", card, false);
                                LI.each(likeEl, function(item) {
                                    likerEl = YDom.getAncestorByClassName(item, "social-gestures-likes");
                                    if (typeof isLiker === "boolean") YDom[isLiker ? "addClass" : "removeClass"](likerEl, "liker");
                                    YDom[likeCount !== 0 ? "removeClass" : "addClass"](item.parentNode, "zero-count");
                                    item.innerHTML = LI.numberFormat(likeCount)
                                })
                            }
                            if (commentCount !== null && !isNaN(commentCount)) {
                                commentEl = Y$("li.social-gestures-comments span.count", card, false);
                                LI.each(commentEl, function(item) {
                                    YDom[commentCount !== 0 ? "removeClass" : "addClass"](item.parentNode, "zero-count");
                                    item.innerHTML = LI.numberFormat(commentCount)
                                })
                            }
                            if (typeof isSaved === "boolean") {
                                saveEl = Y$("li.social-gestures-save ", card, false);
                                LI.each(saveEl, function(item) {
                                    YDom[isSaved ? "addClass" : "removeClass"](item, "saved")
                                })
                            }
                        },
                        handleAction: function(url, postString, permLink, callback) {
                            postString += typeof permLink === "string" && permLink.length ? "\x26permLink\x3d" + permLink : "";
                            postString += "\x26csrfToken\x3d" + sessionId;
                            LI.asyncRequest("POST", url, {
                                success: function(xhr) {
                                    callback(null, xhr.responseText)
                                },
                                failure: function(err) {
                                    callback(err, null)
                                },
                                custom: {
                                    exception: function(err) {
                                        callback(err, null)
                                    },
                                    error: function(err) {
                                        callback(err, null)
                                    }
                                }
                            }, postString)
                        },
                        handleLikeGesture: function(articleId, permLink, isLike, callback) {
                            var url = urls[isLike ? "LIKE" : "UNLIKE"],
                                postString = "articleId\x3d" + articleId;
                            this.handleAction(url, postString, permLink, callback)
                        },
                        handleUncomment: function(articleId, permLink, commentId, callback) {
                            var url = urls.UNCOMMENT,
                                postString = "articleId\x3d" + articleId + "\x26commentId\x3d" + commentId;
                            this.handleAction(url, postString, permLink, callback)
                        },
                        handleFlagging: function(articleId, commentId, isFlag, callback) {
                            var url = urls.FLAG,
                                postString = "action\x3d" + (isFlag ? "flag" : "unflag") + "\x26articleId\x3d" + articleId + "\x26commentId\x3d" + commentId;
                            this.handleAction(url, postString, null, callback)
                        },
                        handleCommentLike: function(articleId, commentId, permLink, isLike, callback) {
                            var url = urls[isLike ? "LIKE" : "UNLIKE"],
                                postString = "articleId\x3d" + articleId + "\x26redirectArticleId\x3d" + articleId + "\x26commentId\x3d" + commentId;
                            this.handleAction(url, postString, permLink, callback)
                        }
                    };
                    if (YDom.hasClass(main, "social-ui")) YEvent.onDOMReady(Social.init);
                    return Social
                }();;
                if (typeof LI.PulseSocial !== "undefined") {
                    module.setExports(LI.PulseSocial);
                }
            });

            Inject.INTERNAL.executor.exec38.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/apps/pulse/PulseSocial", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseSocial.js");
        try {
            Inject.INTERNAL.executor.exec38.innerFn.call(Inject.INTERNAL.executor.exec38.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec38.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseSocial.js

#34 JavaScript::Eval (size: 16896, repeated: 1)

Inject.INTERNAL.executor.exec39.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec39.innerFn = function() {
            // id: js/apps/pulse/PulseCommentsRefactor uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseCommentsRefactor.js
            var module = Inject.INTERNAL.executor.exec39.module,
                require = Inject.INTERNAL.executor.exec39.require,
                define = Inject.INTERNAL.executor.exec39.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["js/apps/pulse/PulseSocial"], function() {
                (function() {
                    var DATE_ATTR_NAME = "data-li-date",
                        COUNT_ATTR_NAME = "data-li-count",
                        ARTICLE_ID_ATTR_NAME = "data-li-article-id",
                        COMMENT_ID_ATTR_NAME = "data-li-comment-id",
                        COMMENT_LIST_PERMLINK_ATTR = "data-li-article-permlink",
                        DISABLED_ATTR_NAME = "disabled",
                        COMMENT_HIGHLIGHT_CLASS_NAME = "comment-highlight",
                        COMMENTBOX_FORM_CLASS_NAME = "commentbox-form",
                        LOADING_CLASS_NAME = "loading",
                        COMMENT_LIST_CLASS_NAME = "comment-list",
                        LIKED_CLASS_NAME = "liked",
                        HIDDEN_COMMENT_CLASS_NAME = "hidden-comment",
                        COMMENT_CONTAINER_CLASS_NAME = "comment-container",
                        COMMENT_ITEM_CLASS_NAME = "comment-item",
                        DISABLE_EVENTS_CLASS_NAME = "disable-pulse-comments-events",
                        COMMENTBOX_ENTRY_CLASS_NAME = "commentbox-entry",
                        COMMENT_NESTED_REPLIES_CLASS_NAME = "comment-nested-replies",
                        GLOBAL_EVENT_PREFIX = "PulseComments",
                        CHANGE_EVENT = GLOBAL_EVENT_PREFIX + ":new",
                        SpamReportDialog = LIModules.requires("SpamReportDialog"),
                        Comments;

                    function parseIntFromHtml(html, _default) {
                        var val = parseInt(html.replace(/\D/g, ""), 10);
                        _default = _default || 0;
                        return isNaN(val) ? _default : val
                    }

                    function globalError(i18nKey) {
                        i18nKey = i18nKey || "showMoreError";
                        LI.scrollWindow(LI.injectAlert(LI.i18n.get(i18nKey) || "Error", "error"));
                        setTimeout(function() {
                            LI.removeAlert(null, true)
                        }, 5E3)
                    }
                    function commentRecencySorter(cardA, cardB) {
                        var dateA = parseInt(LI.getDataAttribute(cardA, DATE_ATTR_NAME), 10) || -1,
                            dateB = parseInt(LI.getDataAttribute(cardB, DATE_ATTR_NAME), 10) || -1;
                        return new Date(dateB) - new Date(dateA)
                    }
                    function hideComment(commentEl, articleId, commentId, i18nKey) {
                        var msgContainer = document.createElement("li"),
                            msgEl = document.createElement("div");
                        LI.setDataAttribute(msgContainer, ARTICLE_ID_ATTR_NAME, articleId);
                        LI.setDataAttribute(msgContainer, COMMENT_ID_ATTR_NAME, commentId);
                        YDom.addClass(commentEl, HIDDEN_COMMENT_CLASS_NAME);
                        YDom.addClass(msgContainer, COMMENT_CONTAINER_CLASS_NAME);
                        YDom.addClass(msgEl, "comment-message");
                        msgEl.innerHTML = LI.i18n.get(i18nKey);
                        msgContainer.appendChild(msgEl);
                        YDom.insertAfter(msgContainer, commentEl)
                    }
                    function unhideComment(commentMsgEl) {
                        var origComment = YDom.getPreviousSibling(commentMsgEl);
                        YDom.removeClass(origComment, HIDDEN_COMMENT_CLASS_NAME);
                        commentMsgEl.parentNode.removeChild(commentMsgEl)
                    }
                    function shouldSuppressEvent(el) {
                        if (YDom.hasClass(el, DISABLE_EVENTS_CLASS_NAME)) return true;
                        return YDom.getAncestorByClassName(el, DISABLE_EVENTS_CLASS_NAME) !== null
                    }
                    function checkHighlightedComments(el) {
                        var sivControl;

                        function addHighlightedComments(highlightedList) {
                            LI.each(highlightedList, function(el) {
                                sivControl.addElement(el)
                            })
                        }
                        if (LI.ScrollIntoView && Y$("ul.highlight-fade-out", el, true)) {
                            sivControl = new LI.ScrollIntoView(null, {
                                removeWhenFound: true
                            });
                            sivControl.event.subscribe(function(name, data) {
                                var el, opts = data[0];
                                if (opts && opts.isInView && (el = opts.element)) LI.highlight(el, YDom.getStyle(el, "background-color"), null, 1)
                            });
                            addHighlightedComments(Y$("li." + COMMENT_HIGHLIGHT_CLASS_NAME, el));
                            if (LI.PulseInfiniteScroll) LI.PulseInfiniteScroll.event.subscribe(function(name, args) {
                                var type = args[0],
                                    node;
                                if (type === "dom:node") {
                                    node = args[2];
                                    if (YDom.hasClass(node, COMMENT_HIGHLIGHT_CLASS_NAME)) addHighlightedComments([node])
                                }
                            })
                        }
                    }

                    function removeComment(el, commentEl, card, articleId, permLink, commentId, commentCount) {
                        YDom.addClass(el, LOADING_CLASS_NAME);
                        LI.PulseSocial.handleUncomment(articleId, permLink, commentId, function(err, json) {
                            if (!err) hideComment(commentEl, articleId, commentId, "commentDelete");
                            YDom.removeClass(el, LOADING_CLASS_NAME);
                            LI.PulseSocial.updateSocialGestures(card, null, null, commentCount - 1, null)
                        })
                    }
                    LI.PulseComments = Comments = {
                        init: function(el) {
                            if (!YDom.hasClass(el, "disable-social-actions")) YEvent.on(el, "ontouchend" in window ? "touchend" : "click", Comments.events.click);
                            if (el.addEventListener) el.addEventListener("focus", Comments.events.focus, true);
                            else if (el.attachEvent) el.attachEvent("onfocusin", Comments.events.focus);
                            checkHighlightedComments(el)
                        },
                        focusComment: function(el) {
                            var card = YDom.getAncestorByClassName(el, "card"),
                                commentbox = Y$("." + COMMENTBOX_ENTRY_CLASS_NAME, card, true) || Y$(".pulse-article #commentBody-social_create_comment_form, ." + COMMENTBOX_ENTRY_CLASS_NAME, null, true);
                            if (!shouldSuppressEvent(el) && commentbox) {
                                commentbox.focus();
                                return true
                            }
                            return false
                        },
                        replyComment: function(el) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_ITEM_CLASS_NAME),
                                nestedCommentBox = Y$(".commentbox.is-threaded-commentbox", parent, true),
                                textarea = Y$("." + COMMENTBOX_ENTRY_CLASS_NAME, nestedCommentBox, true),
                                REPLY_EVENT_OPEN_NAME = "reply:open";
                            if (nestedCommentBox) {
                                YDom.addClass(nestedCommentBox, "is-reply-active");
                                if (textarea && textarea.focus) textarea.focus()
                            }
                            LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + REPLY_EVENT_OPEN_NAME, el)
                        },
                        likeComment: function(el) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_ITEM_CLASS_NAME),
                                articleId = LI.getDataAttribute(parent, ARTICLE_ID_ATTR_NAME),
                                commentId = LI.getDataAttribute(parent, COMMENT_ID_ATTR_NAME),
                                countContainer = Y$(".count-container", el, true),
                                likeCount = Number(LI.getDataAttribute(el, COUNT_ATTR_NAME)),
                                invokeLike = !YDom.hasClass(el, LIKED_CLASS_NAME),
                                commentList = YDom.getAncestorByClassName(el, COMMENT_LIST_CLASS_NAME),
                                permLink = LI.getDataAttribute(commentList, COMMENT_LIST_PERMLINK_ATTR),
                                LIKE_EVENT_SUCCESS_NAME = "like:success",
                                UNLIKE_EVENT_SUCCESS_NAME = "unlike:success";
                            YDom.addClass(el, LOADING_CLASS_NAME);
                            LI.PulseSocial.handleCommentLike(articleId, commentId, permLink, invokeLike, function(err, json) {
                                if (!err) {
                                    likeCount = invokeLike ? likeCount + 1 : likeCount > 0 ? likeCount - 1 : 0;
                                    YDom[(invokeLike ? "add" : "remove") + "Class"](el, "liked");
                                    YDom[(likeCount === 0 ? "add" : "remove") + "Class"](el, "zero-count");
                                    countContainer.innerHTML = LI.i18n.get("i18n_text_paren", likeCount);
                                    LI.setDataAttribute(el, COUNT_ATTR_NAME, likeCount);
                                    LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + (invokeLike ? LIKE_EVENT_SUCCESS_NAME : UNLIKE_EVENT_SUCCESS_NAME), el)
                                }
                                YDom.removeClass(el, LOADING_CLASS_NAME)
                            })
                        },
                        resetComment: function(el) {
                            var form = el,
                                REPLY_EVENT_CANCEL_NAME = "reply:cancel",
                                mentionsContainer, mentionsDecorator, textArea, checkTextArea, commentContainer;
                            if (el.tagName === "BUTTON") LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + REPLY_EVENT_CANCEL_NAME, el);
                            if (!YDom.hasClass(el, COMMENTBOX_FORM_CLASS_NAME)) form = YDom.getAncestorByClassName(el, COMMENTBOX_FORM_CLASS_NAME);
                            if (form) {
                                commentContainer = YDom.getAncestorByClassName(form, "commentbox");
                                YDom.removeClass(form, "was-focused");
                                YDom.removeClass(commentContainer, "is-reply-active");
                                if (form.reset) form.reset()
                            }
                            mentionsContainer = Y$(".mentions-container", form, true);
                            if (mentionsContainer) {
                                mentionsDecorator = LI.Controls.getControl(mentionsContainer, "LI.MentionsDecorator");
                                if (mentionsDecorator) mentionsDecorator.clearMentions();
                                textArea = Y$("." + COMMENTBOX_ENTRY_CLASS_NAME, mentionsContainer, true);
                                if (textArea) {
                                    checkTextArea = LI.Controls.getControl(textArea, "LI.CheckTextarea");
                                    if (checkTextArea) checkTextArea.resetTextArea()
                                }
                            }
                        },
                        reportComment: function(el, evt) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_CONTAINER_CLASS_NAME),
                                articleId = LI.getDataAttribute(parent, ARTICLE_ID_ATTR_NAME),
                                commentId = LI.getDataAttribute(parent, COMMENT_ID_ATTR_NAME),
                                formUrl = LI.CommentFlagReportDependencies.url + "?articleId\x3d" + articleId + "\x26commentId\x3d" + commentId,
                                prevSibiling = parent.previousSibling,
                                contentType = LI.getDataAttribute(prevSibiling, "data-li-content-source"),
                                authorId = LI.getDataAttribute(prevSibiling, "data-li-author-id"),
                                useSemaphore = authorId && contentType,
                                flagDialog, dialogConfig;
                            if (useSemaphore) {
                                dialogConfig = {
                                    externalsPath: "scss/spam_report",
                                    tlPathPrefix: "tl/shared",
                                    templateDataUrl: "/psettings/flagging-menu?entityUrn\x3durn:li:comment:(article:" + window.encodeURIComponent(articleId) + "," + window.encodeURIComponent(commentId) + ")" + "\x26authorUrn\x3durn:li:member:" + window.encodeURIComponent(authorId) + "\x26contentSource\x3d" + window.encodeURIComponent(contentType),
                                    maskTemplate: "templates/shared/embeds/dialog/dialog_mask",
                                    title: LI.i18n.get("commentFlagDialogTitle"),
                                    callbacks: {
                                        submitSuccess: function() {
                                            hideComment(parent, articleId, commentId, "commentHidden")
                                        }
                                    }
                                };
                                flagDialog = new SpamReportDialog(evt, dialogConfig);
                                flagDialog.open()
                            } else {
                                dialogConfig = {
                                    name: "CommentFlagReportDialog",
                                    width: 500,
                                    className: "dialog-v2 comment-report-form",
                                    type: "interrupt",
                                    content: {
                                        title: LI.i18n.get("dialogReport"),
                                        dustTemplate: "comment_report_form",
                                        dustDataUrl: formUrl
                                    },
                                    dependencies: LI.CommentFlagReportDependencies
                                };
                                flagDialog = new LI.Dialog;
                                flagDialog.submitEvent.subscribe(function(data) {
                                    hideComment(parent, articleId, commentId, "commentHidden");
                                    flagDialog.submitEvent.unsubscribeAll()
                                });
                                flagDialog.closeEvent.subscribe(function() {
                                    flagDialog.submitEvent.unsubscribeAll()
                                });
                                flagDialog.open(evt, dialogConfig)
                            }
                        },
                        flagComment: function(el) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_ITEM_CLASS_NAME),
                                articleId = LI.getDataAttribute(parent, ARTICLE_ID_ATTR_NAME),
                                commentId = LI.getDataAttribute(parent, COMMENT_ID_ATTR_NAME),
                                FLAG_EVENT_SUCCESS_NAME = "flag:success";
                            YDom.addClass(el, LOADING_CLASS_NAME);
                            LI.PulseSocial.handleFlagging(articleId, commentId, true, function(err, json) {
                                if (!err) {
                                    hideComment(parent, articleId, commentId, "commentHiddenReport");
                                    LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + FLAG_EVENT_SUCCESS_NAME, el)
                                }
                                YDom.removeClass(el, LOADING_CLASS_NAME)
                            })
                        },
                        undoFlagComment: function(el) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_CONTAINER_CLASS_NAME),
                                articleId = LI.getDataAttribute(parent, ARTICLE_ID_ATTR_NAME),
                                commentId = LI.getDataAttribute(parent, COMMENT_ID_ATTR_NAME);
                            YDom.addClass(el, LOADING_CLASS_NAME);
                            LI.PulseSocial.handleFlagging(articleId, commentId, false, function(err, json) {
                                if (!err) unhideComment(parent);
                                YDom.removeClass(el, LOADING_CLASS_NAME)
                            })
                        },
                        deleteComment: function(el, evt) {
                            var parent = YDom.getAncestorByClassName(el, COMMENT_ITEM_CLASS_NAME),
                                articleId = LI.getDataAttribute(parent, ARTICLE_ID_ATTR_NAME),
                                commentId = LI.getDataAttribute(parent, COMMENT_ID_ATTR_NAME),
                                card = YDom.get("article-" + articleId),
                                commentCountEl = Y$(".social-gestures-comments .count", card, true),
                                commentCount = commentCountEl ? parseIntFromHtml(commentCountEl.innerHTML, 0) : 0,
                                commentList = YDom.getAncestorByClassName(el, COMMENT_LIST_CLASS_NAME),
                                permLink = LI.getDataAttribute(commentList, COMMENT_LIST_PERMLINK_ATTR),
                                deleteDialog = new LI.Dialog,
                                DELETE_EVENT_OPEN_NAME = "delete:open",
                                DELETE_EVENT_SUCCESS_NAME = "delete:success";
                            deleteDialog.submitEvent.subscribe(function() {
                                el.setAttribute("data-li-uetrk-el", "cmnt-delete-dlg-delete-btn");
                                removeComment(el, parent, card, articleId, permLink, commentId, commentCount);
                                deleteDialog.close();
                                deleteDialog.submitEvent.unsubscribeAll();
                                LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + DELETE_EVENT_SUCCESS_NAME, el)
                            });
                            deleteDialog.closeEvent.subscribe(function() {
                                deleteDialog.submitEvent.unsubscribeAll()
                            });
                            deleteDialog.open(evt, {
                                name: "DeleteCommentDialog",
                                width: 500,
                                className: "dialog-v2 delete-comment-prompt",
                                type: "interrupt",
                                content: {
                                    node: "delete-confirm-dialog"
                                }
                            });
                            LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + DELETE_EVENT_OPEN_NAME, el)
                        },
                        handleComment: function(form) {
                            var isThreadedComment = YDom.hasClass(form, "is-threaded"),
                                card = YDom.getAncestorByClassName(form, isThreadedComment ? COMMENT_NESTED_REPLIES_CLASS_NAME : "card"),
                                disableable = Y$(".commentbox-btn, .commentbox-reset, ." + COMMENTBOX_ENTRY_CLASS_NAME, card),
                                resetComment = this.resetComment,
                                newCommentNotifier = LI.Controls.getControl("new-comments-notification", "PulseNewCommentsNotify"),
                                ghostLabelElem = YDom.getFirstChildBy(form, function(child) {
                                    return YDom.hasClass(child, "commentbox-ghost-text")
                                }),
                                onError, undisable, ghostLabel;
                            if (ghostLabelElem) ghostLabel = LI.Controls.getControl(ghostLabelElem, "GhostLabel");
                            onError = function() {
                                globalError("socialError");
                                undisable()
                            };
                            undisable = function() {
                                LI.each(disableable, function(el) {
                                    if (el.removeAttribute) el.removeAttribute(DISABLED_ATTR_NAME)
                                });
                                YDom.removeClass(form, LOADING_CLASS_NAME)
                            };
                            YAHOO.util.Connect.setForm(form);
                            LI.asyncRequest("POST", form.getAttribute("action"), {
                                custom: {
                                    error: onError,
                                    exception: onError
                                },
                                success: function(xhr) {
                                    var container = YDom.getAncestorByClassName(form, isThreadedComment ? COMMENT_NESTED_REPLIES_CLASS_NAME : "social-activity-container"),
                                        seeMoreEl = Y$(".seemore", container, true),
                                        sortedComments = Y$("." + COMMENT_LIST_CLASS_NAME + (isThreadedComment ? "" : ":not(.is-threaded-comment)") + " \x3e .comment-item", container),
                                        sortedCommentsLength = sortedComments.length,
                                        commentCountEl = Y$(".social-gestures-comments .count", card, true),
                                        commentCount = commentCountEl ? parseIntFromHtml(commentCountEl.innerHTML, 0) : 0,
                                        data = xhr.responseText.pulseComment,
                                        isFeed = YDom.hasClass(card, "pageview-feed"),
                                        COMMENT_EVENT_SUCCESS_NAME = "comment:success",
                                        REPLY_EVENT_SUCCESS_NAME = "reply:success",
                                        lastComment;
                                    if (isFeed || isThreadedComment) sortedComments.sort(commentRecencySorter);
                                    if (data && LI.PulseSocial) {
                                        data.profile = xhr.responseText.profile || {};
                                        if (LI.MentionsDecorator && data.mentions) if (YDom.hasClass(form, "mentions-highlighting")) {
                                            data.body = LI.MentionsDecorator.highlight(data.body, data.mentions);
                                            data.bodyEscaped = true
                                        }
                                        if (newCommentNotifier && newCommentNotifier.notificationDisplayed) newCommentNotifier.fetchNewComments();
                                        else LI.PulseSocial.injectComment({
                                            comment: data,
                                            inject: sortedComments[0] || seeMoreEl,
                                            position: isFeed ? "after" : "before"
                                        });
                                        LI.Events.trigger(GLOBAL_EVENT_PREFIX + ":" + (isThreadedComment ? REPLY_EVENT_SUCCESS_NAME : COMMENT_EVENT_SUCCESS_NAME), form);
                                        LI.PulseSocial.updateSocialGestures(card, null, null, commentCount + 1, null);
                                        if (ghostLabel) {
                                            ghostLabel.setLabel(LI.i18n.get("commentbox__en_US_add"));
                                            ghostLabel.updateLabel()
                                        }
                                        if (sortedCommentsLength >= 2) {
                                            lastComment = sortedComments[sortedCommentsLength - 1];
                                            if (isFeed || sortedCommentsLength > 20) {
                                                YDom.removeClass(seeMoreEl, "no-see-more");
                                                YDom.addClass(seeMoreEl, "enable-lnk")
                                            }
                                            if (isFeed && lastComment && lastComment.parentNode) lastComment.parentNode.removeChild(lastComment)
                                        }
                                        undisable();
                                        resetComment(form)
                                    } else onError();
                                    if (data && newCommentNotifier && !newCommentNotifier.notificationDisplayed) LI.Events.trigger(CHANGE_EVENT, {
                                        "new_count": commentCount + 1,
                                        "old_count": commentCount,
                                        "new_anchor_time": data.createdDate
                                    })
                                },
                                failure: onError,
                                timeout: 25E3
                            });
                            YDom.addClass(form, LOADING_CLASS_NAME);
                            YDom.setAttribute(disableable, DISABLED_ATTR_NAME, true)
                        },
                        events: {
                            click: function(evt) {
                                var self = YEvent.getTarget(evt),
                                    stop = true;
                                if (!YDom.hasClass(self, LOADING_CLASS_NAME)) if (YDom.hasClass(self, "action-reset-comment")) stop = Comments.resetComment(self);
                                else if (YDom.hasClass(self, "action-comment")) stop = Comments.focusComment(self);
                                else if (YDom.hasClass(self, "action-delete-comment")) Comments.deleteComment(self, evt);
                                else if (YDom.hasClass(self, "action-flag-comment")) Comments.flagComment(self);
                                else if (YDom.hasClass(self, "action-undo-comment")) Comments.undoFlagComment(self);
                                else if (YDom.hasClass(self, "action-report-comment")) Comments.reportComment(self, evt);
                                else if (YDom.hasClass(self.parentNode, "action-like-comment")) Comments.likeComment(self.parentNode, evt);
                                else if (YDom.hasClass(self.parentNode, "action-reply-comment")) Comments.replyComment(self.parentNode, evt);
                                else stop = false;
                                if (stop) YEvent.preventDefault(evt)
                            },
                            submit: function(evt) {
                                var self = YEvent.getTarget(evt),
                                    commentBox = Y$("." + COMMENTBOX_ENTRY_CLASS_NAME, self, true),
                                    stop = true;
                                if (!commentBox.value) stop = true;
                                else if (YDom.hasClass(self, "action-submit-comment")) Comments.handleComment(self);
                                else stop = false;
                                if (stop) YEvent.preventDefault(evt)
                            },
                            focus: function() {
                                var formListeners = {};
                                return function(evt) {
                                    var self = YEvent.getTarget(evt),
                                        parent = YDom.getAncestorByClassName(self, COMMENTBOX_FORM_CLASS_NAME),
                                        parentId = YDom.generateId(parent);
                                    if (parent) {
                                        if (!formListeners[parentId]) formListeners[parentId] = YEvent.on(parent, "submit", Comments.events.submit);
                                        YDom.addClass(parent, "was-focused")
                                    }
                                }
                            }()
                        }
                    }
                })();;
                if (typeof LI.PulseComments !== "undefined") {
                    module.setExports(LI.PulseComments);
                }
            });

            Inject.INTERNAL.executor.exec39.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/apps/pulse/PulseCommentsRefactor", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseCommentsRefactor.js");
        try {
            Inject.INTERNAL.executor.exec39.innerFn.call(Inject.INTERNAL.executor.exec39.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec39.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FPulseCommentsRefactor.js

#35 JavaScript::Eval (size: 5778, repeated: 1)

Inject.INTERNAL.executor.exec4.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec4.innerFn = function() {
            // id: scripts/shared/BaseControl uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FBaseControl.js
            var module = Inject.INTERNAL.executor.exec4.module,
                require = Inject.INTERNAL.executor.exec4.require,
                define = Inject.INTERNAL.executor.exec4.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["fiber", "jquery", "underscore", "scripts/core/Controls"], function(Fiber, $, _) {
                LI.define("BaseControl");
                LI.BaseControl = Fiber.extend(function() {
                    return {
                        init: function(el, config) {
                            var control = this,
                                isReady = new $.Deferred;
                            var bindAll = function(obj) {
                                    var funcs = _.functions(obj);
                                    _.each(funcs, function(f) {
                                        obj[f] = _.bind(obj[f], obj)
                                    })
                                };
                            this._$el = $(el);
                            this._observableEmitter = $({});
                            this._state = {};
                            this._config = this._config || config || {};
                            this.isReady = isReady.promise();
                            this.beforeInit();
                            this.beforeDecoration();
                            this.decorate().pipe(function() {
                                bindAll(control)
                            }).pipe(function() {
                                control.afterDecoration()
                            }).pipe(function() {
                                control.beforeLoad()
                            }).pipe(function() {
                                if (control._config.dependencies) return control.loadDependencies()
                            }).pipe(function(deps) {
                                control.afterLoad(deps)
                            }).pipe(function() {
                                control.attachEventListeners()
                            }).pipe(function() {
                                control.afterInit()
                            }).pipe(function() {
                                isReady.resolve()
                            })
                        },
                        destroy: function() {
                            this.detachEventListeners()
                        },
                        state: function(one, two, undefined) {
                            var args = [].slice.call(arguments, 0),
                                name, values = {},
                                stateChanges = [],
                                newState = null;
                            if (typeof args[1] === "undefined") if (typeof args[0] === "undefined") {
                                for (name in this._state) if (this._state.hasOwnProperty(name)) values[name] = this._state[name].value;
                                return values
                            } else if (typeof args[0] === "string") if (this._state.hasOwnProperty(args[0])) return this._state[args[0]].value;
                            else return undefined;
                            if (typeof args[0] === "object") for (name in args[0]) if (args[0].hasOwnProperty(name)) if (args[1] || !this._state.hasOwnProperty(name)) {
                                this._setState(name, args[0][name]);
                                stateChanges.push(name)
                            }
                            if (typeof args[0] === "string") {
                                this._setState(args[0], args[1]);
                                stateChanges.push(args[0])
                            }
                            for (var i = 0, len = stateChanges.length; i < len; i++) {
                                newState = this._state[stateChanges[i]];
                                this._observableEmitter.trigger(stateChanges[i], {
                                    newValue: newState.value,
                                    oldValue: newState.lastValue,
                                    revision: newState.rev
                                })
                            }
                        },
                        _setState: function(key, val) {
                            if (typeof this._state[key] === "undefined") this._state[key] = {
                                rev: 0,
                                value: val,
                                lastValue: undefined
                            };
                            else {
                                this._state[key].rev++;
                                this._state[key].lastValue = this._state[key].value;
                                this._state[key].value = val
                            }
                        },
                        observe: function(name, fn) {
                            this._observableEmitter.on(name, fn);
                            return this
                        },
                        unobserve: function(name, fn) {
                            this._observableEmitter.off(name, fn);
                            return this
                        },
                        beforeInit: function() {},
                        beforeDecoration: function() {},
                        decorate: function() {
                            if (this._config.decorators) return this.loadDependencies(this._config.decorators).pipe(_.bind(this._applyDecorators, this));
                            else return $.Deferred().resolve().promise()
                        },
                        _applyDecorators: function(require) {
                            _.each(this._config.decorators, function(decoratorPath) {
                                if (typeof require(decoratorPath) !== "function") throw new TypeError("Decorator (" + decoratorPath + ") is not a function");
                                Fiber.decorate(this, require(decoratorPath))
                            }, this)
                        },
                        afterDecoration: function() {},
                        beforeLoad: function() {},
                        afterLoad: function() {},
                        attachEventListeners: function() {},
                        detachEventListeners: function() {},
                        afterInit: function() {},
                        onResolve: function() {},
                        before: function(wrappedFunctionName, before) {
                            var control = this;
                            this.isReady.pipe(function() {
                                control[wrappedFunctionName] = _.wrap(control[wrappedFunctionName], function beforeFunction(original) {
                                    var args = Array.prototype.slice.apply(arguments, [1]);
                                    if (typeof before === "string") control[before].apply(control, args);
                                    else before.apply(control, args);
                                    return original.apply(control, args)
                                })
                            })
                        },
                        after: function(wrappedFunctionName, after) {
                            var control = this;
                            this.isReady.pipe(function() {
                                control[wrappedFunctionName] = _.wrap(control[wrappedFunctionName], function afterFunction(original) {
                                    var args = Array.prototype.slice.apply(arguments, [1]),
                                        originalReturn = original.apply(control, args);
                                    if (typeof after === "string") control[after].apply(control, args);
                                    else after.apply(control, args);
                                    return originalReturn
                                })
                            })
                        },
                        clobber: function(clobberedFunctionName, clobberingFunction) {
                            var control = this;
                            this.isReady.pipe(function() {
                                control[clobberedFunctionName] = _.bind(clobberingFunction, control)
                            })
                        },
                        loadDependencies: function(dependencies) {
                            var deferral = new $.Deferred;
                            dependencies = dependencies || this._config.dependencies || [];
                            require.ensure(dependencies, function(require) {
                                deferral.resolve(require)
                            });
                            return deferral.promise()
                        },
                        loadCss: function(cssPaths) {
                            var control = this,
                                cssDeferral = new $.Deferred;
                            require.ensure(cssPaths, function(require) {
                                _.each(cssPaths, function(cssPath) {
                                    require(cssPath).attach()
                                });
                                cssDeferral.resolve()
                            });
                            return cssDeferral.promise()
                        }
                    }
                });;
                if (typeof LI.BaseControl !== "undefined") {
                    module.setExports(LI.BaseControl);
                }
            });

            Inject.INTERNAL.executor.exec4.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/BaseControl", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FBaseControl.js");
        try {
            Inject.INTERNAL.executor.exec4.innerFn.call(Inject.INTERNAL.executor.exec4.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec4.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FBaseControl.js

#36 JavaScript::Eval (size: 4542, repeated: 1)

Inject.INTERNAL.executor.exec40.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec40.innerFn = function() {
            // id: scripts/apps/megaphone/FetchAndInsert uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsert.js
            var module = Inject.INTERNAL.executor.exec40.module,
                require = Inject.INTERNAL.executor.exec40.require,
                define = Inject.INTERNAL.executor.exec40.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl"], function($) {
                (function() {
                    LI.define("FetchAndInsert");
                    var FAI, controlsById = {},
                        CLICK = "click",
                        POSITION = {
                            ALL: "ALL",
                            TOP: "TOP",
                            BOTTOM: "BOTTOM"
                        };

                    function _getById(id) {
                        return controlsById[id]
                    }
                    function _registerControl(id, instance) {
                        if (id) controlsById[id] = instance
                    }
                    function _getElementFromConfig($el, _config) {
                        var config = _config || {},
                            selector = config.selector,
                            parent = config.parent,
                            el;
                        if (selector) {
                            if (parent) $el = $el.closest(parent);
                            el = $el.find(selector).first()
                        } else if (!selector && typeof config === "string") el = $("#" + config);
                        return el || $el
                    }
                    function _getUrl($base, _opts) {
                        var opts = _opts || {},
                            attribute = opts.attribute || "href",
                            $el;
                        if (typeof opts === "string") return opts;
                        else {
                            $el = _getElementFromConfig($base, {
                                selector: opts.selector,
                                parent: opts.parent
                            });
                            if ($el.length) return $el.attr(attribute)
                        }
                        return null
                    }
                    FAI = LI.BaseControl.extend(function(base) {
                        var DEFAULTS = {
                            listen: true
                        },
                            proto = {
                                beforeDecoration: function() {
                                    _.defaults(this._config, DEFAULTS);
                                    _registerControl(this._config.id, this)
                                },
                                attachEventListeners: function() {
                                    if (this._config.listen) this._$el.on(CLICK, _.bind(this.handleAction, this));
                                    if (this.scrollListener) this.scrollListener.subscribe(function(name, args) {
                                        var data = args[0];
                                        if (data.isInView) this.handleAction(jQuery.Event(CLICK, {
                                            target: data.element
                                        }))
                                    }, this, true)
                                },
                                handleAction: function(event) {
                                    var $trigger = $(event.target);
                                    if (this.trigger(null, $trigger)) event.preventDefault()
                                },
                                handleError: function(i18nKey, defaultMsg) {
                                    var msg = defaultMsg || "An error has occurred.";
                                    i18nKey = i18nKey || "error";
                                    msg = LI.i18n.get(i18nKey) || msg;
                                    LI.scrollWindow(LI.injectAlert(msg, "error"));
                                    setTimeout(function() {
                                        LI.removeAlert(null, true)
                                    }, 5E3)
                                },
                                processXhr: function(xhr, callback) {
                                    callback.call(this, null, xhr.responseText)
                                },
                                request: function(method, url, config, postData) {
                                    return LI.asyncRequest(method, url, config, postData)
                                },
                                trigger: function(_overrides, $triggerEl, callback) {
                                    var self = this,
                                        config = self._config || {},
                                        overrides = _overrides || {},
                                        $el = self._$el,
                                        target = overrides.target || config.target || {},
                                        position = target.position || POSITION.ALL,
                                        url, $targetEl;
                                    callback = callback ||
                                    function() {};
                                    $targetEl = _getElementFromConfig($el, target);
                                    url = _getUrl($triggerEl || $el, overrides.url || config.url);

                                    function _onError() {
                                        self.isFetching = false;
                                        self.handleError();
                                        callback(false);
                                        return false
                                    }
                                    function _process(xhr) {
                                        self.isFetching = false;
                                        self.processXhr(xhr, insertIntoDom)
                                    }
                                    function insertIntoDom(err, html, json) {
                                        var $node;
                                        if (!err) {
                                            if (typeof html !== "undefined") {
                                                if (position === POSITION.TOP) $node = $(html).prependTo($targetEl);
                                                else if (position === POSITION.BOTTOM) $node = $(html).appendTo($targetEl);
                                                else $node = $targetEl.html(html);
                                                $node.each(function(idx, node) {
                                                    LI.Controls.parseFragment(node)
                                                })
                                            }
                                            callback(true, $node, json)
                                        } else _onError()
                                    }
                                    if (!url) return _onError();
                                    if (self.isFetching) return self.isFetching;
                                    self.request("GET", url, {
                                        custom: {
                                            error: _onError,
                                            exception: _onError
                                        },
                                        failure: _onError,
                                        success: _process
                                    });
                                    self.isFetching = true;
                                    return true
                                }
                            };
                        return proto
                    });
                    LI.FetchAndInsert = FAI;
                    LI.FetchAndInsert.getById = _getById
                })();;
                if (typeof LI.FetchAndInsert !== "undefined") {
                    module.setExports(LI.FetchAndInsert);
                }
            });

            Inject.INTERNAL.executor.exec40.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/FetchAndInsert", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsert.js");
        try {
            Inject.INTERNAL.executor.exec40.innerFn.call(Inject.INTERNAL.executor.exec40.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec40.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsert.js

#37 JavaScript::Eval (size: 2420, repeated: 1)

Inject.INTERNAL.executor.exec41.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec41.innerFn = function() {
            // id: scripts/apps/megaphone/FetchAndInsertDust uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsertDust.js
            var module = Inject.INTERNAL.executor.exec41.module,
                require = Inject.INTERNAL.executor.exec41.require,
                define = Inject.INTERNAL.executor.exec41.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["scripts/apps/megaphone/FetchAndInsert"], function() {
                LI.define("FetchAndInsertDust");
                LI.FetchAndInsertDust = LI.FetchAndInsert.extend(function(base) {
                    return {
                        init: function(el, config) {
                            this.template = config.template || this.template;
                            base.init.apply(this, arguments)
                        },
                        processXhr: function(xhr, callback) {
                            var headers = xhr.getResponseHeader || {},
                                templateDepsHeader = headers["X-FS-TL"] || headers["X-Fs-TL"] || "",
                                templateDeps = templateDepsHeader.split(","),
                                text = xhr.responseText,
                                json = typeof text === "string" ? LI.parseJSON(text) : text,
                                self = this;

                            function onFailure() {
                                xhr.status = -2;
                                xhr.statusText = "dependency resolution failure";
                                callback(new Error(xhr.statusText), null)
                            }
                            function onSuccess() {
                                dust.render(self.template, json, function(err, html) {
                                    callback(err, html, json)
                                })
                            }
                            if (templateDeps.length) LI.getScript(templateDeps, onSuccess, onFailure);
                            else onSuccess()
                        }
                    }
                });;
                if (typeof LI.FetchAndInsertDust !== "undefined") {
                    module.setExports(LI.FetchAndInsertDust);
                }
            });

            Inject.INTERNAL.executor.exec41.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/FetchAndInsertDust", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsertDust.js");
        try {
            Inject.INTERNAL.executor.exec41.innerFn.call(Inject.INTERNAL.executor.exec41.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec41.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FFetchAndInsertDust.js

#38 JavaScript::Eval (size: 2722, repeated: 1)

Inject.INTERNAL.executor.exec42.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec42.innerFn = function() {
            // id: scripts/apps/megaphone/PulseCommentsLoader uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FPulseCommentsLoader.js
            var module = Inject.INTERNAL.executor.exec42.module,
                require = Inject.INTERNAL.executor.exec42.require,
                define = Inject.INTERNAL.executor.exec42.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/apps/megaphone/FetchAndInsertDust"], function($) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        Controls = LIModules.imports("Controls"),
                        FetchAndInsertDust = LIModules.requires("FetchAndInsertDust"),
                        PulseCommentsLoader;
                    PulseCommentsLoader = FetchAndInsertDust.extend(function(base) {
                        var proto, LOADING = "loading",
                            BOTTOM = "BOTTOM";
                        proto = {
                            template: "tl/apps/pulse/embed/comment_list",
                            handleAction: function(event) {
                                var $trigger = $(event.target),
                                    that = this,
                                    isHandled, $commentList;
                                if (this._config.target.position === BOTTOM) if (!this._truncateList) {
                                    $commentList = $trigger.closest("ul.comment-list:not(.is-threaded-comment)");
                                    if (Controls && Controls.getControl) this._truncateList = Controls.getControl($commentList.get(0), "TruncateCommentList")
                                }
                                $trigger.addClass(LOADING);
                                isHandled = this.trigger(null, $trigger, function(isSuccess, $node) {
                                    if (isSuccess) {
                                        $trigger.remove();
                                        if (that._truncateList) that._truncateList.addSubcontrols($node.filter(".comment-item"))
                                    } else $trigger.removeClass(LOADING)
                                });
                                if (isHandled) event.preventDefault()
                            }
                        };
                        return proto
                    });
                    LIModules.exports("PulseCommentsLoader", PulseCommentsLoader)
                })(window.LIModules);;
                if (typeof LI.PulseCommentsLoader !== "undefined") {
                    module.setExports(LI.PulseCommentsLoader);
                }
            });

            Inject.INTERNAL.executor.exec42.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/PulseCommentsLoader", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FPulseCommentsLoader.js");
        try {
            Inject.INTERNAL.executor.exec42.innerFn.call(Inject.INTERNAL.executor.exec42.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec42.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FPulseCommentsLoader.js

#39 JavaScript::Eval (size: 4287, repeated: 1)

Inject.INTERNAL.executor.exec43.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec43.innerFn = function() {
            // id: scripts/apps/megaphone/CommentViewToggle uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCommentViewToggle.js
            var module = Inject.INTERNAL.executor.exec43.module,
                require = Inject.INTERNAL.executor.exec43.require,
                define = Inject.INTERNAL.executor.exec43.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/core/Events", "scripts/shared/BaseControl", "scripts/apps/megaphone/FetchAndInsert"], function($) {
                (function(LIModules) {
                    var CLICK = "click",
                        TOGGLED_ON = "on",
                        LOADING = "loading",
                        CHANGE_EVENT = "CommentViewToggle:change",
                        NEW_COMMENT_EVENT = "PulseComments:new",
                        REV_CHRON_VIEW = "rev_chron",
                        DROPDOWN_TRIGGER_SELECTOR = ".dropdown-trigger",
                        $ = LIModules.requires("jquery"),
                        _ = LIModules.requires("underscore"),
                        BaseControl = LIModules.requires("BaseControl"),
                        Events = LIModules.requires("Events"),
                        getById = LIModules.requires("FetchAndInsert.getById"),
                        $dropdownTrigger, VIEW, CVT;
                    VIEW = {
                        "BEST": "best",
                        "NEWEST": "newest",
                        "OLDEST": "oldest"
                    };

                    function getViewFromEl($el, attr) {
                        return $el.attr(attr)
                    }
                    function getCommentCountFromDom() {
                        return parseInt($(".comments-list-header .count", "#article-activity").text(), 10)
                    }
                    CVT = BaseControl.extend(function(base) {
                        return {
                            selector: "option",
                            attribute: "data-sort",
                            pulseCommentsLoaderId: "CommentViewToggle",
                            beforeDecoration: function() {
                                var $current, config = this._config;
                                if (config.selector) this.selector = config.selector;
                                if (config.attribute) this.attribute = config.attribute;
                                if (config.pulseCommentsLoaderId) this.pulseCommentsLoaderId = config.pulseCommentsLoaderId;
                                $current = this._$el.find(this.selector).filter("." + TOGGLED_ON);
                                $dropdownTrigger = $(DROPDOWN_TRIGGER_SELECTOR);
                                this.current = getViewFromEl($current, this.attribute) || null;
                                base.beforeDecoration.apply(this, arguments);
                                Events.trigger(CHANGE_EVENT, {
                                    "old": null,
                                    "new": this.current
                                })
                            },
                            attachEventListeners: function() {
                                this._$el.on(CLICK, this.selector, _.bind(this.handleClick, this))
                            },
                            handleClick: function(event) {
                                var oldView = this.current,
                                    newView = oldView,
                                    commentsLoader = getById(this.pulseCommentsLoaderId),
                                    $els = this._$el.find(this.selector),
                                    $el;

                                function fireEvent(isSuccess) {
                                    $el.removeClass(LOADING);
                                    if ($dropdownTrigger) $dropdownTrigger.removeClass(LOADING);
                                    Events.trigger(CHANGE_EVENT, {
                                        old: oldView,
                                        "new": isSuccess ? newView : oldView
                                    })
                                }
                                if ($dropdownTrigger) $dropdownTrigger.addClass(LOADING);
                                $el = $els.removeClass(TOGGLED_ON).filter(event.currentTarget).addClass(LOADING);
                                newView = this.current = getViewFromEl($el, this.attribute);
                                event.preventDefault();
                                if (commentsLoader) commentsLoader.trigger(null, $el, function commentsLoaded(isSuccess, node, data) {
                                    if (data) {
                                        var newCount = data.results.article_social_signals.commentsInfo.count,
                                            oldCount = getCommentCountFromDom();
                                        if (newView === REV_CHRON_VIEW) Events.trigger(NEW_COMMENT_EVENT, {
                                            "new_count": newCount,
                                            "old_count": oldCount,
                                            "new_anchor_time": data.results.article_social_signals.commentsInfo.comments[0].createdDate
                                        })
                                    }
                                    if (isSuccess) $el.addClass(TOGGLED_ON);
                                    fireEvent(isSuccess)
                                });
                                else fireEvent(true)
                            }
                        }
                    });
                    LIModules.exports("CommentViewToggle", CVT);
                    LIModules.exports("CommentViewToggle.VIEW", VIEW)
                })(window.LIModules);;
                if (typeof LI.CommentViewToggle !== "undefined") {
                    module.setExports(LI.CommentViewToggle);
                }
            });

            Inject.INTERNAL.executor.exec43.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/CommentViewToggle", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCommentViewToggle.js");
        try {
            Inject.INTERNAL.executor.exec43.innerFn.call(Inject.INTERNAL.executor.exec43.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec43.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCommentViewToggle.js

#40 JavaScript::Eval (size: 2464, repeated: 1)

Inject.INTERNAL.executor.exec44.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec44.innerFn = function() {
            // id: scripts/apps/megaphone/CurrentCommentSort uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCurrentCommentSort.js
            var module = Inject.INTERNAL.executor.exec44.module,
                require = Inject.INTERNAL.executor.exec44.require,
                define = Inject.INTERNAL.executor.exec44.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/core/Events"], function($) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        Events = LIModules.requires("Events"),
                        WebTracking = LIModules.imports("WebTracking"),
                        oUISettings = LIModules.imports("oUISettings"),
                        EVENT = "CommentViewToggle:change",
                        TRACK = "tod-mph-cmnt-sort-",
                        UI_SETTING_KEY = "megaphoneCommentSort",
                        $body = $(document.body),
                        CurrentCommentSort, isGuest;

                    function track(str, prefixOverride) {
                        var prefix = prefixOverride || TRACK;
                        if (str && WebTracking) WebTracking.trackUserAction(prefix + str)
                    }
                    function saveUiSetting(value) {
                        if (oUISettings) oUISettings.saveSettings(UI_SETTING_KEY, value || "default")
                    }
                    Events.on(EVENT, function(data) {
                        isGuest = $body.hasClass("guest");
                        CurrentCommentSort = data["new"];
                        LIModules.exports("CurrentCommentSort", CurrentCommentSort);
                        if (data["new"] && data.old) {
                            track(CurrentCommentSort);
                            if (!isGuest) saveUiSetting(CurrentCommentSort)
                        }
                    })
                })(LIModules);;
                if (typeof LI.CurrentCommentSort !== "undefined") {
                    module.setExports(LI.CurrentCommentSort);
                }
            });

            Inject.INTERNAL.executor.exec44.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/CurrentCommentSort", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCurrentCommentSort.js");
        try {
            Inject.INTERNAL.executor.exec44.innerFn.call(Inject.INTERNAL.executor.exec44.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec44.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FCurrentCommentSort.js

#41 JavaScript::Eval (size: 4658, repeated: 1)

Inject.INTERNAL.executor.exec45.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec45.innerFn = function() {
            // id: js/apps/pulse/InfiniteScroll uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FInfiniteScroll.js
            var module = Inject.INTERNAL.executor.exec45.module,
                require = Inject.INTERNAL.executor.exec45.require,
                define = Inject.INTERNAL.executor.exec45.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            LI.define("PulseInfiniteScroll");
            LI.PulseInfiniteScroll = function() {
                var configs = [],
                    handledScroll = false,
                    infiniteScrollEvent = new YAHOO.util.CustomEvent("infinite-scroll"),
                    MAX_COUNT = 3,
                    handleScroll = handleScroll,
                    handleInterval = handleInterval;
                YEvent.on(window, "scroll", handleScroll);
                setTimeout(handleInterval, 100);
                YEvent.onDOMReady(function() {
                    YEvent.on(document.body, "click", handleClick)
                });

                function init(el, config) {
                    var wrapper = config.scrollOnWrapper && config.wrapperClass && YDom.getAncestorByClassName(el, config.wrapperClass);
                    if (config.enabled === false) return;
                    config.scrollCount = config.scrollCount || 0;
                    config.maxCount = config.maxCount || MAX_COUNT;
                    configs.push({
                        id: YDom.generateId(el),
                        config: config
                    });
                    if (wrapper) YEvent.on(wrapper, "scroll", handleScroll);
                    infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["init", config])
                }
                function handleScroll() {
                    handledScroll = true
                }
                function handleInterval() {
                    setTimeout(handleInterval, 100);
                    if (!handledScroll) return;
                    handledScroll = false;
                    LI.each(configs, function(opt) {
                        var config = opt.config,
                            id = opt.id;
                        if ((config.maxCount < 0 || config.scrollCount < config.maxCount) && LI.inViewPort(id)) doInfiniteScroll(id, config, true)
                    })
                }
                function handleClick(event) {
                    var target = YEvent.getTarget(event),
                        id = target.getAttribute("id");
                    LI.each(configs, function(opt) {
                        var config = opt.config;
                        if (id === opt.id) {
                            doInfiniteScroll(id, config);
                            infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["click", config]);
                            YEvent.preventDefault(event)
                        }
                    })
                }
                function doInfiniteScroll(id, config, incrementCounter) {
                    var el = YDom.get(id),
                        wrapper = YDom.getAncestorByClassName(el, config.wrapperClass) || el.parentNode,
                        children = config.children || "li",
                        itemClass = config.itemClass || "item",
                        url = config.url || LI.getDataAttribute(el, "href") || YDom.getAttribute(el, "href"),
                        isLoading = YDom.hasClass(el, "loading");
                    if (isLoading || !url) return;
                    infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["scroll", config]);

                    function error(msg) {
                        var caller = msg ? "xhr:" : "";
                        YDom.removeClass(el, "loading");
                        infiniteScrollEvent.fire.apply(infiniteScrollEvent, [caller + "error", config].concat(arguments))
                    }
                    function success(xhr) {
                        infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["xhr:success", xhr]);
                        var node = LI.domify(xhr.responseText),
                            frag = document.createDocumentFragment(),
                            newNodes = Y$(children, node),
                            newNodeCount = 0;
                        if (el.parentNode) el.parentNode.removeChild(el);
                        if (!newNodes.length) error();
                        else {
                            infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["xhr:done", config, newNodes].concat(arguments));
                            LI.each(newNodes, function(newNode) {
                                var id = YDom.getAttribute(newNode, "id"),
                                    isInDom = YDom.get(id) !== null;
                                if (!isInDom) {
                                    if (YDom.hasClass(newNode, itemClass)) {
                                        ++newNodeCount;
                                        infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["dom:node", config, newNode])
                                    }
                                    frag.appendChild(newNode)
                                }
                            });
                            if (newNodeCount > 0) {
                                if (incrementCounter) config.scrollCount += 1;
                                wrapper.appendChild(frag);
                                LI.showAllDeferredImg(wrapper);
                                LI.Controls.parseFragment(wrapper);
                                infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["dom:appended", config, newNodes, newNodeCount])
                            }
                        }
                        infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["success", config])
                    }
                    YDom.addClass(el, "loading");
                    LI.asyncRequest("GET", url, {
                        success: success,
                        failure: error,
                        custom: {
                            exception: error
                        }
                    });
                    infiniteScrollEvent.fire.apply(infiniteScrollEvent, ["xhr:start", config])
                }
                init.event = infiniteScrollEvent;
                return init
            }();

            Inject.INTERNAL.executor.exec45.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/apps/pulse/InfiniteScroll", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FInfiniteScroll.js");
        try {
            Inject.INTERNAL.executor.exec45.innerFn.call(Inject.INTERNAL.executor.exec45.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec45.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FInfiniteScroll.js

#42 JavaScript::Eval (size: 3635, repeated: 1)

Inject.INTERNAL.executor.exec46.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec46.innerFn = function() {
            // id: js/apps/pulse/CommentsHeader uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FCommentsHeader.js
            var module = Inject.INTERNAL.executor.exec46.module,
                require = Inject.INTERNAL.executor.exec46.require,
                define = Inject.INTERNAL.executor.exec46.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(LIModules) {
                var $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore"),
                    Events = LIModules.requires("Events"),
                    PulseSocial = LIModules.imports("PulseSocial"),
                    PulseInfiniteScroll = LIModules.imports("PulseInfiniteScroll");
                var PulseCommentsHeader = function() {
                        var config = {
                            countSelector: ".count"
                        },
                            CLICK = "click",
                            ON = "on",
                            LOADING = "loading",
                            GLOBAL_EVENT_PREFIX = "PulseComments",
                            SCROLL_EVENTS = {
                                NODE: "dom:node",
                                APPENDED: "dom:appended",
                                XHRDONE: "xhr:done",
                                XHRERROR: "xhr:error",
                                SCROLL: "scroll",
                                ERROR: "error",
                                SUCCESS: "success"
                            };

                        function parseIntFromHtml(html, _default) {
                            var val = parseInt(html.replace(/\D/g, ""), 10);
                            return isNaN(val) ? _default || 0 : val
                        }
                        function PulseCommentsHeader(_el, _config) {
                            var scrollEvent = PulseInfiniteScroll && PulseInfiniteScroll.event,
                                $el = $(_el);
                            config = _.defaults(config, _config);
                            this.node = $el.find(config.countSelector).get(0);
                            if (!scrollEvent || !this.node) return;
                            if (scrollEvent && scrollEvent.subscribe) scrollEvent.subscribe(handleInfiniteScrollEvents, null, this)
                        }
                        function handleInfiniteScrollEvents(name, args) {
                            var type = args.shift();
                            if (type === SCROLL_EVENTS.APPENDED) infiniteScrollSuccess.call(this, args[2])
                        }
                        function infiniteScrollSuccess(count) {
                            var currentCount = 0;
                            if (this.node) {
                                currentCount = parseIntFromHtml(this.node.innerHTML, 0);
                                currentCount += count;
                                this.node.innerHTML = Math.max(currentCount, 0)
                            }
                        }
                        PulseCommentsHeader.LikeAction = function(el, config) {
                            var $el = $(el);
                            this.el = el;
                            this.config = config || {};
                            if ($el.length) $el.on(CLICK, _.bind(this.handleClick, this))
                        };
                        PulseCommentsHeader.LikeAction.prototype = {
                            handleClick: function(event) {
                                var $target = $(event.currentTarget),
                                    isOn = $target.hasClass(ON),
                                    permLink = this.config.permLink,
                                    articleId = this.config.articleId,
                                    LIKE_EVENT_SUCCESS_NAME = "like:success",
                                    UNLIKE_EVENT_SUCCESS_NAME = "unlike:success";
                                if (PulseSocial && articleId) {
                                    $target.addClass(LOADING);
                                    PulseSocial.handleLikeGesture(articleId, permLink, !isOn, function(err, response) {
                                        var isSuccess = !err && !! response;
                                        if (isSuccess) {
                                            $target.toggleClass(ON);
                                            Events.trigger(GLOBAL_EVENT_PREFIX + ":" + (isOn ? UNLIKE_EVENT_SUCCESS_NAME : LIKE_EVENT_SUCCESS_NAME), $target)
                                        }
                                        $target.removeClass(LOADING)
                                    });
                                    event.preventDefault()
                                }
                            }
                        };
                        return PulseCommentsHeader
                    }();
                LIModules.exports("PulseCommentsHeader", PulseCommentsHeader)
            })(window.LIModules);

            Inject.INTERNAL.executor.exec46.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/apps/pulse/CommentsHeader", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FCommentsHeader.js");
        try {
            Inject.INTERNAL.executor.exec46.innerFn.call(Inject.INTERNAL.executor.exec46.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec46.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fjs%2Fapps%2Fpulse%2FCommentsHeader.js

#43 JavaScript::Eval (size: 2013, repeated: 1)

Inject.INTERNAL.executor.exec47.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec47.innerFn = function() {
            // id: scripts/shared/utils/getContentHeight uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FgetContentHeight.js
            var module = Inject.INTERNAL.executor.exec47.module,
                require = Inject.INTERNAL.executor.exec47.require,
                define = Inject.INTERNAL.executor.exec47.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore", "jquery"], function(_, $) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        _ = LIModules.requires("underscore");

                    function parsePadding($el, dim) {
                        return parseInt($el.css("padding-" + dim), 10)
                    }
                    var getContentHeight = function(el) {
                            var $el = $(el);
                            return _(["top", "bottom"]).chain().map(_.partial(parsePadding, $el)).reduce(function(innerHeight, padding) {
                                return innerHeight - padding
                            }, $el.innerHeight()).value()
                        };
                    LIModules.exports("getContentHeight", getContentHeight)
                })(window.LIModules);;
                if (typeof LI.getContentHeight !== "undefined") {
                    module.setExports(LI.getContentHeight);
                }
            });

            Inject.INTERNAL.executor.exec47.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/utils/getContentHeight", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FgetContentHeight.js");
        try {
            Inject.INTERNAL.executor.exec47.innerFn.call(Inject.INTERNAL.executor.exec47.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec47.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FgetContentHeight.js

#44 JavaScript::Eval (size: 1916, repeated: 1)

Inject.INTERNAL.executor.exec48.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec48.innerFn = function() {
            // id: scripts/shared/utils/findControlByElement uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FfindControlByElement.js
            var module = Inject.INTERNAL.executor.exec48.module,
                require = Inject.INTERNAL.executor.exec48.require,
                define = Inject.INTERNAL.executor.exec48.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(LIModules) {
                var _ = LIModules.requires("underscore"),
                    $ = LIModules.requires("jquery"),
                    findControlByElement;
                findControlByElement = function($el, registry) {
                    if (!_.isArray(registry)) return false;
                    var l = registry.length,
                        els = $el.toArray(),
                        $registryEl, control;
                    while (l--) {
                        $registryEl = registry[l]._$el;
                        control = $registryEl.get(0) && _.isEqual(els, $registryEl.toArray()) ? registry[l] : false
                    }
                    return control
                };
                LIModules.exports("findControlByElement", findControlByElement)
            })(window.LIModules);

            Inject.INTERNAL.executor.exec48.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/utils/findControlByElement", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FfindControlByElement.js");
        try {
            Inject.INTERNAL.executor.exec48.innerFn.call(Inject.INTERNAL.executor.exec48.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec48.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FfindControlByElement.js

#45 JavaScript::Eval (size: 6565, repeated: 1)

Inject.INTERNAL.executor.exec49.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec49.innerFn = function() {
            // id: scripts/apps/megaphone/TruncateComment uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateComment.js
            var module = Inject.INTERNAL.executor.exec49.module,
                require = Inject.INTERNAL.executor.exec49.require,
                define = Inject.INTERNAL.executor.exec49.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl", "scripts/shared/utils/getContentHeight", "scripts/shared/utils/findControlByElement"], function($) {
                (function(LIModules) {
                    var BaseControl = LIModules.requires("BaseControl"),
                        _ = LIModules.requires("underscore"),
                        $ = LIModules.requires("jquery"),
                        getContentHeight = LIModules.imports("getContentHeight"),
                        findControlByElement = LIModules.imports("findControlByElement"),
                        TruncateCommentRegistry;
                    var TruncateComment = BaseControl.extend(function(base) {
                        var NULL_LINK_HTML = '\x3ca href\x3d"javascript:void(0)"/\x3e',
                            DEFAULTS = {
                                truncateLength: 320,
                                maxLines: 4,
                                commentTextSelector: ".comment-text",
                                toggleLinkClass: "truncate-comment-toggle",
                                isTruncatedClass: "is-truncated",
                                suppressEventCreation: false
                            };
                        return {
                            init: function(el, config) {
                                this._config = _.defaults(config, DEFAULTS);
                                this._validateConfig();
                                this._registerInstance();
                                base.init.call(this, el, config)
                            },
                            beforeDecoration: function() {
                                this._$commentText = this._$el.find(this._config.commentTextSelector).first();
                                if (this._exceedsMaxLines()) {
                                    this._truncateComment();
                                    this._injectToggleLinks()
                                }
                            },
                            _registerInstance: function() {
                                TruncateCommentRegistry = LIModules.imports("TruncateCommentRegistry") || [];
                                TruncateCommentRegistry.push(this);
                                if (!LIModules.imports("TruncateCommentRegistry")) LIModules.exports("TruncateCommentRegistry", TruncateCommentRegistry)
                            },
                            _unRegisterInstance: function() {
                                var controlInstance = findControlByElement ? findControlByElement(this._$el, TruncateCommentRegistry) : null;
                                TruncateCommentRegistry = LIModules.imports("TruncateCommentRegistry");
                                if (TruncateCommentRegistry && controlInstance) TruncateCommentRegistry = _.without(TruncateCommentRegistry, controlInstance)
                            },
                            _stripAlpha: function(value) {
                                if (typeof value === "string") value = value.replace(/\D/g, "");
                                return Number(value)
                            },
                            _validateConfig: function() {
                                var maxLines = this._config.maxLines,
                                    tuncateLength = this._config.truncateLength;
                                if (_.isUndefined(this._config.moreLinkText)) throw new Error;
                                this._config.maxLines = maxLines = this._stripAlpha(maxLines) || DEFAULTS.maxLines;
                                if (!this._isFinite(maxLines)) throw new TypeError;
                                else if (maxLines < 1) throw new RangeError;
                                this._config.truncateLength = tuncateLength = this._stripAlpha(tuncateLength) || DEFAULTS.truncateLength;
                                if (!this._isFinite(tuncateLength)) throw new TypeError;
                            },
                            _injectToggleLinks: function() {
                                this._$seeMoreLink = $(NULL_LINK_HTML).html(this._config.moreLinkText).addClass(this._config.toggleLinkClass);
                                if (!_.isUndefined(this._config.lessLinkText)) this._$seeLessLink = $(NULL_LINK_HTML).html(this._config.lessLinkText).addClass(this._config.toggleLinkClass).hide();
                                this._$commentText.after(this._$seeMoreLink, this._$seeLessLink)
                            },
                            afterDecoration: function() {
                                _.bindAll(this, "toggleCommentTruncation")
                            },
                            attachEventListeners: function() {
                                if (!this._config.suppressEventCreation && !_.isUndefined(this._$seeMoreLink)) {
                                    this._$seeMoreLink.on("click", this.toggleCommentTruncation);
                                    if (!_.isUndefined(this._$seeLessLink)) this._$seeLessLink.on("click", this.toggleCommentTruncation)
                                }
                            },
                            _calculateLineHeight: function(el) {
                                var $el = $(el),
                                    lineHeight = parseInt($el.css("line-height"), 10),
                                    $span;
                                if (_.isNaN(lineHeight)) {
                                    $span = $("\x3cspan\x3e\x26nbsp;\x3c/span\x3e").css("line-height", "inherit").css("display", "none").insertAfter($el);
                                    lineHeight = $span.height();
                                    $span.remove()
                                }
                                return lineHeight
                            },
                            _exceedsMaxLines: function() {
                                var lineHeight = this._calculateLineHeight(this._$commentText),
                                    maxHeight, contentHeight = getContentHeight ? getContentHeight(this._$commentText) : LI.textHeight(this._$commentText);
                                maxHeight = lineHeight * this._config.maxLines;
                                return contentHeight > maxHeight
                            },
                            _isFinite: function(obj) {
                                return isFinite(obj) && !isNaN(parseFloat(obj))
                            },
                            _getTextType: function() {
                                return this._hasHTML ? "html" : "text"
                            },
                            _truncateComment: function() {
                                var tLength = this._config.truncateLength - 1,
                                    $text = this._$commentText;
                                this._rawText = $text.html() + " ";
                                if (this._rawText.indexOf("\x3c") !== -1) {
                                    var charCount = 0,
                                        $nodes = $text.contents(),
                                        newComment = document.createElement($text[0].nodeName);
                                    $nodes.each(function() {
                                        var $el = $(this),
                                            text = $el.text(),
                                            prevCharCount = charCount;
                                        charCount += text.length;
                                        if (charCount >= tLength) {
                                            text = text.substring(0, tLength - prevCharCount);
                                            newComment.appendChild(document.createTextNode(text));
                                            return false
                                        }
                                        newComment.appendChild($el[0])
                                    });
                                    this._truncatedText = $(newComment).html() + " ";
                                    this._hasHTML = true
                                } else this._truncatedText = this._rawText.substring(0, tLength) + " ";
                                $text[this._getTextType()](this._truncatedText).addClass(this._config.isTruncatedClass);
                                this._truncated = true
                            },
                            _swapTruncatedText: function() {
                                var textType = this._getTextType(),
                                    isTruncatedClass = this._config.isTruncatedClass;
                                if (this._truncated) this._$commentText[textType](this._rawText).removeClass(isTruncatedClass);
                                else this._$commentText[textType](this._truncatedText).addClass(isTruncatedClass);
                                this._truncated = !this._truncated
                            },
                            _toggleLinks: function() {
                                this._$seeMoreLink.toggle();
                                if (!_.isUndefined(this._$seeLessLink)) this._$seeLessLink.toggle()
                            },
                            toggleCommentTruncation: function() {
                                this._swapTruncatedText();
                                this._toggleLinks()
                            }
                        }
                    });
                    LIModules.exports("TruncateComment", TruncateComment)
                })(window.LIModules);;
                if (typeof LI.TruncateComment !== "undefined") {
                    module.setExports(LI.TruncateComment);
                }
            });

            Inject.INTERNAL.executor.exec49.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/TruncateComment", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateComment.js");
        try {
            Inject.INTERNAL.executor.exec49.innerFn.call(Inject.INTERNAL.executor.exec49.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec49.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateComment.js

#46 JavaScript::Eval (size: 5775, repeated: 1)

Inject.INTERNAL.executor.exec5.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec5.innerFn = function() {
            // id: scripts/shared/DragonBars uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDragonBars.js
            var module = Inject.INTERNAL.executor.exec5.module,
                require = Inject.INTERNAL.executor.exec5.require,
                define = Inject.INTERNAL.executor.exec5.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl"], function($) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        BaseControl = LIModules.requires("BaseControl"),
                        DragonBars = BaseControl.extend(function(base) {
                            var SCROLL = "scroll",
                                MOUSE_ENTER = "mouseenter",
                                MOUSE_LEAVE = "mouseleave",
                                MOUSE_UP = "mouseup",
                                MOUSE_DOWN = "mousedown",
                                MOUSE_MOVE = "mousemove",
                                UNSELECTABLE = "unselectable",
                                SELECT_START = "selectstart",
                                LIST_UPDATED = "listupdated",
                                EVENT_NAMESPACE = ".scrollbar",
                                DEFAULTS = {
                                    inactivityDuration: 1500,
                                    markup: '\x3cdiv class\x3d"li-scroll-track"\x3e\x3cdiv class\x3d"li-scroll-thumb"\x3e\x3cdiv class\x3d"li-scroll-scrollbar"\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e',
                                    elements: {
                                        track: ".li-scroll-track",
                                        scrubber: ".li-scroll-thumb"
                                    },
                                    classes: {
                                        content: "li-scroll-content",
                                        visible: "show",
                                        active: "scrolling-active"
                                    },
                                    alwaysShow: false
                                },
                                $body = $("body");
                            return {
                                beforeDecoration: function() {
                                    var config, $markup;
                                    this._config = config = $.extend({}, DEFAULTS, this._config);
                                    $markup = $("\x3cdiv\x3e").append(config.markup);
                                    this._$scrubber = $markup.find(config.elements.scrubber);
                                    this._$track = $markup.find(config.elements.track);
                                    this._$markup = $markup.children();
                                    this._mouseClickPosition = null;
                                    this._scrollTop = null;
                                    this.render()
                                },
                                attachEventListeners: function() {
                                    this._$el.on(SCROLL + EVENT_NAMESPACE, this._handleScroll).on(MOUSE_ENTER + EVENT_NAMESPACE, this._handleMouseEnter).on(MOUSE_LEAVE + EVENT_NAMESPACE, this._handleMouseLeave).on(MOUSE_MOVE + EVENT_NAMESPACE, this._handleElementMouseMove).on(LIST_UPDATED + EVENT_NAMESPACE, this.render);
                                    this._$scrubber.on(MOUSE_DOWN + EVENT_NAMESPACE, $.proxy(this._handleMouseDown, this));
                                    this._$track.on(MOUSE_LEAVE + EVENT_NAMESPACE, $.proxy(this._handleMouseLeave, this))
                                },
                                detachEventListeners: function() {
                                    this._$el.off(EVENT_NAMESPACE);
                                    this._$scrubber.off(EVENT_NAMESPACE);
                                    this._$track.off(EVENT_NAMESPACE)
                                },
                                _handleBodyMouseMove: function(evt) {
                                    var movementDiff = evt.clientY - this._mouseClickPosition.y,
                                        scrollY = movementDiff / this._portalHeight * this._contentHeight;
                                    this._$el.scrollTop(this._scrollTop + scrollY)
                                },
                                _handleMouseEnter: function(evt) {
                                    this._cancelHide();
                                    this.show()
                                },
                                _handleMouseLeave: function(evt) {
                                    var $target = $(evt.relatedTarget);
                                    if (!$target.closest(this._$track).length && !$target.closest(this._$element).length) this._queueHide()
                                },
                                _handleElementMouseMove: function(evt) {
                                    this._cancelHide()
                                },
                                _handleSelectStart: function(evt) {
                                    evt.preventDefault();
                                    return false
                                },
                                _handleMouseDown: function(evt) {
                                    $body.addClass(this._config.classes.active).prop(UNSELECTABLE, "on").on(MOUSE_MOVE, this._handleBodyMouseMove).on(MOUSE_UP, this._handleMouseUp).on(SELECT_START, this._handleSelectStart);
                                    this._mouseClickPosition = {
                                        x: evt.clientX,
                                        y: evt.clientY
                                    };
                                    this._scrollTop = this._$el.scrollTop()
                                },
                                _handleMouseUp: function(evt) {
                                    $body.removeClass(this._config.classes.active).prop(UNSELECTABLE, null).off(MOUSE_MOVE, this._handleBodyMouseMove).off(MOUSE_UP, this._handleMouseUp).off(SELECT_START, this._handleSelectStart)
                                },
                                _handleScroll: function(evt) {
                                    this._repositionScrubber();
                                    this._cancelHide()
                                },
                                _repositionScrubber: function() {
                                    var percent = this._$el.scrollTop() / this._adjustedHeight;
                                    this._$scrubber.css("top", Math.round(percent * this._scrollableHeight) + "px")
                                },
                                _queueHide: function() {
                                    if (false !== this._config.inactivityDuration) {
                                        this._cancelHide();
                                        this._hideTimer = setTimeout(this.hide, this._config.inactivityDuration)
                                    }
                                },
                                _cancelHide: function() {
                                    clearTimeout(this._hideTimer)
                                },
                                render: function() {
                                    var config = this._config,
                                        $el = this._$el,
                                        portalHeight = $el.height(),
                                        contentHeight = $el.prop("scrollHeight"),
                                        adjustedHeight = contentHeight - portalHeight,
                                        scrubberHeight = Math.round(portalHeight / contentHeight * portalHeight);
                                    this._$markup.detach();
                                    $el.removeClass(this._config.classes.content);
                                    if (config.alwaysShow || contentHeight > portalHeight) {
                                        $el.addClass(config.classes.content).after(this._$markup);
                                        this._$scrubber = this._$el.parent().find(config.elements.scrubber);
                                        this._$track = this._$el.parent().find(config.elements.track);
                                        this._$scrubber.height(scrubberHeight)
                                    }
                                    this._contentHeight = contentHeight;
                                    this._portalHeight = portalHeight;
                                    this._adjustedHeight = adjustedHeight;
                                    this._scrollableHeight = this._$track.height() - scrubberHeight
                                },
                                redraw: function() {
                                    this.render();
                                    this._repositionScrubber()
                                },
                                show: function() {
                                    this._$track.addClass(this._config.classes.visible);
                                    this._queueHide()
                                },
                                hide: function() {
                                    this._$track.removeClass(this._config.classes.visible)
                                }
                            }
                        });
                    LIModules.exports("DragonBars", DragonBars)
                })(window.LIModules);;
                if (typeof LI.DragonBars !== "undefined") {
                    module.setExports(LI.DragonBars);
                }
            });

            Inject.INTERNAL.executor.exec5.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/DragonBars", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDragonBars.js");
        try {
            Inject.INTERNAL.executor.exec5.innerFn.call(Inject.INTERNAL.executor.exec5.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec5.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDragonBars.js

#47 JavaScript::Eval (size: 4070, repeated: 1)

Inject.INTERNAL.executor.exec50.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec50.innerFn = function() {
            // id: scripts/apps/megaphone/TruncateCommentList uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateCommentList.js
            var module = Inject.INTERNAL.executor.exec50.module,
                require = Inject.INTERNAL.executor.exec50.require,
                define = Inject.INTERNAL.executor.exec50.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "scripts/shared/BaseControl", "scripts/apps/megaphone/TruncateComment", "scripts/shared/utils/findControlByElement"], function($, _) {
                (function(LIModules) {
                    var BaseControl = LIModules.requires("BaseControl"),
                        _ = LIModules.requires("underscore"),
                        $ = LIModules.requires("jquery"),
                        TruncateComment = LIModules.requires("TruncateComment"),
                        findControlByElement = LIModules.imports("findControlByElement"),
                        TruncateCommentListRegistry;
                    var TruncateCommentList = BaseControl.extend(function(base) {
                        var DATE_SEED = +new Date,
                            DEFAULTS = {
                                commentContainerSelector: ".comment-item",
                                toggleLinkClass: "truncate-comment-list-toggle",
                                suppressEventCreation: true
                            };
                        return {
                            init: function(el, config) {
                                this._config = _.defaults(config, DEFAULTS);
                                this._registerInstance();
                                base.init.apply(this, arguments)
                            },
                            beforeDecoration: function() {
                                this._controls = {};
                                this._initSubcontrols()
                            },
                            afterDecoration: function() {
                                _.bindAll(this, "addSubcontrol", "_handleClickEvent")
                            },
                            attachEventListeners: function() {
                                this._$el.on("click", "." + this._config.toggleLinkClass, this._handleClickEvent)
                            },
                            _registerInstance: function() {
                                TruncateCommentListRegistry = LIModules.imports("TruncateCommentListRegistry") || [];
                                TruncateCommentListRegistry.push(this);
                                if (!LIModules.imports("TruncateCommentListRegistry")) LIModules.exports("TruncateCommentListRegistry", TruncateCommentListRegistry)
                            },
                            _unRegisterInstance: function() {
                                var controlInstance = findControlByElement ? findControlByElement(this._$el, TruncateCommentListRegistry) : null;
                                TruncateCommentListRegistry = LIModules.imports("TruncateCommentListRegistry");
                                if (TruncateCommentListRegistry && controlInstance) TruncateCommentListRegistry = _.without(TruncateCommentListRegistry, controlInstance)
                            },
                            _handleClickEvent: function(event) {
                                var $target = $(event.target),
                                    $comment = $target.closest(this._config.commentContainerSelector);
                                event.preventDefault();
                                this.toggleCommentTruncation($comment)
                            },
                            _initSubcontrols: function() {
                                this.addSubcontrols(this._$el.find(this._config.commentContainerSelector))
                            },
                            addSubcontrols: function(nodes) {
                                var $nodes = $(nodes),
                                    that = this;
                                $nodes.each(function() {
                                    that.addSubcontrol(this)
                                })
                            },
                            addSubcontrol: function(el) {
                                var $el = $(el),
                                    id = $el.attr("id");
                                if (!id) {
                                    id = DATE_SEED++;
                                    $el.attr("id", id)
                                }
                                this._controls[id] = new TruncateComment($el, this._config)
                            },
                            toggleCommentTruncation: function(el) {
                                var $el = $(el),
                                    id = $el.attr("id");
                                if (id && !_.isUndefined(this._controls[id])) this._controls[id].toggleCommentTruncation()
                            }
                        }
                    });
                    LIModules.exports("TruncateCommentList", TruncateCommentList)
                })(window.LIModules);;
                if (typeof LI.TruncateCommentList !== "undefined") {
                    module.setExports(LI.TruncateCommentList);
                }
            });

            Inject.INTERNAL.executor.exec50.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/megaphone/TruncateCommentList", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateCommentList.js");
        try {
            Inject.INTERNAL.executor.exec50.innerFn.call(Inject.INTERNAL.executor.exec50.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec50.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Fmegaphone%2FTruncateCommentList.js

#48 JavaScript::Eval (size: 27560, repeated: 1)

Inject.INTERNAL.executor.exec51.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec51.innerFn = function() {
            // id: js/util/typeahead/DataSource uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2Ftypeahead%2FDataSource.js
            var module = Inject.INTERNAL.executor.exec51.module,
                require = Inject.INTERNAL.executor.exec51.require,
                define = Inject.INTERNAL.executor.exec51.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            LI.define("DataSource");
            LI.define("DataSource.Factory");
            LI.DataSource.Factory = {
                createSource: function(textField, source) {
                    var typeaheadSource = null,
                        sourceType = "";
                    if (typeof source === "string") {
                        sourceType = source;
                        if (LI.DataSource.Sources.hasOwnProperty(sourceType)) typeaheadSource = LI.DataSource.Sources[sourceType].create(textField)
                    } else if (source.hasOwnProperty("create") && typeof source.create === "function") typeaheadSource = source.create(textField);
                    return typeaheadSource
                }
            };
            LI.define("DataSource.RegexHelper");
            LI.DataSource.RegexHelper = {
                esc: function(string) {
                    return (string + "").replace(/[\-#$\^*()+\[\]{}|\\,.?\s]/g, "\\$\x26")
                }
            };
            LI.define("DataSource.Filters");
            LI.DataSource.Filters = {
                startsWithMatch: function(query, testString) {
                    if (!query) return true;
                    return testString.toLowerCase().indexOf(query) === 0
                },
                subwordAnyMatch: function(query, testString) {
                    testString = LI.htmlUnencode ? LI.htmlUnencode(testString) : testString;
                    var i, j, rWhiteSpace = /\s+/,
                        queryList = query.toLowerCase().split(rWhiteSpace),
                        numQueries = queryList.length,
                        testStringList = testString.toLowerCase().split(rWhiteSpace),
                        testStringLen = testStringList.length;
                    for (i = 0; i < numQueries; i++) for (j = 0; j < testStringLen; j++) if (testStringList[j].indexOf(queryList[i]) === 0) return true;
                    return false
                },
                subwordAllMatch: function(query, testString) {
                    testString = LI.htmlUnencode ? LI.htmlUnencode(testString) : testString;
                    var i, j, rWhiteSpace = /\s+/,
                        queryList = query.toLowerCase().split(rWhiteSpace),
                        numQueries = queryList.length,
                        testStringList = testString.toLowerCase().split(rWhiteSpace),
                        testStringLen = testStringList.length,
                        queryMatchCount = 0;
                    for (i = 0; i < numQueries; i++) for (j = 0; j < testStringLen; j++) if (testStringList[j].indexOf(queryList[i]) === 0) {
                        queryMatchCount += 1;
                        break
                    }
                    if (queryMatchCount === numQueries) return true;
                    else return false
                },
                phraseMatch: function(query, testString) {
                    return testString.toLowerCase().indexOf(query) > -1
                }
            };
            LI.DataSource.clientSideFilterFactory = function(filter, highlighting, dedupe) {
                var defaultFilterConfig = "subwordAllMatch",
                    config = {
                        filter: filter || defaultFilterConfig,
                        highlighting: highlighting === false ? false : true,
                        dedupe: dedupe || false
                    };
                return function(sQuery, oFullResponse, oParsedResponse, oCallback) {
                    var idList = [];
                    if (oCallback && oCallback.argument && oCallback.argument.query) sQuery = oCallback.argument.query;
                    if (sQuery && sQuery !== "") {
                        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);
                        var widget = oCallback.scope,
                            oDS = this,
                            allResults = oParsedResponse.results,
                            filteredResults = [],
                            nMax = widget.maxResultsDisplayed,
                            oResult, sResult, key, i, len, filterMatchMethod;
                        for (i = 0, len = allResults.length; i < len; i++) {
                            oResult = allResults[i];
                            sResult = null;
                            if (YAHOO.lang.isString(oResult)) sResult = oResult;
                            else if (YAHOO.lang.isArray(oResult)) sResult = oResult[0];
                            else if (this.responseSchema.fields) {
                                key = this.responseSchema.fields[0].key || this.responseSchema.fields[0];
                                sResult = oResult[key]
                            } else if (this.key) sResult = oResult[this.key];
                            if (YAHOO.lang.isString(sResult)) {
                                if (LI.DataSource.Filters.hasOwnProperty(config.filter)) filterMatchMethod = LI.DataSource.Filters[config.filter];
                                else filterMatchMethod = LI.Datasource.Filters[defaultFilterConfig];
                                if (filterMatchMethod(decodeURIComponent(sQuery), sResult)) {
                                    if (config.highlighting) {
                                        sResult = LI.DataSource.Highlighter.highlight(sResult, decodeURIComponent(sQuery).split(/\s+/));
                                        if (YAHOO.lang.isString(oResult)) oResult = sResult;
                                        else if (YAHOO.lang.isArray(oResult)) oResult[0] = sResult;
                                        else if (this.responseSchema.fields) {
                                            key = this.responseSchema.fields[0].key || this.responseSchema.fields[0];
                                            oResult[key] = sResult
                                        } else if (this.key) oResult[this.key] = sResult
                                    }
                                    if (config.dedupe) if (idList.indexOf(oResult.id) > -1) continue;
                                    else idList.push(oResult.id);
                                    filteredResults.push(oResult)
                                }
                            }
                            if (len > nMax && filteredResults.length === nMax) break
                        }
                        oParsedResponse.results = filteredResults
                    }
                    return oParsedResponse
                }
            };
            LI.define("DataSource.Highlighter");
            LI.DataSource.Highlighter = {
                _REGEX: "(^|\\s)" + "(\x26[^;\\s]*)?" + "(%needles)",
                _TEMPLATE: '\x3cstrong class\x3d"ta-highlight"\x3e{s}\x3c/strong\x3e',
                _REPLACER: function(match, p0, p1, p2) {
                    return p1 && !/\s/.test(p2) ? match : LI.DataSource.Highlighter._TEMPLATE.replace(/\{s\}/g, p0 + p2)
                },
                highlight: function(haystack, needles, options) {
                    var validNeedles = [],
                        esc, i, len, needle, regex, replacer;
                    if (!options) options = {};
                    regex = LI.DataSource.Highlighter._REGEX;
                    replacer = options.replacer || LI.DataSource.Highlighter._REPLACER;
                    needles = YAHOO.lang.isArray(needles) ? needles : [needles];
                    for (i = 0, len = needles.length; i < len; ++i) {
                        needle = needles[i];
                        needle = LI.htmlEncode ? LI.htmlEncode(needle) : needle;
                        if (needle) validNeedles.push(LI.DataSource.RegexHelper.esc(needle))
                    }
                    if (!validNeedles.length) return haystack;
                    return haystack.replace(new RegExp(regex.replace("%needles", validNeedles.join("|")), options.caseSensitive ? "g" : "gi"), replacer)
                }
            };
            LI.define("DataSource.MultiSourceHelper");
            LI.DataSource.MultiSourceHelper = {
                filterAndSortBeforeCallback: function(sQuery, oFullResponse, oParsedResponse, oCallback) {
                    if (oCallback && oCallback.argument && oCallback.argument.query) sQuery = oCallback.argument.query;
                    if (sQuery && sQuery !== "") {
                        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);
                        if (oCallback && oCallback.argument && oCallback.argument.skipFilterAndSort) return oParsedResponse;
                        var widget = oCallback.scope,
                            oDS = this,
                            allResults = oParsedResponse.results,
                            filteredResults = [],
                            frequency = {},
                            singleSourceMaxRequested = widget.maxResultsDisplayed || 30,
                            multiSourceMaxRequested = widget.maxResultsPerSource || 5,
                            maxResultsForAllSources = null,
                            maxResultsBySource = {},
                            resultsOrder = [],
                            categoryIndex = 0,
                            itemInCategoryIndex = 0,
                            itemIndex = 0,
                            i, _numSources, resultLength, firstSourceIndex, secondSourceIndex;
                        if (typeof multiSourceMaxRequested === "number") maxResultsForAllSources = multiSourceMaxRequested;
                        else for (i = 0, _numSources = multiSourceMaxRequested.length; i < _numSources; i++) {
                            maxResultsBySource[multiSourceMaxRequested[i].sourceID] = multiSourceMaxRequested[i].max;
                            resultsOrder.push(multiSourceMaxRequested[i].sourceID)
                        }
                        for (i = 0, resultLength = allResults.length; i < resultLength; i++) {
                            if (allResults[i].type === "category") continue;
                            if (!("sourceID" in allResults[i])) {
                                filteredResults.push(allResults[i]);
                                continue
                            }
                            if (allResults[i].sourceID in frequency) frequency[allResults[i].sourceID] += 1;
                            else {
                                frequency[allResults[i].sourceID] = 1;
                                filteredResults.push({
                                    type: "category",
                                    displayName: allResults[i].sourceID,
                                    sourceID: allResults[i].sourceID,
                                    rank: allResults[i].rank || "0"
                                })
                            }
                            if (frequency[allResults[i].sourceID] <= (maxResultsForAllSources ? maxResultsForAllSources : maxResultsBySource[allResults[i].sourceID])) {
                                allResults[i].type = "item";
                                allResults[i]._index = i;
                                filteredResults.push(allResults[i])
                            }
                        }
                        allResults = filteredResults;
                        if (resultsOrder && resultsOrder.length > 0) allResults.sort(function(a, b) {
                            firstSourceIndex = resultsOrder.indexOf(a.sourceID);
                            secondSourceIndex = resultsOrder.indexOf(b.sourceID);
                            if (firstSourceIndex === -1 && secondSourceIndex === -1) return 0;
                            if (firstSourceIndex === -1) return 1;
                            if (firstSourceIndex === -1) return -1;
                            if (firstSourceIndex - secondSourceIndex !== 0) return firstSourceIndex - secondSourceIndex;
                            if (a.type !== "category" && b.type !== "category") return typeof a._index === "number" && typeof b._index === "number" ? a._index - b._index : 0;
                            if (a.type === "category") return -1;
                            if (b.type === "category") return 1;
                            return 0
                        });
                        for (i = 0, resultLength = allResults.length; i < resultLength; i++) if (allResults[i].type === "category") {
                            categoryIndex++;
                            itemInCategoryIndex = 0
                        } else if (allResults[i].type === "item") {
                            itemIndex++;
                            itemInCategoryIndex++;
                            allResults[i].categoryIndex = categoryIndex;
                            allResults[i].itemIndex = itemIndex;
                            allResults[i].itemInCategoryIndex = itemInCategoryIndex
                        }
                        widget.maxResultsDisplayed = Math.max(widget.maxResultsDisplayed, allResults.length);
                        oParsedResponse.results = allResults
                    }
                    return oParsedResponse
                },
                addCategoriesBeforeCallback: function(sQuery, oFullResponse, oParsedResponse, oCallback) {
                    var categoryIndex = 0,
                        itemInCategoryIndex = 0,
                        itemIndex = 0,
                        prevSourceID = "",
                        i, allResults, resultLength;
                    if (oCallback && oCallback.argument && oCallback.argument.query) sQuery = oCallback.argument.query;
                    if (sQuery && sQuery !== "") {
                        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);
                        if (oCallback && oCallback.argument && oCallback.argument.skipFilterAndSort) return oParsedResponse;
                        allResults = oParsedResponse.results;
                        resultLength = allResults.length;
                        i = 0;
                        while (resultLength--) {
                            if (allResults[i].type === "category") continue;
                            if (allResults[i].sourceID === prevSourceID) {
                                allResults[i].type = "item";
                                allResults[i]._index = i
                            } else {
                                allResults.splice(i, 0, {
                                    type: "category",
                                    displayName: allResults[i].sourceID,
                                    sourceID: allResults[i].sourceID,
                                    rank: allResults[i].rank || "0"
                                });
                                resultLength++
                            }
                            prevSourceID = allResults[i].sourceID;
                            i++
                        }
                        for (i = 0, resultLength = allResults.length; i < resultLength; i++) if (allResults[i].type === "category") {
                            categoryIndex++;
                            itemInCategoryIndex = 0
                        } else if (allResults[i].type === "item") {
                            itemIndex++;
                            itemInCategoryIndex++;
                            allResults[i].categoryIndex = categoryIndex;
                            allResults[i].itemIndex = itemIndex;
                            allResults[i].itemInCategoryIndex = itemInCategoryIndex
                        }
                        oParsedResponse.results = allResults
                    }
                    return oParsedResponse
                },
                flattenResponseBeforeParseData: function(sQuery, oFullResponse, oCallback) {
                    var flattenedResponse = {},
                        resultsList = [],
                        metaObject = {},
                        META_SOURCE_NAME = "meta",
                        i, j, len, ithSource, ithSourceResultItem;
                    for (i in oFullResponse) if (oFullResponse.hasOwnProperty(i)) if (i === META_SOURCE_NAME) metaObject = oFullResponse[i];
                    else {
                        ithSource = oFullResponse[i];
                        if (ithSource.resultList) for (j = 0, len = ithSource.resultList.length; j < len; j++) {
                            ithSourceResultItem = ithSource.resultList[j];
                            if (ithSourceResultItem.hasOwnProperty("sourceID"));
                            else ithSourceResultItem.sourceID = i;
                            resultsList.push(ithSourceResultItem)
                        }
                    }
                    flattenedResponse.resultList = resultsList;
                    flattenedResponse[META_SOURCE_NAME] = metaObject;
                    return flattenedResponse
                }
            };
            LI.define("DataSource.Helper");
            LI.DataSource.Helper = {
                defaultXHRConfig: {
                    responseType: YAHOO.util.DataSourceBase.TYPE_JSON,
                    responseSchema: {
                        resultsList: "resultList",
                        fields: ["headLine", "displayName", "subLine", "imageUrl", "id", "url"],
                        metaFields: {}
                    },
                    connXhrMode: "ignoreStaleResponses",
                    maxCacheEntries: 100
                },
                defaultLocalConfig: {
                    responseType: YAHOO.util.DataSourceBase.TYPE_JSON,
                    responseSchema: {
                        resultsList: "resultList",
                        fields: ["headLine", "displayName", "subLine", "imageUrl", "id", "url"],
                        metaFields: {}
                    },
                    maxCacheEntries: 100
                },
                createXHRDataSource: function(liveData, config) {
                    return new YAHOO.util.XHRDataSource(liveData, config)
                },
                createLocalDataSource: function(liveData, config) {
                    config.doBeforeCallback = config.doBeforeCallback || LI.DataSource.clientSideFilterFactory();
                    return new YAHOO.util.LocalDataSource(liveData, config)
                },
                createLocalXHRDataSource: function(textField, liveData, config, defaultData) {
                    config.doBeforeCallback = config.doBeforeCallback || LI.DataSource.clientSideFilterFactory();
                    defaultData = defaultData || {
                        "resultList": []
                    };
                    var url = liveData,
                        ds = new YAHOO.util.LocalDataSource(defaultData, config),
                        xhrStarted = false,
                        json;

                    function requestData() {
                        YEvent.removeListener(textField, "focus", requestData);
                        if (xhrStarted === true) return;
                        xhrStarted = true;
                        YAHOO.util.Connect.asyncRequest("GET", url, {
                            success: function(xhr) {
                                try {
                                    json = YJson.parse(xhr.responseText);
                                    ds.liveData = json
                                } catch (e) {}
                            }
                        })
                    }
                    if (YEvent.DOMReady) requestData();
                    else YEvent.on(textField, "focus", requestData, this, true);
                    return ds
                },
                createFederatorXHRDataSource: function(liveData, config, categoryI18nMap) {
                    if (typeof config.scriptQueryAppend !== "string") config.scriptQueryAppend = "types\x3d";
                    config.doBeforeParseData = config.doBeforeParseData || LI.DataSource.MultiSourceHelper.flattenResponseBeforeParseData;
                    config.doBeforeCallback = config.doBeforeCallback || LI.DataSource.MultiSourceHelper.filterAndSortBeforeCallback;
                    config.categoryI18nMap = categoryI18nMap || null;
                    return new YAHOO.util.XHRDataSource(liveData, config)
                },
                createAggregatedDataSource: function(sources, config, categoryI18nMap) {
                    config.doBeforeParseData = config.doBeforeParseData || LI.DataSource.MultiSourceHelper.flattenResponseBeforeParseData;
                    config.doBeforeCallback = config.doBeforeCallback || LI.DataSource.MultiSourceHelper.filterAndSortBeforeCallback;
                    config.categoryI18nMap = categoryI18nMap || null;
                    return new LI.DataSourceAggregator2(sources, config)
                }
            };
            LI.define("DataSource.Sources");
            LI.DataSource.Sources = {
                TYPE_COMPANY: {
                    liveData: "/ta/company",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.COMPANY) ? this.liveData : LI.TypeaheadDataSourceUrls.COMPANY;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_INDUSTRY: {
                    liveData: "/ta/industry",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultLocalConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.INDUSTRY) ? this.liveData : LI.TypeaheadDataSourceUrls.INDUSTRY;
                        return LI.DataSource.Helper.createLocalXHRDataSource(textField, liveData, this.config)
                    }
                },
                TYPE_REGION: {
                    liveData: "/ta/region",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.REGION) ? this.liveData : LI.TypeaheadDataSourceUrls.REGION;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_GROUP: {
                    liveData: "/ta/group",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.GROUP) ? this.liveData : LI.TypeaheadDataSourceUrls.GROUP;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_JOB_TITLE: {
                    liveData: "/ta/titleV2",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.JOB_TITLE) ? this.liveData : LI.TypeaheadDataSourceUrls.JOB_TITLE;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_JOB_FUNCTION: {
                    liveData: "/ta/jobfunc",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultLocalConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.JOB_FUNCTION) ? this.liveData : LI.TypeaheadDataSourceUrls.JOB_FUNCTION;
                        return LI.DataSource.Helper.createLocalXHRDataSource(textField, liveData, this.config)
                    }
                },
                TYPE_SKILL: {
                    liveData: "/ta/skill",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.SKILL) ? this.liveData : LI.TypeaheadDataSourceUrls.SKILL;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_LANGUAGE: {
                    liveData: "/ta/language",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultLocalConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.LANGUAGE) ? this.liveData : LI.TypeaheadDataSourceUrls.LANGUAGE;
                        return LI.DataSource.Helper.createLocalXHRDataSource(textField, liveData, this.config)
                    }
                },
                TYPE_SCHOOL: {
                    liveData: "/ta/school",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.SCHOOL) ? this.liveData : LI.TypeaheadDataSourceUrls.SCHOOL;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_DEGREE: {
                    liveData: "/ta/degree",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultLocalConfig, {
                        doBeforeCallback: LI.DataSource.clientSideFilterFactory(null, null, true)
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.DEGREE) ? this.liveData : LI.TypeaheadDataSourceUrls.DEGREE;
                        return LI.DataSource.Helper.createLocalXHRDataSource(textField, liveData, this.config)
                    }
                },
                TYPE_FIELD_OF_STUDY: {
                    liveData: "/ta/fieldofstudy",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FIELD_OF_STUDY) ? this.liveData : LI.TypeaheadDataSourceUrls.FIELD_OF_STUDY;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_SCHOOLS_AND_DEGREES_AND_FIELDS_OF_STUDY: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dfieldofstudy,school,degree",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(liveData, this.config, {
                            fieldofstudy: LI.i18n.get("typeahead2-search-fields-of-study"),
                            school: LI.i18n.get("typeahead2-search-schools"),
                            degree: LI.i18n.get("typeahead2-search-degrees")
                        })
                    }
                },
                TYPE_MY_NETWORK: {
                    liveData: "/ta/mynetwork",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.MY_NETWORK) ? this.liveData : LI.TypeaheadDataSourceUrls.MY_NETWORK;
                        return LI.DataSource.Helper.createXHRDataSource(this.liveData, this.config)
                    }
                },
                TYPE_ALL_FIRST_DEGREE_CONNECTIONS: {
                    liveData: "/ta/my1stnetwork",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FIRST_DEGREE_MY_NETWORK) ? this.liveData : LI.TypeaheadDataSourceUrls.FIRST_DEGREE_MY_NETWORK;
                        return LI.DataSource.Helper.createXHRDataSource(liveData, this.config)
                    }
                },
                TYPE_COMPANIES_AND_FIRST_DEGREE_CONNECTIONS: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dmy1stnetwork,company",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            my1stnetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies")
                        })
                    }
                },
                TYPE_COMPANIES_AND_FIRST_DEGREE_CONNECTIONS_AND_SCHOOLS: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dmy1stnetwork,company,school",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            my1stnetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies"),
                            school: LI.i18n.get("typeahead2-search-schools")
                        })
                    }
                },
                TYPE_COMPANIES_AND_NETWORK: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dmynetwork,company",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            mynetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies")
                        })
                    }
                },
                TYPE_COMPANIES_AND_NETWORK_AND_SCHOOLS: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dmynetwork,company,school",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            mynetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies"),
                            school: LI.i18n.get("typeahead2-search-school")
                        })
                    }
                },
                TYPE_GROUP_MEMBERS_AND_COMPANIES: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dgroupmembers,company",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            groupmembers: LI.i18n.get("typeahead2-search-group-members"),
                            company: LI.i18n.get("typeahead2-search-companies")
                        })
                    }
                },
                TYPE_GROUP_MEMBERS: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dgroupmembers",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            groupmembers: LI.i18n.get("typeahead2-search-group-members")
                        })
                    }
                },
                TYPE_GROUP_MEMBERS_AND_NETWORK: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dgroupmembers,my1stnetwork",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            groupmembers: LI.i18n.get("typeahead2-search-group-members"),
                            my1stnetwork: LI.i18n.get("typeahead2-search-connections")
                        })
                    }
                },
                TYPE_DISCUSSION_PARTICIPANTS: {
                    liveData: "/ta/discussionparticipants",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultLocalConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.DISCUSSION_PARTICIPANTS) ? this.liveData : LI.TypeaheadDataSourceUrls.DISCUSSION_PARTICIPANTS;
                        return LI.DataSource.Helper.createLocalXHRDataSource(textField, liveData, this.config)
                    }
                },
                TYPE_DISCUSSION_PARTICIPANTS_COMPANIES_FIRST_DEGREE_CONNECTIONS: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3ddiscussionparticipants,my1stnetwork,company",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            my1stnetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies"),
                            discussionparticipants: LI.i18n.get("typeahead2-search-discussion-participants")
                        })
                    }
                },
                TYPE_MY_GROUPS: {
                    liveData: "/typeahead/mygroup",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {}),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.MY_GROUPS) ? this.liveData : LI.TypeaheadDataSourceUrls.MY_GROUPS;
                        return LI.DataSource.Helper.createXHRDataSource(this.liveData, this.config)
                    }
                },
                TYPE_UNIVERSAL_SEARCH: {
                    liveData: "/ta/federator",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dmynetwork,company,group,sitefeature,skill",
                        responseSchema: {
                            resultsList: "resultList",
                            metaFields: {
                                tarId: "meta.tarId"
                            },
                            fields: ["headLine", "displayName", "subLine", "url", "sourceID", "imageUrl", "id", "misc"]
                        }
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.FEDERATOR) ? this.liveData : LI.TypeaheadDataSourceUrls.FEDERATOR;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            mynetwork: LI.i18n.get("typeahead2-search-connections"),
                            company: LI.i18n.get("typeahead2-search-companies"),
                            group: LI.i18n.get("typeahead2-search-groups"),
                            sitefeature: LI.i18n.get("typeahead2-search-features"),
                            skill: LI.i18n.get("typeahead2-search-skills")
                        })
                    }
                },
                TYPE_CAP_PROSPECTS_PROJECTS_JOBS: {
                    liveData: "/cap/lookup/capTaAjax",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dJob,Project,Prospect",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["displayName", "id", "headLine", "subLine", "imageUrl", "sourceID"]
                        },
                        maxCacheEntries: 10
                    }),
                    create: function(textField) {
                        var liveData = YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls) || YAHOO.lang.isUndefined(LI.TypeaheadDataSourceUrls.CAP_PROSPECTS_PROJECTS_JOBS) ? this.liveData : LI.TypeaheadDataSourceUrls.CAP_PROSPECTS_PROJECTS_JOBS;
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            Prospect: LI.i18n.get("typeahead2-cap-prospects"),
                            Job: LI.i18n.get("typeahead2-cap-jobs"),
                            Project: LI.i18n.get("typeahead2-cap-projects")
                        })
                    }
                },
                TYPE_CAP_PROJECTS: {
                    liveData: "/cap/lookup/capTaProjectsAjax",
                    config: YAHOO.lang.merge(LI.DataSource.Helper.defaultXHRConfig, {
                        scriptQueryAppend: "types\x3dProject",
                        responseSchema: {
                            resultsList: "resultList",
                            fields: ["displayName", "id", "headLine", "subLine", "imageUrl", "sourceID"]
                        },
                        maxCacheEntries: 10
                    }),
                    create: function(textField) {
                        return LI.DataSource.Helper.createFederatorXHRDataSource(this.liveData, this.config, {
                            Project: LI.i18n.get("typeahead2-cap-projects")
                        })
                    }
                }
            };

            Inject.INTERNAL.executor.exec51.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/util/typeahead/DataSource", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2Ftypeahead%2FDataSource.js");
        try {
            Inject.INTERNAL.executor.exec51.innerFn.call(Inject.INTERNAL.executor.exec51.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec51.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2Ftypeahead%2FDataSource.js

#49 JavaScript::Eval (size: 2454, repeated: 1)

Inject.INTERNAL.executor.exec52.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec52.innerFn = function() {
            // id: js/util/InputChangeObserver uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FInputChangeObserver.js
            var module = Inject.INTERNAL.executor.exec52.module,
                require = Inject.INTERNAL.executor.exec52.require,
                define = Inject.INTERNAL.executor.exec52.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var CHANGE = "inputChange";

                function InputChangeObserver(el) {
                    var self = this,
                        ua = YAHOO.env.ua,
                        ieVersion = ua.ie,
                        useDelay = ua.webkit || false,
                        isIE9 = false;
                    if (typeof el === "object") this.input = el;
                    else return;
                    this[CHANGE] = new YAHOO.util.CustomEvent(CHANGE);

                    function fireChangeEvent(forceDelay) {
                        if (!forceDelay) forceDelay = false;
                        if (useDelay || forceDelay) setTimeout(transmitChange, 50);
                        else transmitChange()
                    }
                    function transmitChange() {
                        if (el === document.activeElement) self[CHANGE].fire()
                    }
                    if (ieVersion && ieVersion <= 10) {
                        isIE9 = ieVersion === 9;
                        this.input.attachEvent("onpropertychange", function(evt) {
                            if (evt.propertyName.toLowerCase() === "value") fireChangeEvent()
                        });
                        YEvent.on(this.input, "keyup", function(evt) {
                            switch (evt.keyCode) {
                            case 8:
                                if (isIE9) fireChangeEvent();
                                break;
                            case 46:
                                if (isIE9) fireChangeEvent();
                                break;
                            case 35:
                            case 36:
                            case 37:
                            case 38:
                            case 39:
                            case 40:
                                fireChangeEvent();
                                break
                            }
                        });
                        if (isIE9) this.input.attachEvent("oncut", function() {
                            fireChangeEvent(true)
                        }, false)
                    } else YEvent.on(this.input, "input", fireChangeEvent);
                    YEvent.on(this.input, "click", fireChangeEvent)
                }
                LI.InputChangeObserver = InputChangeObserver
            })();

            Inject.INTERNAL.executor.exec52.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/util/InputChangeObserver", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FInputChangeObserver.js");
        try {
            Inject.INTERNAL.executor.exec52.innerFn.call(Inject.INTERNAL.executor.exec52.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec52.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FInputChangeObserver.js

#50 JavaScript::Eval (size: 4353, repeated: 1)

Inject.INTERNAL.executor.exec53.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec53.innerFn = function() {
            // id: js/util/TokenMatcher uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenMatcher.js
            var module = Inject.INTERNAL.executor.exec53.module,
                require = Inject.INTERNAL.executor.exec53.require,
                define = Inject.INTERNAL.executor.exec53.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var CHANGE = "inputChange",
                    EMPTY = "",
                    HIDE = "hide",
                    MATCH = "match",
                    YLang = YAHOO.lang;

                function TokenMatcher(inputObserver, configTriggers) {
                    var input = inputObserver.input,
                        self = this,
                        triggerKeys = [],
                        triggerKeysLen, upperCaseChars = "A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE",
                        noMatchChars = "^\\s\\.\\,",
                        tripleUpperExpression, whiteSpaceChars = "^\\S\\n\\r",
                        upperExpression;
                    if (!configTriggers || !configTriggers.length) return;
                    if ("ADEGH".search(configTriggers) !== -1) {
                        triggerKeys.push({
                            "trigger": "@",
                            "includeInSearch": false,
                            "regExp": new RegExp("(?:(?:(?:[\\s]|^)\\@$)|(?:(?:[\\s]|^)\\@([\\S]+(?:[\\u0020]+[^\\s\\@]+)?)))", "gim")
                        });
                        noMatchChars += "\\@"
                    }
                    if ("BDFGH".search(configTriggers) !== -1) {
                        triggerKeys.push({
                            "trigger": "+",
                            "includeInSearch": false,
                            "regExp": new RegExp("(?:(?:(?:[\\s]|^)\\+$)|(?:(?:[\\s]|^)\\+([\\S]+(?:[\\u0020]+[^\\s\\+]+)?)))", "gim")
                        });
                        noMatchChars += "\\+"
                    }
                    if ("CEFGH".search(configTriggers) !== -1) {
                        if (configTriggers === "H") {
                            tripleUpperExpression = "(?:(?:[\\s]|^)(?:[" + upperCaseChars + "][" + noMatchChars + "]*)" + "(?:[" + whiteSpaceChars + "])" + "([" + upperCaseChars + "][" + noMatchChars + "]{3,}" + "[" + whiteSpaceChars + "][" + upperCaseChars + "][" + noMatchChars + "]*))";
                            triggerKeys.push({
                                "trigger": "tripleUpper",
                                "includeInSearch": true,
                                "regExp": new RegExp(tripleUpperExpression, "gm")
                            })
                        }
                        upperExpression = "((?:[\\s]|^)[" + upperCaseChars + "](?:" + "(?:[" + noMatchChars + "]{3,}(?:[" + whiteSpaceChars + "]?)(?:[" + noMatchChars + "]+)?)" + "|(?:[" + noMatchChars + "]{1}[" + whiteSpaceChars + "][" + noMatchChars + "]{2,})" + "|(?:[" + noMatchChars + "]{2}[" + whiteSpaceChars + "][" + noMatchChars + "]+)" + "))";
                        triggerKeys.push({
                            "trigger": "upper",
                            "includeInSearch": true,
                            "regExp": new RegExp(upperExpression, "gm")
                        })
                    }
                    triggerKeysLen = triggerKeys.length;
                    this[MATCH] = new YAHOO.util.CustomEvent(MATCH);
                    this[HIDE] = new YAHOO.util.CustomEvent(HIDE);

                    function handleInput() {
                        var caretPosition = getCaretPosition(input),
                            content = input.value.substr(0, caretPosition),
                            curRegExp, curTrigger, hasMatch = false,
                            i, match, matchEnd, matchStart, matchToken, trigger;
                        for (i = 0; i < triggerKeysLen; i++) {
                            curTrigger = triggerKeys[i];
                            curRegExp = curTrigger.regExp;
                            if (content.match(curRegExp)) {
                                curRegExp.lastIndex = 0;
                                match = curRegExp.exec(content);
                                while (match) {
                                    trigger = curTrigger.trigger;
                                    matchToken = YLang.trim(match[1]) || "";
                                    matchStart = trigger === "tripleUpper" ? match.index + (match[0].length - matchToken.length) - 1 : match.index;
                                    matchEnd = matchStart + match[0].length;
                                    if (caretPosition > matchStart && caretPosition <= matchEnd) {
                                        self[MATCH].fire({
                                            match: {
                                                "caretPosition": caretPosition,
                                                "end": matchEnd,
                                                "start": matchStart,
                                                "token": matchToken === "" ? "a" : matchToken,
                                                "trigger": trigger,
                                                "triggerIncluded": curTrigger.includeInSearch
                                            }
                                        });
                                        hasMatch = true;
                                        break
                                    }
                                    match = curRegExp.exec(content)
                                }
                            }
                            if (hasMatch) break
                        }
                        if (!hasMatch) self[HIDE].fire({})
                    }
                    inputObserver[CHANGE].subscribe(handleInput)
                }
                function getCaretPosition(elt) {
                    var position = 0,
                        sel;
                    if (document.selection) {
                        elt.focus();
                        sel = document.selection.createRange();
                        sel.moveStart("character", -elt.value.length);
                        position = sel.text.length
                    } else if (elt.selectionStart >= 0) position = elt.selectionStart;
                    return position
                }
                LI.TokenMatcher = TokenMatcher
            })();

            Inject.INTERNAL.executor.exec53.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/util/TokenMatcher", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenMatcher.js");
        try {
            Inject.INTERNAL.executor.exec53.innerFn.call(Inject.INTERNAL.executor.exec53.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec53.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenMatcher.js

#51 JavaScript::Eval (size: 3068, repeated: 1)

Inject.INTERNAL.executor.exec54.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec54.innerFn = function() {
            // id: js/util/TokenHighlighter uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenHighlighter.js
            var module = Inject.INTERNAL.executor.exec54.module,
                require = Inject.INTERNAL.executor.exec54.require,
                define = Inject.INTERNAL.executor.exec54.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var YL = YAHOO.lang;

                function TokenHighlighter(el, config) {
                    if (YL.isUndefined(el)) return;
                    config = config || {};
                    if (!config.highlightClass || !YL.trim(config.highlightClass)) config.highlightClass = "highlight";
                    if (!config.highlightTag || !YL.trim(config.highlightTag)) config.highlightTag = "span";
                    this.el = el;
                    this.config = config
                }
                TokenHighlighter.prototype = {
                    render: function(userText, tokens) {
                        var tokensLen, i, curStart, curEnd, fullText = [],
                            curObj, previousEnd = 0,
                            EMPTY = "";
                        if (YL.isUndefined(userText) || YL.isUndefined(tokens) || !YL.trim(userText)) {
                            this.el.innerHTML = EMPTY;
                            return
                        }
                        getValidTokens(tokens);
                        tokensLen = tokens.length;
                        if (tokensLen) {
                            tokens.sort(function(token1, token2) {
                                return token1.index - token2.index
                            });
                            for (i = 0; i < tokensLen; i++) {
                                curObj = tokens[i];
                                curStart = curObj.index;
                                curEnd = curStart + curObj.length;
                                if (curStart) fullText.push(LI.htmlEncode(userText.substr(previousEnd, curStart - previousEnd)));
                                fullText.push(["\x3c", LI.htmlEncode(this.config.highlightTag), ' class\x3d"', LI.htmlEncode(this.config.highlightClass), '"\x3e', LI.htmlEncode(curObj.token), "\x3c/", LI.htmlEncode(this.config.highlightTag), "\x3e"].join(EMPTY));
                                if (i === tokensLen - 1) fullText.push(LI.htmlEncode(userText.substr(curEnd)));
                                previousEnd = curEnd
                            }
                            this.el.innerHTML = fullText.join(EMPTY).replace(/\r?\n/gm, "\x26nbsp;\x3cbr /\x3e")
                        } else if ("textContent" in this.el) this.el.textContent = userText;
                        else this.el.innerText = userText
                    }
                };

                function getValidTokens(tokens) {
                    var i, tokensLen, curToken, removeItems = [],
                        removeLen;
                    for (i = 0, tokensLen = tokens.length; i < tokensLen; i++) {
                        curToken = tokens[i];
                        if (curToken.index < 0 || !curToken.length) removeItems.push(i)
                    }
                    removeLen = removeItems.length;
                    if (removeLen) for (i = 0; i < removeLen; i++) tokens.splice(removeItems[i], 1)
                }
                LI.TokenHighlighter = TokenHighlighter
            })();

            Inject.INTERNAL.executor.exec54.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/util/TokenHighlighter", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenHighlighter.js");
        try {
            Inject.INTERNAL.executor.exec54.innerFn.call(Inject.INTERNAL.executor.exec54.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec54.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FTokenHighlighter.js

#52 JavaScript::Eval (size: 23588, repeated: 1)

Inject.INTERNAL.executor.exec55.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec55.innerFn = function() {
            // id: js/util/MentionsDecorator uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FMentionsDecorator.js
            var module = Inject.INTERNAL.executor.exec55.module,
                require = Inject.INTERNAL.executor.exec55.require,
                define = Inject.INTERNAL.executor.exec55.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore", "js/util/typeahead/DataSource", "js/util/InputChangeObserver", "js/util/TokenMatcher", "js/util/TokenHighlighter"], function(_) {
                (function() {
                    var CHANGE = "inputChange",
                        CHARACTER = "character",
                        EMPTY = "",
                        HIDE = "hide",
                        MATCH = "match",
                        HP_SHARE = "hp-share",
                        NUS_DISCUSSION = "nus-discussion",
                        GROUP_DISCUSSION_OPEN = "group-discussion-open",
                        GROUP_DISCUSSION_CLOSED = "group-discussion-closed";
                    LI.MentionsDecorator = function(el, config) {
                        var mentionStrategy = config.mentionStrategy,
                            configTriggers = config.triggers || "A",
                            context = config.context || EMPTY,
                            contextDataSource = EMPTY,
                            debugMode = false,
                            inputCalloutImprCount = config.inputCallout && config.inputCallout.currentImpressionCount || 0,
                            dataInput = Y$(config.mentionsEl)[0],
                            highlighter, highlightInput = Y$(config.highlightEl)[0],
                            i, ieVersion = YAHOO.env.ua.ie,
                            input = Y$(config.mentionsInputEl)[0],
                            inputCalloutConfig, inputObserver, inputPromoCallout, inputPromoContentEl, inputValue = EMPTY,
                            inputValueOld = EMPTY,
                            isInit = false,
                            LIDSource, maximumMentions = config.maximumMentions || 30,
                            mdLog, mentionsContainer, queryTimeout = [],
                            queryTimeoutDuration = config.queryDelay || 250,
                            self = this,
                            showInputCallout = config.inputCallout && config.inputCallout.enabled || false,
                            tokenizer, typeahead = config.typeahead,
                            typeaheadInput = config.typeaheadEl && Y$(config.typeaheadEl)[0],
                            useAdjustOffset = true,
                            dedupeConnections = config.dedupeConnections || false,
                            urlAppend = config.urlAppend || EMPTY,
                            YLang = YAHOO.lang,
                            isFromCap = config.isFromCap || false;
                        if (LI.MentionsDecorator.debugMode === undefined) LI.MentionsDecorator.debugMode = window.location.href.indexOf("mentions_debug\x3dtrue") !== -1;
                        debugMode = LI.MentionsDecorator.debugMode;
                        self.mentionEntities = [];
                        self.currentMatch = {};
                        self.previousToken = "";
                        self.previousEditedMentionTokens = null;
                        self.currentMentionTokens = null;
                        self.sendSecondWord = self.hasLastResults = self.usedSecondToken = self.sentSecondQuery = self.dependenciesLoaded = false;
                        self.upperRegexObj = /^[A-Z\u00C0-\u00D6\u00D8-\u00DE]$/;
                        mdLog = function(logStr) {
                            if (debugMode) {
                                var log = window.console && window.console.log ? window.console.log : window.alert;
                                log(self);
                                log(logStr)
                            }
                        };

                        function checkIsViewerNonMember() {
                            return !YDom.hasClass(document.body, "member")
                        }
                        function checkInfluencer() {
                            function checkInfluencerHandler(response) {
                                var isInfluencer = false,
                                    result;
                                try {
                                    result = response.responseText.influencer_entitlement.result;
                                    isInfluencer = result.isInfluencer
                                } catch (err) {
                                    mdLog("influencer check failed")
                                }
                                LI.MentionsDecorator.isInfluencer = isInfluencer
                            }
                            if (!LI.MentionsDecorator.isInfluencer && !LI.MentionsDecorator.influencerCheckPerformed) {
                                LI.MentionsDecorator.influencerCheckPerformed = true;
                                if (checkIsViewerNonMember()) LI.MentionsDecorator.isInfluencer = false;
                                else if (LI.MentionsIsInfluencerUrl && LI.MentionsIsInfluencerUrl.length) LI.asyncRequest("POST", LI.MentionsIsInfluencerUrl, {
                                    failure: checkInfluencerHandler,
                                    success: checkInfluencerHandler
                                }, null);
                                else {
                                    mdLog("failed to get influencer check url");
                                    LI.MentionsDecorator.isInfluencer = false
                                }
                            }
                        }
                        if (!isFromCap && (context === NUS_DISCUSSION || context === HP_SHARE)) checkInfluencer();

                        function handleInputFocus() {
                            getDependencies();
                            setContainerFocusClass(true);
                            if (inputPromoCallout) inputPromoCallout.close()
                        }
                        function setContainerFocusClass(showClass) {
                            if (!mentionsContainer) mentionsContainer = YDom.getAncestorByClassName(input, "mentions-container");
                            LI.toggleClass(mentionsContainer, "hasFocus", showClass)
                        }
                        function getDependencies() {
                            var dataSourceDependenciesLoaded = false,
                                mentionsDependenciesLoaded = false,
                                mentionsUnderscoreLoaded = !! window._;
                            if (!mentionsUnderscoreLoaded) YAHOO.util.Get.script(LI.MentionsUnderscore.scripts[0], {
                                onSuccess: function() {
                                    mentionsUnderscoreLoaded = true;
                                    checkForLoaded()
                                },
                                onFailure: function() {
                                    mdLog("LI.MentionsUnderscore failed")
                                }
                            });
                            if (!self.dependenciesLoaded) {
                                if (!mentionsDependenciesLoaded) YAHOO.util.Get.script(LI.MentionsDependencies.scripts[0], {
                                    onSuccess: function() {
                                        mentionsDependenciesLoaded = true;
                                        checkForLoaded()
                                    },
                                    onFailure: function() {
                                        mdLog("LI.MentionsDependencies failed")
                                    }
                                });
                                if (context && !LI.DataSource && !dataSourceDependenciesLoaded) YAHOO.util.Get.script(LI.MentionsDataSourceDependencies.scripts[0], {
                                    onSuccess: function() {
                                        dataSourceDependenciesLoaded = true;
                                        checkForLoaded()
                                    },
                                    onFailure: function() {
                                        mdLog("LI.MentionsDataSourceDependencies failed")
                                    }
                                });
                                else dataSourceDependenciesLoaded = true
                            }
                            function checkForLoaded() {
                                if (mentionsDependenciesLoaded && dataSourceDependenciesLoaded && mentionsUnderscoreLoaded) {
                                    LIDSource = LI.DataSource;
                                    self.dependenciesLoaded = true;
                                    self.typeahead = config.typeahead || LI.Controls.getControl(typeaheadInput, "LI.Typeahead2");
                                    if (context) buildDataSource();
                                    else init()
                                }
                            }
                        }
                        function buildDataSource() {
                            var dsConfig = [],
                                dsConfigNames = [],
                                configLen, dsConfigSources, i18nStrings, i18nConnections = LI.i18n.get("typeahead2-search-connections"),
                                random = "\x26query\x3d" + (new Date).getTime();
                            i18nStrings = {
                                discussionparticipants: LI.i18n.get("typeahead2-search-discussion-participants"),
                                company: LI.i18n.get("typeahead2-search-companies"),
                                school: LI.i18n.get("typeahead2-search-schools"),
                                mynetwork: i18nConnections,
                                my1stnetwork: i18nConnections
                            };
                            switch (context) {
                            case NUS_DISCUSSION:
                                if (LI.MentionsDecorator.isInfluencer) dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_COMPANIES_AND_NETWORK_AND_SCHOOLS, {});
                                else dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_COMPANIES_AND_FIRST_DEGREE_CONNECTIONS_AND_SCHOOLS, {});
                                dsConfigNames[0] = "connectionsAndCompany";
                                dsConfig[1] = YLang.merge(LIDSource.Sources.TYPE_DISCUSSION_PARTICIPANTS, {});
                                dsConfig[1].liveData += "?" + (urlAppend.indexOf("\x26") === 0 ? urlAppend.substr(1) : urlAppend) + random;
                                dsConfigNames[1] = "discussionparticipants";
                                break;
                            case HP_SHARE:
                                if (LI.MentionsDecorator.isInfluencer || mentionStrategy === "X" || mentionStrategy === "Z") dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_COMPANIES_AND_NETWORK_AND_SCHOOLS, {});
                                else dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_COMPANIES_AND_FIRST_DEGREE_CONNECTIONS_AND_SCHOOLS, {});
                                break;
                            case GROUP_DISCUSSION_OPEN:
                                dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_GROUP_MEMBERS_AND_NETWORK, {});
                                dsConfig[0].config.scriptQueryAppend += urlAppend;
                                break;
                            case GROUP_DISCUSSION_CLOSED:
                                dsConfig[0] = YLang.merge(LIDSource.Sources.TYPE_GROUP_MEMBERS, {});
                                dsConfig[0].config.scriptQueryAppend += urlAppend;
                                break
                            }
                            configLen = dsConfig.length;
                            if (configLen > 1) {
                                contextDataSource = {};
                                dsConfigSources = {};
                                for (i = 0; i < configLen; i++) dsConfigSources[dsConfigNames[i]] = dsConfig[i].create(input);
                                contextDataSource.create = function() {
                                    var obj = {};
                                    if (dedupeConnections) obj.doWithSourceSuccessCallback = deDupeDataSources;
                                    return LIDSource.Helper.createAggregatedDataSource(dsConfigSources, obj, i18nStrings)
                                }
                            } else if (configLen === 1) contextDataSource = dsConfig[0];
                            mdLog("contextDataSource: " + contextDataSource);
                            init()
                        }
                        function deDupeDataSources(parsed, results) {
                            mdLog("function call: deDupeDataSources");
                            var i, j, parsedResults = parsed.results,
                                remove = [],
                                resultsList, source;
                            for (source in results) if (source === "discussionparticipants") {
                                j = parsedResults.length;
                                resultsList = results[source].resultList;
                                while (j--) {
                                    i = resultsList.length;
                                    if (parsedResults[j].sourceID === "mynetwork" || parsedResults[j].sourceID === "my1stnetwork") while (i--) if (parsedResults[j].id === resultsList[i].id) remove.push(j)
                                }
                            }
                            remove.sort();
                            i = remove.length;
                            while (i--) parsedResults.splice(remove[i], 1);
                            return {
                                results: parsedResults
                            }
                        }
                        function init() {
                            var inputGhostLabel, inputLabel, ta, bidiEvent;
                            if (!isInit && self.dependenciesLoaded) {
                                queryTimeoutDuration = parseInt(queryTimeoutDuration.toString().replace(/(?:\D*)(\d+)(?:\D*)/gi, "$1"), 10);
                                if (isNaN(queryTimeoutDuration)) queryTimeoutDuration = 250;
                                inputObserver = new LI.InputChangeObserver(input);
                                inputObserver[CHANGE].subscribe(handleUpdates);
                                ta = self.typeahead;
                                if (context) ta.source = contextDataSource;
                                ta.onItemSelect = handleTypeaheadSelection;
                                ta.onDataReturn = handleDataReturn;
                                ta.init();
                                tokenizer = new LI.TokenMatcher(inputObserver, configTriggers);
                                tokenizer[MATCH].subscribe(handleMatch);
                                tokenizer[HIDE].subscribe(handleMatchWithExtra);
                                highlighter = new LI.TokenHighlighter(highlightInput);
                                YEvent.on(input, "blur", handleBlur);
                                bidiEvent = input.getAttribute("data-bidi-event");
                                if (bidiEvent) $(input).on(bidiEvent, handleBidiInputChanges);
                                isInit = true
                            }
                        }
                        function handleDataReturn(eventName, arrArgs, yuiDataSourceObj) {
                            mdLog("function call: handleDataReturn");
                            var i, len, curMatch = self.currentMatch,
                                curTrigger, isTwoWords, isUpper, autocomplete = arrArgs[0],
                                dataSources = autocomplete.maxResultsPerSource,
                                maxResultsMap = {},
                                results = arrArgs[2],
                                resultsLen, secondWord, secondWordLen, token, query = decodeURIComponent(arrArgs[1]),
                                queryStartsMatch;
                            if (dataSources instanceof Array) {
                                for (i = 0, len = dataSources.length; i < len; i++) maxResultsMap[dataSources[i].sourceID] = dataSources[i].max > 0;
                                for (i = 0, len = results.length; i < len; i++) {
                                    var sourceID = results[i].sourceID;
                                    if (results[i].type === "category" && maxResultsMap.hasOwnProperty(sourceID) && !maxResultsMap[sourceID]) results.splice(i, 1)
                                }
                            }
                            if (configTriggers === "H") {
                                curTrigger = curMatch.trigger;
                                if (curTrigger === "upper") if (!self.sentSecondQuery) {
                                    token = curMatch.token;
                                    resultsLen = results.length;
                                    self.hasLastResults = !! resultsLen;
                                    isTwoWords = token.indexOf(" ") !== -1;
                                    secondWord = isTwoWords ? token.substr(token.indexOf(" ") + 1) : "";
                                    secondWordLen = secondWord.length;
                                    isUpper = isTwoWords ? self.upperRegexObj.test(secondWord.substr(0, 1)) : false;
                                    queryStartsMatch = query === token.substr(0, query.length) || query === secondWord.substr(0, query.length);
                                    if (queryStartsMatch && isTwoWords && isUpper && secondWordLen && (!self.usedSecondToken && !resultsLen || self.usedSecondToken)) {
                                        self.sendSecondWord = true;
                                        if (!resultsLen && secondWordLen >= 4 && query === token && secondWord !== token) {
                                            typeaheadSendQuery();
                                            self.sentSecondQuery = true
                                        }
                                    } else if (!queryStartsMatch && isTwoWords && isUpper) if (secondWordLen <= 3) self.sendSecondWord = false;
                                    else if (secondWordLen >= 4 && !resultsLen) {
                                        self.sendSecondWord = true;
                                        typeaheadSendQuery();
                                        self.sentSecondQuery = true
                                    }
                                } else {
                                    self.sentSecondQuery = false;
                                    self.sendSecondWord = false
                                }
                            }
                        }
                        function handleMatch(type, args) {
                            var match = args[0].match;
                            mdLog("match: " + YJson.stringify(match));
                            if (validateMentionPosition(match) && !isEditingExistingMention()) {
                                clearTimeouts();
                                self.currentMatch = match;
                                queryTimeout.push(window.setTimeout(typeaheadSendQuery, queryTimeoutDuration))
                            }
                        }
                        function isEditingExistingMention() {
                            var previousMentionTokens = self.previousEditedMentionTokens,
                                currentMentionTokens = self.currentMentionTokens,
                                prevLastName, currentLastName;
                            if (previousMentionTokens && currentMentionTokens) {
                                self.previousEditedMentionTokens = null;
                                self.currentMentionTokens = null;
                                if (previousMentionTokens.length === currentMentionTokens.length) {
                                    prevLastName = previousMentionTokens[previousMentionTokens.length - 1];
                                    currentLastName = currentMentionTokens[currentMentionTokens.length - 1];
                                    if (prevLastName.length > currentLastName.length) return true;
                                    if (previousMentionTokens[0].length > currentMentionTokens[0].length) return true
                                }
                            }
                            return false
                        }

                        function typeaheadSendQuery() {
                            var curMatch = self.currentMatch,
                                curTrigger, isTwoWords, isUpper, queryStartsMatch = false,
                                previousToken, secondWord, start, token;
                            if (configTriggers === "H") {
                                curTrigger = curMatch.trigger;
                                if (curTrigger === "upper") {
                                    token = curMatch.token;
                                    isTwoWords = token.indexOf(" ") !== -1;
                                    secondWord = isTwoWords ? token.substr(token.indexOf(" ") + 1) : "";
                                    previousToken = self.previousToken;
                                    isUpper = isTwoWords ? self.upperRegexObj.test(secondWord.substr(0, 1)) : false;
                                    if (previousToken.length) queryStartsMatch = previousToken === secondWord.substr(0, previousToken.length) || previousToken === token.substr(0, previousToken.length);
                                    if (secondWord.length >= 4) if (isTwoWords && isUpper && (self.sendSecondWord || queryStartsMatch && (!self.usedSecondToken && !self.hasLastResults || self.usedSecondToken))) {
                                        start = curMatch.start;
                                        curMatch.token = secondWord;
                                        curMatch.start = start + token.lastIndexOf(" ");
                                        if (start) curMatch.start++;
                                        self.usedSecondToken = true
                                    } else self.usedSecondToken = false
                                }
                                self.previousToken = self.currentMatch.token
                            }
                            mdLog("query: " + self.currentMatch.token);
                            if (context === HP_SHARE) if (LI.MentionsDecorator.isInfluencer || self.currentMatch.trigger === "@" && (mentionStrategy === "X" || mentionStrategy === "Z")) self.typeahead.setSource("TYPE_COMPANIES_AND_NETWORK_AND_SCHOOLS");
                            else self.typeahead.setSource("TYPE_COMPANIES_AND_FIRST_DEGREE_CONNECTIONS_AND_SCHOOLS");
                            self.typeahead.sendQuery(self.currentMatch.token)
                        }
                        function validateMentionPosition(match) {
                            var curStart = match.start,
                                curEnd = match.end,
                                curMention, curMentionStart, curMentionEnd, mentions = self.mentionEntities;
                            i = mentions.length;
                            while (i--) {
                                curMention = mentions[i];
                                curMentionStart = curMention.index - 1;
                                curMentionEnd = curMentionStart + curMention.length;
                                if (curStart >= curMentionStart && curStart < curMentionEnd || curEnd >= curMentionStart && curEnd <= curMentionEnd) return false
                            }
                            return true
                        }
                        function handleMatchWithExtra() {
                            clearTimeouts();
                            typeaheadInput.value = EMPTY;
                            try {
                                self.typeahead.collapseContainer()
                            } catch (err) {}
                        }
                        function handleUpdates() {
                            inputValueOld = inputValue;
                            inputValue = input.value;
                            adjustMentions(inputValueOld)
                        }
                        function handleTypeaheadSelection(type, args) {
                            var curValue = input.value,
                                curMatch = self.currentMatch,
                                displayToken, doubleMatch, firstSpace, firstWord = EMPTY,
                                isolatedMatch, item = args[2],
                                itemType, newValue, start, tmpEnd, tmpStart, tokenLen, triggerIncluded = self.currentMatch.triggerIncluded;
                            itemType = item.sourceID;
                            displayToken = LI.htmlUnencode(item.displayName);
                            tokenLen = displayToken.length;
                            if (item.type !== "category") {
                                start = curMatch.start;
                                mdLog("itemType: " + itemType);
                                switch (itemType) {
                                case "groupmembers":
                                case "my1stnetwork":
                                case "mynetwork":
                                case "discussionparticipants":
                                    itemType = "member";
                                    break
                                }
                                if (start)++start;
                                newValue = [curValue.substr(0, start), displayToken, curValue.substr(self.currentMatch.end)].join(EMPTY);
                                if (start) {
                                    firstSpace = displayToken.indexOf(" ");
                                    if (firstSpace !== -1) {
                                        firstWord = LI.htmlUnencode(displayToken.substr(0, firstSpace));
                                        if (firstWord !== EMPTY) {
                                            tmpStart = start - (firstWord.length + 1);
                                            tmpEnd = start + tokenLen;
                                            isolatedMatch = newValue.substr(tmpStart, tmpEnd).toLowerCase();
                                            doubleMatch = [firstWord, " ", displayToken].join(EMPTY).toLowerCase();
                                            if (doubleMatch === isolatedMatch) if (validateMentionPosition({
                                                "start": tmpStart,
                                                "end": tmpStart + tokenLen
                                            })) {
                                                newValue = [newValue.substr(0, tmpStart), displayToken, newValue.substr(tmpEnd)].join(EMPTY);
                                                start = tmpStart
                                            }
                                        }
                                    }
                                }
                                input.value = newValue;
                                if (self.mentionEntities.length < maximumMentions) {
                                    self.mentionEntities.push({
                                        "id": item.id,
                                        "index": start,
                                        "length": tokenLen,
                                        "type": itemType,
                                        "token": displayToken,
                                        "triggerIncluded": triggerIncluded,
                                        "caretPosition": curMatch.caretPosition
                                    });
                                    sortMentions();
                                    handleUpdates();
                                    updateMentionsInput();
                                    input.focus();
                                    if (start && !triggerIncluded) start++;
                                    setCursorPosition(input, start + tokenLen);
                                    highlighter.render(input.value, self.mentionEntities)
                                }
                            }
                        }
                        function handleBlur() {
                            setContainerFocusClass(false);
                            if (inputPromoCallout) inputPromoCallout.close();
                            typeaheadInput.value = EMPTY;
                            window.setTimeout(function() {
                                self.typeahead.collapseContainer();
                                self.currentMatch = EMPTY
                            }, 250)
                        }
                        function clearTimeouts() {
                            var i = queryTimeout.length;
                            while (i--) window.clearTimeout(queryTimeout[i])
                        }
                        this.clearMentions = function() {
                            self.mentionEntities = [];
                            updateMentionsInput();
                            highlighter.render(EMPTY, [])
                        };

                        function updateMentionsInput() {
                            dataInput.value = YJson.stringify(generateMentions())
                        }
                        function generateMentions() {
                            var curMention, finalMentions = [],
                                mentionsLen = self.mentionEntities.length;
                            for (i = 0; i < mentionsLen; i++) {
                                curMention = self.mentionEntities[i];
                                finalMentions[i] = {
                                    "id": curMention.id,
                                    "index": curMention.index,
                                    "length": curMention.length,
                                    "type": curMention.type
                                }
                            }
                            return finalMentions
                        }
                        function delegateTypeaheadInput(evt) {
                            var finalEvent = evt,
                                isTypeaheadOpen = false,
                                mdKeyCode;
                            if (isInit) {
                                try {
                                    isTypeaheadOpen = self.typeahead.isContainerOpen()
                                } catch (err) {}
                                if (isTypeaheadOpen) {
                                    mdKeyCode = evt.keyCode;
                                    switch (mdKeyCode) {
                                    case 9:
                                    case 13:
                                        if (!(!YAHOO.env.ua.opera && navigator.userAgent.toLowerCase().indexOf("mac") === -1 || YAHOO.env.ua.webkit > 420)) finalEvent = {
                                            type: "keydown",
                                            keyCode: 39,
                                            target: typeaheadInput,
                                            currentTarget: typeaheadInput
                                        };
                                        handleBlur();
                                    case 27:
                                        handleBlur();
                                    case 38:
                                    case 40:
                                        self.typeahead.proxyKeyDown(finalEvent);
                                        YEvent.stopEvent(evt);
                                        break
                                    }
                                }
                            } else init()
                        }
                        function adjustMentions(inputValueOld) {
                            var adjustedIndex, commonTokens = [],
                                curMention, curIndex, curToken, diff, doubleCall = false,
                                escapedCurToken, instanceRemoved, oneInstance, mentionsLen = self.mentionEntities.length,
                                mentionsToRemove = [],
                                mentionTokens, mentionDiffTokens, newEnd, newIndex, newLen, newToken, newValue, offset, originalRe, removeLen, space = " ",
                                strCheck, strDiffCheck, tokenLen, useIeFix = ieVersion && ieVersion <= 9;
                            inputValue = input.value;
                            offset = useIeFix && useAdjustOffset ? -1 : 0;
                            diff = inputValue.length - inputValueOld.length;
                            for (i = 0; i < mentionsLen; i++) {
                                curMention = self.mentionEntities[i];
                                curToken = curMention.token;
                                curIndex = curMention.index;
                                escapedCurToken = encodeURIComponent(curToken);
                                if (escapedCurToken.indexOf("%00") > -1) curToken = decodeURIComponent(escapedCurToken.replace("%00", ""));
                                newIndex = inputValue.indexOf(curToken);
                                oneInstance = inputValueOld.indexOf(curToken) === inputValueOld.lastIndexOf(curToken) && newIndex === inputValue.lastIndexOf(curToken);
                                instanceRemoved = newIndex === -1;
                                if (oneInstance && newIndex !== curIndex && newIndex !== -1) self.mentionEntities[i].index = inputValue.indexOf(curToken);
                                else {
                                    tokenLen = curToken.length;
                                    strCheck = inputValue.substr(curIndex, tokenLen);
                                    if (strCheck !== curToken) {
                                        mdLog("adjustMentions: strCheck !\x3d\x3d curToken");
                                        adjustedIndex = curIndex + diff + offset;
                                        strDiffCheck = inputValue.substr(adjustedIndex, tokenLen);
                                        if (strDiffCheck === curToken) {
                                            mdLog("adjustMentions: strDiffCheck \x3d\x3d\x3d curToken");
                                            self.mentionEntities[i].index = adjustedIndex
                                        } else {
                                            mdLog("adjustMentions: strDiffCheck !\x3d\x3d curToken");
                                            mentionTokens = curToken.split(space);
                                            originalRe = new RegExp("[^" + curToken.replace(/\s/g, EMPTY).replace(/\-/g, "\\-") + "\\s]", "gi");
                                            mentionDiffTokens = strCheck.replace(originalRe, "").split(space);
                                            commonTokens = _.intersection(mentionTokens, mentionDiffTokens);
                                            mdLog("curToken: " + curToken);
                                            mdLog("strCheck: " + strCheck);
                                            mdLog("strDiffCheck: " + strDiffCheck);
                                            mdLog("commonTokens: " + commonTokens);
                                            if (commonTokens.length) {
                                                doubleCall = true;
                                                newToken = commonTokens.join(space);
                                                newIndex = curMention.index;
                                                newLen = newToken.length;
                                                newEnd = newIndex + newLen;
                                                self.previousEditedMentionTokens = mentionTokens;
                                                self.currentMentionTokens = mentionDiffTokens;
                                                curMention.token = newToken;
                                                curMention.length = newLen;
                                                curMention.end = newEnd;
                                                self.mentionEntities[i] = curMention;
                                                newValue = inputValue.substr(0, newIndex) + newToken + EMPTY + inputValue.substr(newIndex - 1 + tokenLen);
                                                input.value = newValue;
                                                if (useIeFix) {
                                                    diff = inputValue.length - input.value.length;
                                                    delayedCursorMove(input, newEnd, 0)
                                                } else setCursorPosition(input, newEnd)
                                            } else mentionsToRemove.push(i);
                                            offset = 0
                                        }
                                    }
                                }
                            }
                            removeLen = mentionsToRemove.length;
                            mentionsToRemove.sort().reverse();
                            if (removeLen) for (i = 0; i < removeLen; i++) self.mentionEntities.splice(mentionsToRemove[i], 1);
                            sortMentions();
                            if (doubleCall) adjustMentions(inputValue);
                            updateMentionsInput();
                            highlighter.render(inputValue, self.mentionEntities);
                            useAdjustOffset = false
                        }
                        function delayedCursorMove(input, pos, delay) {
                            setTimeout(function() {
                                setCursorPosition(input, pos)
                            }, delay)
                        }
                        function sortMentions() {
                            self.mentionEntities.sort(function(token1, token2) {
                                return token1.index - token2.index
                            })
                        }
                        function handleBidiInputChanges(event, dirAttrVal) {
                            mentionsContainer.setAttribute("dir", dirAttrVal)
                        }
                        mdLog("input focused before init: " + (input === document.activeElement));
                        if (input === document.activeElement) handleInputFocus();
                        YEvent.on(input, "focus", handleInputFocus, self);
                        YEvent.on(input, "keydown", delegateTypeaheadInput, self);
                        if (showInputCallout && !inputPromoCallout) YEvent.on(window, "load", function() {
                            inputCalloutConfig = config.inputCallout;

                            function handleCloseLink(evt) {
                                if (evt.target.className === "hopscotch-bubble-close" && Y$(".mentions-share-box-promo-content", Y$(".hopscotch-bubble-container")[0], true)) window.oUISettings.saveSettings(this.uiSetting, 3)
                            }
                            function openPromo() {
                                if (!inputPromoCallout) return;
                                inputPromoCallout.open();
                                window.oUISettings.saveSettings(inputCalloutConfig.uiSetting, ++inputCalloutImprCount);
                                YEvent.on(Y$(".hopscotch-bubble-container")[0], "click", handleCloseLink, inputCalloutConfig, true)
                            }
                            inputPromoContentEl = Y$("#" + inputCalloutConfig.contentID, document, true);
                            if (inputPromoContentEl && LI.HopscotchCallout) inputPromoCallout = new LI.HopscotchCallout(input, {
                                id: inputCalloutConfig.contentID,
                                orientation: "bottom",
                                showOn: false,
                                xOffset: inputCalloutConfig.offsetX,
                                yOffset: inputCalloutConfig.offsetY,
                                width: inputCalloutConfig.width,
                                title: "",
                                content: inputPromoContentEl.innerHTML
                            });
                            if (ieVersion && ieVersion <= 7) window.setTimeout(openPromo, 500);
                            else openPromo()
                        });
                        this.adjustMentions = adjustMentions
                    };
                    LI.MentionsDecorator.highlight = function(textBody, mentionsData, oldMiniProfile) {
                        var mentions = mentionsData,
                            mentionsLen, curEnd, curLength, curMention, curMini, curProfile, curStart, curToken, fullCommentText = [],
                            previousEnd = 0;
                        if (mentions && mentions.length && mentions !== "[]") {
                            mentions = YJson.parse(mentions);
                            mentionsLen = mentions.length;
                            mentions = mentions.sort(function(token1, token2) {
                                return token2.index - token1.index
                            });
                            while (mentionsLen--) {
                                curMention = mentions[mentionsLen];
                                curStart = curMention.index;
                                curLength = curMention.length;
                                curEnd = curStart + curLength;
                                curToken = textBody.substr(curStart, curLength);
                                curMini = curMention.mini || "";
                                curProfile = curMention.profile || "";
                                if (curStart) fullCommentText.push(LI.htmlEncode(textBody.substr(previousEnd, curStart - previousEnd)));
                                if (curProfile) if (curMini) if (oldMiniProfile) fullCommentText.push(['\x3cspan class\x3d"miniprofile-container ', curMention.mini, '"\x3e', '\x3ca href\x3d"', curMention.profile, '" class\x3d"mention"\x3e', LI.htmlEncode(curToken), "\x3c/a\x3e\x3c/span\x3e"].join(""));
                                else fullCommentText.push(['\x3cspan class\x3d"new-miniprofile-container ', curMention.mini, '" data-li-url\x3d"', curMention.mini, '" data-li-tl\x3d"tl/shared/profile/mini_profile_shell"\x3e', '\x3ca href\x3d"', curMention.profile, '" class\x3d"mention"\x3e', LI.htmlEncode(curToken), "\x3c/a\x3e\x3c/span\x3e"].join(""));
                                else fullCommentText.push(['\x3ca href\x3d"', curMention.profile, '" class\x3d"mention"\x3e', LI.htmlEncode(curToken), "\x3c/a\x3e"].join(""));
                                else fullCommentText.push(LI.htmlEncode(curToken));
                                if (!mentionsLen) fullCommentText.push(LI.htmlEncode(textBody.substr(curEnd)));
                                previousEnd = curEnd
                            }
                            fullCommentText = fullCommentText.join("")
                        } else fullCommentText = LI.htmlEncode(textBody);
                        return fullCommentText
                    };

                    function setCursorPosition(input, position) {
                        var range;
                        if (input.setSelectionRange) input.setSelectionRange(position, position);
                        else if (input.createTextRange) {
                            range = input.createTextRange();
                            range.collapse(true);
                            range.moveEnd(CHARACTER, position);
                            range.moveStart(CHARACTER, position);
                            range.select()
                        }
                    }
                })();;
                if (typeof LI.MentionsDecorator !== "undefined") {
                    module.setExports(LI.MentionsDecorator);
                }
            });

            Inject.INTERNAL.executor.exec55.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("js/util/MentionsDecorator", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FMentionsDecorator.js");
        try {
            Inject.INTERNAL.executor.exec55.innerFn.call(Inject.INTERNAL.executor.exec55.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec55.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fjs%2Futil%2FMentionsDecorator.js

#53 JavaScript::Eval (size: 21032, repeated: 1)

Inject.INTERNAL.executor.exec56.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec56.innerFn = function() {
            // id: scripts/shared/Mixins/TooltipPosition uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMixins%2FTooltipPosition.js
            var module = Inject.INTERNAL.executor.exec56.module,
                require = Inject.INTERNAL.executor.exec56.require,
                define = Inject.INTERNAL.executor.exec56.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore"),
                    TooltipPosition;
                TooltipPosition = function(base) {
                    var DIRECTIONS, fits, flipped, config, defaultDirection, displayDirection, displayDirections, docScrollPosition, HEADER_HEIGHT, OPPOSITES, $tooltip, tooltipOutline, $triggerElement, triggerElementOutline, viewportDimensions;
                    DIRECTIONS = {
                        BOTTOM: "bottom",
                        BOTTOM_RIGHT: "bottomRight",
                        BOTTOM_LEFT: "bottomLeft",
                        TOP: "top",
                        TOP_RIGHT: "topRight",
                        TOP_LEFT: "topLeft",
                        RIGHT: "right",
                        LEFT: "left"
                    };
                    fits = {
                        top: true,
                        bottom: true,
                        left: true,
                        right: true
                    };
                    flipped = {
                        vertical: false,
                        horizontal: false
                    };
                    config = null;
                    defaultDirection = null;
                    displayDirection = null;
                    displayDirections = {};
                    docScrollPosition = null;
                    HEADER_HEIGHT = 80;
                    OPPOSITES = {};
                    $tooltip = null;
                    tooltipOutline = {};
                    $triggerElement = null;
                    triggerElementOutline = {};
                    viewportDimensions = null;
                    var addExtraOffsets = function($element, direction) {
                            var funcName = "addExtraOffsets",
                                extraVertical, extraHorizontal;
                            validate("jquery", $element, funcName, "$element");
                            if (!direction) direction = defaultDirection;
                            else validate("direction", direction, funcName, "direction", false);
                            extraVertical = displayDirections[direction].offsetVert;
                            extraHorizontal = displayDirections[direction].offsetHoriz;
                            shiftVertical($element, extraVertical);
                            shiftHorizontal($element, extraHorizontal)
                        };
                    var addToDisplayDirections = function(direction) {
                            var extraHoriz, extraVertical, configDirection;
                            validate("direction", direction, "addToDisplayDirections", "direction");
                            extraHoriz = 0;
                            extraVertical = 0;
                            if (_.isObject(config) && _.isObject(config.directions) && config.directions[direction]) configDirection = config.directions[direction];
                            if (configDirection) {
                                if (configDirection.offsetVert) extraVertical = configDirection.offsetVert;
                                if (configDirection.offsetHoriz) extraHoriz = configDirection.offsetHoriz
                            }
                            displayDirections[direction] = {
                                offsetHoriz: extraHoriz,
                                offsetVert: extraVertical,
                                opposites: OPPOSITES[direction]
                            }
                        };
                    var buildDisplayDirectionsObject = function() {
                            var keys, key, l;
                            if (_.isEmpty(OPPOSITES)) throw "You must initialize OPPOSITES before calling buildDisplayDirectionsObject";
                            keys = _.keys(DIRECTIONS);
                            l = keys.length;
                            for (var i = 0; i < l; i++) {
                                key = keys[i];
                                addToDisplayDirections(DIRECTIONS[key])
                            }
                        };
                    var buildOutlineObject = function($element) {
                            var obj;
                            validate("jquery", $element, "buildOutlineObject", "$element");
                            obj = {
                                $el: $element,
                                dimensions: getDimensions($element),
                                topLeft: getTopRightCoords($element),
                                topMiddle: getTopMidpoint($element),
                                topRight: getTopRightCoords($element),
                                leftMiddle: getLeftMidpoint($element),
                                bottomLeft: getBottomLeftCoords($element),
                                bottomMiddle: getBottomMidpoint($element),
                                bottomRight: getBottomRightCoords($element),
                                rightMiddle: getRightMidpoint($element)
                            };
                            return obj
                        };
                    var calculatePosition = function(tooltip, triggerElement) {
                            var funcName = "calculatePosition";
                            validate("dom", tooltip, funcName, "tooltip");
                            validate("dom", triggerElement, funcName, "triggerElement");
                            config = this._config;
                            initialize(tooltip, triggerElement);
                            setPosition(tooltip);
                            if (!fitsOnScreen($tooltip)) flip($tooltip)
                        };
                    var fitsBottom = function($element) {
                            var funcName = "fitsLeft";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", viewportDimensions.height, funcName, "viewportDimensions.height");
                            validate("number", docScrollPosition.top, funcName, "docScrollPosition.top");
                            if (getBottomOffset($element) < docScrollPosition.top + viewportDimensions.height) return true;
                            return false
                        };
                    var fitsLeft = function($element) {
                            var funcName = "fitsLeft";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", docScrollPosition.left, funcName, "docScrollPosition.left");
                            if (getLeftOffset($element) > docScrollPosition.left) return true;
                            return false
                        };
                    var fitsHorizontal = function() {
                            if (!fits.left || !fits.right) {
                                if (!fits.left && fits.right) return true;
                                return false
                            }
                            return true
                        };
                    var fitsOnScreen = function($element) {
                            var funcName = "fitsOnScreen",
                                keys, key, l, fitsOnScreen;
                            validate("jquery", $element, funcName, "$element");
                            setFits($element);
                            fitsOnScreen = true;
                            keys = _.keys(fits);
                            l = keys.length;
                            for (var i = 0; i < l; i++) {
                                key = keys[i];
                                if (!fits[key]) {
                                    fitsOnScreen = false;
                                    break
                                }
                            }
                            return fitsOnScreen
                        };
                    var fitsRight = function($element) {
                            var funcName = "fitsRight";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", docScrollPosition.left, funcName, "docScrollPosition.left");
                            validate("number", viewportDimensions.width, funcName, "viewportDimensions.width");
                            if (getRightOffset($element) < docScrollPosition.left + viewportDimensions.width) return true;
                            return false
                        };
                    var fitsTop = function($element) {
                            var funcName = "fitsTop";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", HEADER_HEIGHT, funcName, "HEADER_HEIGHT");
                            validate("number", docScrollPosition.top, funcName, "docScrollPosition.top");
                            if (getTopOffset($element) - HEADER_HEIGHT > docScrollPosition.top) return true;
                            return false
                        };
                    var fitsVertical = function() {
                            if (!fits.top || !fits.bottom) return false;
                            return true
                        };
                    var flip = function($element, startDirection) {
                            var funcName = "flip",
                                oppositeDir;
                            validate("jquery", $element, funcName, "$element");
                            if (!startDirection) startDirection = defaultDirection;
                            else validate("direction", startDirection, funcName, "startDirection", false);
                            flipped.horizontal = false;
                            flipped.vertical = false;
                            if (!fitsHorizontal() && !fitsVertical()) {
                                oppositeDir = flipVertical($element, startDirection);
                                flipHorizontal($element, oppositeDir);
                                flipped.horizontal = true;
                                flipped.vertical = true
                            } else if (!fitsHorizontal()) {
                                flipHorizontal($element, startDirection);
                                flipped.horizontal = true
                            } else if (!fitsVertical()) {
                                flipVertical($element, startDirection);
                                flipped.vertical = true
                            }
                        };
                    var flipHorizontal = function($element, startDirection) {
                            var funcName = "flipHorizontal",
                                oppositeDir;
                            validate("jquery", $element, funcName, "$element");
                            validate("direction", startDirection, funcName, "startDirection");
                            oppositeDir = getHorizontalOpposite(startDirection);
                            setDisplayDirection(oppositeDir);
                            setPosition($element, oppositeDir);
                            return oppositeDir
                        };
                    var flipVertical = function($element, startDirection) {
                            var funcName = "flipVertical",
                                oppositeDir;
                            validate("jquery", $element, funcName, "$element");
                            validate("direction", startDirection, funcName, "startDirection");
                            oppositeDir = getVerticalOpposite(startDirection);
                            setDisplayDirection(oppositeDir);
                            setPosition($element, oppositeDir);
                            return oppositeDir
                        };
                    var generateOffsetObject = function(left, top) {
                            var funcName = "generateOffsetObject";
                            validate("number", left, funcName, "left");
                            validate("number", top, funcName, "top");
                            return {
                                top: top,
                                left: left
                            }
                        };
                    var getAlignedHorizontalMiddleTopOffset = function($base, $elementToMove) {
                            var funcName = "getAlignedHorizontalMiddleTopOffset",
                                middle, elementHeight;
                            validate("jquery", $base, funcName, "$base");
                            validate("jquery", $elementToMove, funcName, $elementToMove);
                            middle = getMiddleYCoord($base);
                            elementHeight = getHeight($elementToMove);
                            return middle - elementHeight / 2
                        };
                    var getAlignedVerticalMiddleLeftOffset = function($base, $elementToMove) {
                            var funcName = "getAlignedVerticalMiddleLeftOffset",
                                middle, elementWidth;
                            validate("jquery", $base, funcName, "$base");
                            validate("jquery", $elementToMove, funcName, $elementToMove);
                            middle = getMiddleXCoord($base);
                            elementWidth = getWidth($elementToMove);
                            return middle - elementWidth / 2
                        };
                    var getBottomLeftCoords = function($element) {
                            var top, left;
                            validate("jquery", $element, "getBottomLeftCoords", "$element");
                            left = getLeftOffset($element);
                            top = getBottomOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getBottomRightCoords = function($element) {
                            var top, left;
                            validate("jquery", $element, "getBottomRightCoords", "$element");
                            left = getRightOffset($element);
                            top = getBottomOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getBottomMidpoint = function($element) {
                            var top, left;
                            validate("jquery", $element, "getBottomMidpoint", "$element");
                            left = getMiddleXCoord($element);
                            top = getBottomOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getBottomOffset = function($element) {
                            var offset;
                            validate("jquery", $element, "getBottomOffset", "$element");
                            offset = getTopOffset($element) + getHeight($element);
                            return offset
                        };
                    var getBottomPositionCalc = function() {
                            var funcName = "getBottomPositionCalc",
                                top, left;
                            validate("number", triggerElementOutline.bottomMiddle.top, funcName, "triggerElementOutline.bottomMiddle.top");
                            validate("jquery", $triggerElement, funcName, "$triggerElement");
                            validate("jquery", $tooltip, funcName, "$tooltip");
                            top = triggerElementOutline.bottomMiddle.top;
                            left = getAlignedVerticalMiddleLeftOffset($triggerElement, $tooltip);
                            return generateOffsetObject(left, top)
                        };
                    var getDimensions = function($element) {
                            var width, height;
                            validate("jquery", $element, "getDimensions", "$element");
                            width = getWidth($element);
                            height = getHeight($element);
                            return {
                                width: width,
                                height: height
                            }
                        };
                    var getDisplayDirection = function() {
                            return displayDirection
                        };
                    var getDocScrollPosition = function() {
                            var top, left, $document = $(document);
                            top = $document.scrollTop();
                            left = $document.scrollLeft();
                            return generateOffsetObject(left, top)
                        };
                    var getFlipped = function() {
                            return flipped
                        };
                    var getHeight = function($element) {
                            validate("jquery", $element, "getHeight", "$element");
                            return $element.outerHeight()
                        };
                    var getHorizontalOpposite = function(direction) {
                            validate("direction", direction, "getHorizontalOpposite", "direction");
                            return displayDirections[direction].opposites.horizontalOpposite
                        };
                    var getLeftOffset = function($element) {
                            validate("jquery", $element, "getLeftOffset", "$element");
                            return $element.offset().left
                        };
                    var getLeftPositionCalc = function() {
                            var funcName = "getLeftPositionCalc",
                                top, left;
                            validate("number", triggerElementOutline.leftMiddle.top, funcName, "triggerElementOutline.leftMiddle.top");
                            validate("number", tooltipOutline.dimensions.height, funcName, "tooltipOutline.dimensions.height");
                            validate("jquery", $triggerElement, funcName, "$triggerElement");
                            validate("number", tooltipOutline.dimensions.width, funcName, "tooltipOutline.dimensions.width");
                            top = triggerElementOutline.leftMiddle.top - tooltipOutline.dimensions.height / 2;
                            left = getPositionedLeftLeftOffset($triggerElement, tooltipOutline.dimensions.width);
                            return generateOffsetObject(left, top)
                        };
                    var getLeftMidpoint = function($element) {
                            var top, left;
                            validate("jquery", $element, "getLeftMidpoint", "$element");
                            top = getMiddleYCoord($element);
                            left = getLeftOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getMiddleXCoord = function($element) {
                            var x;
                            validate("jquery", $element, "getMiddleXCoord", "$element");
                            x = getLeftOffset($element) + getWidth($element) / 2;
                            return x
                        };
                    var getMiddleYCoord = function($element) {
                            var y;
                            validate("jquery", $element, "getMiddleYCoord", "$element");
                            y = getTopOffset($element) + getHeight($element) / 2;
                            return y
                        };
                    var getPositionedAboveTopOffset = function($base, elementHeight) {
                            validate("jquery", $base, "getPositionedAboveTopOffset", "$base");
                            validate("number", elementHeight, "getPositionedAboveTopOffset", "elementHeight");
                            return getTopOffset($base) - elementHeight
                        };
                    var getPositionedLeftLeftOffset = function($base, elementWidth) {
                            validate("jquery", $base, "getPositionedLeftLeftOffset", "$base");
                            validate("number", elementWidth, "getPositionedLeftLeftOffset", "elementWidth");
                            return getLeftOffset($base) - elementWidth
                        };
                    var getRightMidpoint = function($element) {
                            var top, left;
                            validate("jquery", $element, "getRightMidpoint", "$element");
                            top = getMiddleYCoord($element);
                            left = getRightOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getRightOffset = function($element) {
                            var offset;
                            validate("jquery", $element, "getRightOffset", "$element");
                            offset = getLeftOffset($element) + getWidth($element);
                            return offset
                        };
                    var getRightPositionCalc = function() {
                            var top, left, funcName = "getRightPositionCalc";
                            validate("number", triggerElementOutline.rightMiddle.top, funcName, "triggerElementOutline.rightMiddle.top");
                            validate("number", triggerElementOutline.topMiddle.left, funcName, "triggerElementOutline.topMiddle.left");
                            validate("number", tooltipOutline.dimensions.height, funcName, "tooltipOutline.dimensions.height");
                            validate("number", triggerElementOutline.dimensions.width, funcName, "triggerElementOutline.dimensions.width");
                            top = triggerElementOutline.rightMiddle.top - tooltipOutline.dimensions.height / 2;
                            left = triggerElementOutline.rightMiddle.left;
                            return generateOffsetObject(left, top)
                        };
                    var getTopLeftCoords = function($element) {
                            var left, top;
                            validate("jquery", $element, "getTopLeftCoords", "$element");
                            left = getLeftOffset($element);
                            top = getTopOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getTopMidpoint = function($element) {
                            var left, top;
                            validate("jquery", $element, "getTopMidpoint", "$element");
                            left = getMiddleXCoord($element);
                            top = getTopOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getTopOffset = function($element) {
                            validate("jquery", $element, "getTopOffset", "$element");
                            return $element.offset().top
                        };
                    var getTopPositionCalc = function() {
                            var funcName = "getTopPositionCalc",
                                top, left;
                            validate("jquery", $triggerElement, funcName, "$triggerElement");
                            validate("jquery", $tooltip, funcName, "$tooltip");
                            top = getPositionedAboveTopOffset($triggerElement, tooltipOutline.dimensions.height);
                            left = getAlignedVerticalMiddleLeftOffset($triggerElement, $tooltip);
                            return generateOffsetObject(left, top)
                        };
                    var getTopRightCoords = function($element) {
                            var top, left;
                            validate("jquery", $element, "getTopRightCoords", "$element");
                            top = getTopOffset($element);
                            left = getRightOffset($element);
                            return generateOffsetObject(left, top)
                        };
                    var getVerticalOpposite = function(direction) {
                            validate("direction", direction, "getVerticalOpposite", "direction");
                            return displayDirections[direction].opposites.verticalOpposite
                        };
                    var getWidth = function($element) {
                            validate("jquery", $element, "getWidth", "$element");
                            return $element.outerWidth()
                        };
                    var initialize = function(tooltip, triggerElement) {
                            var funcName = "initialize";
                            validate("jquery", tooltip, funcName, "tooltip");
                            validate("jquery", triggerElement, funcName, "triggerElement");
                            $tooltip = tooltip;
                            $triggerElement = triggerElement;
                            initializeOpposites();
                            buildDisplayDirectionsObject();
                            triggerElementOutline = buildOutlineObject($triggerElement);
                            initializeDefaultDirection();
                            initializeDisplayDirection();
                            if (!tooltipOutline.dimensions) tooltipOutline.dimensions = getDimensions($tooltip);
                            viewportDimensions = getDimensions($(window));
                            docScrollPosition = getDocScrollPosition()
                        };
                    var initializeDefaultDirection = function() {
                            if (_.isObject(config) && config.defaultDirection) defaultDirection = config.defaultDirection;
                            else defaultDirection = DIRECTIONS.TOP
                        };
                    var initializeDisplayDirection = function() {
                            setDisplayDirection(defaultDirection)
                        };
                    var initializeOpposites = function() {
                            OPPOSITES[DIRECTIONS.TOP] = {
                                verticalOpposite: DIRECTIONS.BOTTOM,
                                horizontalOpposite: DIRECTIONS.TOP
                            };
                            OPPOSITES[DIRECTIONS.TOP_RIGHT] = {
                                verticalOpposite: DIRECTIONS.BOTTOM_RIGHT,
                                horizontalOpposite: DIRECTIONS.TOP_LEFT
                            };
                            OPPOSITES[DIRECTIONS.TOP_LEFT] = {
                                verticalOpposite: DIRECTIONS.BOTTOM_LEFT,
                                horizontalOpposite: DIRECTIONS.TOP_RIGHT
                            };
                            OPPOSITES[DIRECTIONS.BOTTOM] = {
                                verticalOpposite: DIRECTIONS.TOP,
                                horizontalOpposite: DIRECTIONS.BOTTOM
                            };
                            OPPOSITES[DIRECTIONS.BOTTOM_RIGHT] = {
                                verticalOpposite: DIRECTIONS.TOP_RIGHT,
                                horizontalOpposite: DIRECTIONS.BOTTOM_LEFT
                            };
                            OPPOSITES[DIRECTIONS.BOTTOM_LEFT] = {
                                verticalOpposite: DIRECTIONS.TOP_LEFT,
                                horizontalOpposite: DIRECTIONS.BOTTOM_RIGHT
                            };
                            OPPOSITES[DIRECTIONS.LEFT] = {
                                verticalOpposite: DIRECTIONS.LEFT,
                                horizontalOpposite: DIRECTIONS.RIGHT
                            };
                            OPPOSITES[DIRECTIONS.RIGHT] = {
                                verticalOpposite: DIRECTIONS.RIGHT,
                                horizontalOpposite: DIRECTIONS.LEFT
                            }
                        };
                    var isValidDirectionValue = function(direction) {
                            var values, funcName = "isValidDirectionValue";
                            validateRequired("direction", direction, funcName);
                            values = _.values(DIRECTIONS);
                            return _.contains(values, direction)
                        };
                    var removeOffsets = function($element) {
                            validate("jquery", $element, "removeOffsets", "$element");
                            $element.css({
                                "top": "",
                                "left": ""
                            })
                        };
                    var setDisplayDirection = function(newDirection) {
                            validate("direction", newDirection, "setDisplayDirection", "newDirection");
                            displayDirection = newDirection
                        };
                    var setFits = function($element) {
                            validate("jquery", $element, "setFits", "$element");
                            fits.top = fitsTop($element);
                            fits.bottom = fitsBottom($element);
                            fits.left = fitsLeft($element);
                            fits.right = fitsRight($element)
                        };
                    var setLeftOffset = function($element, offsetAmount) {
                            var funcName = "setLeftOffset";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", offsetAmount, funcName, "offsetAmount");
                            $element.offset({
                                left: offsetAmount
                            })
                        };
                    var setPosition = function($element, direction) {
                            var theDirection, funcName = "setPosition";
                            validate("jquery", $element, funcName, "$element");
                            if (!direction) theDirection = defaultDirection;
                            else {
                                theDirection = direction;
                                validate("direction", direction, funcName, "direction", false)
                            }
                            setTooltipCoords(theDirection);
                            addExtraOffsets($element, theDirection)
                        };
                    var setOffsets = function($element, coordObj) {
                            var funcName = "setOffsets";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", coordObj.left, funcName, "coordObj.left");
                            validate("number", coordObj.top, funcName, "coordObj.top");
                            setLeftOffset($element, coordObj.left);
                            setTopOffset($element, coordObj.top)
                        };
                    var setTopOffset = function($element, offsetAmount) {
                            var funcName = "setTopOffset";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", offsetAmount, funcName, "offsetAmount");
                            $element.offset({
                                top: offsetAmount
                            })
                        };
                    var setTooltipCoords = function(direction) {
                            var coords;
                            if (!direction) direction = defaultDirection;
                            else validate("direction", direction, "setTooltipCoords", "direction", false);
                            switch (direction) {
                            case DIRECTIONS.TOP:
                                coords = getTopPositionCalc();
                                break;
                            case DIRECTIONS.TOP_RIGHT:
                                coords = getTopPositionCalc();
                                break;
                            case DIRECTIONS.TOP_LEFT:
                                coords = getTopPositionCalc();
                                break;
                            case DIRECTIONS.BOTTOM:
                                coords = getBottomPositionCalc();
                                break;
                            case DIRECTIONS.BOTTOM_LEFT:
                                coords = getBottomPositionCalc();
                                break;
                            case DIRECTIONS.BOTTOM_RIGHT:
                                coords = getBottomPositionCalc();
                                break;
                            case DIRECTIONS.LEFT:
                                coords = getLeftPositionCalc();
                                break;
                            case DIRECTIONS.RIGHT:
                                coords = getRightPositionCalc();
                                break
                            }
                            setOffsets($tooltip, coords)
                        };
                    var setTooltipDimensions = function($element) {
                            validate("jquery", $element, "setTooltipDimensions", "$element");
                            tooltipOutline.dimensions = getDimensions($element)
                        };
                    var shiftVertical = function($element, amount) {
                            var currentTop, newTop, funcName = "shiftVertical";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", amount, funcName, "amount");
                            currentTop = getTopOffset($element);
                            newTop = currentTop -= amount;
                            setTopOffset($element, newTop)
                        };
                    var shiftHorizontal = function($element, amount) {
                            var currentLeft, newLeft, funcName = "shiftHorizontal";
                            validate("jquery", $element, funcName, "$element");
                            validate("number", amount, funcName, "amount");
                            currentLeft = getLeftOffset($element);
                            newLeft = currentLeft += amount;
                            setLeftOffset($element, newLeft)
                        };
                    var validate = function(type, variable, funcName, name, required) {
                            validateRequired("name", name, "validate");
                            validateRequired("funcName", funcName, "validate");
                            if (required !== false) validateRequired(name, variable, funcName);
                            switch (type) {
                            case "jquery":
                                validateJQuery(name, variable, funcName);
                                break;
                            case "number":
                                validateNumber(name, variable, funcName);
                                break;
                            case "direction":
                                validateDirection(variable, funcName);
                                break;
                            case "dom":
                                validateJQuery(name, variable, funcName);
                                validateInDOM(name, variable, funcName);
                                break;
                            default:
                                break
                            }
                        };
                    var validateDirection = function(variable, funcName) {
                            if (!isValidDirectionValue(variable)) throw variable + " needs to be a supported direction in function " + funcName;
                        };
                    var validateInDOM = function(name, variable, funcName) {
                            var el;
                            el = $("html").find(variable);
                            if (el.length < 1) throw name + " needs to be in the DOM for function " + funcName;
                        };
                    var validateJQuery = function(name, variable, funcName) {
                            if (!variable instanceof jQuery) throw name + " needs to be a jQuery object in function " + funcName;
                        };
                    var validateNumber = function(name, variable, funcName) {
                            if (!_.isNumber(variable)) throw name + " needs to be a number in function " + funcName;
                        };
                    var validateRequired = function(name, variable, funcName) {
                            if (_.isUndefined(variable) || _.isNull(variable)) throw name + " is required for function " + funcName;
                        };
                    return {
                        DIRECTIONS: DIRECTIONS,
                        calculatePosition: calculatePosition,
                        getDisplayDirection: getDisplayDirection,
                        getFlipped: getFlipped,
                        removeOffsets: removeOffsets,
                        setTooltipDimensions: setTooltipDimensions
                    }
                };
                LIModules.exports("Mixins.TooltipPosition", TooltipPosition)
            })();

            Inject.INTERNAL.executor.exec56.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/Mixins/TooltipPosition", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMixins%2FTooltipPosition.js");
        try {
            Inject.INTERNAL.executor.exec56.innerFn.call(Inject.INTERNAL.executor.exec56.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec56.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMixins%2FTooltipPosition.js

#54 JavaScript::Eval (size: 16188, repeated: 1)

Inject.INTERNAL.executor.exec57.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec57.innerFn = function() {
            // id: scripts/shared/MiniProfilePopup uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMiniProfilePopup.js
            var module = Inject.INTERNAL.executor.exec57.module,
                require = Inject.INTERNAL.executor.exec57.require,
                define = Inject.INTERNAL.executor.exec57.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var $ = LIModules.requires("jquery"),
                    _ = LIModules.requires("underscore"),
                    Fiber = LIModules.requires("fiber"),
                    BaseControl = LIModules.requires("BaseControl"),
                    jSecure = LIModules.imports("jSecure"),
                    encodeText = jSecure && (jSecure.htmlEncode || jSecure.text) || LIModules.requires("htmlEncode"),
                    TooltipPosition = LIModules.requires("Mixins.TooltipPosition"),
                    MiniProfilePopup;
                MiniProfilePopup = BaseControl.extend(function(base) {
                    var STRINGS, NUMBERS, defaults, companyDefaults, schoolDefaults, publicAPI, baseControl;
                    STRINGS = {
                        A11Y: {
                            LABEL: "aria-label",
                            TABINDEX: "tabIndex"
                        },
                        ATTRIBUTES: {
                            CONTAINER_ID: "lui-mini-profile-body",
                            MINIPROFILE_URL: "data-li-url",
                            MINIPROFILE_TYPE: "data-miniprofile-type"
                        },
                        CLASSES: {
                            MINIPROFILE_CONTENT: "new-miniprofile-content",
                            COMPANY_CONTENT: "company-miniprofile-content",
                            SCHOOL_CONTENT: "school-miniprofile-content",
                            OFFSCREEN: "offscreen",
                            SHARED_CONNECTIONS: "miniprofile-shared-connections",
                            TRIANGLE: "triangle",
                            TRIANGLE_BOTTOM: "triangle-bottom",
                            TRIANGLE_BOTTOM_GRAY: "triangle-bottom-grey",
                            DESCRIPTION: "description"
                        },
                        DEFAULTS: {
                            DIRECTION: "topRight",
                            TEMPLATE_NAME: "tl/shared/profile/miniprofile_shell",
                            COMPANY_TEMPLATE: "tl/shared/profile/company_miniprofile",
                            SCHOOL_TEMPLATE: "tl/apps/plato/embed/home/school_mini_profile",
                            FULL_NAME: "full_name"
                        },
                        ELEMENTS: {
                            BODY: "body",
                            ANCHOR: "a"
                        },
                        EVENTS: {
                            BLUR: "blur",
                            FOCUS: "focus",
                            FOCUSIN: "focusin",
                            FOCUSOUT: "focusout",
                            MOUSEOVER: "mouseover",
                            MOUSEOUT: "mouseout",
                            MOUSEENTER: "mouseenter",
                            MOUSELEAVE: "mouseleave",
                            KEYUP: "keyup",
                            KEYDOWN: "keydown"
                        },
                        PSEUDOS: {
                            FOCUS: ":focus",
                            LAST: ":last"
                        }
                    };
                    NUMBERS = {
                        ESC_KEY: 27,
                        TAB_KEY: 9
                    };
                    defaults = {
                        idAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        containerID: STRINGS.ATTRIBUTES.CONTAINER_ID,
                        defaultDirection: STRINGS.DEFAULTS.DIRECTION,
                        directions: {
                            topRight: {
                                offsetHoriz: 80,
                                offsetVert: 10
                            },
                            bottomRight: {
                                offsetHoriz: 80,
                                offsetVert: -10
                            },
                            topLeft: {
                                offsetHoriz: -115,
                                offsetVert: 10
                            },
                            bottomLeft: {
                                offsetHoriz: -115,
                                offsetVert: -10
                            }
                        },
                        nameKey: STRINGS.DEFAULTS.FULL_NAME,
                        contentClassName: STRINGS.CLASSES.MINIPROFILE_CONTENT,
                        zIndex: 1007,
                        templateName: STRINGS.DEFAULTS.TEMPLATE_NAME,
                        urlAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        showDelay: 500,
                        hideDelay: 400
                    };
                    companyDefaults = {
                        idAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        containerID: STRINGS.ATTRIBUTES.CONTAINER_ID,
                        defaultDirection: STRINGS.DEFAULTS.DIRECTION,
                        directions: {
                            topRight: {
                                offsetHoriz: 105,
                                offsetVert: 12
                            },
                            bottomRight: {
                                offsetHoriz: 105,
                                offsetVert: -14
                            },
                            topLeft: {
                                offsetHoriz: -120,
                                offsetVert: 12
                            },
                            bottomLeft: {
                                offsetHoriz: -120,
                                offsetVert: -14
                            }
                        },
                        nameKey: STRINGS.DEFAULTS.FULL_NAME,
                        contentClassName: STRINGS.CLASSES.COMPANY_CONTENT,
                        zIndex: 1007,
                        templateName: STRINGS.DEFAULTS.COMPANY_TEMPLATE,
                        urlAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        showDelay: 500,
                        hideDelay: 400
                    };
                    schoolDefaults = {
                        idAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        containerID: STRINGS.ATTRIBUTES.CONTAINER_ID,
                        defaultDirection: STRINGS.DEFAULTS.DIRECTION,
                        directions: {
                            topRight: {
                                offsetHoriz: 105,
                                offsetVert: 12
                            },
                            bottomRight: {
                                offsetHoriz: 105,
                                offsetVert: -14
                            },
                            topLeft: {
                                offsetHoriz: -120,
                                offsetVert: 12
                            },
                            bottomLeft: {
                                offsetHoriz: -120,
                                offsetVert: -14
                            }
                        },
                        nameKey: STRINGS.DEFAULTS.FULL_NAME,
                        contentClassName: STRINGS.CLASSES.SCHOOL_CONTENT,
                        zIndex: 1007,
                        templateName: STRINGS.DEFAULTS.SCHOOL_TEMPLATE,
                        urlAttribute: STRINGS.ATTRIBUTES.MINIPROFILE_URL,
                        showDelay: 500,
                        hideDelay: 400
                    };
                    baseControl = {
                        beforeDecoration: function() {
                            var id, util, self, baseControl, elements, flags, helpers, timers, name, miniprofileType;
                            self = this;
                            util = {};
                            miniprofileType = self._$el.attr(STRINGS.ATTRIBUTES.MINIPROFILE_TYPE);
                            switch (miniprofileType) {
                            case "company":
                                self._config = $.extend(true, {}, companyDefaults, self._config);
                                break;
                            case "school":
                                self._config = $.extend(true, {}, schoolDefaults, self._config);
                                break;
                            default:
                                self._config = $.extend(true, {}, defaults, self._config)
                            }
                            id = this._$el.attr(this._config.idAttribute);
                            elements = {
                                $profile: null,
                                $container: null
                            };
                            flags = {
                                alreadyFetched: false,
                                activeTriggerEl: false,
                                activeProfile: false,
                                isShowing: false,
                                preventReShow: false
                            };
                            helpers = {
                                caret: {
                                    directions: {
                                        top: false,
                                        bottom: false,
                                        right: false,
                                        left: false
                                    },
                                    addClasses: function() {
                                        var dirs = [],
                                            keys = _.keys(helpers.caret.directions),
                                            l = keys.length,
                                            key, i = 0,
                                            allClasses = keys.join(" ");
                                        for (i; i < l; i++) {
                                            key = keys[i];
                                            if (helpers.caret.directions[key] === true) dirs.push(key)
                                        }
                                        helpers.profile.get().find("." + STRINGS.CLASSES.TRIANGLE).removeClass(allClasses).addClass(dirs.join(" "))
                                    },
                                    resetDirections: function() {
                                        var keys = _.keys(helpers.caret.directions),
                                            l = keys.length,
                                            i = 0,
                                            key;
                                        for (i; i < l; i++) {
                                            key = keys[i];
                                            if (_.isBoolean(helpers.caret.directions[key])) helpers.caret.directions[key] = false
                                        }
                                    },
                                    setDirections: function() {
                                        var displayDirection = self.getDisplayDirection();
                                        switch (displayDirection) {
                                        case self.DIRECTIONS.BOTTOM_RIGHT:
                                            helpers.caret.setDirectionFlags(self.DIRECTIONS.BOTTOM, self.DIRECTIONS.RIGHT);
                                            break;
                                        case self.DIRECTIONS.TOP_LEFT:
                                            helpers.caret.setDirectionFlags(self.DIRECTIONS.TOP, self.DIRECTIONS.LEFT);
                                            break;
                                        case self.DIRECTIONS.BOTTOM_LEFT:
                                            helpers.caret.setDirectionFlags(self.DIRECTIONS.BOTTOM, self.DIRECTIONS.LEFT);
                                            break;
                                        case self.DIRECTIONS.TOP_RIGHT:
                                            helpers.caret.setDirectionFlags(self.DIRECTIONS.TOP, self.DIRECTIONS.RIGHT);
                                            break;
                                        default:
                                            break
                                        }
                                    },
                                    setDirectionFlags: function() {
                                        var argCount = 0,
                                            arg, l = arguments.length;
                                        helpers.caret.resetDirections();
                                        for (argCount = 0; argCount < l; argCount++) {
                                            arg = arguments[argCount];
                                            if (!_.isUndefined(arg) && !_.isUndefined(helpers.caret.directions[arg]) && !_.isNull(helpers.caret.directions[arg])) helpers.caret.directions[arg] = true
                                        }
                                    },
                                    setPosition: function() {
                                        helpers.caret.setDirections();
                                        helpers.caret.addClasses()
                                    }
                                },
                                container: {
                                    addProfile: function() {
                                        self.getContainer().html(helpers.profile.get());
                                        self.getContainer().attr(STRINGS.A11Y.LABEL, helpers.profile.getName())
                                    },
                                    build: function() {
                                        var config = self._config,
                                            $cont;
                                        $cont = $('\x3cdiv role\x3d"tooltip" /\x3e');
                                        $cont.attr("id", config.containerID).css("z-index", config.zIndex);
                                        $("body").append($cont);
                                        helpers.container.set($cont);
                                        helpers.container.hide();
                                        return $cont
                                    },
                                    get: function() {
                                        return elements.$container
                                    },
                                    hide: function() {
                                        self.removeOffsets(self.getContainer());
                                        self.getContainer().addClass(STRINGS.CLASSES.OFFSCREEN);
                                        self.detachEventListeners();
                                        flags.isShowing = false
                                    },
                                    hideWithTriggerEl: function() {
                                        helpers.container.outOfTabFlow();
                                        helpers.container.hide()
                                    },
                                    immediateClose: function() {
                                        flags.activeProfile = false;
                                        helpers.container.hide()
                                    },
                                    inDOM: function() {
                                        var $cont = $("#" + self._config.containerID);
                                        return $cont.length > 0
                                    },
                                    lazyBuild: function() {
                                        var $cont;
                                        if (!helpers.container.inDOM()) helpers.container.build();
                                        else {
                                            $cont = $("#" + self._config.containerID);
                                            helpers.container.set($cont)
                                        }
                                    },
                                    outOfTabFlow: function() {
                                        $(STRINGS.ELEMENTS.BODY).append(self.getContainer())
                                    },
                                    nextToTrigger: function() {
                                        var cont = self._$el.next("#" + self._config.containerID);
                                        return cont.length > 0
                                    },
                                    set: function($containerObj) {
                                        elements.$container = $containerObj
                                    },
                                    show: function() {
                                        if (!helpers.container.nextToTrigger()) $("body").append(self.getContainer());
                                        helpers.events.attachEventListeners();
                                        self.getContainer().removeClass(STRINGS.CLASSES.OFFSCREEN);
                                        flags.isShowing = true;
                                        self.getContainer().attr(STRINGS.A11Y.TABINDEX, -1)
                                    }
                                },
                                data: {
                                    encodeCompanyData: function(jsonData) {
                                        var employees;
                                        jsonData.company.name = encodeText(jsonData.company.name);
                                        jsonData.company.description = encodeText(jsonData.company.description);
                                        if (_.isObject(jsonData.employees)) _.each(jsonData.employees, function(element, index) {
                                            jsonData.employees[index].firstName = encodeText(element.firstName);
                                            jsonData.employees[index].lastName = encodeText(element.lastName);
                                            jsonData.employees[index].headline = encodeText(element.headline)
                                        });
                                        return jsonData
                                    },
                                    encodeSchoolData: function(jsonData) {
                                        var alumni;
                                        jsonData.schoolMiniProfile.title = encodeText(jsonData.schoolMiniProfile.title);
                                        jsonData.schoolMiniProfile.description = encodeText(jsonData.schoolMiniProfile.description);
                                        if (_.isObject(jsonData.alumni)) _.each(jsonData.alumni, function(element, index) {
                                            jsonData.alumni[index].firstName = encodeText(element.firstName);
                                            jsonData.alumni[index].lastName = encodeText(element.lastName);
                                            jsonData.alumni[index].headline = encodeText(element.headline)
                                        });
                                        return jsonData
                                    },
                                    encodeMemberData: function(jsonData) {
                                        var profileJSON = jsonData.content.MiniProfile,
                                            sharedConnections, l, i = 0;
                                        profileJSON.full_name = encodeText(profileJSON.full_name);
                                        profileJSON.mini_profile.fmt__trunc_headline = encodeText(profileJSON.mini_profile.fmt__trunc_headline);
                                        profileJSON.mini_profile.headline = encodeText(profileJSON.mini_profile.headline);
                                        if (_.isObject(profileJSON.sorted_shared_connections) && _.isArray(profileJSON.sorted_shared_connections.sortedSharedConnections)) {
                                            sharedConnections = profileJSON.sorted_shared_connections.sortedSharedConnections;
                                            l = sharedConnections.length;
                                            for (i; i < l; i++) {
                                                sharedConnections[i].full_name = encodeText(sharedConnections[i].full_name);
                                                sharedConnections[i].headline = encodeText(sharedConnections[i].headline)
                                            }
                                        }
                                        return jsonData.content
                                    },
                                    encodeProfileData: function(jsonData) {
                                        var profileJSON;
                                        switch (miniprofileType) {
                                        case "company":
                                            profileJSON = helpers.data.encodeCompanyData(jsonData);
                                            break;
                                        case "school":
                                            profileJSON = helpers.data.encodeSchoolData(jsonData);
                                            break;
                                        default:
                                            profileJSON = helpers.data.encodeMemberData(jsonData)
                                        }
                                        return profileJSON
                                    },
                                    getID: function() {
                                        return id
                                    }
                                },
                                events: {
                                    attachEventListeners: function() {
                                        self.getContainer().on(STRINGS.EVENTS.MOUSEENTER, helpers.events.handleProfileEnter).on(STRINGS.EVENTS.MOUSELEAVE, helpers.events.handleProfileMouseLeave);
                                        self.getContainer().on(STRINGS.EVENTS.KEYUP, helpers.events.handleProfileKeyup);
                                        self.getContainer().on(STRINGS.EVENTS.KEYDOWN, helpers.events.handleProfileKeyDown)
                                    },
                                    handleMoreClick: function(evt) {
                                        window.location = self._$el.attr("href")
                                    },
                                    handleProfileMouseLeave: function(evt) {
                                        if (self._$el.is(STRINGS.PSEUDOS.FOCUS)) helpers.container.outOfTabFlow();
                                        else if (self.getContainer().find(STRINGS.ELEMENTS.ANCHOR).is(STRINGS.PSEUDOS.FOCUS)) {
                                            helpers.trigger.reverseFocus();
                                            return
                                        }
                                        helpers.container.immediateClose()
                                    },
                                    handleProfileKeyup: function(evt) {
                                        if (evt.keyCode === NUMBERS.ESC_KEY) helpers.trigger.reverseFocus()
                                    },
                                    handleProfileKeyDown: function(evt) {
                                        var target = $(evt.target),
                                            first = self.getContainer().find(STRINGS.ELEMENTS.ANCHOR + ':not([tabindex\x3d"-1"])').first(),
                                            last = self.getContainer().find(STRINGS.ELEMENTS.ANCHOR + ':not([tabindex\x3d"-1"])' + STRINGS.PSEUDOS.LAST);
                                        if (target.is(first) && evt.keyCode === NUMBERS.TAB_KEY && evt.shiftKey) {
                                            evt.preventDefault();
                                            helpers.trigger.reverseFocus()
                                        } else if (target.is(last) && evt.keyCode === NUMBERS.TAB_KEY && !evt.shiftKey) helpers.trigger.reverseFocus()
                                    },
                                    handleProfileEnter: function(evt) {
                                        flags.activeProfile = true
                                    },
                                    handleTriggerElBlur: function(evt) {
                                        if (flags.isShowing) self.getContainer().focus();
                                        else flags.activeTriggerEl = false
                                    },
                                    handleTriggerElEnter: function(evt) {
                                        if (flags.preventReShow) {
                                            flags.preventReShow = false;
                                            return
                                        }
                                        helpers.container.lazyBuild();
                                        flags.activeTriggerEl = true;
                                        if (evt && evt.type === STRINGS.EVENTS.FOCUSIN) return timers.show.start();
                                        return timers.show.start()
                                    },
                                    handleTriggerElExit: function(evt) {
                                        var dfr = new $.Deferred;
                                        helpers.container.lazyBuild();
                                        if (evt && evt.type === STRINGS.EVENTS.KEYUP && evt.keyCode === NUMBERS.ESC_KEY) {
                                            helpers.container.hideWithTriggerEl();
                                            return
                                        }
                                        if (evt && evt.type === STRINGS.EVENTS.KEYDOWN && evt.keyCode === NUMBERS.TAB_KEY && evt.shiftKey) {
                                            helpers.container.hideWithTriggerEl();
                                            return
                                        }
                                        if (evt && evt.type === STRINGS.EVENTS.FOCUSOUT) {
                                            helpers.events.handleTriggerElBlur(evt);
                                            return dfr.resolve().promise()
                                        }
                                        flags.activeTriggerEl = false;
                                        return timers.hide.start()
                                    }
                                },
                                profile: {
                                    name: null,
                                    addContent: function(content) {
                                        if (helpers.profile.get()) helpers.profile.get().html(content);
                                        else helpers.profile.set($(content))
                                    },
                                    build: function(content) {
                                        flags.alreadyFetched = true;
                                        helpers.profile.addContent(content);
                                        helpers.container.addProfile()
                                    },
                                    extractName: function(obj) {
                                        var keys = _.keys(obj),
                                            l = keys.length,
                                            i = 0,
                                            key, value, name;
                                        for (i; i < l; i++) {
                                            key = keys[i];
                                            value = obj[key];
                                            if (key === self._config.nameKey) {
                                                name = value;
                                                break
                                            }
                                            if (_.isObject(value)) name = helpers.profile.extractName(value)
                                        }
                                        return name
                                    },
                                    get: function() {
                                        return elements.$profile
                                    },
                                    getName: function() {
                                        return helpers.profile.name
                                    },
                                    initLoad: function() {
                                        return helpers.profile.load().then(helpers.profile.loadSuccess, function() {
                                            throw "profile failed to load";
                                        })
                                    },
                                    load: function() {
                                        var dfr = $.Deferred();
                                        if (flags.alreadyFetched) {
                                            helpers.container.addProfile();
                                            dfr.resolve();
                                            return dfr.promise()
                                        }
                                        return helpers.profile.loadFromServer().then(helpers.profile.build)
                                    },
                                    loadFromServer: function() {
                                        var url = self._$el.attr(self._config.urlAttribute);
                                        return $.ajax({
                                            type: "GET",
                                            url: url,
                                            headers: {
                                                "X-IsAJAXForm": 1
                                            },
                                            dataType: "json"
                                        }).then(helpers.profile.render, function(err) {
                                            throw err;
                                        })
                                    },
                                    loadSuccess: function() {
                                        var $container = self.getContainer();
                                        if (!$container.children().length) return;
                                        self.setTooltipDimensions(helpers.profile.get());
                                        self.calculatePosition($container, self._$el);
                                        helpers.caret.setPosition();
                                        helpers.container.show()
                                    },
                                    render: function(jsonData) {
                                        var templateName = self._config.templateName,
                                            dfr = $.Deferred(),
                                            encodedObject, profileName;
                                        encodedObject = helpers.data.encodeProfileData(jsonData);
                                        profileName = helpers.profile.extractName(encodedObject);
                                        helpers.profile.setName(profileName);
                                        dust.render(templateName, encodedObject, function(err, out) {
                                            if (err) dfr.reject(err);
                                            dfr.resolve(out)
                                        });
                                        return dfr.promise()
                                    },
                                    set: function($profileObj) {
                                        elements.$profile = $profileObj
                                    },
                                    setName: function(name) {
                                        helpers.profile.name = name
                                    }
                                },
                                trigger: {
                                    reverseFocus: function() {
                                        helpers.container.immediateClose();
                                        helpers.container.outOfTabFlow();
                                        flags.preventReShow = true;
                                        self._$el.focus()
                                    }
                                }
                            };
                            timers = {
                                show: {
                                    id: null,
                                    start: function(delay) {
                                        var dfr = $.Deferred(),
                                            timerDelay = self._config.showDelay;
                                        if (!_.isUndefined(delay) && !_.isNull(delay)) timerDelay = delay;
                                        timers.clearTimer(timers.show);
                                        timers.show.id = setTimeout(function() {
                                            timers.show.callback(dfr)
                                        }, timerDelay);
                                        return dfr.promise()
                                    },
                                    callback: function(dfr) {
                                        if (flags.activeTriggerEl) helpers.profile.initLoad().then(function() {
                                            dfr.resolve()
                                        }, function() {
                                            dfr.reject()
                                        });
                                        else dfr.resolve()
                                    }
                                },
                                hide: {
                                    id: null,
                                    start: function() {
                                        var dfr = $.Deferred();
                                        timers.clearAll();
                                        if (flags.activeProfile || !helpers.profile.get()) return dfr.resolve().promise();
                                        timers.hide.id = setTimeout(function() {
                                            timers.hide.callback(dfr)
                                        }, self._config.hideDelay);
                                        return dfr.promise()
                                    },
                                    callback: function(dfr) {
                                        if (!flags.activeProfile && !flags.activeTriggerEl) helpers.container.hide();
                                        dfr.resolve()
                                    }
                                },
                                clearTimer: function(timerObject) {
                                    clearTimeout(timerObject.id);
                                    timerObject.id = null
                                },
                                clearAll: function() {
                                    var keys = _.keys(timers),
                                        key, timer, l = keys.length;
                                    for (var i = 0; i < l; i++) {
                                        key = keys[i];
                                        timer = timers[key];
                                        if (_.isObject(timer)) timers.clearTimer(key)
                                    }
                                }
                            };
                            this.getContainer = helpers.container.get;
                            this.hide = helpers.events.handleTriggerElExit;
                            this.show = helpers.events.handleTriggerElEnter;
                            this.getID = helpers.data.getID
                        },
                        detachEventListeners: function() {
                            this.getContainer().off(STRINGS.EVENTS.MOUSEENTER).off(STRINGS.EVENTS.MOUSELEAVE)
                        }
                    };
                    publicAPI = {
                        beforeDecoration: baseControl.beforeDecoration,
                        detachEventListeners: baseControl.detachEventListeners
                    };
                    return publicAPI
                });
                Fiber.mixin(MiniProfilePopup, TooltipPosition);
                LIModules.exports("MiniProfilePopup", MiniProfilePopup)
            })();

            Inject.INTERNAL.executor.exec57.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/MiniProfilePopup", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMiniProfilePopup.js");
        try {
            Inject.INTERNAL.executor.exec57.innerFn.call(Inject.INTERNAL.executor.exec57.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec57.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FMiniProfilePopup.js

#55 JavaScript::Eval (size: 5891, repeated: 1)

Inject.INTERNAL.executor.exec58.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec58.innerFn = function() {
            // id: scripts/shared/TooltipManager uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FTooltipManager.js
            var module = Inject.INTERNAL.executor.exec58.module,
                require = Inject.INTERNAL.executor.exec58.require,
                define = Inject.INTERNAL.executor.exec58.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "scripts/shared/BaseControl", "scripts/shared/Mixins/TooltipPosition", "scripts/shared/MiniProfilePopup"], function($, _) {
                (function() {
                    var $ = LIModules.requires("jquery"),
                        _ = LIModules.requires("underscore"),
                        BaseControl = LIModules.requires("BaseControl"),
                        TooltipManager;
                    TooltipManager = BaseControl.extend(function(base) {
                        var STRINGS, NUMBERS, defaults, baseControl, publicAPI;
                        STRINGS = {
                            CLASSES: {
                                MINIPROFILE_SELECTOR: "miniprofile"
                            },
                            DEFAULT_CACHEKEY_ATTRIBUTE: "data-li-url",
                            EVENTS: {
                                MOUSEOVER: "mouseover",
                                MOUSEOUT: "mouseout",
                                MOUSEENTER: "mouseenter",
                                MOUSELEAVE: "mouseleave",
                                FOCUS: "focus",
                                BLUR: "blur",
                                FOCUSIN: "focusin",
                                FOCUSOUT: "focusout",
                                KEYUP: "keyup",
                                KEYDOWN: "keydown"
                            }
                        };
                        NUMBERS = {
                            ESC_KEY: 27,
                            TAB_KEY: 9
                        };
                        defaults = {
                            tooltipConfig: {},
                            triggerElSelector: "." + STRINGS.CLASSES.MINIPROFILE_SELECTOR,
                            cacheKeyAttribute: STRINGS.DEFAULT_CACHEKEY_ATTRIBUTE
                        };
                        baseControl = {
                            afterInit: function() {
                                if (!this._config.tooltipControl) throw "you must provide a tooltip JSControl to manage e.g. { tooltipControl: SomeCompatibleTooltipControl }";
                            },
                            attachEventListeners: function() {
                                var config = this._config,
                                    $parent = this._$el;
                                $parent.on(STRINGS.EVENTS.MOUSEOVER + " " + STRINGS.EVENTS.FOCUS, config.triggerElSelector, this.handleTriggerElementMouseOver);
                                $parent.on(STRINGS.EVENTS.MOUSEOUT + " " + STRINGS.EVENTS.BLUR, config.triggerElSelector, this.handleTriggerElementMouseOut);
                                $parent.on(STRINGS.EVENTS.KEYUP, config.triggerElSelector, this.handleKeyUp);
                                $parent.on(STRINGS.EVENTS.KEYDOWN, config.triggerElSelector, this.handleKeyDown)
                            },
                            detachEventListeners: function() {
                                var config = this._config,
                                    $parent = this._$el;
                                $parent.off(STRINGS.EVENTS.MOUSEOVER + " " + STRINGS.EVENTS.FOCUS, config.triggerElSelector, this.handleTriggerElementMouseOver);
                                $parent.off(STRINGS.EVENTS.MOUSEOUT + " " + STRINGS.EVENTS.BLUR, config.triggerElSelector, this.handleTriggerElementMouseOut);
                                $parent.off(STRINGS.EVENTS.KEYUP, config.triggerElSelector, this.handleKeyUp);
                                $parent.off(STRINGS.EVENTS.KEYDOWN, config.triggerElSelector, this.handleKeyDown)
                            },
                            beforeDecoration: function() {
                                var self, instances, tooltipCache, helpers;
                                self = this;
                                self._config = _.defaults(self._config, defaults);
                                instances = {
                                    $currentTrigger: null,
                                    lastTooltip: null
                                };
                                tooltipCache = {};
                                helpers = {
                                    cache: {
                                        isCached: function(cacheKey) {
                                            if (tooltipCache[cacheKey]) return true;
                                            return false
                                        },
                                        get: function(cacheKey) {
                                            return tooltipCache[cacheKey]
                                        },
                                        getCache: function() {
                                            return tooltipCache
                                        },
                                        set: function(cacheKey, tooltip) {
                                            tooltipCache[cacheKey] = tooltip
                                        }
                                    },
                                    events: {
                                        handleKeyDown: function(evt) {
                                            if (evt.keyCode === NUMBERS.TAB_KEY && evt.shiftKey) helpers.events.handleTriggerElementMouseOut(evt)
                                        },
                                        handleKeyUp: function(evt) {
                                            if (evt.keyCode === NUMBERS.ESC_KEY) helpers.events.handleTriggerElementMouseOut(evt)
                                        },
                                        handleTriggerElementMouseOut: function(evt) {
                                            var tooltip, triggerEl = $(evt.currentTarget),
                                                cacheKey = triggerEl.attr(self._config.cacheKeyAttribute);
                                            if (helpers.cache.isCached(cacheKey)) {
                                                tooltip = helpers.cache.get(cacheKey);
                                                tooltip.hide(evt)
                                            }
                                        },
                                        handleTriggerElementMouseOver: function(evt) {
                                            instances.$currentTrigger = $(evt.currentTarget);
                                            if (evt.type === STRINGS.EVENTS.FOCUSIN) helpers.tooltip.show(evt);
                                            else helpers.tooltip.hideLast(evt).then(helpers.tooltip.show(evt))
                                        }
                                    },
                                    tooltip: {
                                        hideLast: function(evt) {
                                            var dfr = new $.Deferred;
                                            if (instances.lastTooltip) return instances.lastTooltip.hide(evt);
                                            return dfr.resolve().promise()
                                        },
                                        init: function(cacheKey) {
                                            var tooltip, TooltipObj, config = self._config;
                                            TooltipObj = config.tooltipControl;
                                            tooltip = new TooltipObj(instances.$currentTrigger, config.tooltipConfig);
                                            helpers.cache.set(cacheKey, tooltip);
                                            return tooltip
                                        },
                                        show: function(evt) {
                                            var tooltip, cacheKey = instances.$currentTrigger.attr(self._config.cacheKeyAttribute);
                                            if (helpers.cache.isCached(cacheKey)) {
                                                tooltip = helpers.cache.get(cacheKey);
                                                tooltip._$el = instances.$currentTrigger
                                            } else tooltip = helpers.tooltip.init(cacheKey);
                                            instances.lastTooltip = tooltip;
                                            tooltip.show(evt)
                                        }
                                    }
                                };
                                if (window.tooltipManagerUnitTest) self.helpers = helpers;
                                this.getCache = helpers.cache.getCache;
                                this.handleTriggerElementMouseOver = helpers.events.handleTriggerElementMouseOver;
                                this.handleTriggerElementMouseOut = helpers.events.handleTriggerElementMouseOut;
                                this.handleKeyUp = helpers.events.handleKeyUp;
                                this.handleKeyDown = helpers.events.handleKeyDown
                            }
                        };
                        publicAPI = {
                            afterInit: baseControl.afterInit,
                            attachEventListeners: baseControl.attachEventListeners,
                            beforeDecoration: baseControl.beforeDecoration,
                            detachEventListeners: baseControl.detachEventListeners
                        };
                        return publicAPI
                    });
                    LIModules.exports("TooltipManager", TooltipManager)
                })();;
                if (typeof TooltipManager !== "undefined") {
                    module.setExports(TooltipManager);
                }
            });

            Inject.INTERNAL.executor.exec58.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/TooltipManager", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FTooltipManager.js");
        try {
            Inject.INTERNAL.executor.exec58.innerFn.call(Inject.INTERNAL.executor.exec58.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec58.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FTooltipManager.js

#56 JavaScript::Eval (size: 5570, repeated: 1)

Inject.INTERNAL.executor.exec59.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec59.innerFn = function() {
            // id: javascripts/news/controls/SAMLoader uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FSAMLoader.js
            var module = Inject.INTERNAL.executor.exec59.module,
                require = Inject.INTERNAL.executor.exec59.require,
                define = Inject.INTERNAL.executor.exec59.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["fiber", "underscore", "backbone", "jquery", "javascripts/news/stream/appConfig", "javascripts/util/DustUtils", "javascripts/util/EventUtils", "js/apps/pulse/PulseCommentsRefactor", "scripts/apps/megaphone/FetchAndInsert", "scripts/apps/megaphone/FetchAndInsertDust", "scripts/apps/megaphone/PulseCommentsLoader", "scripts/apps/megaphone/CommentViewToggle", "scripts/apps/megaphone/CurrentCommentSort", "js/apps/pulse/PulseSocial", "js/apps/pulse/InfiniteScroll", "js/apps/pulse/CommentsHeader", "scripts/apps/megaphone/TruncateComment", "scripts/apps/megaphone/TruncateCommentList", "js/util/MentionsDecorator", "scripts/shared/TooltipManager"], function(Fiber, _, Backbone, $, appConfig, DustUtils, EventUtils, PulseComments) {
                var parseFragment = LIModules.imports("Controls.parseFragment"),
                    env = LIModules.imports("environment"),
                    Mentions = LIModules.imports("Mentions"),
                    TooltipManager, MiniProfilePopup, miniProfile;
                var BEFORE_APPEND_EVENT_NAME = "beforeAppend",
                    AFTER_APPEND_EVENT_NAME = "afterAppend",
                    ANCHORTIME_OFFSET = 1,
                    SAMLoader;
                SAMLoader = Fiber.extend(function() {
                    return {
                        templateName: "tl/apps/pulse/embed/social_activity",
                        loadingClassName: "loading",
                        urlConfigName: "articleSocialSignals",
                        init: function(articleId, target, permLink) {
                            TooltipManager = LIModules.requires("TooltipManager");
                            MiniProfilePopup = LIModules.requires("MiniProfilePopup");
                            this.articleId = articleId;
                            this.articleId = permLink;
                            this.$target = $(target);
                            this._url = appConfig.getUrl(this.urlConfigName, {
                                articleId: articleId,
                                permLink: permLink
                            });
                            if (!appConfig.getLix("fauxLixHideMobileMiniProfile")) miniProfile = new TooltipManager(this.$target, {
                                tooltipControl: MiniProfilePopup,
                                triggerElSelector: ".new-miniprofile-container"
                            });
                            if (Mentions) this.mentions = new Mentions.Delegator(this.$target, {
                                isMegaphone: true,
                                mentionsTL: "tl/shared/mentions/mentions-play"
                            });
                            _.extend(this, Backbone.Events);
                            this.registerEvents()
                        },
                        registerEvents: function() {},
                        _appendSam: function(sam) {
                            this.trigger(BEFORE_APPEND_EVENT_NAME, sam);
                            this.$target.append(sam);
                            PulseComments.init(this.$target.get(0));
                            if (parseFragment) parseFragment(sam);
                            this.trigger(AFTER_APPEND_EVENT_NAME, sam)
                        },
                        load: function() {
                            var self = this,
                                href = document.location.href,
                                deepLinkCommentId = play.getUrlParameter(href, "deepLinkCommentId"),
                                anchorTime = play.getUrlParameter(href, "anchorTime"),
                                commentsSortDefaultLix = appConfig.getLix("commentsSortDefault"),
                                $comment, scrollToThis, defaultSort;
                            if (!this._renderPromise) {
                                this.$target.addClass(this.loadingClassName);
                                if (deepLinkCommentId && anchorTime) this._url += "\x26deepLinkCommentId\x3d" + deepLinkCommentId + "\x26anchorTime\x3d" + (parseInt(anchorTime, 10) + ANCHORTIME_OFFSET);
                                if (commentsSortDefaultLix && _.isArray(commentsSortDefaultLix) && _.contains(commentsSortDefaultLix, this.articleId)) switch (commentsSortDefaultLix[0]) {
                                case "newest":
                                    defaultSort = "rev_chron";
                                    break;
                                case "oldest":
                                    defaultSort = "chron";
                                    break;
                                default:
                                    defaultSort = "user_pref"
                                } else defaultSort = "user_pref";
                                this._xhrPromise = $.get(this._url, {
                                    sortBy: defaultSort
                                });
                                this._renderPromise = this._xhrPromise.then(function(json) {
                                    if (appConfig.getLix("fauxLixEnableArtDecoComments")) json.content.lix_enableShift1Design = "enabled";
                                    if (appConfig.getLix("fauxLixDisableRevisedSocialActions")) json.content.results.article_social_signals.lix_revisedSocialActions = "control";
                                    return DustUtils.renderDom(self.templateName, json.content).then(_.bind(self._appendSam, self)).then(function() {
                                        self.$target.removeClass(self.loadingClassName);
                                        if (deepLinkCommentId) {
                                            $comment = $("li[data-li-comment-id\x3d" + deepLinkCommentId + "]");
                                            scrollToThis = $comment.offset().top + $comment.outerHeight() - $(window).height();
                                            window.scrollTo(0, scrollToThis)
                                        }
                                    })
                                }).fail(function(e) {
                                    if (LI.log) LI.log(e.statusText, "Fetching SAMLoader data failed", "SAMLoader.js")
                                })
                            }
                            return this._renderPromise
                        },
                        cancel: function() {
                            if (this._xhrPromise && this._xhrPromise.state() === "pending") {
                                this._xhrPromise.abort();
                                this._xhrPromise = null;
                                this._renderPromise = null;
                                this.$target.removeClass(self.loadingClassName)
                            }
                        },
                        onBeforeAppend: EventUtils.buildEventBindingMethod(BEFORE_APPEND_EVENT_NAME),
                        onAfterAppend: EventUtils.buildEventBindingMethod(AFTER_APPEND_EVENT_NAME)
                    }
                });
                SAMLoader.BEFORE_APPEND_EVENT_NAME = BEFORE_APPEND_EVENT_NAME;
                SAMLoader.AFTER_APPEND_EVENT_NAME = AFTER_APPEND_EVENT_NAME;
                return SAMLoader
            });

            Inject.INTERNAL.executor.exec59.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/controls/SAMLoader", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FSAMLoader.js");
        try {
            Inject.INTERNAL.executor.exec59.innerFn.call(Inject.INTERNAL.executor.exec59.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec59.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FSAMLoader.js

#57 JavaScript::Eval (size: 1580, repeated: 1)

Inject.INTERNAL.executor.exec6.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec6.innerFn = function() {
            // id: javascripts/util/EventUtils uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FEventUtils.js
            var module = Inject.INTERNAL.executor.exec6.module,
                require = Inject.INTERNAL.executor.exec6.require,
                define = Inject.INTERNAL.executor.exec6.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore", "backbone"], function(_, Backbone) {
                return {
                    buildEventBindingMethod: function(eventName) {
                        return function(cb) {
                            if (this && this.on && typeof this.on === "function") this.on(eventName, cb)
                        }
                    },
                    getEventBus: function() {
                        return Backbone.Events
                    }
                }
            });

            Inject.INTERNAL.executor.exec6.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/util/EventUtils", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FEventUtils.js");
        try {
            Inject.INTERNAL.executor.exec6.innerFn.call(Inject.INTERNAL.executor.exec6.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec6.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Futil%2FEventUtils.js

#58 JavaScript::Eval (size: 3290, repeated: 1)

Inject.INTERNAL.executor.exec60.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec60.innerFn = function() {
            // id: javascripts/news/controls/CollapsedSAMLoader uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FCollapsedSAMLoader.js
            var module = Inject.INTERNAL.executor.exec60.module,
                require = Inject.INTERNAL.executor.exec60.require,
                define = Inject.INTERNAL.executor.exec60.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["underscore", "jquery", "javascripts/news/controls/SAMLoader", "javascripts/util/EventUtils"], function(_, $, SAMLoader, EventUtils) {
                var COLLAPSED_EVENT_NAME = "collapsed",
                    EXPANDED_EVENT_NAME = "expanded",
                    CollapsedSAMLoader;
                CollapsedSAMLoader = SAMLoader.extend(function() {
                    return {
                        collapsedCount: 2,
                        topLevelCommentSelector: "\x3e .comments \x3e .comment-list \x3e .comment-item",
                        topLevelSeeMoreSelector: "\x3e .comments \x3e .comment-list \x3e li:has(\x3e .comments-see-more)",
                        commentListSelector: "\x3e .comments \x3e .comment-list",
                        seeMoreTemplate: '\x3cli\x3e\x3ca href\x3d"javascript:void(0);" class\x3d"comments-see-more"\x3e\x3c%\x3d seeMoreText %\x3e\x3c/a\x3e\x3c/li\x3e',
                        seeMoreText: "Show More",
                        registerEvents: function() {
                            this.onBeforeAppend(_.bind(this.collapseCommentModule, this))
                        },
                        collapseCommentModule: function(sam) {
                            var $sam = $(sam),
                                $commentsToHide = this.getCommentsToHide($sam),
                                $currentSeeMore = $sam.find(this.topLevelSeeMoreSelector),
                                $commentList = $sam.find(this.commentListSelector),
                                $hidden, $newSeeMore;
                            if ($commentsToHide.length) {
                                $hidden = $commentsToHide.add($currentSeeMore).hide();
                                $newSeeMore = this.generateSeeMore();
                                $newSeeMore.one("click", _.bind(function(event) {
                                    event.stopPropagation();
                                    $hidden.show();
                                    $newSeeMore.remove();
                                    this.trigger(EXPANDED_EVENT_NAME)
                                }, this));
                                $commentList.append($newSeeMore)
                            }
                            this.trigger(COLLAPSED_EVENT_NAME, $commentsToHide)
                        },
                        generateSeeMore: function() {
                            return $(_.template(this.seeMoreTemplate, {
                                seeMoreText: this.seeMoreText
                            }))
                        },
                        getCommentsToHide: function($sam) {
                            return $(_.rest($sam.find(this.topLevelCommentSelector), this.collapsedCount))
                        },
                        onCollapsed: EventUtils.buildEventBindingMethod(COLLAPSED_EVENT_NAME),
                        onExpanded: EventUtils.buildEventBindingMethod(EXPANDED_EVENT_NAME)
                    }
                });
                CollapsedSAMLoader.COLLAPSED_EVENT_NAME = COLLAPSED_EVENT_NAME;
                CollapsedSAMLoader.EXPANDED_EVENT_NAME = EXPANDED_EVENT_NAME;
                return CollapsedSAMLoader
            });

            Inject.INTERNAL.executor.exec60.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/controls/CollapsedSAMLoader", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FCollapsedSAMLoader.js");
        try {
            Inject.INTERNAL.executor.exec60.innerFn.call(Inject.INTERNAL.executor.exec60.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec60.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FCollapsedSAMLoader.js

#59 JavaScript::Eval (size: 2361, repeated: 1)

Inject.INTERNAL.executor.exec61.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec61.innerFn = function() {
            // id: scripts/shared/utils/CookieManager uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FCookieManager.js
            var module = Inject.INTERNAL.executor.exec61.module,
                require = Inject.INTERNAL.executor.exec61.require,
                define = Inject.INTERNAL.executor.exec61.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var CookieManager = {
                    createCookie: function(name, value, days, domain, isSecure) {
                        var domainName = "",
                            secure = "",
                            expires, date;
                        if (days) {
                            date = new Date;
                            date.setTime(date.getTime() + days * 24 * 60 * 60 * 1E3);
                            expires = "; expires\x3d" + date.toGMTString()
                        } else expires = "";
                        if (domain) domainName = ";domain\x3d" + domain;
                        if (isSecure) secure = ";secure";
                        document.cookie = name + "\x3d" + value + expires + ";path\x3d/" + domainName + secure
                    },
                    readCookie: function(name) {
                        var nameEQ = name + "\x3d";
                        var ca = document.cookie.split(";");
                        for (var i = 0; i < ca.length; i++) {
                            var c = ca[i];
                            while (c.charAt(0) === " ") c = c.substring(1, c.length);
                            if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length)
                        }
                        return null
                    },
                    eraseCookie: function(name) {
                        CookieManager.createCookie(name, "", -1)
                    }
                };
                LIModules.exports("CookieManager", CookieManager);
                LIModules.exports("createCookie", CookieManager.createCookie);
                LIModules.exports("readCookie", CookieManager.readCookie);
                LIModules.exports("eraseCookie", CookieManager.eraseCookie)
            })();

            Inject.INTERNAL.executor.exec61.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/utils/CookieManager", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FCookieManager.js");
        try {
            Inject.INTERNAL.executor.exec61.innerFn.call(Inject.INTERNAL.executor.exec61.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec61.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FCookieManager.js

#60 JavaScript::Eval (size: 12243, repeated: 1)

Inject.INTERNAL.executor.exec62.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec62.innerFn = function() {
            // id: scripts/shared/HopscotchTourRunner uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchTourRunner.js
            var module = Inject.INTERNAL.executor.exec62.module,
                require = Inject.INTERNAL.executor.exec62.require,
                define = Inject.INTERNAL.executor.exec62.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function(require, LIModules) {
                var IS_VENUS_ENV = window.LI_JS_TEST,
                    $ = LIModules.requires("jquery"),
                    Inject = window.Inject,
                    i18n = LIModules.requires("i18n"),
                    jSecure = LIModules.imports("jSecure"),
                    Bidi = LIModules.imports("Bidi"),
                    NavTours = window.globalNav && window.globalNav.tourManager,
                    sanitizeUrl = jSecure && jSecure.sanitizeUrl ||
                function(url) {
                    return url
                }, CookieManager;
                try {
                    CookieManager = LIModules.requires("CookieManager")
                } catch (e) {
                    CookieManager = {
                        readCookie: LIModules.requires("readCookie"),
                        createCookie: LIModules.requires("createCookie"),
                        eraseCookie: LIModules.requires("eraseCookie")
                    }
                }
                var HopscotchTourRunner = function() {
                        var STORAGE_KEY_STATE = "li_hs",
                            STORAGE_KEY_ORIGIN_PAGE = STORAGE_KEY_STATE + "-origin-page",
                            STORAGE_KEY_DATA_URL = STORAGE_KEY_STATE + "-data-url",
                            STORAGE_KEY_REFRESH_RECOVERY = STORAGE_KEY_STATE + "-ref-recovery",
                            VAL_DISABLE = "disable",
                            HAS_SESSION_STORAGE = typeof window.sessionStorage !== "undefined",
                            COOKIE_DAYS_TO_LIVE = 30,
                            DEFAULT_STATE = {
                                step: 0,
                                samePage: true,
                                inProgress: false,
                                hasHelpers: false
                            },
                            _this = this;
                        _this.ERROR_CODES = {
                            INVALID_INPUT: "INVALID_INPUT",
                            MISSING_CONFIG: "NO_CFG",
                            RESOURCE_MISSING: "404_ERR",
                            HOPSCOTCH_FAIL: "HS_FAIL"
                        };
                        _this.isTourRunning = function() {
                            return _this.checkTourState() !== null
                        };
                        _this.checkTourState = function() {
                            var state = _getFromSessionStorage(STORAGE_KEY_STATE),
                                tourPair, dataUrl, refreshRecovery;
                            if (state) {
                                tourPair = state.split(":");
                                dataUrl = _validateDataUrl(_getFromSessionStorage(STORAGE_KEY_DATA_URL));
                                refreshRecovery = _getFromSessionStorage(STORAGE_KEY_REFRESH_RECOVERY);
                                return {
                                    tourId: tourPair[0],
                                    step: tourPair.length > 1 ? parseInt(tourPair[1], 10) : 0,
                                    dataUrl: dataUrl,
                                    disableRefresh: refreshRecovery === VAL_DISABLE
                                }
                            }
                            return null
                        };
                        _this.clearTourState = function() {
                            _deleteFromSessionStorage(STORAGE_KEY_STATE);
                            _deleteFromSessionStorage(STORAGE_KEY_DATA_URL);
                            _deleteFromSessionStorage(STORAGE_KEY_ORIGIN_PAGE);
                            _deleteFromSessionStorage(STORAGE_KEY_REFRESH_RECOVERY)
                        };
                        _this.registerTour = function(tour) {
                            var newNode, $newNode;
                            if (!tour || !tour.tourId || !tour.tourText) return _this.ERROR_CODES.INVALID_INPUT;
                            _this.tourCache[tour.tourId] = tour;
                            newNode = NavTours.register(tour);
                            if (!newNode) return _this.ERROR_CODES.RESOURCE_MISSING;
                            $newNode = $(newNode);
                            $newNode.on("click", _handleNavClick);
                            return "OK"
                        };
                        _this.startTour = function(tour, src, step) {
                            var cachedTour;
                            if (typeof tour === "object") if (tour.tourId) return _startTour(_defaults(tour, {
                                trkSrc: src,
                                step: step
                            }));
                            else if (tour.id) return _startTour({
                                tourData: tour,
                                trkSrc: src,
                                step: step
                            });
                            else return $.Deferred().reject(_this.ERROR_CODES.INVALID_INPUT);
                            else {
                                cachedTour = _this.tourCache[tour];
                                if (cachedTour) return _startTour(_defaults(cachedTour, {
                                    trkSrc: src,
                                    step: step
                                }));
                                else return _startTour({
                                    tourId: tour,
                                    trkSrc: src,
                                    step: step
                                })
                            }
                        };
                        _this.loadHopscotch = function() {
                            return _getHopscotch({
                                samePage: true
                            })
                        };

                        function _handleNavClick(evt) {
                            var $el = $(this),
                                tourId = $el.attr("id");
                            evt.preventDefault();
                            if (tourId) _this.startTour(tourId)
                        }
                        function _startTour(opts) {
                            opts = _defaults(opts, DEFAULT_STATE);
                            if (window.hopscotch && window.hopscotch.getCurrTour() !== null) window.hopscotch.endTour(true, false);
                            return _validateTourMeta(opts).then(function() {
                                return $.when(_getHopscotch(opts), _getTourData(opts), _savePreTourState(opts))
                            }).then(function() {
                                _getHelpers(opts).then(function() {
                                    _kickoff(opts)
                                })
                            })
                        }
                        function _validateTourMeta(opts) {
                            if (opts.samePage && !opts.tourData && !opts.dataUrl) if (opts.tourId) opts.dataUrl = "/chrome/quickhelp-" + opts.tourId.replace(/_/g, "-");
                            else return $.Deferred().reject(_this.ERROR_CODES.INVALID_INPUT);
                            else if (!opts.samePage && !opts.pageUrl) return $.Deferred().reject(_this.ERROR_CODES.INVALID_INPUT);
                            return $.Deferred().resolve()
                        }
                        function _getHopscotch(opts) {
                            if (!opts.samePage) return $.Deferred().resolve();
                            if (!window.HOPSCOTCH_JS_DEPS || !window.HOPSCOTCH_CSS_DEPS) return $.Deferred().reject(_this.ERROR_CODES.MISSING_CONFIG);
                            if (window.hopscotch) return _configureHopscotch();
                            if (_this.hsPromise) return _this.hsPromise;
                            _applyInjectRules();
                            _this.hsPromise = $.when(_tryToLoadDependencies(window.HOPSCOTCH_JS_DEPS), _tryToLoadCss(window.HOPSCOTCH_CSS_DEPS)).then(_configureHopscotch);
                            return _this.hsPromise
                        }
                        function _applyInjectRules() {
                            var jsDeps = window.HOPSCOTCH_JS_DEPS,
                                len = jsDeps.length,
                                augmentor, i;
                            if (!window.HOPSCOTCH_SCDS_JSPATH) return;
                            augmentor = function(path) {
                                return window.HOPSCOTCH_SCDS_JSPATH + "\x26f\x3d" + path
                            };
                            for (i = 0; i < len; i++) if (Inject.addRule) Inject.addRule(jsDeps[i], {
                                path: augmentor
                            });
                            else Inject.addFileRule(LI.JSContentBasePath + "\x26f\x3d" + jsDeps[i], augmentor)
                        }
                        function _configureHopscotch() {
                            var hsConfig = {
                                bubblePadding: 0,
                                isRtl: false,
                                onEnd: _this.clearTourState,
                                i18n: {
                                    nextBtn: i18n.get("QuickHelp-next"),
                                    prevBtn: i18n.get("QuickHelp-prev"),
                                    closeTooltip: i18n.get("QuickHelp-close"),
                                    skipBtn: i18n.get("QuickHelp-skip"),
                                    doneBtn: i18n.get("QuickHelp-done")
                                }
                            };
                            if (!window.hopscotch) return $.Deferred().reject(_this.ERROR_CODES.RESOURCE_MISSING);
                            if (Bidi) Bidi.applyWhenRTL(function() {
                                hsConfig.isRtl = true
                            });
                            window.hopscotch.configure(hsConfig).setCookieName(STORAGE_KEY_STATE);
                            return $.Deferred().resolve()
                        }
                        function _getHelpers(opts) {
                            var helpersFiles = [];
                            if (!opts.samePage) return $.Deferred().resolve();
                            if (!window.HOPSCOTCH_HELPERS_PATH) return $.Deferred().reject(_this.ERROR_CODES.RESOURCE_MISSING);
                            helpersFiles.push(window.HOPSCOTCH_HELPERS_PATH + "/li_hopscotch_helpers");
                            if (opts.hasHelpers || opts.tourData.hasHelpers) helpersFiles.push(window.HOPSCOTCH_HELPERS_PATH + "/" + opts.tourId + "_helpers");
                            return _tryToLoadDependencies(helpersFiles)
                        }
                        function _getTourData(opts) {
                            var def = $.Deferred();
                            if (opts.tourData || !opts.samePage) {
                                def.resolve();
                                return def
                            }
                            $.get(opts.dataUrl, {
                                renderServer: "rhino",
                                crossDomain: false
                            }).then(function(resp) {
                                if (typeof resp === "string") {
                                    resp = resp.replace(/(\\')/g, "'").replace(/(\\\/)/g, "/").replace(/(\\&)/g, "\x26");
                                    try {
                                        opts.tourData = JSON.parse(resp)
                                    } catch (e) {
                                        def.reject(_this.ERROR_CODES.RESOURCE_MISSING);
                                        return
                                    }
                                } else opts.tourData = resp.content || resp;
                                def.resolve()
                            }, function() {
                                def.reject(_this.ERROR_CODES.RESOURCE_MISSING)
                            });
                            return def
                        }
                        function _savePreTourState(opts) {
                            var scrollTop = 0,
                                originUrl;
                            if (!opts.inProgress) {
                                _this.clearTourState();
                                if (!opts.goBackUrl) scrollTop = typeof window.pageYOffset !== "undefined" ? window.pageYOffset : document.documentElement.scrollTop;
                                originUrl = opts.goBackUrl ? opts.goBackUrl : window.location.href;
                                _setToSessionStorage(STORAGE_KEY_ORIGIN_PAGE, originUrl + "::" + scrollTop);
                                if (opts.samePage && opts.disableRefresh) _setToSessionStorage(STORAGE_KEY_REFRESH_RECOVERY, VAL_DISABLE)
                            }
                            return $.Deferred().resolve()
                        }
                        function _kickoff(opts) {
                            if (opts.trkCode && opts.trkSrc) opts.trkCode = opts.trkCode + "_" + opts.trkSrc;
                            if (opts.samePage) {
                                if (opts.trkCode && !opts.inProgress && window.WebTracking) window.WebTracking.trackUserAction(opts.trkCode);
                                try {
                                    if (opts.step) window.hopscotch.startTour(opts.tourData, opts.step);
                                    else window.hopscotch.startTour(opts.tourData)
                                } catch (e) {
                                    return $.Deferred().reject(_this.ERROR_CODES.HOPSCOTCH_FAIL)
                                }
                            } else _redirectToTourPage(opts);
                            return $.Deferred().resolve()
                        }
                        function _redirectToTourPage(opts) {
                            var sourceTrk = opts.trkCode,
                                pageUrl = opts.pageUrl,
                                step = opts.step || 0;

                            function _redir(loc) {
                                if (!IS_VENUS_ENV) window.location = sanitizeUrl(loc);
                                else window.fakeLocation = loc
                            }
                            _setToSessionStorage(STORAGE_KEY_STATE, opts.tourId + ":" + step);
                            if (typeof pageUrl !== "string") if (pageUrl.length > step) pageUrl = pageUrl[step];
                            else {
                                opts.step = 0;
                                opts.pageUrl = pageUrl[0];
                                return _redirectToTourPage(opts)
                            }
                            if (sourceTrk && pageUrl.indexOf("?") !== -1) if (pageUrl.indexOf("trk\x3d") !== -1) {
                                pageUrl = pageUrl.replace(/(&|\?)trk=[^&]*/i, "$1trk\x3d" + sourceTrk + "\x26");
                                pageUrl = pageUrl.replace("\x26\x26", "\x26");
                                if (pageUrl.charAt(pageUrl.length - 1) === "\x26") pageUrl = pageUrl.substr(0, pageUrl.length - 1);
                                _redir(pageUrl)
                            } else _redir(pageUrl + "\x26trk\x3d" + sourceTrk);
                            else if (sourceTrk) _redir(pageUrl + "?trk\x3d" + sourceTrk);
                            else _redir(pageUrl)
                        }
                        function _getFromSessionStorage(key) {
                            var retval;
                            if (HAS_SESSION_STORAGE) {
                                retval = sessionStorage.getItem(key);
                                if (retval) return retval
                            }
                            return CookieManager.readCookie(key)
                        }

                        function _validateDataUrl(dataUrl) {
                            var localPattern = /^\/[^\/].*/i,
                                isUrlValid = localPattern.test(dataUrl);
                            if (typeof dataUrl === "string" && isUrlValid) return sanitizeUrl(dataUrl);
                            return null
                        }
                        function _setToSessionStorage(key, value) {
                            if (HAS_SESSION_STORAGE && _this.canWriteToSessionStorage) try {
                                sessionStorage.setItem(key, value)
                            } catch (e) {
                                _this.canWriteToSessionStorage = false;
                                _setToSessionStorage(key, value)
                            } else {
                                if (HAS_SESSION_STORAGE) sessionStorage.removeItem(key);
                                CookieManager.createCookie(key, value, COOKIE_DAYS_TO_LIVE)
                            }
                        }

                        function _deleteFromSessionStorage(key) {
                            if (HAS_SESSION_STORAGE) sessionStorage.removeItem(key);
                            CookieManager.eraseCookie(key)
                        }
                        function _defaults(obj, def) {
                            var prop;
                            if (typeof obj !== "object") return def;
                            for (prop in def) if (obj[prop] === void 0) obj[prop] = def[prop];
                            return obj
                        }
                        function _tryToLoadDependencies(deps) {
                            var def = $.Deferred();
                            if (!deps) {
                                def.resolve();
                                return def.promise()
                            }
                            try {
                                Inject.require.ensure(deps, function(require) {
                                    def.resolve(require)
                                })
                            } catch (e) {
                                return def.reject(_this.ERROR_CODES.RESOURCE_MISSING)
                            }
                            return def.promise()
                        }

                        function _tryToLoadCss(deps) {
                            var def = new $.Deferred;
                            try {
                                Inject.require.ensure(deps, function(require) {
                                    var len = deps.length,
                                        i;
                                    for (i = 0; i < len; i++) require(deps[i]).attach();
                                    def.resolve()
                                })
                            } catch (e) {
                                return def.reject(_this.ERROR_CODES.RESOURCE_MISSING)
                            }
                            return def.promise()
                        }
                        function _init() {
                            var tourState;
                            _this.tourCache = {};
                            _this.canWriteToSessionStorage = true;
                            _this.clearTourState()
                        }
                        _init()
                    };
                var hopscotchTourRunner = new HopscotchTourRunner;
                LIModules.exports("HopscotchTourRunner", hopscotchTourRunner);
                if (IS_VENUS_ENV) window.reinitTourRunner = function() {
                    hopscotchTourRunner = new HopscotchTourRunner;
                    LIModules.exports("HopscotchTourRunner", hopscotchTourRunner)
                };
                LIModules.exports("QuickHelpManager", {
                    startTour: function(tour, src, step) {
                        return hopscotchTourRunner.startTour(tour, src, step)
                    },
                    fetchAndStartTour: function(id, url) {
                        return hopscotchTourRunner.startTour({
                            tourId: id,
                            dataUrl: url
                        })
                    },
                    isReady: function() {
                        return true
                    },
                    loadHopscotch: function(callback, scope) {
                        return hopscotchTourRunner.loadHopscotch().then(function() {
                            if (callback) callback.call(scope)
                        })
                    },
                    tourRunning: function() {
                        return hopscotchTourRunner.isTourRunning()
                    }
                });
                if (!NavTours) NavTours = {
                    el: document.querySelector(".qh-page-tours"),
                    register: function(tour) {
                        tour = tour || {};
                        tour.tourText = tour.tourText || "TOUR_NAME";
                        tour.tourUrl = tour.tourUrl || "#";
                        tour.tourId = tour.tourId || "TOUR_ID";
                        this._hydrate(tour);
                        $(".help-center").removeClass("help-center").addClass("quick-help");
                        return this.el.querySelector("#" + tour.tourId)
                    },
                    _hydrate: function(options) {
                        var a = document.createElement("a"),
                            li = document.createElement("li");
                        this.currentFrag = document.createDocumentFragment();
                        a.href = sanitizeUrl(options.tourUrl);
                        a.textContent = options.tourText;
                        a.id = options.tourId;
                        a.className = "qh-tour-link";
                        li.appendChild(a);
                        this.currentFrag.appendChild(li);
                        this.fragCache = this.currentFrag.cloneNode(true);
                        this.el.appendChild(this.currentFrag)
                    }
                };
                if (IS_VENUS_ENV) {
                    window.test = {};
                    window.test.TourManager = NavTours
                }
            })(window.require, window.LIModules);

            Inject.INTERNAL.executor.exec62.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/HopscotchTourRunner", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchTourRunner.js");
        try {
            Inject.INTERNAL.executor.exec62.innerFn.call(Inject.INTERNAL.executor.exec62.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec62.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchTourRunner.js

#61 JavaScript::Eval (size: 4196, repeated: 1)

Inject.INTERNAL.executor.exec63.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec63.innerFn = function() {
            // id: scripts/shared/HopscotchCallout.js uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchCallout.js
            var module = Inject.INTERNAL.executor.exec63.module,
                require = Inject.INTERNAL.executor.exec63.require,
                define = Inject.INTERNAL.executor.exec63.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["scripts/shared/utils/CookieManager", "scripts/shared/HopscotchTourRunner"], function() {
                (function() {
                    var $ = LIModules.requires("jquery"),
                        HopscotchTourRunner = LIModules.imports("HopscotchTourRunner"),
                        HopscotchCallout;
                    HopscotchCallout = function(el, config) {
                        var KEYUP = "keyup",
                            ESC_KEY = 27,
                            defaults = {
                                showOn: "click",
                                orientation: "top",
                                target: el,
                                showNumber: false,
                                xOffset: 0,
                                yOffset: 0,
                                arrowOffset: 0,
                                zIndex: null,
                                width: null,
                                ctaLabel: null,
                                ctaOnClick: null,
                                onShow: null,
                                onClose: doClose,
                                openOnLoad: false,
                                isRtl: false
                            },
                            hopscotchCalloutConfig, $trigger = $(el),
                            $calloutElement;

                        function loadHopscotch() {
                            if (typeof HopscotchTourRunner === "object") return HopscotchTourRunner.loadHopscotch();
                            else if (typeof window.hopscotch === "object") return $.Deferred().resolve();
                            else return $.Deferred().reject()
                        }
                        config = $.extend(true, defaults, config);
                        hopscotchCalloutConfig = {
                            id: config.id,
                            title: config.title,
                            content: config.content,
                            orientation: config.orientation,
                            target: config.target,
                            showNumber: config.showNumber,
                            xOffset: config.xOffset,
                            yOffset: config.yOffset,
                            zindex: config.zIndex,
                            width: config.width,
                            bubblePadding: 0,
                            showCTAButton: !! config.ctaLabel,
                            ctaLabel: config.ctaLabel,
                            onCTA: config.ctaOnClick,
                            onShow: config.onShow,
                            onClose: config.onClose,
                            arrowOffset: config.arrowOffset,
                            isRtl: config.isRtl,
                            showOn: config.showOn
                        };

                        function updateConfigBidi() {
                            var Bidi = LIModules.imports("Bidi");
                            if (!hopscotchCalloutConfig.isRtl && Bidi) Bidi.applyWhenRTL(function() {
                                hopscotchCalloutConfig.isRtl = true
                            })
                        }
                        function focusCallout($el) {
                            $el.attr("tabindex", -1).focus()
                        }
                        function focusTrigger() {
                            $trigger.focus()
                        }
                        function setupAria() {
                            $trigger.attr("aria-haspopup", true)
                        }
                        function dettachEscEvent() {
                            $calloutElement.off(KEYUP)
                        }

                        function doClose() {
                            if (window.hopscotch) hopscotch.getCalloutManager().removeAllCallouts();
                            dettachEscEvent();
                            focusTrigger()
                        }
                        function attachEscEvent() {
                            $calloutElement.on(KEYUP, function(evt) {
                                if (evt.keyCode === ESC_KEY) config.onClose()
                            })
                        }
                        function doOpen(evt, targetEl) {
                            var calloutManager = null;
                            if (evt) evt.stopPropagation();
                            loadHopscotch().then(function() {
                                calloutManager = hopscotch.getCalloutManager();
                                calloutManager.removeAllCallouts();
                                if (targetEl) hopscotchCalloutConfig.target = evt.currentTarget;
                                updateConfigBidi();
                                calloutManager.createCallout(hopscotchCalloutConfig);
                                $calloutElement = $(calloutManager.getCallout(hopscotchCalloutConfig.id).element);
                                focusCallout($calloutElement);
                                attachEscEvent()
                            })
                        }
                        this.open = function(evt, targetEl, force) {
                            function validateOpen() {
                                if (HopscotchTourRunner.isTourRunning()) return;
                                doOpen(evt, targetEl)
                            }
                            if (force) doOpen(evt, targetEl);
                            else validateOpen()
                        };
                        this.close = function() {
                            config.onClose()
                        };
                        loadHopscotch();
                        setupAria();
                        if (config.openOnLoad) this.open();
                        else $(el).on(config.showOn, doOpen)
                    };
                    LIModules.exports("HopscotchCallout", HopscotchCallout)
                })();;
                if (typeof HopscotchCallout !== "undefined") {
                    module.setExports(HopscotchCallout);
                }
            });

            Inject.INTERNAL.executor.exec63.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/HopscotchCallout.js", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchCallout.js");
        try {
            Inject.INTERNAL.executor.exec63.innerFn.call(Inject.INTERNAL.executor.exec63.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec63.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FHopscotchCallout.js

#62 JavaScript::Eval (size: 6411, repeated: 1)

Inject.INTERNAL.executor.exec64.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec64.innerFn = function() {
            // id: scripts/shared/Dropdown uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDropdown.js
            var module = Inject.INTERNAL.executor.exec64.module,
                require = Inject.INTERNAL.executor.exec64.require,
                define = Inject.INTERNAL.executor.exec64.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "scripts/shared/BaseControl"], function($) {
                (function(LIModules) {
                    var $ = LIModules.requires("jquery"),
                        BaseControl = LIModules.requires("BaseControl"),
                        _ = LIModules.requires("underscore"),
                        Events = LIModules.requires("Events"),
                        DROPDOWN_OPEN_EVENT = "dropdown:open",
                        DROPDOWN_CLOSE_EVENT = "dropdown:close",
                        DROPDOWN_NEWITEMS = "dropdown:newitems",
                        DROPDOWN_EVT_NS = "li-dropdown",
                        Dropdown = BaseControl.extend(function(base) {
                            var CLICK = "click",
                                MOUSEOVER = "mouseover",
                                MOUSEOUT = "mouseout",
                                FOCUSIN = "focusin",
                                FOCUSOUT = "focusout",
                                MOUSEUP = "mouseup",
                                HOVER = "hover",
                                KEY = "keydown",
                                ENTER = 13,
                                ESC = 27,
                                SPACE = 32,
                                UP = 38,
                                DOWN = 40,
                                DEFAULT_CONFIG = {
                                    activeClass: "active",
                                    eventType: CLICK,
                                    mercyTime: 400,
                                    triggerSelector: null,
                                    dropdownMenuClass: "dropdown",
                                    focusClass: null
                                };
                            return {
                                beforeDecoration: function() {
                                    this._$document = $(document);
                                    this._mouseoutTimer = 0;
                                    this._config = $.extend({}, DEFAULT_CONFIG, this._config);
                                    this._isOpen = false;
                                    this._$listItems = [];
                                    this._$trigger = {};
                                    this._$dropMenu = {};
                                    this._currentItemIndex = -1;
                                    this.isMouseEvent = false;
                                    if (this._config.triggerSelector) this._$trigger = this._$el.find(this._config.triggerSelector);
                                    else {
                                        this._$trigger = this._$el.children("a");
                                        if (this._$trigger.length === 0) this._$trigger = this._$el.children("button")
                                    }
                                    this._isLegalEl = this._$trigger.length ? this._$trigger.is('a, button, input[type\x3d"button"]') : false;
                                    this._$dropMenu = this._$trigger.next();
                                    this._populateListItems();
                                    this._bootstrapAria()
                                },
                                attachEventListeners: function() {
                                    if (this._config.eventType === HOVER) this._$el.on(MOUSEOVER, this._handleMouseOverEvent).on(MOUSEOUT, this._handleMouseOutEvent);
                                    this._$trigger.on(CLICK + "." + DROPDOWN_EVT_NS, this._handleClickEvent).on(MOUSEUP, _.bind(this._setMouseUser, this, true));
                                    this._$el.on(KEY, this._handleKeyEvent);
                                    if (this._config.focusClass) this._$el.on(FOCUSIN, this._handleElFocusInEvent).on(FOCUSOUT, this._handleElFocusOutEvent);
                                    Events.on(DROPDOWN_NEWITEMS, this.bootstrapNewItems)
                                },
                                _bootstrapAria: function() {
                                    this._$trigger.attr({
                                        "tabindex": 0,
                                        "role": "button",
                                        "aria-expanded": false
                                    });
                                    this._bootstrapListItems();
                                    this._$dropMenu.attr("tabindex", -1)
                                },
                                _bootstrapListItems: function() {
                                    this._$listItems.attr("tabindex", 0)
                                },
                                bootstrapNewItems: function(evt) {
                                    this._populateListItems();
                                    this._bootstrapListItems()
                                },
                                _setMouseUser: function(isMouseEvent) {
                                    this.isMouseEvent = isMouseEvent
                                },
                                _populateListItems: function() {
                                    this._$listItems = this._$dropMenu.find("li, dd, dt")
                                },
                                _handleBodyClick: function(evt) {
                                    if (this._isOpen && this._$el.has(evt.target).length === 0) {
                                        this._setMouseUser(true);
                                        this.close()
                                    }
                                },
                                _focusNext: function() {
                                    var len = this._$listItems.length;
                                    if (len) {
                                        if (this._currentItemIndex < len - 1) this._currentItemIndex++;
                                        else this._currentItemIndex = 0;
                                        this._$listItems[this._currentItemIndex].focus()
                                    }
                                },
                                _focusPrevious: function() {
                                    var len = this._$listItems.length;
                                    if (len) {
                                        if (this._currentItemIndex > 0) this._currentItemIndex--;
                                        else this._currentItemIndex = len - 1;
                                        this._$listItems[this._currentItemIndex].focus()
                                    }
                                },
                                _handleKeyEvent: function(evt) {
                                    var key = evt.which,
                                        target = evt.target;
                                    switch (key) {
                                    case ENTER:
                                        if (!this._isLegalEl && $(target).is(this._$trigger)) this._$trigger.click();
                                        break;
                                    case SPACE:
                                        if (!this._isLegalEl && $(target).is(this._$trigger)) {
                                            evt.preventDefault();
                                            this._$trigger.click()
                                        }
                                        break;
                                    case ESC:
                                        if (this._isOpen) this.close();
                                        break;
                                    case DOWN:
                                        evt.preventDefault();
                                        this._focusNext();
                                        break;
                                    case UP:
                                        evt.preventDefault();
                                        this._focusPrevious();
                                        break;
                                    default:
                                        break
                                    }
                                },
                                open: function(evtNS) {
                                    var activeClass = this._config.activeClass;
                                    if (!this._isOpen) {
                                        this._$el.addClass(activeClass);
                                        this._$trigger.attr("aria-expanded", true);
                                        if (!this.isMouseEvent) this._$dropMenu.focus();
                                        this._$el.trigger(DROPDOWN_OPEN_EVENT, this);
                                        this._isOpen = true;
                                        if (evtNS !== DROPDOWN_EVT_NS) this._$document.on(CLICK, this._handleBodyClick)
                                    }
                                },
                                close: function(evtNS) {
                                    if (this._isOpen) {
                                        this._$el.removeClass(this._config.activeClass);
                                        this._$trigger.attr("aria-expanded", false);
                                        if (this._mouseoutTimer) window.clearTimeout(this._mouseoutTimer);
                                        if (!this.isMouseEvent) this._$trigger.focus();
                                        this._$el.trigger(DROPDOWN_CLOSE_EVENT, this);
                                        this._isOpen = false;
                                        this._currentItemIndex = -1;
                                        this._setMouseUser(false);
                                        if (evtNS !== DROPDOWN_EVT_NS) this._$document.off(CLICK, this._handleBodyClick)
                                    }
                                },
                                _handleElFocusInEvent: function(evt) {
                                    this._$el.addClass(this._config.focusClass)
                                },
                                _handleElFocusOutEvent: function(evt) {
                                    this._$el.removeClass(this._config.focusClass)
                                },
                                _handleClickEvent: function(evt) {
                                    var href;
                                    if (this._config.eventType === HOVER) {
                                        href = evt.target.href;
                                        if (href && href.indexOf("#") !== 0) return
                                    }
                                    evt.preventDefault();
                                    evt.stopPropagation();
                                    if (this._isOpen) this.close(evt.namespace);
                                    else this.open(evt.namespace)
                                },
                                _handleMouseOverEvent: function(evt) {
                                    this._setMouseUser(true);
                                    window.clearTimeout(this._mouseoutTimer);
                                    this.open()
                                },
                                _handleMouseOutEvent: function(evt) {
                                    var mercyTime = this._config.mercyTime,
                                        self = this;
                                    if (mercyTime > 0) this._mouseoutTimer = window.setTimeout(function() {
                                        self.close()
                                    }, mercyTime);
                                    else self.close()
                                }
                            }
                        });
                    Dropdown.EVENTS = {
                        OPEN: DROPDOWN_OPEN_EVENT,
                        CLOSE: DROPDOWN_CLOSE_EVENT,
                        NEW: DROPDOWN_NEWITEMS
                    };
                    LIModules.exports("Dropdown", Dropdown)
                })(window.LIModules);;
                if (typeof LI.Dropdown !== "undefined") {
                    module.setExports(LI.Dropdown);
                }
            });

            Inject.INTERNAL.executor.exec64.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/Dropdown", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDropdown.js");
        try {
            Inject.INTERNAL.executor.exec64.innerFn.call(Inject.INTERNAL.executor.exec64.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec64.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2FDropdown.js

#63 JavaScript::Eval (size: 67977, repeated: 1)

Inject.INTERNAL.executor.exec65.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec65.innerFn = function() {
            // id: lib/select2/3.5.2/select2.min uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fselect2%2F3.5.2%2Fselect2.min.js
            var module = Inject.INTERNAL.executor.exec65.module,
                require = Inject.INTERNAL.executor.exec65.require,
                define = Inject.INTERNAL.executor.exec65.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
/*
Copyright 2014 Igor Vaynberg

Version: 3.5.2 Timestamp: Sat Nov  1 14:43:36 EDT 2014

This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
General Public License version 2 (the "GPL License"). You may choose either license to govern your
use of this software only upon the condition that you accept all of the terms of either the Apache
License or the GPL License.

You may obtain a copy of the Apache License and the GPL License at:

http://www.apache.org/licenses/LICENSE-2.0
http://www.gnu.org/licenses/gpl-2.0.html

Unless required by applicable law or agreed to in writing, software distributed under the Apache License
or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the Apache License and the GPL License for the specific language governing
permissions and limitations under the Apache License and the GPL License.
*/
            !
            function(a) {
                "undefined" == typeof a.fn.each2 && a.extend(a.fn, {
                    each2: function(b) {
                        for (var c = a([0]), d = -1, e = this.length; ++d < e && (c.context = c[0] = this[d]) && b.call(c[0], d, c) !== !1;);
                        return this
                    }
                })
            }(jQuery), function(a, b) {
                "use strict";

                function n(b) {
                    var c = a(document.createTextNode(""));
                    b.before(c), c.before(b), c.remove()
                }
                function o(a) {
                    function b(a) {
                        return m[a] || a
                    }
                    return a.replace(/[^\u0000-\u007E]/g, b)
                }
                function p(a, b) {
                    for (var c = 0, d = b.length; d > c; c += 1) if (r(a, b[c])) return c;
                    return -1
                }
                function q() {
                    var b = a(l);
                    b.appendTo(document.body);
                    var c = {
                        width: b.width() - b[0].clientWidth,
                        height: b.height() - b[0].clientHeight
                    };
                    return b.remove(), c
                }
                function r(a, c) {
                    return a === c ? !0 : a === b || c === b ? !1 : null === a || null === c ? !1 : a.constructor === String ? a + "" == c + "" : c.constructor === String ? c + "" == a + "" : !1
                }
                function s(a, b, c) {
                    var d, e, f;
                    if (null === a || a.length < 1) return [];
                    for (d = a.split(b), e = 0, f = d.length; f > e; e += 1) d[e] = c(d[e]);
                    return d
                }
                function t(a) {
                    return a.outerWidth(!1) - a.width()
                }
                function u(c) {
                    var d = "keyup-change-value";
                    c.on("keydown", function() {
                        a.data(c, d) === b && a.data(c, d, c.val())
                    }), c.on("keyup", function() {
                        var e = a.data(c, d);
                        e !== b && c.val() !== e && (a.removeData(c, d), c.trigger("keyup-change"))
                    })
                }
                function v(c) {
                    c.on("mousemove", function(c) {
                        var d = h;
                        (d === b || d.x !== c.pageX || d.y !== c.pageY) && a(c.target).trigger("mousemove-filtered", c)
                    })
                }
                function w(a, c, d) {
                    d = d || b;
                    var e;
                    return function() {
                        var b = arguments;
                        window.clearTimeout(e), e = window.setTimeout(function() {
                            c.apply(d, b)
                        }, a)
                    }
                }
                function x(a, b) {
                    var c = w(a, function(a) {
                        b.trigger("scroll-debounced", a)
                    });
                    b.on("scroll", function(a) {
                        p(a.target, b.get()) >= 0 && c(a)
                    })
                }
                function y(a) {
                    a[0] !== document.activeElement && window.setTimeout(function() {
                        var d, b = a[0],
                            c = a.val().length;
                        a.focus();
                        var e = b.offsetWidth > 0 || b.offsetHeight > 0;
                        e && b === document.activeElement && (b.setSelectionRange ? b.setSelectionRange(c, c) : b.createTextRange && (d = b.createTextRange(), d.collapse(!1), d.select()))
                    }, 0)
                }
                function z(b) {
                    b = a(b)[0];
                    var c = 0,
                        d = 0;
                    if ("selectionStart" in b) c = b.selectionStart, d = b.selectionEnd - c;
                    else if ("selection" in document) {
                        b.focus();
                        var e = document.selection.createRange();
                        d = document.selection.createRange().text.length, e.moveStart("character", -b.value.length), c = e.text.length - d
                    }
                    return {
                        offset: c,
                        length: d
                    }
                }
                function A(a) {
                    a.preventDefault(), a.stopPropagation()
                }
                function B(a) {
                    a.preventDefault(), a.stopImmediatePropagation()
                }
                function C(b) {
                    if (!g) {
                        var c = b[0].currentStyle || window.getComputedStyle(b[0], null);
                        g = a(document.createElement("div")).css({
                            position: "absolute",
                            left: "-10000px",
                            top: "-10000px",
                            display: "none",
                            fontSize: c.fontSize,
                            fontFamily: c.fontFamily,
                            fontStyle: c.fontStyle,
                            fontWeight: c.fontWeight,
                            letterSpacing: c.letterSpacing,
                            textTransform: c.textTransform,
                            whiteSpace: "nowrap"
                        }), g.attr("class", "select2-sizer"), a(document.body).append(g)
                    }
                    return g.text(b.val()), g.width()
                }
                function D(b, c, d) {
                    var e, g, f = [];
                    e = a.trim(b.attr("class")), e && (e = "" + e, a(e.split(/\s+/)).each2(function() {
                        0 === this.indexOf("select2-") && f.push(this)
                    })), e = a.trim(c.attr("class")), e && (e = "" + e, a(e.split(/\s+/)).each2(function() {
                        0 !== this.indexOf("select2-") && (g = d(this), g && f.push(g))
                    })), b.attr("class", f.join(" "))
                }
                function E(a, b, c, d) {
                    var e = o(a.toUpperCase()).indexOf(o(b.toUpperCase())),
                        f = b.length;
                    return 0 > e ? (c.push(d(a)), void 0) : (c.push(d(a.substring(0, e))), c.push("<span class='select2-match'>"), c.push(d(a.substring(e, e + f))), c.push("</span>"), c.push(d(a.substring(e + f, a.length))), void 0)
                }
                function F(a) {
                    var b = {
                        "\\": "&#92;",
                        "&": "&amp;",
                        "<": "&lt;",
                        ">": "&gt;",
                        '"': "&quot;",
                        "'": "&#39;",
                        "/": "&#47;"
                    };
                    return String(a).replace(/[&<>"'\/\\]/g, function(a) {
                        return b[a]
                    })
                }
                function G(c) {
                    var d, e = null,
                        f = c.quietMillis || 100,
                        g = c.url,
                        h = this;
                    return function(i) {
                        window.clearTimeout(d), d = window.setTimeout(function() {
                            var d = c.data,
                                f = g,
                                j = c.transport || a.fn.select2.ajaxDefaults.transport,
                                k = {
                                    type: c.type || "GET",
                                    cache: c.cache || !1,
                                    jsonpCallback: c.jsonpCallback || b,
                                    dataType: c.dataType || "json"
                                },
                                l = a.extend({}, a.fn.select2.ajaxDefaults.params, k);
                            d = d ? d.call(h, i.term, i.page, i.context) : null, f = "function" == typeof f ? f.call(h, i.term, i.page, i.context) : f, e && "function" == typeof e.abort && e.abort(), c.params && (a.isFunction(c.params) ? a.extend(l, c.params.call(h)) : a.extend(l, c.params)), a.extend(l, {
                                url: f,
                                dataType: c.dataType,
                                data: d,
                                success: function(a) {
                                    var b = c.results(a, i.page, i);
                                    i.callback(b)
                                },
                                error: function(a, b, c) {
                                    var d = {
                                        hasError: !0,
                                        jqXHR: a,
                                        textStatus: b,
                                        errorThrown: c
                                    };
                                    i.callback(d)
                                }
                            }), e = j.call(h, l)
                        }, f)
                    }
                }
                function H(b) {
                    var d, e, c = b,
                        f = function(a) {
                            return "" + a.text
                        };
                    a.isArray(c) && (e = c, c = {
                        results: e
                    }), a.isFunction(c) === !1 && (e = c, c = function() {
                        return e
                    });
                    var g = c();
                    return g.text && (f = g.text, a.isFunction(f) || (d = g.text, f = function(a) {
                        return a[d]
                    })), function(b) {
                        var g, d = b.term,
                            e = {
                                results: []
                            };
                        return "" === d ? (b.callback(c()), void 0) : (g = function(c, e) {
                            var h, i;
                            if (c = c[0], c.children) {
                                h = {};
                                for (i in c) c.hasOwnProperty(i) && (h[i] = c[i]);
                                h.children = [], a(c.children).each2(function(a, b) {
                                    g(b, h.children)
                                }), (h.children.length || b.matcher(d, f(h), c)) && e.push(h)
                            } else b.matcher(d, f(c), c) && e.push(c)
                        }, a(c().results).each2(function(a, b) {
                            g(b, e.results)
                        }), b.callback(e), void 0)
                    }
                }
                function I(c) {
                    var d = a.isFunction(c);
                    return function(e) {
                        var f = e.term,
                            g = {
                                results: []
                            },
                            h = d ? c(e) : c;
                        a.isArray(h) && (a(h).each(function() {
                            var a = this.text !== b,
                                c = a ? this.text : this;
                            ("" === f || e.matcher(f, c)) && g.results.push(a ? this : {
                                id: this,
                                text: this
                            })
                        }), e.callback(g))
                    }
                }
                function J(b, c) {
                    if (a.isFunction(b)) return !0;
                    if (!b) return !1;
                    if ("string" == typeof b) return !0;
                    throw new Error(c + " must be a string, function, or falsy value")
                }
                function K(b, c) {
                    if (a.isFunction(b)) {
                        var d = Array.prototype.slice.call(arguments, 2);
                        return b.apply(c, d)
                    }
                    return b
                }
                function L(b) {
                    var c = 0;
                    return a.each(b, function(a, b) {
                        b.children ? c += L(b.children) : c++
                    }), c
                }
                function M(a, c, d, e) {
                    var h, i, j, k, l, f = a,
                        g = !1;
                    if (!e.createSearchChoice || !e.tokenSeparators || e.tokenSeparators.length < 1) return b;
                    for (;;) {
                        for (i = -1, j = 0, k = e.tokenSeparators.length; k > j && (l = e.tokenSeparators[j], i = a.indexOf(l), !(i >= 0)); j++);
                        if (0 > i) break;
                        if (h = a.substring(0, i), a = a.substring(i + l.length), h.length > 0 && (h = e.createSearchChoice.call(this, h, c), h !== b && null !== h && e.id(h) !== b && null !== e.id(h))) {
                            for (g = !1, j = 0, k = c.length; k > j; j++) if (r(e.id(h), e.id(c[j]))) {
                                g = !0;
                                break
                            }
                            g || d(h)
                        }
                    }
                    return f !== a ? a : void 0
                }
                function N() {
                    var b = this;
                    a.each(arguments, function(a, c) {
                        b[c].remove(), b[c] = null
                    })
                }
                function O(b, c) {
                    var d = function() {};
                    return d.prototype = new b, d.prototype.constructor = d, d.prototype.parent = b.prototype, d.prototype = a.extend(d.prototype, c), d
                }
                if (window.Select2 === b) {
                    var c, d, e, f, g, i, j, h = {
                        x: 0,
                        y: 0
                    },
                        k = {
                            TAB: 9,
                            ENTER: 13,
                            ESC: 27,
                            SPACE: 32,
                            LEFT: 37,
                            UP: 38,
                            RIGHT: 39,
                            DOWN: 40,
                            SHIFT: 16,
                            CTRL: 17,
                            ALT: 18,
                            PAGE_UP: 33,
                            PAGE_DOWN: 34,
                            HOME: 36,
                            END: 35,
                            BACKSPACE: 8,
                            DELETE: 46,
                            isArrow: function(a) {
                                switch (a = a.which ? a.which : a) {
                                case k.LEFT:
                                case k.RIGHT:
                                case k.UP:
                                case k.DOWN:
                                    return !0
                                }
                                return !1
                            },
                            isControl: function(a) {
                                var b = a.which;
                                switch (b) {
                                case k.SHIFT:
                                case k.CTRL:
                                case k.ALT:
                                    return !0
                                }
                                return a.metaKey ? !0 : !1
                            },
                            isFunctionKey: function(a) {
                                return a = a.which ? a.which : a, a >= 112 && 123 >= a
                            }
                        },
                        l = "<div class='select2-measure-scrollbar'></div>",
                        m = {
                            "\u24b6": "A",
                            "\uff21": "A",
                            "\xc0": "A",
                            "\xc1": "A",
                            "\xc2": "A",
                            "\u1ea6": "A",
                            "\u1ea4": "A",
                            "\u1eaa": "A",
                            "\u1ea8": "A",
                            "\xc3": "A",
                            "\u0100": "A",
                            "\u0102": "A",
                            "\u1eb0": "A",
                            "\u1eae": "A",
                            "\u1eb4": "A",
                            "\u1eb2": "A",
                            "\u0226": "A",
                            "\u01e0": "A",
                            "\xc4": "A",
                            "\u01de": "A",
                            "\u1ea2": "A",
                            "\xc5": "A",
                            "\u01fa": "A",
                            "\u01cd": "A",
                            "\u0200": "A",
                            "\u0202": "A",
                            "\u1ea0": "A",
                            "\u1eac": "A",
                            "\u1eb6": "A",
                            "\u1e00": "A",
                            "\u0104": "A",
                            "\u023a": "A",
                            "\u2c6f": "A",
                            "\ua732": "AA",
                            "\xc6": "AE",
                            "\u01fc": "AE",
                            "\u01e2": "AE",
                            "\ua734": "AO",
                            "\ua736": "AU",
                            "\ua738": "AV",
                            "\ua73a": "AV",
                            "\ua73c": "AY",
                            "\u24b7": "B",
                            "\uff22": "B",
                            "\u1e02": "B",
                            "\u1e04": "B",
                            "\u1e06": "B",
                            "\u0243": "B",
                            "\u0182": "B",
                            "\u0181": "B",
                            "\u24b8": "C",
                            "\uff23": "C",
                            "\u0106": "C",
                            "\u0108": "C",
                            "\u010a": "C",
                            "\u010c": "C",
                            "\xc7": "C",
                            "\u1e08": "C",
                            "\u0187": "C",
                            "\u023b": "C",
                            "\ua73e": "C",
                            "\u24b9": "D",
                            "\uff24": "D",
                            "\u1e0a": "D",
                            "\u010e": "D",
                            "\u1e0c": "D",
                            "\u1e10": "D",
                            "\u1e12": "D",
                            "\u1e0e": "D",
                            "\u0110": "D",
                            "\u018b": "D",
                            "\u018a": "D",
                            "\u0189": "D",
                            "\ua779": "D",
                            "\u01f1": "DZ",
                            "\u01c4": "DZ",
                            "\u01f2": "Dz",
                            "\u01c5": "Dz",
                            "\u24ba": "E",
                            "\uff25": "E",
                            "\xc8": "E",
                            "\xc9": "E",
                            "\xca": "E",
                            "\u1ec0": "E",
                            "\u1ebe": "E",
                            "\u1ec4": "E",
                            "\u1ec2": "E",
                            "\u1ebc": "E",
                            "\u0112": "E",
                            "\u1e14": "E",
                            "\u1e16": "E",
                            "\u0114": "E",
                            "\u0116": "E",
                            "\xcb": "E",
                            "\u1eba": "E",
                            "\u011a": "E",
                            "\u0204": "E",
                            "\u0206": "E",
                            "\u1eb8": "E",
                            "\u1ec6": "E",
                            "\u0228": "E",
                            "\u1e1c": "E",
                            "\u0118": "E",
                            "\u1e18": "E",
                            "\u1e1a": "E",
                            "\u0190": "E",
                            "\u018e": "E",
                            "\u24bb": "F",
                            "\uff26": "F",
                            "\u1e1e": "F",
                            "\u0191": "F",
                            "\ua77b": "F",
                            "\u24bc": "G",
                            "\uff27": "G",
                            "\u01f4": "G",
                            "\u011c": "G",
                            "\u1e20": "G",
                            "\u011e": "G",
                            "\u0120": "G",
                            "\u01e6": "G",
                            "\u0122": "G",
                            "\u01e4": "G",
                            "\u0193": "G",
                            "\ua7a0": "G",
                            "\ua77d": "G",
                            "\ua77e": "G",
                            "\u24bd": "H",
                            "\uff28": "H",
                            "\u0124": "H",
                            "\u1e22": "H",
                            "\u1e26": "H",
                            "\u021e": "H",
                            "\u1e24": "H",
                            "\u1e28": "H",
                            "\u1e2a": "H",
                            "\u0126": "H",
                            "\u2c67": "H",
                            "\u2c75": "H",
                            "\ua78d": "H",
                            "\u24be": "I",
                            "\uff29": "I",
                            "\xcc": "I",
                            "\xcd": "I",
                            "\xce": "I",
                            "\u0128": "I",
                            "\u012a": "I",
                            "\u012c": "I",
                            "\u0130": "I",
                            "\xcf": "I",
                            "\u1e2e": "I",
                            "\u1ec8": "I",
                            "\u01cf": "I",
                            "\u0208": "I",
                            "\u020a": "I",
                            "\u1eca": "I",
                            "\u012e": "I",
                            "\u1e2c": "I",
                            "\u0197": "I",
                            "\u24bf": "J",
                            "\uff2a": "J",
                            "\u0134": "J",
                            "\u0248": "J",
                            "\u24c0": "K",
                            "\uff2b": "K",
                            "\u1e30": "K",
                            "\u01e8": "K",
                            "\u1e32": "K",
                            "\u0136": "K",
                            "\u1e34": "K",
                            "\u0198": "K",
                            "\u2c69": "K",
                            "\ua740": "K",
                            "\ua742": "K",
                            "\ua744": "K",
                            "\ua7a2": "K",
                            "\u24c1": "L",
                            "\uff2c": "L",
                            "\u013f": "L",
                            "\u0139": "L",
                            "\u013d": "L",
                            "\u1e36": "L",
                            "\u1e38": "L",
                            "\u013b": "L",
                            "\u1e3c": "L",
                            "\u1e3a": "L",
                            "\u0141": "L",
                            "\u023d": "L",
                            "\u2c62": "L",
                            "\u2c60": "L",
                            "\ua748": "L",
                            "\ua746": "L",
                            "\ua780": "L",
                            "\u01c7": "LJ",
                            "\u01c8": "Lj",
                            "\u24c2": "M",
                            "\uff2d": "M",
                            "\u1e3e": "M",
                            "\u1e40": "M",
                            "\u1e42": "M",
                            "\u2c6e": "M",
                            "\u019c": "M",
                            "\u24c3": "N",
                            "\uff2e": "N",
                            "\u01f8": "N",
                            "\u0143": "N",
                            "\xd1": "N",
                            "\u1e44": "N",
                            "\u0147": "N",
                            "\u1e46": "N",
                            "\u0145": "N",
                            "\u1e4a": "N",
                            "\u1e48": "N",
                            "\u0220": "N",
                            "\u019d": "N",
                            "\ua790": "N",
                            "\ua7a4": "N",
                            "\u01ca": "NJ",
                            "\u01cb": "Nj",
                            "\u24c4": "O",
                            "\uff2f": "O",
                            "\xd2": "O",
                            "\xd3": "O",
                            "\xd4": "O",
                            "\u1ed2": "O",
                            "\u1ed0": "O",
                            "\u1ed6": "O",
                            "\u1ed4": "O",
                            "\xd5": "O",
                            "\u1e4c": "O",
                            "\u022c": "O",
                            "\u1e4e": "O",
                            "\u014c": "O",
                            "\u1e50": "O",
                            "\u1e52": "O",
                            "\u014e": "O",
                            "\u022e": "O",
                            "\u0230": "O",
                            "\xd6": "O",
                            "\u022a": "O",
                            "\u1ece": "O",
                            "\u0150": "O",
                            "\u01d1": "O",
                            "\u020c": "O",
                            "\u020e": "O",
                            "\u01a0": "O",
                            "\u1edc": "O",
                            "\u1eda": "O",
                            "\u1ee0": "O",
                            "\u1ede": "O",
                            "\u1ee2": "O",
                            "\u1ecc": "O",
                            "\u1ed8": "O",
                            "\u01ea": "O",
                            "\u01ec": "O",
                            "\xd8": "O",
                            "\u01fe": "O",
                            "\u0186": "O",
                            "\u019f": "O",
                            "\ua74a": "O",
                            "\ua74c": "O",
                            "\u01a2": "OI",
                            "\ua74e": "OO",
                            "\u0222": "OU",
                            "\u24c5": "P",
                            "\uff30": "P",
                            "\u1e54": "P",
                            "\u1e56": "P",
                            "\u01a4": "P",
                            "\u2c63": "P",
                            "\ua750": "P",
                            "\ua752": "P",
                            "\ua754": "P",
                            "\u24c6": "Q",
                            "\uff31": "Q",
                            "\ua756": "Q",
                            "\ua758": "Q",
                            "\u024a": "Q",
                            "\u24c7": "R",
                            "\uff32": "R",
                            "\u0154": "R",
                            "\u1e58": "R",
                            "\u0158": "R",
                            "\u0210": "R",
                            "\u0212": "R",
                            "\u1e5a": "R",
                            "\u1e5c": "R",
                            "\u0156": "R",
                            "\u1e5e": "R",
                            "\u024c": "R",
                            "\u2c64": "R",
                            "\ua75a": "R",
                            "\ua7a6": "R",
                            "\ua782": "R",
                            "\u24c8": "S",
                            "\uff33": "S",
                            "\u1e9e": "S",
                            "\u015a": "S",
                            "\u1e64": "S",
                            "\u015c": "S",
                            "\u1e60": "S",
                            "\u0160": "S",
                            "\u1e66": "S",
                            "\u1e62": "S",
                            "\u1e68": "S",
                            "\u0218": "S",
                            "\u015e": "S",
                            "\u2c7e": "S",
                            "\ua7a8": "S",
                            "\ua784": "S",
                            "\u24c9": "T",
                            "\uff34": "T",
                            "\u1e6a": "T",
                            "\u0164": "T",
                            "\u1e6c": "T",
                            "\u021a": "T",
                            "\u0162": "T",
                            "\u1e70": "T",
                            "\u1e6e": "T",
                            "\u0166": "T",
                            "\u01ac": "T",
                            "\u01ae": "T",
                            "\u023e": "T",
                            "\ua786": "T",
                            "\ua728": "TZ",
                            "\u24ca": "U",
                            "\uff35": "U",
                            "\xd9": "U",
                            "\xda": "U",
                            "\xdb": "U",
                            "\u0168": "U",
                            "\u1e78": "U",
                            "\u016a": "U",
                            "\u1e7a": "U",
                            "\u016c": "U",
                            "\xdc": "U",
                            "\u01db": "U",
                            "\u01d7": "U",
                            "\u01d5": "U",
                            "\u01d9": "U",
                            "\u1ee6": "U",
                            "\u016e": "U",
                            "\u0170": "U",
                            "\u01d3": "U",
                            "\u0214": "U",
                            "\u0216": "U",
                            "\u01af": "U",
                            "\u1eea": "U",
                            "\u1ee8": "U",
                            "\u1eee": "U",
                            "\u1eec": "U",
                            "\u1ef0": "U",
                            "\u1ee4": "U",
                            "\u1e72": "U",
                            "\u0172": "U",
                            "\u1e76": "U",
                            "\u1e74": "U",
                            "\u0244": "U",
                            "\u24cb": "V",
                            "\uff36": "V",
                            "\u1e7c": "V",
                            "\u1e7e": "V",
                            "\u01b2": "V",
                            "\ua75e": "V",
                            "\u0245": "V",
                            "\ua760": "VY",
                            "\u24cc": "W",
                            "\uff37": "W",
                            "\u1e80": "W",
                            "\u1e82": "W",
                            "\u0174": "W",
                            "\u1e86": "W",
                            "\u1e84": "W",
                            "\u1e88": "W",
                            "\u2c72": "W",
                            "\u24cd": "X",
                            "\uff38": "X",
                            "\u1e8a": "X",
                            "\u1e8c": "X",
                            "\u24ce": "Y",
                            "\uff39": "Y",
                            "\u1ef2": "Y",
                            "\xdd": "Y",
                            "\u0176": "Y",
                            "\u1ef8": "Y",
                            "\u0232": "Y",
                            "\u1e8e": "Y",
                            "\u0178": "Y",
                            "\u1ef6": "Y",
                            "\u1ef4": "Y",
                            "\u01b3": "Y",
                            "\u024e": "Y",
                            "\u1efe": "Y",
                            "\u24cf": "Z",
                            "\uff3a": "Z",
                            "\u0179": "Z",
                            "\u1e90": "Z",
                            "\u017b": "Z",
                            "\u017d": "Z",
                            "\u1e92": "Z",
                            "\u1e94": "Z",
                            "\u01b5": "Z",
                            "\u0224": "Z",
                            "\u2c7f": "Z",
                            "\u2c6b": "Z",
                            "\ua762": "Z",
                            "\u24d0": "a",
                            "\uff41": "a",
                            "\u1e9a": "a",
                            "\xe0": "a",
                            "\xe1": "a",
                            "\xe2": "a",
                            "\u1ea7": "a",
                            "\u1ea5": "a",
                            "\u1eab": "a",
                            "\u1ea9": "a",
                            "\xe3": "a",
                            "\u0101": "a",
                            "\u0103": "a",
                            "\u1eb1": "a",
                            "\u1eaf": "a",
                            "\u1eb5": "a",
                            "\u1eb3": "a",
                            "\u0227": "a",
                            "\u01e1": "a",
                            "\xe4": "a",
                            "\u01df": "a",
                            "\u1ea3": "a",
                            "\xe5": "a",
                            "\u01fb": "a",
                            "\u01ce": "a",
                            "\u0201": "a",
                            "\u0203": "a",
                            "\u1ea1": "a",
                            "\u1ead": "a",
                            "\u1eb7": "a",
                            "\u1e01": "a",
                            "\u0105": "a",
                            "\u2c65": "a",
                            "\u0250": "a",
                            "\ua733": "aa",
                            "\xe6": "ae",
                            "\u01fd": "ae",
                            "\u01e3": "ae",
                            "\ua735": "ao",
                            "\ua737": "au",
                            "\ua739": "av",
                            "\ua73b": "av",
                            "\ua73d": "ay",
                            "\u24d1": "b",
                            "\uff42": "b",
                            "\u1e03": "b",
                            "\u1e05": "b",
                            "\u1e07": "b",
                            "\u0180": "b",
                            "\u0183": "b",
                            "\u0253": "b",
                            "\u24d2": "c",
                            "\uff43": "c",
                            "\u0107": "c",
                            "\u0109": "c",
                            "\u010b": "c",
                            "\u010d": "c",
                            "\xe7": "c",
                            "\u1e09": "c",
                            "\u0188": "c",
                            "\u023c": "c",
                            "\ua73f": "c",
                            "\u2184": "c",
                            "\u24d3": "d",
                            "\uff44": "d",
                            "\u1e0b": "d",
                            "\u010f": "d",
                            "\u1e0d": "d",
                            "\u1e11": "d",
                            "\u1e13": "d",
                            "\u1e0f": "d",
                            "\u0111": "d",
                            "\u018c": "d",
                            "\u0256": "d",
                            "\u0257": "d",
                            "\ua77a": "d",
                            "\u01f3": "dz",
                            "\u01c6": "dz",
                            "\u24d4": "e",
                            "\uff45": "e",
                            "\xe8": "e",
                            "\xe9": "e",
                            "\xea": "e",
                            "\u1ec1": "e",
                            "\u1ebf": "e",
                            "\u1ec5": "e",
                            "\u1ec3": "e",
                            "\u1ebd": "e",
                            "\u0113": "e",
                            "\u1e15": "e",
                            "\u1e17": "e",
                            "\u0115": "e",
                            "\u0117": "e",
                            "\xeb": "e",
                            "\u1ebb": "e",
                            "\u011b": "e",
                            "\u0205": "e",
                            "\u0207": "e",
                            "\u1eb9": "e",
                            "\u1ec7": "e",
                            "\u0229": "e",
                            "\u1e1d": "e",
                            "\u0119": "e",
                            "\u1e19": "e",
                            "\u1e1b": "e",
                            "\u0247": "e",
                            "\u025b": "e",
                            "\u01dd": "e",
                            "\u24d5": "f",
                            "\uff46": "f",
                            "\u1e1f": "f",
                            "\u0192": "f",
                            "\ua77c": "f",
                            "\u24d6": "g",
                            "\uff47": "g",
                            "\u01f5": "g",
                            "\u011d": "g",
                            "\u1e21": "g",
                            "\u011f": "g",
                            "\u0121": "g",
                            "\u01e7": "g",
                            "\u0123": "g",
                            "\u01e5": "g",
                            "\u0260": "g",
                            "\ua7a1": "g",
                            "\u1d79": "g",
                            "\ua77f": "g",
                            "\u24d7": "h",
                            "\uff48": "h",
                            "\u0125": "h",
                            "\u1e23": "h",
                            "\u1e27": "h",
                            "\u021f": "h",
                            "\u1e25": "h",
                            "\u1e29": "h",
                            "\u1e2b": "h",
                            "\u1e96": "h",
                            "\u0127": "h",
                            "\u2c68": "h",
                            "\u2c76": "h",
                            "\u0265": "h",
                            "\u0195": "hv",
                            "\u24d8": "i",
                            "\uff49": "i",
                            "\xec": "i",
                            "\xed": "i",
                            "\xee": "i",
                            "\u0129": "i",
                            "\u012b": "i",
                            "\u012d": "i",
                            "\xef": "i",
                            "\u1e2f": "i",
                            "\u1ec9": "i",
                            "\u01d0": "i",
                            "\u0209": "i",
                            "\u020b": "i",
                            "\u1ecb": "i",
                            "\u012f": "i",
                            "\u1e2d": "i",
                            "\u0268": "i",
                            "\u0131": "i",
                            "\u24d9": "j",
                            "\uff4a": "j",
                            "\u0135": "j",
                            "\u01f0": "j",
                            "\u0249": "j",
                            "\u24da": "k",
                            "\uff4b": "k",
                            "\u1e31": "k",
                            "\u01e9": "k",
                            "\u1e33": "k",
                            "\u0137": "k",
                            "\u1e35": "k",
                            "\u0199": "k",
                            "\u2c6a": "k",
                            "\ua741": "k",
                            "\ua743": "k",
                            "\ua745": "k",
                            "\ua7a3": "k",
                            "\u24db": "l",
                            "\uff4c": "l",
                            "\u0140": "l",
                            "\u013a": "l",
                            "\u013e": "l",
                            "\u1e37": "l",
                            "\u1e39": "l",
                            "\u013c": "l",
                            "\u1e3d": "l",
                            "\u1e3b": "l",
                            "\u017f": "l",
                            "\u0142": "l",
                            "\u019a": "l",
                            "\u026b": "l",
                            "\u2c61": "l",
                            "\ua749": "l",
                            "\ua781": "l",
                            "\ua747": "l",
                            "\u01c9": "lj",
                            "\u24dc": "m",
                            "\uff4d": "m",
                            "\u1e3f": "m",
                            "\u1e41": "m",
                            "\u1e43": "m",
                            "\u0271": "m",
                            "\u026f": "m",
                            "\u24dd": "n",
                            "\uff4e": "n",
                            "\u01f9": "n",
                            "\u0144": "n",
                            "\xf1": "n",
                            "\u1e45": "n",
                            "\u0148": "n",
                            "\u1e47": "n",
                            "\u0146": "n",
                            "\u1e4b": "n",
                            "\u1e49": "n",
                            "\u019e": "n",
                            "\u0272": "n",
                            "\u0149": "n",
                            "\ua791": "n",
                            "\ua7a5": "n",
                            "\u01cc": "nj",
                            "\u24de": "o",
                            "\uff4f": "o",
                            "\xf2": "o",
                            "\xf3": "o",
                            "\xf4": "o",
                            "\u1ed3": "o",
                            "\u1ed1": "o",
                            "\u1ed7": "o",
                            "\u1ed5": "o",
                            "\xf5": "o",
                            "\u1e4d": "o",
                            "\u022d": "o",
                            "\u1e4f": "o",
                            "\u014d": "o",
                            "\u1e51": "o",
                            "\u1e53": "o",
                            "\u014f": "o",
                            "\u022f": "o",
                            "\u0231": "o",
                            "\xf6": "o",
                            "\u022b": "o",
                            "\u1ecf": "o",
                            "\u0151": "o",
                            "\u01d2": "o",
                            "\u020d": "o",
                            "\u020f": "o",
                            "\u01a1": "o",
                            "\u1edd": "o",
                            "\u1edb": "o",
                            "\u1ee1": "o",
                            "\u1edf": "o",
                            "\u1ee3": "o",
                            "\u1ecd": "o",
                            "\u1ed9": "o",
                            "\u01eb": "o",
                            "\u01ed": "o",
                            "\xf8": "o",
                            "\u01ff": "o",
                            "\u0254": "o",
                            "\ua74b": "o",
                            "\ua74d": "o",
                            "\u0275": "o",
                            "\u01a3": "oi",
                            "\u0223": "ou",
                            "\ua74f": "oo",
                            "\u24df": "p",
                            "\uff50": "p",
                            "\u1e55": "p",
                            "\u1e57": "p",
                            "\u01a5": "p",
                            "\u1d7d": "p",
                            "\ua751": "p",
                            "\ua753": "p",
                            "\ua755": "p",
                            "\u24e0": "q",
                            "\uff51": "q",
                            "\u024b": "q",
                            "\ua757": "q",
                            "\ua759": "q",
                            "\u24e1": "r",
                            "\uff52": "r",
                            "\u0155": "r",
                            "\u1e59": "r",
                            "\u0159": "r",
                            "\u0211": "r",
                            "\u0213": "r",
                            "\u1e5b": "r",
                            "\u1e5d": "r",
                            "\u0157": "r",
                            "\u1e5f": "r",
                            "\u024d": "r",
                            "\u027d": "r",
                            "\ua75b": "r",
                            "\ua7a7": "r",
                            "\ua783": "r",
                            "\u24e2": "s",
                            "\uff53": "s",
                            "\xdf": "s",
                            "\u015b": "s",
                            "\u1e65": "s",
                            "\u015d": "s",
                            "\u1e61": "s",
                            "\u0161": "s",
                            "\u1e67": "s",
                            "\u1e63": "s",
                            "\u1e69": "s",
                            "\u0219": "s",
                            "\u015f": "s",
                            "\u023f": "s",
                            "\ua7a9": "s",
                            "\ua785": "s",
                            "\u1e9b": "s",
                            "\u24e3": "t",
                            "\uff54": "t",
                            "\u1e6b": "t",
                            "\u1e97": "t",
                            "\u0165": "t",
                            "\u1e6d": "t",
                            "\u021b": "t",
                            "\u0163": "t",
                            "\u1e71": "t",
                            "\u1e6f": "t",
                            "\u0167": "t",
                            "\u01ad": "t",
                            "\u0288": "t",
                            "\u2c66": "t",
                            "\ua787": "t",
                            "\ua729": "tz",
                            "\u24e4": "u",
                            "\uff55": "u",
                            "\xf9": "u",
                            "\xfa": "u",
                            "\xfb": "u",
                            "\u0169": "u",
                            "\u1e79": "u",
                            "\u016b": "u",
                            "\u1e7b": "u",
                            "\u016d": "u",
                            "\xfc": "u",
                            "\u01dc": "u",
                            "\u01d8": "u",
                            "\u01d6": "u",
                            "\u01da": "u",
                            "\u1ee7": "u",
                            "\u016f": "u",
                            "\u0171": "u",
                            "\u01d4": "u",
                            "\u0215": "u",
                            "\u0217": "u",
                            "\u01b0": "u",
                            "\u1eeb": "u",
                            "\u1ee9": "u",
                            "\u1eef": "u",
                            "\u1eed": "u",
                            "\u1ef1": "u",
                            "\u1ee5": "u",
                            "\u1e73": "u",
                            "\u0173": "u",
                            "\u1e77": "u",
                            "\u1e75": "u",
                            "\u0289": "u",
                            "\u24e5": "v",
                            "\uff56": "v",
                            "\u1e7d": "v",
                            "\u1e7f": "v",
                            "\u028b": "v",
                            "\ua75f": "v",
                            "\u028c": "v",
                            "\ua761": "vy",
                            "\u24e6": "w",
                            "\uff57": "w",
                            "\u1e81": "w",
                            "\u1e83": "w",
                            "\u0175": "w",
                            "\u1e87": "w",
                            "\u1e85": "w",
                            "\u1e98": "w",
                            "\u1e89": "w",
                            "\u2c73": "w",
                            "\u24e7": "x",
                            "\uff58": "x",
                            "\u1e8b": "x",
                            "\u1e8d": "x",
                            "\u24e8": "y",
                            "\uff59": "y",
                            "\u1ef3": "y",
                            "\xfd": "y",
                            "\u0177": "y",
                            "\u1ef9": "y",
                            "\u0233": "y",
                            "\u1e8f": "y",
                            "\xff": "y",
                            "\u1ef7": "y",
                            "\u1e99": "y",
                            "\u1ef5": "y",
                            "\u01b4": "y",
                            "\u024f": "y",
                            "\u1eff": "y",
                            "\u24e9": "z",
                            "\uff5a": "z",
                            "\u017a": "z",
                            "\u1e91": "z",
                            "\u017c": "z",
                            "\u017e": "z",
                            "\u1e93": "z",
                            "\u1e95": "z",
                            "\u01b6": "z",
                            "\u0225": "z",
                            "\u0240": "z",
                            "\u2c6c": "z",
                            "\ua763": "z",
                            "\u0386": "\u0391",
                            "\u0388": "\u0395",
                            "\u0389": "\u0397",
                            "\u038a": "\u0399",
                            "\u03aa": "\u0399",
                            "\u038c": "\u039f",
                            "\u038e": "\u03a5",
                            "\u03ab": "\u03a5",
                            "\u038f": "\u03a9",
                            "\u03ac": "\u03b1",
                            "\u03ad": "\u03b5",
                            "\u03ae": "\u03b7",
                            "\u03af": "\u03b9",
                            "\u03ca": "\u03b9",
                            "\u0390": "\u03b9",
                            "\u03cc": "\u03bf",
                            "\u03cd": "\u03c5",
                            "\u03cb": "\u03c5",
                            "\u03b0": "\u03c5",
                            "\u03c9": "\u03c9",
                            "\u03c2": "\u03c3"
                        };
                    i = a(document), f = function() {
                        var a = 1;
                        return function() {
                            return a++
                        }
                    }(), c = O(Object, {
                        bind: function(a) {
                            var b = this;
                            return function() {
                                a.apply(b, arguments)
                            }
                        },
                        init: function(c) {
                            var d, e, g = ".select2-results";
                            this.opts = c = this.prepareOpts(c), this.id = c.id, c.element.data("select2") !== b && null !== c.element.data("select2") && c.element.data("select2").destroy(), this.container = this.createContainer(), this.liveRegion = a(".select2-hidden-accessible"), 0 == this.liveRegion.length && (this.liveRegion = a("<span>", {
                                role: "status",
                                "aria-live": "polite"
                            }).addClass("select2-hidden-accessible").appendTo(document.body)), this.containerId = "s2id_" + (c.element.attr("id") || "autogen" + f()), this.containerEventName = this.containerId.replace(/([.])/g, "_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, "\\$1"), this.container.attr("id", this.containerId), this.container.attr("title", c.element.attr("title")), this.body = a(document.body), D(this.container, this.opts.element, this.opts.adaptContainerCssClass), this.container.attr("style", c.element.attr("style")), this.container.css(K(c.containerCss, this.opts.element)), this.container.addClass(K(c.containerCssClass, this.opts.element)), this.elementTabIndex = this.opts.element.attr("tabindex"), this.opts.element.data("select2", this).attr("tabindex", "-1").before(this.container).on("click.select2", A), this.container.data("select2", this), this.dropdown = this.container.find(".select2-drop"), D(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass), this.dropdown.addClass(K(c.dropdownCssClass, this.opts.element)), this.dropdown.data("select2", this), this.dropdown.on("click", A), this.results = d = this.container.find(g), this.search = e = this.container.find("input.select2-input"), this.queryCount = 0, this.resultsPage = 0, this.context = null, this.initContainer(), this.container.on("click", A), v(this.results), this.dropdown.on("mousemove-filtered", g, this.bind(this.highlightUnderEvent)), this.dropdown.on("touchstart touchmove touchend", g, this.bind(function(a) {
                                this._touchEvent = !0, this.highlightUnderEvent(a)
                            })), this.dropdown.on("touchmove", g, this.bind(this.touchMoved)), this.dropdown.on("touchstart touchend", g, this.bind(this.clearTouchMoved)), this.dropdown.on("click", this.bind(function() {
                                this._touchEvent && (this._touchEvent = !1, this.selectHighlighted())
                            })), x(80, this.results), this.dropdown.on("scroll-debounced", g, this.bind(this.loadMoreIfNeeded)), a(this.container).on("change", ".select2-input", function(a) {
                                a.stopPropagation()
                            }), a(this.dropdown).on("change", ".select2-input", function(a) {
                                a.stopPropagation()
                            }), a.fn.mousewheel && d.mousewheel(function(a, b, c, e) {
                                var f = d.scrollTop();
                                e > 0 && 0 >= f - e ? (d.scrollTop(0), A(a)) : 0 > e && d.get(0).scrollHeight - d.scrollTop() + e <= d.height() && (d.scrollTop(d.get(0).scrollHeight - d.height()), A(a))
                            }), u(e), e.on("keyup-change input paste", this.bind(this.updateResults)), e.on("focus", function() {
                                e.addClass("select2-focused")
                            }), e.on("blur", function() {
                                e.removeClass("select2-focused")
                            }), this.dropdown.on("mouseup", g, this.bind(function(b) {
                                a(b.target).closest(".select2-result-selectable").length > 0 && (this.highlightUnderEvent(b), this.selectHighlighted(b))
                            })), this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function(a) {
                                a.stopPropagation()
                            }), this.nextSearchTerm = b, a.isFunction(this.opts.initSelection) && (this.initSelection(), this.monitorSource()), null !== c.maximumInputLength && this.search.attr("maxlength", c.maximumInputLength);
                            var h = c.element.prop("disabled");
                            h === b && (h = !1), this.enable(!h);
                            var i = c.element.prop("readonly");
                            i === b && (i = !1), this.readonly(i), j = j || q(), this.autofocus = c.element.prop("autofocus"), c.element.prop("autofocus", !1), this.autofocus && this.focus(), this.search.attr("placeholder", c.searchInputPlaceholder)
                        },
                        destroy: function() {
                            var a = this.opts.element,
                                c = a.data("select2"),
                                d = this;
                            this.close(), a.length && a[0].detachEvent && d._sync && a.each(function() {
                                d._sync && this.detachEvent("onpropertychange", d._sync)
                            }), this.propertyObserver && (this.propertyObserver.disconnect(), this.propertyObserver = null), this._sync = null, c !== b && (c.container.remove(), c.liveRegion.remove(), c.dropdown.remove(), a.show().removeData("select2").off(".select2").prop("autofocus", this.autofocus || !1), this.elementTabIndex ? a.attr({
                                tabindex: this.elementTabIndex
                            }) : a.removeAttr("tabindex"), a.show()), N.call(this, "container", "liveRegion", "dropdown", "results", "search")
                        },
                        optionToData: function(a) {
                            return a.is("option") ? {
                                id: a.prop("value"),
                                text: a.text(),
                                element: a.get(),
                                css: a.attr("class"),
                                disabled: a.prop("disabled"),
                                locked: r(a.attr("locked"), "locked") || r(a.data("locked"), !0)
                            } : a.is("optgroup") ? {
                                text: a.attr("label"),
                                children: [],
                                element: a.get(),
                                css: a.attr("class")
                            } : void 0
                        },
                        prepareOpts: function(c) {
                            var d, e, g, h, i = this;
                            if (d = c.element, "select" === d.get(0).tagName.toLowerCase() && (this.select = e = c.element), e && a.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function() {
                                if (this in c) throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.")
                            }), c = a.extend({}, {
                                populateResults: function(d, e, g) {
                                    var h, j = this.opts.id,
                                        k = this.liveRegion;
                                    h = function(d, e, l) {
                                        var m, n, o, p, q, r, s, t, u, v;
                                        d = c.sortResults(d, e, g);
                                        var w = [];
                                        for (m = 0, n = d.length; n > m; m += 1) o = d[m], q = o.disabled === !0, p = !q && j(o) !== b, r = o.children && o.children.length > 0, s = a("<li></li>"), s.addClass("select2-results-dept-" + l), s.addClass("select2-result"), s.addClass(p ? "select2-result-selectable" : "select2-result-unselectable"), q && s.addClass("select2-disabled"), r && s.addClass("select2-result-with-children"), s.addClass(i.opts.formatResultCssClass(o)), s.attr("role", "presentation"), t = a(document.createElement("div")), t.addClass("select2-result-label"), t.attr("id", "select2-result-label-" + f()), t.attr("role", "option"), v = c.formatResult(o, t, g, i.opts.escapeMarkup), v !== b && (t.html(v), s.append(t)), r && (u = a("<ul></ul>"), u.addClass("select2-result-sub"), h(o.children, u, l + 1), s.append(u)), s.data("select2-data", o), w.push(s[0]);
                                        e.append(w), k.text(c.formatMatches(d.length))
                                    }, h(e, d, 0)
                                }
                            }, a.fn.select2.defaults, c), "function" != typeof c.id && (g = c.id, c.id = function(a) {
                                return a[g]
                            }), a.isArray(c.element.data("select2Tags"))) {
                                if ("tags" in c) throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + c.element.attr("id");
                                c.tags = c.element.data("select2Tags")
                            }
                            if (e ? (c.query = this.bind(function(a) {
                                var f, g, h, c = {
                                    results: [],
                                    more: !1
                                },
                                    e = a.term;
                                h = function(b, c) {
                                    var d;
                                    b.is("option") ? a.matcher(e, b.text(), b) && c.push(i.optionToData(b)) : b.is("optgroup") && (d = i.optionToData(b), b.children().each2(function(a, b) {
                                        h(b, d.children)
                                    }), d.children.length > 0 && c.push(d))
                                }, f = d.children(), this.getPlaceholder() !== b && f.length > 0 && (g = this.getPlaceholderOption(), g && (f = f.not(g))), f.each2(function(a, b) {
                                    h(b, c.results)
                                }), a.callback(c)
                            }), c.id = function(a) {
                                return a.id
                            }) : "query" in c || ("ajax" in c ? (h = c.element.data("ajax-url"), h && h.length > 0 && (c.ajax.url = h), c.query = G.call(c.element, c.ajax)) : "data" in c ? c.query = H(c.data) : "tags" in c && (c.query = I(c.tags), c.createSearchChoice === b && (c.createSearchChoice = function(b) {
                                return {
                                    id: a.trim(b),
                                    text: a.trim(b)
                                }
                            }), c.initSelection === b && (c.initSelection = function(b, d) {
                                var e = [];
                                a(s(b.val(), c.separator, c.transformVal)).each(function() {
                                    var b = {
                                        id: this,
                                        text: this
                                    },
                                        d = c.tags;
                                    a.isFunction(d) && (d = d()), a(d).each(function() {
                                        return r(this.id, b.id) ? (b = this, !1) : void 0
                                    }), e.push(b)
                                }), d(e)
                            }))), "function" != typeof c.query) throw "query function not defined for Select2 " + c.element.attr("id");
                            if ("top" === c.createSearchChoicePosition) c.createSearchChoicePosition = function(a, b) {
                                a.unshift(b)
                            };
                            else if ("bottom" === c.createSearchChoicePosition) c.createSearchChoicePosition = function(a, b) {
                                a.push(b)
                            };
                            else if ("function" != typeof c.createSearchChoicePosition) throw "invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";
                            return c
                        },
                        monitorSource: function() {
                            var d, c = this.opts.element,
                                e = this;
                            c.on("change.select2", this.bind(function() {
                                this.opts.element.data("select2-change-triggered") !== !0 && this.initSelection()
                            })), this._sync = this.bind(function() {
                                var a = c.prop("disabled");
                                a === b && (a = !1), this.enable(!a);
                                var d = c.prop("readonly");
                                d === b && (d = !1), this.readonly(d), this.container && (D(this.container, this.opts.element, this.opts.adaptContainerCssClass), this.container.addClass(K(this.opts.containerCssClass, this.opts.element))), this.dropdown && (D(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass), this.dropdown.addClass(K(this.opts.dropdownCssClass, this.opts.element)))
                            }), c.length && c[0].attachEvent && c.each(function() {
                                this.attachEvent("onpropertychange", e._sync)
                            }), d = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver, d !== b && (this.propertyObserver && (delete this.propertyObserver, this.propertyObserver = null), this.propertyObserver = new d(function(b) {
                                a.each(b, e._sync)
                            }), this.propertyObserver.observe(c.get(0), {
                                attributes: !0,
                                subtree: !1
                            }))
                        },
                        triggerSelect: function(b) {
                            var c = a.Event("select2-selecting", {
                                val: this.id(b),
                                object: b,
                                choice: b
                            });
                            return this.opts.element.trigger(c), !c.isDefaultPrevented()
                        },
                        triggerChange: function(b) {
                            b = b || {}, b = a.extend({}, b, {
                                type: "change",
                                val: this.val()
                            }), this.opts.element.data("select2-change-triggered", !0), this.opts.element.trigger(b), this.opts.element.data("select2-change-triggered", !1), this.opts.element.click(), this.opts.blurOnChange && this.opts.element.blur()
                        },
                        isInterfaceEnabled: function() {
                            return this.enabledInterface === !0
                        },
                        enableInterface: function() {
                            var a = this._enabled && !this._readonly,
                                b = !a;
                            return a === this.enabledInterface ? !1 : (this.container.toggleClass("select2-container-disabled", b), this.close(), this.enabledInterface = a, !0)
                        },
                        enable: function(a) {
                            a === b && (a = !0), this._enabled !== a && (this._enabled = a, this.opts.element.prop("disabled", !a), this.enableInterface())
                        },
                        disable: function() {
                            this.enable(!1)
                        },
                        readonly: function(a) {
                            a === b && (a = !1), this._readonly !== a && (this._readonly = a, this.opts.element.prop("readonly", a), this.enableInterface())
                        },
                        opened: function() {
                            return this.container ? this.container.hasClass("select2-dropdown-open") : !1
                        },
                        positionDropdown: function() {
                            var v, w, x, y, z, b = this.dropdown,
                                c = this.container,
                                d = c.offset(),
                                e = c.outerHeight(!1),
                                f = c.outerWidth(!1),
                                g = b.outerHeight(!1),
                                h = a(window),
                                i = h.width(),
                                k = h.height(),
                                l = h.scrollLeft() + i,
                                m = h.scrollTop() + k,
                                n = d.top + e,
                                o = d.left,
                                p = m >= n + g,
                                q = d.top - g >= h.scrollTop(),
                                r = b.outerWidth(!1),
                                s = function() {
                                    return l >= o + r
                                },
                                t = function() {
                                    return d.left + l + c.outerWidth(!1) > r
                                },
                                u = b.hasClass("select2-drop-above");
                            u ? (w = !0, !q && p && (x = !0, w = !1)) : (w = !1, !p && q && (x = !0, w = !0)), x && (b.hide(), d = this.container.offset(), e = this.container.outerHeight(!1), f = this.container.outerWidth(!1), g = b.outerHeight(!1), l = h.scrollLeft() + i, m = h.scrollTop() + k, n = d.top + e, o = d.left, r = b.outerWidth(!1), b.show(), this.focusSearch()), this.opts.dropdownAutoWidth ? (z = a(".select2-results", b)[0], b.addClass("select2-drop-auto-width"), b.css("width", ""), r = b.outerWidth(!1) + (z.scrollHeight === z.clientHeight ? 0 : j.width), r > f ? f = r : r = f, g = b.outerHeight(!1)) : this.container.removeClass("select2-drop-auto-width"), "static" !== this.body.css("position") && (v = this.body.offset(), n -= v.top, o -= v.left), !s() && t() && (o = d.left + this.container.outerWidth(!1) - r), y = {
                                left: o,
                                width: f
                            }, w ? (y.top = d.top - g, y.bottom = "auto", this.container.addClass("select2-drop-above"), b.addClass("select2-drop-above")) : (y.top = n, y.bottom = "auto", this.container.removeClass("select2-drop-above"), b.removeClass("select2-drop-above")), y = a.extend(y, K(this.opts.dropdownCss, this.opts.element)), b.css(y)
                        },
                        shouldOpen: function() {
                            var b;
                            return this.opened() ? !1 : this._enabled === !1 || this._readonly === !0 ? !1 : (b = a.Event("select2-opening"), this.opts.element.trigger(b), !b.isDefaultPrevented())
                        },
                        clearDropdownAlignmentPreference: function() {
                            this.container.removeClass("select2-drop-above"), this.dropdown.removeClass("select2-drop-above")
                        },
                        open: function() {
                            return this.shouldOpen() ? (this.opening(), i.on("mousemove.select2Event", function(a) {
                                h.x = a.pageX, h.y = a.pageY
                            }), !0) : !1
                        },
                        opening: function() {
                            var f, b = this.containerEventName,
                                c = "scroll." + b,
                                d = "resize." + b,
                                e = "orientationchange." + b;
                            this.container.addClass("select2-dropdown-open").addClass("select2-container-active"), this.clearDropdownAlignmentPreference(), this.dropdown[0] !== this.body.children().last()[0] && this.dropdown.detach().appendTo(this.body), f = a("#select2-drop-mask"), 0 === f.length && (f = a(document.createElement("div")), f.attr("id", "select2-drop-mask").attr("class", "select2-drop-mask"), f.hide(), f.appendTo(this.body), f.on("mousedown touchstart click", function(b) {
                                n(f);
                                var d, c = a("#select2-drop");
                                c.length > 0 && (d = c.data("select2"), d.opts.selectOnBlur && d.selectHighlighted({
                                    noFocus: !0
                                }), d.close(), b.preventDefault(), b.stopPropagation())
                            })), this.dropdown.prev()[0] !== f[0] && this.dropdown.before(f), a("#select2-drop").removeAttr("id"), this.dropdown.attr("id", "select2-drop"), f.show(), this.positionDropdown(), this.dropdown.show(), this.positionDropdown(), this.dropdown.addClass("select2-drop-active");
                            var g = this;
                            this.container.parents().add(window).each(function() {
                                a(this).on(d + " " + c + " " + e, function() {
                                    g.opened() && g.positionDropdown()
                                })
                            })
                        },
                        close: function() {
                            if (this.opened()) {
                                var b = this.containerEventName,
                                    c = "scroll." + b,
                                    d = "resize." + b,
                                    e = "orientationchange." + b;
                                this.container.parents().add(window).each(function() {
                                    a(this).off(c).off(d).off(e)
                                }), this.clearDropdownAlignmentPreference(), a("#select2-drop-mask").hide(), this.dropdown.removeAttr("id"), this.dropdown.hide(), this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"), this.results.empty(), i.off("mousemove.select2Event"), this.clearSearch(), this.search.removeClass("select2-active"), this.opts.element.trigger(a.Event("select2-close"))
                            }
                        },
                        externalSearch: function(a) {
                            this.open(), this.search.val(a), this.updateResults(!1)
                        },
                        clearSearch: function() {},
                        getMaximumSelectionSize: function() {
                            return K(this.opts.maximumSelectionSize, this.opts.element)
                        },
                        ensureHighlightVisible: function() {
                            var c, d, e, f, g, h, i, j, b = this.results;
                            if (d = this.highlight(), !(0 > d)) {
                                if (0 == d) return b.scrollTop(0), void 0;
                                c = this.findHighlightableChoices().find(".select2-result-label"), e = a(c[d]), j = (e.offset() || {}).top || 0, f = j + e.outerHeight(!0), d === c.length - 1 && (i = b.find("li.select2-more-results"), i.length > 0 && (f = i.offset().top + i.outerHeight(!0))), g = b.offset().top + b.outerHeight(!1), f > g && b.scrollTop(b.scrollTop() + (f - g)), h = j - b.offset().top, 0 > h && "none" != e.css("display") && b.scrollTop(b.scrollTop() + h)
                            }
                        },
                        findHighlightableChoices: function() {
                            return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)")
                        },
                        moveHighlight: function(b) {
                            for (var c = this.findHighlightableChoices(), d = this.highlight(); d > -1 && d < c.length;) {
                                d += b;
                                var e = a(c[d]);
                                if (e.hasClass("select2-result-selectable") && !e.hasClass("select2-disabled") && !e.hasClass("select2-selected")) {
                                    this.highlight(d);
                                    break
                                }
                            }
                        },
                        highlight: function(b) {
                            var d, e, c = this.findHighlightableChoices();
                            return 0 === arguments.length ? p(c.filter(".select2-highlighted")[0], c.get()) : (b >= c.length && (b = c.length - 1), 0 > b && (b = 0), this.removeHighlight(), d = a(c[b]), d.addClass("select2-highlighted"), this.search.attr("aria-activedescendant", d.find(".select2-result-label").attr("id")), this.ensureHighlightVisible(), this.liveRegion.text(d.text()), e = d.data("select2-data"), e && this.opts.element.trigger({
                                type: "select2-highlight",
                                val: this.id(e),
                                choice: e
                            }), void 0)
                        },
                        removeHighlight: function() {
                            this.results.find(".select2-highlighted").removeClass("select2-highlighted")
                        },
                        touchMoved: function() {
                            this._touchMoved = !0
                        },
                        clearTouchMoved: function() {
                            this._touchMoved = !1
                        },
                        countSelectableResults: function() {
                            return this.findHighlightableChoices().length
                        },
                        highlightUnderEvent: function(b) {
                            var c = a(b.target).closest(".select2-result-selectable");
                            if (c.length > 0 && !c.is(".select2-highlighted")) {
                                var d = this.findHighlightableChoices();
                                this.highlight(d.index(c))
                            } else 0 == c.length && this.removeHighlight()
                        },
                        loadMoreIfNeeded: function() {
                            var c, a = this.results,
                                b = a.find("li.select2-more-results"),
                                d = this.resultsPage + 1,
                                e = this,
                                f = this.search.val(),
                                g = this.context;
                            0 !== b.length && (c = b.offset().top - a.offset().top - a.height(), c <= this.opts.loadMorePadding && (b.addClass("select2-active"), this.opts.query({
                                element: this.opts.element,
                                term: f,
                                page: d,
                                context: g,
                                matcher: this.opts.matcher,
                                callback: this.bind(function(c) {
                                    e.opened() && (e.opts.populateResults.call(this, a, c.results, {
                                        term: f,
                                        page: d,
                                        context: g
                                    }), e.postprocessResults(c, !1, !1), c.more === !0 ? (b.detach().appendTo(a).html(e.opts.escapeMarkup(K(e.opts.formatLoadMore, e.opts.element, d + 1))), window.setTimeout(function() {
                                        e.loadMoreIfNeeded()
                                    }, 10)) : b.remove(), e.positionDropdown(), e.resultsPage = d, e.context = c.context, this.opts.element.trigger({
                                        type: "select2-loaded",
                                        items: c
                                    }))
                                })
                            })))
                        },
                        tokenize: function() {},
                        updateResults: function(c) {
                            function m() {
                                d.removeClass("select2-active"), h.positionDropdown(), e.find(".select2-no-results,.select2-selection-limit,.select2-searching").length ? h.liveRegion.text(e.text()) : h.liveRegion.text(h.opts.formatMatches(e.find('.select2-result-selectable:not(".select2-selected")').length))
                            }
                            function n(a) {
                                e.html(a), m()
                            }
                            var g, i, l, d = this.search,
                                e = this.results,
                                f = this.opts,
                                h = this,
                                j = d.val(),
                                k = a.data(this.container, "select2-last-term");
                            if ((c === !0 || !k || !r(j, k)) && (a.data(this.container, "select2-last-term", j), c === !0 || this.showSearchInput !== !1 && this.opened())) {
                                l = ++this.queryCount;
                                var o = this.getMaximumSelectionSize();
                                if (o >= 1 && (g = this.data(), a.isArray(g) && g.length >= o && J(f.formatSelectionTooBig, "formatSelectionTooBig"))) return n("<li class='select2-selection-limit'>" + K(f.formatSelectionTooBig, f.element, o) + "</li>"), void 0;
                                if (d.val().length < f.minimumInputLength) return J(f.formatInputTooShort, "formatInputTooShort") ? n("<li class='select2-no-results'>" + K(f.formatInputTooShort, f.element, d.val(), f.minimumInputLength) + "</li>") : n(""), c && this.showSearch && this.showSearch(!0), void 0;
                                if (f.maximumInputLength && d.val().length > f.maximumInputLength) return J(f.formatInputTooLong, "formatInputTooLong") ? n("<li class='select2-no-results'>" + K(f.formatInputTooLong, f.element, d.val(), f.maximumInputLength) + "</li>") : n(""), void 0;
                                f.formatSearching && 0 === this.findHighlightableChoices().length && n("<li class='select2-searching'>" + K(f.formatSearching, f.element) + "</li>"), d.addClass("select2-active"), this.removeHighlight(), i = this.tokenize(), i != b && null != i && d.val(i), this.resultsPage = 1, f.query({
                                    element: f.element,
                                    term: d.val(),
                                    page: this.resultsPage,
                                    context: null,
                                    matcher: f.matcher,
                                    callback: this.bind(function(g) {
                                        var i;
                                        if (l == this.queryCount) {
                                            if (!this.opened()) return this.search.removeClass("select2-active"), void 0;
                                            if (g.hasError !== b && J(f.formatAjaxError, "formatAjaxError")) return n("<li class='select2-ajax-error'>" + K(f.formatAjaxError, f.element, g.jqXHR, g.textStatus, g.errorThrown) + "</li>"), void 0;
                                            if (this.context = g.context === b ? null : g.context, this.opts.createSearchChoice && "" !== d.val() && (i = this.opts.createSearchChoice.call(h, d.val(), g.results), i !== b && null !== i && h.id(i) !== b && null !== h.id(i) && 0 === a(g.results).filter(function() {
                                                return r(h.id(this), h.id(i))
                                            }).length && this.opts.createSearchChoicePosition(g.results, i)), 0 === g.results.length && J(f.formatNoMatches, "formatNoMatches")) return n("<li class='select2-no-results'>" + K(f.formatNoMatches, f.element, d.val()) + "</li>"), void 0;
                                            e.empty(), h.opts.populateResults.call(this, e, g.results, {
                                                term: d.val(),
                                                page: this.resultsPage,
                                                context: null
                                            }), g.more === !0 && J(f.formatLoadMore, "formatLoadMore") && (e.append("<li class='select2-more-results'>" + f.escapeMarkup(K(f.formatLoadMore, f.element, this.resultsPage)) + "</li>"), window.setTimeout(function() {
                                                h.loadMoreIfNeeded()
                                            }, 10)), this.postprocessResults(g, c), m(), this.opts.element.trigger({
                                                type: "select2-loaded",
                                                items: g
                                            })
                                        }
                                    })
                                })
                            }
                        },
                        cancel: function() {
                            this.close()
                        },
                        blur: function() {
                            this.opts.selectOnBlur && this.selectHighlighted({
                                noFocus: !0
                            }), this.close(), this.container.removeClass("select2-container-active"), this.search[0] === document.activeElement && this.search.blur(), this.clearSearch(), this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")
                        },
                        focusSearch: function() {
                            y(this.search)
                        },
                        selectHighlighted: function(a) {
                            if (this._touchMoved) return this.clearTouchMoved(), void 0;
                            var b = this.highlight(),
                                c = this.results.find(".select2-highlighted"),
                                d = c.closest(".select2-result").data("select2-data");
                            d ? (this.highlight(b), this.onSelect(d, a)) : a && a.noFocus && this.close()
                        },
                        getPlaceholder: function() {
                            var a;
                            return this.opts.element.attr("placeholder") || this.opts.element.attr("data-placeholder") || this.opts.element.data("placeholder") || this.opts.placeholder || ((a = this.getPlaceholderOption()) !== b ? a.text() : b)
                        },
                        getPlaceholderOption: function() {
                            if (this.select) {
                                var c = this.select.children("option").first();
                                if (this.opts.placeholderOption !== b) return "first" === this.opts.placeholderOption && c || "function" == typeof this.opts.placeholderOption && this.opts.placeholderOption(this.select);
                                if ("" === a.trim(c.text()) && "" === c.val()) return c
                            }
                        },
                        initContainerWidth: function() {
                            function c() {
                                var c, d, e, f, g, h;
                                if ("off" === this.opts.width) return null;
                                if ("element" === this.opts.width) return 0 === this.opts.element.outerWidth(!1) ? "auto" : this.opts.element.outerWidth(!1) + "px";
                                if ("copy" === this.opts.width || "resolve" === this.opts.width) {
                                    if (c = this.opts.element.attr("style"), c !== b) for (d = c.split(";"), f = 0, g = d.length; g > f; f += 1) if (h = d[f].replace(/\s/g, ""), e = h.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i), null !== e && e.length >= 1) return e[1];
                                    return "resolve" === this.opts.width ? (c = this.opts.element.css("width"), c.indexOf("%") > 0 ? c : 0 === this.opts.element.outerWidth(!1) ? "auto" : this.opts.element.outerWidth(!1) + "px") : null
                                }
                                return a.isFunction(this.opts.width) ? this.opts.width() : this.opts.width
                            }
                            var d = c.call(this);
                            null !== d && this.container.css("width", d)
                        }
                    }), d = O(c, {
                        createContainer: function() {
                            var b = a(document.createElement("div")).attr({
                                "class": "select2-container"
                            }).html(["<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>", "   <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>", "   <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>", "</a>", "<label for='' class='select2-offscreen'></label>", "<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />", "<div class='select2-drop select2-display-none'>", "   <div class='select2-search'>", "       <label for='' class='select2-offscreen'></label>", "       <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'", "       aria-autocomplete='list' />", "   </div>", "   <ul class='select2-results' role='listbox'>", "   </ul>", "</div>"].join(""));
                            return b
                        },
                        enableInterface: function() {
                            this.parent.enableInterface.apply(this, arguments) && this.focusser.prop("disabled", !this.isInterfaceEnabled())
                        },
                        opening: function() {
                            var c, d, e;
                            this.opts.minimumResultsForSearch >= 0 && this.showSearch(!0), this.parent.opening.apply(this, arguments), this.showSearchInput !== !1 && this.search.val(this.focusser.val()), this.opts.shouldFocusInput(this) && (this.search.focus(), c = this.search.get(0), c.createTextRange ? (d = c.createTextRange(), d.collapse(!1), d.select()) : c.setSelectionRange && (e = this.search.val().length, c.setSelectionRange(e, e))), "" === this.search.val() && this.nextSearchTerm != b && (this.search.val(this.nextSearchTerm), this.search.select()), this.focusser.prop("disabled", !0).val(""), this.updateResults(!0), this.opts.element.trigger(a.Event("select2-open"))
                        },
                        close: function() {
                            this.opened() && (this.parent.close.apply(this, arguments), this.focusser.prop("disabled", !1), this.opts.shouldFocusInput(this) && this.focusser.focus())
                        },
                        focus: function() {
                            this.opened() ? this.close() : (this.focusser.prop("disabled", !1), this.opts.shouldFocusInput(this) && this.focusser.focus())
                        },
                        isFocused: function() {
                            return this.container.hasClass("select2-container-active")
                        },
                        cancel: function() {
                            this.parent.cancel.apply(this, arguments), this.focusser.prop("disabled", !1), this.opts.shouldFocusInput(this) && this.focusser.focus()
                        },
                        destroy: function() {
                            a("label[for='" + this.focusser.attr("id") + "']").attr("for", this.opts.element.attr("id")), this.parent.destroy.apply(this, arguments), N.call(this, "selection", "focusser")
                        },
                        initContainer: function() {
                            var b, g, c = this.container,
                                d = this.dropdown,
                                e = f();
                            this.opts.minimumResultsForSearch < 0 ? this.showSearch(!1) : this.showSearch(!0), this.selection = b = c.find(".select2-choice"), this.focusser = c.find(".select2-focusser"), b.find(".select2-chosen").attr("id", "select2-chosen-" + e), this.focusser.attr("aria-labelledby", "select2-chosen-" + e), this.results.attr("id", "select2-results-" + e), this.search.attr("aria-owns", "select2-results-" + e), this.focusser.attr("id", "s2id_autogen" + e), g = a("label[for='" + this.opts.element.attr("id") + "']"), this.opts.element.focus(this.bind(function() {
                                this.focus()
                            })), this.focusser.prev().text(g.text()).attr("for", this.focusser.attr("id"));
                            var h = this.opts.element.attr("title");
                            this.opts.element.attr("title", h || g.text()), this.focusser.attr("tabindex", this.elementTabIndex), this.search.attr("id", this.focusser.attr("id") + "_search"), this.search.prev().text(a("label[for='" + this.focusser.attr("id") + "']").text()).attr("for", this.search.attr("id")), this.search.on("keydown", this.bind(function(a) {
                                if (this.isInterfaceEnabled() && 229 != a.keyCode) {
                                    if (a.which === k.PAGE_UP || a.which === k.PAGE_DOWN) return A(a), void 0;
                                    switch (a.which) {
                                    case k.UP:
                                    case k.DOWN:
                                        return this.moveHighlight(a.which === k.UP ? -1 : 1), A(a), void 0;
                                    case k.ENTER:
                                        return this.selectHighlighted(), A(a), void 0;
                                    case k.TAB:
                                        return this.selectHighlighted({
                                            noFocus: !0
                                        }), void 0;
                                    case k.ESC:
                                        return this.cancel(a), A(a), void 0
                                    }
                                }
                            })), this.search.on("blur", this.bind(function() {
                                document.activeElement === this.body.get(0) && window.setTimeout(this.bind(function() {
                                    this.opened() && this.search.focus()
                                }), 0)
                            })), this.focusser.on("keydown", this.bind(function(a) {
                                if (this.isInterfaceEnabled() && a.which !== k.TAB && !k.isControl(a) && !k.isFunctionKey(a) && a.which !== k.ESC) {
                                    if (this.opts.openOnEnter === !1 && a.which === k.ENTER) return A(a), void 0;
                                    if (a.which == k.DOWN || a.which == k.UP || a.which == k.ENTER && this.opts.openOnEnter) {
                                        if (a.altKey || a.ctrlKey || a.shiftKey || a.metaKey) return;
                                        return this.open(), A(a), void 0
                                    }
                                    return a.which == k.DELETE || a.which == k.BACKSPACE ? (this.opts.allowClear && this.clear(), A(a), void 0) : void 0
                                }
                            })), u(this.focusser), this.focusser.on("keyup-change input", this.bind(function(a) {
                                if (this.opts.minimumResultsForSearch >= 0) {
                                    if (a.stopPropagation(), this.opened()) return;
                                    this.open()
                                }
                            })), b.on("mousedown touchstart", "abbr", this.bind(function(a) {
                                this.isInterfaceEnabled() && (this.clear(), B(a), this.close(), this.selection && this.selection.focus())
                            })), b.on("mousedown touchstart", this.bind(function(c) {
                                n(b), this.container.hasClass("select2-container-active") || this.opts.element.trigger(a.Event("select2-focus")), this.opened() ? this.close() : this.isInterfaceEnabled() && this.open(), A(c)
                            })), d.on("mousedown touchstart", this.bind(function() {
                                this.opts.shouldFocusInput(this) && this.search.focus()
                            })), b.on("focus", this.bind(function(a) {
                                A(a)
                            })), this.focusser.on("focus", this.bind(function() {
                                this.container.hasClass("select2-container-active") || this.opts.element.trigger(a.Event("select2-focus")), this.container.addClass("select2-container-active")
                            })).on("blur", this.bind(function() {
                                this.opened() || (this.container.removeClass("select2-container-active"), this.opts.element.trigger(a.Event("select2-blur")))
                            })), this.search.on("focus", this.bind(function() {
                                this.container.hasClass("select2-container-active") || this.opts.element.trigger(a.Event("select2-focus")), this.container.addClass("select2-container-active")
                            })), this.initContainerWidth(), this.opts.element.hide(), this.setPlaceholder()
                        },
                        clear: function(b) {
                            var c = this.selection.data("select2-data");
                            if (c) {
                                var d = a.Event("select2-clearing");
                                if (this.opts.element.trigger(d), d.isDefaultPrevented()) return;
                                var e = this.getPlaceholderOption();
                                this.opts.element.val(e ? e.val() : ""), this.selection.find(".select2-chosen").empty(), this.selection.removeData("select2-data"), this.setPlaceholder(), b !== !1 && (this.opts.element.trigger({
                                    type: "select2-removed",
                                    val: this.id(c),
                                    choice: c
                                }), this.triggerChange({
                                    removed: c
                                }))
                            }
                        },
                        initSelection: function() {
                            if (this.isPlaceholderOptionSelected()) this.updateSelection(null), this.close(), this.setPlaceholder();
                            else {
                                var c = this;
                                this.opts.initSelection.call(null, this.opts.element, function(a) {
                                    a !== b && null !== a && (c.updateSelection(a), c.close(), c.setPlaceholder(), c.nextSearchTerm = c.opts.nextSearchTerm(a, c.search.val()))
                                })
                            }
                        },
                        isPlaceholderOptionSelected: function() {
                            var a;
                            return this.getPlaceholder() === b ? !1 : (a = this.getPlaceholderOption()) !== b && a.prop("selected") || "" === this.opts.element.val() || this.opts.element.val() === b || null === this.opts.element.val()
                        },
                        prepareOpts: function() {
                            var b = this.parent.prepareOpts.apply(this, arguments),
                                c = this;
                            return "select" === b.element.get(0).tagName.toLowerCase() ? b.initSelection = function(a, b) {
                                var d = a.find("option").filter(function() {
                                    return this.selected && !this.disabled
                                });
                                b(c.optionToData(d))
                            } : "data" in b && (b.initSelection = b.initSelection ||
                            function(c, d) {
                                var e = c.val(),
                                    f = null;
                                b.query({
                                    matcher: function(a, c, d) {
                                        var g = r(e, b.id(d));
                                        return g && (f = d), g
                                    },
                                    callback: a.isFunction(d) ?
                                    function() {
                                        d(f)
                                    } : a.noop
                                })
                            }), b
                        },
                        getPlaceholder: function() {
                            return this.select && this.getPlaceholderOption() === b ? b : this.parent.getPlaceholder.apply(this, arguments)
                        },
                        setPlaceholder: function() {
                            var a = this.getPlaceholder();
                            if (this.isPlaceholderOptionSelected() && a !== b) {
                                if (this.select && this.getPlaceholderOption() === b) return;
                                this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)), this.selection.addClass("select2-default"), this.container.removeClass("select2-allowclear")
                            }
                        },
                        postprocessResults: function(a, b, c) {
                            var d = 0,
                                e = this;
                            if (this.findHighlightableChoices().each2(function(a, b) {
                                return r(e.id(b.data("select2-data")), e.opts.element.val()) ? (d = a, !1) : void 0
                            }), c !== !1 && (b === !0 && d >= 0 ? this.highlight(d) : this.highlight(0)), b === !0) {
                                var g = this.opts.minimumResultsForSearch;
                                g >= 0 && this.showSearch(L(a.results) >= g)
                            }
                        },
                        showSearch: function(b) {
                            this.showSearchInput !== b && (this.showSearchInput = b, this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !b), this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !b), a(this.dropdown, this.container).toggleClass("select2-with-searchbox", b))
                        },
                        onSelect: function(a, b) {
                            if (this.triggerSelect(a)) {
                                var c = this.opts.element.val(),
                                    d = this.data();
                                this.opts.element.val(this.id(a)), this.updateSelection(a), this.opts.element.trigger({
                                    type: "select2-selected",
                                    val: this.id(a),
                                    choice: a
                                }), this.nextSearchTerm = this.opts.nextSearchTerm(a, this.search.val()), this.close(), b && b.noFocus || !this.opts.shouldFocusInput(this) || this.focusser.focus(), r(c, this.id(a)) || this.triggerChange({
                                    added: a,
                                    removed: d
                                })
                            }
                        },
                        updateSelection: function(a) {
                            var d, e, c = this.selection.find(".select2-chosen");
                            this.selection.data("select2-data", a), c.empty(), null !== a && (d = this.opts.formatSelection(a, c, this.opts.escapeMarkup)), d !== b && c.append(d), e = this.opts.formatSelectionCssClass(a, c), e !== b && c.addClass(e), this.selection.removeClass("select2-default"), this.opts.allowClear && this.getPlaceholder() !== b && this.container.addClass("select2-allowclear")
                        },
                        val: function() {
                            var a, c = !1,
                                d = null,
                                e = this,
                                f = this.data();
                            if (0 === arguments.length) return this.opts.element.val();
                            if (a = arguments[0], arguments.length > 1 && (c = arguments[1]), this.select) this.select.val(a).find("option").filter(function() {
                                return this.selected
                            }).each2(function(a, b) {
                                return d = e.optionToData(b), !1
                            }), this.updateSelection(d), this.setPlaceholder(), c && this.triggerChange({
                                added: d,
                                removed: f
                            });
                            else {
                                if (!a && 0 !== a) return this.clear(c), void 0;
                                if (this.opts.initSelection === b) throw new Error("cannot call val() if initSelection() is not defined");
                                this.opts.element.val(a), this.opts.initSelection(this.opts.element, function(a) {
                                    e.opts.element.val(a ? e.id(a) : ""), e.updateSelection(a), e.setPlaceholder(), c && e.triggerChange({
                                        added: a,
                                        removed: f
                                    })
                                })
                            }
                        },
                        clearSearch: function() {
                            this.search.val(""), this.focusser.val("")
                        },
                        data: function(a) {
                            var c, d = !1;
                            return 0 === arguments.length ? (c = this.selection.data("select2-data"), c == b && (c = null), c) : (arguments.length > 1 && (d = arguments[1]), a ? (c = this.data(), this.opts.element.val(a ? this.id(a) : ""), this.updateSelection(a), d && this.triggerChange({
                                added: a,
                                removed: c
                            })) : this.clear(d), void 0)
                        }
                    }), e = O(c, {
                        createContainer: function() {
                            var b = a(document.createElement("div")).attr({
                                "class": "select2-container select2-container-multi"
                            }).html(["<ul class='select2-choices'>", "  <li class='select2-search-field'>", "    <label for='' class='select2-offscreen'></label>", "    <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>", "  </li>", "</ul>", "<div class='select2-drop select2-drop-multi select2-display-none'>", "   <ul class='select2-results'>", "   </ul>", "</div>"].join(""));
                            return b
                        },
                        prepareOpts: function() {
                            var b = this.parent.prepareOpts.apply(this, arguments),
                                c = this;
                            return "select" === b.element.get(0).tagName.toLowerCase() ? b.initSelection = function(a, b) {
                                var d = [];
                                a.find("option").filter(function() {
                                    return this.selected && !this.disabled
                                }).each2(function(a, b) {
                                    d.push(c.optionToData(b))
                                }), b(d)
                            } : "data" in b && (b.initSelection = b.initSelection ||
                            function(c, d) {
                                var e = s(c.val(), b.separator, b.transformVal),
                                    f = [];
                                b.query({
                                    matcher: function(c, d, g) {
                                        var h = a.grep(e, function(a) {
                                            return r(a, b.id(g))
                                        }).length;
                                        return h && f.push(g), h
                                    },
                                    callback: a.isFunction(d) ?
                                    function() {
                                        for (var a = [], c = 0; c < e.length; c++) for (var g = e[c], h = 0; h < f.length; h++) {
                                            var i = f[h];
                                            if (r(g, b.id(i))) {
                                                a.push(i), f.splice(h, 1);
                                                break
                                            }
                                        }
                                        d(a)
                                    } : a.noop
                                })
                            }), b
                        },
                        selectChoice: function(a) {
                            var b = this.container.find(".select2-search-choice-focus");
                            b.length && a && a[0] == b[0] || (b.length && this.opts.element.trigger("choice-deselected", b), b.removeClass("select2-search-choice-focus"), a && a.length && (this.close(), a.addClass("select2-search-choice-focus"), this.opts.element.trigger("choice-selected", a)))
                        },
                        destroy: function() {
                            a("label[for='" + this.search.attr("id") + "']").attr("for", this.opts.element.attr("id")), this.parent.destroy.apply(this, arguments), N.call(this, "searchContainer", "selection")
                        },
                        initContainer: function() {
                            var c, b = ".select2-choices";
                            this.searchContainer = this.container.find(".select2-search-field"), this.selection = c = this.container.find(b);
                            var d = this;
                            this.selection.on("click", ".select2-container:not(.select2-container-disabled) .select2-search-choice:not(.select2-locked)", function() {
                                d.search[0].focus(), d.selectChoice(a(this))
                            }), this.search.attr("id", "s2id_autogen" + f()), this.search.prev().text(a("label[for='" + this.opts.element.attr("id") + "']").text()).attr("for", this.search.attr("id")), this.opts.element.focus(this.bind(function() {
                                this.focus()
                            })), this.search.on("input paste", this.bind(function() {
                                this.search.attr("placeholder") && 0 == this.search.val().length || this.isInterfaceEnabled() && (this.opened() || this.open())
                            })), this.search.attr("tabindex", this.elementTabIndex), this.keydowns = 0, this.search.on("keydown", this.bind(function(a) {
                                if (this.isInterfaceEnabled()) {
                                    ++this.keydowns;
                                    var b = c.find(".select2-search-choice-focus"),
                                        d = b.prev(".select2-search-choice:not(.select2-locked)"),
                                        e = b.next(".select2-search-choice:not(.select2-locked)"),
                                        f = z(this.search);
                                    if (b.length && (a.which == k.LEFT || a.which == k.RIGHT || a.which == k.BACKSPACE || a.which == k.DELETE || a.which == k.ENTER)) {
                                        var g = b;
                                        return a.which == k.LEFT && d.length ? g = d : a.which == k.RIGHT ? g = e.length ? e : null : a.which === k.BACKSPACE ? this.unselect(b.first()) && (this.search.width(10), g = d.length ? d : e) : a.which == k.DELETE ? this.unselect(b.first()) && (this.search.width(10), g = e.length ? e : null) : a.which == k.ENTER && (g = null), this.selectChoice(g), A(a), g && g.length || this.open(), void 0
                                    }
                                    if ((a.which === k.BACKSPACE && 1 == this.keydowns || a.which == k.LEFT) && 0 == f.offset && !f.length) return this.selectChoice(c.find(".select2-search-choice:not(.select2-locked)").last()), A(a), void 0;
                                    if (this.selectChoice(null), this.opened()) switch (a.which) {
                                    case k.UP:
                                    case k.DOWN:
                                        return this.moveHighlight(a.which === k.UP ? -1 : 1), A(a), void 0;
                                    case k.ENTER:
                                        return this.selectHighlighted(), A(a), void 0;
                                    case k.TAB:
                                        return this.selectHighlighted({
                                            noFocus: !0
                                        }), this.close(), void 0;
                                    case k.ESC:
                                        return this.cancel(a), A(a), void 0
                                    }
                                    if (a.which !== k.TAB && !k.isControl(a) && !k.isFunctionKey(a) && a.which !== k.BACKSPACE && a.which !== k.ESC) {
                                        if (a.which === k.ENTER) {
                                            if (this.opts.openOnEnter === !1) return;
                                            if (a.altKey || a.ctrlKey || a.shiftKey || a.metaKey) return
                                        }
                                        this.open(), (a.which === k.PAGE_UP || a.which === k.PAGE_DOWN) && A(a), a.which === k.ENTER && A(a)
                                    }
                                }
                            })), this.search.on("keyup", this.bind(function() {
                                this.keydowns = 0, this.resizeSearch()
                            })), this.search.on("blur", this.bind(function(b) {
                                this.container.removeClass("select2-container-active"), this.search.removeClass("select2-focused"), this.selectChoice(null), this.opened() || this.clearSearch(), b.stopImmediatePropagation(), this.opts.element.trigger(a.Event("select2-blur"))
                            })), this.container.on("click", b, this.bind(function(b) {
                                this.isInterfaceEnabled() && (a(b.target).closest(".select2-search-choice").length > 0 || (this.selectChoice(null), this.clearPlaceholder(), this.container.hasClass("select2-container-active") || this.opts.element.trigger(a.Event("select2-focus")), this.open(), this.focusSearch(), b.preventDefault()))
                            })), this.container.on("focus", b, this.bind(function() {
                                this.isInterfaceEnabled() && (this.container.hasClass("select2-container-active") || this.opts.element.trigger(a.Event("select2-focus")), this.container.addClass("select2-container-active"), this.dropdown.addClass("select2-drop-active"), this.clearPlaceholder())
                            })), this.initContainerWidth(), this.opts.element.hide(), this.clearSearch()
                        },
                        enableInterface: function() {
                            this.parent.enableInterface.apply(this, arguments) && this.search.prop("disabled", !this.isInterfaceEnabled())
                        },
                        initSelection: function() {
                            if ("" === this.opts.element.val() && "" === this.opts.element.text() && (this.updateSelection([]), this.close(), this.clearSearch()), this.select || "" !== this.opts.element.val()) {
                                var c = this;
                                this.opts.initSelection.call(null, this.opts.element, function(a) {
                                    a !== b && null !== a && (c.updateSelection(a), c.close(), c.clearSearch())
                                })
                            }
                        },
                        clearSearch: function() {
                            var a = this.getPlaceholder(),
                                c = this.getMaxSearchWidth();
                            a !== b && 0 === this.getVal().length && this.search.hasClass("select2-focused") === !1 ? (this.search.val(a).addClass("select2-default"), this.search.width(c > 0 ? c : this.container.css("width"))) : this.search.val("").width(10)
                        },
                        clearPlaceholder: function() {
                            this.search.hasClass("select2-default") && this.search.val("").removeClass("select2-default")
                        },
                        opening: function() {
                            this.clearPlaceholder(), this.resizeSearch(), this.parent.opening.apply(this, arguments), this.focusSearch(), "" === this.search.val() && this.nextSearchTerm != b && (this.search.val(this.nextSearchTerm), this.search.select()), this.updateResults(!0), this.opts.shouldFocusInput(this) && this.search.focus(), this.opts.element.trigger(a.Event("select2-open"))
                        },
                        close: function() {
                            this.opened() && this.parent.close.apply(this, arguments)
                        },
                        focus: function() {
                            this.close(), this.search.focus()
                        },
                        isFocused: function() {
                            return this.search.hasClass("select2-focused")
                        },
                        updateSelection: function(b) {
                            var c = [],
                                d = [],
                                e = this;
                            a(b).each(function() {
                                p(e.id(this), c) < 0 && (c.push(e.id(this)), d.push(this))
                            }), b = d, this.selection.find(".select2-search-choice").remove(), a(b).each(function() {
                                e.addSelectedChoice(this)
                            }), e.postprocessResults()
                        },
                        tokenize: function() {
                            var a = this.search.val();
                            a = this.opts.tokenizer.call(this, a, this.data(), this.bind(this.onSelect), this.opts), null != a && a != b && (this.search.val(a), a.length > 0 && this.open())
                        },
                        onSelect: function(a, c) {
                            this.triggerSelect(a) && "" !== a.text && (this.addSelectedChoice(a), this.opts.element.trigger({
                                type: "selected",
                                val: this.id(a),
                                choice: a
                            }), this.nextSearchTerm = this.opts.nextSearchTerm(a, this.search.val()), this.clearSearch(), this.updateResults(), (this.select || !this.opts.closeOnSelect) && this.postprocessResults(a, !1, this.opts.closeOnSelect === !0), this.opts.closeOnSelect ? (this.close(), this.search.width(10)) : this.countSelectableResults() > 0 ? (this.search.width(10), this.resizeSearch(), this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize() ? this.updateResults(!0) : this.nextSearchTerm != b && (this.search.val(this.nextSearchTerm), this.updateResults(), this.search.select()), this.positionDropdown()) : (this.close(), this.search.width(10)), this.triggerChange({
                                added: a
                            }), c && c.noFocus || this.focusSearch())
                        },
                        cancel: function() {
                            this.close(), this.focusSearch()
                        },
                        addSelectedChoice: function(c) {
                            var j, k, d = !c.locked,
                                e = a("<li class='select2-search-choice'>    <div></div>    <a href='#' class='select2-search-choice-close' tabindex='-1'></a></li>"),
                                f = a("<li class='select2-search-choice select2-locked'><div></div></li>"),
                                g = d ? e : f,
                                h = this.id(c),
                                i = this.getVal();
                            j = this.opts.formatSelection(c, g.find("div"), this.opts.escapeMarkup), j != b && g.find("div").replaceWith(a("<div></div>").html(j)), k = this.opts.formatSelectionCssClass(c, g.find("div")), k != b && g.addClass(k), d && g.find(".select2-search-choice-close").on("mousedown", A).on("click dblclick", this.bind(function(b) {
                                this.isInterfaceEnabled() && (this.unselect(a(b.target)), this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"), A(b), this.close(), this.focusSearch())
                            })).on("focus", this.bind(function() {
                                this.isInterfaceEnabled() && (this.container.addClass("select2-container-active"), this.dropdown.addClass("select2-drop-active"))
                            })), g.data("select2-data", c), g.insertBefore(this.searchContainer), i.push(h), this.setVal(i)
                        },
                        unselect: function(b) {
                            var d, e, c = this.getVal();
                            if (b = b.closest(".select2-search-choice"), 0 === b.length) throw "Invalid argument: " + b + ". Must be .select2-search-choice";
                            if (d = b.data("select2-data")) {
                                var f = a.Event("select2-removing");
                                if (f.val = this.id(d), f.choice = d, this.opts.element.trigger(f), f.isDefaultPrevented()) return !1;
                                for (;
                                (e = p(this.id(d), c)) >= 0;) c.splice(e, 1), this.setVal(c), this.select && this.postprocessResults();
                                return b.remove(), this.opts.element.trigger({
                                    type: "select2-removed",
                                    val: this.id(d),
                                    choice: d
                                }), this.triggerChange({
                                    removed: d
                                }), !0
                            }
                        },
                        postprocessResults: function(a, b, c) {
                            var d = this.getVal(),
                                e = this.results.find(".select2-result"),
                                f = this.results.find(".select2-result-with-children"),
                                g = this;
                            e.each2(function(a, b) {
                                var c = g.id(b.data("select2-data"));
                                p(c, d) >= 0 && (b.addClass("select2-selected"), b.find(".select2-result-selectable").addClass("select2-selected"))
                            }), f.each2(function(a, b) {
                                b.is(".select2-result-selectable") || 0 !== b.find(".select2-result-selectable:not(.select2-selected)").length || b.addClass("select2-selected")
                            }), -1 == this.highlight() && c !== !1 && this.opts.closeOnSelect === !0 && g.highlight(0), !this.opts.createSearchChoice && !e.filter(".select2-result:not(.select2-selected)").length > 0 && (!a || a && !a.more && 0 === this.results.find(".select2-no-results").length) && J(g.opts.formatNoMatches, "formatNoMatches") && this.results.append("<li class='select2-no-results'>" + K(g.opts.formatNoMatches, g.opts.element, g.search.val()) + "</li>")
                        },
                        getMaxSearchWidth: function() {
                            return this.selection.width() - t(this.search)
                        },
                        resizeSearch: function() {
                            var a, b, c, d, e, f = t(this.search);
                            a = C(this.search) + 10, b = this.search.offset().left, c = this.selection.width(), d = this.selection.offset().left, e = c - (b - d) - f, a > e && (e = c - f), 40 > e && (e = c - f), 0 >= e && (e = a), this.search.width(Math.floor(e))
                        },
                        getVal: function() {
                            var a;
                            return this.select ? (a = this.select.val(), null === a ? [] : a) : (a = this.opts.element.val(), s(a, this.opts.separator, this.opts.transformVal))
                        },
                        setVal: function(b) {
                            var c;
                            this.select ? this.select.val(b) : (c = [], a(b).each(function() {
                                p(this, c) < 0 && c.push(this)
                            }), this.opts.element.val(0 === c.length ? "" : c.join(this.opts.separator)))
                        },
                        buildChangeDetails: function(a, b) {
                            for (var b = b.slice(0), a = a.slice(0), c = 0; c < b.length; c++) for (var d = 0; d < a.length; d++) r(this.opts.id(b[c]), this.opts.id(a[d])) && (b.splice(c, 1), c > 0 && c--, a.splice(d, 1), d--);
                            return {
                                added: b,
                                removed: a
                            }
                        },
                        val: function(c, d) {
                            var e, f = this;
                            if (0 === arguments.length) return this.getVal();
                            if (e = this.data(), e.length || (e = []), !c && 0 !== c) return this.opts.element.val(""), this.updateSelection([]), this.clearSearch(), d && this.triggerChange({
                                added: this.data(),
                                removed: e
                            }), void 0;
                            if (this.setVal(c), this.select) this.opts.initSelection(this.select, this.bind(this.updateSelection)), d && this.triggerChange(this.buildChangeDetails(e, this.data()));
                            else {
                                if (this.opts.initSelection === b) throw new Error("val() cannot be called if initSelection() is not defined");
                                this.opts.initSelection(this.opts.element, function(b) {
                                    var c = a.map(b, f.id);
                                    f.setVal(c), f.updateSelection(b), f.clearSearch(), d && f.triggerChange(f.buildChangeDetails(e, f.data()))
                                })
                            }
                            this.clearSearch()
                        },
                        onSortStart: function() {
                            if (this.select) throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");
                            this.search.width(0), this.searchContainer.hide()
                        },
                        onSortEnd: function() {
                            var b = [],
                                c = this;
                            this.searchContainer.show(), this.searchContainer.appendTo(this.searchContainer.parent()), this.resizeSearch(), this.selection.find(".select2-search-choice").each(function() {
                                b.push(c.opts.id(a(this).data("select2-data")))
                            }), this.setVal(b), this.triggerChange()
                        },
                        data: function(b, c) {
                            var e, f, d = this;
                            return 0 === arguments.length ? this.selection.children(".select2-search-choice").map(function() {
                                return a(this).data("select2-data")
                            }).get() : (f = this.data(), b || (b = []), e = a.map(b, function(a) {
                                return d.opts.id(a)
                            }), this.setVal(e), this.updateSelection(b), this.clearSearch(), c && this.triggerChange(this.buildChangeDetails(f, this.data())), void 0)
                        }
                    }), a.fn.select2 = function() {
                        var d, e, f, g, h, c = Array.prototype.slice.call(arguments, 0),
                            i = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"],
                            j = ["opened", "isFocused", "container", "dropdown"],
                            k = ["val", "data"],
                            l = {
                                search: "externalSearch"
                            };
                        return this.each(function() {
                            if (0 === c.length || "object" == typeof c[0]) d = 0 === c.length ? {} : a.extend({}, c[0]), d.element = a(this), "select" === d.element.get(0).tagName.toLowerCase() ? h = d.element.prop("multiple") : (h = d.multiple || !1, "tags" in d && (d.multiple = h = !0)), e = h ? new window.Select2["class"].multi : new window.Select2["class"].single, e.init(d);
                            else {
                                if ("string" != typeof c[0]) throw "Invalid arguments to select2 plugin: " + c;
                                if (p(c[0], i) < 0) throw "Unknown method: " + c[0];
                                if (g = b, e = a(this).data("select2"), e === b) return;
                                if (f = c[0], "container" === f ? g = e.container : "dropdown" === f ? g = e.dropdown : (l[f] && (f = l[f]), g = e[f].apply(e, c.slice(1))), p(c[0], j) >= 0 || p(c[0], k) >= 0 && 1 == c.length) return !1
                            }
                        }), g === b ? this : g
                    }, a.fn.select2.defaults = {
                        width: "copy",
                        loadMorePadding: 0,
                        closeOnSelect: !0,
                        openOnEnter: !0,
                        containerCss: {},
                        dropdownCss: {},
                        containerCssClass: "",
                        dropdownCssClass: "",
                        formatResult: function(a, b, c, d) {
                            var e = [];
                            return E(this.text(a), c.term, e, d), e.join("")
                        },
                        transformVal: function(b) {
                            return a.trim(b)
                        },
                        formatSelection: function(a, c, d) {
                            return a ? d(this.text(a)) : b
                        },
                        sortResults: function(a) {
                            return a
                        },
                        formatResultCssClass: function(a) {
                            return a.css
                        },
                        formatSelectionCssClass: function() {
                            return b
                        },
                        minimumResultsForSearch: 0,
                        minimumInputLength: 0,
                        maximumInputLength: null,
                        maximumSelectionSize: 0,
                        id: function(a) {
                            return a == b ? null : a.id
                        },
                        text: function(b) {
                            return b && this.data && this.data.text ? a.isFunction(this.data.text) ? this.data.text(b) : b[this.data.text] : b.text
                        },
                        matcher: function(a, b) {
                            return o("" + b).toUpperCase().indexOf(o("" + a).toUpperCase()) >= 0
                        },
                        separator: ",",
                        tokenSeparators: [],
                        tokenizer: M,
                        escapeMarkup: F,
                        blurOnChange: !1,
                        selectOnBlur: !1,
                        adaptContainerCssClass: function(a) {
                            return a
                        },
                        adaptDropdownCssClass: function() {
                            return null
                        },
                        nextSearchTerm: function() {
                            return b
                        },
                        searchInputPlaceholder: "",
                        createSearchChoicePosition: "top",
                        shouldFocusInput: function(a) {
                            var b = "ontouchstart" in window || navigator.msMaxTouchPoints > 0;
                            return b ? a.opts.minimumResultsForSearch < 0 ? !1 : !0 : !0
                        }
                    }, a.fn.select2.locales = [], a.fn.select2.locales.en = {
                        formatMatches: function(a) {
                            return 1 === a ? "One result is available, press enter to select it." : a + " results are available, use up and down arrow keys to navigate."
                        },
                        formatNoMatches: function() {
                            return "No matches found"
                        },
                        formatAjaxError: function() {
                            return "Loading failed"
                        },
                        formatInputTooShort: function(a, b) {
                            var c = b - a.length;
                            return "Please enter " + c + " or more character" + (1 == c ? "" : "s")
                        },
                        formatInputTooLong: function(a, b) {
                            var c = a.length - b;
                            return "Please delete " + c + " character" + (1 == c ? "" : "s")
                        },
                        formatSelectionTooBig: function(a) {
                            return "You can only select " + a + " item" + (1 == a ? "" : "s")
                        },
                        formatLoadMore: function() {
                            return "Loading more results\u2026"
                        },
                        formatSearching: function() {
                            return "Searching\u2026"
                        }
                    }, a.extend(a.fn.select2.defaults, a.fn.select2.locales.en), a.fn.select2.ajaxDefaults = {
                        transport: a.ajax,
                        params: {
                            type: "GET",
                            cache: !1,
                            dataType: "json"
                        }
                    }, window.Select2 = {
                        query: {
                            ajax: G,
                            local: H,
                            tags: I
                        },
                        util: {
                            debounce: w,
                            markMatch: E,
                            escapeMarkup: F,
                            stripDiacritics: o
                        },
                        "class": {
                            "abstract": c,
                            single: d,
                            multi: e
                        }
                    }
                }
            }(jQuery);

            Inject.INTERNAL.executor.exec65.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("lib/select2/3.5.2/select2.min", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fselect2%2F3.5.2%2Fselect2.min.js");
        try {
            Inject.INTERNAL.executor.exec65.innerFn.call(Inject.INTERNAL.executor.exec65.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec65.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Flib%2Fselect2%2F3.5.2%2Fselect2.min.js

#64 JavaScript::Eval (size: 7940, repeated: 1)

Inject.INTERNAL.executor.exec66.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec66.innerFn = function() {
            // id: scripts/apps/tagging/Tagging uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Ftagging%2FTagging.js
            var module = Inject.INTERNAL.executor.exec66.module,
                require = Inject.INTERNAL.executor.exec66.require,
                define = Inject.INTERNAL.executor.exec66.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["scripts/shared/BaseControl", "lib/select2/3.5.2/select2.min"], function() {
                (function() {
                    var $ = LIModules.requires("jquery"),
                        _ = LIModules.requires("underscore"),
                        BaseControl = LIModules.requires("BaseControl"),
                        i18n = LIModules.requires("i18n"),
                        readCookie = LIModules.requires("readCookie");
                    var TaggingPills = BaseControl.extend(function(base) {
                        var DEFAULT_CONFIG = {
                            defaultTemplate: "tl/apps/tagging/tagging",
                            typeaheadTemplate: '\x3ch1 class\x3d"tagging-pill-typeahead-item"\x3e\x3c/h1\x3e',
                            pillTemplate: '\x3cspan class\x3d"tagging-pill-item"\x3e\x3c/span\x3e',
                            id: null,
                            onChange: $.noop,
                            onAdd: $.noop,
                            onReady: $.noop,
                            onError: $.noop,
                            onRemove: $.noop,
                            disabled: false,
                            urls: {},
                            disableHiddenInput: false,
                            cssPaths: [],
                            maxTags: 3,
                            token: null,
                            queue: {
                                added: []
                            },
                            disableAjax: false,
                            placeholderText: null,
                            initialData: false,
                            sessionId: null,
                            extraParams: {}
                        },
                            URLS = {
                                removed: "/tagging/tagLabels",
                                added: "/tagging/tagLabels",
                                initial: "/tagging/tagLabels",
                                query: "/tagging/tagLabelSuggestions"
                            },
                            STATUS_CLASSES = {
                                ERROR: "tagging-error"
                            },
                            TAGGING_WRAPPER_SELECTOR = ".pill-tagging-wrapper",
                            JSESSIONID = readCookie("JSESSIONID");
                        return {
                            beforeInit: function() {
                                var urls = this._config.urls || {},
                                    disableInput, self = this;
                                this._config = _.defaults(this._config, DEFAULT_CONFIG);
                                disableInput = this._config.disableHiddenInput;
                                if (self._config.sessionId === null && JSESSIONID) self._config.sessionId = encodeURIComponent(JSESSIONID.replace(/"/g, ""));
                                if (this._config.cssPaths.length === 0) this.loadCss(this._config.cssPaths);
                                this.URLS = _.defaults(urls, URLS);
                                this.templateReady = $.Deferred();
                                dust.render(this._config.defaultTemplate, {
                                    disableInput: disableInput
                                }, function(err, out) {
                                    if (!err) {
                                        self._$el.append(out);
                                        if (disableInput === false) self._$hidden_input = self._$el.find(".pill-tagging-hidden");
                                        if (self._config.placeholderText === null) self._config.placeholderText = i18n.get("i18n_tagging_pills");
                                        self._$el_input = self._$el.find(".pill-tagging-input");
                                        self.templateReady.resolve(true)
                                    }
                                })
                            },
                            toggleDisabled: function(el) {
                                el = el !== undefined ? $(el) : this._$el_input;
                                this._config.disabled = !this._config.disabled;
                                el.select2("readonly", this._config.disabled)
                            },
                            setId: function(id) {
                                this._config.id = _.escape(id);
                                this.saveQueue()
                            },
                            saveQueue: function() {
                                var addedDefList = [],
                                    addedDef, self = this;
                                if (this._config.queue.added.length === 0) return this;
                                _.each(this._config.queue.added, function(val, key, list) {
                                    addedDefList.push(self._request(val, "put").then(function() {
                                        self._config.queue.added.splice(key, 1)
                                    }));
                                    val.key = key
                                });
                                return this
                            },
                            _request: function(item, type) {
                                var def, self = this,
                                    payload = _.extend({
                                        "model": item.model,
                                        "position": parseInt(item.position, 10)
                                    }, self._config.extraParams);
                                if (this._config.token !== null) payload.token = this._config.token;
                                def = $.ajax({
                                    contentType: "application/json",
                                    dataType: "json",
                                    url: self.URLS.removed + "/" + self._config.id + "/" + item.id + "?csrfToken\x3d" + self._config.sessionId,
                                    data: JSON.stringify(payload),
                                    type: type
                                });
                                return def
                            },
                            _insertTags: function(tagList) {
                                this._$el_input.select2("data", _.map(tagList, function(item) {
                                    return {
                                        id: item,
                                        html: item,
                                        text: item,
                                        data: item
                                    }
                                }))
                            },
                            getInitialSet: function(id, data) {
                                var self = this,
                                    defaultDataPromise, tagLabels = [];
                                if (id !== undefined) this._config.id = id;
                                if (data !== undefined) this._config.initialData = data;
                                if (self._config.initialData !== false) {
                                    tagLabels = self._config.initialData.concat(tagLabels);
                                    this._insertTags(tagLabels)
                                }
                                if (this._config.id === null) return false;
                                defaultDataPromise = $.ajax({
                                    url: self.URLS.initial + "/" + self._config.id + "?csrfToken\x3d" + self._config.sessionId
                                });
                                defaultDataPromise.then(function(response) {
                                    if (response.tagLabels.length === 0) return false;
                                    response.tagLabels = tagLabels.concat(response.tagLabels);
                                    self._insertTags(response.tagLabels);
                                    self._config.onReady(response)
                                })
                            },
                            _query: function(opt) {
                                var self = this;
                                if (!/.*\S.*/.test(opt.term)) {
                                    this._$el_input.select2("close");
                                    return false
                                }
                                $.ajax({
                                    url: self.URLS.query + "/" + encodeURIComponent(opt.term) + "?csrfToken\x3d" + self._config.sessionId,
                                    success: function(data) {
                                        var list = data.suggestions.map(function(item) {
                                            return {
                                                id: item.tagLabel,
                                                html: item.tagLabel,
                                                position: item.position,
                                                model: item.model,
                                                text: item.tagLabel,
                                                data: item
                                            }
                                        });
                                        opt.callback({
                                            results: list
                                        });
                                        self._$el.find(TAGGING_WRAPPER_SELECTOR).removeClass(STATUS_CLASSES.ERROR)
                                    },
                                    error: function(xhr, status, error) {
                                        if (self._config.onError) {
                                            self._$el.find(TAGGING_WRAPPER_SELECTOR).addClass(STATUS_CLASSES.ERROR);
                                            self._config.onError(xhr, status, error)
                                        }
                                    }
                                })
                            },
                            change: function(e) {
                                var self = this,
                                    added = e.added || false,
                                    removed = e.removed || false,
                                    key, data, json, addedQueue = this._config.queue.added,
                                    noId = this._config.id === null || this._config.id === undefined;
                                this._config.onChange(e);
                                if (this._config.disableAjax !== true) if (added !== false) {
                                    added = e.added;
                                    if (noId) {
                                        if (_.findWhere(addedQueue, added) == null) this._config.queue.added.push(added);
                                        return false
                                    }
                                    this._config.onAdd(e.added);
                                    self._request(added, "put")
                                } else if (removed !== false) {
                                    removed = e.removed;
                                    if (noId) {
                                        this._config.queue.added = _.without(addedQueue, _.findWhere(addedQueue, {
                                            id: removed.id
                                        }));
                                        return false
                                    }
                                    this._config.onRemove(removed);
                                    self._request(removed, "delete")
                                }
                                data = this._$el_input.select2("data");
                                json = JSON.stringify(data);
                                if (self._config.disableHiddenInput === false) self._$hidden_input.val(json)
                            },
                            attachEventListeners: function() {
                                var self = this;
                                return this.templateReady.then(function() {
                                    self.s2 = self._$el_input.select2({
                                        placeholder: self._config.placeholderText,
                                        multiple: true,
                                        maximumSelectionSize: self._config.maxTags,
                                        containerCss: "pill-tagging-container-el",
                                        dropdownAutoWidth: true,
                                        minimumInputLength: 1,
                                        formatSearching: i18n.get("i18n_tagging_pills_searching_message"),
                                        formatNoMatches: i18n.get("i18n_tagging_pills_no_match_message"),
                                        formatInputTooShort: i18n.get("i18n_tagging_pills_too_short_message"),
                                        formatSelectionTooBig: i18n.get("i18n_tagging_pills_too_many_message"),
                                        width: "100%",
                                        query: self._query,
                                        formatResult: function(data, $container) {
                                            var $typeaheadElement = $(self._config.typeaheadTemplate),
                                                $typeaheadChild = $typeaheadElement.find(".tagging-pill-typeahead-item");
                                            if (!$typeaheadChild.length) $typeaheadElement.text(data.html);
                                            else $typeaheadChild.text(data.html);
                                            return $typeaheadElement
                                        },
                                        formatSelection: function(data, $container) {
                                            var $pillElement = $(self._config.pillTemplate),
                                                $pillChild = $pillElement.find(".tagging-pill-item");
                                            if (!$pillChild.length) $pillElement.text(data.html);
                                            else $pillChild.text(data.html);
                                            $container.html($pillElement)
                                        }
                                    });
                                    self.s2.on("change", self.change);
                                    if (self._config.disabled === true) this._$el_input.select2("readonly", true);
                                    self.getInitialSet();
                                    return self.s2
                                })
                            }
                        }
                    });
                    LIModules.exports("TaggingPills", TaggingPills)
                })();;
                if (typeof LI.TaggingPills !== "undefined") {
                    module.setExports(LI.TaggingPills);
                }
            });

            Inject.INTERNAL.executor.exec66.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/apps/tagging/Tagging", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Ftagging%2FTagging.js");
        try {
            Inject.INTERNAL.executor.exec66.innerFn.call(Inject.INTERNAL.executor.exec66.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec66.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fexternal%2Fnetwork%2Fscripts%2Fapps%2Ftagging%2FTagging.js

#65 JavaScript::Eval (size: 6354, repeated: 1)

Inject.INTERNAL.executor.exec67.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec67.innerFn = function() {
            // id: scripts/shared/utils/URI uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FURI.js
            var module = Inject.INTERNAL.executor.exec67.module,
                require = Inject.INTERNAL.executor.exec67.require,
                define = Inject.INTERNAL.executor.exec67.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            (function() {
                var _ = LIModules.requires("underscore"),
                    EMPTY = "",
                    QUESTION_MARK = "?",
                    AMPERSAND = "\x26",
                    AT_SIGN = "@",
                    EQUAL_SIGN = "\x3d",
                    COLON = ":",
                    SLASH = "/",
                    SLASHES = "//",
                    HREF = "href",
                    PARAMS = "params",
                    SEARCH = "search",
                    COMPONENTS = ["hash", "host", "hostname", HREF, "password", "pathname", "port", "protocol", SEARCH, "username", PARAMS, "email", "data"],
                    PROTOCOL_MAILTO = "mailto:",
                    PROTOCOL_HTTPS = "https:",
                    rIsSearchFragment = /^[^\/\?]*[&=]/,
                    rKeyValuePairs = /([^&=]+)(?:\[\])?=?([^&]*)/g,
                    rPlusSigns = /\+/g,
                    rUrlProtocols = /^(?:f|ht)tps?\:$/,
                    env = {
                        test: !! window.LI_JS_TEST
                    },
                    uri_node;

                function isURL(protocol) {
                    return !(protocol && !rUrlProtocols.test(protocol))
                }
                function decode(value) {
                    value = value.replace(rPlusSigns, " ");
                    try {
                        return window.decodeURIComponent(value)
                    } catch (e) {
                        return window.unescape(value)
                    }
                }
                function encode(value) {
                    return window.encodeURIComponent(value)
                }
                function URI() {
                    var my = this;
                    my.parse = function(url, defaults) {
                        defaults = defaults ? my.parse(defaults) : {};
                        var uri = url,
                            components = {},
                            tmp;
                        if (!url) return components;
                        if (!_.isObject(url)) {
                            uri = uri_node || (uri_node = document.createElement("a"));
                            uri.href = url;
                            uri.data = EMPTY
                        }
                        if (uri.protocol === PROTOCOL_MAILTO) {
                            tmp = uri.href.replace(uri.protocol, EMPTY).split(QUESTION_MARK);
                            components.email = tmp[0];
                            components.search = tmp[1] ? QUESTION_MARK + tmp[1] : EMPTY
                        } else components.data = uri.data || uri.href.replace(uri.protocol, EMPTY);
                        _.each(COMPONENTS, function(name) {
                            components[name] = components[name] || uri[name] || defaults[name] || EMPTY
                        });
                        components.pathname = components.pathname || "";
                        if (!/^\//.test(components.pathname)) components.pathname = SLASH + components.pathname;
                        if (components.protocol === COLON) components.protocol = window.location.protocol;
                        components.href = components.href || my.build(components);
                        return components
                    };
                    my.parse.search = function(search, isFragment) {
                        var params = {};
                        if (!search) return params;
                        if (_.isObject(search)) return search;
                        if (typeof search === "string") {
                            if (isFragment === undefined) isFragment = rIsSearchFragment.test(search);
                            if (isFragment) search = QUESTION_MARK + search.split(QUESTION_MARK).pop();
                            search = my.parse(search).search.substr(1);
                            search.replace(rKeyValuePairs, function() {
                                var key = decode(arguments[1]),
                                    value = decode(arguments[2]),
                                    currentValue = params[key];
                                if (params[key]) params[key] = [].concat(params[key], value);
                                else params[key] = value
                            })
                        }
                        return params
                    };
                    my.parse.params = function(params) {
                        return my.parse.search(params, true)
                    };
                    my.build = function(uri) {
                        if (typeof uri === "string") uri = my.parse(uri);
                        uri.search = my.build.search(uri.search, uri.params);
                        uri.protocol = uri.protocol || EMPTY;
                        if (uri.protocol === PROTOCOL_MAILTO) return uri.protocol + (uri.email || EMPTY) + (uri.search || EMPTY);
                        if (isURL(uri.protocol)) {
                            uri.auth = EMPTY;
                            if (uri.username || uri.password) {
                                uri.password = uri.password ? COLON + uri.password : EMPTY;
                                uri.auth = uri.username + uri.password + AT_SIGN
                            }
                            uri.host = (uri.hostname ? uri.hostname + (uri.port ? COLON + uri.port : EMPTY) : EMPTY) || uri.host || EMPTY;
                            uri.pathname = uri.pathname || SLASH;
                            uri.hash = uri.hash || EMPTY;
                            uri.email = uri.email || EMPTY;
                            if (uri.host) uri.protocol = uri.protocol + SLASHES;
                            return uri.protocol + uri.auth + uri.host + uri.pathname + uri.search + uri.hash
                        }
                        return (uri.protocol || EMPTY) + (uri.data || EMPTY)
                    };
                    my.build.params = function(obj, raw) {
                        var params = [],
                            values, value;
                        for (var name in obj) if (obj.hasOwnProperty(name)) {
                            values = obj[name];
                            name = encode(name) + EQUAL_SIGN;
                            if (values !== undefined) {
                                values = [].concat(values);
                                _.each(values, function(value) {
                                    params.push(name + encode(value))
                                })
                            }
                        }
                        return raw ? params : params.join(AMPERSAND)
                    };
                    my.build.search = function(uri, params) {
                        var search;
                        if (arguments.length === 1) {
                            params = uri;
                            search = false
                        } else search = my.parse(uri).search;
                        params = my.parse.params(params);
                        params = my.build.params(params);
                        params = params || EMPTY;
                        if (search && search !== QUESTION_MARK) return params ? [search, params].join(AMPERSAND) : search;
                        return params ? QUESTION_MARK + params : params
                    };
                    my.is = {};
                    my.is.secure = function(uri) {
                        return my.parse(uri, window.location).protocol === PROTOCOL_HTTPS
                    };
                    my.is.sameOrigin = function(uri, compare) {
                        compare = compare ? my.parse(compare) : window.location;
                        uri = my.parse(uri, window.location);
                        if (/^(?:data|javascript)\:$/.test(uri.protocol)) {
                            uri.protocol = window.location.protocol;
                            uri.host = window.location.host
                        }
                        return compare.host === uri.host && compare.protocol === uri.protocol
                    };
                    my.set = function(uri, obj) {
                        uri = my.parse(uri);
                        for (var name in obj) if (obj.hasOwnProperty(name)) uri[name] = obj[name];
                        return my.build(uri)
                    };
                    _.each(COMPONENTS, function(name) {
                        if (name !== HREF) my.set[name] = function(name) {
                            return function(uri, value) {
                                var obj = {};
                                obj[name] = value;
                                return my.set(uri, obj)
                            }
                        }(name)
                    });
                    my.remove = function(uri) {
                        uri = my.parse(uri);
                        var args = [].slice.call(arguments);
                        args.shift();
                        _.each(args, function(arg) {
                            arg = [].concat(arg);
                            _.each(arg, function(name) {
                                delete uri[name]
                            })
                        });
                        return my.build(uri)
                    };
                    _.each(COMPONENTS, function(name) {
                        if (name !== HREF) my.remove[name] = function(name) {
                            if (name === PARAMS) name = SEARCH;
                            return function(uri) {
                                return my.remove(uri, name)
                            }
                        }(name)
                    });
                    my.publicInterface = {
                        build: my.build,
                        parse: my.parse,
                        set: my.set,
                        remove: my.remove,
                        is: my.is
                    };
                    if (env.test) my.publicInterface._test = {
                        decode: decode
                    };
                    return my.publicInterface
                }
                LIModules.exports("URI", new URI)
            })();

            Inject.INTERNAL.executor.exec67.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("scripts/shared/utils/URI", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FURI.js");
        try {
            Inject.INTERNAL.executor.exec67.innerFn.call(Inject.INTERNAL.executor.exec67.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec67.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fscmp%2Fscripts%2Fshared%2Futils%2FURI.js

#66 JavaScript::Eval (size: 17147, repeated: 1)

Inject.INTERNAL.executor.exec68.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec68.innerFn = function() {
            // id: javascripts/news/stream/views/DetailsArticleView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsArticleView.js
            var module = Inject.INTERNAL.executor.exec68.module,
                require = Inject.INTERNAL.executor.exec68.require,
                define = Inject.INTERNAL.executor.exec68.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "t8", "../appConfig", "./ArticleView", "../../helpers/appViewHelpers", "scripts/shared/FollowToggler", "javascripts/news/controls/LikeToggler", "scripts/apps/sharing/SocialShareButton", "scripts/shared/china/WeChatShareButton", "scripts/shared/ImagesLoaded", "javascripts/news/controls/CollapsedSAMLoader", "../appTracking", "javascripts/util/plugins/dataPrefix", "scripts/shared/HopscotchCallout.js", "scripts/shared/Dropdown", "scripts/apps/tagging/Tagging", "scripts/shared/utils/URI", "DwellTimeTracker"], function($, _, Backbone, t8, appConfig, ArticleView, appViewHelpers, FollowToggler, LikeToggler, SocialShareButton, WeChatShareButton, ImagesLoaded, CollapsedSAMLoader, appTracking, Helps, GlobalAlertManager, HopscotchCallout, Dropdown, TaggingPills, URI, DwellTimeTracker) {
                var isLazyLoadingEnabled = appConfig.getLix("streamDetailsLazyLoadingEnabled"),
                    showTags = appConfig.getLix("showTags"),
                    promptToShareEnabled = appConfig.getLix("promptToShareEnabled"),
                    semaphoreFlagging = appConfig.getLix("streamDetailsUseSemaphore"),
                    articleJustPublished = play.parseQueryStringSimple(location.href).published !== undefined,
                    shiftDesign = appConfig.getLix("dexterShift1Design"),
                    env = LIModules.imports("environment"),
                    i18n = LIModules.requires("i18n"),
                    jSecure = LIModules.imports("jSecure"),
                    htmlUnencode = jSecure && jSecure.text || LIModules.requires("htmlUnencode"),
                    TaggingPills = LIModules.requires("TaggingPills"),
                    Dropdown = LIModules.requires("Dropdown"),
                    HopscotchCallout = LIModules.requires("HopscotchCallout"),
                    URI = LIModules.requires("URI"),
                    ModalDialogBox = LIModules.requires("ModalDialogBox"),
                    SpamReportDialog = LIModules.requires("SpamReportDialog"),
                    WeChatShareButton = LIModules.requires("WeChatShareButton"),
                    locale = i18n.getLocale().value,
                    DWELL_TIME_BEACON_APP_ID = appConfig.getLix("streamDwelltimeTrackBeacon") ? "dexter-beacon" : null,
                    DWELL_TIME_SINGLE_APP_ID = appConfig.getLix("streamDwelltimeTrackSingle") ? "dexter-single" : null,
                    TAGGING_REDIRECT_TRACKING = "puls-tgging-dxter-rdirect",
                    CLICK_EVENT = "click",
                    EMBED_EVENT = "embed-stream-loaded";
                DwellTimeTracker = require("DwellTimeTracker");
                return ArticleView.extend({
                    options: {
                        template: "templates/news/partials/stream/article/details",
                        offsetTop: 0,
                        contentSelector: ".article-body",
                        commentsSelector: ".article-comments",
                        titleSelector: ".article-title",
                        commentInputSelector: '[name\x3d"commentBody"]',
                        followSelector: ".follow-toggle",
                        shareSelector: ".share-button",
                        socialActionsSelector: ".social-actions",
                        flaggingSelector: ".member-tag",
                        isSharingClass: "on",
                        wechatShareSelector: ".wechat-share-button",
                        likeSelector: ".like-toggle",
                        likeSelectedClass: "on",
                        likeCountDataAttr: "like-count",
                        likeCountWrapper: ".likes .count",
                        likersSeeAllTarget: ".likers-see-all",
                        moreDropdown: ".dropdown",
                        taggingSelector: ".tagging-wrapper",
                        imgFloatMaxWidthRatio: .6,
                        taggingUrnPrefix: "urn:li:linkedInArticle:",
                        imgFloatClasses: {
                            left: "left",
                            right: "right",
                            center: "center"
                        }
                    },
                    className: "stream-article-placeholder",
                    events: {
                        "click .action-comment": "_handleViewComments",
                        "click .article-body a": "_handleLinkClick",
                        "click .member-tag": "_handleMemberFlagClick",
                        "click .social-actions-button-share": "_handleSocialActionsShareClick",
                        "click .social-actions-summary .likes": "_handleLikersSeeAllClick",
                        "mouseleave .social-actions-actions": "_handleSocialActionsMouseleave",
                        "mouseenter .social-actions-actions": "_handleSocialActionsMouseenter"
                    },
                    initialize: function(options) {
                        var $html = $("html");
                        this.isMobile = $html.hasClass("os-ios") || $html.hasClass("os-android");
                        this.on("select", _.bind(this._handleArticleSelect, this));
                        this.on("deselecting", _.bind(this._handleArticleDeselecting, this));
                        if (promptToShareEnabled && articleJustPublished) {
                            this.$promptToShareDialog = $(".prompt-to-share-dialog");
                            if (this.$promptToShareDialog.length !== 0) {
                                this.promptToShareArticle = true;
                                this._initPromptToShare()
                            }
                        }
                        this.on("render", _.bind(this._initArticle, this));
                        if (isLazyLoadingEnabled) {
                            this.on("prerender", _.bind(this._prepLazyLoadEmbeds, this));
                            this.once("render", _.bind(this._lazyLoadImages, this));
                            this.once("select", _.bind(this._lazyLoadEmbeds, this))
                        }
                        ArticleView.prototype.initialize.call(this, options)
                    },
                    _initArticle: function() {
                        var o = this.options,
                            self = this;
                        this.$content = this.$el.find(o.contentSelector);
                        this.$comments = this.$el.find(o.commentsSelector);
                        this.contentWidth = this.$content.width();
                        this.$socialActions = this.$el.find(o.socialActionsSelector);
                        this._initFollowTogglers();
                        this._initLikeTogglers();
                        this._initShareButtons();
                        this._initSAMLoader();
                        this._initArticleFlagging();
                        this._fixImageFloats();
                        this._fixIframeSize();
                        this._initHopscotchCallout();
                        if (this.promptToShareArticle) this._initPromptToShare();
                        if (showTags) this._initTaggingPills()
                    },
                    _prepLazyLoadEmbeds: function($content) {
                        $content.find("iframe").each(function(idx, el) {
                            var $el = $(el),
                                lazyloadAttr = $el.attr("data-li-src"),
                                src;
                            if (!lazyloadAttr) {
                                src = $el.attr("src");
                                $el.attr({
                                    "src": "about:blank",
                                    "data-li-src": src
                                })
                            }
                        })
                    },
                    _lazyLoadEmbeds: function() {
                        var self = this;
                        this.$content.find("iframe[data-li-src]").each(function(idx, el) {
                            var $el = $(el),
                                timeDef = $.Deferred(),
                                timeStart = new Date,
                                isUniversalEmbed = $el.prop("class").indexOf("universal_embed") === -1 ? false : true,
                                src = isUniversalEmbed ? $el.data("li-src").replace(/\'/g, "%27") : $el.data("li-src");
                            $el.removeAttr("data-li-src").attr({
                                "src": src
                            });
                            if (!isUniversalEmbed) {
                                timeDef.then(function() {
                                    appTracking.track(EMBED_EVENT, self.model.get("trackingToken"), {
                                        src: $el.attr("src"),
                                        articleId: self.model.get("articleId"),
                                        type: "loaded",
                                        timeDiff: Math.abs(new Date - timeStart)
                                    })
                                });
                                $el.on("load", function() {
                                    timeDef.resolve()
                                })
                            }
                        })
                    },
                    _lazyLoadImages: function() {
                        var images = this.$el.find("img[data-li-src]");
                        appViewHelpers.lazyLoadImgCollection(images)
                    },
                    _handleViewComments: function(evt) {
                        var o = this.options,
                            $input = this.$comments.find(o.commentInputSelector);
                        evt.preventDefault();
                        if (this.$comments.length) {
                            $("html, body").stop().animate({
                                scrollTop: this.$comments.offset().top - o.offsetTop
                            }, 200);
                            if ($input.length) $input.focus();
                            appTracking.track(CLICK_EVENT, this.model.get("trackingToken"), {
                                target: "comments"
                            })
                        }
                    },
                    _handleLinkClick: function() {
                        appTracking.track(CLICK_EVENT, this.model.get("trackingToken"), {
                            target: "link"
                        }, false)
                    },
                    _initArticleFlagging: function() {
                        var $flagEl = this.$el.find(this.options.flaggingSelector);
                        $flagEl.removeClass("hidden")
                    },
                    _handleMemberFlagClick: function(evt) {
                        evt.preventDefault();
                        var $target = $(evt.target),
                            dialogConfig, mdb;
                        if (semaphoreFlagging && shiftDesign) dialogConfig = {
                            externalsPath: "scss/spam_report",
                            callbacks: {
                                submitSuccess: _.bind(function() {
                                    this.model.collection.trigger("removeFlaggedItem", this.model.get("articleId"))
                                }, this)
                            }
                        };
                        else dialogConfig = {
                            title: i18n.get("i18n_details_stream_tagging_title"),
                            taggingTemplate: "templates/shared/embeds/flagContentForm",
                            decorators: ["scripts/shared/Dialog/AjaxFormSubmission", "scripts/apps/today/FlagMemberContent"],
                            width: "responsive",
                            customClassName: "flag-content"
                        };
                        if (!(env && env.consumer2)) if (semaphoreFlagging && shiftDesign) _.extend(dialogConfig, {
                            tlPathPrefix: "tl/shared",
                            templateDataUrl: "/psettings/flagging-menu?entityUrn\x3durn:li:linkedInArticle:" + window.encodeURIComponent($target.data("content-urn")) + "\x26authorUrn\x3durn:li:member:" + window.encodeURIComponent($target.data("author-urn")) + "\x26contentSource\x3d" + window.encodeURIComponent($target.data("content-source")),
                            maskTemplate: "templates/shared/embeds/dialog/dialog_mask",
                            style: shiftDesign ? null : "davinci"
                        });
                        else _.extend(dialogConfig, {
                            dialogTemplate: "templates/shared/embeds/dialog/dialog",
                            maskTemplate: "templates/shared/embeds/dialog/dialog_mask",
                            dialogCss: ""
                        });
                        mdb = semaphoreFlagging ? new SpamReportDialog($target, dialogConfig) : new ModalDialogBox($target, dialogConfig);
                        mdb.open()
                    },
                    _handleSocialActionsShareClick: function(evt) {
                        var o = this.options;
                        this.$socialActions.addClass(o.isSharingClass)
                    },
                    _handleSocialActionsMouseleave: function() {
                        this._disableSocialSharing()
                    },
                    _handleSocialActionsMouseenter: function() {
                        this._clearDisableSocialSharing()
                    },
                    _disableSocialSharing: function() {
                        var o = this.options;
                        this._hideSharingTimer = setTimeout(_.bind(function() {
                            this.$socialActions.removeClass(o.isSharingClass)
                        }, this), 500)
                    },
                    _clearDisableSocialSharing: function() {
                        window.clearTimeout(this._hideSharingTimer)
                    },
                    _handleLikersSeeAllClick: function(evt) {
                        var o = this.options,
                            $likersSeeAllTarget = this.$el.find(o.likersSeeAllTarget),
                            likersDialog;
                        evt.preventDefault();
                        likersDialog = new ModalDialogBox($likersSeeAllTarget, {
                            title: i18n.get("i18n_text_likes"),
                            customClassName: "see-all-likers-dialog",
                            decorators: ["scripts/shared/Dialog/AjaxLoading"],
                            dialogCss: ""
                        });
                        likersDialog.open()
                    },
                    _initSAMLoader: function() {
                        var self = this,
                            initialCommentCount = appConfig.getLix("streamDetailsInitialCommentCount"),
                            samLoader;
                        if (appConfig.getLix("streamDetailsSamEnabled")) {
                            samLoader = new CollapsedSAMLoader(this.model.get("articleId"), this.$comments, this.model.get("permLink"));
                            samLoader.seeMoreText = i18n.get("i18n_show_more");
                            if (initialCommentCount) samLoader.collapsedCount = initialCommentCount;
                            samLoader.onAfterAppend(function() {
                                self.trigger("commentsLoaded contentChanged");
                                self.off("select", samLoader.load, samLoader);
                                self.off("deselecting", samLoader.cancel, samLoader);
                                self._initShareButtons(self.$comments);
                                if (shiftDesign) self._initSortingDropdown()
                            });
                            samLoader.onExpanded(function() {
                                self.trigger("contentChanged")
                            });
                            this.on("deselecting", samLoader.cancel, samLoader);
                            this.on("select", samLoader.load, samLoader)
                        }
                    },
                    _initShareButtons: function($el) {
                        var o = this.options,
                            model = this.model,
                            messageTxt, url = model.get("url"),
                            $el = $el || this.$el,
                            self = this,
                            $first = $(".stream-article:first");
                        $el.find(o.shareSelector).each(function(i, el) {
                            var $el = $(el),
                                data = $el.dataPrefix("share") || {},
                                toggler, $promptToShareButton;
                            if (data.text) data.text = htmlUnencode(data.text);
                            messageTxt = data.type === "linkedin" ? model.get("summary") : model.get("title");
                            toggler = new SocialShareButton(el, _.extend({
                                actionType: "popup",
                                text: messageTxt,
                                url: url,
                                origUrl: url,
                                useEncode: true
                            }, data));
                            if (self.promptToShareArticle && $first.attr("data-stream-title") === model.get("title")) {
                                $promptToShareButton = $first.find('.prompt-to-button[data-share-type\x3d"' + data.type + '"]');
                                if ($promptToShareButton.length !== 0 && !$promptToShareButton.hasClass("prompt-social-share")) {
                                    $promptToShareButton.addClass("prompt-social-share");
                                    toggler = new SocialShareButton($promptToShareButton[0], _.extend({
                                        actionType: "popup",
                                        text: messageTxt,
                                        url: url,
                                        origUrl: url,
                                        useEncode: true,
                                        webtrack: "pulse-stream-prompt-to-share-" + data.type
                                    }, data))
                                }
                            }
                        });
                        $el.find(o.wechatShareSelector).each(function(i, el) {
                            var tooltip = new WeChatShareButton(el, {
                                url: play.addQueryParameter(url, "trk", "pulse-wechat-qr"),
                                cssDependencies: []
                            })
                        })
                    },
                    _fixImageFloats: function() {
                        var o = this.options,
                            cls = o.imgFloatClasses,
                            maxWidth = this.contentWidth * o.imgFloatMaxWidthRatio,
                            imagesLoaded = new ImagesLoaded(this.$content),
                            contentAdjusted = false;
                        imagesLoaded.promise.then(_.bind(function() {
                            this.$content.find("img." + cls.left + ", img." + cls.right).each(function(i, el) {
                                var $el = $(el);
                                width = $el.width();
                                if (width > maxWidth) {
                                    $el.removeClass(cls.left + " " + cls.right).addClass(cls.center);
                                    contentAdjusted = true
                                }
                            });
                            if (contentAdjusted) this.trigger("contentChanged")
                        }, this))
                    },
                    _fixIframeSize: function() {
                        var o = this.options,
                            maxWidth = this.contentWidth,
                            contentAdjusted = false;
                        this.$content.find("iframe").each(function(i, el) {
                            var $el = $(el),
                                self = this,
                                width = $el.width(),
                                height;
                            if (width > maxWidth) {
                                height = $el.height();
                                $el.css({
                                    width: maxWidth,
                                    height: Math.ceil(maxWidth / width * height)
                                });
                                contentAdjusted = true
                            }
                        });
                        if (contentAdjusted) this.trigger("contentChanged")
                    },
                    _initFollowTogglers: function() {
                        var o = this.options;
                        this.$el.find(o.followSelector).each(function(i, el) {
                            var toggler = new FollowToggler($(el), {
                                requestMethod: "POST",
                                toggleContainerClass: "follow-toggle"
                            })
                        })
                    },
                    _initLikeTogglers: function() {
                        var o = this.options,
                            self = this,
                            model = this.model;
                        this.$el.find(o.likeSelector).each(function(i, el) {
                            var toggler = (new LikeToggler($(el), {
                                permLink: model.get("permLink"),
                                articleId: model.get("articleId"),
                                likeUrl: appConfig.getUrl("likeArticle"),
                                unlikeUrl: appConfig.getUrl("unlikeArticle"),
                                csrfToken: play.getPageContextValue("csrfToken")
                            })).on("like:success", _.bind(self._updateLikeTogglers, self, true)).on("unlike:success", _.bind(self._updateLikeTogglers, self, false))
                        })
                    },
                    _updateLikeTogglers: function(isLike) {
                        var o = this.options,
                            $article = this.$el,
                            $likeCountWrapper = $article.find(o.likeCountWrapper),
                            $likersSeeAllTarget = $article.find(o.likersSeeAllTarget);
                        $article.find(o.likeSelector).each(function(i, el) {
                            var $el = $(el),
                                countInt = parseInt($el.data(o.likeCountDataAttr), 10) || 0,
                                adjustCount = isLike ? countInt + 1 : countInt - 1,
                                count = (new t8.NumberFormatter).format(adjustCount, locale);
                            $likeCountWrapper.text(count);
                            $el.data(o.likeCountDataAttr, adjustCount).toggleClass(o.likeSelectedClass, isLike).blur();
                            $likersSeeAllTarget.parent().toggleClass("hidden", count < 1)
                        })
                    },
                    _initHopscotchCallout: function() {
                        var el = this.$(".social-shares.social-callout-enabled")[0],
                            title = i18n.get("i18n_details_stream_social_callout_title"),
                            copy = i18n.get("i18n_details_stream_social_callout_copy"),
                            hopscotch;
                        if (el) hopscotch = new HopscotchCallout(el, {
                            id: "social-callout",
                            title: title,
                            content: copy,
                            orientation: "top",
                            openOnLoad: true,
                            yOffset: -5,
                            width: 220,
                            arrowOffset: 110,
                            xOffset: -80
                        })
                    },
                    _initSortingDropdown: function() {
                        var $dropdownEl = this.$el.find(".sorting-dropdown"),
                            dropdown;
                        dropdown = new Dropdown($dropdownEl, {
                            eventType: CLICK_EVENT,
                            triggerSelector: ".dropdown-trigger"
                        });
                        $dropdownEl.on(CLICK_EVENT, "li", function(e) {
                            var $this = $(this),
                                text = $this.text();
                            dropdown.close();
                            $dropdownEl.find("dt .text").text(text)
                        })
                    },
                    _initTaggingPills: function() {
                        var o = this.options,
                            self = this;
                        if (!self.model.get("megaphoneArticleId")) return;
                        dust.render("templates/shared/tagging/tagging_pill", {}, _.bind(function(err, taggingPill) {
                            this.$el.find(o.taggingSelector).each(function(i, el) {
                                var $el = $(el),
                                    tagInstance = new TaggingPills($el, {
                                        placeholderText: " ",
                                        pillTemplate: taggingPill,
                                        id: encodeURIComponent(o.taggingUrnPrefix + self.model.get("megaphoneArticleId")),
                                        defaultTemplate: "tl/apps/tagging/tagging",
                                        onReady: function(response) {
                                            if (response.tagLabels.length !== 0) {
                                                $el.css("visibility", "visible").removeAttr("aria-hidden");
                                                $el.find(".tagging-pill-item").each(function() {
                                                    var query = $(this).text().replace(/ /g, "-"),
                                                        url = URI.build("/topic/" + encodeURIComponent(query) + "?trk\x3d" + TAGGING_REDIRECT_TRACKING);
                                                    $(this).prop("href", url).off().on(CLICK_EVENT, function() {
                                                        window.location.href = url
                                                    })
                                                })
                                            } else $el.attr("aria-hidden", "true")
                                        }
                                    });
                                tagInstance.toggleDisabled()
                            })
                        }, this))
                    },
                    _initPromptToShare: function() {
                        if (this.$promptToShareDialog.length !== 0) this.$promptToShareDialog.find(".prompt-to-share-x").click(function() {
                            var $parent = $(this).parent(),
                                $imageHolder = $parent.siblings(".prompt-to-share-dialog-image"),
                                $group = $parent.add($imageHolder),
                                hasAnimationClass = $parent.hasClass("prompt-to-share-animations");
                            if (hasAnimationClass) {
                                $group.addClass("prompt-to-share-hide");
                                setTimeout(function() {
                                    $group.remove()
                                }, 300)
                            } else $group.remove()
                        })
                    },
                    _handleArticleSelect: function() {
                        this._isSelected = true;
                        if (!DWELL_TIME_BEACON_APP_ID && !DWELL_TIME_SINGLE_APP_ID) return;
                        if (!this.dwellTimeTracker) this.dwellTimeTracker = new DwellTimeTracker.
                    default ({
                            pageKey: this.options.articlePageKey,
                            trackingCode: play.getUrlParameter(window.location.href, "trk")
                        }, {
                            urn: "urn:li:ingestedContent:" + this.model.get("articleId"),
                            metadata: {
                                contextId: this.model.get("contextId")
                            }
                        }, {
                            appId: DWELL_TIME_BEACON_APP_ID,
                            callback: function(schema) {
                                $.ajax({
                                    type: "POST",
                                    url: appConfig.getUrl("mobTrackingUrl"),
                                    data: JSON.stringify(schema),
                                    contentType: "application/json"
                                })
                            }
                        }, {
                            appId: DWELL_TIME_SINGLE_APP_ID,
                            callback: function(schema) {
                                $.ajax({
                                    type: "POST",
                                    url: appConfig.getUrl("mobTrackingUrl"),
                                    data: JSON.stringify(schema),
                                    contentType: "application/json",
                                    async: false
                                })
                            }
                        }, _.bind(function() {
                            return this._isSelected
                        }, this));
                        this.dwellTimeTracker.startSession()
                    },
                    _handleArticleDeselecting: function() {
                        var tracker = this.dwellTimeTracker;
                        if (tracker) tracker.endSession();
                        this._isSelected = false
                    }
                })
            });

            Inject.INTERNAL.executor.exec68.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/DetailsArticleView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsArticleView.js");
        try {
            Inject.INTERNAL.executor.exec68.innerFn.call(Inject.INTERNAL.executor.exec68.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec68.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsArticleView.js

#67 JavaScript::Eval (size: 4581, repeated: 1)

Inject.INTERNAL.executor.exec69.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec69.innerFn = function() {
            // id: javascripts/news/stream/views/ArticleListView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleListView.js
            var module = Inject.INTERNAL.executor.exec69.module,
                require = Inject.INTERNAL.executor.exec69.require,
                define = Inject.INTERNAL.executor.exec69.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "backbone", "./ArticleView", "../../helpers/appViewHelpers"], function($, _, Backbone, ArticleView, appViewHelpers) {
                return Backbone.View.extend({
                    options: {
                        offsetTop: 0,
                        scrollSpeed: 400
                    },
                    initialize: function(options) {
                        var o = _.extend(this.options, options);
                        this._viewCache = {};
                        this._selectingId = null;
                        this._selectedId = null;
                        this.listenTo(this.collection, "add", _.bind(this._addView, this));
                        this.listenTo(this.collection, "remove", _.bind(this._removeView, this))
                    },
                    _triggerViewEvent: function(eventName, articleId, options) {
                        this.trigger(eventName, articleId, options);
                        this.getView(articleId).trigger(eventName, options)
                    },
                    _addView: function(model, collection, options) {
                        options = options || {};
                        var o = this.options,
                            view = new ArticleView({
                                model: model,
                                el: options.el,
                                offsetTop: o.offsetTop
                            }),
                            articleId = view.articleId,
                            prevView;
                        this._setView(articleId, view);
                        view.render(options).done(_.bind(function($el) {
                            if ($el) {
                                prevView = this.getView(articleId, -1);
                                if (prevView) prevView.$el.after($el);
                                else this.$el.append($el)
                            }
                        }, this))
                    },
                    _removeView: function(model) {
                        var o = this.options,
                            articleId = model.id,
                            view = this.getView(articleId);
                        if (view) {
                            view.remove();
                            this._setView(articleId, null);
                            if (this._selectedView = view) this._selectedView = this._selectedId = null
                        }
                    },
                    selectAt: function(location, options) {
                        var model, articleId;
                        switch (location) {
                        case "next":
                            articleId = this.getOffsetId(this._selectedId, 1);
                            break;
                        case "previous":
                            articleId = this.getOffsetId(this._selectedId, -1);
                            break;
                        default:
                            model = this.collection.at(location);
                            articleId = model && model.id
                        }
                        return this.select(articleId, options)
                    },
                    select: function(articleId, options) {
                        var view = this.getView(articleId);
                        options = options || {};
                        if (!view || this._selectingId === articleId) return $.Deferred().reject();
                        return this.fetch(articleId, {
                            throttle: options.throttle || true
                        }).then(_.bind(function() {
                            if (this._selectingId == articleId) {
                                if (this._selectedId) this._triggerViewEvent("deselect", this._selectedId, options);
                                this._triggerViewEvent("select", articleId, options);
                                this._selectedId = articleId;
                                this.fetch(articleId, {
                                    offset: 1
                                })
                            }
                        }, this))
                    },
                    _setView: function(articleId, view) {
                        this._viewCache[articleId] = view
                    },
                    getView: function(articleId, offset) {
                        if (offset) articleId = this.getOffsetId(articleId, offset);
                        return this._viewCache[articleId]
                    },
                    getOffsetId: function(articleId, offset) {
                        var index = -1,
                            model, offsetIndex;
                        if (articleId) {
                            model = this.collection.get(articleId);
                            if (model) index = this.collection.indexOf(model)
                        }
                        offsetIndex = index > -1 ? index + offset : -1;
                        if (offsetIndex >= 0 && offsetIndex < this.collection.length) return this.collection.at(offsetIndex).id;
                        else return null
                    },
                    fetch: function(articleId, options) {
                        var model = appViewHelpers.getModelByIdOrPermLink(articleId, this.collection),
                            view, fetch;
                        articleId = model.id;
                        options = options || {};
                        options.render = options.render !== false;
                        if (options.offset) articleId = this.getOffsetId(articleId, options.offset);
                        view = this.getView(articleId);
                        if (view) {
                            if (options.throttle && this._fetchDeferred) this._fetchDeferred.reject();
                            if (options.render) fetch = view.fetch();
                            else fetch = view.model.fetch();
                            if (options.throttle) {
                                this._fetchDeferred = fetch;
                                fetch.always(_.bind(function() {
                                    this._fetchDeferred = null
                                }, this))
                            }
                            return fetch
                        } else return $.Deferred().reject()
                    }
                })
            });

            Inject.INTERNAL.executor.exec69.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/views/ArticleListView", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleListView.js");
        try {
            Inject.INTERNAL.executor.exec69.innerFn.call(Inject.INTERNAL.executor.exec69.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec69.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FArticleListView.js

#68 JavaScript::Eval (size: 7015, repeated: 1)

Inject.INTERNAL.executor.exec7.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec7.innerFn = function() {
            // id: javascripts/news/controls/ScrollMonitor uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FScrollMonitor.js
            var module = Inject.INTERNAL.executor.exec7.module,
                require = Inject.INTERNAL.executor.exec7.require,
                define = Inject.INTERNAL.executor.exec7.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["jquery", "underscore", "scripts/shared/BaseControl", "javascripts/util/EventUtils"], function($, _, BaseControl, EventUtils) {
                var SCROLL = "scroll",
                    RESIZE = "resize",
                    MOUSEWHEEL = "mousewheel",
                    NAMESPACE = "scroll-monitor";
                return BaseControl.extend(function(base) {
                    var DEFAULT_CONFIG = {
                        scrollThrottle: 100,
                        silentScrollSpeed: 200,
                        offsetTop: 0,
                        offsetBottom: 0,
                        nearingOffsetTop: 0,
                        nearingOffsetBottom: 0,
                        exitingOffsetTop: 0,
                        exitingOffsetBottom: 0,
                        containScroll: false,
                        triggerScrollOnInit: false
                    };
                    return _.extend({
                        beforeDecoration: function() {
                            _.defaults(this._config, DEFAULT_CONFIG);
                            this._namespace = _.uniqueId(NAMESPACE);
                            this._trackers = {};
                            this._previousScroll = null
                        },
                        afterInit: function() {
                            this.reset({
                                silent: !this._config.triggerScrollOnInit
                            })
                        },
                        attachEventListeners: function() {
                            var c = this._config;
                            this._$el.on(SCROLL + "." + this._namespace, _.throttle(this.checkScroll, c.scrollThrottle));
                            this._$el.on(RESIZE + "." + this._namespace, _.debounce(this.reset, 200));
                            if (c.containScroll) this._$el.on(MOUSEWHEEL, this._evtScrollContain)
                        },
                        removeEventListeners: function() {
                            this._$el.off("." + this._namespace)
                        },
                        reset: function(options) {
                            var c = this._config,
                                valList = ["offsetTop", "offsetBottom", "exitingOffsetTop", "exitingOffsetBottom", "nearingOffsetTop", "nearingOffsetBottom"];
                            options = options || {};
                            options.silent = options.silent !== false;
                            this._viewportHeight = this._$el.height();
                            this._viewportScrollHeight = this._$el.prop("scrollHeight") || 0;
                            _.each(valList, _.bind(function(val) {
                                this[val] = _.isFunction(c[val]) ? c[val](this._viewportHeight) : c[val]
                            }, this));
                            this._contentTop = this.offsetTop;
                            this._contentBottom = this._viewportScrollHeight - this.offsetBottom;
                            this._nearingContentTop = this._contentTop + this.nearingOffsetTop;
                            this._nearingContentBottom = this._contentBottom - this.nearingOffsetBottom;
                            if (options.clear) {
                                this._nearingTop = null;
                                this._nearingBottom = null
                            }
                            if (!options.silent) this.checkScroll()
                        },
                        checkScroll: function() {
                            if (this._$el.is(":hidden")) return;
                            var c = this._config,
                                scrollTop = this._$el.scrollTop(),
                                viewportTop = scrollTop + this.offsetTop,
                                viewportBottom = scrollTop + this._viewportHeight - this.offsetBottom,
                                exitingTop = viewportTop + this.exitingOffsetTop,
                                exitingBottom = viewportBottom - this.exitingOffsetBottom,
                                baseData = {
                                    direction: this._previousScroll < scrollTop ? "down" : "up"
                                };
                            this._previousScroll = scrollTop;
                            _.each(this._trackers, function(data, id) {
                                _.extend(data, baseData, {
                                    id: id
                                });
                                if (data.offsetTop) {
                                    viewportTop = scrollTop + data.offsetTop;
                                    exitingTop = viewportTop + this.exitingOffsetTop
                                }
                                if (data.offsetBottom) viewportBottom = scrollTop + this._viewportHeight - data.offsetBottom, exitingBottom = viewportBottom - this.exitingOffsetBottom;
                                if (!data.atTop && data.top <= viewportTop) {
                                    this._trigger("top:arrive", data);
                                    data.atTop = true
                                } else if (data.atTop && data.top >= viewportTop) {
                                    this._trigger("top:depart", data);
                                    data.atTop = false
                                } else if (!data.atBottom && data.bottom >= viewportBottom) {
                                    this._trigger("bottom:depart", data);
                                    data.atBottom = true
                                } else if (data.atBottom && data.bottom < viewportBottom) {
                                    this._trigger("bottom:arrive", data);
                                    data.atBottom = false
                                }
                                if (!data.exitedTop && data.bottom < viewportTop) {
                                    this._trigger("exit:top", data);
                                    data.exitedTop = true
                                } else if (!data.exitedBottom && data.top > viewportBottom) {
                                    this._trigger("exit:bottom", data);
                                    data.exitedBottom = true
                                } else if (data.exitedTop && data.bottom > viewportTop) {
                                    this._trigger("enter:top", data);
                                    data.exitedTop = false
                                } else if (data.exitedBottom && data.top < viewportBottom) {
                                    this._trigger("enter:bottom", data);
                                    data.exitedBottom = false
                                }
                                if (this.exitingOffsetTop !== 0) if (!data.exitingTop && data.bottom < exitingTop) {
                                    this._trigger("exiting:top", data);
                                    data.exitingTop = true
                                } else if (data.exitingTop && data.bottom > exitingTop) data.exitingTop = false;
                                if (this.exitingOffsetBottom !== 0) if (!data.exitingBottom && data.top > exitingBottom) {
                                    this._trigger("exiting:bottom", data);
                                    data.exitingBottom = true
                                } else if (data.exitingBottom && data.top < exitingBottom) data.exitingBottom = false
                            }, this);
                            if (this.nearingOffsetTop !== 0) if (!this._nearingTop && viewportTop <= this._nearingContentTop) {
                                this._trigger("nearing:top", baseData);
                                this._nearingTop = true
                            } else if (this._nearingTop && viewportTop > this._nearingContentTop) this._nearingTop = false;
                            if (this.nearingOffsetBottom !== 0) if (!this._nearingBottom && viewportBottom >= this._nearingContentBottom) {
                                this._trigger("nearing:bottom", baseData);
                                this._nearingBottom = true
                            } else if (this._nearingBottom && viewportBottom < this._nearingContentBottom) this._nearingBottom = false
                        },
                        _evtScrollContain: function(evt) {
                            var scrollTop = this._$el.scrollTop(),
                                scrollBottom = this._viewportScrollHeight - this._viewportHeight,
                                delta = evt.originalEvent.deltaY;
                            if (scrollTop === scrollBottom && delta > 0 || scrollTop === 0 && delta < 0) evt.preventDefault()
                        },
                        _trigger: function(eventName, data) {
                            data = data || {};
                            if (data.id) {
                                this.trigger(eventName, data);
                                eventName = data.id + ":" + eventName
                            }
                            this.trigger(eventName, data)
                        },
                        addTracker: function(id, $el, options) {
                            options = options || {};
                            this._trackers[id] = {
                                $el: $el
                            };
                            _.extend(this._trackers[id], options);
                            this.resetTracker(id, {
                                silent: options.silent
                            })
                        },
                        resetTracker: function(id, options) {
                            var $el, height, top;
                            options = options || {};
                            if (this._trackers[id]) {
                                $el = this._trackers[id].$el;
                                height = $el.outerHeight();
                                top = $el.length && $el.offset().top || 0;
                                _.extend(this._trackers[id], {
                                    height: height,
                                    top: top,
                                    bottom: top + height
                                });
                                if (!options.silent) this.checkScroll()
                            }
                        },
                        removeTracker: function(id) {
                            if (this._trackers[id]) delete this._trackers[id]
                        },
                        silentScroll: function(top, speed) {
                            var c = this._config,
                                deferred = $.Deferred(),
                                $scrollElement = $.isWindow(this._$el[0]) ? $("html, body") : this._$el;
                            speed = speed || speed === 0 ? speed : c.silentScrollSpeed;
                            this.removeEventListeners();
                            $scrollElement.stop().animate({
                                scrollTop: top
                            }, speed, function() {
                                deferred.resolve()
                            });
                            return deferred.then(this.attachEventListeners).promise()
                        }
                    }, EventUtils.getEventBus())
                })
            });

            Inject.INTERNAL.executor.exec7.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/controls/ScrollMonitor", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FScrollMonitor.js");
        try {
            Inject.INTERNAL.executor.exec7.innerFn.call(Inject.INTERNAL.executor.exec7.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec7.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fcontrols%2FScrollMonitor.js

#69 JavaScript::Eval (size: 1859, repeated: 1)

Inject.INTERNAL.executor.exec70.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec70.innerFn = function() {
            // id: javascripts/news/stream/promo/articleBanner/bannerHelper uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fpromo%2FarticleBanner%2FbannerHelper.js
            var module = Inject.INTERNAL.executor.exec70.module,
                require = Inject.INTERNAL.executor.exec70.require,
                define = Inject.INTERNAL.executor.exec70.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_line = e;
            };
            define(["../../appConfig"], function(appConfig) {
                var BANNER_PROMO_LIX = "firstArticleBanner";
                return {
                    loadPromo: function() {
                        var promoLix = appConfig.getLix(BANNER_PROMO_LIX),
                            self = this;
                        if (promoLix && promoLix !== "control") require(["./" + promoLix], function(promo) {
                            self.promo = promo;
                            promo.run()
                        })
                    },
                    destroyPromo: function() {
                        if (this.promo.destroy) this.promo.destroy()
                    }
                }
            });

            Inject.INTERNAL.executor.exec70.module = module;
        };
        Inject.INTERNAL.defineExecutingModuleAs("javascripts/news/stream/promo/articleBanner/bannerHelper", "https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fpromo%2FarticleBanner%2FbannerHelper.js");
        try {
            Inject.INTERNAL.executor.exec70.innerFn.call(Inject.INTERNAL.executor.exec70.module);
        } catch (__EXCEPTION__) {
            Inject.INTERNAL.executor.exec70.module.__error = __EXCEPTION__;
        }
        Inject.INTERNAL.undefineExecutingModule();
    }
};

//@ sourceURL=https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fpromo%2FarticleBanner%2FbannerHelper.js

#70 JavaScript::Eval (size: 5943, repeated: 1)

Inject.INTERNAL.executor.exec71.fn = function() {
    with(window) {
        Inject.INTERNAL.executor.exec71.innerFn = function() {
            // id: javascripts/news/stream/views/DetailsArticleListView uri: https://static.licdn.com/sc/p/com.linkedin.pulse-web%3Apulse-web-static-content%2B0.1.1280/f/%2Fpulse-web-frontend%2Fjavascripts%2Fnews%2Fstream%2Fviews%2FDetailsArticleListView.js
            var module = Inject.INTERNAL.executor.exec71.module,
                require = Inject.INTERNAL.executor.exec71.require,
                define = Inject.INTERNAL.executor.exec71.define,
                exports = module.exports;
            try {
                module.undefined_function();
            } catch (e) {
                module.__error_l