embed.js

From disqus.com, 5 Months ago, written in Plain Text, viewed 3 times.
URL https://pastebin.freepbx.org/view/24aa6caf Embed
Download Paste or View Raw
  1. (function() {
  2.     'use strict';
  3.     var _config = window.disqus_config;
  4.     window.disqus_config = function() {
  5.         if (_config) {
  6.             try {
  7.                 _config.call(this);
  8.             } catch (err) {
  9.                 console.error('There was a problem with the Disqus configuration.', err);
  10.             }
  11.         }
  12.         this.server_side = {
  13.             "sandbox_ads": "1",
  14.             "lightbox_url": "//tempest.services.disqus.com/ads-iframe/survey/?position=lightbox&shortname=atdt&experiment=network_default_hidden&variant=fallthrough&service=dynamic",
  15.             "inthread_repeat_comment_count": "8",
  16.             "default_placement_url": "https://disqusservice.com/iframe/fallback/?position=top&shortname=atdt",
  17.             "inthread_placement_url": "",
  18.             "can_disable_ads": "",
  19.             "lazyload_viewports": "2",
  20.             "service": "dynamic",
  21.             "experiment": "network_default_hidden",
  22.             "inthread_multiple_ads": "True",
  23.             "bin": "embed:promoted_discovery:dynamic:network_default_hidden:fallthrough",
  24.             "bottom_placement_url": "",
  25.             "variant": "fallthrough",
  26.             "forum_id": "5849569",
  27.             "recommendations_placement_url": "",
  28.             "quintesse_enabled": "",
  29.             "top_placement_url": "",
  30.             "inthread_trailing_comment_count": "0",
  31.             "is_private": "",
  32.             "recs_outside_embed_enabled": "",
  33.             "forum": {
  34.                 "id": 5849569,
  35.                 "disable_disqus_branding": false,
  36.                 "recommendation_placement": "bottom"
  37.             },
  38.             "inthread_count_children": "True",
  39.             "inthread_leading_comment_count": "1",
  40.             "t": "1608727751"
  41.         };
  42.     };
  43. })();
  44. ! function(a, b) {
  45.     function c(a) {
  46.         if (Array.isArray(a)) {
  47.             for (var b = 0, c = Array(a.length); b < a.length; b++) c[b] = a[b];
  48.             return c
  49.         }
  50.         return Array.from(a)
  51.     }
  52.  
  53.     function d(a, b) {
  54.         if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function")
  55.     }
  56.  
  57.     function d(a, b) {
  58.         if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function")
  59.     }
  60.     var e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, $, _, aa, ba, ca, da, ea, fa = {},
  61.         ga = {},
  62.         ha = {},
  63.         ia = {},
  64.         ja = {},
  65.         ka = {},
  66.         la = {},
  67.         ma = {},
  68.         na = {};
  69.     e = function(a, b) {
  70.         return Object.prototype.hasOwnProperty.call(a, b)
  71.     }, f = function(a) {
  72.         return function(b, c) {
  73.             var d = b.length,
  74.                 e = Array.prototype.forEach;
  75.             if (isNaN(d))
  76.                 for (var f in b) a(b, f) && c(b[f], f, b);
  77.             else if (e) e.call(b, c);
  78.             else
  79.                 for (var g = 0; g < d; g++) c(b[g], g, b)
  80.         }
  81.     }(e), fa = function(a) {
  82.         var c = f;
  83.         return a = function(a) {
  84.             var d = [];
  85.             return c(a, function(a, c) {
  86.                 a !== b && d.push(encodeURIComponent(c) + (null === a ? "" : "=" + encodeURIComponent(a)))
  87.             }), d.join("&")
  88.         }
  89.     }(fa), ga = function(a) {
  90.         var b = fa;
  91.         return a = function c(a, d, e) {
  92.             if (d && (a.indexOf("?") === -1 ? a += "?" : "&" !== a.charAt(a.length - 1) && (a += "&"), a += b(d)), e) {
  93.                 var f = {};
  94.                 return f[(new Date).getTime()] = null, c(a, f)
  95.             }
  96.             var g = a.length;
  97.             return "&" === a.charAt(g - 1) ? a.slice(0, g - 1) : a
  98.         }
  99.     }(ga), ha = function(b) {
  100.         var c = ga,
  101.             d = a.document,
  102.             e = d.head || d.getElementsByTagName("head")[0] || d.body;
  103.         return b = function(a, b, f, g) {
  104.             var h = d.createElement("script");
  105.             h.src = c(a, b, f), h.async = !0, h.charset = "UTF-8", h.onload = g, e.appendChild(h)
  106.         }
  107.     }(ha), g = function(b) {
  108.         function c(a) {
  109.             return f.getElementById(a) || f.body || f.documentElement
  110.         }
  111.  
  112.         function d(a) {
  113.             return g.href = a, g.hostname
  114.         }
  115.  
  116.         function e(a, b) {
  117.             b = b || f.documentElement;
  118.             for (var c = a, d = 0, e = 0; c && c !== b;) d += c.offsetLeft, e += c.offsetTop, c = c.offsetParent;
  119.             return {
  120.                 top: e,
  121.                 left: d,
  122.                 height: a.offsetHeight,
  123.                 width: a.offsetWidth
  124.             }
  125.         }
  126.         var f = a.document,
  127.             g = f.createElement("a");
  128.         return {
  129.             getContainer: c,
  130.             getHost: d,
  131.             getOffset: e
  132.         }
  133.     }({}), h = function() {
  134.         var b = "adsbox",
  135.             c = 100,
  136.             d = a.document;
  137.         return function(a) {
  138.             if (a) {
  139.                 var e = d.createElement("div");
  140.                 e.innerHTML = "&nbsp;", e.className = b, d.body.appendChild(e), setTimeout(function() {
  141.                     a(0 === e.offsetHeight), d.body.removeChild(e)
  142.                 }, c)
  143.             }
  144.         }
  145.     }(), i = function(a) {
  146.         try {
  147.             return a.self !== a.top
  148.         } catch (b) {
  149.             return !0
  150.         }
  151.     }, j = function(b) {
  152.         return b = b || a, /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(b.navigator.userAgent || b.navigator.vendor || b.opera)
  153.     }, k = function(a, b) {
  154.         return function(c) {
  155.             return a(Array.prototype.slice.call(arguments, 1), function(a) {
  156.                 for (var d in a) b(a, d) && (c[d] = a[d])
  157.             }), c
  158.         }
  159.     }(f, e), l = function(c) {
  160.         function d(a) {
  161.             var b = a.split("."),
  162.                 c = b.length > 2 ? b[b.length - 2] : "";
  163.             return c.match(/^[0-9a-f]{32}$/i) && c
  164.         }
  165.  
  166.         function e(b) {
  167.             (new a.Image).src = j(k + "/stat.gif", {
  168.                 event: b
  169.             })
  170.         }
  171.  
  172.         function g(b) {
  173.             (new a.Image).src = j(k + "/event.gif", b)
  174.         }
  175.  
  176.         function h(c) {
  177.             var d = new a.URLSearchParams;
  178.             i(c, function(a, c) {
  179.                 a !== b && d.append(c, a)
  180.             });
  181.             var e = new a.XMLHttpRequest;
  182.             e.open("POST", k + "/event.json", !0), e.withCredentials = !0, e.send(d)
  183.         }
  184.         var i = f,
  185.             j = ga,
  186.             k = "https://referrer.disqus.com/juggler";
  187.         return {
  188.             getLoaderVersionFromUrl: d,
  189.             logStat: e,
  190.             reportJester: g,
  191.             reportJesterPOST: h
  192.         }
  193.     }({}), m = function() {
  194.         function b(b) {
  195.             b = b || {};
  196.             var c = b.Math || a.Math,
  197.                 d = b.Date || a.Date;
  198.             try {
  199.                 var e = (new d).getTimezoneOffset(),
  200.                     f = 1,
  201.                     g = a.screen;
  202.                 g && g.availWidth ? f = g.availWidth * g.availHeight + g.colorDepth : g && g.width && (f = g.width * g.height);
  203.                 var h = a.document.documentElement,
  204.                     i = h.clientWidth * h.clientHeight;
  205.                 return c.abs(17 * e + 25 * f - i)
  206.             } catch (j) {
  207.                 return 1
  208.             }
  209.         }
  210.         return {
  211.             get: b
  212.         }
  213.     }(), n = function(b) {
  214.         function c(b) {
  215.             b = b || {};
  216.             var c = b.Uint32Array || a.Uint32Array,
  217.                 d = b.crypto || a.crypto,
  218.                 e = b.Math || a.Math;
  219.             try {
  220.                 var f = new c(1);
  221.                 return d.getRandomValues(f), f[0]
  222.             } catch (g) {
  223.                 return e.floor(1e9 * e.random())
  224.             }
  225.         }
  226.  
  227.         function d() {
  228.             var b = a.performance,
  229.                 c = b && b.timing;
  230.             if (!c) return 1e5;
  231.             var d = c.domainLookupEnd - c.domainLookupStart,
  232.                 e = c.connectEnd - c.connectStart,
  233.                 f = c.responseStart - c.navigationStart;
  234.             return 11 * d + 13 * e + 17 * f
  235.         }
  236.  
  237.         function e(e) {
  238.             e = e || {};
  239.             var f = e.Math || a.Math,
  240.                 g = Number((new Date).getTime().toString().substring(3)),
  241.                 h = f.abs(g + d() - b.get()).toString(32);
  242.             return h += c(e).toString(32)
  243.         }
  244.         return {
  245.             generate: e
  246.         }
  247.     }(m), o = function(b) {
  248.         var c = a.document,
  249.             d = c.createElement("iframe");
  250.         return d.style.display = "none",
  251.             function(a, b) {
  252.                 var e = b && b[a] || null;
  253.                 try {
  254.                     return d.parentNode !== c.body && c.body.appendChild(d), d.contentWindow[a] || e
  255.                 } catch (f) {
  256.                     return e
  257.                 }
  258.             }
  259.     }({}), p = function() {
  260.         var c = {
  261.             isIE: function() {
  262.                 return Boolean(a.document.documentMode)
  263.             },
  264.             isSafari: function() {
  265.                 var b = a.navigator.userAgent.toLowerCase();
  266.                 return b.indexOf("safari") > -1 && b.indexOf("chrome") === -1
  267.             },
  268.             isFirefox: function() {
  269.                 var b = a.navigator.userAgent.toLowerCase();
  270.                 return b.indexOf("firefox") > -1 && b.indexOf("chrome") === -1
  271.             },
  272.             isChrome: function() {
  273.                 var c = a.navigator.userAgent.toLowerCase();
  274.                 return c.indexOf("crios") > -1 || Boolean(a.chrome) && "Google Inc." === a.navigator.vendor && a.opr === b && c.indexOf("edge") === -1
  275.             },
  276.             isEdge: function() {
  277.                 var b = a.navigator.userAgent.toLowerCase();
  278.                 return b.indexOf("edge") > -1
  279.             },
  280.             isOpera: function() {
  281.                 var b = a.navigator.userAgent.toLowerCase();
  282.                 return b.indexOf("opera") > -1 || b.indexOf("opr") > -1
  283.             },
  284.             isCrawler: function(c) {
  285.                 c === b && (c = a);
  286.                 var d = c.navigator.userAgent;
  287.                 return /bot|crawl|slurp|spider|facebookexternalhit|embedly|feedly|pinterest/i.test(d)
  288.             }
  289.         };
  290.         return c
  291.     }(), q = function(a) {
  292.         return "[object String]" === Object.prototype.toString.call(a)
  293.     }, r = function() {
  294.         return a.getComputedStyle ? function(b, c, d) {
  295.             try {
  296.                 return a.document.defaultView.getComputedStyle(b, null).getPropertyValue(c)
  297.             } catch (e) {
  298.                 return null
  299.             }
  300.         } : function(a, b, c) {
  301.             return a.currentStyle[b] || a.currentStyle[c]
  302.         }
  303.     }(), s = function(a) {
  304.         function b(a) {
  305.             return a.replace(/\s+/g, "").toLowerCase()
  306.         }
  307.         var c = f,
  308.             d = q,
  309.             e = k;
  310.         return function(a, f, g) {
  311.             var h = {};
  312.             d(f) ? h[f] = g : h = f;
  313.             var i = e({}, h);
  314.             c(i, function(a, c) {
  315.                 var d = b(c);
  316.                 d !== c && (delete i[c], i[d] = a), null === a && (i[d] = ""), void 0 === a && delete i[d]
  317.             });
  318.             var j = a.style;
  319.             c(i, function(a, b) {
  320.                 j.setProperty(b, String(a), "important")
  321.             })
  322.         }
  323.     }({}), t = function(b) {
  324.         function c(a) {
  325.             return a.replace(/\s+/g, "").toLowerCase()
  326.         }
  327.  
  328.         function d(a) {
  329.             return a = a.replace(/^#([a-f0-9])([a-f0-9])([a-f0-9])$/, "#$1$1$2$2$3$3"), a = a.slice(1), {
  330.                 red: parseInt(a.slice(0, 2), 16),
  331.                 green: parseInt(a.slice(2, 4), 16),
  332.                 blue: parseInt(a.slice(4, 6), 16)
  333.             }
  334.         }
  335.  
  336.         function e(a) {
  337.             var b = a.match(/^rgb\((\d+),(\d+),(\d+)\)$/);
  338.             return {
  339.                 red: parseInt(b[1], 10),
  340.                 green: parseInt(b[2], 10),
  341.                 blue: parseInt(b[3], 10)
  342.             }
  343.         }
  344.  
  345.         function f(a) {
  346.             var b = a.match(/^rgba\((\d+),(\d+),(\d+),([\d.]+)\)$/);
  347.             return {
  348.                 red: parseInt(b[1], 10),
  349.                 green: parseInt(b[2], 10),
  350.                 blue: parseInt(b[3], 10),
  351.                 alpha: parseFloat(b[4])
  352.             }
  353.         }
  354.  
  355.         function g(b, c, d, e) {
  356.             return c = a.document.createElement(c), i(c, {
  357.                 visibility: "hidden",
  358.                 color: d
  359.             }), b.appendChild(c), d = e(c), b.removeChild(c), d
  360.         }
  361.  
  362.         function h(b, d) {
  363.             d = d || {};
  364.             var f = d.container || a.document.body;
  365.             return a.getComputedStyle ? (b = g(f, "span", b, function(b) {
  366.                 return a.getComputedStyle(b, null).getPropertyValue("color")
  367.             }), e(c(b))) : (b = g(f, "textarea", b, function(a) {
  368.                 return a.createTextRange().queryCommandValue("ForeColor")
  369.             }), {
  370.                 red: 255 & b,
  371.                 blue: b >>> 16,
  372.                 green: (65280 & b) >>> 8
  373.             })
  374.         }
  375.         var i = s;
  376.         return function(a, b) {
  377.             a = c(a);
  378.             var g;
  379.             if ("transparent" === a) return {
  380.                 red: 0,
  381.                 green: 0,
  382.                 blue: 0,
  383.                 alpha: 0
  384.             };
  385.             if ("#" === a.charAt(0)) g = d;
  386.             else if ("rgba(" === a.slice(0, 5)) g = f;
  387.             else if ("rgb(" === a.slice(0, 4)) g = e;
  388.             else {
  389.                 if (!/^[a-z]+$/.test(a)) throw new Error("parseColor received unparseable color: " + a);
  390.                 g = h
  391.             }
  392.             return g(a, b)
  393.         }
  394.     }({}), u = function(c) {
  395.         function d(a) {
  396.             for (var b = [/(https?:)?\/\/(www\.)?disqus\.com\/forums\/([\w_-]+)/i, /(https?:)?\/\/(www\.)?([\w_-]+)\.disqus\.com/i, /(https?:)?\/\/(www\.)?dev\.disqus\.org\/forums\/([\w_-]+)/i, /(https?:)?\/\/(www\.)?([\w_-]+)\.dev\.disqus\.org/i], c = 0; c < b.length; c++) {
  397.                 var d = a.match(b[c]);
  398.                 if (d && d.length && 4 === d.length) return d[3]
  399.             }
  400.             return null
  401.         }
  402.  
  403.         function e(a, b, c) {
  404.             var e = a.querySelector('script[src*="disqus"][src$="' + b + '"]');
  405.             if (e) {
  406.                 var f = e.getAttribute ? e.getAttribute("src") : e.src;
  407.                 c = c || d;
  408.                 var g = c(f);
  409.                 return g ? g.toLowerCase() : null
  410.             }
  411.             return null
  412.         }
  413.  
  414.         function f(a, b) {
  415.             var c, d, e = 0,
  416.                 f = new Array(a.length);
  417.             for (c = 0; c <= a.length; c++)
  418.                 for (f[c] = new Array(b.length), d = 0; d <= b.length; d++) f[c][d] = 0;
  419.             for (c = 0; c < a.length; c++)
  420.                 for (d = 0; d < b.length; d++) a[c] === b[d] && (f[c + 1][d + 1] = f[c][d] + 1, f[c + 1][d + 1] > e && (e = f[c + 1][d + 1]));
  421.             return e
  422.         }
  423.  
  424.         function g() {
  425.             for (var a = z.getElementsByTagName("h1"), c = z.title, d = c.length, e = c, g = .6, h = function(a) {
  426.                     var h, i = a.textContent || a.innerText;
  427.                     null !== i && i !== b && (h = f(c, i) / d, h > g && (g = h, e = i))
  428.                 }, i = 0; i < a.length; i++) h(a[i]);
  429.             return e
  430.         }
  431.  
  432.         function h(a) {
  433.             return a.toLowerCase().replace(/^\s+|\s+$/g, "").replace(/['"]/g, "")
  434.         }
  435.  
  436.         function i(a) {
  437.             var b = 0,
  438.                 c = 1,
  439.                 d = 2;
  440.             if (!y("atob") || !y("requestAnimationFrame")) return c;
  441.             try {
  442.                 a.postMessage("ping", "*")
  443.             } catch (e) {
  444.                 return d
  445.             }
  446.             return b
  447.         }
  448.  
  449.         function j(a, b, c) {
  450.             c = c || b;
  451.             var d = w(a, b, c);
  452.             return !d || /color/i.test(b) && 0 === x(d).alpha ? a && j(a.parentNode, b, c) || d : d || null
  453.         }
  454.  
  455.         function k(a, b, c, d) {
  456.             v(b) && (b = z.createElement(b));
  457.             var e = null;
  458.             return b.style.visibility = "hidden", a.appendChild(b), e = j(b, c, d), a.removeChild(b), e
  459.         }
  460.  
  461.         function l(a) {
  462.             for (var b, c = k(a, "span", "font-family", "fontFamily"), d = c.split(","), e = {
  463.                     courier: 1,
  464.                     times: 1,
  465.                     "times new roman": 1,
  466.                     georgia: 1,
  467.                     palatino: 1,
  468.                     serif: 1
  469.                 }, f = 0; f < d.length; f++)
  470.                 if (b = h(d[f]), e.hasOwnProperty(b)) return !0;
  471.             return !1
  472.         }
  473.  
  474.         function m(a) {
  475.             var b = z.createElement("a");
  476.             return b.href = Number(new Date), x(k(a, b, "color"), {
  477.                 container: a
  478.             })
  479.         }
  480.  
  481.         function n(a) {
  482.             var b = a.red,
  483.                 c = a.green,
  484.                 d = a.blue;
  485.             if (a.hasOwnProperty("alpha")) {
  486.                 var e = a.alpha,
  487.                     f = function(a) {
  488.                         return Math.round(a * e + 255 * (1 - e))
  489.                     };
  490.                 b = f(b), c = f(c), d = f(d)
  491.             }
  492.             return (299 * b + 587 * c + 114 * d) / 1e3
  493.         }
  494.  
  495.         function s(a) {
  496.             var b = k(a, "span", "background-color", "backgroundColor"),
  497.                 c = x(b, {
  498.                     container: a
  499.                 });
  500.             return 0 === c.alpha ? "light" : n(c) < 128 ? "dark" : "light"
  501.         }
  502.         var u = p,
  503.             v = q,
  504.             w = r,
  505.             x = t,
  506.             y = o,
  507.             z = a.document,
  508.             A = function() {
  509.                 var a, b, c = function() {
  510.                     return !1
  511.                 };
  512.                 if ("hidden" in z) a = "hidden", b = "visibilitychange";
  513.                 else {
  514.                     if (!("webkitHidden" in z)) return {
  515.                         isHidden: c,
  516.                         listen: c,
  517.                         stopListening: c
  518.                     };
  519.                     a = "webkitHidden", b = "webkitvisibilitychange"
  520.                 }
  521.                 return {
  522.                     isHidden: function() {
  523.                         return z[a]
  524.                     },
  525.                     listen: function(a) {
  526.                         return z.addEventListener(b, a)
  527.                     },
  528.                     stopListening: function(a) {
  529.                         return z.removeEventListener(b, a)
  530.                     }
  531.                 }
  532.             }(),
  533.             B = function() {
  534.                 var a = z.createElement("div");
  535.                 a.style.visibility = "hidden", a.style.width = "100px", a.style.msOverflowStyle = "scrollbar", z.body.appendChild(a);
  536.                 var b = a.offsetWidth;
  537.                 a.style.overflow = "scroll";
  538.                 var c = z.createElement("div");
  539.                 c.style.width = "100%", a.appendChild(c);
  540.                 var d = c.offsetWidth;
  541.                 return a.parentNode.removeChild(a), b - d
  542.             },
  543.             C = {
  544.                 getItem: function(b) {
  545.                     try {
  546.                         return a.localStorage.getItem(b)
  547.                     } catch (c) {}
  548.                 },
  549.                 setItem: function(b, c) {
  550.                     try {
  551.                         return a.localStorage.setItem(b, c)
  552.                     } catch (d) {}
  553.                 }
  554.             },
  555.             D = 1,
  556.             E = function(a) {
  557.                 if (a.nodeType === D) {
  558.                     var b = w(a, "max-height", "maxHeight"),
  559.                         c = w(a, "overflow-y", "overflowY");
  560.                     return b && "none" !== b && c && "visible" !== c
  561.                 }
  562.             },
  563.             F = 4,
  564.             G = function(a) {
  565.                 if (a.nodeType === D) return a.scrollHeight - a.clientHeight > F
  566.             },
  567.             H = function() {
  568.                 if (z.querySelector) {
  569.                     var a = z.querySelector("link[rel=canonical]");
  570.                     if (a) return a.href
  571.                 }
  572.             };
  573.         return {
  574.             MAX_Z_INDEX: 2147483647,
  575.             getShortnameFromUrl: d,
  576.             getForum: e,
  577.             guessThreadTitle: g,
  578.             getContrastYIQ: n,
  579.             getColorScheme: s,
  580.             getElementStyle: k,
  581.             getAnchorColor: m,
  582.             normalizeFontValue: h,
  583.             isSerif: l,
  584.             getBrowserSupport: i,
  585.             pageVisibility: A,
  586.             getScrollbarWidth: B,
  587.             browser: u,
  588.             storage: C,
  589.             appearsToHideContent: E,
  590.             hasOverflow: G,
  591.             getCanonicalUrl: H
  592.         }
  593.     }({}), v = function(a) {
  594.         var c = f,
  595.             d = n,
  596.             e = o,
  597.             g = u,
  598.             h = function(a, c) {
  599.                 this.win = a, this.configurator = c, this.config = {
  600.                     page: {
  601.                         url: b,
  602.                         title: b,
  603.                         slug: b,
  604.                         category_id: b,
  605.                         identifier: b,
  606.                         language: b,
  607.                         integration: b,
  608.                         api_key: b,
  609.                         remote_auth_s3: b,
  610.                         author_s3: b
  611.                     },
  612.                     experiment: {
  613.                         enable_scroll_container: !0,
  614.                         force_auto_styles: b,
  615.                         sort_order: b,
  616.                         force_mobile: b
  617.                     },
  618.                     server_side: {
  619.                         service: "static",
  620.                         experiment: "default",
  621.                         variant: "control",
  622.                         top_placement_url: b,
  623.                         bottom_placement_url: b,
  624.                         inthread_placement_url: b,
  625.                         recommendations_placement_url: b,
  626.                         lightbox_url: b,
  627.                         default_placement_url: b,
  628.                         inthread_leading_comment_count: b,
  629.                         inthread_repeat_comment_count: b,
  630.                         inthread_trailing_comment_count: b,
  631.                         inthread_count_children: b,
  632.                         inthread_multiple_ads: b,
  633.                         sandbox_ads: b,
  634.                         can_disable_ads: b,
  635.                         forum_id: b,
  636.                         is_private: b,
  637.                         forum: {
  638.                             id: b,
  639.                             disable_disqus_branding: b,
  640.                             recommendation_placement: b
  641.                         },
  642.                         recs_outside_embed_enabled: b,
  643.                         lazyload_viewports: b,
  644.                         quintesse_enabled: b,
  645.                         forceSwitch: b,
  646.                         forceRecommendationsOutside: b
  647.                     },
  648.                     disable_ads: b,
  649.                     strings: b,
  650.                     sso: {},
  651.                     callbacks: {
  652.                         preData: [],
  653.                         preInit: [],
  654.                         onInit: [],
  655.                         afterRender: [],
  656.                         onReady: [],
  657.                         onNewComment: [],
  658.                         preReset: [],
  659.                         onPaginate: [],
  660.                         onIdentify: [],
  661.                         beforeComment: []
  662.                     }
  663.                 }
  664.             };
  665.         h.DISQUS_GLOBALS = ["shortname", "identifier", "url", "title", "integration", "slug", "category_id"];
  666.         var i = h.prototype;
  667.         return i.getContainer = function() {
  668.             var a = this.win;
  669.             return a.document.getElementById(a.disqus_container_id || "disqus_thread")
  670.         }, i.runConfigurator = function() {
  671.             var a = this.configurator || this.win.disqus_config;
  672.             if ("function" == typeof a) try {
  673.                 a.call(this.config)
  674.             } catch (b) {}
  675.         }, i.getValuesFromGlobals = function() {
  676.             var a, b = this.win,
  677.                 d = this.config,
  678.                 e = d.page;
  679.             c(h.DISQUS_GLOBALS, function(a) {
  680.                 var c = b["disqus_" + a];
  681.                 "undefined" != typeof c && (e[a] = c)
  682.             }), this.runConfigurator(), d.forum || (a = e.shortname, d.forum = a ? a.toLowerCase() : g.getForum(b.document, "embed.js"))
  683.         }, i.toJSON = function() {
  684.             var a, c = this.win,
  685.                 f = this.config,
  686.                 h = f.page,
  687.                 i = this.getContainer(),
  688.                 j = g.getBrowserSupport(c);
  689.             return this.getValuesFromGlobals(), (f.server_side.top_placement_url || f.server_side.inthread_placement_url || f.server_side.bottom_placement_url || f.server_side.recommendations_placement_url || f.server_side.lightbox_url) && (a = d.generate({
  690.                 Math: e("Math", c),
  691.                 crypto: e("crypto", c),
  692.                 Uint32Array: e("Uint32Array", c),
  693.                 Date: e("Date", c)
  694.             })), {
  695.                 impressionId: a || null,
  696.                 container: i,
  697.                 forum: f.forum,
  698.                 sortOrder: f.experiment.sort_order || g.storage.getItem("disqus.sort") || "default",
  699.                 language: f.language,
  700.                 typeface: g.isSerif(i) ? "serif" : "sans-serif",
  701.                 anchorColor: g.getAnchorColor(i),
  702.                 colorScheme: g.getColorScheme(i),
  703.                 canonicalUrl: g.getCanonicalUrl(),
  704.                 url: h.url || c.location.href.replace(/#.*$/, ""),
  705.                 title: h.title,
  706.                 documentTitle: g.guessThreadTitle(),
  707.                 slug: h.slug,
  708.                 category: h.category_id,
  709.                 identifier: h.identifier,
  710.                 integration: h.integration,
  711.                 experimentName: f.server_side.experiment,
  712.                 experimentVariant: f.server_side.variant,
  713.                 experimentService: f.server_side.service,
  714.                 forumId: f.server_side.forum_id,
  715.                 disableAds: f.disable_ads,
  716.                 topPlacementUrl: f.server_side.top_placement_url,
  717.                 bottomPlacementUrl: f.server_side.bottom_placement_url,
  718.                 inthreadPlacementUrl: f.server_side.inthread_placement_url,
  719.                 recommendationsPlacementUrl: f.server_side.recommendations_placement_url,
  720.                 lightboxPlacementUrl: f.server_side.lightbox_url,
  721.                 defaultPlacementUrl: f.server_side.default_placement_url,
  722.                 inthreadLeadingCommentCount: f.server_side.inthread_leading_comment_count,
  723.                 inthreadRepeatCommentCount: f.server_side.inthread_repeat_comment_count,
  724.                 inthreadTrailingCommentCount: f.server_side.inthread_trailing_comment_count,
  725.                 inthreadCountChildren: f.server_side.inthread_count_children,
  726.                 inthreadMultipleAds: f.server_side.inthread_multiple_ads,
  727.                 sandboxAds: f.server_side.sandbox_ads,
  728.                 canDisableAds: f.server_side.can_disable_ads,
  729.                 apiKey: h.api_key,
  730.                 remoteAuthS3: h.remote_auth_s3,
  731.                 sso: f.sso,
  732.                 unsupported: j,
  733.                 degraded: Boolean(j) || g.browser.isCrawler(),
  734.                 callbacks: f.callbacks,
  735.                 enableScrollContainer: f.experiment.enable_scroll_container,
  736.                 forceAutoStyles: f.experiment.force_auto_styles,
  737.                 forceMobile: f.experiment.force_mobile,
  738.                 isPrivate: f.server_side.is_private,
  739.                 forumDetails: {
  740.                     id: f.server_side.forum && f.server_side.forum.id,
  741.                     disableDisqusBranding: Boolean(f.server_side.forum && f.server_side.forum.disable_disqus_branding),
  742.                     recommendationsPlacement: f.server_side.forum && f.server_side.forum.recommendation_placement
  743.                 },
  744.                 recsOutsideEmbedEnabled: Boolean(f.server_side.recs_outside_embed_enabled),
  745.                 lazyloadViewports: f.server_side.lazyload_viewports,
  746.                 quintesseEnabled: f.server_side.quintesse_enabled,
  747.                 forceSwitch: b,
  748.                 forceRecommendationsOutside: b
  749.             }
  750.         }, {
  751.             HostConfig: h
  752.         }
  753.     }({}), w = function() {
  754.         var a;
  755.         return a = "undefined" == typeof console ? function() {} : "function" == typeof console.log ? function() {
  756.             return console.log(Array.prototype.slice.call(arguments, 0).join(" "))
  757.         } : function() {
  758.             return console.log.apply(console, arguments)
  759.         }, {
  760.             log: a
  761.         }
  762.     }(), x = function(a) {
  763.         return function(b) {
  764.             return Boolean(b && (b.offsetWidth || b.offsetHeight || b.getClientRects().length) && "hidden" !== a(b, "visibility"))
  765.         }
  766.     }(r), y = function(a, b, c) {
  767.         var d = function() {
  768.             var e = a();
  769.             return e ? void b(e) : void setTimeout(d, c)
  770.         };
  771.         d()
  772.     }, z = function() {
  773.         var a = 1e4,
  774.             b = Math.floor(Math.random() * a + 1);
  775.         return function(a) {
  776.             b += 1;
  777.             var c = String(b);
  778.             return a ? a + c : c
  779.         }
  780.     }(), A = function(a) {
  781.         var b = f,
  782.             c = e,
  783.             d = z,
  784.             g = function(a) {
  785.                 var b, c = !1;
  786.                 return function() {
  787.                     return c ? b : (c = !0, b = a.apply(this, arguments), a = null, b)
  788.                 }
  789.             },
  790.             h = Object.keys || function(a) {
  791.                 if (a !== Object(a)) throw new TypeError("Invalid object");
  792.                 var b = [];
  793.                 for (var d in a) c(a, d) && (b[b.length] = d);
  794.                 return b
  795.             },
  796.             i = [].slice,
  797.             j = {
  798.                 on: function(a, b, c) {
  799.                     if (!l(this, "on", a, [b, c]) || !b) return this;
  800.                     this._events = this._events || {};
  801.                     var d = this._events[a] || (this._events[a] = []);
  802.                     return d.push({
  803.                         callback: b,
  804.                         context: c,
  805.                         ctx: c || this
  806.                     }), this
  807.                 },
  808.                 once: function(a, b, c) {
  809.                     if (!l(this, "once", a, [b, c]) || !b) return this;
  810.                     var d = this,
  811.                         e = g(function() {
  812.                             d.off(a, e), b.apply(this, arguments)
  813.                         });
  814.                     return e._callback = b, this.on(a, e, c)
  815.                 },
  816.                 off: function(a, b, c) {
  817.                     var d, e, f, g, i, j, k, m;
  818.                     if (!this._events || !l(this, "off", a, [b, c])) return this;
  819.                     if (!a && !b && !c) return this._events = {}, this;
  820.                     for (g = a ? [a] : h(this._events), i = 0, j = g.length; i < j; i++)
  821.                         if (a = g[i], f = this._events[a]) {
  822.                             if (this._events[a] = d = [], b || c)
  823.                                 for (k = 0, m = f.length; k < m; k++) e = f[k], (c && c !== e.context || b && b !== e.callback && b !== e.callback._callback) && d.push(e);
  824.                             d.length || delete this._events[a]
  825.                         }
  826.                     return this
  827.                 },
  828.                 trigger: function(a) {
  829.                     if (!this._events) return this;
  830.                     var b = i.call(arguments, 1);
  831.                     if (!l(this, "trigger", a, b)) return this;
  832.                     var c = this._events[a],
  833.                         d = this._events.all;
  834.                     return c && m(c, b), d && m(d, arguments), this
  835.                 },
  836.                 stopListening: function(a, b, c) {
  837.                     var d = this._listeners;
  838.                     if (!d) return this;
  839.                     var e = !b && !c;
  840.                     "object" == typeof b && (c = this), a && ((d = {})[a._listenerId] = a);
  841.                     for (var f in d) d[f].off(b, c, this), e && delete this._listeners[f];
  842.                     return this
  843.                 }
  844.             },
  845.             k = /\s+/,
  846.             l = function(a, b, c, d) {
  847.                 if (!c) return !0;
  848.                 if ("object" == typeof c) {
  849.                     for (var e in c) a[b].apply(a, [e, c[e]].concat(d));
  850.                     return !1
  851.                 }
  852.                 if (k.test(c)) {
  853.                     for (var f = c.split(k), g = 0, h = f.length; g < h; g++) a[b].apply(a, [f[g]].concat(d));
  854.                     return !1
  855.                 }
  856.                 return !0
  857.             },
  858.             m = function(a, b) {
  859.                 var c, d, e = a.length,
  860.                     f = b[0],
  861.                     g = b[1],
  862.                     h = b[2];
  863.                 switch (b.length) {
  864.                     case 0:
  865.                         for (d = 0; d < e; d++)(c = a[d]).callback.call(c.ctx);
  866.                         return;
  867.                     case 1:
  868.                         for (d = 0; d < e; d++)(c = a[d]).callback.call(c.ctx, f);
  869.                         return;
  870.                     case 2:
  871.                         for (d = 0; d < e; d++)(c = a[d]).callback.call(c.ctx, f, g);
  872.                         return;
  873.                     case 3:
  874.                         for (d = 0; d < e; d++)(c = a[d]).callback.call(c.ctx, f, g, h);
  875.                         return;
  876.                     default:
  877.                         for (d = 0; d < e; d++)(c = a[d]).callback.apply(c.ctx, b)
  878.                 }
  879.             },
  880.             n = {
  881.                 listenTo: "on",
  882.                 listenToOnce: "once"
  883.             };
  884.         return b(n, function(a, b) {
  885.             j[b] = function(b, c, e) {
  886.                 var f = this._listeners || (this._listeners = {}),
  887.                     g = b._listenerId || (b._listenerId = d("l"));
  888.                 return f[g] = b, "object" == typeof c && (e = this), b[a](c, e, this), this
  889.             }
  890.         }), j.bind = j.on, j.unbind = j.off, j
  891.     }({}), B = function(b) {
  892.         var c, d = a,
  893.             e = o;
  894.         return c = "[object JSON]" === d.Object.prototype.toString.call(d.JSON) ? d.JSON : e("JSON", d), c ? c : {}
  895.     }({}), C = function(a) {
  896.         var b = A,
  897.             c = k,
  898.             d = z,
  899.             e = g,
  900.             f = B,
  901.             h = function(a) {
  902.                 a = a || {}, this.state = h.INIT, this.uid = a.uid || d("dsq-frame"), this.origin = a.origin, this.host = e.getHost(this.origin), this.target = a.target, this.sandbox = a.sandbox, this.window = null, h.windows[this.uid] = this, this.on("ready", function() {
  903.                     this.state = h.READY
  904.                 }, this), this.on("die", function() {
  905.                     this.state = h.KILLED
  906.                 }, this)
  907.             };
  908.         return c(h, {
  909.             INIT: 0,
  910.             READY: 1,
  911.             KILLED: 2,
  912.             windows: {},
  913.             postMessage: function(a, b, c) {
  914.                 return a.postMessage(b, c)
  915.             }
  916.         }), c(h.prototype, b), h.prototype.requiresWindow = function(a) {
  917.             var b = this;
  918.             return function() {
  919.                 var c = Array.prototype.slice.call(arguments),
  920.                     d = function() {
  921.                         var e = b.window;
  922.                         e ? a.apply(b, c) : setTimeout(d, 500)
  923.                     };
  924.                 b.isReady() ? d() : b.on("ready", d)
  925.             }
  926.         }, h.prototype.sendMessage = function(a, b) {
  927.             var c = f.stringify({
  928.                 scope: "client",
  929.                 name: a,
  930.                 data: b
  931.             });
  932.             this.requiresWindow(function(a) {
  933.                 h.postMessage(this.window, a, this.origin)
  934.             })(c)
  935.         }, h.prototype.hide = function() {}, h.prototype.show = function() {}, h.prototype.url = function() {
  936.             return this.target
  937.         }, h.prototype.destroy = function() {
  938.             this.state = h.KILLED, this.off()
  939.         }, h.prototype.isReady = function() {
  940.             return this.state === h.READY
  941.         }, h.prototype.isKilled = function() {
  942.             return this.state === h.KILLED
  943.         }, h
  944.     }({}), D = function(b) {
  945.         var c = s,
  946.             d = k,
  947.             e = C,
  948.             f = g,
  949.             h = a.document,
  950.             i = function(a) {
  951.                 e.call(this, a), this.styles = a.styles || {}, this.tabIndex = a.tabIndex || 0, this.title = a.title || "Disqus", this.sandbox = a.sandbox, this.container = a.container, this.elem = null
  952.             };
  953.         return d(i.prototype, e.prototype), i.prototype.load = function() {
  954.             var a = this.elem = h.createElement("iframe");
  955.             a.setAttribute("id", this.uid), a.setAttribute("name", this.uid), a.setAttribute("allowTransparency", "true"), a.setAttribute("frameBorder", "0"), a.setAttribute("scrolling", "no"), this.role && a.setAttribute("role", this.role), a.setAttribute("tabindex", this.tabIndex), a.setAttribute("title", this.title), "string" == typeof this.sandbox && a.setAttribute("sandbox", this.sandbox), this.setInlineStyle(this.styles)
  956.         }, i.prototype.getOffset = function(a) {
  957.             return f.getOffset(this.elem, a)
  958.         }, i.prototype.setInlineStyle = function(a, b) {
  959.             return c(this.elem, a, b)
  960.         }, i.prototype.removeInlineStyle = function(a) {
  961.             var b = this.elem.style;
  962.             return "removeProperty" in b ? void b.removeProperty(a) : void(b[a] = "")
  963.         }, i.prototype.hide = function() {
  964.             this.setInlineStyle("display", "none")
  965.         }, i.prototype.show = function() {
  966.             this.removeInlineStyle("display")
  967.         }, i.prototype.destroy = function() {
  968.             return this.elem && this.elem.parentNode && (this.elem.parentNode.removeChild(this.elem), this.elem = null), e.prototype.destroy.call(this)
  969.         }, i
  970.     }({}), E = function(b) {
  971.         var c = q,
  972.             d = k,
  973.             e = g,
  974.             f = D,
  975.             h = a.document,
  976.             i = function(a) {
  977.                 f.call(this, a), this.contents = a.contents || "", this.styles = d({
  978.                     width: "100%",
  979.                     border: "none",
  980.                     overflow: "hidden"
  981.                 }, a.styles || {})
  982.             };
  983.         return d(i.prototype, f.prototype), i.prototype.load = function(a) {
  984.             f.prototype.load.call(this);
  985.             var b = this.elem,
  986.                 d = c(this.container) ? e.getContainer(this.container) : this.container;
  987.             d.appendChild(b), this.window = b.contentWindow;
  988.             try {
  989.                 this.window.document.open()
  990.             } catch (g) {
  991.                 b.src = 'javascript:var d=document.open();d.domain="' + h.domain + '";void(0);'
  992.             }
  993.             return this.document = this.window.document, this.document.write(this.contents), this.document.close(), this.updateHeight(), a && setTimeout(a, 0), this
  994.         }, i.prototype.updateHeight = function() {
  995.             var a = this.document.body;
  996.             if (a) {
  997.                 var b = a.offsetHeight + "px";
  998.                 this.setInlineStyle({
  999.                     height: b,
  1000.                     "min-height": b,
  1001.                     "max-height": b
  1002.                 })
  1003.             }
  1004.         }, i.prototype.show = function() {
  1005.             this.setInlineStyle("display", "block"), this.updateHeight()
  1006.         }, i.prototype.click = function(a) {
  1007.             var b = this,
  1008.                 c = b.document.body;
  1009.             c.addEventListener("click", function(c) {
  1010.                 a.call(b, c)
  1011.             })
  1012.         }, i
  1013.     }({}), F = function(b) {
  1014.         var c = r,
  1015.             d = a.document.body;
  1016.         return function() {
  1017.             var a = d.offsetHeight,
  1018.                 b = parseInt(c(d, "margin-top", "marginTop"), 10);
  1019.             b && (a += b);
  1020.             var e = parseInt(c(d, "margin-bottom", "marginBottom"), 10);
  1021.             return e && (a += e), a
  1022.         }
  1023.     }({}), G = function(a) {
  1024.         var b = k,
  1025.             c = ga,
  1026.             d = fa,
  1027.             e = "default",
  1028.             f = {
  1029.                 lounge: "http://disqus.com/embed/comments/",
  1030.                 home: "https://disqus.com/home/".replace("home/", ""),
  1031.                 recommendations: "http://disqus.com/recommendations/"
  1032.             },
  1033.             g = function(a) {
  1034.                 return "https://" + a.replace(/^\s*(\w+:)?\/\//, "")
  1035.             },
  1036.             h = function(a, h, i) {
  1037.                 var j = f[a];
  1038.                 if (!j) throw new Error("Unknown app: " + a);
  1039.                 var k = g(j),
  1040.                     l = b({
  1041.                         base: e
  1042.                     }, h || {}),
  1043.                     m = i ? "#" + d(i) : "";
  1044.                 return c(k, l) + m
  1045.             };
  1046.         return {
  1047.             BASE: e,
  1048.             apps: f,
  1049.             get: h,
  1050.             ensureHTTPSProtocol: g
  1051.         }
  1052.     }({}), H = function(a) {
  1053.         var b = A,
  1054.             c = k,
  1055.             d = e,
  1056.             f = z,
  1057.             g = function(a) {
  1058.                 this.uid = f("dsq-app"), this.settings = a || {};
  1059.                 var b = [],
  1060.                     c = this.constructor.prototype;
  1061.                 do b.unshift(c), c = c.constructor.__super__; while (c);
  1062.                 for (var e = 0, g = b.length; e < g; e++) c = b[e], d(c, "events") && this.on(c.events, this), d(c, "onceEvents") && this.once(c.onceEvents, this)
  1063.             };
  1064.         return c(g.prototype, b), g.prototype.destroy = function() {
  1065.             this.off(), this.stopListening()
  1066.         }, g.extend = function(a, b) {
  1067.             var e, f = this;
  1068.             e = a && d(a, "constructor") ? a.constructor : function() {
  1069.                 return f.apply(this, arguments)
  1070.             }, c(e, f, b);
  1071.             var g = function() {
  1072.                 this.constructor = e
  1073.             };
  1074.             return g.prototype = f.prototype, e.prototype = new g, a && c(e.prototype, a), e.__super__ = f.prototype, e
  1075.         }, g
  1076.     }({}), I = function(a, b, c) {
  1077.         c || (c = 0);
  1078.         var d, e, f, g, h = 0,
  1079.             i = function() {
  1080.                 h = new Date, f = null, g = a.apply(d, e)
  1081.             };
  1082.         return function() {
  1083.             var j = new Date,
  1084.                 k = b - (j - h);
  1085.             return d = this, e = arguments, k <= 0 ? (clearTimeout(f), f = null, h = j, g = a.apply(d, e)) : f || (f = setTimeout(i, k + c)), g
  1086.         }
  1087.     }, ia = function(b) {
  1088.         var c = A,
  1089.             d = q,
  1090.             f = e,
  1091.             h = k,
  1092.             i = D,
  1093.             j = g,
  1094.             l = C,
  1095.             m = B,
  1096.             n = a.document;
  1097.         b.throttle = I, a.addEventListener("message", function(a) {
  1098.             var c;
  1099.             try {
  1100.                 c = m.parse(a.data)
  1101.             } catch (d) {
  1102.                 return
  1103.             }
  1104.             var e = c.sender,
  1105.                 g = f(l.windows, e) && l.windows[e];
  1106.             g && j.getHost(a.origin) === g.host && (a.origin !== g.origin && (g.origin = a.origin), "host" === c.scope && g.trigger(c.name, c.data), "error" === c.name && b.trigger("error", c.data))
  1107.         }), a.addEventListener("hashchange", function() {
  1108.             b.trigger("window.hashchange", {
  1109.                 hash: a.location.hash
  1110.             })
  1111.         }), a.addEventListener("resize", b.throttle(function() {
  1112.             b.trigger("window.resize")
  1113.         }, 250, 50)), n.addEventListener("mousemove", b.throttle(function() {
  1114.             b.trigger("window.mousemove")
  1115.         }, 250, 50));
  1116.         var o = function() {
  1117.             b.trigger("window.scroll")
  1118.         };
  1119.         a.addEventListener("scroll", b.throttle(o, 250, 50), !1), n.addEventListener("click", function() {
  1120.             b.trigger("window.click")
  1121.         });
  1122.         var p = b.Popup = function(a) {
  1123.             a.uid = a.windowName, l.call(this, a)
  1124.         };
  1125.         h(p.prototype, l.prototype), p.prototype.load = function() {
  1126.             var b = this.window = a.open("", this.uid || "_blank");
  1127.             b.location = this.url()
  1128.         }, p.prototype.isKilled = function() {
  1129.             return l.prototype.isKilled() || this.window.closed
  1130.         };
  1131.         var r = b.Channel = function(a) {
  1132.             var b = this;
  1133.             b.window = null, i.call(b, a), this.insertBeforeEl = a.insertBeforeEl, this.insertAfterEl = a.insertAfterEl, b.styles = h({
  1134.                 width: "1px",
  1135.                 "min-width": "100%",
  1136.                 border: "none",
  1137.                 overflow: "hidden",
  1138.                 height: "0"
  1139.             }, a.styles || {})
  1140.         };
  1141.         return h(r.prototype, i.prototype), r.prototype.load = function(a) {
  1142.             var b = this;
  1143.             i.prototype.load.call(b);
  1144.             var c = b.elem;
  1145.             c.setAttribute("width", "100%"), c.setAttribute("src", b.url()), c.addEventListener("load", function() {
  1146.                 b.window = c.contentWindow, a && a()
  1147.             });
  1148.             var e = d(b.container) ? j.getContainer(b.container) : b.container,
  1149.                 f = (b.insertAfterEl ? b.insertAfterEl.nextSibling : b.insertBeforeEl) || null;
  1150.             e.insertBefore(c, f)
  1151.         }, r.prototype.destroy = function() {
  1152.             return this.window = null, i.prototype.destroy.call(this)
  1153.         }, b.on = c.on, b.off = c.off, b.trigger = c.trigger, b
  1154.     }(ia), J = function(b) {
  1155.         var c = k,
  1156.             d = G,
  1157.             e = H,
  1158.             f = ia,
  1159.             g = a.document,
  1160.             h = e.extend({
  1161.                 name: null,
  1162.                 loaderVersion: null,
  1163.                 frame: null,
  1164.                 origin: d.ensureHTTPSProtocol("https://disqus.com"),
  1165.                 state: null,
  1166.                 getUrl: function(a, b) {
  1167.                     return this.loaderVersion && (b = c({
  1168.                         version: this.loaderVersion
  1169.                     }, b)), d.ensureHTTPSProtocol(d.get(this.name, a, b))
  1170.                 },
  1171.                 getFrameSettings: function() {
  1172.                     var a = {
  1173.                             target: this.getUrl(),
  1174.                             origin: this.origin,
  1175.                             uid: this.uid,
  1176.                             sandbox: this.sandbox
  1177.                         },
  1178.                         b = this.settings;
  1179.                     return b.windowName ? a.windowName = b.windowName : a.container = b.container || g.body, b.styles && (a.styles = b.styles), a
  1180.                 },
  1181.                 getFrame: function() {
  1182.                     var a = this.getFrameSettings(),
  1183.                         b = a.windowName ? f.Popup : f.Channel;
  1184.                     return new b(a)
  1185.                 },
  1186.                 setState: function(a) {
  1187.                     var b = this.constructor;
  1188.                     return a in b.states && (this.state = b.states[a], void this.trigger("state:" + a))
  1189.                 },
  1190.                 init: function() {
  1191.                     var a, b = this;
  1192.                     b.frame = a = this.getFrame(), b.listenTo(a, "all", function(c, d) {
  1193.                         b.trigger("frame:" + c, d, a)
  1194.                     }), b.listenTo(a, "resize", function(a) {
  1195.                         b.lastResizedHeight = a.height
  1196.                     }), b.trigger("change:frame", a), b.frame.load(function() {
  1197.                         b.setState("LOADED")
  1198.                     }), b.setState("INIT")
  1199.                 },
  1200.                 destroy: function() {
  1201.                     var a = this.frame;
  1202.                     a && (this.stopListening(a), a.destroy()), this.setState("KILLED"), this.frame = null, e.prototype.destroy.call(this)
  1203.                 },
  1204.                 events: {
  1205.                     "frame:ready": function() {
  1206.                         this.setState("READY")
  1207.                     }
  1208.                 }
  1209.             }, {
  1210.                 states: {
  1211.                     INIT: 0,
  1212.                     LOADED: 1,
  1213.                     READY: 2,
  1214.                     RUNNING: 3,
  1215.                     KILLED: 4
  1216.                 }
  1217.             });
  1218.         return h
  1219.     }({}), K = function(b) {
  1220.         var c = r,
  1221.             d = F,
  1222.             e = x,
  1223.             f = J,
  1224.             g = ia,
  1225.             h = u,
  1226.             i = a.document,
  1227.             j = i.querySelector("html"),
  1228.             k = {
  1229.                 lounge: "embed",
  1230.                 recommendations: "recommendations"
  1231.             },
  1232.             l = f.extend({
  1233.                 getUrl: function() {
  1234.                     var b = this.settings,
  1235.                         c = {
  1236.                             f: b.forum,
  1237.                             t_i: b.identifier,
  1238.                             t_u: b.url || a.location.href,
  1239.                             t_s: b.slug,
  1240.                             t_e: b.title,
  1241.                             t_d: b.documentTitle,
  1242.                             t_t: b.title || b.documentTitle,
  1243.                             t_c: b.category,
  1244.                             s_o: b.sortOrder,
  1245.                             l: b.language
  1246.                         };
  1247.                     return b.unsupported && (c.n_s = b.unsupported), f.prototype.getUrl.call(this, c)
  1248.                 },
  1249.                 getFrameInitParams: function(b) {
  1250.                     var c = this.settings,
  1251.                         d = {
  1252.                             permalink: c.permalink,
  1253.                             anchorColor: c.anchorColor,
  1254.                             referrer: a.location.href,
  1255.                             hostReferrer: i.referrer,
  1256.                             canonicalUrl: c.canonicalUrl,
  1257.                             colorScheme: c.colorScheme,
  1258.                             typeface: c.typeface,
  1259.                             remoteAuthS3: c.remoteAuthS3,
  1260.                             apiKey: c.apiKey,
  1261.                             sso: c.sso,
  1262.                             parentWindowHash: a.location.hash,
  1263.                             forceAutoStyles: c.forceAutoStyles,
  1264.                             forceMobile: c.forceMobile,
  1265.                             layout: c.layout,
  1266.                             integration: c.integration,
  1267.                             version: c.version,
  1268.                             isPrivate: c.isPrivate,
  1269.                             timestamp: this.timestamp,
  1270.                             loadTime: this.getBootloaderTimingInfo(),
  1271.                             isHeightRestricted: this.isHeightRestricted()
  1272.                         };
  1273.                     return d.initialPosition = this.getViewportAndScrollStatus(), d
  1274.                 },
  1275.                 listenToScrollEvent: function(a) {
  1276.                     var b = this,
  1277.                         c = b.getScrollContainer();
  1278.                     if (c === j) return b.listenTo(g, "window.scroll", a),
  1279.                         function() {
  1280.                             b.stopListening(g, "window.scroll", a)
  1281.                         };
  1282.                     var d = g.throttle(function() {
  1283.                         a.call(b)
  1284.                     }, 250, 50);
  1285.                     return c.addEventListener("scroll", d),
  1286.                         function() {
  1287.                             c.removeEventListener("scroll", d)
  1288.                         }
  1289.                 },
  1290.                 storeScrollContainer: function() {
  1291.                     if (!this.settings.enableScrollContainer) return void(this.scrollContainer = j);
  1292.                     var a, b, d = [];
  1293.                     if (this.potentialScrollContainers)
  1294.                         for (b = 0; b < this.potentialScrollContainers.length && (a = this.potentialScrollContainers[b], !(a.clientHeight < a.scrollHeight)); b++) a = null;
  1295.                     else {
  1296.                         a = this.settings.container;
  1297.                         do {
  1298.                             var e = c(a, "overflow-y", "overflowY");
  1299.                             if (("scroll" === e || "auto" === e) && (d.push(a), a.clientHeight < a.scrollHeight)) break;
  1300.                             a = a.parentNode
  1301.                         } while (a && a !== j)
  1302.                     }
  1303.                     a && a !== i.body || (a = j), this.potentialScrollContainers || (this.potentialScrollContainers = d);
  1304.                     var f = this.scrollContainer && this.scrollContainer !== a;
  1305.                     this.scrollContainer = a, f && (this.stopListeningToScrollEvent && this.stopListeningToScrollEvent(), this.stopListeningToScrollEvent = this.listenToScrollEvent(this.communicateViewportAndScrollStatus))
  1306.                 },
  1307.                 getScrollContainer: function() {
  1308.                     return this.scrollContainer || this.storeScrollContainer(), this.scrollContainer
  1309.                 },
  1310.                 getViewportCoords: function() {
  1311.                     return this.getScrollContainer() === j ? this.getWindowCoords() : this.getScrollContainerCoords()
  1312.                 },
  1313.                 getWindowCoords: function() {
  1314.                     if ("number" == typeof a.pageYOffset) this.getWindowScroll = function() {
  1315.                         return a.pageYOffset
  1316.                     }, this.getWindowHeight = function() {
  1317.                         return a.innerHeight
  1318.                     };
  1319.                     else {
  1320.                         var b = j.clientHeight || j.clientWidth ? j : i.body;
  1321.                         this.getWindowScroll = function() {
  1322.                             return b.scrollTop
  1323.                         }, this.getWindowHeight = function() {
  1324.                             return b.clientHeight
  1325.                         }
  1326.                     }
  1327.                     return this.getWindowCoords = function() {
  1328.                         return {
  1329.                             top: this.getWindowScroll(),
  1330.                             height: this.getWindowHeight()
  1331.                         }
  1332.                     }, this.getWindowCoords()
  1333.                 },
  1334.                 getScrollContainerCoords: function() {
  1335.                     var a = this.getScrollContainer();
  1336.                     return {
  1337.                         top: a.scrollTop,
  1338.                         height: a.clientHeight
  1339.                     }
  1340.                 },
  1341.                 getBootloaderTimingInfo: function() {
  1342.                     if (a.performance && a.performance.getEntriesByName) {
  1343.                         var b = i.currentScript ? i.currentScript.src : "https://" + this.settings.forum + ".disqus.com/" + k[this.name] + ".js",
  1344.                             c = a.performance.getEntriesByName(b)[0];
  1345.                         return c && c.duration
  1346.                     }
  1347.                 },
  1348.                 getViewportAndScrollStatus: function() {
  1349.                     var a = this.frame;
  1350.                     if (!a || !a.getOffset) return null;
  1351.                     if (!e(a.elem)) return null;
  1352.                     var b = this.getViewportCoords();
  1353.                     return {
  1354.                         frameOffset: a.getOffset(this.getScrollContainer()),
  1355.                         pageOffset: b.top,
  1356.                         height: b.height
  1357.                     }
  1358.                 },
  1359.                 communicateViewportAndScrollStatus: function() {
  1360.                     var a = this.getViewportAndScrollStatus();
  1361.                     if (a) {
  1362.                         var b = a.frameOffset,
  1363.                             c = b.top,
  1364.                             d = c + b.height,
  1365.                             e = a.pageOffset,
  1366.                             f = a.height,
  1367.                             g = e + f,
  1368.                             h = !1,
  1369.                             i = !1;
  1370.                         c <= g + f && (h = d >= e, i = h && c <= g);
  1371.                         var j = this.frame;
  1372.                         j.sendMessage("window.scroll.always", a), h && j.sendMessage("window.scroll", a), i !== this.wasInViewport && (j.sendMessage(i ? "window.inViewport" : "window.scrollOffViewport"), this.wasInViewport = i)
  1373.                     }
  1374.                 },
  1375.                 getBestNextFrameHeight: function(a) {
  1376.                     var b = this.getViewportAndScrollStatus();
  1377.                     if (!b || this.settings.enableScrollContainer || !this.getScrollContainer()) return a;
  1378.                     var c = b.frameOffset;
  1379.                     if (a >= c.height) return a;
  1380.                     var e = d(),
  1381.                         f = e - (c.height + c.top),
  1382.                         g = b.pageOffset + b.height - (c.top + f);
  1383.                     return g > a ? g + 1 : a
  1384.                 },
  1385.                 isHeightRestricted: function(a) {
  1386.                     function b() {
  1387.                         return h.appearsToHideContent(d) || f && h.appearsToHideContent(e)
  1388.                     }
  1389.  
  1390.                     function c() {
  1391.                         return h.appearsToHideContent(d) && h.hasOverflow(d) || f && h.appearsToHideContent(e) && h.hasOverflow(e)
  1392.                     }
  1393.                     a = a || {};
  1394.                     var d = this.settings.container,
  1395.                         e = d.parentNode,
  1396.                         f = e !== j && e !== i.body;
  1397.                     return a.checkScrollHeight ? c() : b()
  1398.                 },
  1399.                 events: {
  1400.                     "state:INIT": function() {
  1401.                         this.settings.degraded || (this.settings.windowName || (this.stopListeningToScrollEvent = this.listenToScrollEvent(this.communicateViewportAndScrollStatus), this.listenTo(g, "window.resize", this.communicateViewportAndScrollStatus)), this.timestamp = Number(new Date))
  1402.                     },
  1403.                     "state:LOADED": function() {
  1404.                         var a = this.frame,
  1405.                             b = a.elem;
  1406.                         this.settings.degraded ? (a.setInlineStyle("height", "500px"), b.setAttribute("scrolling", "yes"), b.setAttribute("horizontalscrolling", "no"), b.setAttribute("verticalscrolling", "yes"), a.show()) : this.settings.windowName || (this.rendered = !1, a.setInlineStyle("height", "0"), b.setAttribute("scrolling", "no"), b.setAttribute("horizontalscrolling", "no"), b.setAttribute("verticalscrolling", "no"))
  1407.                     },
  1408.                     "frame:ready": function(a, b) {
  1409.                         var c = this.getFrameInitParams(a, b);
  1410.                         b.sendMessage("init", c)
  1411.                     },
  1412.                     "frame:resize": function(a, b) {
  1413.                         var c = a.height;
  1414.                         b.elem && this.rendered && (c = this.getBestNextFrameHeight(c), b.setInlineStyle("height", c + "px"), b.sendMessage(k[this.name] + ".resized")), this.storeScrollContainer(), this.communicateViewportAndScrollStatus()
  1415.                     },
  1416.                     "frame:rendered": function(a, b) {
  1417.                         this.rendered = !0, this.wasInViewport = !1, b.trigger("resize", a), b.sendMessage(k[this.name] + ".rendered")
  1418.                     },
  1419.                     "frame:fail": function(a, b) {
  1420.                         b.elem && b.setInlineStyle("height", a && a.height || "75px")
  1421.                     },
  1422.                     "frame:scrollTo": function(b, c) {
  1423.                         if (c.elem && c.getOffset) {
  1424.                             var d = this.getScrollContainer(),
  1425.                                 e = c.getOffset(d),
  1426.                                 f = "window" === b.relative ? b.top : e.top + b.top,
  1427.                                 g = this.getViewportCoords();
  1428.                             !b.force && f > g.top && f < g.top + g.height || (d === j ? a.scrollTo(0, f) : d.scrollTop = f)
  1429.                         }
  1430.                     }
  1431.                 }
  1432.             });
  1433.         return l
  1434.     }({}), L = function(b) {
  1435.         var c = r,
  1436.             d = ga,
  1437.             e = u,
  1438.             f = G,
  1439.             g = J,
  1440.             h = a.document,
  1441.             i = /^calc\((.+)\)$/,
  1442.             j = g.extend({
  1443.                 name: "home",
  1444.                 events: {
  1445.                     "frame:close": function(b, c) {
  1446.                         c.hide(), a.focus()
  1447.                     },
  1448.                     "frame:openReady": function() {
  1449.                         this.frame.show(), this.frame.sendMessage("open"), (e.browser.isIE() || e.browser.isSafari()) && this.preventScrolling(), this.frame.elem && this.frame.elem.focus()
  1450.                     },
  1451.                     "state:LOADED": function() {
  1452.                         this.frame.removeInlineStyle("visibility")
  1453.                     },
  1454.                     "frame:after:render": function() {
  1455.                         e.browser.isSafari() && this.triggerHostReflow()
  1456.                     }
  1457.                 },
  1458.                 preventScrolling: function() {
  1459.                     var a = this.getBodyOverflow(),
  1460.                         b = h.body.style.marginRight,
  1461.                         d = h.documentElement.style,
  1462.                         e = d.overflow;
  1463.                     this.listenToOnce(this, "frame:close", function() {
  1464.                         this.setBodyStyles({
  1465.                             overflow: a,
  1466.                             marginRight: b
  1467.                         }), d.overflow = e
  1468.                     }), this.setBodyStyles({
  1469.                         overflow: "hidden",
  1470.                         marginRight: this.calcMargin(c(h.body, "margin-right", "marginRight") || b)
  1471.                     }), d.overflow = "hidden"
  1472.                 },
  1473.                 triggerHostReflow: function() {
  1474.                     var a = h.createElement("style");
  1475.                     h.body.appendChild(a), h.body.removeChild(a)
  1476.                 },
  1477.                 calcMargin: function(a) {
  1478.                     var b = a.match(i);
  1479.                     return b && (a = b[1]), a ? "calc(" + a + " + " + e.getScrollbarWidth() + "px)" : e.getScrollbarWidth() + "px"
  1480.                 },
  1481.                 setBodyStyles: function(a) {
  1482.                     for (var b in a) h.body.style[b] = a[b]
  1483.                 },
  1484.                 getBodyOverflow: function() {
  1485.                     return h.body.style.overflow
  1486.                 },
  1487.                 getSecureOrigin: function() {
  1488.                     return f.ensureHTTPSProtocol(j.SECURE_HOME_URL).split("/").slice(0, 3).join("/")
  1489.                 },
  1490.                 getFrameSettings: function() {
  1491.                     var a = g.prototype.getFrameSettings.call(this);
  1492.                     return a.role = "dialog", a.origin = this.getSecureOrigin(), a.styles = {
  1493.                         height: "100%",
  1494.                         position: "fixed",
  1495.                         top: 0,
  1496.                         right: 0,
  1497.                         left: "auto",
  1498.                         bottom: "auto",
  1499.                         "z-index": e.MAX_Z_INDEX,
  1500.                         visibility: "hidden"
  1501.                     }, a
  1502.                 },
  1503.                 getUrl: function() {
  1504.                     var a = this.settings.path || "",
  1505.                         b = this.settings.language,
  1506.                         c = {
  1507.                             utm_source: "disqus_embed"
  1508.                         };
  1509.                     return b && "en" !== b && (c.l = b), d(f.apps[this.name] + a, c)
  1510.                 },
  1511.                 show: function(a) {
  1512.                     if (!this.frame.isReady()) return void this.once("frame:ready", function() {
  1513.                         this.show(a)
  1514.                     }, this);
  1515.                     var b = {
  1516.                         disableMOTD: this.settings.disableMOTD,
  1517.                         path: a
  1518.                     };
  1519.                     this.settings.sso && (b.sso = this.settings.sso), this.frame.sendMessage("showPath", b)
  1520.                 }
  1521.             }, {
  1522.                 SECURE_HOME_URL: "https://disqus.com/home/",
  1523.                 READY_TIMEOUT: 1e4,
  1524.                 getInstanceOrLoad: function(a) {
  1525.                     var b = j.instance;
  1526.                     return b ? b : (b = j.instance = new j(a), a.preload && b.listenToOnce(b, "state:INIT", function() {
  1527.                         b.frame.hide()
  1528.                     }), j.setHomeTimeout(b), b.init(), a.config && b.once("frame:ready", function() {
  1529.                         b.frame.sendMessage("setConfig", a.config)
  1530.                     }), a.forum && b.listenToOnce(b, "frame:ready", function() {
  1531.                         b.frame.sendMessage("setForum", a.forum)
  1532.                     }), b)
  1533.                 },
  1534.                 setHomeTimeout: function(a) {
  1535.                     j.homeTimeoutId && clearTimeout(j.homeTimeoutId);
  1536.                     var b = j.homeTimeoutId = setTimeout(function() {
  1537.                         a.frame.destroy(), a.trigger("timeout")
  1538.                     }, j.READY_TIMEOUT);
  1539.                     a.listenToOnce(a, "state:READY", function() {
  1540.                         clearTimeout(b)
  1541.                     })
  1542.                 },
  1543.                 preload: function(a) {
  1544.                     return a.preload = !0, j.getInstanceOrLoad(a)
  1545.                 },
  1546.                 destroy: function() {
  1547.                     var a = j.instance;
  1548.                     a && (a.destroy(), j.instance = null)
  1549.                 },
  1550.                 show: function(a) {
  1551.                     var b = j.getInstanceOrLoad(a);
  1552.                     return b.show(a.path), b
  1553.                 }
  1554.             });
  1555.         return {
  1556.             show: j.show,
  1557.             preload: j.preload,
  1558.             destroy: j.destroy,
  1559.             HomeApp: j
  1560.         }
  1561.     }({}), M = function(a) {
  1562.         var b = k,
  1563.             c = {
  1564.                 height: "52px",
  1565.                 width: "54px",
  1566.                 margin: "0 auto",
  1567.                 overflow: "hidden",
  1568.                 position: "relative",
  1569.                 boxingSize: "border-box"
  1570.             },
  1571.             d = function(a) {
  1572.                 var d = a ? "0 -52px " : "";
  1573.                 return b({
  1574.                     background: "url(https://c.disquscdn.com/next/embed/assets/img/loader-bg.173909e4737a7481df14d5492b5eeb48.png) " + d + "no-repeat"
  1575.                 }, c)
  1576.             },
  1577.             e = "https://c.disquscdn.com/next/embed/assets/img/disqus-social-icon-light.5a4245eaed6988115d6bd53f20074f71.svg",
  1578.             f = "https://c.disquscdn.com/next/embed/assets/img/disqus-social-icon-dark.a621bea3e02c9fa04fd3965a3d6f424d.svg",
  1579.             g = {
  1580.                 display: "block",
  1581.                 margin: "auto",
  1582.                 width: "80px",
  1583.                 height: "80px"
  1584.             },
  1585.             h = function(a) {
  1586.                 var c = a ? e : f;
  1587.                 return b({
  1588.                     background: "url(" + c + ") center center / contain no-repeat"
  1589.                 }, g)
  1590.             };
  1591.         return {
  1592.             getBubbleStyle: d,
  1593.             getIconStyle: h
  1594.         }
  1595.     }({}), N = function() {
  1596.         var b = {
  1597.             _doc: a.document,
  1598.             create: function(a, c, d) {
  1599.                 d || (d = {});
  1600.                 var e = a + "=" + c + "; path=" + (d.path || "/"),
  1601.                     f = d.domain,
  1602.                     g = d.expiresIn;
  1603.                 if (f && (e += "; domain=." + f), "[object Number]" === Object.prototype.toString.call(g)) {
  1604.                     var h = new Date((new Date).getTime() + g);
  1605.                     e += "; expires=" + h.toGMTString()
  1606.                 }
  1607.                 "https:" === b._doc.location.protocol && (e += "; secure"), e += "; SameSite=None", b._doc.cookie = e
  1608.             },
  1609.             read: function(a) {
  1610.                 for (var c, d = a + "=", e = b._doc.cookie.split(";"), f = 0; f < e.length; f++)
  1611.                     if (c = e[f].replace(/^\s+/, ""), 0 === c.indexOf(d)) return c.substring(d.length);
  1612.                 return null
  1613.             },
  1614.             erase: function(a, c) {
  1615.                 var d = {};
  1616.                 for (var e in c) c.hasOwnProperty(e) && (d[e] = c[e]);
  1617.                 return d.expiresIn = -1, b.create(a, "", d)
  1618.             },
  1619.             supported: function() {
  1620.                 return b.create("cookie_support", "1"), "1" === b.read("cookie_support") && (b.erase("cookie_support"), !0)
  1621.             }
  1622.         };
  1623.         return b
  1624.     }(), ja = function(b) {
  1625.         var c = N,
  1626.             d = n,
  1627.             e = l,
  1628.             f = o,
  1629.             g = "dsq__",
  1630.             h = !1;
  1631.         return b.setHostIdentity = function(b, e) {
  1632.             var h = c.read(g),
  1633.                 i = a.location.host.split(":")[0];
  1634.             return h && !e.shouldTrack ? void c.erase(g) : void(e.shouldTrack && e.isMobile && e.hostIdentityActive && (h || (h = d.generate({
  1635.                 Math: f("Math", a),
  1636.                 crypto: f("crypto", a),
  1637.                 Uint32Array: f("Uint32Array", a),
  1638.                 Date: f("Date", a)
  1639.             }), c.create(g, h, {
  1640.                 domain: i,
  1641.                 expiresIn: 31536e6
  1642.             })), b.frame.sendMessage("tracking.hostIdentity", {
  1643.                 domain: i,
  1644.                 id: h
  1645.             })))
  1646.         }, b.checkCmp = function(b) {
  1647.             var c = 833,
  1648.                 d = 2;
  1649.             if (b.settings.isPrivate) {
  1650.                 var f = function(a, d) {
  1651.                     h || d && (a.vendor.consents[c] && a.purpose.consents[1] && a.purpose.consents[2] && a.purpose.consents[3] && a.purpose.consents[4] && a.purpose.consents[5] && a.purpose.consents[6] && a.purpose.consents[7] && a.purpose.consents[8] && a.purpose.consents[9] && a.purpose.consents[10] ? (h = !0, e.logStat("cmp.consent"), b.frame.sendMessage("cmp.consent", {
  1652.                         tcString: a.tcString
  1653.                     })) : (h = !1, e.logStat("cmp.no_consent")))
  1654.                 };
  1655.                 if (a.__tcfapi) {
  1656.                     e.logStat("cmp.present"), a.__tcfapi("getTCData", d, f);
  1657.                     try {
  1658.                         a.__tcfapi("addEventListener", d, f)
  1659.                     } catch (g) {}
  1660.                 }
  1661.             }
  1662.         }, b
  1663.     }(ja), O = function(b) {
  1664.         var c = a.document,
  1665.             d = f,
  1666.             e = ha,
  1667.             h = k,
  1668.             i = x,
  1669.             j = y,
  1670.             m = l,
  1671.             n = E,
  1672.             o = g,
  1673.             p = K,
  1674.             q = ia,
  1675.             r = w,
  1676.             s = u,
  1677.             t = L,
  1678.             v = M,
  1679.             z = ja,
  1680.             A = p.extend({
  1681.                 name: "lounge",
  1682.                 loaderVersion: m.getLoaderVersionFromUrl("https://c.disquscdn.com/next/embed/lounge.load.46aa6ce1907927200257678d09dec282.js"),
  1683.                 indicators: null,
  1684.                 wasInViewport: !1,
  1685.                 triggeredSlowEvent: !1,
  1686.                 events: {
  1687.                     "state:INIT": function() {
  1688.                         var b = this.settings,
  1689.                             d = b.server_side;
  1690.                         return d && "fallback" === d.service && m.logStat("embed.fallback"), b.degraded ? void m.reportJester({
  1691.                             imp: b.impressionId,
  1692.                             experiment: b.experimentName,
  1693.                             variant: b.experimentVariant,
  1694.                             service: b.experimentService,
  1695.                             forum: b.forum,
  1696.                             version: this.loaderVersion,
  1697.                             page_url: a.location.href,
  1698.                             page_referrer: c.referrer,
  1699.                             event: "activity",
  1700.                             verb: "load",
  1701.                             product: "embed",
  1702.                             zone: "thread",
  1703.                             section: "degraded",
  1704.                             adjective: b.unsupported,
  1705.                             object_type: "thread",
  1706.                             object_id: b.identifier
  1707.                         }) : (this.indicators = {}, this.isContainerVisible() ? this.addLoadingAnim() : this.addLoadingAnimOnContainerVisible(), this.bindPublisherCallbacks(), void this.forwardGlobalEvents())
  1708.                     },
  1709.                     "state:LOADED": function() {
  1710.                         this.isContainerVisible() && this.addLoadingAnim()
  1711.                     },
  1712.                     "frame:reload": function() {
  1713.                         a.location.reload()
  1714.                     },
  1715.                     "frame:navigate": function(b) {
  1716.                         a.location.href = b
  1717.                     },
  1718.                     "frame:session.identify": function(a) {
  1719.                         this.trigger("session.identify", a)
  1720.                     },
  1721.                     "frame:posts.paginate": function() {
  1722.                         this.trigger("posts.paginate")
  1723.                     },
  1724.                     "frame:posts.count": function(a) {
  1725.                         this.trigger("posts.count", a)
  1726.                     },
  1727.                     "frame:posts.create": function(a) {
  1728.                         this.trigger("posts.create", {
  1729.                             id: a.id,
  1730.                             text: a.raw_message
  1731.                         })
  1732.                     },
  1733.                     "frame:posts.beforeCreate": function(a) {
  1734.                         this.onBeforePostCreate(a)
  1735.                     },
  1736.                     "frame:home.destroy": function() {
  1737.                         this.destroyHome()
  1738.                     },
  1739.                     "frame:home.preload": function(a) {
  1740.                         this.preloadHome(a)
  1741.                     },
  1742.                     "frame:home.show": function(a) {
  1743.                         this.showHome(a)
  1744.                     },
  1745.                     "frame:home.open": function(b) {
  1746.                         a.location = b
  1747.                     },
  1748.                     "frame:indicator:init": function(a, b) {
  1749.                         if (b.getOffset) {
  1750.                             for (var c, d, e = ["north", "south"], f = this.indicators, g = b.getOffset().width + "px", i = {
  1751.                                     width: g,
  1752.                                     "min-width": g,
  1753.                                     "max-width": g,
  1754.                                     position: "fixed",
  1755.                                     "z-index": s.MAX_Z_INDEX - 1
  1756.                                 }, j = {
  1757.                                     north: {
  1758.                                         top: "0"
  1759.                                     },
  1760.                                     south: {
  1761.                                         bottom: "0"
  1762.                                     }
  1763.                                 }, k = function() {
  1764.                                     b.sendMessage("indicator:click", this.uid.split("-")[1])
  1765.                                 }, l = 0; l < e.length; l++) {
  1766.                                 d = e[l], c = new n({
  1767.                                     uid: "indicator-" + d,
  1768.                                     container: this.settings.container,
  1769.                                     contents: a[d].contents,
  1770.                                     styles: h(j[d], i),
  1771.                                     role: "alert",
  1772.                                     type: d
  1773.                                 });
  1774.                                 try {
  1775.                                     c.load()
  1776.                                 } catch (m) {
  1777.                                     continue
  1778.                                 }
  1779.                                 c.hide(), c.click(k), f[d] = c
  1780.                             }
  1781.                             this.on({
  1782.                                 "frame:indicator:show": function(a) {
  1783.                                     var b = f[a.type];
  1784.                                     b && (b.document.getElementById("message").innerHTML = a.content, b.show())
  1785.                                 },
  1786.                                 "frame:indicator:hide": function(a) {
  1787.                                     var b = a && a.type,
  1788.                                         c = b && f[b];
  1789.                                     if (c) c.hide();
  1790.                                     else if (!b)
  1791.                                         for (var d = 0; d < e.length; d++) b = e[d], c = f[b], c && c.hide()
  1792.                                 }
  1793.                             })
  1794.                         }
  1795.                     },
  1796.                     "frame:change:sort": function(a) {
  1797.                         s.storage.setItem("disqus.sort", a)
  1798.                     },
  1799.                     "frame:fail frame:rendered": function() {
  1800.                         this.removeLoadingAnim(), this.setState("RUNNING")
  1801.                     },
  1802.                     "frame:fail": function(a) {
  1803.                         m.logStat("failed_embed.server." + a.code)
  1804.                     },
  1805.                     "frame:rendered": function() {
  1806.                         this.triggeredSlowEvent && m.logStat("rendered_embed.slow")
  1807.                     },
  1808.                     "frame:tracking:init": function(a) {
  1809.                         a = a || {}, z.checkCmp(this), z.setHostIdentity(this, a)
  1810.                     }
  1811.                 },
  1812.                 onceEvents: {
  1813.                     "frame:viglink:init": function(b) {
  1814.                         var c = function() {
  1815.                             for (var b in a)
  1816.                                 if (0 === b.indexOf("skimlinks") || 0 === b.indexOf("skimwords")) return !0;
  1817.                             return !1
  1818.                         };
  1819.                         if (!(a.vglnk_self || a.vglnk || c())) {
  1820.                             var d = b.apiUrl,
  1821.                                 f = b.key,
  1822.                                 g = String(b.id);
  1823.                             null != b.clientUrl && null != d && null != f && null != b.id && (DISQUS.vglnk = {
  1824.                                 api_url: d,
  1825.                                 key: f,
  1826.                                 sub_id: g
  1827.                             }, a.vglnk_self = "DISQUS.vglnk", e(b.clientUrl))
  1828.                         }
  1829.                     },
  1830.                     "frame:quintesse:init": function() {
  1831.                         e("https://q.quintesse.io/api/is?st=8122b31f-cef4-46aa-99c1-8092729a014d")
  1832.                     }
  1833.                 },
  1834.                 getFrameInitParams: function(a, b) {
  1835.                     var c = p.prototype.getFrameInitParams.call(this, a, b);
  1836.                     return c.experiment = {
  1837.                         experiment: this.settings.experimentName,
  1838.                         variant: this.settings.experimentVariant,
  1839.                         service: this.settings.experimentService
  1840.                     }, c.isBehindClick = this.isHeightRestricted() || !i(b.elem), c.startedFullyVisible = !1, this.whenFullyVisible(function() {
  1841.                         c.startedFullyVisible = !0, b.sendMessage("frame.visible", {})
  1842.                     }), c.disableAds = this.settings.disableAds, c.isHostIframed = this.settings.isHostIframed, c.sandboxAds = this.settings.sandboxAds, c.canDisableAds = this.settings.canDisableAds, c.inthreadPlacementUrl = this.settings.inthreadPlacementUrl, c.inthreadLeadingCommentCount = this.settings.inthreadLeadingCommentCount, c.inthreadRepeatCommentCount = this.settings.inthreadRepeatCommentCount, c.inthreadTrailingCommentCount = this.settings.inthreadTrailingCommentCount, c.inthreadCountChildren = this.settings.inthreadCountChildren, c.inthreadMultipleAds = this.settings.inthreadMultipleAds, c.recommendationsPlacementUrl = this.settings.recommendationsPlacementUrl, c.lightboxPlacementUrl = this.settings.lightboxPlacementUrl, c.quintesseEnabled = this.settings.quintesseEnabled, c.recsOutsideEmbedEnabled = this.settings.recsOutsideEmbedEnabled, this.settings.impressionId && (c.impressionId = this.settings.impressionId), c
  1843.                 },
  1844.                 onBeforePostCreate: function(a) {
  1845.                     var b = {
  1846.                         text: a.raw_message
  1847.                     };
  1848.                     try {
  1849.                         var c = this.settings.callbacks.beforeComment;
  1850.                         if (c)
  1851.                             for (var d = 0; d < c.length; d++) b = c[d](b)
  1852.                     } catch (e) {
  1853.                         r.log("Error processing Disqus callback: ", e.toString())
  1854.                     } finally {
  1855.                         this.frame.sendMessage("posts.beforeCreate.response", b && b.text)
  1856.                     }
  1857.                 },
  1858.                 destroyHome: function() {
  1859.                     t.destroy()
  1860.                 },
  1861.                 preloadHome: function(a) {
  1862.                     a.path = "home/preload/";
  1863.                     var b = this.home = t.preload(this.getHomeData(a));
  1864.                     this.listenToOnce(b, "frame:ready", function() {
  1865.                         this.frame.sendMessage("home.ready")
  1866.                     }), this.handleHomeTimeout(b)
  1867.                 },
  1868.                 handleHomeTimeout: function(a) {
  1869.                     this.listenTo(a, "timeout", function() {
  1870.                         this.frame.sendMessage("home.timeout")
  1871.                     })
  1872.                 },
  1873.                 showHome: function(a) {
  1874.                     var b = this.home = t.show(this.getHomeData(a));
  1875.                     this.listenToOnce(b, "frame:openReady", function() {
  1876.                         this.frame.sendMessage("home.opened")
  1877.                     }), this.handleHomeTimeout(b)
  1878.                 },
  1879.                 getHomeData: function(a) {
  1880.                     var b = this.settings;
  1881.                     return a.config = b, a.language || (a.language = b.language), b.apiKey && b.remoteAuthS3 && (a.sso = {
  1882.                         apiKey: b.apiKey,
  1883.                         remoteAuthS3: b.remoteAuthS3
  1884.                     }), a
  1885.                 },
  1886.                 forwardGlobalEvents: function() {
  1887.                     var a = this;
  1888.                     a.settings.windowName || (a.listenTo(q, "window.resize", function() {
  1889.                         a.frame.sendMessage("window.resize")
  1890.                     }), a.listenTo(q, "window.click", function() {
  1891.                         a.frame.sendMessage("window.click")
  1892.                     }), a.listenTo(q, "window.mousemove", function() {
  1893.                         a.frame.sendMessage("window.mousemove")
  1894.                     }), a.listenTo(q, "error", function(b) {
  1895.                         a.on("frame:rendered", function() {
  1896.                             a.frame.sendMessage("error", b)
  1897.                         })
  1898.                     })), a.listenTo(q, "window.hashchange", function(b) {
  1899.                         a.frame.sendMessage("window.hashchange", b.hash)
  1900.                     })
  1901.                 },
  1902.                 bindPublisherCallbacks: function() {
  1903.                     var a = this,
  1904.                         b = a.settings,
  1905.                         c = A.LEGACY_EVENTS_MAPPING,
  1906.                         e = b.callbacks;
  1907.                     e && d(e, function(b, e) {
  1908.                         c[e] && d(b, function(b) {
  1909.                             a.on(c[e], b)
  1910.                         })
  1911.                     })
  1912.                 },
  1913.                 isContainerVisible: function() {
  1914.                     var a = this.getViewportCoords(),
  1915.                         b = o.getOffset(this.settings.container, this.getScrollContainer()),
  1916.                         c = b.top + b.height - a.top;
  1917.                     return c > 0 && c <= a.height
  1918.                 },
  1919.                 pollFullyVisible: function() {
  1920.                     var a = this;
  1921.                     if (!a.pollingFullVisibility) {
  1922.                         a.pollingFullVisibility = !0;
  1923.                         var b = a.isHeightRestricted(),
  1924.                             c = {};
  1925.                         j(function() {
  1926.                             return a.frame && a.frame.elem ? !(b && !a.rendered) && (i(a.frame.elem) && !a.isHeightRestricted({
  1927.                                 checkScrollHeight: !0
  1928.                             })) : c
  1929.                         }, function(b) {
  1930.                             b !== c && (a.fullyVisible = !0, a.trigger("fullyVisible"))
  1931.                         }, a.constructor.VISIBILITY_POLL_INTERVAL)
  1932.                     }
  1933.                 },
  1934.                 whenFullyVisible: function(a) {
  1935.                     this.pollFullyVisible(), this.fullyVisible ? a() : this.once("fullyVisible", a)
  1936.                 },
  1937.                 showSlowLoadingMessage: function() {
  1938.                     var a, b = this;
  1939.                     if (b.loadingElem) {
  1940.                         if (s.pageVisibility.isHidden()) return a = function() {
  1941.                             s.pageVisibility.stopListening(a), b.setSlowLoadingMessageTimer(2e3)
  1942.                         }, void s.pageVisibility.listen(a);
  1943.                         b.triggeredSlowEvent = !0, b.state === b.constructor.states.READY ? m.logStat("slow_embed.got_ready") : b.state === b.constructor.states.LOADED ? m.logStat("slow_embed.loaded") : m.logStat("slow_embed.no_ready"), b.loadingElem.firstChild.insertAdjacentHTML("afterend", '<p align="center">Disqus seems to be taking longer than usual. <a href="#" onclick="DISQUS.reset({reload: true}); return false;">Reload</a>?</p>')
  1944.                     }
  1945.                 },
  1946.                 clearSlowLoadingMessageTimer: function() {
  1947.                     this.timeout && (clearTimeout(this.timeout), this.timeout = null)
  1948.                 },
  1949.                 setSlowLoadingMessageTimer: function(a) {
  1950.                     var b = this;
  1951.                     b.clearSlowLoadingMessageTimer(), b.timeout = setTimeout(function() {
  1952.                         b.showSlowLoadingMessage()
  1953.                     }, a)
  1954.                 },
  1955.                 addLoadingAnimOnContainerVisible: function() {
  1956.                     var a, b = this;
  1957.                     a = b.listenToScrollEvent(function() {
  1958.                         var c = b.isContainerVisible();
  1959.                         (c || b.state >= b.constructor.states.RUNNING) && a(), c && b.addLoadingAnim()
  1960.                     })
  1961.                 },
  1962.                 addLoadingAnim: function() {
  1963.                     var a, b, d, e = this,
  1964.                         f = e.settings.container;
  1965.                     if (e.loadingElem) return e.loadingElem;
  1966.                     if (!(e.state >= e.constructor.states.RUNNING || this.settings.degraded)) {
  1967.                         a = c.createElement("div"), a.dir = "ltr", a.style.overflow = "hidden";
  1968.                         var g = "dark" === e.settings.colorScheme;
  1969.                         if (e.settings.forumDetails && e.settings.forumDetails.disableDisqusBranding) {
  1970.                             b = c.createElement("div"), a.appendChild(b);
  1971.                             var i = b.style;
  1972.                             h(i, v.getBubbleStyle(g)), f.appendChild(a)
  1973.                         } else {
  1974.                             d = c.createElement("svg"), a.appendChild(d);
  1975.                             var j = d.style;
  1976.                             h(j, v.getIconStyle(g)), f.appendChild(a)
  1977.                         }
  1978.                         return e.loadingElem = a, e.setSlowLoadingMessageTimer(15e3), m.logStat("lounge.loading.view"), e.loadingElem
  1979.                     }
  1980.                 },
  1981.                 removeLoadingAnim: function() {
  1982.                     var a = this.loadingElem,
  1983.                         b = this.settings.container;
  1984.                     this.clearSlowLoadingMessageTimer(), a && a.parentNode === b && (b.removeChild(a), this.loadingElem = null)
  1985.                 },
  1986.                 destroy: function() {
  1987.                     var a = this.indicators;
  1988.                     this.removeLoadingAnim(), a && a.north && (a.north.destroy(), a.north = null), a && a.south && (a.south.destroy(), a.south = null), p.prototype.destroy.call(this)
  1989.                 }
  1990.             }, {
  1991.                 LEGACY_EVENTS_MAPPING: {
  1992.                     onReady: "frame:rendered",
  1993.                     onNewComment: "posts.create",
  1994.                     onPaginate: "posts.paginate",
  1995.                     onCommentCountChange: "posts.count",
  1996.                     onIdentify: "session.identify"
  1997.                 },
  1998.                 VISIBILITY_POLL_INTERVAL: 500
  1999.             }),
  2000.             B = function(a) {
  2001.                 return new A(a)
  2002.             };
  2003.         return {
  2004.             Lounge: B
  2005.         }
  2006.     }({}), P = function(a, b, c) {
  2007.         var d, e, f, g, h, i = function() {
  2008.             var j = (new Date).getTime() - g;
  2009.             j < b && j >= 0 ? d = setTimeout(i, b - j) : (d = null, c || (h = a.apply(f, e), d || (f = e = null)))
  2010.         };
  2011.         return function() {
  2012.             f = this, e = arguments, g = (new Date).getTime();
  2013.             var j = c && !d;
  2014.             return d || (d = setTimeout(i, b)), j && (h = a.apply(f, e), f = e = null), h
  2015.         }
  2016.     }, Q = function(a, b) {
  2017.         for (var c = 0; c < a.length; ++c)
  2018.             if (a[c] === b) return c;
  2019.         return -1
  2020.     }, R = function(a, b, c) {
  2021.         for (var d = 0; d < a.length; ++d)
  2022.             if (b.call(c, a[d], d, a)) return !0;
  2023.         return !1
  2024.     }, S = function(a) {
  2025.         return "[object Function]" === Object.prototype.toString.call(a)
  2026.     }, T = function(a) {
  2027.         return function(b, c, d) {
  2028.             var e = null === b || void 0 === b ? void 0 : b[c];
  2029.             return void 0 === e && (e = d), a(e) ? e.call(b) : e
  2030.         }
  2031.     }(S), U = function(a) {
  2032.         return Boolean(a && 1 === a.nodeType)
  2033.     }, ka = function(a, b, c) {
  2034.         return a.getElement = function(a) {
  2035.             return b(a) ? a : a && a.el
  2036.         }, a.EL_ID_ATTR = "data-visibility-id", a.OBJ_ID_PROP = "_visibility_id", a.getId = function(d) {
  2037.             var e = null;
  2038.             return b(d) ? (e = d.getAttribute(a.EL_ID_ATTR) || null, e || (e = c(), d.setAttribute(a.EL_ID_ATTR, e))) : d && (e = d[a.OBJ_ID_PROP] || null, e || (e = d[a.OBJ_ID_PROP] = c())), e
  2039.         }, a.visiblePercent = function(a, b) {
  2040.             var c = 0;
  2041.             if (!b) return c;
  2042.             var d = a.top,
  2043.                 e = d + a.height,
  2044.                 f = b.visibleTop < d,
  2045.                 g = b.visibleBottom > e;
  2046.             return !f && !g || f && g ? c = 1 : f ? c = (b.height - (d - b.visibleTop)) / b.height : g && (c = (e - b.visibleTop) / b.height), Math.round(100 * c)
  2047.         }, a
  2048.     }(ka, U, z), la = function(c, d, e, f, g, h) {
  2049.         return h.events = [], h.lastPos = null, h.clearCache = function(a) {
  2050.             if (a === b) h.getElementOffset.cache = {};
  2051.             else {
  2052.                 var c = g.getId(a);
  2053.                 c && (h.getElementOffset.cache[c] = null)
  2054.             }
  2055.         }, h.calculateOffset = function(b) {
  2056.             if (!b) return null;
  2057.             if (!e(b)) return null;
  2058.             var c = b.ownerDocument.documentElement;
  2059.             return {
  2060.                 height: b.offsetHeight,
  2061.                 top: b.getBoundingClientRect().top + a.pageYOffset - (c.clientTop || 0)
  2062.             }
  2063.         }, h._getElementOffset = function(a) {
  2064.             var b = g.getElement(a);
  2065.             if (!b) return null;
  2066.             var c = h.calculateOffset(b);
  2067.             return c ? {
  2068.                 visibleTop: c.top + (f(a, "topEdgeOffset") || 0),
  2069.                 visibleBottom: c.top + c.height - (f(a, "bottomEdgeOffset") || 0),
  2070.                 offsetTop: c.top,
  2071.                 height: c.height
  2072.             } : null
  2073.         }, h.getElementOffset = function() {
  2074.             var a = function(b) {
  2075.                 var c = a.cache,
  2076.                     d = g.getId(b);
  2077.                 if (d && c[d]) return c[d];
  2078.                 var e = h._getElementOffset(b);
  2079.                 return d && e && (c[d] = e), e
  2080.             };
  2081.             return a.cache = {}, a
  2082.         }(), h.EVENT_NAMES = ["enter", "exit", "visible", "invisible", "all"], h.updateTracking = function(a) {
  2083.             var e, f = function(a) {
  2084.                 return a ? function(b) {
  2085.                     return a[b]
  2086.                 } : function() {
  2087.                     return b
  2088.                 }
  2089.             };
  2090.             d(h.EVENT_NAMES, f(a._events)) ? (e = c(h.events, a), e === -1 && h.events.push(a)) : (e = c(h.events, a), e !== -1 && h.events.splice(e, 1))
  2091.         }, h.processEvents = function(a) {
  2092.             h.lastPos = a;
  2093.             var b = h.events;
  2094.             if (b.length)
  2095.                 for (var c = b.length - 1; c >= 0; --c) {
  2096.                     var d = b[c],
  2097.                         e = d.isVisible(a);
  2098.                     null !== e && (e !== d.lastVisible && d.trigger(e ? "enter" : "exit", d, a), d.trigger(e ? "visible" : "invisible", d, a), d.lastVisible = e)
  2099.                 }
  2100.         }, h
  2101.     }(Q, R, x, T, ka, la), V = function(b, c, d, e, f) {
  2102.         function g(a) {
  2103.             return this instanceof g ? (this.obj = a, void(this.lastVisible = !1)) : new g(a)
  2104.         }
  2105.         var h = c(function() {
  2106.             f.processEvents(f.lastPos)
  2107.         }, 250);
  2108.         return e(g.prototype, b, {
  2109.             on: function(a) {
  2110.                 var c = !(this._events && this._events[a]),
  2111.                     d = b.on.apply(this, arguments);
  2112.                 return c && f.updateTracking(this), h(), d
  2113.             },
  2114.             off: function(a) {
  2115.                 var c = b.off.apply(this, arguments);
  2116.                 return this._events && this._events[a] || f.updateTracking(this), c
  2117.             },
  2118.             offset: function() {
  2119.                 return f.getElementOffset(this.obj)
  2120.             },
  2121.             isVisible: function(a) {
  2122.                 if (a = a || f.lastPos, !a) return null;
  2123.                 var b = a.top,
  2124.                     c = b + a.height,
  2125.                     d = this.offset();
  2126.                 return !!d && (d.offsetTop >= b && d.visibleTop < c || d.offsetTop + d.height <= c && d.visibleBottom > b)
  2127.             },
  2128.             invalidate: function() {
  2129.                 return f.clearCache(this.obj), this
  2130.             }
  2131.         }), e(g, {
  2132.             invalidate: f.clearCache,
  2133.             scroll: f.processEvents,
  2134.             _windowScrollHandlerBound: !1,
  2135.             _ignoreCache: !1,
  2136.             _windowScrollHandler: d(function() {
  2137.                 g._ignoreCache && g.invalidate(), f.processEvents({
  2138.                     top: a.pageYOffset,
  2139.                     height: a.document.documentElement.clientHeight
  2140.                 })
  2141.             }, 250),
  2142.             bindWindowEvents: function(b) {
  2143.                 this._windowScrollHandlerBound || ("undefined" != typeof b && (g._ignoreCache = b), a.addEventListener("scroll", this._windowScrollHandler), a.addEventListener("resize", this._windowScrollHandler), this._windowScrollHandlerBound = !0, this._windowScrollHandler())
  2144.             },
  2145.             unbindWindowEvents: function() {
  2146.                 g._ignoreCache = !1, a.removeEventListener("scroll", this._windowScrollHandler), a.removeEventListener("resize", this._windowScrollHandler), this._windowScrollHandlerBound = !1
  2147.             }
  2148.         }), g
  2149.     }(A, P, I, k, la), W = function(a) {
  2150.         return a
  2151.     }(V), ma = function(a) {
  2152.         return a = function(a, b) {
  2153.             var c = null,
  2154.                 d = !1;
  2155.             this.start = function() {
  2156.                 d || (c = setTimeout(function() {
  2157.                     d = !0, a()
  2158.                 }, b))
  2159.             }, this.clear = function() {
  2160.                 clearTimeout(c)
  2161.             }
  2162.         }
  2163.     }(ma), X = function() {
  2164.         function a(a) {
  2165.             if (a = Number(a), isNaN(a) || a > 255) throw new Error("Color components should be numbers less than 256");
  2166.             return a = a.toString(16), 1 === a.length ? "0" + a : String(a)
  2167.         }
  2168.         return function(b) {
  2169.             return "#" + a(b.red) + a(b.green) + a(b.blue)
  2170.         }
  2171.     }(), Y = function() {
  2172.         var a = ["allow-forms", "allow-pointer-lock", "allow-popups", "allow-same-origin", "allow-scripts", "allow-top-navigation"],
  2173.             b = function(b) {
  2174.                 return b ? a.reduce(function(a, c) {
  2175.                     return b[c] && (a += c + " "), a
  2176.                 }, "").trim() : ""
  2177.             };
  2178.         return {
  2179.             getAttribute: b
  2180.         }
  2181.     }(), Z = function(b) {
  2182.         return function(c) {
  2183.             "undefined" == typeof c && (c = a.location.search);
  2184.             var d = {};
  2185.             return b(c.substr(1).split("&"), function(a) {
  2186.                 var b = a.split("=").map(function(a) {
  2187.                     return decodeURIComponent(a.replace(/\+/g, "%20"))
  2188.                 });
  2189.                 b[0] && (d[b[0]] = b[1])
  2190.             }), d
  2191.         }
  2192.     }(f), $ = function() {
  2193.         var b = {},
  2194.             c = a.document.createElement("a");
  2195.         return b.getOrigin = function(a) {
  2196.             c.href = a;
  2197.             var b = c.href.split("/");
  2198.             return b[0] + "//" + b[2]
  2199.         }, b.getHostName = function(a) {
  2200.             return c.href = a, c.hostname
  2201.         }, b.getDomainPart = function(a, c) {
  2202.             "undefined" == typeof c && (c = 0);
  2203.             var d = b.getHostName(a),
  2204.                 e = d.split(".").reverse();
  2205.             return e[c]
  2206.         }, b.getQuery = function(a) {
  2207.             return c.href = a, c.search
  2208.         }, b.getPathname = function(a) {
  2209.             return c.href = a, c.pathname
  2210.         }, b
  2211.     }(), _ = function() {
  2212.         var a = function(a) {
  2213.                 return null !== a && !isNaN(Number(a)) && isFinite(a)
  2214.             },
  2215.             b = function(a) {
  2216.                 return Math.min.apply(Math, c(a)) || 0
  2217.             },
  2218.             d = function(a) {
  2219.                 return Math.max.apply(Math, c(a)) || 0
  2220.             };
  2221.         return {
  2222.             min: b,
  2223.             max: d,
  2224.             isNumeric: a
  2225.         }
  2226.     }();
  2227.     var oa = function() {
  2228.         function a(a, b) {
  2229.             for (var c = 0; c < b.length; c++) {
  2230.                 var d = b[c];
  2231.                 d.enumerable = d.enumerable || !1, d.configurable = !0, "value" in d && (d.writable = !0), Object.defineProperty(a, d.key, d)
  2232.             }
  2233.         }
  2234.         return function(b, c, d) {
  2235.             return c && a(b.prototype, c), d && a(b, d), b
  2236.         }
  2237.     }();
  2238.     aa = function(a) {
  2239.         var b = function() {
  2240.             function b() {
  2241.                 return d(this, b), 1 !== arguments.length || a.isNumeric(arguments[0]) ? void this.fromArray(arguments) : Array.isArray(arguments[0]) ? this.fromArray(arguments[0]) : this.fromObject(arguments[0])
  2242.             }
  2243.             return oa(b, [{
  2244.                 key: "fromArray",
  2245.                 value: function(a) {
  2246.                     this.reset(), a.length >= 6 ? (this.top = a[0], this.right = a[1], this.bottom = a[2], this.left = a[3], this.width = a[4], this.height = a[5]) : a.length >= 4 ? (this.top = a[0], this.right = a[1], this.bottom = a[2], this.left = a[3]) : 3 === a.length ? (this.top = a[0], this.right = a[1], this.bottom = a[2], this.left = 0) : 2 === a.length ? (this.top = a[0], this.right = a[1], this.bottom = a[0], this.left = a[1]) : (this.top = a[0], this.right = a[0], this.bottom = a[0], this.left = a[0]), this.update()
  2247.                 }
  2248.             }, {
  2249.                 key: "fromObject",
  2250.                 value: function(a) {
  2251.                     return this.fromArray([a.top, a.right, a.bottom, a.left, a.width, a.height])
  2252.                 }
  2253.             }, {
  2254.                 key: "update",
  2255.                 value: function() {
  2256.                     this.width || (this.width = this.right - this.left), this.height || (this.height = this.bottom - this.top)
  2257.                 }
  2258.             }, {
  2259.                 key: "reset",
  2260.                 value: function(a) {
  2261.                     a = a || 0, this.top = a, this.right = a, this.bottom = a, this.left = a, this.width = a, this.height = a
  2262.                 }
  2263.             }, {
  2264.                 key: "getArea",
  2265.                 value: function() {
  2266.                     return (this.right - this.left) * (this.bottom - this.top)
  2267.                 }
  2268.             }]), b
  2269.         }();
  2270.         return b.getOverlapRect = function(c, d) {
  2271.             var e = a.max([c.left, d.left]),
  2272.                 f = a.min([c.left + c.width, d.left + d.width]),
  2273.                 g = a.max([c.top, d.top]),
  2274.                 h = a.min([c.top + c.height, d.top + d.height]);
  2275.             return f >= e && h >= g && new b(g, f, h, e, f - e, h - g)
  2276.         }, b.getOverlapArea = function(b, c) {
  2277.             var d = a.max([0, a.min([b.right, c.right]) - a.max([b.left, c.left])]),
  2278.                 e = a.max([0, a.min([b.bottom, c.bottom]) - a.max([b.top, c.top])]);
  2279.             return d * e
  2280.         }, b
  2281.     }(_), ba = function(b) {
  2282.         var c = 9,
  2283.             d = function(a) {
  2284.                 return a && a.parentNode
  2285.             },
  2286.             e = function(b, c) {
  2287.                 if (!b) return null;
  2288.                 var d = a.document.defaultView.getComputedStyle(b);
  2289.                 return c && d.hasOwnProperty(c) ? d[c] : d
  2290.             },
  2291.             f = function() {
  2292.                 return {
  2293.                     x: a.pageXOffset,
  2294.                     y: a.pageYOffset
  2295.                 }
  2296.             },
  2297.             g = function(a) {
  2298.                 var c = void 0;
  2299.                 if (a && a.style) {
  2300.                     var d = a.style.display;
  2301.                     a.style.display = "block", c = a.getBoundingClientRect(), a.style.display = d, c = new b(c);
  2302.                     var e = f();
  2303.                     c.left += e.x, c.right += e.x, c.top += e.y, c.bottom += e.y
  2304.                 } else c = new b(0);
  2305.                 return c
  2306.             },
  2307.             h = function(a, b) {
  2308.                 var c = g(a);
  2309.                 if (b) {
  2310.                     var d = g(b);
  2311.                     c.top = d.top - d.top + b.scrollTop, c.bottom = c.top + c.height + b.scrollTop, c.left = c.left - d.left + b.scrollLeft, c.right = c.left + c.width + b.scrollLeft
  2312.                 }
  2313.                 return c
  2314.             },
  2315.             i = function() {
  2316.                 var c = f(),
  2317.                     d = c.y,
  2318.                     e = c.x + a.innerWidth,
  2319.                     g = c.y + a.innerHeight,
  2320.                     h = c.x,
  2321.                     i = a.innerWidth,
  2322.                     j = a.innerHeight;
  2323.                 return new b(d, e, g, h, i, j)
  2324.             },
  2325.             j = function(a) {
  2326.                 try {
  2327.                     return a.nodeType === c ? a : a.ownerDocument
  2328.                 } catch (b) {
  2329.                     return null
  2330.                 }
  2331.             },
  2332.             k = function(b) {
  2333.                 var c = j(b),
  2334.                     d = void 0;
  2335.                 try {
  2336.                     c && (d = c.parentWindow || c.defaultView || a)
  2337.                 } catch (e) {
  2338.                     d = a
  2339.                 }
  2340.                 return d
  2341.             },
  2342.             l = function(a) {
  2343.                 var c = k(a),
  2344.                     d = new b(0, c.innerWidth, c.innerHeight, 0, c.innerWidth, c.innerHeight),
  2345.                     e = f();
  2346.                 return d.left += e.x, d.right += e.x, d.top += e.y, d.bottom += e.y, d
  2347.             },
  2348.             m = function(a) {
  2349.                 var b = j(a);
  2350.                 if (b) return b.documentElement || b.body
  2351.             },
  2352.             n = function(a) {
  2353.                 var c = m(a) || {},
  2354.                     d = new b;
  2355.                 return d.right = d.width = c.scrollWidth || 0, d.bottom = d.height = c.scrollHeight || 0, d
  2356.             },
  2357.             o = function(a, b) {
  2358.                 for (; b;) {
  2359.                     if (b === a) return !0;
  2360.                     b = b.parentNode
  2361.                 }
  2362.                 return !1
  2363.             },
  2364.             p = function(a) {
  2365.                 var b = e(a);
  2366.                 return "inline-block" === b.display || "none" !== b["float"] || "absolute" === b.position || "fixed" === b.position || "auto" !== b.width || "auto" !== b.height
  2367.             },
  2368.             q = function(a) {
  2369.                 var b = e(a),
  2370.                     c = {};
  2371.                 return "scroll" === b.overflowX || "auto" === b.overflowX ? c.xscroll = a.offsetWidth - a.clientWidth : c.xscroll = 0, "scroll" === b.overflowY || "auto" === b.overflowY ? c.yscroll = a.offsetHeight - a.clientHeight : c.yscroll = 0, c.xhidden = "hidden" === b.overflowX, c.yhidden = "hidden" === b.overflowY, c
  2372.             },
  2373.             r = function(a) {
  2374.                 var b = e(a);
  2375.                 return !!(b.clip && "auto" !== b.clip || b.clipPath && "none" !== b.clipPath)
  2376.             };
  2377.         return {
  2378.             getParentNode: d,
  2379.             getWindow: k,
  2380.             getScroll: f,
  2381.             getRect: g,
  2382.             getRectRelativeTo: h,
  2383.             getViewportRect: i,
  2384.             getDocument: j,
  2385.             getWindowRect: l,
  2386.             getRootNode: m,
  2387.             getRootRect: n,
  2388.             getNodeStyle: e,
  2389.             isParentOf: o,
  2390.             hasLayout: p,
  2391.             getNodeOverflow: q,
  2392.             isNodeClipped: r
  2393.         }
  2394.     }(aa);
  2395.     var oa = function() {
  2396.         function a(a, b) {
  2397.             for (var c = 0; c < b.length; c++) {
  2398.                 var d = b[c];
  2399.                 d.enumerable = d.enumerable || !1, d.configurable = !0, "value" in d && (d.writable = !0), Object.defineProperty(a, d.key, d)
  2400.             }
  2401.         }
  2402.         return function(b, c, d) {
  2403.             return c && a(b.prototype, c), d && a(b, d), b
  2404.         }
  2405.     }();
  2406.     ca = function(b, c) {
  2407.         var e = 1,
  2408.             f = function() {
  2409.                 function f(a) {
  2410.                     d(this, f), this.node = a, this.document = b.getDocument(a), this.window = b.getWindow(a), this.root = b.getRootNode(a), this.ref = this.getRefNode(a.parentNode)
  2411.                 }
  2412.                 return oa(f, [{
  2413.                     key: "getRefNode",
  2414.                     value: function(a) {
  2415.                         for (; a && a.nodeType === e;) {
  2416.                             var c = b.getNodeStyle(a);
  2417.                             if (b.hasLayout(a) || "block" === c.display || "none" !== c.clear) {
  2418.                                 var d = b.getNodeOverflow(a);
  2419.                                 if (d.xscroll || d.yscroll || d.xhidden || d.yhidden) return a;
  2420.                                 if (b.isNodeClipped(a)) return a
  2421.                             }
  2422.                             a = a.parentNode
  2423.                         }
  2424.                         return this.root
  2425.                     }
  2426.                 }, {
  2427.                     key: "getNodesOver",
  2428.                     value: function(d, f) {
  2429.                         f = f || 1;
  2430.                         var g = [],
  2431.                             h = b.getRect(d),
  2432.                             i = b.getRect(this.ref),
  2433.                             j = b.getViewportRect(d);
  2434.                         if (!a.document.elementFromPoint) return g;
  2435.                         for (var k = {
  2436.                                 top: c.max([h.top, i.top]) - j.top,
  2437.                                 right: c.min([h.right, i.right]) - j.left,
  2438.                                 bottom: c.min([h.bottom, i.bottom]) - j.top,
  2439.                                 left: c.max([h.left, i.left]) - j.left
  2440.                             }, l = (k.right - k.left) / 10, m = (k.bottom - k.top) / 10, n = k.left; n < k.right; n += l)
  2441.                             for (var o = k.top; o < k.bottom; o += m) {
  2442.                                 for (var p = a.document.elementFromPoint(n, o); p && p.nodeType === e;) {
  2443.                                     var q = b.getNodeStyle(p);
  2444.                                     if (b.hasLayout(p) || "block" === q.display || "none" !== q.clear) break;
  2445.                                     p = p.parentNode
  2446.                                 }
  2447.                                 p && p.nodeType === e && p !== this.node && p !== this.root && !b.isParentOf(p, this.node) && (g.push(p), g.length >= f && (n = k.right, o = k.bottom))
  2448.                             }
  2449.                         return g
  2450.                     }
  2451.                 }, {
  2452.                     key: "getWindowGeom",
  2453.                     value: function() {
  2454.                         var a = this.window.innerHeight || 0,
  2455.                             b = this.window.innerWidth || 0,
  2456.                             c = this.window.screenY || this.window.screenTop || 0,
  2457.                             d = c + a,
  2458.                             e = this.window.screenX || this.window.screenLeft || 0,
  2459.                             f = e + b;
  2460.                         return {
  2461.                             t: c,
  2462.                             r: f,
  2463.                             b: d,
  2464.                             l: e,
  2465.                             w: b,
  2466.                             h: a
  2467.                         }
  2468.                     }
  2469.                 }, {
  2470.                     key: "getSelfGeom",
  2471.                     value: function() {
  2472.                         var a = b.getRect(this.node),
  2473.                             d = b.getRect(this.ref),
  2474.                             e = b.getNodeStyle(this.node),
  2475.                             f = b.getWindowRect(this.node),
  2476.                             g = a.width,
  2477.                             h = a.height;
  2478.                         this.ref !== this.root && (g = c.max([0, c.min([a.right, d.right]) - c.max([a.left, d.left])]), h = c.max([0, c.min([a.bottom, d.bottom]) - c.max([a.top, d.top])]));
  2479.                         var i = c.max([0, c.min(a.right, f.right) - c.max([a.left, f.left])]),
  2480.                             j = c.max([0, c.min([a.bottom, f.bottom]) - c.max([a.top, f.top])]),
  2481.                             k = c.min([g, i]),
  2482.                             l = c.min([h, j]),
  2483.                             m = a.width ? k / a.width : 0,
  2484.                             n = a.height ? l / a.height : 0,
  2485.                             o = k * l / (a.width * a.height),
  2486.                             p = 1,
  2487.                             q = this.getNodesOver(this.node, p);
  2488.                         if (q.length) {
  2489.                             var r = b.getRect(q[0]),
  2490.                                 s = c.max([0, c.min([r.right, a.right]) - c.max([r.left, a.left])]),
  2491.                                 t = c.max([0, c.min([r.bottom, a.bottom]) - c.max([r.top, a.top])]);
  2492.                             o = c.max([0, (k * l - s * t) / (a.width * a.height)])
  2493.                         }
  2494.                         var u = b.getScroll();
  2495.                         return {
  2496.                             t: a.top - u.y,
  2497.                             r: a.right - u.x,
  2498.                             b: a.bottom - u.y,
  2499.                             l: a.left - u.x,
  2500.                             z: e.zIndex,
  2501.                             w: a.width,
  2502.                             h: a.height,
  2503.                             xiv: 1 === m ? "1" : Number(m).toFixed(2),
  2504.                             yiv: 1 === n ? "1" : Number(n).toFixed(2),
  2505.                             iv: 1 === o ? "1" : Number(o).toFixed(2)
  2506.                         }
  2507.                     }
  2508.                 }, {
  2509.                     key: "getExpandGeom",
  2510.                     value: function() {
  2511.                         var a = b.getRect(this.ref),
  2512.                             d = b.getRect(this.node),
  2513.                             e = b.getWindowRect(this.node),
  2514.                             f = {
  2515.                                 top: c.max([a.top, e.top]),
  2516.                                 right: c.min([a.right, e.right]),
  2517.                                 bottom: c.min([a.bottom, e.bottom]),
  2518.                                 left: c.max([a.left, e.left])
  2519.                             },
  2520.                             g = b.getNodeOverflow(this.ref);
  2521.                         return {
  2522.                             t: c.max([0, d.top - f.top]),
  2523.                             r: c.max([0, f.right - d.right]),
  2524.                             b: c.max([0, f.bottom - d.bottom]),
  2525.                             l: c.max([0, d.left - f.left]),
  2526.                             xs: Boolean(g.yscroll),
  2527.                             yx: Boolean(g.xscroll)
  2528.                         }
  2529.                     }
  2530.                 }, {
  2531.                     key: "getGeom",
  2532.                     value: function() {
  2533.                         return {
  2534.                             win: this.getWindowGeom(),
  2535.                             self: this.getSelfGeom(),
  2536.                             exp: this.getExpandGeom()
  2537.                         }
  2538.                     }
  2539.                 }]), f
  2540.             }(),
  2541.             g = {
  2542.                 get: function(a) {
  2543.                     var b = new f(a);
  2544.                     return b.getGeom()
  2545.                 }
  2546.             };
  2547.         return g
  2548.     }(ba, _), da = function(c) {
  2549.         var d = G,
  2550.             e = J,
  2551.             f = B,
  2552.             g = V,
  2553.             h = ka,
  2554.             i = C,
  2555.             j = ma,
  2556.             m = X,
  2557.             n = k,
  2558.             o = Y,
  2559.             p = Z,
  2560.             q = ga,
  2561.             r = $.getOrigin,
  2562.             s = $.getQuery,
  2563.             t = l,
  2564.             u = ca,
  2565.             v = e.extend({
  2566.                 name: "ads",
  2567.                 origin: b,
  2568.                 onceEvents: {
  2569.                     "view:enter": function() {
  2570.                         this._reportLegacy({
  2571.                             verb: "view",
  2572.                             adverb: "0ms-no50perc"
  2573.                         })
  2574.                     },
  2575.                     "view:iab": function() {
  2576.                         this._reportLegacy({
  2577.                             verb: "view",
  2578.                             adverb: "iab-scroll"
  2579.                         })
  2580.                     }
  2581.                 },
  2582.                 events: {
  2583.                     "frame:ready": function(a) {
  2584.                         this.forumId = a.forumId, this._reportLegacy({
  2585.                             verb: "load",
  2586.                             extra_data: a.extraData,
  2587.                             advertisement_id: a.advertisement_id,
  2588.                             provider: a.provider
  2589.                         }), this.bindViewEvents(), this.triggerGeomUpdate()
  2590.                     },
  2591.                     "frame:resize": function(a) {
  2592.                         this.frame.setInlineStyle("height", a.height + "px"), 0 === a.height ? this.trigger("ad-placement-empty") : this.trigger("ad-placement-filled"), this.triggerGeomUpdate()
  2593.                     },
  2594.                     "frame:click": function() {
  2595.                         this._reportOnce({
  2596.                             verb: "click"
  2597.                         }, "click")
  2598.                     },
  2599.                     "frame:hover": function() {
  2600.                         this._reportOnce({
  2601.                             verb: "hover"
  2602.                         }, "hover")
  2603.                     },
  2604.                     "frame:error-provider-not-ready": function(a) {
  2605.                         this._reportLegacy({
  2606.                             verb: "fail",
  2607.                             object_type: "provider",
  2608.                             object_id: a.provider || this.getProvider(),
  2609.                             adverb: "provider_not_ready"
  2610.                         })
  2611.                     },
  2612.                     "frame:error-no-height": function(a) {
  2613.                         this._reportLegacy({
  2614.                             verb: "fail",
  2615.                             object_type: "provider",
  2616.                             object_id: a.provider || this.getProvider(),
  2617.                             adverb: "no_height"
  2618.                         })
  2619.                     },
  2620.                     "frame:clearSandbox": function() {
  2621.                         this.frame.elem.hasAttribute("sandbox") && this.frame.elem.removeAttribute("sandbox")
  2622.                     },
  2623.                     "frame:redirect": function(a) {
  2624.                         this.settings.isOnHostPage && (this.frame.elem.src = a)
  2625.                     },
  2626.                     "frame:logAd": function(a) {
  2627.                         this._report(a, {
  2628.                             usePOST: !0
  2629.                         })
  2630.                     },
  2631.                     "frame:$sf-init": function() {
  2632.                         this.settings.isOnHostPage && (this.isSafeframe = !0)
  2633.                     },
  2634.                     "frame:error": function(a) {
  2635.                         this.settings.isOnHostPage && this.postMessageDirect({
  2636.                             event: "error",
  2637.                             data: {
  2638.                                 error: a
  2639.                             }
  2640.                         })
  2641.                     }
  2642.                 },
  2643.                 constructor: function() {
  2644.                     e.apply(this, arguments), this.origin = r(this.settings.adUrl), this._reportOnceHistory = {}, this.settings.isOnHostPage && (this.detectLazyload = this.detectLazyload.bind(this), a.addEventListener("scroll", this.detectLazyload))
  2645.                 },
  2646.                 init: function() {
  2647.                     if (this.settings.forum = p(s(this.settings.adUrl)).shortname, this.settings.forum) {
  2648.                         var b = this.settings.disableAds,
  2649.                             c = this.settings.isInHome || this.settings.isOnHostPage && 0 === a.location.href.indexOf(d.apps.home);
  2650.                         if (!c && b && this.settings.canDisableAds) return void this.trigger("prevented-ad-load");
  2651.                         this._reportOnce({
  2652.                             verb: "call",
  2653.                             object_type: "provider",
  2654.                             object_id: this.getProvider(),
  2655.                             adjective: 1
  2656.                         }, "call"), this.settings.sandboxAds && (this.sandbox = o.getAttribute({
  2657.                             "allow-scripts": !0,
  2658.                             "allow-same-origin": !0,
  2659.                             "allow-forms": !0,
  2660.                             "allow-popups": !0
  2661.                         })), e.prototype.init.call(this)
  2662.                     }
  2663.                 },
  2664.                 detectLazyload: function() {
  2665.                     if (this.frame && this.settings.isOnHostPage) {
  2666.                         var b = this.frame.elem.getBoundingClientRect().top,
  2667.                             c = b - a.innerHeight,
  2668.                             d = a.innerHeight * this.settings.lazyloadViewports;
  2669.                         c < d && (this.postMessageDirect({
  2670.                             event: "lazyload"
  2671.                         }), a.removeEventListener("scroll", this.detectLazyload))
  2672.                     }
  2673.                 },
  2674.                 getProvider: function() {
  2675.                     if (this._provider) return this._provider;
  2676.                     var a = this.settings.adUrl.match(/provider=(\w+)/);
  2677.                     return a && (this._provider = a[1]), this._provider
  2678.                 },
  2679.                 getUrl: function() {
  2680.                     var b = this.settings;
  2681.                     return q(b.adUrl, {
  2682.                         anchorColor: m(b.anchorColor),
  2683.                         colorScheme: b.colorScheme,
  2684.                         sourceUrl: b.url || b.referrer || a.document.location.href,
  2685.                         typeface: b.typeface,
  2686.                         canonicalUrl: b.canonicalUrl,
  2687.                         disqus_version: b.version
  2688.                     })
  2689.                 },
  2690.                 triggerGeomUpdate: function() {
  2691.                     if (this.frame.elem && this.isSafeframe && this.settings.isOnHostPage) {
  2692.                         var a = u.get(this.frame.elem);
  2693.                         this.postMessageDirect({
  2694.                             event: "geom-update",
  2695.                             data: {
  2696.                                 geom: a
  2697.                             }
  2698.                         })
  2699.                     }
  2700.                 },
  2701.                 bindViewEvents: function() {
  2702.                     if (!this._viewEventsBound) {
  2703.                         this._viewEventsBound = !0, g.bindWindowEvents(!0);
  2704.                         var a = this,
  2705.                             b = function(b, c) {
  2706.                                 a.postMessageDirect({
  2707.                                     event: b,
  2708.                                     percentViewable: c
  2709.                                 })
  2710.                             },
  2711.                             c = 1e3,
  2712.                             d = new j(function() {
  2713.                                 a.trigger("view:iab"), b("view:iab")
  2714.                             }, c),
  2715.                             e = !1;
  2716.                         this.listenTo(g({
  2717.                             el: this.frame.elem
  2718.                         }), {
  2719.                             enter: function() {
  2720.                                 a.trigger("view:enter"), b("view:enter"), a.triggerGeomUpdate()
  2721.                             },
  2722.                             exit: function() {
  2723.                                 b("view:exit"), e && (e = !1, b("view:50out"), d.clear()), a.triggerGeomUpdate()
  2724.                             },
  2725.                             visible: function(c, f) {
  2726.                                 var g = h.visiblePercent(f, c.offset()),
  2727.                                     i = 50;
  2728.                                 g >= i && !e ? (e = !0, b("view:50in"), d.start()) : g < i && e && (e = !1, b("view:50out"), d.clear()), b("view", g), a.triggerGeomUpdate()
  2729.                             }
  2730.                         })
  2731.                     }
  2732.                 },
  2733.                 postMessageDirect: function(a) {
  2734.                     this.frame.requiresWindow(function(a) {
  2735.                         var b = f.stringify(n({}, a, {
  2736.                             space: "disqus"
  2737.                         }));
  2738.                         i.postMessage(this.window, b, this.origin), i.postMessage(this.window, "disqus." + a.event, this.origin)
  2739.                     })(a)
  2740.                 },
  2741.                 _report: function(c) {
  2742.                     var d = arguments.length > 1 && arguments[1] !== b ? arguments[1] : {},
  2743.                         e = this.settings,
  2744.                         f = d.provider || this.getProvider();
  2745.                     c.forum_id = e.forumId || this.forumId;
  2746.                     var g = d.usePOST ? "reportJesterPOST" : "reportJester";
  2747.                     t[g](n({
  2748.                         imp: e.impressionId,
  2749.                         experiment: e.experiment.experiment,
  2750.                         variant: e.experiment.variant,
  2751.                         service: e.experiment.service,
  2752.                         area: e.placement,
  2753.                         product: "embed",
  2754.                         forum: e.forum,
  2755.                         zone: "thread",
  2756.                         version: e.loaderVersion,
  2757.                         page_url: e.referrer || a.document.location.href,
  2758.                         page_referrer: e.hostReferrer || a.document.referrer,
  2759.                         object_type: "advertisement",
  2760.                         provider: f,
  2761.                         event: "activity"
  2762.                     }, c))
  2763.                 },
  2764.                 _reportLegacy: function(a) {
  2765.                     var b = this.settings;
  2766.                     this._report(n({
  2767.                         ad_product_name: "iab_display",
  2768.                         ad_product_layout: "iab_display",
  2769.                         bin: "embed:promoted_discovery:" + b.experiment.service + ":" + b.experiment.experiment + ":" + b.experiment.variant,
  2770.                         object_id: a.advertisement_id ? "[" + a.advertisement_id + "]" : "",
  2771.                         section: "default"
  2772.                     }, a))
  2773.                 },
  2774.                 _reportOnce: function(a, b) {
  2775.                     this._reportOnceHistory[b] || (this._reportLegacy(a), this._reportOnceHistory[b] = !0)
  2776.                 },
  2777.                 getFrameSettings: function() {
  2778.                     var a = e.prototype.getFrameSettings.call(this);
  2779.                     return a.insertBeforeEl = this.settings.insertBeforeEl, a.insertAfterEl = this.settings.insertAfterEl, a
  2780.                 }
  2781.             }),
  2782.             w = function(a) {
  2783.                 return a = a || {}, a.experiment || (a.experiment = {
  2784.                     experiment: a.experimentName,
  2785.                     variant: a.experimentVariant,
  2786.                     service: a.experimentService
  2787.                 }), new v(a)
  2788.             };
  2789.         return {
  2790.             Ads: w
  2791.         }
  2792.     }({}), na = function(c) {
  2793.         var d = a.document,
  2794.             f = g,
  2795.             m = h,
  2796.             n = i,
  2797.             o = j,
  2798.             p = k,
  2799.             q = e,
  2800.             r = ga,
  2801.             s = l,
  2802.             t = v.HostConfig,
  2803.             u = w,
  2804.             x = O,
  2805.             y = da,
  2806.             z = new t(a);
  2807.         c.configAdapter = z;
  2808.         var A = [],
  2809.             B = function(a) {
  2810.                 return a.lastResizedHeight === b ? parseInt(a.frame && a.frame.elem && a.frame.elem.style.height || 0, 10) : a.lastResizedHeight
  2811.             },
  2812.             C = function(a) {
  2813.                 return parseInt(a.style.height || 0, 10)
  2814.             },
  2815.             D = !1,
  2816.             E = null,
  2817.             F = !1,
  2818.             G = 12,
  2819.             H = n(a),
  2820.             I = o(a),
  2821.             J = c.removeDisqusLink = function() {
  2822.                 if (d.getElementsByClassName) {
  2823.                     if ("complete" !== d.readyState) return a.addEventListener("load", J);
  2824.                     var b = d.getElementsByClassName("dsq-brlink"),
  2825.                         c = b && b.length && b[0];
  2826.                     c && c.parentNode.removeChild(c)
  2827.                 }
  2828.             };
  2829.         c.VERSION = "2c6d467", c.loadEmbed = function(a) {
  2830.             if (A.length) return M({
  2831.                 reload: !0
  2832.             }), u.log("Use DISQUS.reset instead of reloading embed.js please."), void u.log("See https://help.disqus.com/customer/portal/articles/472107-using-disqus-on-ajax-sites");
  2833.             z.configurator = a;
  2834.             var b = z.toJSON();
  2835.             b.version = c.VERSION, b.loaderVersion = s.getLoaderVersionFromUrl("https://c.disquscdn.com/next/embed/lounge.load.46aa6ce1907927200257678d09dec282.js"), D || (b.container.innerHTML = "", D = !0), c.loadApps(b), c.removeDisqusLink()
  2836.         };
  2837.         var K = function() {
  2838.                 for (var a; a = A.pop();) a.triggeredSlowEvent && a.state !== a.constructor.states.RUNNING && s.logStat("reset_embed.slow"), a.destroy()
  2839.             },
  2840.             L = function(b) {
  2841.                 K();
  2842.                 var c = x.Lounge(p({}, b, {
  2843.                     isHostIframed: H
  2844.                 }));
  2845.                 A.push(c), c.init();
  2846.                 var d = function(a) {
  2847.                         c.whenFullyVisible(a)
  2848.                     },
  2849.                     e = function(a, c) {
  2850.                         return b.adBlockEnabled && b.defaultPlacementUrl && (a = r(b.defaultPlacementUrl, {
  2851.                             position: c
  2852.                         })), a
  2853.                     },
  2854.                     f = null;
  2855.                 b.topPlacementUrl && (b.topPlacementUrl = e(b.topPlacementUrl, "top"), f = y.Ads(p({
  2856.                     adUrl: b.topPlacementUrl,
  2857.                     placement: "top",
  2858.                     isOnHostPage: !0
  2859.                 }, b, {
  2860.                     insertBeforeEl: c.frame.elem
  2861.                 })), A.push(f), d(function() {
  2862.                     f.init()
  2863.                 }));
  2864.                 var g = null;
  2865.                 if (b.bottomPlacementUrl && (b.bottomPlacementUrl = e(b.bottomPlacementUrl, "bottom"), g = y.Ads(p({
  2866.                         adUrl: b.bottomPlacementUrl,
  2867.                         placement: "bottom",
  2868.                         isOnHostPage: !0
  2869.                     }, b, {
  2870.                         insertAfterEl: c.frame.elem
  2871.                     })), A.push(g), d(function() {
  2872.                         null === f ? g.init() : g.listenToOnce(f, "frame:ready", function() {
  2873.                             g.init()
  2874.                         })
  2875.                     })), H) {
  2876.                     var h = function() {
  2877.                         var a = I ? function(a, b) {
  2878.                             return C(b) + a
  2879.                         } : function(a, b) {
  2880.                             return Math.max(C(b), a)
  2881.                         };
  2882.                         return G + Array.prototype.reduce.call(E.children, a, 0)
  2883.                     };
  2884.                     c.on("frame:resize", function(b) {
  2885.                         var c = b.height || B(this);
  2886.                         f && (c += B(f)), g && (c += B(g)), E && (c += h()), a.postMessage(JSON.stringify({
  2887.                             scope: "host",
  2888.                             sender: "dsq-app-embed",
  2889.                             name: "resize",
  2890.                             data: {
  2891.                                 height: c
  2892.                             }
  2893.                         }), "*")
  2894.                     }), f && c.listenTo(f, "frame:resize", function(b) {
  2895.                         var c = B(this) + (b.height || B(f));
  2896.                         g && (c += B(g)), E && (c += h()), a.postMessage(JSON.stringify({
  2897.                             scope: "host",
  2898.                             sender: "dsq-app-embed",
  2899.                             name: "resize",
  2900.                             data: {
  2901.                                 height: c
  2902.                             }
  2903.                         }), "*")
  2904.                     }), g && c.listenTo(g, "frame:resize", function(b) {
  2905.                         var c = B(this) + (b.height || B(g));
  2906.                         f && (c += B(f)), E && (c += h()), a.postMessage(JSON.stringify({
  2907.                             scope: "host",
  2908.                             sender: "dsq-app-embed",
  2909.                             name: "resize",
  2910.                             data: {
  2911.                                 height: c
  2912.                             }
  2913.                         }), "*")
  2914.                     })
  2915.                 }
  2916.             };
  2917.         c.loadRecommendations = function(b, c) {
  2918.             var e = b.container,
  2919.                 g = "disqus_recommendations";
  2920.             if (e && !d.getElementById(g)) {
  2921.                 E = d.createElement("div"), E.id = g, H && a.addEventListener("message", function(b) {
  2922.                     var c, d;
  2923.                     try {
  2924.                         c = JSON.parse(b.data)
  2925.                     } catch (e) {
  2926.                         return
  2927.                     }
  2928.                     var g = c.sender,
  2929.                         h = q(E.children, g) && E.children[g];
  2930.                     if (h && f.getHost(b.origin) === f.getHost(h.src) && ("resize" === c.name || "rendered" === c.name)) {
  2931.                         if (1 === E.children.length) d = G + (c.data.height || 0);
  2932.                         else {
  2933.                             var i = I ? function(a, b) {
  2934.                                 return b.id === g ? c.data.height + a : C(b) + a
  2935.                             } : function(a, b) {
  2936.                                 return b.id === g ? Math.max(c.data.height, a) : Math.max(C(b), a)
  2937.                             };
  2938.                             d = G + Array.prototype.reduce.call(E.children, i, 0)
  2939.                         }
  2940.                         d += A.reduce(function(a, b) {
  2941.                             return a + B(b)
  2942.                         }, 0), a.postMessage(JSON.stringify({
  2943.                             scope: "host",
  2944.                             sender: "dsq-app-embed",
  2945.                             name: "resize",
  2946.                             data: {
  2947.                                 height: d
  2948.                             }
  2949.                         }), "*")
  2950.                     }
  2951.                 });
  2952.                 var h = e.parentNode;
  2953.                 if (h && "top" === c) E.style.cssText = "margin-bottom: " + G + "px", h.insertBefore(E, e);
  2954.                 else {
  2955.                     if (!h || "bottom" !== c) return;
  2956.                     E.style.cssText = "margin-top: " + G + "px", h.insertBefore(E, e.nextSibling)
  2957.                 }
  2958.                 var i = d.createElement("script");
  2959.                 i.async = !0, i.id = "dsq_recs_scr", i.src = "https://" + b.forum + ".disqus.com/recommendations.js", (d.head || d.body).appendChild(i), F = !0
  2960.             }
  2961.         }, c.loadApps = function(a) {
  2962.             a.adBlockEnabled === b ? m(function(b) {
  2963.                 a.adBlockEnabled = b, L(a)
  2964.             }) : L(a);
  2965.             var d = a.forumDetails ? a.forumDetails.recommendationsPlacement : null;
  2966.             a.recsOutsideEmbedEnabled && !F && d && "standalone" !== d && c.loadRecommendations(a, d)
  2967.         };
  2968.         var M = c.reset = function(b) {
  2969.             b = b || {}, K(), b.reload && (F && a.DISQUS_RECOMMENDATIONS && a.DISQUS_RECOMMENDATIONS.reset(b), c.loadEmbed(b.config))
  2970.         };
  2971.         return c
  2972.     }(na), ea = function(b) {
  2973.         var c = a.document,
  2974.             d = a.DISQUS || {},
  2975.             e = ha;
  2976.         d.reset || (d.reset = na.reset), d.request || (d.request = {}), d.request.get || (d.request.get = function(a, b, c) {
  2977.             e(a, b, c)
  2978.         }), d.host || (d.host = {}), d.host._loadEmbed || (d.host._loadEmbed = na.loadEmbed), a.DISQUS = d;
  2979.         var f = function(a, b) {
  2980.             var d = c.createElement("link");
  2981.             return d.rel = "prefetch", d.as = b || "script", d.pr = 1, d.href = a, c.head.appendChild(d), d
  2982.         };
  2983.         f("https://c.disquscdn.com/next/embed/styles/lounge.2a0be1cac62547aa91037395a06bf8b3.css", "style"), f("https://c.disquscdn.com/next/embed/common.bundle.d5bc59d0180bbc154286a8e417e4c4bc.js"), f("https://c.disquscdn.com/next/embed/lounge.bundle.7d72841d9245e018db276c51b9667402.js"), f("https://disqus.com/next/config.js")
  2984.     }({})
  2985. }(this), this.DISQUS.host._loadEmbed();
  2986.  
  2987.  
  2988. // https://atdt.disqus.com/embed.js

Replies to embed.js rss

Title Name Language When
NavView.js disqus.com text 2 Days ago.
Re: prebid.4.33.0-zeta-ssp.js disqus.com text 2 Months ago.
recommendations.js disqus.com text 5 Months ago.

Reply to "embed.js"

Here you can reply to the paste above