



<!DOCTYPE html>
<html lang="en-us">
<head>
    <link rel="shortcut icon" href="//a.disquscdn.com/1438805176/img/favicon16-32.ico" type="image/vnd.microsoft.icon">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <meta http-equiv="Content-Language" content="en-us">
    <meta name="keywords" content="Disqus, disqus.com, comments, blog, blogs, discussion">
    <meta name="description" content="Disqus is a global comment system that improves discussion on websites and connects conversations across the web.">
    <meta name="google" value="notranslate" />
    <title>
    Disqus Admin | Sign-in
    </title>

    
        <script type="text/javascript" charset="utf-8">
    document.domain = 'disqus.com';
    if (window.context === undefined) {
        var context = {};
    }
    context.disqusUrl = 'https://disqus.com';
    context.revealUrl = 'http://hubspot.disqus.biz/reveal-by-disqus-organic';
    context.disqusDomain = 'disqus.com';
    context.mediaUrl = '//a.disquscdn.com/1438805176/';
    context.uploadsUrl = '//a.disquscdn.com/uploads';
    context.sslUploadsUrl = '//a.disquscdn.com/uploads';
    context.loginUrl = 'https://disqus.com/profile/login/';
    context.signupUrl = 'https://disqus.com/profile/signup/';
    context.apiUrl = '//disqus.com/api/3.0/';
    context.apiPublicKey = 'Y1S1wGIzdc63qnZ5rhHfjqEABGA4ZTDncauWFFWWTUBqkmLjdxloTb7ilhGnZ7z1';
    
    context.forum = null;
    context.adminUrl = 'https://disqus.com';
    
    context.switches = {
  "explore_dashboard_2":false,
  "partitions:api:posts/countPendin":false,
  "newyorktimes_modernlove_ad_force":false,
  "use_rs_paginator_30m":false,
  "inline_defaults_css":false,
  "newyorktimes_mcdonalds_ad_force":false,
  "new_start_page":true,
  "postsort":false,
  "newyorktimes_ad":false,
  "enable_entropy_filtering":false,
  "next_logging":false,
  "before_comment_callback":false,
  "realtime_for_oldies":false,
  "new_ads_settings_ui":true,
  "website_addons":true,
  "addons_ab_test":false,
  "spam":true,
  "pub_reporting_v2":true,
  "evm_publisher_reports":true,
  "algorithm_experiments":false,
  "makerstudios_ad":false,
  "shardpost:paginator":false,
  "is_last_modified":true,
  "embed_category_display":false,
  "partitions:api:forums/listPosts":false,
  "rich_media_only":false,
  "limit_get_posts_days_30d":true,
  "next_realtime_anim_disabled":false,
  "juggler_thread_onReady":true,
  "firehose_realertime":false,
  "embed_redirect":false,
  "newyorktimes_boston_ad_force":false,
  "exp_mn2_force":false,
  "newyorktimes_boston_ad":false,
  "website_follow_redirect":true,
  "newyorktimes_mcdonalds_ad":false,
  "raven_js":false,
  "next_home_notifications":false,
  "textdigger_crawler":true,
  "filter_ads_by_country":true,
  "new_sort_paginator":true,
  "newyorktimes_ad_force":false,
  "threadident_reads":false,
  "new_media":false,
  "enable_link_affiliation":true,
  "show_unapproved":false,
  "shardpost":true,
  "dotcom_marketing":false,
  "spell_disqus_ad":false,
  "discovery_analytics":true,
  "newyorktimes_modernlove_ad":false,
  "partitions":true,
  "pd_thumbnail_settings":true,
  "spell_disqus_ad_force":false,
  "spam:akismet_custom_blog_url":true,
  "new_community_nav_embed":true,
  "discussions_tab":true,
  "embed_less_refactor":false,
  "use_rs_paginator_60m":false,
  "juggler_enabled":true,
  "makerstudios_ad_force":false,
  "tipalti_updated_iframe_key":true,
  "secure_oauth_redirect":false,
  "auto_flat_sort":false,
  "disable_moderate_ascending":false,
  "disable_realtime":false,
  "partitions:api":true,
  "new_embed_profile":false,
  "debug_js":false,
  "aggressive_embed_cache":false,
  "use_queue_b":true,
  "community_icon":true,
  "next_track_links":true,
  "postsort:paginator":false,
  "embed_labs":false,
  "sc_preview":true,
  "simple_signup":true,
  "static_styles":true,
  "experiments_disabled":false,
  "stats":true,
  "limit_get_posts_days_7d":false,
  "override_skip_syslog":false,
  "show_captcha_on_links":false,
  "firehose_gnip":true,
  "firehose_pubsub":true,
  "hide_downvote_number":true,
  "rt_go_backend":false,
  "dark_jester":true,
  "surveyNotice":false,
  "tipalti_payments":true,
  "default_trusted_domain":false,
  "disqus_trends":false,
  "log_large_querysets":false,
  "phoenix":false,
  "four_thumbnails":true,
  "lazy_embed":false,
  "enable_wp_plugin_notice":true,
  "explore_dashboard":true,
  "skip_custom_vip":false,
  "partitions:api:posts/list":false,
  "support_contact_with_frames":true,
  "share_menu_new":false,
  "use_rs_paginator_5m":true,
  "limit_textdigger":true,
  "loginas":false,
  "allow_publisher_csv_export":true,
  "logging":false,
  "postannotation_newcluster":true,
  "require_ssl_admin":false,
  "firehose_push":true,
  "firehose_gnip_http":true,
  "digest_thread_votes":true,
  "safety_levels_enabled":true,
  "partitions:api:categories/listPo":false,
  "shardpost:index":true,
  "next_show_new_media":true,
  "next_realtime_cap":false,
  "next_discard_low_rep":true,
  "next_streaming_realtime":false,
  "partitions:api:threads/listPosts":false
};

    context.urlMap = {
        'signup': 'https://disqus.com/admin/signup/',
        'dashboard': 'http://disqus.com/dashboard/',
        'admin': 'https://disqus.com/admin/',
        
        'logout': '//disqus.com/logout/',
        'home': 'https://disqus.com',
        'home_settings_profile': 'https://disqus.com/home/settings/profile/',
        'for_websites': 'http://disqus.com/websites/',
        'for_publishers': 'http://hubspot.disqus.biz/reveal-by-disqus-organic',
        'login': 'https://disqus.com/profile/login/'
    };
    context.navMap = {
        'signup': '',
        'dashboard': '',
        'admin': '',
        'addons': ''
    };
</script>

        <script src="//a.disquscdn.com/1438805176/js/src/auth_context.js" type="text/javascript" charset="utf-8"></script>
    

    <link rel="stylesheet" href="//a.disquscdn.com/1438805176/build/css/8b352581a32c.css" type="text/css" />

    
    

    
    

    
        


<script type="text/javascript" src="//a.disquscdn.com/1438805176/build/js/94d17c859614.js"></script>

<script>
//
// shared/foundation.js
//
// This file contains the absolute minimum code necessary in order
// to create a new application in the DISQUS namespace.
//
// You should load this file *before* anything that modifies the DISQUS global.
//

/*jshint browser:true, undef:true, strict:true, expr:true, white:true */
/*global DISQUS:true */

var DISQUS = (function (window, undefined) {
    "use strict";

    var DISQUS = window.DISQUS || {};

    // Exception thrown from DISQUS.assert method on failure
    DISQUS.AssertionError = function (message) {
        this.message = message;
    };

    DISQUS.AssertionError.prototype.toString = function () {
        return 'Assertion Error: ' + (this.message || '[no message]');
    };


    // Raises a DISQUS.AssertionError if value is falsy
    DISQUS.assert = function (value, message, soft) {
        if (value)
            return;

        if (soft)
            window.console && window.console.log("DISQUS assertion failed: " + message);
        else
            throw new DISQUS.AssertionError(message);
    };


    // Functions to clean attached modules (used by define and cleanup)
    var cleanFuncs = [];

    // Attaches a new public interface (module) to the DISQUS namespace.
    // For example, if DISQUS object is { 'a': { 'b': {} } }:
    //
    //   DISQUS.define('a.b.c', function () { return { 'd': 'hello' }; }); will transform it into
    //     -> { 'a': { 'b': { 'c': { 'd' : hello' }}}}
    //
    //   and DISQUS.define('a', function () { return { 'x': 'world' }; }); will transform it into
    //     -> { 'a': { 'b': {}}, 'x': 'world' }
    //
    // Attach modules to DISQUS using only this function.

    DISQUS.define = function (name, fn) {
        /*jshint loopfunc:true */
        if (typeof name === 'function') {
            fn = name;
            name = '';
        }

        var parts = name.split('.');
        var part  = parts.shift();
        var cur   = DISQUS;

        var exports = (fn || function () { return {}; }).call({
            overwrites: function (obj) {
                obj.__overwrites__ = true;
                return obj;
            }
        }, window);

        while (part) {
            cur = (cur[part] ? cur[part] : cur[part] = {});
            part = parts.shift();
        }

        for (var key in exports) {
            if (!exports.hasOwnProperty(key))
                continue;

            /*jshint eqnull:true */
            if (!exports.__overwrites__ && cur[key] !== null) {
                DISQUS.assert(!cur.hasOwnProperty(key),
                              'Unsafe attempt to redefine existing module: ' + key,
                              true /* soft assertion */);
            }

            cur[key] = exports[key];
            cleanFuncs.push(function (cur, key) {
                return function () { delete cur[key]; };
            }(cur, key));
        }
        return cur;
    };


    // Alias for DISQUS.define for the sake of semantics.
    // You should use it when you need to get a reference to another
    // DISQUS module before that module is defined:
    //
    //   var collections = DISQUS.use('lounge.collections');
    //
    // DISQUS.use is a single argument function because we don't
    // want to encourage people to use it instead of DISQUS.define.

    DISQUS.use = function (name) {
        return DISQUS.define(name);
    };

    DISQUS.cleanup = function () {
        for (var i = 0; i < cleanFuncs.length; i++) {
            cleanFuncs[i]();
        }
    };

    return DISQUS;
})(window);

/*jshint expr:true, undef:true, strict:true, white:true, browser:true */
/*global DISQUS:false*/
//
// shared/corefuncs.js
//

DISQUS.define(function (window, undefined) {
    "use strict";

    var DISQUS     = window.DISQUS;
    var document   = window.document;
    var head       = document.getElementsByTagName('head')[0] ||
                     document.body;
    var jobs       = { running: false, timer: null, queue: [] };
    var uid        = 0;

    // Taken from _.uniqueId
    DISQUS.getUid = function (prefix) {
        var id = ++uid + '';
        return prefix ? prefix + id : id;
    };

    /* Defers func() execution until cond() is true */
    DISQUS.defer = function (cond, func) {
        function beat() {
            /*jshint boss:true */
            var queue = jobs.queue;

            if (queue.length === 0) {
                jobs.running = false;
                clearInterval(jobs.timer);
            }

            for (var i = 0, pair; pair = queue[i]; i++) {
                if (pair[0]()) {
                    queue.splice(i--, 1);
                    pair[1]();
                }
            }
        }

        jobs.queue.push([cond, func]);
        beat();

        if (!jobs.running) {
            jobs.running = true;
            jobs.timer = setInterval(beat, 100);
        }
    };

    DISQUS.isOwn = function (obj, key) {
        // The object.hasOwnProperty method fails when the
        // property under consideration is named 'hasOwnProperty'.
        return Object.prototype.hasOwnProperty.call(obj, key);
    };

    DISQUS.isString = function (str) {
        return Object.prototype.toString.call(str) === "[object String]";
    };

    /*
     * Iterates over an object or a collection and calls a callback
     * function with each item as a parameter.
     */
    DISQUS.each = function (collection, callback) {
        var length = collection.length,
            forEach = Array.prototype.forEach;

        if (!isNaN(length)) {
            // Treat collection as an array
            if (forEach) {
                forEach.call(collection, callback);
            } else {
                for (var i = 0; i < length; i++) {
                    callback(collection[i], i, collection);
                }
            }
        } else {
            // Treat collection as an object
            for (var key in collection) {
                if (DISQUS.isOwn(collection, key)) {
                    callback(collection[key], key, collection);
                }
            }
        }
    };

    // Borrowed from underscore
    DISQUS.extend = function (obj) {
        DISQUS.each(Array.prototype.slice.call(arguments, 1), function (source) {
            for (var prop in source) {
                obj[prop] = source[prop];
            }
        });
        return obj;
    };

    DISQUS.serializeArgs = function (params) {
        var pcs = [];
        DISQUS.each(params, function (val, key) {
            if (val !== undefined) {
                pcs.push(key + (val !== null ? '=' + encodeURIComponent(val) : ''));
            }
        });
        return pcs.join('&');
    };

    DISQUS.serialize = function (url, params, nocache) {
        if (params) {
            url += (~url.indexOf('?') ?
                        (url.charAt(url.length - 1) == '&' ? '': '&') : '?');
            url += DISQUS.serializeArgs(params);
        }

        if (nocache) {
            var ncp = {};
            ncp[(new Date()).getTime()] = null;
            return DISQUS.serialize(url, ncp);
        }

        var len = url.length;
        return (url.charAt(len - 1) == "&" ? url.slice(0, len - 1) : url);
    };

    var TIMEOUT_DURATION = 2e4; // 20 seconds
    var addEvent, removeEvent;

    // select the correct event listener function. all of our supported
    // browsers will use one of these
    if ('addEventListener' in window) {
        addEvent = function (node, event, handler) {
            node.addEventListener(event, handler, false);
        };
        removeEvent = function (node, event, handler) {
            node.removeEventListener(event, handler, false);
        };
    }
    else {
        addEvent = function (node, event, handler) {
            node.attachEvent('on' + event, handler);
        };
        removeEvent = function (node, event, handler) {
            node.detachEvent('on' + event, handler);
        };
    }

    DISQUS.require = function (url, params, nocache, success, failure) {
        var script = document.createElement('script');
        var evName = script.addEventListener ? 'load' : 'readystatechange';
        var timeout = null;

        script.src = DISQUS.serialize(url, params, nocache);
        script.async = true;
        script.charset = 'UTF-8';

        function handler(ev) {
            ev = ev || window.event;
            if (!ev.target) {
                ev.target = ev.srcElement;
            }

            if (ev.type != 'load' && !/^(complete|loaded)$/.test(ev.target.readyState)) {
                return; // Not ready yet
            }

            if (success) {
                success();
            }

            if (timeout) {
                clearTimeout(timeout);
            }

            removeEvent(ev.target, evName, handler);
        }

        if (success || failure) {
            addEvent(script, evName, handler);
        }

        if (failure) {
            timeout = setTimeout(function () {
                failure();
            }, TIMEOUT_DURATION);
        }

        head.appendChild(script);
        return DISQUS;
    };

    DISQUS.requireStylesheet = function (url, params, nocache) {
        var link = document.createElement('link');
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.href = DISQUS.serialize(url, params, nocache);
        head.appendChild(link);
        return DISQUS;
    };

    DISQUS.requireSet = function (urls, nocache, callback) {
        var remaining = urls.length;
        DISQUS.each(urls, function (url) {
            DISQUS.require(url, {}, nocache, function () {
                if (--remaining === 0) { callback(); }
            });
        });
    };

    DISQUS.injectCss = function (css) {
        var style = document.createElement('style');
        style.setAttribute('type', 'text/css');

        // Make inline CSS more readable by splitting each rule onto a separate line
        css = css.replace(/\}/g, "}\n");

        if (window.location.href.match(/^https/))
            css = css.replace(/http:\/\//g, 'https://');

        if (style.styleSheet) { // Internet Explorer only
            style.styleSheet.cssText = css;
        } else {
            style.appendChild(document.createTextNode(css));
        }

        head.appendChild(style);
    };

    DISQUS.isString = function (val) {
        return Object.prototype.toString.call(val) === '[object String]';
    };
});

/*jshint boss:true*/
/*global DISQUS */
DISQUS.define('Events', function (window, undefined) {
    "use strict";

    // Returns a function that will be executed at most one time, no matter how
    // often you call it. Useful for lazy initialization.
    var once = function (func) {
        var ran = false, memo;
        return function () {
            if (ran) return memo;
            ran = true;
            memo = func.apply(this, arguments);
            func = null;
            return memo;
        };
    };
    var has = DISQUS.isOwn;
    var keys = Object.keys || function (obj) {
        if (obj !== Object(obj)) throw new TypeError('Invalid object');
        var keys = [];
        for (var key in obj) if (has(obj, key)) keys[keys.length] = key;
        return keys;
    };
    var slice = [].slice;

    // 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 = {

        // 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 onced = once(function () {
                self.off(name, onced);
                callback.apply(this, arguments);
            });
            onced._callback = callback;
            return this.on(name, onced, 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 = {};
                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 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;
        }

    };

    // 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);
            }
        }
    };

    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.
    DISQUS.each(listenMethods, function (implementation, method) {
        Events[method] = function (obj, name, callback) {
            var listeners = this._listeners || (this._listeners = {});
            var id = obj._listenerId || (obj._listenerId = DISQUS.getUid('l'));
            listeners[id] = obj;
            if (typeof name === 'object') callback = this;
            obj[implementation](name, callback, this);
            return this;
        };
    });

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

    return Events;
});
 // used for /follow/ /login/ /signup/ social oauth dialogs
// faking the bus
DISQUS.use('Bus');
_.extend(DISQUS.Bus, DISQUS.Events);
</script>



    

    
    <script src="//a.disquscdn.com/1438805176/js/src/global.js" charset="utf-8"></script>
    <script src="//a.disquscdn.com/1438805176/js/src/ga_events.js" charset="utf-8"></script>



<!-- start Mixpanel --><script type="text/javascript">(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==
typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]);
b._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);
mixpanel.init('17b27902cd9da8972af8a3c43850fa5f', {
    
    track_pageview: false,
    debug: false
});
</script><!-- end Mixpanel -->



<script src="//a.disquscdn.com/1438805176//js/src/funnelcake.js"></script>
<script type="text/javascript">
    if (window.AB_TESTS === undefined) {
        var AB_TESTS = {};
    }
</script>
<script type="text/javascript" charset="utf-8">
    // Global tests
    $(document).ready(function() {
        $('a[rel*=facebox]').facebox();
    });
</script>

    <script type="text/x-underscore-template" data-template-name="global-nav">

<% var has_custom_avatar = data.avatar_url && data.avatar_url.indexOf('noavatar') < 0; %>
<% var has_custom_username = data.username && data.username.indexOf('disqus_') < 0; %>
<% if (data.username) { %>
    <% if (data.has_forums) { %>
        <li class="admin<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu-admin<% } %>" data-analytics="header admin"><a href="<%= data.urlMap.admin %>"><strong>Admin</strong></a></li>
    <% } %>
    <li class="user-dropdown dropdown-toggle<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu<% } else { %> username-menu<% } %>" data-analytics="header username dropdown" data-floater-marker="<% if (has_custom_avatar || !has_custom_username) { %>square<% } %>">
        <a href="<%= data.urlMap.home %>/<%= data.username %>/">
            <% if (has_custom_avatar) { %>
                <img src="<%= data.avatar_url %>" class="avatar">
            <% } else if (has_custom_username) { %>
                <%= data.username %>
            <% } else { %>
                <img src="<%= data.avatar_url %>" class="avatar">
            <% } %>
            <span class="caret"></span>
        </a>
        <ul class="clearfix dropdown">
            <li data-analytics="header view profile"><a href="<%= data.urlMap.home %>/<%= data.username %>/">View Profile</a></li>
            <li class="js-edit-profile" data-analytics="header edit profile"><a href="<%= data.urlMap.home_settings_profile %>">Edit Profile</a></li>
            <li class="logout" data-analytics="header logout"><a href="<%= data.urlMap.logout %>">Logout</a></li>
        </ul>
    </li>
<% } else { %>
    <li class="<%= data.forPublishersClasses || '' %>" data-analytics="header for publishers"><a href="<%= data.urlMap.for_publishers %>">REVeal</a></li>
    <li class="<%= data.forWebsitesClasses || '' %>" data-analytics="header for websites"><a href="<%= data.urlMap.for_websites %>">Comments</a></li>
    <li class="link-login" data-analytics="header login"><a href="<%= data.urlMap.login %>?next=<%= encodeURIComponent(document.location.href) %>">Log in</a></li>
<% } %>


</script>

    <!--[if lte IE 7]>
  <script src="//a.disquscdn.com/1438805176/js/src/border_box_model.js"></script>
<![endif]-->
<!--[if lte IE 8]>
  <script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.5.3/modernizr.min.js"></script>
  <script src="//a.disquscdn.com/1438805176/js/src/selectivizr.js"></script>
<![endif]-->

    

    
    <meta name="viewport" content="width=device-width, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">


    
        <script type="text/javascript" charset="utf-8">
            // Global tests
            $(document).ready(function() {
                $('a[rel*=facebox]').facebox();
            });
        </script>
        
    
    
</head>
<body class="" id="">
    
    
<header class="global-header">
    <div>
        <nav class="global-nav">
            
            <a href="/" class="logo" data-analytics="site logo"><img src="//a.disquscdn.com/1438805176/img/disqus-logo-alt-hidpi.png" width="150" alt="DISQUS" title="Disqus - Discover your community"/></a>
            
            <img class="form-pam" src="//a.disquscdn.com/1438805176/img/pam.png" title="Pam says hello"/>
        </nav>
    </div>
</header>


    
    <section class="login">
        <form id="login-form" action="https://disqus.com/profile/login/?next=https://code.disqus.com/admin/moderate/" method="post" accept-charset="utf-8">
            <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='yCnREyFc6HVnxavAzLTJWrVeoXF8BhaP' /></div>

            <h1>Log in to continue</h1>

            
            
            <div class="connect-options">
                <button title="facebook" type="button" class="facebook-auth">
                    <span class="auth-container">
                        <img src="//a.disquscdn.com/1438805176/img/icons/facebook.svg" alt="Facebook">
                    </span>
                </button>
                <button title="twitter" type="button" class="twitter-auth">
                    <span class="auth-container">
                        <img src="//a.disquscdn.com/1438805176/img/icons/twitter.svg" alt="Twitter">
                    </span>
                </button>
                <button title="google" type="button" class="google-auth">
                    <span class="auth-container">
                        <img src="//a.disquscdn.com/1438805176/img/icons/google.svg" alt="Google">
                    </span>
                </button>
            </div>
            

            <div class="form-heading">Or via email</div>

            

            <fieldset class="input-group">
                <label for="username-input" class="input-label">Email</label>
                <input id="username-input" type="text" name="username" tabindex="20" value="" required>
            </fieldset>

            <fieldset class="input-group">
                <label for="password-input" class="input-label">Password</label>
                <input id="password-input" type="password" name="password" tabindex="21" required>
            </fieldset>

            <div class="button-container">
                <button class="button submit" data-analytics="sign-in">Log In<span class="spinner"></span></button>
                <a href="https://disqus.com/profile/signup/?next=https%3A//code.disqus.com/admin/moderate/"
                    data-analytics="create-account" class="btn-secondary">
                    Need an account?
                </a>
            </div>

            <div class="forgot-container">
                <a href="https://disqus.com/forgot/">Forgot your password?</a>
            </div>
        </form>
    </section>

    
    

<div class="form-footer">
    Disqus &copy; 2015 &middot; <a href="https://disqus.com/about/">About</a> &middot; <a href="https://help.disqus.com/">Help</a> &middot; <a href="https://disqus.com/admin/signup/?utm_source=New-Site">Add Disqus to your site</a>
</div>



    
        
        
            
<script>
    /*jshint undef:true, browser:true, maxlen:100, strict:true, expr:true, white:true */

// These must be global
var _comscore,
    _gaq;

(function (doc) {
    "use strict";

    // Convert Django template variables to JS variables
    var debug = false,
        gaKey = '',
        gaPunt = '',
        gaCustomVars = {
            component: 'website',
            forum: '',
            version: 'v5'
        },
        gaSlots = {
            component: 1,
            forum: 3,
            version: 4
        };
    /**/

    gaKey = gaCustomVars.component == 'website' ?
            'UA-1410476-16' :
            '';


    // Now start loading analytics services
    var s = doc.getElementsByTagName('script')[0],
        p = s.parentNode;

    var isSecure = doc.location.protocol == 'https:';

    if (!debug) {
        _comscore = _comscore || []; // comScore

        // Load comScore
        _comscore.push({ c1: '7', c2: '10137436', c3: '1' });
        var cs = document.createElement('script');
        cs.async = true;
        cs.src = (isSecure ? 'https://sb' : 'http://b') + '.scorecardresearch.com/beacon.js';
        p.insertBefore(cs, s);
    }

    // Set up Google Analytics
    _gaq = _gaq || [];


    if (!debug) {
        _gaq.push(['_setAccount', gaKey]);
        _gaq.push(['_setDomainName', '.disqus.com']);
    }

    if (!gaPunt) {
        for (var v in gaCustomVars) {
            if (!(gaCustomVars.hasOwnProperty(v) && gaCustomVars[v]))
                continue;

            _gaq.push(['_setCustomVar', gaSlots[v], gaCustomVars[v]]);
        }

        _gaq.push(['_trackPageview']);
    }

    // Load Google Analytics
    var ga = doc.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    var prefix = isSecure ? 'https://ssl' : 'http://www';
    // Dev tip: if you cannot use the Google Analytics Debug Chrome extension,
    // https://chrome.google.com/webstore/detail/jnkmfdileelhofjcijamephohjechhna
    // you can replace /ga.js on the following line with /u/ga_debug.js
    // But if you do that, PLEASE DON'T COMMIT THE CHANGE! Kthxbai.
    ga.src = prefix + '.google-analytics.com/ga.js';
    p.insertBefore(ga, s);
}(document));

</script>


        
        
    

    
    
    

    

        <script>
        (function (){
            // adds a classname for css to target the current page without passing in special things from the server or wherever
            // replacing all characters not allowable in classnames
            var newLocation = encodeURIComponent(window.location.pathname).replace(/[\.!~*'\(\)]/g, '_');
            // cleaning up remaining url-encoded symbols for clarity sake
            newLocation = newLocation.replace(/%2F/g, '-').replace(/^-/, '').replace(/-$/, '');
            if (newLocation === '') {
                newLocation = 'homepage';
            }
            $('body').addClass('' + newLocation);
        }());

        $(function ($) {
            // adds 'page-active' class to links matching the page url
            $('a[href="' + window.location.pathname + '"]').addClass('page-active');
        });

        $(document).delegate('[data-toggle-selector]', 'click', function (e) {
            var $this = $(this);
            $($this.attr('data-toggle-selector')).toggle();
            e.preventDefault();
        });
        </script>
    
<script>
DISQUS.define('web.urls', function () {
    return {
        twitter: 'https://disqus.com/_ax/twitter/begin/?ctkn=yCnREyFc6HVnxavAzLTJWrVeoXF8BhaP',
        google: 'https://disqus.com/_ax/google/begin/?ctkn=yCnREyFc6HVnxavAzLTJWrVeoXF8BhaP',
        facebook: 'https://disqus.com/_ax/facebook/begin/?ctkn=yCnREyFc6HVnxavAzLTJWrVeoXF8BhaP',
        dashboard: 'http://disqus.com/dashboard/'
    }
});

$(document).ready(function () {
    var usernameInput = $("input[name=username]");
    if (usernameInput[0].value) {
        $("input[name=password]").focus();
    } else {
        usernameInput.focus();
    }
    $("form").submit(function () {
        $(this).find('.button.submit')
               .attr('disabled', 'disabled');
    });
});
</script>
<script src="//a.disquscdn.com/1438805176/js/src/social_login.js"></script>


    
    <script type="text/javascript">
      $(function() {
          var options = {
              authenticated: (context.auth.username !== undefined),
              moderated_forums: context.auth.moderated_forums,
              user_id: context.auth.user_id,
              track_clicks: !!context.switches.website_click_analytics,
              forum: context.forum
          };
          DISQUS.funnelcake.init(options);
        });
    </script>
    

    
    <!-- helper jQuery tmpl partials -->
    <script type="text/x-jquery-tmpl" id="profile-metadata-tmpl">
        
        data-profile-username="${username}" data-profile-hash="${emailHash}" href="/${username}"
        
    </script>
    <script type="text/x-jquery-tmpl" id="profile-link-tmpl">
        
        <a class="profile-launcher" {{tmpl "#profile-metadata-tmpl"}} href="/${username}">${name}</a>
        
    </script>

    <script src="//a.disquscdn.com/1438805176/js/src/templates.js"></script>
    

    <script src="//a.disquscdn.com/1438805176/js/src/modals.js"></script>
<script>
  DISQUS.ui.config({
    disqusUrl: 'https://disqus.com',
    mediaUrl: '//a.disquscdn.com/1438805176/'
  });
</script>

</body>
</html>
