User:Iniquity/test.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
!function(e) {
var t = {};
function n(i) {
if (t[i]) return t[i].exports;
var o = t[i] = {
i: i,
l: !1,
exports: {}
};
return e[i].call(o.exports, o, o.exports, n), o.l = !0, o.exports;
}
n.m = e, n.c = t, n.d = function(e, t, i) {
n.o(e, t) || Object.defineProperty(e, t, {
enumerable: !0,
get: i
});
}, n.r = function(e) {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
value: "Module"
}), Object.defineProperty(e, "__esModule", {
value: !0
});
}, n.t = function(e, t) {
if (1 & t && (e = n(e)), 8 & t) return e;
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
var i = Object.create(null);
if (n.r(i), Object.defineProperty(i, "default", {
enumerable: !0,
value: e
}), 2 & t && "string" != typeof e) for (var o in e) n.d(i, o, function(t) {
return e[t];
}.bind(null, o));
return i;
}, n.n = function(e) {
var t = e && e.__esModule ? function() {
return e.default;
} : function() {
return e;
};
return n.d(t, "a", t), t;
}, n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t);
}, n.p = "", n(n.s = 34);
}([ function(e, t) {
e.exports = function(e, t) {
var n = t.get(e);
if (!n) throw new TypeError("attempted to get private field on non-instance");
return n.get ? n.get.call(e) : n.value;
};
}, function(e, t) {
function n(e, t, n, i, o, s, r) {
try {
var a = e[s](r), c = a.value;
} catch (e) {
return void n(e);
}
a.done ? t(c) : Promise.resolve(c).then(i, o);
}
e.exports = function(e) {
return function() {
var t = this, i = arguments;
return new Promise((function(o, s) {
var r = e.apply(t, i);
function a(e) {
n(r, o, s, a, c, "next", e);
}
function c(e) {
n(r, o, s, a, c, "throw", e);
}
a(void 0);
}));
};
};
}, function(e, t) {
e.exports = function(e, t, n) {
var i = t.get(e);
if (!i) throw new TypeError("attempted to set private field on non-instance");
if (i.set) i.set.call(e, n); else {
if (!i.writable) throw new TypeError("attempted to set read only private field");
i.value = n;
}
return n;
};
}, function(e, t, n) {
"use strict";
var i, o = function() {
return void 0 === i && (i = Boolean(window && document && document.all && !window.atob)),
i;
}, s = function() {
var e = {};
return function(t) {
if (void 0 === e[t]) {
var n = document.querySelector(t);
if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try {
n = n.contentDocument.head;
} catch (e) {
n = null;
}
e[t] = n;
}
return e[t];
};
}(), r = [];
function a(e) {
for (var t = -1, n = 0; n < r.length; n++) if (r[n].identifier === e) {
t = n;
break;
}
return t;
}
function c(e, t) {
for (var n = {}, i = [], o = 0; o < e.length; o++) {
var s = e[o], c = t.base ? s[0] + t.base : s[0], u = n[c] || 0, l = "".concat(c, " ").concat(u);
n[c] = u + 1;
var d = a(l), h = {
css: s[1],
media: s[2],
sourceMap: s[3]
};
-1 !== d ? (r[d].references++, r[d].updater(h)) : r.push({
identifier: l,
updater: f(h, t),
references: 1
}), i.push(l);
}
return i;
}
function u(e) {
var t = document.createElement("style"), i = e.attributes || {};
if (void 0 === i.nonce) {
var o = n.nc;
o && (i.nonce = o);
}
if (Object.keys(i).forEach((function(e) {
t.setAttribute(e, i[e]);
})), "function" == typeof e.insert) e.insert(t); else {
var r = s(e.insert || "head");
if (!r) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
r.appendChild(t);
}
return t;
}
var l, d = (l = [], function(e, t) {
return l[e] = t, l.filter(Boolean).join("\n");
});
function h(e, t, n, i) {
var o = n ? "" : i.media ? "@media ".concat(i.media, " {").concat(i.css, "}") : i.css;
if (e.styleSheet) e.styleSheet.cssText = d(t, o); else {
var s = document.createTextNode(o), r = e.childNodes;
r[t] && e.removeChild(r[t]), r.length ? e.insertBefore(s, r[t]) : e.appendChild(s);
}
}
function m(e, t, n) {
var i = n.css, o = n.media, s = n.sourceMap;
if (o ? e.setAttribute("media", o) : e.removeAttribute("media"), s && btoa && (i += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s)))), " */")),
e.styleSheet) e.styleSheet.cssText = i; else {
for (;e.firstChild; ) e.removeChild(e.firstChild);
e.appendChild(document.createTextNode(i));
}
}
var p = null, g = 0;
function f(e, t) {
var n, i, o;
if (t.singleton) {
var s = g++;
n = p || (p = u(t)), i = h.bind(null, n, s, !1), o = h.bind(null, n, s, !0);
} else n = u(t), i = m.bind(null, n, t), o = function() {
!function(e) {
if (null === e.parentNode) return !1;
e.parentNode.removeChild(e);
}(n);
};
return i(e), function(t) {
if (t) {
if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap) return;
i(e = t);
} else o();
};
}
e.exports = function(e, t) {
(t = t || {}).singleton || "boolean" == typeof t.singleton || (t.singleton = o());
var n = c(e = e || [], t);
return function(e) {
if (e = e || [], "[object Array]" === Object.prototype.toString.call(e)) {
for (var i = 0; i < n.length; i++) {
var o = a(n[i]);
r[o].references--;
}
for (var s = c(e, t), u = 0; u < n.length; u++) {
var l = a(n[u]);
0 === r[l].references && (r[l].updater(), r.splice(l, 1));
}
n = s;
}
};
};
}, function(e, t, n) {
"use strict";
e.exports = function(e) {
var t = [];
return t.toString = function() {
return this.map((function(t) {
var n = function(e, t) {
var n = e[1] || "", i = e[3];
if (!i) return n;
if (t && "function" == typeof btoa) {
var o = (r = i, a = btoa(unescape(encodeURIComponent(JSON.stringify(r)))), c = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a),
"/*# ".concat(c, " */")), s = i.sources.map((function(e) {
return "/*# sourceURL=".concat(i.sourceRoot || "").concat(e, " */");
}));
return [ n ].concat(s).concat([ o ]).join("\n");
}
var r, a, c;
return [ n ].join("\n");
}(t, e);
return t[2] ? "@media ".concat(t[2], " {").concat(n, "}") : n;
})).join("");
}, t.i = function(e, n, i) {
"string" == typeof e && (e = [ [ null, e, "" ] ]);
var o = {};
if (i) for (var s = 0; s < this.length; s++) {
var r = this[s][0];
null != r && (o[r] = !0);
}
for (var a = 0; a < e.length; a++) {
var c = [].concat(e[a]);
i && o[c[0]] || (n && (c[2] ? c[2] = "".concat(n, " and ").concat(c[2]) : c[2] = n),
t.push(c));
}
}, t;
};
}, function(e, t, n) {
var i, o = function() {
var e = String.fromCharCode, t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", i = {};
function o(e, t) {
if (!i[e]) {
i[e] = {};
for (var n = 0; n < e.length; n++) i[e][e.charAt(n)] = n;
}
return i[e][t];
}
var s = {
compressToBase64: function(e) {
if (null == e) return "";
var n = s._compress(e, 6, (function(e) {
return t.charAt(e);
}));
switch (n.length % 4) {
default:
case 0:
return n;
case 1:
return n + "===";
case 2:
return n + "==";
case 3:
return n + "=";
}
},
decompressFromBase64: function(e) {
return null == e ? "" : "" == e ? null : s._decompress(e.length, 32, (function(n) {
return o(t, e.charAt(n));
}));
},
compressToUTF16: function(t) {
return null == t ? "" : s._compress(t, 15, (function(t) {
return e(t + 32);
})) + " ";
},
decompressFromUTF16: function(e) {
return null == e ? "" : "" == e ? null : s._decompress(e.length, 16384, (function(t) {
return e.charCodeAt(t) - 32;
}));
},
compressToUint8Array: function(e) {
for (var t = s.compress(e), n = new Uint8Array(2 * t.length), i = 0, o = t.length; i < o; i++) {
var r = t.charCodeAt(i);
n[2 * i] = r >>> 8, n[2 * i + 1] = r % 256;
}
return n;
},
decompressFromUint8Array: function(t) {
if (null == t) return s.decompress(t);
for (var n = new Array(t.length / 2), i = 0, o = n.length; i < o; i++) n[i] = 256 * t[2 * i] + t[2 * i + 1];
var r = [];
return n.forEach((function(t) {
r.push(e(t));
})), s.decompress(r.join(""));
},
compressToEncodedURIComponent: function(e) {
return null == e ? "" : s._compress(e, 6, (function(e) {
return n.charAt(e);
}));
},
decompressFromEncodedURIComponent: function(e) {
return null == e ? "" : "" == e ? null : (e = e.replace(/ /g, "+"), s._decompress(e.length, 32, (function(t) {
return o(n, e.charAt(t));
})));
},
compress: function(t) {
return s._compress(t, 16, (function(t) {
return e(t);
}));
},
_compress: function(e, t, n) {
if (null == e) return "";
var i, o, s, r = {}, a = {}, c = "", u = "", l = "", d = 2, h = 3, m = 2, p = [], g = 0, f = 0;
for (s = 0; s < e.length; s += 1) if (c = e.charAt(s), Object.prototype.hasOwnProperty.call(r, c) || (r[c] = h++,
a[c] = !0), u = l + c, Object.prototype.hasOwnProperty.call(r, u)) l = u; else {
if (Object.prototype.hasOwnProperty.call(a, l)) {
if (l.charCodeAt(0) < 256) {
for (i = 0; i < m; i++) g <<= 1, f == t - 1 ? (f = 0, p.push(n(g)), g = 0) : f++;
for (o = l.charCodeAt(0), i = 0; i < 8; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
} else {
for (o = 1, i = 0; i < m; i++) g = g << 1 | o, f == t - 1 ? (f = 0, p.push(n(g)),
g = 0) : f++, o = 0;
for (o = l.charCodeAt(0), i = 0; i < 16; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
}
0 == --d && (d = Math.pow(2, m), m++), delete a[l];
} else for (o = r[l], i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
0 == --d && (d = Math.pow(2, m), m++), r[u] = h++, l = String(c);
}
if ("" !== l) {
if (Object.prototype.hasOwnProperty.call(a, l)) {
if (l.charCodeAt(0) < 256) {
for (i = 0; i < m; i++) g <<= 1, f == t - 1 ? (f = 0, p.push(n(g)), g = 0) : f++;
for (o = l.charCodeAt(0), i = 0; i < 8; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
} else {
for (o = 1, i = 0; i < m; i++) g = g << 1 | o, f == t - 1 ? (f = 0, p.push(n(g)),
g = 0) : f++, o = 0;
for (o = l.charCodeAt(0), i = 0; i < 16; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
}
0 == --d && (d = Math.pow(2, m), m++), delete a[l];
} else for (o = r[l], i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0,
p.push(n(g)), g = 0) : f++, o >>= 1;
0 == --d && (d = Math.pow(2, m), m++);
}
for (o = 2, i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, p.push(n(g)),
g = 0) : f++, o >>= 1;
for (;;) {
if (g <<= 1, f == t - 1) {
p.push(n(g));
break;
}
f++;
}
return p.join("");
},
decompress: function(e) {
return null == e ? "" : "" == e ? null : s._decompress(e.length, 32768, (function(t) {
return e.charCodeAt(t);
}));
},
_decompress: function(t, n, i) {
var o, s, r, a, c, u, l, d = [], h = 4, m = 4, p = 3, g = "", f = [], b = {
val: i(0),
position: n,
index: 1
};
for (o = 0; o < 3; o += 1) d[o] = o;
for (r = 0, c = Math.pow(2, 2), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
switch (r) {
case 0:
for (r = 0, c = Math.pow(2, 8), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
l = e(r);
break;
case 1:
for (r = 0, c = Math.pow(2, 16), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
l = e(r);
break;
case 2:
return "";
}
for (d[3] = l, s = l, f.push(l); ;) {
if (b.index > t) return "";
for (r = 0, c = Math.pow(2, p), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
switch (l = r) {
case 0:
for (r = 0, c = Math.pow(2, 8), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
d[m++] = e(r), l = m - 1, h--;
break;
case 1:
for (r = 0, c = Math.pow(2, 16), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1,
0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u,
u <<= 1;
d[m++] = e(r), l = m - 1, h--;
break;
case 2:
return f.join("");
}
if (0 == h && (h = Math.pow(2, p), p++), d[l]) g = d[l]; else {
if (l !== m) return null;
g = s + s.charAt(0);
}
f.push(g), d[m++] = s + g.charAt(0), s = g, 0 == --h && (h = Math.pow(2, p), p++);
}
}
};
return s;
}();
void 0 === (i = function() {
return o;
}.call(t, n, t, e)) || (e.exports = i);
}, function(e, t, n) {
"use strict";
var i = /[A-Z]/g;
t.create = function(e) {
var t = (e = e || {}).assign || Object.assign;
var n = t({
raw: "",
pfx: "_",
client: "object" == typeof window,
assign: t,
stringify: JSON.stringify,
kebab: function(e) {
return e.replace(i, "-$&").toLowerCase();
},
decl: function(e, t) {
return (e = n.kebab(e)) + ":" + t + ";";
},
hash: function(e) {
return function(e) {
for (var t = 5381, n = e.length; n; ) t = 33 * t ^ e.charCodeAt(--n);
return "_" + (t >>> 0).toString(36);
}(n.stringify(e));
},
selector: function(e, t) {
return e + (":" === t[0] ? "" : " ") + t;
},
putRaw: function(e) {
n.raw += e;
}
}, e);
return n.client && (n.sh || document.head.appendChild(n.sh = document.createElement("style")),
n.putRaw = function(e) {
var t = n.sh.sheet;
try {
t.insertRule(e, t.cssRules.length);
} catch (e) {}
}), n.put = function(e, t, i) {
var o, s, r = "", a = [];
for (o in t) (s = t[o]) instanceof Object && !(s instanceof Array) ? a.push(o) : r += n.decl(o, s, e, i);
r && (r = e + "{" + r + "}", n.putRaw(i ? i + "{" + r + "}" : r));
for (var c = 0; c < a.length; c++) "@" === (o = a[c])[0] && "@font-face" !== o ? n.putAt(e, t[o], o) : n.put(n.selector(e, o), t[o], i);
}, n.putAt = n.put, n;
};
}, function(e) {
e.exports = JSON.parse('{"ru.wikipedia.org":"https://ru.wikipedia.org/w/index.php?title=\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a:Jack_who_built_the_house/convenientDiscussions-ru.js&action=raw&ctype=text/javascript"}');
}, function(e, t, n) {
var i = n(3), o = n(17);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e) {
e.exports = JSON.parse('{"script-name":"Convenient Discussions","script-name-short":"CD","cm-gotoparent":"\u25b2","cm-gotoparent-tooltip":"Go to the parent comment","cm-gotochild":"\u25bc","cm-gotochild-tooltip":"Go back to the child comment","cm-copylink":"#","cm-copylink-tooltip-diff":"Copy a link to the diff.","cm-copylink-tooltip-wikilink":"Copy a wikilink.","cm-copylink-tooltip-link":"Copy a link.","cm-thank":"Thank","cm-thank-tooltip":"Thank for the edit that added this comment","cm-thank-disabled-tooltip":"You have already thanked the user for this comment","cm-edit":"Edit","cm-reply":"Reply","sm-editopeningcomment":"edit opening comment","sm-editopeningcomment-tooltip":"Edit the comment opening the section","sm-addsubsection":"add subsection","sm-addsubsection-tooltip":"Add a subsection to this section","sm-move":"move","sm-move-tooltip":"Move the topic to another page","sm-watch":"watch","sm-watch-tooltip":"Add the section to the watchlist. This affects notifications and bolding in the watchlist","sm-unwatch":"unwatch","sm-unwatch-tooltip":"Remove the section from the watchlist","sm-copylink":"#","sm-copylink-tooltip-wikilink":"Copy a wikilink.","sm-copylink-tooltip-link":"Copy a link.","section-reply":"Reply","section-addsubsection-to":"Add subsection to \\"$1\\"","section-newcomments":"There are new comments in this section. Click to update the page.","section-watch-success":"The section \\"$1\\" has been added to your watchlist.","section-unwatch-success":"The section \\"$1\\" has been removed from your watchlist.","section-unwatch-stillwatched":"<strong>Note:</strong> you are still watching this section as it is included in the section \\"$1\\" that you watch.","section-watch-pagenotwatched":"<strong>Note:</strong> you watch the section but not the page. In order for new comments to be highlighted on your watchlist page, add the page to the watchlist.","section-watch-error-load":"Couldn\'t load the settings from the server.","section-watch-error-save":"Couldn\'t save the settings to the server.","section-watch-error-maxsize":"Couldn\'t update the settings: the size of the watched sections list exceeds the maximum size. <a class=\\"cd-notification-editWatchedSections\\">Edit the sections list</a> to fix this.","cld-invitation":"Click while holding Shift to choose a different type of link","cld-diff":"Diff link","cld-diff-error":"Couldn\'t find","cld-diff-error-network":"Couldn\'t find (network error)","cld-diff-error-unknown":"Couldn\'t find (unknown error)","cld-wikilink":"Wikilink","cld-help-onlycd":"This link will work only for users that have Convenient Discussions installed.","cld-currentpagewikilink":"Wikilink from the same page","cld-link":"Regular link","cld-close":"Close","cld-copy":"Copy","copylink-copied":"The link has been copied to the clipboard.","copylink-copied-url":"<a href=\\"$1\\" target=\\"_blank\\">The link</a> has been copied to the clipboard.","copylink-error":"Couldn\'t copy the link.","thank-confirm":"Thank {{gender:$2|}} $1 for <a href=\\"$3\\" target=\\"_blank\\">this edit</a>?","thank-error":"Couldn\'t send the thank you.","thank-error-multipletimestamps":"Looks like <a href=\\"$1\\" target=\\"_blank\\">the edit</a> that added this comment has more than one comment in it. Please decide for yourself if you\'re gonna thank for it.","thank-success":"\\"Thank you\\" notification has been sent.","es-reply":"reply","es-reply-to":"reply to {{gender:$2|}} $1","es-addition":"addition","es-edit-reply":"edit the reply","es-edit-reply-to":"edit the reply to {{gender:$2|}} $1","es-edit-addition":"edit the addition","es-edit-topic":"edit the opening comment","es-edit-subsection":"edit the opening comment","es-edit-comment":"edit the comment","es-edit-comment-by":"edit the comment by {{gender:$2|}} $1","es-delete-reply":"delete the reply","es-delete-reply-to":"delete the reply to {{gender:$2|}} $1","es-delete-addition":"delete the addition","es-delete-topic":"delete the topic","es-delete-subsection":"delete the subsection","es-delete-comment":"delete the comment","es-delete-comment-by":"delete the comment by {{gender:$2|}} $1","es-new-topic":"new topic","es-new-subsection":"new subsection","es-move-from":"move from [[$1]]","es-move-to":"move to [[$1]]","cf-headline-topic":"Topic subject/headline","cf-headline-subsection":"Subject/headline of subsection of \\"$1\\"","cf-comment-placeholder-replytosection":"Reply to \\"$1\\"","cf-comment-placeholder-replytocomment":"Reply to {{gender:$2|}} $1","cf-summary-placeholder":"Edit summary","cf-summary-preview":"Edit summary preview","cf-save":"Save","cf-save-short":"Save","cf-delete-button":"Delete","cf-delete-button-short":"Delete","cf-addtopic":"Add topic","cf-addtopic-short":"Add","cf-addsubsection":"Add subsection","cf-addsubsection-short":"Add","cf-reply":"Reply","cf-reply-short":"Reply","cf-preview":"Preview","cf-preview-short":"Preview","cf-viewchanges":"View changes","cf-viewchanges-short":"Changes","cf-cancel":"Cancel","cf-cancel-short":"Cancel","cf-settings":"Settings","cf-scriptsettings-tooltip":"Convenient Discussions settings","cf-help":"?","cf-help-short":"?","cf-help-content":"<p>Type <kbd>@<kbd> to <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention\\" target=\\"_blank\\">mention</a> a user. Type <kbd>##</kbd> to link a comment from this section.</p>\\n<p><a href=\\"https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions\\" target=\\"_blank\\">Script documentation</a></p>\\n<p>Hotkeys:</p>\\n<ul>\\n<li><b>Ctrl+Enter</b> \u2014 post</li>\\n<li><b>Esc</b> \u2014 cancel</li>\\n<li><b>Q</b> (<b>Ctrl+Alt+Q</b>) \u2014 quote the selected text</li>\\n</ul>","cf-quote-tooltip":"Quote the selected text","cf-quote-placeholder":"Quoted text","cf-minor":"Minor edit","cf-watch":"Watch this page","cf-watchsection-topic":"Watch this topic","cf-watchsection-subsection":"Watch this subsection","cf-watchsection-tooltip":"Add this section to the watchlist. This affects notifications and bolding in the watchlist","cf-nosignature":"No signature","cf-delete":"Delete","cf-block-preview":"Preview","cf-block-viewchanges":"Changes","cf-block-close":"Close","cf-reaction-templateinheadline":"Don\'t use templates in headlines: this breaks section links.","cf-reaction-signature":"No need to enter <kbd>$1</kbd>: the signature will be added automatically.","cf-reaction-pre":"<code><pre></code> tags can break the layout\u2014better use <code><syntaxhighlight></code>.","cf-reaction-mention-edit":"Since you are <em>editing</em> a comment, a <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention#How_to_mention_another_editor_and_trigger_a_notification\\" target=\\"_blank\\">mention notification</a> will not be sent.","cf-reaction-mention-nosignature":"Since you\'ve opted not to include a signature in your comment, a <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention#How_to_mention_another_editor_and_trigger_a_notification\\" target=\\"_blank\\">mention notification</a> will not be sent.","cf-notice-nochanges":"No changes.","cf-notice-editconflict-retrying":"Trying again\u2026","cf-error-getpagecode":"Couldn\'t get the page code.","cf-error-findplace":"Couldn\'t find the proper place in the code to insert the comment into.","cf-error-findplace-unexpectedheading":"Couldn\'t find the proper place in the code to insert the comment into (unexpected heading).","cf-error-commentlinks-commentnotfound":"Couldn\'t find the comment with ID $1, linked from the comment, on the page.","cf-error-numberedlist":"It\'s impossible to form the comment correctly without distorting the numbered list markup.","cf-error-numberedlist-list":"Remove lists from the comment.","cf-error-numberedlist-table":"Remove tables from the comment.","cf-error-delete-repliestocomment":"Can\'t delete the comment because it has replies.","cf-error-delete-repliesinsection":"Can\'t delete the section because it has replies.","cf-error-preview":"Couldn\'t preview the comment.","cf-error-viewchanges":"Couldn\'t get the changes.","cf-error-couldntedit":"Couldn\'t edit the page.","cf-error-pagedoesntexist":"The page doesn\'t exist.","cf-confirm-noheadline-topic":"You didn\'t enter the topic subject/headline.","cf-confirm-noheadline-subsection":"You didn\'t enter the section subject/headline.","cf-confirm-noheadline-question":"Are you sure you want to post the comment?","cf-confirm-empty":"Are you sure you want to post an empty comment?","cf-confirm-long":"This comment is longer than $1 characters. Are you sure you want to post it?","cf-confirm-secondlevelheading":"The comment contains the code of the second level section. If you are moving the source code, it\'s better to use the standard edit source function, otherwise it could be altered unpredictably. Are you sure you want to post the comment?","cf-confirm-delete":"Are you sure you want to delete the comment?","cf-confirm-delete-yes":"Delete","cf-confirm-delete-no":"Cancel","cf-confirm-close":"Are you sure you want to close the form? The input will be lost.","cf-confirm-close-yes":"Close","cf-confirm-close-no":"Cancel","cf-mentions-tooltip":"Mention a user","cf-mentions-notemplatedata":"Couldn\'t load TemplateData for this template.","cf-mentions-commentlinktext":"$1 @ $2","dn-confirm":"Do you want Convenient Discussions to send you desktop notifications about new comments on currently open pages if they are addressed to you or posted in sections that you watch? You can disable this feature in the settings.","dn-confirm-yes":"Yes","dn-confirm-no":"No","dn-grantpermission":"Grant a permission to the site.","dn-grantpermission-again":"You have the desktop notifications switched on, but the site is not allowed to send them. Grant a permission to the site to receive notifications or deny to prevent this message from showing up again.","deadanchor-section-title":"Section not found","deadanchor-section-text":"It could be moved or archived.","deadanchor-comment-title":"Comment not found","deadanchor-comment-text":"It could be moved or archived.","deadanchor-searchinarchive":"Do you want to search in the archive?","restore-restored-title":"Session restored","restore-restored-text":"The unsent comment forms have been automatically recovered.","rd-intro":"Couldn\'t find the comments or sections on the page that some of the opened forms were related to. Below is the restored content of these forms. Copy it if you need.","rd-headline":"Subject/headline","rd-comment":"Comment","rd-summary":"Edit summary","rd-close":"Close","navpanel-refresh":"Refresh page","navpanel-previous":"Go to the previous new comment","navpanel-next":"Go to the next new comment","navpanel-firstunseen":"Go to the first unseen comment","navpanel-commentform":"Go to the next comment form out of sight","navpanel-newcomments-count":"$1 new {{plural:$1|comment|comments}}. Click to update the page","navpanel-newcomments-insection":"Section \\"$1\\":","navpanel-newcomments-outsideofsections":"Outside of sections","newpanel-newcomments-reply":"$1 \u2192 $2","navpanel-newcomments-unknowndate":"unknown date","notification-toyou":"$1 {{gender:$2|replied}} to your comment$3.","notification-toyou-desktop":"$1 {{gender:$2|replied}} to your comment$3 on page \\"$4\\".","notification-insection":"$1 {{gender:$2|replied}} in section \\"$3\\".","notification-insection-desktop":"$1 {{gender:$2|replied}} in section \\"$3\\" on page \\"$4\\".","notification-newcomments":"$1 new {{plural:$1|comment|comments}}$2$3.","notification-newcomments-desktop":"$1 new {{plural:$1|comment|comments}}$2 on page \\"$3\\"$4.","notification-newcomments-maybeinteresting":"that may be interesting to you","notification-reload":"<a href=\\"$1\\" class=\\"cd-notification-reloadPage\\">Reload the page</a>$2.","notification-formdata":"form data will not be lost","notification-part-insection":"in section \\"$1\\"","notification-part-onthispage":"on this page","sd-title":"Convenient Discussions settings","sd-save":"Save","sd-reload":"Reload","sd-page-talkpage":"Talk page","sd-page-commentform":"Comment form","sd-page-notifications":"Notifications","sd-page-dataremoval":"Data removal","sd-close-confirm":"The settings were not saved. Are you sure you want to close the window?","sd-close-confirm-yes":"Close","sd-close-confirm-no":"Cancel","sd-saved":"The settings have been saved successfully. Reload the page to apply them.","sd-reset":"Reset settings (in all sections)","sd-reset-confirm":"Are you sure you want to reset the settings? (Click \\"{{int:convenient-discussions-sd-save}}\\" after resetting.)","sd-removedata":"Remove all script data","sd-removedata-description":"Delete the data that Convenient Discussions has collected: your settings, talk page last visits, watched sections, and drafts of unsent comments","sd-removedata-help":"Note that everything except the settings is removed for the current domain only. See <a href=\\"https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions#Data\\" target=\\"_blank\\">the script\'s homepage</a> for the clarifications on what, why, and how the script stores and instructions on how to delete each piece of data individually.","sd-removedata-confirm":"This will permanently delete your settings, talk page last visits, watched sections, and drafts of unsent comments. Do you want to proceed?","sd-removedata-confirm-yes":"Yes","sd-removedata-confirm-no":"No","sd-dataremoved":"Your data has been successfully removed.","sd-error-removedata":"Couldn\'t remove the data on the server.","sd-localsetting":"<i>This setting is individual for each wiki.</i>","sd-alloweditotherscomments":"Show a link to edit other users\' comments","sd-alwaysexpandsettings":"Expand the comment settings when replying","sd-autopreview":"Preview the comment as I type","sd-notifications":"Ordinary notifications","sd-notifications-radio-all":"Notify me about replies to my comments and comments in sections that I watch","sd-notifications-radio-tome":"Notify me about replies to my comments only","sd-notifications-radio-none":"Don\'t notify me","sd-notifications-help":"Notifications are small popups in the top right corner of the page.","sd-desktopnotifications":"Desktop notifications","sd-desktopnotifications-radio-all":"Notify me about replies to my comments and comments in sections that I watch","sd-desktopnotifications-radio-tome":"Notify me about replies to my comments only","sd-desktopnotifications-radio-none":"Don\'t notify me","sd-desktopnotifications-help":"Desktop notifications inform about events on pages that are open but hidden. To receive them, you must grant a premission to $1.","sd-highlightowncomments":"Highlight my comments","sd-insertbuttons":"Text insert buttons","sd-insertbuttons-multiselect-placeholder":"Add a button","sd-insertbuttons-help":"Use <code>+</code> to specify a place where the caret should be put after inserting the text; for example, <code>{{+}}</code>. Use <code>;</code> to specify displayed text if you want it to be different from the one inserted; for example, <code><code>+</code>;<code /></code>. Use <code>\</code> before the aforementioned characters to insert them as is; for example, <code>2\+2</code>. The buttons can be dragged and dropped.","sd-notificationsblacklist":"Don\'t notify about comments of these users","sd-notificationsblacklist-multiselect-placeholder":"Add a user","sd-signatureprefix":"Signature prefix","sd-signatureprefix-help":"Text that is added before the signature.","sd-showtoolbar":"Show the edit toolbar","sd-defaultcommentlinktype":"Default link type to copy when clicking \\"{{int:convenient-discussions-cm-copylink}}\\" in a comment menu","sd-defaultcommentlinktype-radio-diff":"Diff link","sd-defaultcommentlinktype-radio-wikilink":"Wikilink","sd-defaultcommentlinktype-radio-link":"Regular link","sd-defaultcommentlinktype-help":"To copy a link of a different type, click \\"{{int:convenient-discussions-cm-copylink}}\\" while holding Shift.","sd-defaultcommentlinktype-help-notdifflinks":"Links other than diff links will work only for users that have Convenient Discussions installed.","sd-defaultsectionlinktype":"Default link type to copy when clicking \\"{{int:convenient-discussions-sm-copylink}}\\" in a section menu","sd-defaultsectionlinktype-radio-wikilink":"Wikilink","sd-defaultsectionlinktype-radio-link":"Regular link","sd-defaultsectionlinktype-help":"To copy a link of a different type, click \\"{{int:convenient-discussions-sm-copylink}}\\" while holding Shift.","sd-watchonreply":"Watch pages that I reply on","sd-watchsectiononreply":"Watch sections that I reply in","ewsd-title":"Edit watched sections list","ewsd-save":"Save","ewsd-saved":"The watched sections list has been successfully saved.","ewsd-error-maxsize":"Couldn\'t update the settings: the size of the watched sections list exceeds the maximum size. Reduce the size of the list to fix this.","ewsd-error-processing":"An error occurred while processing the watched sections list.","ewsd-close-confirm":"The watched sections list wasn\'t saved. Are you sure you want to close the window?","ewsd-close-confirm-yes":"Close","ewsd-close-confirm-no":"Cancel","msd-title":"Move topic","msd-move":"Move","msd-reload":"Reload","msd-targetpage":"Enter the name of the discussion page to move the topic to:","msd-summaryending":"Edit summary (will be added to the standard one)","msd-error-wrongpage":"Wrong page.","msd-error-sourcepagedeleted":"The current page was deleted.","msd-error-targetpagedoesntexist":"The target page doesn\'t exist.","msd-error-invalidpagename":"Invalid page name.","msd-error-editconflict-retry":"Just click \\"{{int:ooui-dialog-process-retry}}\\".","msd-error-editingtargetpage":"Couldn\'t edit the target page.","msd-error-editingsourcepage":"Couldn\'t edit the source page. You will have to edit it manually.","msd-moved":"The topic has been successfully moved. You may reload the page or go to <a href=\\"$1\\">the page where the topic was moved to</a>.","msd-bottom":"The code may be different if the page would be updated while the window is idle.","move-sourcepagecode":"\'\'Moved to [[$1]]. $2\'\'","move-targetpagecode":"\'\'Moved from [[$1]]. $2\'\'","error-loaddata":"{{int:convenient-discussions-script-name}}: Couldn\'t load the data required by the script.","error-processpage":"{{int:convenient-discussions-script-name}}: Couldn\'t process the page.","error-settings-load":"Couldn\'t load the settings from the server.","error-settings-save":"Couldn\'t save the settings to the server.","error-reloadpage":"Couldn\'t reload the page.","error-reloadpage-saved":"The page was saved, but couldn\'t reload the page.","error-api":"API error: $1.","error-network":"Network error.","error-nodata":"The server response lacks the requested data.","error-unknown":"Unknown error.","error-javascript":"A JavaScript error occurred. See the details in the JavaScript console (F12 \u2192 Console).","error-locatecomment":"Couldn\'t locate the comment in the code. This may be caused by the complexity of the comment code, the script flaw of the fact that the comment was deleted or heavily edited. You can try to <a class=\\"cd-message-reloadPage\\">reload the page</a> or <a href=\\"$1\\" class=\\"cd-message-editSection\\">edit the section source the standard way</a>.","error-locatesection":"Couldn\'t locate the section in the code. This may be caused by the complexity of the section\'s first comment code, the script flaw of the fact that the section was deleted. You can try to <a class=\\"cd-message-reloadPage\\">reload the page</a> or <a href=\\"$1\\" class=\\"cd-message-editPage\\">edit the page source the standard way</a>.","error-spamblacklist":"You are trying to add a URL with the domain name $1 that is blacklisted. The page was not edited.","error-titleblacklist":"The page name is blacklisted. The page was not edited.","error-abusefilter":"Your edit was automatically rejected by abuse filter \\"$1\\".","error-editconflict":"Edit conflict.","error-blocked":"You are blocked from editing. The page was not edited.","error-pagedeleted":"The page was deleted.","error-pagenotedited":"The page was not edited.","error-diffnotfound":"Couldn\'t find the edit that added this comment.","error-diffnotfound-history":"You can look for it in the <a href=\\"$1\\" target=\\"_blank\\">revision history</a> for yourself.","wl-button-switchinteresting-tooltip":"Show only comments in sections that I watch and comments addressed to me","wl-button-editwatchedsections-tooltip":"Edit sections that I watch","wl-button-scriptsettings-tooltip":"Convenient Discussions settings","lp-comment":"comment","lp-comment-tooltip":"Go to comment","lp-comment-toyou":"the comment is addressed to you","lp-comment-watchedsection":"you are watching this section","loading-ellipsis":"Loading\u2026","addtopicbutton-tooltip":"Open in a new tab to create a new topic on the standard page, not in Convenient Discussions"}');
}, function(e, t, n) {
"use strict";
e.exports = function(e, t) {
var i = n(13), o = "", s = "", r = "";
o = e.toString();
var a = i("HTML_ENTITIES", t);
if (!1 === a) return !1;
for (r in delete a["&"], a["&"] = "&", a) s = a[r], o = o.split(s).join(r);
return o = o.split("'").join("'");
};
}, function(e, t, n) {
e.exports = function() {
"use strict";
function e(e, t) {
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
}
function t(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0),
Object.defineProperty(e, i.key, i);
}
}
function n(e, n, i) {
return n && t(e.prototype, n), i && t(e, i), e;
}
function i(e, t) {
return function(e) {
if (Array.isArray(e)) return e;
}(e) || function(e, t) {
if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) {
var n = [], i = !0, o = !1, s = void 0;
try {
for (var r, a = e[Symbol.iterator](); !(i = (r = a.next()).done) && (n.push(r.value),
!t || n.length !== t); i = !0) ;
} catch (e) {
o = !0, s = e;
} finally {
try {
i || null == a.return || a.return();
} finally {
if (o) throw s;
}
}
return n;
}
}(e, t) || function(e, t) {
if (e) {
if ("string" == typeof e) return o(e, t);
var n = Object.prototype.toString.call(e).slice(8, -1);
return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(n) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? o(e, t) : void 0;
}
}(e, t) || function() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}
function o(e, t) {
(null == t || t > e.length) && (t = e.length);
for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];
return i;
}
if (Array.prototype.find || (Array.prototype.find = function(e) {
if (null === this) throw new TypeError("Array.prototype.find called on null or undefined");
if ("function" != typeof e) throw new TypeError("predicate must be a function");
for (var t, n = Object(this), i = n.length >>> 0, o = arguments[1], s = 0; s < i; s++) if (t = n[s],
e.call(o, t, s, n)) return t;
}), window && "function" != typeof window.CustomEvent) {
var s = function(e, t) {
t = t || {
bubbles: !1,
cancelable: !1,
detail: void 0
};
var n = document.createEvent("CustomEvent");
return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n;
};
void 0 !== window.Event && (s.prototype = window.Event.prototype), window.CustomEvent = s;
}
var r = function() {
function t(n) {
e(this, t), this.tribute = n, this.tribute.events = this;
}
return n(t, [ {
key: "bind",
value: function(e) {
e.boundKeydown = this.keydown.bind(e, this), e.boundKeyup = this.keyup.bind(e, this),
e.boundInput = this.input.bind(e, this), e.addEventListener("keydown", e.boundKeydown, !1),
e.addEventListener("keyup", e.boundKeyup, !1), e.addEventListener("input", e.boundInput, !1);
}
}, {
key: "unbind",
value: function(e) {
e.removeEventListener("keydown", e.boundKeydown, !1), e.removeEventListener("keyup", e.boundKeyup, !1),
e.removeEventListener("input", e.boundInput, !1), delete e.boundKeydown, delete e.boundKeyup,
delete e.boundInput;
}
}, {
key: "keydown",
value: function(e, n) {
var i = this;
e.commandEvent = !1, t.keys().forEach((function(t) {
t.key === n.keyCode && (e.commandEvent = !0, e.callbacks()[t.value.toLowerCase()](n, i));
}));
}
}, {
key: "input",
value: function(e, t) {
e.inputEvent = !0, e.keyup.call(this, e, t);
}
}, {
key: "click",
value: function(e, t) {
var n = e.tribute;
if (n.menu && n.menu.contains(t.target)) {
var i = t.target;
for (t.preventDefault(), t.stopPropagation(); "li" !== i.nodeName.toLowerCase(); ) if (!(i = i.parentNode) || i === n.menu) return;
n.selectItemAtIndex(i.getAttribute("data-index"), t), n.hideMenu();
} else n.current.element && !n.current.externalTrigger && (n.current.externalTrigger = !1,
setTimeout((function() {
return n.hideMenu();
})));
}
}, {
key: "keyup",
value: function(e, t) {
if (e.inputEvent && (e.inputEvent = !1), e.updateSelection(this), 27 !== t.keyCode) {
if (e.tribute.doDropMenu) return e.tribute.isActive = !1, e.tribute.hideMenu(),
void (e.tribute.doDropMenu = !1);
if (!e.tribute.allowSpaces && e.tribute.hasTrailingSpace) return e.tribute.hasTrailingSpace = !1,
e.commandEvent = !0, void e.callbacks().space(t, this);
if (!e.tribute.isActive) if (e.tribute.autocompleteMode) e.callbacks().triggerChar(t, this, ""); else {
var n = e.getKeyCode(e, this, t);
if (isNaN(n) || !n) return;
var i = e.tribute.triggers().find((function(e) {
return e.charCodeAt(0) === n;
}));
void 0 !== i && e.callbacks().triggerChar(t, this, i);
}
e.tribute.current.mentionText.length < e.tribute.current.collection.menuShowMinLength || ((e.tribute.current.trigger || e.tribute.autocompleteMode) && !1 === e.commandEvent || e.tribute.isActive && 8 === t.keyCode) && e.tribute.showMenuFor(this, !0);
}
}
}, {
key: "getKeyCode",
value: function(e, t, n) {
var i = e.tribute, o = i.range.getTriggerInfo(!1, i.hasTrailingSpace, !0, i.allowSpaces, i.autocompleteMode);
return !!o && o.mentionTriggerChar.charCodeAt(0);
}
}, {
key: "updateSelection",
value: function(e) {
this.tribute.current.element = e;
var t = this.tribute.range.getTriggerInfo(!1, this.tribute.hasTrailingSpace, !0, this.tribute.allowSpaces, this.tribute.autocompleteMode);
t && (this.tribute.current.selectedPath = t.mentionSelectedPath, this.tribute.current.mentionText = t.mentionText,
this.tribute.current.selectedOffset = t.mentionSelectedOffset);
}
}, {
key: "callbacks",
value: function() {
var e = this;
return {
triggerChar: function(t, n, i) {
var o = e.tribute;
o.current.trigger = i;
var s = o.collection.find((function(e) {
return e.trigger === i;
}));
o.current.collection = s, o.current.mentionText.length >= o.current.collection.menuShowMinLength && o.inputEvent && o.showMenuFor(n, !0);
},
enter: function(t, n) {
e.tribute.isActive && e.tribute.current.filteredItems && (t.preventDefault(), t.stopPropagation(),
setTimeout((function() {
e.tribute.selectItemAtIndex(e.tribute.menuSelected, t), e.tribute.hideMenu();
}), 0));
},
escape: function(t, n) {
e.tribute.isActive && (t.preventDefault(), t.stopPropagation(), e.tribute.isActive = !1,
e.tribute.hideMenu());
},
tab: function(t, n) {
e.callbacks().enter(t, n);
},
up: function(t, n) {
if (e.tribute.isActive && e.tribute.current.filteredItems) {
t.preventDefault(), t.stopPropagation();
var i = e.tribute.current.filteredItems.length, o = e.tribute.menuSelected;
i > o && o > 0 ? (e.tribute.menuSelected--, e.setActiveLi()) : 0 === o && (e.tribute.menuSelected = i - 1,
e.setActiveLi(), e.tribute.menu.scrollTop = e.tribute.menu.scrollHeight);
}
},
down: function(t, n) {
if (e.tribute.isActive && e.tribute.current.filteredItems) {
t.preventDefault(), t.stopPropagation();
var i = e.tribute.current.filteredItems.length - 1, o = e.tribute.menuSelected;
i > o ? (e.tribute.menuSelected++, e.setActiveLi()) : i === o && (e.tribute.menuSelected = 0,
e.setActiveLi(), e.tribute.menu.scrollTop = 0);
}
}
};
}
}, {
key: "setActiveLi",
value: function(e) {
var t = this.tribute.menu.querySelectorAll("li"), n = t.length >>> 0;
e && (this.tribute.menuSelected = parseInt(e));
for (var i = 0; i < n; i++) {
var o = t[i];
if (i === this.tribute.menuSelected) {
o.classList.add(this.tribute.current.collection.selectClass);
var s = o.getBoundingClientRect(), r = this.tribute.menu.getBoundingClientRect();
if (s.bottom > r.bottom) {
var a = s.bottom - r.bottom;
this.tribute.menu.scrollTop += a;
} else if (s.top < r.top) {
var c = r.top - s.top;
this.tribute.menu.scrollTop -= c;
}
} else o.classList.remove(this.tribute.current.collection.selectClass);
}
}
}, {
key: "getFullHeight",
value: function(e, t) {
var n = e.getBoundingClientRect().height;
if (t) {
var i = e.currentStyle || window.getComputedStyle(e);
return n + parseFloat(i.marginTop) + parseFloat(i.marginBottom);
}
return n;
}
} ], [ {
key: "keys",
value: function() {
return [ {
key: 9,
value: "TAB"
}, {
key: 13,
value: "ENTER"
}, {
key: 27,
value: "ESCAPE"
}, {
key: 38,
value: "UP"
}, {
key: 40,
value: "DOWN"
} ];
}
} ]), t;
}(), a = function() {
function t(n) {
e(this, t), this.tribute = n, this.tribute.menuEvents = this, this.menu = this.tribute.menu;
}
return n(t, [ {
key: "bind",
value: function(e) {
var t = this;
this.menuClickEvent = this.tribute.events.click.bind(null, this), this.menuContainerScrollEvent = this.debounce((function() {
t.tribute.isActive && t.tribute.showMenuFor(t.tribute.current.element, !1);
}), 300, !1), this.windowResizeEvent = this.debounce((function() {
t.tribute.isActive && t.tribute.range.positionMenuAtCaret(!0);
}), 300, !1), this.tribute.range.getDocument().addEventListener("MSPointerDown", this.menuClickEvent, !1),
this.tribute.range.getDocument().addEventListener("mousedown", this.menuClickEvent, !1),
window.addEventListener("resize", this.windowResizeEvent), this.menuContainer ? this.menuContainer.addEventListener("scroll", this.menuContainerScrollEvent, !1) : window.addEventListener("scroll", this.menuContainerScrollEvent);
}
}, {
key: "unbind",
value: function(e) {
this.tribute.range.getDocument().removeEventListener("mousedown", this.menuClickEvent, !1),
this.tribute.range.getDocument().removeEventListener("MSPointerDown", this.menuClickEvent, !1),
window.removeEventListener("resize", this.windowResizeEvent), this.menuContainer ? this.menuContainer.removeEventListener("scroll", this.menuContainerScrollEvent, !1) : window.removeEventListener("scroll", this.menuContainerScrollEvent);
}
}, {
key: "debounce",
value: function(e, t, n) {
var i, o = arguments, s = this;
return function() {
var r = s, a = o, c = n && !i;
clearTimeout(i), i = setTimeout((function() {
i = null, n || e.apply(r, a);
}), t), c && e.apply(r, a);
};
}
} ]), t;
}(), c = function() {
function t(n) {
e(this, t), this.tribute = n, this.tribute.range = this;
}
return n(t, [ {
key: "getDocument",
value: function() {
var e;
return this.tribute.current.collection && (e = this.tribute.current.collection.iframe),
e ? e.contentWindow.document : document;
}
}, {
key: "positionMenuAtCaret",
value: function(e) {
var t, n = this, i = this.tribute.current, o = this.getTriggerInfo(!1, this.tribute.hasTrailingSpace, !0, this.tribute.allowSpaces, this.tribute.autocompleteMode);
if (void 0 !== o) {
if (!this.tribute.positionMenu) return void (this.tribute.menu.style.cssText = "display: block;");
t = this.isContentEditable(i.element) ? this.getContentEditableCaretPosition(o.mentionPosition) : this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element, o.mentionPosition),
this.tribute.menu.style.cssText = "top: ".concat(t.top, "px;\n left: ").concat(t.left, "px;\n right: ").concat(t.right, "px;\n bottom: ").concat(t.bottom, "px;\n position: absolute;\n display: block;"),
"auto" === t.left && (this.tribute.menu.style.left = "auto"), "auto" === t.top && (this.tribute.menu.style.top = "auto"),
e && this.scrollIntoView(), window.setTimeout((function() {
var i = {
width: n.tribute.menu.offsetWidth,
height: n.tribute.menu.offsetHeight
}, o = n.isMenuOffScreen(t, i), s = window.innerWidth > i.width && (o.left || o.right), r = window.innerHeight > i.height && (o.top || o.bottom);
(s || r) && (n.tribute.menu.style.cssText = "display: none", n.positionMenuAtCaret(e));
}), 0);
} else this.tribute.menu.style.cssText = "display: none";
}
}, {
key: "selectElement",
value: function(e, t, n) {
var i, o = e;
if (t) for (var s = 0; s < t.length; s++) {
if (void 0 === (o = o.childNodes[t[s]])) return;
for (;o.length < n; ) n -= o.length, o = o.nextSibling;
0 !== o.childNodes.length || o.length || (o = o.previousSibling);
}
var r = this.getWindowSelection();
(i = this.getDocument().createRange()).setStart(o, n), i.setEnd(o, n), i.collapse(!0);
try {
r.removeAllRanges();
} catch (e) {}
r.addRange(i), e.focus();
}
}, {
key: "replaceTriggerText",
value: function(e, t, n, i, o) {
var s = this.getTriggerInfo(!0, n, t, this.tribute.allowSpaces, this.tribute.autocompleteMode);
if (void 0 !== s) {
var r = this.tribute.current, a = new CustomEvent("tribute-replaced", {
detail: {
item: o,
instance: r,
context: s,
event: i
}
});
if (this.isContentEditable(r.element)) {
e += "string" == typeof this.tribute.replaceTextSuffix ? this.tribute.replaceTextSuffix : "\xa0";
var c = s.mentionPosition + s.mentionText.length;
this.tribute.autocompleteMode || (c += s.mentionTriggerChar.length), this.pasteHtml(e, s.mentionPosition, c);
} else {
var u = this.tribute.current.element;
e += "string" == typeof this.tribute.replaceTextSuffix ? this.tribute.replaceTextSuffix : " ";
var l = s.mentionPosition, d = s.mentionPosition + s.mentionText.length;
this.tribute.autocompleteMode || (d += s.mentionTriggerChar.length), u.value = u.value.substring(0, l) + e + u.value.substring(d, u.value.length),
u.selectionStart = l + e.length, u.selectionEnd = l + e.length;
}
r.element.dispatchEvent(new CustomEvent("input", {
bubbles: !0
})), r.element.dispatchEvent(a);
}
}
}, {
key: "pasteHtml",
value: function(e, t, n) {
var i, o;
o = this.getWindowSelection(), (i = this.getDocument().createRange()).setStart(o.anchorNode, t),
i.setEnd(o.anchorNode, n), i.deleteContents();
var s = this.getDocument().createElement("div");
s.innerHTML = e;
for (var r, a, c = this.getDocument().createDocumentFragment(); r = s.firstChild; ) a = c.appendChild(r);
i.insertNode(c), a && ((i = i.cloneRange()).setStartAfter(a), i.collapse(!0), o.removeAllRanges(),
o.addRange(i));
}
}, {
key: "getWindowSelection",
value: function() {
return this.tribute.collection.iframe ? this.tribute.collection.iframe.contentWindow.getSelection() : window.getSelection();
}
}, {
key: "getNodePositionInParent",
value: function(e) {
if (null === e.parentNode) return 0;
for (var t = 0; t < e.parentNode.childNodes.length; t++) if (e.parentNode.childNodes[t] === e) return t;
}
}, {
key: "getContentEditableSelectedPath",
value: function(e) {
var t = this.getWindowSelection(), n = t.anchorNode, i = [];
if (null != n) {
for (var o, s = n.contentEditable; null !== n && "true" !== s; ) o = this.getNodePositionInParent(n),
i.push(o), null !== (n = n.parentNode) && (s = n.contentEditable);
return i.reverse(), {
selected: n,
path: i,
offset: t.getRangeAt(0).startOffset
};
}
}
}, {
key: "getTextPrecedingCurrentSelection",
value: function() {
var e = this.tribute.current, t = "";
if (this.isContentEditable(e.element)) {
var n = this.getWindowSelection().anchorNode;
if (null != n) {
var i = n.textContent, o = this.getWindowSelection().getRangeAt(0).startOffset;
i && o >= 0 && (t = i.substring(0, o));
}
} else {
var s = this.tribute.current.element;
if (s) {
var r = s.selectionStart;
s.value && r >= 0 && (t = s.value.substring(0, r));
}
}
return t;
}
}, {
key: "getLastWordInText",
value: function(e) {
var t;
return e = e.replace(/\u00A0/g, " "), (t = this.tribute.autocompleteSeparator ? e.split(this.tribute.autocompleteSeparator) : e.split(/\s+/))[t.length - 1].trim();
}
}, {
key: "getTriggerInfo",
value: function(e, t, n, i, o) {
var s, r, a, c = this, u = this.tribute.current;
if (this.isContentEditable(u.element)) {
var l = this.getContentEditableSelectedPath(u);
l && (s = l.selected, r = l.path, a = l.offset);
} else s = this.tribute.current.element;
var d = this.getTextPrecedingCurrentSelection(), h = this.getLastWordInText(d);
if (o) return {
mentionPosition: d.length - h.length,
mentionText: h,
mentionSelectedElement: s,
mentionSelectedPath: r,
mentionSelectedOffset: a
};
if (null != d) {
var m, p, g, f = -1;
this.tribute.collection.forEach((function(e) {
var t = e.trigger, i = e.requireLeadingSpace ? c.lastIndexWithLeadingSpace(d, t) : d.lastIndexOf(t);
i > f && (f = i, m = t, n = e.requireLeadingSpace);
}));
var b = f >= 0 && (0 === f || !n || /[\xA0\s]/g.test(d.substring(f - 1, f)));
if (b) {
p = d.substring(f + m.length, d.length), m = d.substring(f, f + m.length);
var y = p.substring(0, 1);
g = p.length > 0 && (" " === y || "\xa0" === y), t && (p = p.trim());
var w = i ? /[^\S ]/g : /[\xA0\s]/g;
this.tribute.hasTrailingSpace = w.test(p);
}
if (-1 === f || p && !p[0].trim() || s.selectionStart !== s.selectionEnd) return void (this.tribute.doDropMenu = !0);
if (b && !g && (e || !w.test(p))) return {
mentionPosition: f,
mentionText: p,
mentionSelectedElement: s,
mentionSelectedPath: r,
mentionSelectedOffset: a,
mentionTriggerChar: m
};
}
}
}, {
key: "lastIndexWithLeadingSpace",
value: function(e, t) {
for (var n = e.split("").reverse().join(""), i = -1, o = 0, s = e.length; o < s; o++) {
for (var r = o === e.length - 1, a = /\s/.test(n[o + 1]), c = !0, u = t.length - 1; u >= 0; u--) if (t[u] !== n[o - u]) {
c = !1;
break;
}
if (c && (r || a)) {
i = e.length - 1 - o;
break;
}
}
return i;
}
}, {
key: "isContentEditable",
value: function(e) {
return "INPUT" !== e.nodeName && "TEXTAREA" !== e.nodeName;
}
}, {
key: "isMenuOffScreen",
value: function(e, t) {
var n = window.innerWidth, i = window.innerHeight, o = document.documentElement, s = (window.pageXOffset || o.scrollLeft) - (o.clientLeft || 0), r = (window.pageYOffset || o.scrollTop) - (o.clientTop || 0), a = "number" == typeof e.top ? e.top : r + i - e.bottom - t.height, c = "number" == typeof e.right ? e.right : e.left + t.width, u = "number" == typeof e.bottom ? e.bottom : e.top + t.height, l = "number" == typeof e.left ? e.left : s + n - e.right - t.width;
return {
top: a < Math.floor(r),
right: c > Math.ceil(s + n),
bottom: u > Math.ceil(r + i),
left: l < Math.floor(s)
};
}
}, {
key: "getMenuDimensions",
value: function() {
var e = {
width: null,
height: null
};
return this.tribute.menu.style.cssText = "top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;",
e.width = this.tribute.menu.offsetWidth, e.height = this.tribute.menu.offsetHeight,
this.tribute.menu.style.cssText = "display: none;", e;
}
}, {
key: "getTextAreaOrInputUnderlinePosition",
value: function(e, t, n) {
var i = null !== window.mozInnerScreenX, o = this.getDocument().createElement("div");
o.id = "input-textarea-caret-position-mirror-div", this.getDocument().body.appendChild(o);
var s = o.style, r = window.getComputedStyle ? getComputedStyle(e) : e.currentStyle;
s.whiteSpace = "pre-wrap", "INPUT" !== e.nodeName && (s.wordWrap = "break-word"),
s.position = "absolute", s.visibility = "hidden", [ "direction", "boxSizing", "width", "height", "overflowX", "overflowY", "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "fontStyle", "fontVariant", "fontWeight", "fontStretch", "fontSize", "fontSizeAdjust", "lineHeight", "fontFamily", "textAlign", "textTransform", "textIndent", "textDecoration", "letterSpacing", "wordSpacing" ].forEach((function(e) {
s[e] = r[e];
})), i ? (s.width = "".concat(parseInt(r.width) - 2, "px"), e.scrollHeight > parseInt(r.height) && (s.overflowY = "scroll")) : s.overflow = "hidden",
o.textContent = e.value.substring(0, t), "INPUT" === e.nodeName && (o.textContent = o.textContent.replace(/\s/g, "\xa0"));
var a = this.getDocument().createElement("span");
a.textContent = e.value.substring(t) || ".", o.appendChild(a);
var c = e.getBoundingClientRect(), u = document.documentElement, l = (window.pageXOffset || u.scrollLeft) - (u.clientLeft || 0), d = (window.pageYOffset || u.scrollTop) - (u.clientTop || 0), h = 0, m = 0;
this.menuContainerIsBody && (h = c.top, m = c.left);
var p = {
top: h + d + a.offsetTop + parseInt(r.borderTopWidth) + parseInt(r.fontSize) - e.scrollTop,
left: m + l + a.offsetLeft + parseInt(r.borderLeftWidth)
}, g = window.innerWidth, f = window.innerHeight, b = this.getMenuDimensions(), y = this.isMenuOffScreen(p, b);
y.right && (p.right = g - p.left, p.left = "auto");
var w = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;
if (y.bottom) {
var E = w - (f - (this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect()).top);
p.bottom = E + (f - c.top - a.offsetTop), p.top = "auto";
}
return (y = this.isMenuOffScreen(p, b)).left && (p.left = g > b.width ? l + g - b.width : l,
delete p.right), y.top && (p.top = f > b.height ? d + f - b.height : d, delete p.bottom),
this.getDocument().body.removeChild(o), p;
}
}, {
key: "getContentEditableCaretPosition",
value: function(e) {
var t, n = this.getWindowSelection();
(t = this.getDocument().createRange()).setStart(n.anchorNode, e), t.setEnd(n.anchorNode, e),
t.collapse(!1);
var i = t.getBoundingClientRect(), o = document.documentElement, s = (window.pageXOffset || o.scrollLeft) - (o.clientLeft || 0), r = (window.pageYOffset || o.scrollTop) - (o.clientTop || 0), a = {
left: i.left + s,
top: i.top + i.height + r
}, c = window.innerWidth, u = window.innerHeight, l = this.getMenuDimensions(), d = this.isMenuOffScreen(a, l);
d.right && (a.left = "auto", a.right = c - i.left - s);
var h = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;
if (d.bottom) {
var m = h - (u - (this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect()).top);
a.top = "auto", a.bottom = m + (u - i.top);
}
return (d = this.isMenuOffScreen(a, l)).left && (a.left = c > l.width ? s + c - l.width : s,
delete a.right), d.top && (a.top = u > l.height ? r + u - l.height : r, delete a.bottom),
this.menuContainerIsBody || (a.left = a.left ? a.left - this.tribute.menuContainer.offsetLeft : a.left,
a.top = a.top ? a.top - this.tribute.menuContainer.offsetTop : a.top), a;
}
}, {
key: "scrollIntoView",
value: function(e) {
var t, n = this.menu;
if (void 0 !== n) {
for (;void 0 === t || 0 === t.height; ) if (0 === (t = n.getBoundingClientRect()).height && (void 0 === (n = n.childNodes[0]) || !n.getBoundingClientRect)) return;
var i = t.top, o = i + t.height;
if (i < 0) window.scrollTo(0, window.pageYOffset + t.top - 20); else if (o > window.innerHeight) {
var s = window.pageYOffset + t.top - 20;
s - window.pageYOffset > 100 && (s = window.pageYOffset + 100);
var r = window.pageYOffset - (window.innerHeight - o);
r > s && (r = s), window.scrollTo(0, r);
}
}
}
}, {
key: "menuContainerIsBody",
get: function() {
return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;
}
} ]), t;
}(), u = function() {
function t(n) {
e(this, t), this.tribute = n, this.tribute.search = this;
}
return n(t, [ {
key: "simpleFilter",
value: function(e, t) {
var n = this;
return t.filter((function(t) {
return n.test(e, t);
}));
}
}, {
key: "test",
value: function(e, t) {
return null !== this.match(e, t);
}
}, {
key: "match",
value: function(e, t, n) {
n = n || {}, t.length;
var i = n.pre || "", o = n.post || "", s = n.caseSensitive && t || t.toLowerCase();
if (n.skip) return {
rendered: t,
score: 0
};
e = n.caseSensitive && e || e.toLowerCase();
var r = this.traverse(s, e, 0, 0, []);
return r ? {
rendered: this.render(t, r.cache, i, o),
score: r.score
} : null;
}
}, {
key: "traverse",
value: function(e, t, n, i, o) {
if (this.tribute.autocompleteSeparator && (t = t.split(this.tribute.autocompleteSeparator).splice(-1)[0]),
t.length === i) return {
score: this.calculateScore(o),
cache: o.slice()
};
if (!(e.length === n || t.length - i > e.length - n)) {
for (var s, r, a = t[i], c = e.indexOf(a, n); c > -1; ) {
if (o.push(c), r = this.traverse(e, t, c + 1, i + 1, o), o.pop(), !r) return s;
(!s || s.score < r.score) && (s = r), c = e.indexOf(a, c + 1);
}
return s;
}
}
}, {
key: "calculateScore",
value: function(e) {
var t = 0, n = 1;
return e.forEach((function(i, o) {
o > 0 && (e[o - 1] + 1 === i ? n += n + 1 : n = 1), t += n;
})), t;
}
}, {
key: "render",
value: function(e, t, n, i) {
var o = e.substring(0, t[0]);
return t.forEach((function(s, r) {
o += n + e[s] + i + e.substring(s + 1, t[r + 1] ? t[r + 1] : e.length);
})), o;
}
}, {
key: "filter",
value: function(e, t, n) {
var i = this;
return n = n || {}, t.reduce((function(t, o, s, r) {
var a = o;
n.extract && ((a = n.extract(o)) || (a = ""));
var c = i.match(e, a, n);
return null != c && (t[t.length] = {
string: c.rendered,
score: c.score,
index: s,
original: o
}), t;
}), []).sort((function(e, t) {
var n = t.score - e.score;
return n || e.index - t.index;
}));
}
} ]), t;
}();
/**
* Tribute.js
* Native ES6 JavaScript @mention Plugin
* @license
* The MIT License (MIT)
*
* Copyright (c) 2017-2020 ZURB, Inc.
* Copyright (c) 2014 Jeff Collins
* Copyright (c) 2012 Matt York
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**/
return function() {
function t(n) {
var i, o = this, s = n.values, l = void 0 === s ? null : s, d = n.loadingItemTemplate, h = void 0 === d ? null : d, m = n.iframe, p = void 0 === m ? null : m, g = n.selectClass, f = void 0 === g ? "highlight" : g, b = n.containerClass, y = void 0 === b ? "tribute-container" : b, w = n.itemClass, E = void 0 === w ? "" : w, v = n.trigger, _ = void 0 === v ? "@" : v, C = n.autocompleteMode, x = void 0 !== C && C, T = n.autocompleteSeparator, A = void 0 === T ? null : T, S = n.selectTemplate, k = void 0 === S ? null : S, N = n.menuItemTemplate, O = void 0 === N ? null : N, I = n.lookup, P = void 0 === I ? "key" : I, L = n.fillAttr, F = void 0 === L ? "value" : L, M = n.collection, R = void 0 === M ? null : M, B = n.menuContainer, D = void 0 === B ? null : B, j = n.noMatchTemplate, H = void 0 === j ? null : j, U = n.requireLeadingSpace, Y = void 0 === U || U, $ = n.allowSpaces, q = void 0 !== $ && $, W = n.replaceTextSuffix, G = void 0 === W ? null : W, V = n.positionMenu, z = void 0 === V || V, K = n.spaceSelectsMatch, X = void 0 !== K && K, J = n.searchOpts, Q = void 0 === J ? {} : J, Z = n.menuItemLimit, ee = void 0 === Z ? null : Z, te = n.menuShowMinLength, ne = void 0 === te ? 0 : te;
if (e(this, t), this.autocompleteMode = x, this.autocompleteSeparator = A, this.menuSelected = 0,
this.current = {}, this.inputEvent = !1, this.isActive = !1, this.menuContainer = D,
this.allowSpaces = q, this.replaceTextSuffix = G, this.positionMenu = z, this.hasTrailingSpace = !1,
this.spaceSelectsMatch = X, this.autocompleteMode && (_ = "", q = !1), l) this.collection = [ {
trigger: _,
iframe: p,
selectClass: f,
containerClass: y,
itemClass: E,
selectTemplate: (k || t.defaultSelectTemplate).bind(this),
menuItemTemplate: (O || t.defaultMenuItemTemplate).bind(this),
noMatchTemplate: (i = H, "string" == typeof i ? "" === i.trim() ? null : i : "function" == typeof i ? i.bind(o) : H || function() {
return "<li>No Match Found!</li>";
}.bind(o)),
lookup: P,
fillAttr: F,
values: l,
loadingItemTemplate: h,
requireLeadingSpace: Y,
searchOpts: Q,
menuItemLimit: ee,
menuShowMinLength: ne
} ]; else {
if (!R) throw new Error("[Tribute] No collection specified.");
this.autocompleteMode && console.warn("Tribute in autocomplete mode does not work for collections"),
this.collection = R.map((function(e) {
return {
trigger: e.trigger || _,
iframe: e.iframe || p,
selectClass: e.selectClass || f,
containerClass: e.containerClass || y,
itemClass: e.itemClass || E,
selectTemplate: (e.selectTemplate || t.defaultSelectTemplate).bind(o),
menuItemTemplate: (e.menuItemTemplate || t.defaultMenuItemTemplate).bind(o),
noMatchTemplate: function(e) {
return "string" == typeof e ? "" === e.trim() ? null : e : "function" == typeof e ? e.bind(o) : H || function() {
return "<li>No Match Found!</li>";
}.bind(o);
}(H),
lookup: e.lookup || P,
fillAttr: e.fillAttr || F,
values: e.values,
loadingItemTemplate: e.loadingItemTemplate,
requireLeadingSpace: e.requireLeadingSpace,
searchOpts: e.searchOpts || Q,
menuItemLimit: e.menuItemLimit || ee,
menuShowMinLength: e.menuShowMinLength || ne
};
}));
}
new c(this), new r(this), new a(this), new u(this);
}
return n(t, [ {
key: "triggers",
value: function() {
return this.collection.map((function(e) {
return e.trigger;
}));
}
}, {
key: "attach",
value: function(e) {
if (!e) throw new Error("[Tribute] Must pass in a DOM node or NodeList.");
if ("undefined" != typeof jQuery && e instanceof jQuery && (e = e.get()), e.constructor === NodeList || e.constructor === HTMLCollection || e.constructor === Array) for (var t = e.length, n = 0; n < t; ++n) this._attach(e[n]); else this._attach(e);
}
}, {
key: "_attach",
value: function(e) {
e.hasAttribute("data-tribute") && console.warn("Tribute was already bound to " + e.nodeName),
this.ensureEditable(e), this.events.bind(e), e.setAttribute("data-tribute", !0);
}
}, {
key: "ensureEditable",
value: function(e) {
if (-1 === t.inputTypes().indexOf(e.nodeName)) {
if (!e.contentEditable) throw new Error("[Tribute] Cannot bind to " + e.nodeName);
e.contentEditable = !0;
}
}
}, {
key: "createMenu",
value: function(e) {
var t = this.range.getDocument().createElement("div"), n = this.range.getDocument().createElement("ul");
return t.className = e, t.appendChild(n), this.menuContainer ? this.menuContainer.appendChild(t) : this.range.getDocument().body.appendChild(t);
}
}, {
key: "showMenuFor",
value: function(e, t) {
var n = this;
if (!this.isActive || this.current.element !== e || this.current.mentionText !== this.currentMentionTextSnapshot) {
this.currentMentionTextSnapshot = this.current.mentionText, this.menu || (this.menu = this.createMenu(this.current.collection.containerClass),
e.tributeMenu = this.menu, this.menuEvents.bind(this.menu)), this.isActive = !0,
this.menuSelected = 0, this.current.mentionText || (this.current.mentionText = "");
var o = function(e) {
if (n.isActive) {
var o = n.search.filter(n.current.mentionText, e, {
pre: n.current.collection.searchOpts.pre || "<span>",
post: n.current.collection.searchOpts.post || "</span>",
skip: n.current.collection.searchOpts.skip,
extract: function(e) {
if ("string" == typeof n.current.collection.lookup) return e[n.current.collection.lookup];
if ("function" == typeof n.current.collection.lookup) return n.current.collection.lookup(e, n.current.mentionText);
throw new Error("Invalid lookup attribute, lookup must be string or function.");
}
});
n.current.collection.menuItemLimit && (o = o.slice(0, n.current.collection.menuItemLimit)),
n.current.filteredItems = o;
var s = n.menu.querySelector("ul");
if (n.range.positionMenuAtCaret(t), !o.length) {
var r = new CustomEvent("tribute-no-match", {
detail: n.menu
});
return n.current.element.dispatchEvent(r), void ("function" == typeof n.current.collection.noMatchTemplate && !n.current.collection.noMatchTemplate() || !n.current.collection.noMatchTemplate ? n.hideMenu() : "function" == typeof n.current.collection.noMatchTemplate ? s.innerHTML = n.current.collection.noMatchTemplate() : s.innerHTML = n.current.collection.noMatchTemplate);
}
s.innerHTML = "";
var a = n.range.getDocument().createDocumentFragment();
o.forEach((function(e, t) {
var o = n.range.getDocument().createElement("li");
o.setAttribute("data-index", t), o.className = n.current.collection.itemClass, o.addEventListener("mousemove", (function(e) {
var t = i(n._findLiTarget(e.target), 2), o = (t[0], t[1]);
0 !== e.movementY && n.events.setActiveLi(o);
})), n.menuSelected === t && o.classList.add(n.current.collection.selectClass),
o.innerHTML = n.current.collection.menuItemTemplate(e), a.appendChild(o);
})), s.appendChild(a);
}
};
"function" == typeof this.current.collection.values ? (this.current.collection.loadingItemTemplate && (this.menu.querySelector("ul").innerHTML = this.current.collection.loadingItemTemplate,
this.range.positionMenuAtCaret(t)), this.current.collection.values(this.current.mentionText, o)) : o(this.current.collection.values);
}
}
}, {
key: "_findLiTarget",
value: function(e) {
if (!e) return [];
var t = e.getAttribute("data-index");
return t ? [ e, t ] : this._findLiTarget(e.parentNode);
}
}, {
key: "showMenuForCollection",
value: function(e, t) {
e !== document.activeElement && this.placeCaretAtEnd(e), this.current.collection = this.collection[t || 0],
this.current.externalTrigger = !0, this.current.element = e, e.isContentEditable ? this.insertTextAtCursor(this.current.collection.trigger) : this.insertAtCaret(e, this.current.collection.trigger),
this.showMenuFor(e);
}
}, {
key: "placeCaretAtEnd",
value: function(e) {
if (e.focus(), void 0 !== window.getSelection && void 0 !== document.createRange) {
var t = document.createRange();
t.selectNodeContents(e), t.collapse(!1);
var n = window.getSelection();
n.removeAllRanges(), n.addRange(t);
} else if (void 0 !== document.body.createTextRange) {
var i = document.body.createTextRange();
i.moveToElementText(e), i.collapse(!1), i.select();
}
}
}, {
key: "insertTextAtCursor",
value: function(e) {
var t, n;
(n = (t = window.getSelection()).getRangeAt(0)).deleteContents();
var i = document.createTextNode(e);
n.insertNode(i), n.selectNodeContents(i), n.collapse(!1), t.removeAllRanges(), t.addRange(n);
}
}, {
key: "insertAtCaret",
value: function(e, t) {
var n = e.scrollTop, i = e.selectionStart, o = e.value.substring(0, i), s = e.value.substring(e.selectionEnd, e.value.length);
e.value = o + t + s, i += t.length, e.selectionStart = i, e.selectionEnd = i, e.focus(),
e.scrollTop = n;
}
}, {
key: "hideMenu",
value: function() {
this.menu && (this.menu.style.cssText = "display: none;", this.isActive = !1, this.menuSelected = 0,
this.current = {});
}
}, {
key: "selectItemAtIndex",
value: function(e, t) {
if ("number" == typeof (e = parseInt(e)) && !isNaN(e)) {
var n = this.current.filteredItems[e], i = this.current.collection.selectTemplate(n);
null !== i && this.replaceText(i, t, n);
}
}
}, {
key: "replaceText",
value: function(e, t, n) {
this.range.replaceTriggerText(e, !0, !0, t, n);
}
}, {
key: "_append",
value: function(e, t, n) {
if ("function" == typeof e.values) throw new Error("Unable to append to values, as it is a function.");
e.values = n ? t : e.values.concat(t);
}
}, {
key: "append",
value: function(e, t, n) {
var i = parseInt(e);
if ("number" != typeof i) throw new Error("please provide an index for the collection to update.");
var o = this.collection[i];
this._append(o, t, n);
}
}, {
key: "appendCurrent",
value: function(e, t) {
if (!this.isActive) throw new Error("No active state. Please use append instead and pass an index.");
this._append(this.current.collection, e, t);
}
}, {
key: "detach",
value: function(e) {
if (!e) throw new Error("[Tribute] Must pass in a DOM node or NodeList.");
if ("undefined" != typeof jQuery && e instanceof jQuery && (e = e.get()), e.constructor === NodeList || e.constructor === HTMLCollection || e.constructor === Array) for (var t = e.length, n = 0; n < t; ++n) this._detach(e[n]); else this._detach(e);
}
}, {
key: "_detach",
value: function(e) {
var t = this;
this.events.unbind(e), e.tributeMenu && this.menuEvents.unbind(e.tributeMenu), setTimeout((function() {
e.removeAttribute("data-tribute"), t.isActive = !1, e.tributeMenu && e.tributeMenu.remove();
}));
}
}, {
key: "isActive",
get: function() {
return this._isActive;
},
set: function(e) {
if (this._isActive != e && (this._isActive = e, this.current.element)) {
var t = new CustomEvent("tribute-active-".concat(e));
this.current.element.dispatchEvent(t);
}
}
} ], [ {
key: "defaultSelectTemplate",
value: function(e) {
return void 0 === e ? "".concat(this.current.collection.trigger).concat(this.current.mentionText) : this.range.isContentEditable(this.current.element) ? '<span class="tribute-mention">' + (this.current.collection.trigger + e.original[this.current.collection.fillAttr]) + "</span>" : this.current.collection.trigger + e.original[this.current.collection.fillAttr];
}
}, {
key: "defaultMenuItemTemplate",
value: function(e) {
return e.string;
}
}, {
key: "inputTypes",
value: function() {
return [ "TEXTAREA", "INPUT" ];
}
} ]), t;
}();
}();
}, function(e, t, n) {
e.exports = function() {
return n(16)('!function(t) {\n var e = {};\n function r(n) {\n if (e[n]) return e[n].exports;\n var i = e[n] = {\n i: n,\n l: !1,\n exports: {}\n };\n return t[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;\n }\n r.m = t, r.c = e, r.d = function(t, e, n) {\n r.o(t, e) || Object.defineProperty(t, e, {\n enumerable: !0,\n get: n\n });\n }, r.r = function(t) {\n "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {\n value: "Module"\n }), Object.defineProperty(t, "__esModule", {\n value: !0\n });\n }, r.t = function(t, e) {\n if (1 & e && (t = r(t)), 8 & e) return t;\n if (4 & e && "object" == typeof t && t && t.__esModule) return t;\n var n = Object.create(null);\n if (r.r(n), Object.defineProperty(n, "default", {\n enumerable: !0,\n value: t\n }), 2 & e && "string" != typeof t) for (var i in t) r.d(n, i, function(e) {\n return t[e];\n }.bind(null, i));\n return n;\n }, r.n = function(t) {\n var e = t && t.__esModule ? function() {\n return t.default;\n } : function() {\n return t;\n };\n return r.d(e, "a", e), e;\n }, r.o = function(t, e) {\n return Object.prototype.hasOwnProperty.call(t, e);\n }, r.p = "", r(r.s = 33);\n}([ function(t, e, r) {\n "use strict";\n const n = "undefined" == typeof window ? self : window;\n n.convenientDiscussions = n.convenientDiscussions || {}, "object" != typeof n.convenientDiscussions && (n.convenientDiscussions = {}), \n e.a = n.convenientDiscussions;\n}, function(t, e, r) {\n "use strict";\n r.d(e, "a", (function() {\n return n;\n }));\n class n extends Error {\n constructor(t) {\n let e;\n t ? (e = t.type, t.code && (e += "/".concat(t.code)), t.apiData && t.apiData.error && t.apiData.error.code && (e += "/".concat(t.apiData.error.code))) : e = "", \n super(e), this.name = "CdError", this.data = t;\n }\n }\n}, function(t, e, r) {\n "use strict";\n r.d(e, "g", (function() {\n return s;\n })), r.d(e, "a", (function() {\n return o;\n })), r.d(e, "c", (function() {\n return a;\n })), r.d(e, "e", (function() {\n return u;\n })), r.d(e, "i", (function() {\n return c;\n })), r.d(e, "h", (function() {\n return l;\n })), r.d(e, "b", (function() {\n return h;\n })), r.d(e, "d", (function() {\n return d;\n })), r.d(e, "f", (function() {\n return p;\n }));\n var n = r(1), i = (r(3), r(0));\n r(9), r(11), r(10);\n r(5);\n function s(t, e) {\n return !(!e || t.nodeType !== Node.TEXT_NODE) || (t.nodeType !== Node.ELEMENT_NODE ? null : !!i.a.g.POPULAR_INLINE_ELEMENTS.includes(t.tagName) || !i.a.g.POPULAR_NOT_INLINE_ELEMENTS.includes(t.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline() called for:", t), \n "inline" === window.getComputedStyle(t).display) : null));\n }\n function o(t) {\n return void 0 !== t;\n }\n function a(t) {\n return [].concat(...t);\n }\n function u(t, e) {\n throw "http" === t ? new n.a({\n type: "network"\n }) : new n.a({\n type: "api",\n code: "error",\n apiData: e\n });\n }\n function c(t) {\n return t.replace(/_/g, " ");\n }\n function l(t) {\n return t.replace(/ /g, "_");\n }\n function h(t) {\n return t.length ? t[0].toUpperCase() + t.slice(1) : "";\n }\n function d(t) {\n return t.map(mw.msg);\n }\n function p(t, e, r, n) {\n return t.replace(e, (t, e, i) => ("number" == typeof e && (e = "", i = ""), (e || "") + (n ? "\\x03" : "\\x01") + r.push(i || t) + (n ? "\\x04" : "\\x02")));\n }\n}, function(t, e) {\n function r(t, e, r, n, i, s, o) {\n try {\n var a = t[s](o), u = a.value;\n } catch (t) {\n return void r(t);\n }\n a.done ? e(u) : Promise.resolve(u).then(n, i);\n }\n t.exports = function(t) {\n return function() {\n var e = this, n = arguments;\n return new Promise((function(i, s) {\n var o = t.apply(e, n);\n function a(t) {\n r(o, i, s, a, u, "next", t);\n }\n function u(t) {\n r(o, i, s, a, u, "throw", t);\n }\n a(void 0);\n }));\n };\n };\n}, function(t, e) {\n t.exports = function(t, e) {\n var r = e.get(t);\n if (!r) throw new TypeError("attempted to get private field on non-instance");\n return r.get ? r.get.call(t) : r.value;\n };\n}, function(t, e, r) {\n "use strict";\n r.d(e, "b", (function() {\n return a;\n })), r.d(e, "a", (function() {\n return c;\n })), r.d(e, "c", (function() {\n return h;\n })), r.d(e, "d", (function() {\n return d;\n }));\n var n = r(0), i = r(2);\n let s, o;\n function a(t, e) {\n s || (s = new RegExp("^([^]*)(".concat(n.a.g.TIMESTAMP_REGEXP.source, ")"))), o || (o = new RegExp("^([^]*)(".concat(n.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")")));\n const r = void 0 === e ? s : o, i = t.match(r);\n if (!i) return null;\n let a = n.a.g.TIMESTAMP_PARSER(i, n.a.g.TIMESTAMP_MATCHING_GROUPS, n.a.g.DIGITS, n.a.g.LOCAL_TIMEZONE_OFFSET);\n return e && (a = new Date(a.getTime() - e * n.a.g.MILLISECONDS_IN_A_MINUTE)), {\n date: a,\n match: i\n };\n }\n function u(t, e) {\n return ("0000" + t).slice(-e);\n }\n function c(t, e, r = !1) {\n let n = t.getUTCFullYear(), s = t.getUTCMonth(), o = t.getUTCDate(), a = t.getUTCHours(), c = t.getUTCMinutes(), h = u(n, 4) + u(s + 1, 2) + u(o, 2) + u(a, 2) + u(c, 2) + (e ? "_" + Object(i.h)(e) : "");\n if (r && l.includes(h)) {\n let t = 2;\n const e = h;\n do {\n h = "".concat(e, "_").concat(t), t++;\n } while (l.includes(h));\n }\n return h;\n }\n let l = [];\n function h(t) {\n t && l.push(t);\n }\n function d() {\n l = [];\n }\n}, function(t, e, r) {\n "use strict";\n function n(t) {\n for (var r in t) e.hasOwnProperty(r) || (e[r] = t[r]);\n }\n var i = this && this.__importStar || function(t) {\n if (t && t.__esModule) return t;\n var e = {};\n if (null != t) for (var r in t) Object.hasOwnProperty.call(t, r) && (e[r] = t[r]);\n return e.default = t, e;\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var s = r(16);\n e.Parser = s.Parser;\n var o = r(20);\n e.DomHandler = o.DomHandler, e.DefaultHandler = o.DomHandler, e.parseDOM = function(t, e) {\n var r = new o.DomHandler(void 0, e);\n return new s.Parser(r, e).end(t), r.dom;\n }, e.createDomStream = function(t, e, r) {\n var n = new o.DomHandler(t, e, r);\n return new s.Parser(n, e);\n };\n var a = r(17);\n e.Tokenizer = a.default;\n var u = i(r(15));\n e.ElementType = u, e.EVENTS = {\n attribute: 2,\n cdatastart: 0,\n cdataend: 0,\n text: 1,\n processinginstruction: 2,\n comment: 1,\n commentend: 0,\n closetag: 1,\n opentag: 2,\n opentagname: 1,\n error: 1,\n end: 0\n }, n(r(21)), n(r(45)), n(r(46));\n var c = i(r(22));\n e.DomUtils = c;\n var l = r(21);\n e.RssHandler = l.FeedHandler;\n}, function(t, e, r) {\n "use strict";\n r.d(e, "c", (function() {\n return i;\n })), r.d(e, "b", (function() {\n return s;\n })), r.d(e, "a", (function() {\n return o;\n }));\n var n = r(0);\n class i {\n constructor(t, e, r = !1, n = t) {\n this.acceptNode = e, this.root = t, this.currentNode = n, r ? (this.firstChildProperty = "firstElementChild", \n this.lastChildProperty = "lastElementChild", this.previousSiblingProperty = "previousElementSibling", \n this.nextSiblingProperty = "nextElementSibling") : (this.firstChildProperty = "firstChild", \n this.lastChildProperty = "lastChild", this.previousSiblingProperty = "previousSibling", \n this.nextSiblingProperty = "nextSibling");\n }\n tryMove(t) {\n let e = this.currentNode;\n if (e === this.root && !t.includes("Child")) return null;\n do {\n e = e[t];\n } while (e && this.acceptNode && !this.acceptNode(e));\n return e && (this.currentNode = e), e || null;\n }\n parentNode() {\n return this.tryMove("parentNode");\n }\n firstChild() {\n return this.tryMove(this.firstChildProperty);\n }\n lastChild() {\n return this.tryMove(this.lastChildProperty);\n }\n previousSibling() {\n return this.tryMove(this.previousSiblingProperty);\n }\n nextSibling() {\n return this.tryMove(this.nextSiblingProperty);\n }\n nextNode() {\n let t = this.currentNode;\n do {\n if (t[this.firstChildProperty]) t = t[this.firstChildProperty]; else {\n for (;t && !t[this.nextSiblingProperty] && t.parentNode !== this.root; ) t = t.parentNode;\n t && (t = t[this.nextSiblingProperty]);\n }\n } while (t && this.acceptNode && !this.acceptNode(t));\n return t && (this.currentNode = t), t;\n }\n previousNode() {\n let t = this.currentNode;\n if (t !== this.root) {\n do {\n if (t[this.previousSiblingProperty]) for (t = t[this.previousSiblingProperty]; t[this.lastChildProperty]; ) t = t[this.lastChildProperty]; else t = t.parentNode;\n } while (t && this.acceptNode && !this.acceptNode(t));\n return t && (this.currentNode = t), t;\n }\n }\n }\n class s extends i {\n constructor(t) {\n super(n.a.g.rootElement, t => ![ "STYLE", "LINK" ].includes(t.tagName), !0), t && (this.currentNode = t);\n }\n }\n class o extends i {\n constructor(t) {\n super(n.a.g.rootElement, t => t.nodeType === Node.TEXT_NODE || t.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(t.tagName)), \n t && (this.currentNode = t);\n }\n }\n}, function(t, e) {\n t.exports = function(t, e, r) {\n var n = e.get(t);\n if (!n) throw new TypeError("attempted to set private field on non-instance");\n if (n.set) n.set.call(t, r); else {\n if (!n.writable) throw new TypeError("attempted to set read only private field");\n n.value = r;\n }\n return r;\n };\n}, function(t, e, r) {\n "use strict";\n r.d(e, "c", (function() {\n return u;\n })), r.d(e, "b", (function() {\n return c;\n })), r.d(e, "a", (function() {\n return l;\n }));\n var n = r(31), i = r.n(n), s = r(0), o = r(10), a = r(5);\n r(2);\n function u(t) {\n return t.replace(/\x3c!--([^]*?)--\x3e/g, (t, e) => "\\x3c!--" + " ".repeat(e.length) + "--\\x3e");\n }\n function c(t) {\n const e = function(t, e) {\n const r = u(t).replace(s.a.g.QUOTE_REGEXP, (t, e, r, n) => e + " ".repeat(r.length) + n).replace(s.a.g.COMMENT_ANTIPATTERNS_REGEXP, t => " ".repeat(t.length));\n let n = function(t) {\n const e = new RegExp("^((.*)(".concat(s.a.g.TIMESTAMP_REGEXP.source, ")(?:\\\\}\\\\}|</small>)?).*(?:\\n*|$)"), "igm"), r = new RegExp("^((.*)(".concat(s.a.g.CAPTURE_USER_NAME_PATTERN, ".{1,").concat(251, "}((").concat(s.a.g.TIMESTAMP_REGEXP.source, ")(?:\\\\}\\\\}|</small>)?)).*)(\\n*|$)"), "igm"), n = new RegExp(s.a.g.CAPTURE_USER_NAME_PATTERN, "ig");\n let i, a = [];\n for (;i = e.exec(t); ) {\n const e = i[0];\n r.lastIndex = 0;\n const s = r.exec(e);\n let u, c, h, d, p, f;\n if (s) {\n let e;\n u = o.a.getUser(l(s[4])), c = s[7], h = i.index + s[2].length, d = i.index + s[1].length, \n p = i.index + s[0].length, f = s[3], n.lastIndex = 0;\n const r = Math.max(0, s[0].length - s[6].length - s[s.length - 1].length - 251), a = s[0].slice(r);\n for (;e = n.exec(a); ) {\n if (e[2]) continue;\n if (o.a.getUser(l(e[1])) === u) {\n h = i.index + r + e.index, f = t.slice(h, d);\n break;\n }\n }\n } else c = i[3], h = i.index + i[2].length, d = i.index + i[1].length, p = i.index + i[0].length, \n f = c;\n a.push({\n author: u,\n timestamp: c,\n startIndex: h,\n endIndex: d,\n dirtyCode: f,\n nextCommentStartIndex: p\n });\n }\n return a;\n }(r);\n const i = function(t, e) {\n const r = [];\n if (s.a.g.UNSIGNED_TEMPLATES_REGEXP) {\n let n;\n for (;n = s.a.g.UNSIGNED_TEMPLATES_REGEXP.exec(t); ) {\n let t, i;\n s.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(n[2]) ? (i = n[2], t = n[3]) : s.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(n[3]) ? (i = n[3], \n t = n[2]) : t = n[2], t = o.a.getUser(l(t));\n let a = n.index;\n const u = n.index + n[1].length;\n let c = n[1];\n const h = n.index + n[0].length, d = e.findIndex(t => t.nextCommentStartIndex === h);\n -1 !== d && e.splice(d, 1), r.push({\n author: t,\n timestamp: i,\n startIndex: a,\n endIndex: u,\n dirtyCode: c,\n nextCommentStartIndex: h\n });\n }\n }\n return r;\n }(r, n);\n n.push(...i), i.length && n.sort((t, e) => t.startIndex > e.startIndex ? 1 : -1);\n n = n.filter(t => t.author), n.forEach((t, e) => {\n t.commentStartIndex = 0 === e ? 0 : n[e - 1].nextCommentStartIndex;\n }), e && Object(a.d)();\n return n.forEach((t, r) => {\n const {date: n} = t.timestamp && Object(a.b)(t.timestamp) || {};\n if (t.id = r, t.date = n, delete t.nextCommentStartIndex, e) {\n const e = n ? Object(a.a)(n, t.author.name, !0) : void 0;\n t.anchor = e, Object(a.c)(e);\n }\n }), n;\n }(t);\n return e.length ? e[0].timestamp : null;\n }\n function l(t) {\n if (-1 === t.indexOf("&")) return t;\n {\n let e = t;\n return -1 !== e.indexOf("&amp;") && (e = e.replace(/&amp;/g, "&amp;")), \n e = -1 === e.indexOf("&#") ? e : e.replace(/&#(\\d+);/g, (t, e) => String.fromCharCode(e)), \n -1 === e.indexOf("&") ? e : i()(e);\n }\n }\n}, function(t, e, r) {\n "use strict";\n var n = r(8), i = r.n(n), s = r(4), o = r.n(s), a = r(0), u = r(2);\n e.a = {\n users: {},\n getUser(t) {\n if (t.includes("#") && (t = t.slice(0, t.indexOf("#"))), t = Object(u.i)(Object(u.b)(t)).trim(), \n !this.users[t]) {\n const e = t === a.a.g.CURRENT_USER_NAME ? {\n gender: a.a.g.CURRENT_USER_GENDER\n } : {};\n this.users[t] = new l(t, e);\n }\n return this.users[t];\n }\n };\n var c = new WeakMap;\n class l {\n constructor(t, e = {}) {\n c.set(this, {\n writable: !0,\n value: void 0\n }), this.name = t, this.options = new mw.Map, Object.keys(e).forEach(t => {\n this[t] = e[t];\n });\n }\n get registered() {\n return void 0 === o()(this, c) && i()(this, c, !mw.util.isIPAddress(this.name)), \n o()(this, c);\n }\n set gender(t) {\n this.options.set("gender", t);\n }\n get gender() {\n return this.options.get("gender");\n }\n }\n}, function(t, e, r) {\n var n, i = function() {\n var t = String.fromCharCode, e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", n = {};\n function i(t, e) {\n if (!n[t]) {\n n[t] = {};\n for (var r = 0; r < t.length; r++) n[t][t.charAt(r)] = r;\n }\n return n[t][e];\n }\n var s = {\n compressToBase64: function(t) {\n if (null == t) return "";\n var r = s._compress(t, 6, (function(t) {\n return e.charAt(t);\n }));\n switch (r.length % 4) {\n default:\n case 0:\n return r;\n\n case 1:\n return r + "===";\n\n case 2:\n return r + "==";\n\n case 3:\n return r + "=";\n }\n },\n decompressFromBase64: function(t) {\n return null == t ? "" : "" == t ? null : s._decompress(t.length, 32, (function(r) {\n return i(e, t.charAt(r));\n }));\n },\n compressToUTF16: function(e) {\n return null == e ? "" : s._compress(e, 15, (function(e) {\n return t(e + 32);\n })) + " ";\n },\n decompressFromUTF16: function(t) {\n return null == t ? "" : "" == t ? null : s._decompress(t.length, 16384, (function(e) {\n return t.charCodeAt(e) - 32;\n }));\n },\n compressToUint8Array: function(t) {\n for (var e = s.compress(t), r = new Uint8Array(2 * e.length), n = 0, i = e.length; n < i; n++) {\n var o = e.charCodeAt(n);\n r[2 * n] = o >>> 8, r[2 * n + 1] = o % 256;\n }\n return r;\n },\n decompressFromUint8Array: function(e) {\n if (null == e) return s.decompress(e);\n for (var r = new Array(e.length / 2), n = 0, i = r.length; n < i; n++) r[n] = 256 * e[2 * n] + e[2 * n + 1];\n var o = [];\n return r.forEach((function(e) {\n o.push(t(e));\n })), s.decompress(o.join(""));\n },\n compressToEncodedURIComponent: function(t) {\n return null == t ? "" : s._compress(t, 6, (function(t) {\n return r.charAt(t);\n }));\n },\n decompressFromEncodedURIComponent: function(t) {\n return null == t ? "" : "" == t ? null : (t = t.replace(/ /g, "+"), s._decompress(t.length, 32, (function(e) {\n return i(r, t.charAt(e));\n })));\n },\n compress: function(e) {\n return s._compress(e, 16, (function(e) {\n return t(e);\n }));\n },\n _compress: function(t, e, r) {\n if (null == t) return "";\n var n, i, s, o = {}, a = {}, u = "", c = "", l = "", h = 2, d = 3, p = 2, f = [], _ = 0, m = 0;\n for (s = 0; s < t.length; s += 1) if (u = t.charAt(s), Object.prototype.hasOwnProperty.call(o, u) || (o[u] = d++, \n a[u] = !0), c = l + u, Object.prototype.hasOwnProperty.call(o, c)) l = c; else {\n if (Object.prototype.hasOwnProperty.call(a, l)) {\n if (l.charCodeAt(0) < 256) {\n for (n = 0; n < p; n++) _ <<= 1, m == e - 1 ? (m = 0, f.push(r(_)), _ = 0) : m++;\n for (i = l.charCodeAt(0), n = 0; n < 8; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n } else {\n for (i = 1, n = 0; n < p; n++) _ = _ << 1 | i, m == e - 1 ? (m = 0, f.push(r(_)), \n _ = 0) : m++, i = 0;\n for (i = l.charCodeAt(0), n = 0; n < 16; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n }\n 0 == --h && (h = Math.pow(2, p), p++), delete a[l];\n } else for (i = o[l], n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n 0 == --h && (h = Math.pow(2, p), p++), o[c] = d++, l = String(u);\n }\n if ("" !== l) {\n if (Object.prototype.hasOwnProperty.call(a, l)) {\n if (l.charCodeAt(0) < 256) {\n for (n = 0; n < p; n++) _ <<= 1, m == e - 1 ? (m = 0, f.push(r(_)), _ = 0) : m++;\n for (i = l.charCodeAt(0), n = 0; n < 8; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n } else {\n for (i = 1, n = 0; n < p; n++) _ = _ << 1 | i, m == e - 1 ? (m = 0, f.push(r(_)), \n _ = 0) : m++, i = 0;\n for (i = l.charCodeAt(0), n = 0; n < 16; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n }\n 0 == --h && (h = Math.pow(2, p), p++), delete a[l];\n } else for (i = o[l], n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n f.push(r(_)), _ = 0) : m++, i >>= 1;\n 0 == --h && (h = Math.pow(2, p), p++);\n }\n for (i = 2, n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, f.push(r(_)), \n _ = 0) : m++, i >>= 1;\n for (;;) {\n if (_ <<= 1, m == e - 1) {\n f.push(r(_));\n break;\n }\n m++;\n }\n return f.join("");\n },\n decompress: function(t) {\n return null == t ? "" : "" == t ? null : s._decompress(t.length, 32768, (function(e) {\n return t.charCodeAt(e);\n }));\n },\n _decompress: function(e, r, n) {\n var i, s, o, a, u, c, l, h = [], d = 4, p = 4, f = 3, _ = "", m = [], g = {\n val: n(0),\n position: r,\n index: 1\n };\n for (i = 0; i < 3; i += 1) h[i] = i;\n for (o = 0, u = Math.pow(2, 2), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n switch (o) {\n case 0:\n for (o = 0, u = Math.pow(2, 8), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n l = t(o);\n break;\n\n case 1:\n for (o = 0, u = Math.pow(2, 16), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n l = t(o);\n break;\n\n case 2:\n return "";\n }\n for (h[3] = l, s = l, m.push(l); ;) {\n if (g.index > e) return "";\n for (o = 0, u = Math.pow(2, f), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n switch (l = o) {\n case 0:\n for (o = 0, u = Math.pow(2, 8), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n h[p++] = t(o), l = p - 1, d--;\n break;\n\n case 1:\n for (o = 0, u = Math.pow(2, 16), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n 0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n c <<= 1;\n h[p++] = t(o), l = p - 1, d--;\n break;\n\n case 2:\n return m.join("");\n }\n if (0 == d && (d = Math.pow(2, f), f++), h[l]) _ = h[l]; else {\n if (l !== p) return null;\n _ = s + s.charAt(0);\n }\n m.push(_), h[p++] = s + _.charAt(0), s = _, 0 == --d && (d = Math.pow(2, f), f++);\n }\n }\n };\n return s;\n }();\n void 0 === (n = function() {\n return i;\n }.call(e, r, e, t)) || (t.exports = n);\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = r(15);\n e.isTag = function(t) {\n return n.isTag(t);\n }, e.isCDATA = function(t) {\n return "cdata" === t.type;\n }, e.isText = function(t) {\n return "text" === t.type;\n }, e.isComment = function(t) {\n return "comment" === t.type;\n }, e.hasChildren = function(t) {\n return Object.prototype.hasOwnProperty.call(t, "children");\n };\n}, function(t) {\n t.exports = JSON.parse(\'{"Aacute":"\\xc1","aacute":"\\xe1","Abreve":"\\u0102","abreve":"\\u0103","ac":"\\u223e","acd":"\\u223f","acE":"\\u223e\\u0333","Acirc":"\\xc2","acirc":"\\xe2","acute":"\\xb4","Acy":"\\u0410","acy":"\\u0430","AElig":"\\xc6","aelig":"\\xe6","af":"\\u2061","Afr":"\\ud835\\udd04","afr":"\\ud835\\udd1e","Agrave":"\\xc0","agrave":"\\xe0","alefsym":"\\u2135","aleph":"\\u2135","Alpha":"\\u0391","alpha":"\\u03b1","Amacr":"\\u0100","amacr":"\\u0101","amalg":"\\u2a3f","amp":"&","AMP":"&","andand":"\\u2a55","And":"\\u2a53","and":"\\u2227","andd":"\\u2a5c","andslope":"\\u2a58","andv":"\\u2a5a","ang":"\\u2220","ange":"\\u29a4","angle":"\\u2220","angmsdaa":"\\u29a8","angmsdab":"\\u29a9","angmsdac":"\\u29aa","angmsdad":"\\u29ab","angmsdae":"\\u29ac","angmsdaf":"\\u29ad","angmsdag":"\\u29ae","angmsdah":"\\u29af","angmsd":"\\u2221","angrt":"\\u221f","angrtvb":"\\u22be","angrtvbd":"\\u299d","angsph":"\\u2222","angst":"\\xc5","angzarr":"\\u237c","Aogon":"\\u0104","aogon":"\\u0105","Aopf":"\\ud835\\udd38","aopf":"\\ud835\\udd52","apacir":"\\u2a6f","ap":"\\u2248","apE":"\\u2a70","ape":"\\u224a","apid":"\\u224b","apos":"\\\'","ApplyFunction":"\\u2061","approx":"\\u2248","approxeq":"\\u224a","Aring":"\\xc5","aring":"\\xe5","Ascr":"\\ud835\\udc9c","ascr":"\\ud835\\udcb6","Assign":"\\u2254","ast":"*","asymp":"\\u2248","asympeq":"\\u224d","Atilde":"\\xc3","atilde":"\\xe3","Auml":"\\xc4","auml":"\\xe4","awconint":"\\u2233","awint":"\\u2a11","backcong":"\\u224c","backepsilon":"\\u03f6","backprime":"\\u2035","backsim":"\\u223d","backsimeq":"\\u22cd","Backslash":"\\u2216","Barv":"\\u2ae7","barvee":"\\u22bd","barwed":"\\u2305","Barwed":"\\u2306","barwedge":"\\u2305","bbrk":"\\u23b5","bbrktbrk":"\\u23b6","bcong":"\\u224c","Bcy":"\\u0411","bcy":"\\u0431","bdquo":"\\u201e","becaus":"\\u2235","because":"\\u2235","Because":"\\u2235","bemptyv":"\\u29b0","bepsi":"\\u03f6","bernou":"\\u212c","Bernoullis":"\\u212c","Beta":"\\u0392","beta":"\\u03b2","beth":"\\u2136","between":"\\u226c","Bfr":"\\ud835\\udd05","bfr":"\\ud835\\udd1f","bigcap":"\\u22c2","bigcirc":"\\u25ef","bigcup":"\\u22c3","bigodot":"\\u2a00","bigoplus":"\\u2a01","bigotimes":"\\u2a02","bigsqcup":"\\u2a06","bigstar":"\\u2605","bigtriangledown":"\\u25bd","bigtriangleup":"\\u25b3","biguplus":"\\u2a04","bigvee":"\\u22c1","bigwedge":"\\u22c0","bkarow":"\\u290d","blacklozenge":"\\u29eb","blacksquare":"\\u25aa","blacktriangle":"\\u25b4","blacktriangledown":"\\u25be","blacktriangleleft":"\\u25c2","blacktriangleright":"\\u25b8","blank":"\\u2423","blk12":"\\u2592","blk14":"\\u2591","blk34":"\\u2593","block":"\\u2588","bne":"=\\u20e5","bnequiv":"\\u2261\\u20e5","bNot":"\\u2aed","bnot":"\\u2310","Bopf":"\\ud835\\udd39","bopf":"\\ud835\\udd53","bot":"\\u22a5","bottom":"\\u22a5","bowtie":"\\u22c8","boxbox":"\\u29c9","boxdl":"\\u2510","boxdL":"\\u2555","boxDl":"\\u2556","boxDL":"\\u2557","boxdr":"\\u250c","boxdR":"\\u2552","boxDr":"\\u2553","boxDR":"\\u2554","boxh":"\\u2500","boxH":"\\u2550","boxhd":"\\u252c","boxHd":"\\u2564","boxhD":"\\u2565","boxHD":"\\u2566","boxhu":"\\u2534","boxHu":"\\u2567","boxhU":"\\u2568","boxHU":"\\u2569","boxminus":"\\u229f","boxplus":"\\u229e","boxtimes":"\\u22a0","boxul":"\\u2518","boxuL":"\\u255b","boxUl":"\\u255c","boxUL":"\\u255d","boxur":"\\u2514","boxuR":"\\u2558","boxUr":"\\u2559","boxUR":"\\u255a","boxv":"\\u2502","boxV":"\\u2551","boxvh":"\\u253c","boxvH":"\\u256a","boxVh":"\\u256b","boxVH":"\\u256c","boxvl":"\\u2524","boxvL":"\\u2561","boxVl":"\\u2562","boxVL":"\\u2563","boxvr":"\\u251c","boxvR":"\\u255e","boxVr":"\\u255f","boxVR":"\\u2560","bprime":"\\u2035","breve":"\\u02d8","Breve":"\\u02d8","brvbar":"\\xa6","bscr":"\\ud835\\udcb7","Bscr":"\\u212c","bsemi":"\\u204f","bsim":"\\u223d","bsime":"\\u22cd","bsolb":"\\u29c5","bsol":"\\\\\\\\","bsolhsub":"\\u27c8","bull":"\\u2022","bullet":"\\u2022","bump":"\\u224e","bumpE":"\\u2aae","bumpe":"\\u224f","Bumpeq":"\\u224e","bumpeq":"\\u224f","Cacute":"\\u0106","cacute":"\\u0107","capand":"\\u2a44","capbrcup":"\\u2a49","capcap":"\\u2a4b","cap":"\\u2229","Cap":"\\u22d2","capcup":"\\u2a47","capdot":"\\u2a40","CapitalDifferentialD":"\\u2145","caps":"\\u2229\\ufe00","caret":"\\u2041","caron":"\\u02c7","Cayleys":"\\u212d","ccaps":"\\u2a4d","Ccaron":"\\u010c","ccaron":"\\u010d","Ccedil":"\\xc7","ccedil":"\\xe7","Ccirc":"\\u0108","ccirc":"\\u0109","Cconint":"\\u2230","ccups":"\\u2a4c","ccupssm":"\\u2a50","Cdot":"\\u010a","cdot":"\\u010b","cedil":"\\xb8","Cedilla":"\\xb8","cemptyv":"\\u29b2","cent":"\\xa2","centerdot":"\\xb7","CenterDot":"\\xb7","cfr":"\\ud835\\udd20","Cfr":"\\u212d","CHcy":"\\u0427","chcy":"\\u0447","check":"\\u2713","checkmark":"\\u2713","Chi":"\\u03a7","chi":"\\u03c7","circ":"\\u02c6","circeq":"\\u2257","circlearrowleft":"\\u21ba","circlearrowright":"\\u21bb","circledast":"\\u229b","circledcirc":"\\u229a","circleddash":"\\u229d","CircleDot":"\\u2299","circledR":"\\xae","circledS":"\\u24c8","CircleMinus":"\\u2296","CirclePlus":"\\u2295","CircleTimes":"\\u2297","cir":"\\u25cb","cirE":"\\u29c3","cire":"\\u2257","cirfnint":"\\u2a10","cirmid":"\\u2aef","cirscir":"\\u29c2","ClockwiseContourIntegral":"\\u2232","CloseCurlyDoubleQuote":"\\u201d","CloseCurlyQuote":"\\u2019","clubs":"\\u2663","clubsuit":"\\u2663","colon":":","Colon":"\\u2237","Colone":"\\u2a74","colone":"\\u2254","coloneq":"\\u2254","comma":",","commat":"@","comp":"\\u2201","compfn":"\\u2218","complement":"\\u2201","complexes":"\\u2102","cong":"\\u2245","congdot":"\\u2a6d","Congruent":"\\u2261","conint":"\\u222e","Conint":"\\u222f","ContourIntegral":"\\u222e","copf":"\\ud835\\udd54","Copf":"\\u2102","coprod":"\\u2210","Coproduct":"\\u2210","copy":"\\xa9","COPY":"\\xa9","copysr":"\\u2117","CounterClockwiseContourIntegral":"\\u2233","crarr":"\\u21b5","cross":"\\u2717","Cross":"\\u2a2f","Cscr":"\\ud835\\udc9e","cscr":"\\ud835\\udcb8","csub":"\\u2acf","csube":"\\u2ad1","csup":"\\u2ad0","csupe":"\\u2ad2","ctdot":"\\u22ef","cudarrl":"\\u2938","cudarrr":"\\u2935","cuepr":"\\u22de","cuesc":"\\u22df","cularr":"\\u21b6","cularrp":"\\u293d","cupbrcap":"\\u2a48","cupcap":"\\u2a46","CupCap":"\\u224d","cup":"\\u222a","Cup":"\\u22d3","cupcup":"\\u2a4a","cupdot":"\\u228d","cupor":"\\u2a45","cups":"\\u222a\\ufe00","curarr":"\\u21b7","curarrm":"\\u293c","curlyeqprec":"\\u22de","curlyeqsucc":"\\u22df","curlyvee":"\\u22ce","curlywedge":"\\u22cf","curren":"\\xa4","curvearrowleft":"\\u21b6","curvearrowright":"\\u21b7","cuvee":"\\u22ce","cuwed":"\\u22cf","cwconint":"\\u2232","cwint":"\\u2231","cylcty":"\\u232d","dagger":"\\u2020","Dagger":"\\u2021","daleth":"\\u2138","darr":"\\u2193","Darr":"\\u21a1","dArr":"\\u21d3","dash":"\\u2010","Dashv":"\\u2ae4","dashv":"\\u22a3","dbkarow":"\\u290f","dblac":"\\u02dd","Dcaron":"\\u010e","dcaron":"\\u010f","Dcy":"\\u0414","dcy":"\\u0434","ddagger":"\\u2021","ddarr":"\\u21ca","DD":"\\u2145","dd":"\\u2146","DDotrahd":"\\u2911","ddotseq":"\\u2a77","deg":"\\xb0","Del":"\\u2207","Delta":"\\u0394","delta":"\\u03b4","demptyv":"\\u29b1","dfisht":"\\u297f","Dfr":"\\ud835\\udd07","dfr":"\\ud835\\udd21","dHar":"\\u2965","dharl":"\\u21c3","dharr":"\\u21c2","DiacriticalAcute":"\\xb4","DiacriticalDot":"\\u02d9","DiacriticalDoubleAcute":"\\u02dd","DiacriticalGrave":"`","DiacriticalTilde":"\\u02dc","diam":"\\u22c4","diamond":"\\u22c4","Diamond":"\\u22c4","diamondsuit":"\\u2666","diams":"\\u2666","die":"\\xa8","DifferentialD":"\\u2146","digamma":"\\u03dd","disin":"\\u22f2","div":"\\xf7","divide":"\\xf7","divideontimes":"\\u22c7","divonx":"\\u22c7","DJcy":"\\u0402","djcy":"\\u0452","dlcorn":"\\u231e","dlcrop":"\\u230d","dollar":"$","Dopf":"\\ud835\\udd3b","dopf":"\\ud835\\udd55","Dot":"\\xa8","dot":"\\u02d9","DotDot":"\\u20dc","doteq":"\\u2250","doteqdot":"\\u2251","DotEqual":"\\u2250","dotminus":"\\u2238","dotplus":"\\u2214","dotsquare":"\\u22a1","doublebarwedge":"\\u2306","DoubleContourIntegral":"\\u222f","DoubleDot":"\\xa8","DoubleDownArrow":"\\u21d3","DoubleLeftArrow":"\\u21d0","DoubleLeftRightArrow":"\\u21d4","DoubleLeftTee":"\\u2ae4","DoubleLongLeftArrow":"\\u27f8","DoubleLongLeftRightArrow":"\\u27fa","DoubleLongRightArrow":"\\u27f9","DoubleRightArrow":"\\u21d2","DoubleRightTee":"\\u22a8","DoubleUpArrow":"\\u21d1","DoubleUpDownArrow":"\\u21d5","DoubleVerticalBar":"\\u2225","DownArrowBar":"\\u2913","downarrow":"\\u2193","DownArrow":"\\u2193","Downarrow":"\\u21d3","DownArrowUpArrow":"\\u21f5","DownBreve":"\\u0311","downdownarrows":"\\u21ca","downharpoonleft":"\\u21c3","downharpoonright":"\\u21c2","DownLeftRightVector":"\\u2950","DownLeftTeeVector":"\\u295e","DownLeftVectorBar":"\\u2956","DownLeftVector":"\\u21bd","DownRightTeeVector":"\\u295f","DownRightVectorBar":"\\u2957","DownRightVector":"\\u21c1","DownTeeArrow":"\\u21a7","DownTee":"\\u22a4","drbkarow":"\\u2910","drcorn":"\\u231f","drcrop":"\\u230c","Dscr":"\\ud835\\udc9f","dscr":"\\ud835\\udcb9","DScy":"\\u0405","dscy":"\\u0455","dsol":"\\u29f6","Dstrok":"\\u0110","dstrok":"\\u0111","dtdot":"\\u22f1","dtri":"\\u25bf","dtrif":"\\u25be","duarr":"\\u21f5","duhar":"\\u296f","dwangle":"\\u29a6","DZcy":"\\u040f","dzcy":"\\u045f","dzigrarr":"\\u27ff","Eacute":"\\xc9","eacute":"\\xe9","easter":"\\u2a6e","Ecaron":"\\u011a","ecaron":"\\u011b","Ecirc":"\\xca","ecirc":"\\xea","ecir":"\\u2256","ecolon":"\\u2255","Ecy":"\\u042d","ecy":"\\u044d","eDDot":"\\u2a77","Edot":"\\u0116","edot":"\\u0117","eDot":"\\u2251","ee":"\\u2147","efDot":"\\u2252","Efr":"\\ud835\\udd08","efr":"\\ud835\\udd22","eg":"\\u2a9a","Egrave":"\\xc8","egrave":"\\xe8","egs":"\\u2a96","egsdot":"\\u2a98","el":"\\u2a99","Element":"\\u2208","elinters":"\\u23e7","ell":"\\u2113","els":"\\u2a95","elsdot":"\\u2a97","Emacr":"\\u0112","emacr":"\\u0113","empty":"\\u2205","emptyset":"\\u2205","EmptySmallSquare":"\\u25fb","emptyv":"\\u2205","EmptyVerySmallSquare":"\\u25ab","emsp13":"\\u2004","emsp14":"\\u2005","emsp":"\\u2003","ENG":"\\u014a","eng":"\\u014b","ensp":"\\u2002","Eogon":"\\u0118","eogon":"\\u0119","Eopf":"\\ud835\\udd3c","eopf":"\\ud835\\udd56","epar":"\\u22d5","eparsl":"\\u29e3","eplus":"\\u2a71","epsi":"\\u03b5","Epsilon":"\\u0395","epsilon":"\\u03b5","epsiv":"\\u03f5","eqcirc":"\\u2256","eqcolon":"\\u2255","eqsim":"\\u2242","eqslantgtr":"\\u2a96","eqslantless":"\\u2a95","Equal":"\\u2a75","equals":"=","EqualTilde":"\\u2242","equest":"\\u225f","Equilibrium":"\\u21cc","equiv":"\\u2261","equivDD":"\\u2a78","eqvparsl":"\\u29e5","erarr":"\\u2971","erDot":"\\u2253","escr":"\\u212f","Escr":"\\u2130","esdot":"\\u2250","Esim":"\\u2a73","esim":"\\u2242","Eta":"\\u0397","eta":"\\u03b7","ETH":"\\xd0","eth":"\\xf0","Euml":"\\xcb","euml":"\\xeb","euro":"\\u20ac","excl":"!","exist":"\\u2203","Exists":"\\u2203","expectation":"\\u2130","exponentiale":"\\u2147","ExponentialE":"\\u2147","fallingdotseq":"\\u2252","Fcy":"\\u0424","fcy":"\\u0444","female":"\\u2640","ffilig":"\\ufb03","fflig":"\\ufb00","ffllig":"\\ufb04","Ffr":"\\ud835\\udd09","ffr":"\\ud835\\udd23","filig":"\\ufb01","FilledSmallSquare":"\\u25fc","FilledVerySmallSquare":"\\u25aa","fjlig":"fj","flat":"\\u266d","fllig":"\\ufb02","fltns":"\\u25b1","fnof":"\\u0192","Fopf":"\\ud835\\udd3d","fopf":"\\ud835\\udd57","forall":"\\u2200","ForAll":"\\u2200","fork":"\\u22d4","forkv":"\\u2ad9","Fouriertrf":"\\u2131","fpartint":"\\u2a0d","frac12":"\\xbd","frac13":"\\u2153","frac14":"\\xbc","frac15":"\\u2155","frac16":"\\u2159","frac18":"\\u215b","frac23":"\\u2154","frac25":"\\u2156","frac34":"\\xbe","frac35":"\\u2157","frac38":"\\u215c","frac45":"\\u2158","frac56":"\\u215a","frac58":"\\u215d","frac78":"\\u215e","frasl":"\\u2044","frown":"\\u2322","fscr":"\\ud835\\udcbb","Fscr":"\\u2131","gacute":"\\u01f5","Gamma":"\\u0393","gamma":"\\u03b3","Gammad":"\\u03dc","gammad":"\\u03dd","gap":"\\u2a86","Gbreve":"\\u011e","gbreve":"\\u011f","Gcedil":"\\u0122","Gcirc":"\\u011c","gcirc":"\\u011d","Gcy":"\\u0413","gcy":"\\u0433","Gdot":"\\u0120","gdot":"\\u0121","ge":"\\u2265","gE":"\\u2267","gEl":"\\u2a8c","gel":"\\u22db","geq":"\\u2265","geqq":"\\u2267","geqslant":"\\u2a7e","gescc":"\\u2aa9","ges":"\\u2a7e","gesdot":"\\u2a80","gesdoto":"\\u2a82","gesdotol":"\\u2a84","gesl":"\\u22db\\ufe00","gesles":"\\u2a94","Gfr":"\\ud835\\udd0a","gfr":"\\ud835\\udd24","gg":"\\u226b","Gg":"\\u22d9","ggg":"\\u22d9","gimel":"\\u2137","GJcy":"\\u0403","gjcy":"\\u0453","gla":"\\u2aa5","gl":"\\u2277","glE":"\\u2a92","glj":"\\u2aa4","gnap":"\\u2a8a","gnapprox":"\\u2a8a","gne":"\\u2a88","gnE":"\\u2269","gneq":"\\u2a88","gneqq":"\\u2269","gnsim":"\\u22e7","Gopf":"\\ud835\\udd3e","gopf":"\\ud835\\udd58","grave":"`","GreaterEqual":"\\u2265","GreaterEqualLess":"\\u22db","GreaterFullEqual":"\\u2267","GreaterGreater":"\\u2aa2","GreaterLess":"\\u2277","GreaterSlantEqual":"\\u2a7e","GreaterTilde":"\\u2273","Gscr":"\\ud835\\udca2","gscr":"\\u210a","gsim":"\\u2273","gsime":"\\u2a8e","gsiml":"\\u2a90","gtcc":"\\u2aa7","gtcir":"\\u2a7a","gt":">","GT":">","Gt":"\\u226b","gtdot":"\\u22d7","gtlPar":"\\u2995","gtquest":"\\u2a7c","gtrapprox":"\\u2a86","gtrarr":"\\u2978","gtrdot":"\\u22d7","gtreqless":"\\u22db","gtreqqless":"\\u2a8c","gtrless":"\\u2277","gtrsim":"\\u2273","gvertneqq":"\\u2269\\ufe00","gvnE":"\\u2269\\ufe00","Hacek":"\\u02c7","hairsp":"\\u200a","half":"\\xbd","hamilt":"\\u210b","HARDcy":"\\u042a","hardcy":"\\u044a","harrcir":"\\u2948","harr":"\\u2194","hArr":"\\u21d4","harrw":"\\u21ad","Hat":"^","hbar":"\\u210f","Hcirc":"\\u0124","hcirc":"\\u0125","hearts":"\\u2665","heartsuit":"\\u2665","hellip":"\\u2026","hercon":"\\u22b9","hfr":"\\ud835\\udd25","Hfr":"\\u210c","HilbertSpace":"\\u210b","hksearow":"\\u2925","hkswarow":"\\u2926","hoarr":"\\u21ff","homtht":"\\u223b","hookleftarrow":"\\u21a9","hookrightarrow":"\\u21aa","hopf":"\\ud835\\udd59","Hopf":"\\u210d","horbar":"\\u2015","HorizontalLine":"\\u2500","hscr":"\\ud835\\udcbd","Hscr":"\\u210b","hslash":"\\u210f","Hstrok":"\\u0126","hstrok":"\\u0127","HumpDownHump":"\\u224e","HumpEqual":"\\u224f","hybull":"\\u2043","hyphen":"\\u2010","Iacute":"\\xcd","iacute":"\\xed","ic":"\\u2063","Icirc":"\\xce","icirc":"\\xee","Icy":"\\u0418","icy":"\\u0438","Idot":"\\u0130","IEcy":"\\u0415","iecy":"\\u0435","iexcl":"\\xa1","iff":"\\u21d4","ifr":"\\ud835\\udd26","Ifr":"\\u2111","Igrave":"\\xcc","igrave":"\\xec","ii":"\\u2148","iiiint":"\\u2a0c","iiint":"\\u222d","iinfin":"\\u29dc","iiota":"\\u2129","IJlig":"\\u0132","ijlig":"\\u0133","Imacr":"\\u012a","imacr":"\\u012b","image":"\\u2111","ImaginaryI":"\\u2148","imagline":"\\u2110","imagpart":"\\u2111","imath":"\\u0131","Im":"\\u2111","imof":"\\u22b7","imped":"\\u01b5","Implies":"\\u21d2","incare":"\\u2105","in":"\\u2208","infin":"\\u221e","infintie":"\\u29dd","inodot":"\\u0131","intcal":"\\u22ba","int":"\\u222b","Int":"\\u222c","integers":"\\u2124","Integral":"\\u222b","intercal":"\\u22ba","Intersection":"\\u22c2","intlarhk":"\\u2a17","intprod":"\\u2a3c","InvisibleComma":"\\u2063","InvisibleTimes":"\\u2062","IOcy":"\\u0401","iocy":"\\u0451","Iogon":"\\u012e","iogon":"\\u012f","Iopf":"\\ud835\\udd40","iopf":"\\ud835\\udd5a","Iota":"\\u0399","iota":"\\u03b9","iprod":"\\u2a3c","iquest":"\\xbf","iscr":"\\ud835\\udcbe","Iscr":"\\u2110","isin":"\\u2208","isindot":"\\u22f5","isinE":"\\u22f9","isins":"\\u22f4","isinsv":"\\u22f3","isinv":"\\u2208","it":"\\u2062","Itilde":"\\u0128","itilde":"\\u0129","Iukcy":"\\u0406","iukcy":"\\u0456","Iuml":"\\xcf","iuml":"\\xef","Jcirc":"\\u0134","jcirc":"\\u0135","Jcy":"\\u0419","jcy":"\\u0439","Jfr":"\\ud835\\udd0d","jfr":"\\ud835\\udd27","jmath":"\\u0237","Jopf":"\\ud835\\udd41","jopf":"\\ud835\\udd5b","Jscr":"\\ud835\\udca5","jscr":"\\ud835\\udcbf","Jsercy":"\\u0408","jsercy":"\\u0458","Jukcy":"\\u0404","jukcy":"\\u0454","Kappa":"\\u039a","kappa":"\\u03ba","kappav":"\\u03f0","Kcedil":"\\u0136","kcedil":"\\u0137","Kcy":"\\u041a","kcy":"\\u043a","Kfr":"\\ud835\\udd0e","kfr":"\\ud835\\udd28","kgreen":"\\u0138","KHcy":"\\u0425","khcy":"\\u0445","KJcy":"\\u040c","kjcy":"\\u045c","Kopf":"\\ud835\\udd42","kopf":"\\ud835\\udd5c","Kscr":"\\ud835\\udca6","kscr":"\\ud835\\udcc0","lAarr":"\\u21da","Lacute":"\\u0139","lacute":"\\u013a","laemptyv":"\\u29b4","lagran":"\\u2112","Lambda":"\\u039b","lambda":"\\u03bb","lang":"\\u27e8","Lang":"\\u27ea","langd":"\\u2991","langle":"\\u27e8","lap":"\\u2a85","Laplacetrf":"\\u2112","laquo":"\\xab","larrb":"\\u21e4","larrbfs":"\\u291f","larr":"\\u2190","Larr":"\\u219e","lArr":"\\u21d0","larrfs":"\\u291d","larrhk":"\\u21a9","larrlp":"\\u21ab","larrpl":"\\u2939","larrsim":"\\u2973","larrtl":"\\u21a2","latail":"\\u2919","lAtail":"\\u291b","lat":"\\u2aab","late":"\\u2aad","lates":"\\u2aad\\ufe00","lbarr":"\\u290c","lBarr":"\\u290e","lbbrk":"\\u2772","lbrace":"{","lbrack":"[","lbrke":"\\u298b","lbrksld":"\\u298f","lbrkslu":"\\u298d","Lcaron":"\\u013d","lcaron":"\\u013e","Lcedil":"\\u013b","lcedil":"\\u013c","lceil":"\\u2308","lcub":"{","Lcy":"\\u041b","lcy":"\\u043b","ldca":"\\u2936","ldquo":"\\u201c","ldquor":"\\u201e","ldrdhar":"\\u2967","ldrushar":"\\u294b","ldsh":"\\u21b2","le":"\\u2264","lE":"\\u2266","LeftAngleBracket":"\\u27e8","LeftArrowBar":"\\u21e4","leftarrow":"\\u2190","LeftArrow":"\\u2190","Leftarrow":"\\u21d0","LeftArrowRightArrow":"\\u21c6","leftarrowtail":"\\u21a2","LeftCeiling":"\\u2308","LeftDoubleBracket":"\\u27e6","LeftDownTeeVector":"\\u2961","LeftDownVectorBar":"\\u2959","LeftDownVector":"\\u21c3","LeftFloor":"\\u230a","leftharpoondown":"\\u21bd","leftharpoonup":"\\u21bc","leftleftarrows":"\\u21c7","leftrightarrow":"\\u2194","LeftRightArrow":"\\u2194","Leftrightarrow":"\\u21d4","leftrightarrows":"\\u21c6","leftrightharpoons":"\\u21cb","leftrightsquigarrow":"\\u21ad","LeftRightVector":"\\u294e","LeftTeeArrow":"\\u21a4","LeftTee":"\\u22a3","LeftTeeVector":"\\u295a","leftthreetimes":"\\u22cb","LeftTriangleBar":"\\u29cf","LeftTriangle":"\\u22b2","LeftTriangleEqual":"\\u22b4","LeftUpDownVector":"\\u2951","LeftUpTeeVector":"\\u2960","LeftUpVectorBar":"\\u2958","LeftUpVector":"\\u21bf","LeftVectorBar":"\\u2952","LeftVector":"\\u21bc","lEg":"\\u2a8b","leg":"\\u22da","leq":"\\u2264","leqq":"\\u2266","leqslant":"\\u2a7d","lescc":"\\u2aa8","les":"\\u2a7d","lesdot":"\\u2a7f","lesdoto":"\\u2a81","lesdotor":"\\u2a83","lesg":"\\u22da\\ufe00","lesges":"\\u2a93","lessapprox":"\\u2a85","lessdot":"\\u22d6","lesseqgtr":"\\u22da","lesseqqgtr":"\\u2a8b","LessEqualGreater":"\\u22da","LessFullEqual":"\\u2266","LessGreater":"\\u2276","lessgtr":"\\u2276","LessLess":"\\u2aa1","lesssim":"\\u2272","LessSlantEqual":"\\u2a7d","LessTilde":"\\u2272","lfisht":"\\u297c","lfloor":"\\u230a","Lfr":"\\ud835\\udd0f","lfr":"\\ud835\\udd29","lg":"\\u2276","lgE":"\\u2a91","lHar":"\\u2962","lhard":"\\u21bd","lharu":"\\u21bc","lharul":"\\u296a","lhblk":"\\u2584","LJcy":"\\u0409","ljcy":"\\u0459","llarr":"\\u21c7","ll":"\\u226a","Ll":"\\u22d8","llcorner":"\\u231e","Lleftarrow":"\\u21da","llhard":"\\u296b","lltri":"\\u25fa","Lmidot":"\\u013f","lmidot":"\\u0140","lmoustache":"\\u23b0","lmoust":"\\u23b0","lnap":"\\u2a89","lnapprox":"\\u2a89","lne":"\\u2a87","lnE":"\\u2268","lneq":"\\u2a87","lneqq":"\\u2268","lnsim":"\\u22e6","loang":"\\u27ec","loarr":"\\u21fd","lobrk":"\\u27e6","longleftarrow":"\\u27f5","LongLeftArrow":"\\u27f5","Longleftarrow":"\\u27f8","longleftrightarrow":"\\u27f7","LongLeftRightArrow":"\\u27f7","Longleftrightarrow":"\\u27fa","longmapsto":"\\u27fc","longrightarrow":"\\u27f6","LongRightArrow":"\\u27f6","Longrightarrow":"\\u27f9","looparrowleft":"\\u21ab","looparrowright":"\\u21ac","lopar":"\\u2985","Lopf":"\\ud835\\udd43","lopf":"\\ud835\\udd5d","loplus":"\\u2a2d","lotimes":"\\u2a34","lowast":"\\u2217","lowbar":"_","LowerLeftArrow":"\\u2199","LowerRightArrow":"\\u2198","loz":"\\u25ca","lozenge":"\\u25ca","lozf":"\\u29eb","lpar":"(","lparlt":"\\u2993","lrarr":"\\u21c6","lrcorner":"\\u231f","lrhar":"\\u21cb","lrhard":"\\u296d","lrm":"\\u200e","lrtri":"\\u22bf","lsaquo":"\\u2039","lscr":"\\ud835\\udcc1","Lscr":"\\u2112","lsh":"\\u21b0","Lsh":"\\u21b0","lsim":"\\u2272","lsime":"\\u2a8d","lsimg":"\\u2a8f","lsqb":"[","lsquo":"\\u2018","lsquor":"\\u201a","Lstrok":"\\u0141","lstrok":"\\u0142","ltcc":"\\u2aa6","ltcir":"\\u2a79","lt":"<","LT":"<","Lt":"\\u226a","ltdot":"\\u22d6","lthree":"\\u22cb","ltimes":"\\u22c9","ltlarr":"\\u2976","ltquest":"\\u2a7b","ltri":"\\u25c3","ltrie":"\\u22b4","ltrif":"\\u25c2","ltrPar":"\\u2996","lurdshar":"\\u294a","luruhar":"\\u2966","lvertneqq":"\\u2268\\ufe00","lvnE":"\\u2268\\ufe00","macr":"\\xaf","male":"\\u2642","malt":"\\u2720","maltese":"\\u2720","Map":"\\u2905","map":"\\u21a6","mapsto":"\\u21a6","mapstodown":"\\u21a7","mapstoleft":"\\u21a4","mapstoup":"\\u21a5","marker":"\\u25ae","mcomma":"\\u2a29","Mcy":"\\u041c","mcy":"\\u043c","mdash":"\\u2014","mDDot":"\\u223a","measuredangle":"\\u2221","MediumSpace":"\\u205f","Mellintrf":"\\u2133","Mfr":"\\ud835\\udd10","mfr":"\\ud835\\udd2a","mho":"\\u2127","micro":"\\xb5","midast":"*","midcir":"\\u2af0","mid":"\\u2223","middot":"\\xb7","minusb":"\\u229f","minus":"\\u2212","minusd":"\\u2238","minusdu":"\\u2a2a","MinusPlus":"\\u2213","mlcp":"\\u2adb","mldr":"\\u2026","mnplus":"\\u2213","models":"\\u22a7","Mopf":"\\ud835\\udd44","mopf":"\\ud835\\udd5e","mp":"\\u2213","mscr":"\\ud835\\udcc2","Mscr":"\\u2133","mstpos":"\\u223e","Mu":"\\u039c","mu":"\\u03bc","multimap":"\\u22b8","mumap":"\\u22b8","nabla":"\\u2207","Nacute":"\\u0143","nacute":"\\u0144","nang":"\\u2220\\u20d2","nap":"\\u2249","napE":"\\u2a70\\u0338","napid":"\\u224b\\u0338","napos":"\\u0149","napprox":"\\u2249","natural":"\\u266e","naturals":"\\u2115","natur":"\\u266e","nbsp":"\\xa0","nbump":"\\u224e\\u0338","nbumpe":"\\u224f\\u0338","ncap":"\\u2a43","Ncaron":"\\u0147","ncaron":"\\u0148","Ncedil":"\\u0145","ncedil":"\\u0146","ncong":"\\u2247","ncongdot":"\\u2a6d\\u0338","ncup":"\\u2a42","Ncy":"\\u041d","ncy":"\\u043d","ndash":"\\u2013","nearhk":"\\u2924","nearr":"\\u2197","neArr":"\\u21d7","nearrow":"\\u2197","ne":"\\u2260","nedot":"\\u2250\\u0338","NegativeMediumSpace":"\\u200b","NegativeThickSpace":"\\u200b","NegativeThinSpace":"\\u200b","NegativeVeryThinSpace":"\\u200b","nequiv":"\\u2262","nesear":"\\u2928","nesim":"\\u2242\\u0338","NestedGreaterGreater":"\\u226b","NestedLessLess":"\\u226a","NewLine":"\\\\n","nexist":"\\u2204","nexists":"\\u2204","Nfr":"\\ud835\\udd11","nfr":"\\ud835\\udd2b","ngE":"\\u2267\\u0338","nge":"\\u2271","ngeq":"\\u2271","ngeqq":"\\u2267\\u0338","ngeqslant":"\\u2a7e\\u0338","nges":"\\u2a7e\\u0338","nGg":"\\u22d9\\u0338","ngsim":"\\u2275","nGt":"\\u226b\\u20d2","ngt":"\\u226f","ngtr":"\\u226f","nGtv":"\\u226b\\u0338","nharr":"\\u21ae","nhArr":"\\u21ce","nhpar":"\\u2af2","ni":"\\u220b","nis":"\\u22fc","nisd":"\\u22fa","niv":"\\u220b","NJcy":"\\u040a","njcy":"\\u045a","nlarr":"\\u219a","nlArr":"\\u21cd","nldr":"\\u2025","nlE":"\\u2266\\u0338","nle":"\\u2270","nleftarrow":"\\u219a","nLeftarrow":"\\u21cd","nleftrightarrow":"\\u21ae","nLeftrightarrow":"\\u21ce","nleq":"\\u2270","nleqq":"\\u2266\\u0338","nleqslant":"\\u2a7d\\u0338","nles":"\\u2a7d\\u0338","nless":"\\u226e","nLl":"\\u22d8\\u0338","nlsim":"\\u2274","nLt":"\\u226a\\u20d2","nlt":"\\u226e","nltri":"\\u22ea","nltrie":"\\u22ec","nLtv":"\\u226a\\u0338","nmid":"\\u2224","NoBreak":"\\u2060","NonBreakingSpace":"\\xa0","nopf":"\\ud835\\udd5f","Nopf":"\\u2115","Not":"\\u2aec","not":"\\xac","NotCongruent":"\\u2262","NotCupCap":"\\u226d","NotDoubleVerticalBar":"\\u2226","NotElement":"\\u2209","NotEqual":"\\u2260","NotEqualTilde":"\\u2242\\u0338","NotExists":"\\u2204","NotGreater":"\\u226f","NotGreaterEqual":"\\u2271","NotGreaterFullEqual":"\\u2267\\u0338","NotGreaterGreater":"\\u226b\\u0338","NotGreaterLess":"\\u2279","NotGreaterSlantEqual":"\\u2a7e\\u0338","NotGreaterTilde":"\\u2275","NotHumpDownHump":"\\u224e\\u0338","NotHumpEqual":"\\u224f\\u0338","notin":"\\u2209","notindot":"\\u22f5\\u0338","notinE":"\\u22f9\\u0338","notinva":"\\u2209","notinvb":"\\u22f7","notinvc":"\\u22f6","NotLeftTriangleBar":"\\u29cf\\u0338","NotLeftTriangle":"\\u22ea","NotLeftTriangleEqual":"\\u22ec","NotLess":"\\u226e","NotLessEqual":"\\u2270","NotLessGreater":"\\u2278","NotLessLess":"\\u226a\\u0338","NotLessSlantEqual":"\\u2a7d\\u0338","NotLessTilde":"\\u2274","NotNestedGreaterGreater":"\\u2aa2\\u0338","NotNestedLessLess":"\\u2aa1\\u0338","notni":"\\u220c","notniva":"\\u220c","notnivb":"\\u22fe","notnivc":"\\u22fd","NotPrecedes":"\\u2280","NotPrecedesEqual":"\\u2aaf\\u0338","NotPrecedesSlantEqual":"\\u22e0","NotReverseElement":"\\u220c","NotRightTriangleBar":"\\u29d0\\u0338","NotRightTriangle":"\\u22eb","NotRightTriangleEqual":"\\u22ed","NotSquareSubset":"\\u228f\\u0338","NotSquareSubsetEqual":"\\u22e2","NotSquareSuperset":"\\u2290\\u0338","NotSquareSupersetEqual":"\\u22e3","NotSubset":"\\u2282\\u20d2","NotSubsetEqual":"\\u2288","NotSucceeds":"\\u2281","NotSucceedsEqual":"\\u2ab0\\u0338","NotSucceedsSlantEqual":"\\u22e1","NotSucceedsTilde":"\\u227f\\u0338","NotSuperset":"\\u2283\\u20d2","NotSupersetEqual":"\\u2289","NotTilde":"\\u2241","NotTildeEqual":"\\u2244","NotTildeFullEqual":"\\u2247","NotTildeTilde":"\\u2249","NotVerticalBar":"\\u2224","nparallel":"\\u2226","npar":"\\u2226","nparsl":"\\u2afd\\u20e5","npart":"\\u2202\\u0338","npolint":"\\u2a14","npr":"\\u2280","nprcue":"\\u22e0","nprec":"\\u2280","npreceq":"\\u2aaf\\u0338","npre":"\\u2aaf\\u0338","nrarrc":"\\u2933\\u0338","nrarr":"\\u219b","nrArr":"\\u21cf","nrarrw":"\\u219d\\u0338","nrightarrow":"\\u219b","nRightarrow":"\\u21cf","nrtri":"\\u22eb","nrtrie":"\\u22ed","nsc":"\\u2281","nsccue":"\\u22e1","nsce":"\\u2ab0\\u0338","Nscr":"\\ud835\\udca9","nscr":"\\ud835\\udcc3","nshortmid":"\\u2224","nshortparallel":"\\u2226","nsim":"\\u2241","nsime":"\\u2244","nsimeq":"\\u2244","nsmid":"\\u2224","nspar":"\\u2226","nsqsube":"\\u22e2","nsqsupe":"\\u22e3","nsub":"\\u2284","nsubE":"\\u2ac5\\u0338","nsube":"\\u2288","nsubset":"\\u2282\\u20d2","nsubseteq":"\\u2288","nsubseteqq":"\\u2ac5\\u0338","nsucc":"\\u2281","nsucceq":"\\u2ab0\\u0338","nsup":"\\u2285","nsupE":"\\u2ac6\\u0338","nsupe":"\\u2289","nsupset":"\\u2283\\u20d2","nsupseteq":"\\u2289","nsupseteqq":"\\u2ac6\\u0338","ntgl":"\\u2279","Ntilde":"\\xd1","ntilde":"\\xf1","ntlg":"\\u2278","ntriangleleft":"\\u22ea","ntrianglelefteq":"\\u22ec","ntriangleright":"\\u22eb","ntrianglerighteq":"\\u22ed","Nu":"\\u039d","nu":"\\u03bd","num":"#","numero":"\\u2116","numsp":"\\u2007","nvap":"\\u224d\\u20d2","nvdash":"\\u22ac","nvDash":"\\u22ad","nVdash":"\\u22ae","nVDash":"\\u22af","nvge":"\\u2265\\u20d2","nvgt":">\\u20d2","nvHarr":"\\u2904","nvinfin":"\\u29de","nvlArr":"\\u2902","nvle":"\\u2264\\u20d2","nvlt":"<\\u20d2","nvltrie":"\\u22b4\\u20d2","nvrArr":"\\u2903","nvrtrie":"\\u22b5\\u20d2","nvsim":"\\u223c\\u20d2","nwarhk":"\\u2923","nwarr":"\\u2196","nwArr":"\\u21d6","nwarrow":"\\u2196","nwnear":"\\u2927","Oacute":"\\xd3","oacute":"\\xf3","oast":"\\u229b","Ocirc":"\\xd4","ocirc":"\\xf4","ocir":"\\u229a","Ocy":"\\u041e","ocy":"\\u043e","odash":"\\u229d","Odblac":"\\u0150","odblac":"\\u0151","odiv":"\\u2a38","odot":"\\u2299","odsold":"\\u29bc","OElig":"\\u0152","oelig":"\\u0153","ofcir":"\\u29bf","Ofr":"\\ud835\\udd12","ofr":"\\ud835\\udd2c","ogon":"\\u02db","Ograve":"\\xd2","ograve":"\\xf2","ogt":"\\u29c1","ohbar":"\\u29b5","ohm":"\\u03a9","oint":"\\u222e","olarr":"\\u21ba","olcir":"\\u29be","olcross":"\\u29bb","oline":"\\u203e","olt":"\\u29c0","Omacr":"\\u014c","omacr":"\\u014d","Omega":"\\u03a9","omega":"\\u03c9","Omicron":"\\u039f","omicron":"\\u03bf","omid":"\\u29b6","ominus":"\\u2296","Oopf":"\\ud835\\udd46","oopf":"\\ud835\\udd60","opar":"\\u29b7","OpenCurlyDoubleQuote":"\\u201c","OpenCurlyQuote":"\\u2018","operp":"\\u29b9","oplus":"\\u2295","orarr":"\\u21bb","Or":"\\u2a54","or":"\\u2228","ord":"\\u2a5d","order":"\\u2134","orderof":"\\u2134","ordf":"\\xaa","ordm":"\\xba","origof":"\\u22b6","oror":"\\u2a56","orslope":"\\u2a57","orv":"\\u2a5b","oS":"\\u24c8","Oscr":"\\ud835\\udcaa","oscr":"\\u2134","Oslash":"\\xd8","oslash":"\\xf8","osol":"\\u2298","Otilde":"\\xd5","otilde":"\\xf5","otimesas":"\\u2a36","Otimes":"\\u2a37","otimes":"\\u2297","Ouml":"\\xd6","ouml":"\\xf6","ovbar":"\\u233d","OverBar":"\\u203e","OverBrace":"\\u23de","OverBracket":"\\u23b4","OverParenthesis":"\\u23dc","para":"\\xb6","parallel":"\\u2225","par":"\\u2225","parsim":"\\u2af3","parsl":"\\u2afd","part":"\\u2202","PartialD":"\\u2202","Pcy":"\\u041f","pcy":"\\u043f","percnt":"%","period":".","permil":"\\u2030","perp":"\\u22a5","pertenk":"\\u2031","Pfr":"\\ud835\\udd13","pfr":"\\ud835\\udd2d","Phi":"\\u03a6","phi":"\\u03c6","phiv":"\\u03d5","phmmat":"\\u2133","phone":"\\u260e","Pi":"\\u03a0","pi":"\\u03c0","pitchfork":"\\u22d4","piv":"\\u03d6","planck":"\\u210f","planckh":"\\u210e","plankv":"\\u210f","plusacir":"\\u2a23","plusb":"\\u229e","pluscir":"\\u2a22","plus":"+","plusdo":"\\u2214","plusdu":"\\u2a25","pluse":"\\u2a72","PlusMinus":"\\xb1","plusmn":"\\xb1","plussim":"\\u2a26","plustwo":"\\u2a27","pm":"\\xb1","Poincareplane":"\\u210c","pointint":"\\u2a15","popf":"\\ud835\\udd61","Popf":"\\u2119","pound":"\\xa3","prap":"\\u2ab7","Pr":"\\u2abb","pr":"\\u227a","prcue":"\\u227c","precapprox":"\\u2ab7","prec":"\\u227a","preccurlyeq":"\\u227c","Precedes":"\\u227a","PrecedesEqual":"\\u2aaf","PrecedesSlantEqual":"\\u227c","PrecedesTilde":"\\u227e","preceq":"\\u2aaf","precnapprox":"\\u2ab9","precneqq":"\\u2ab5","precnsim":"\\u22e8","pre":"\\u2aaf","prE":"\\u2ab3","precsim":"\\u227e","prime":"\\u2032","Prime":"\\u2033","primes":"\\u2119","prnap":"\\u2ab9","prnE":"\\u2ab5","prnsim":"\\u22e8","prod":"\\u220f","Product":"\\u220f","profalar":"\\u232e","profline":"\\u2312","profsurf":"\\u2313","prop":"\\u221d","Proportional":"\\u221d","Proportion":"\\u2237","propto":"\\u221d","prsim":"\\u227e","prurel":"\\u22b0","Pscr":"\\ud835\\udcab","pscr":"\\ud835\\udcc5","Psi":"\\u03a8","psi":"\\u03c8","puncsp":"\\u2008","Qfr":"\\ud835\\udd14","qfr":"\\ud835\\udd2e","qint":"\\u2a0c","qopf":"\\ud835\\udd62","Qopf":"\\u211a","qprime":"\\u2057","Qscr":"\\ud835\\udcac","qscr":"\\ud835\\udcc6","quaternions":"\\u210d","quatint":"\\u2a16","quest":"?","questeq":"\\u225f","quot":"\\\\"","QUOT":"\\\\"","rAarr":"\\u21db","race":"\\u223d\\u0331","Racute":"\\u0154","racute":"\\u0155","radic":"\\u221a","raemptyv":"\\u29b3","rang":"\\u27e9","Rang":"\\u27eb","rangd":"\\u2992","range":"\\u29a5","rangle":"\\u27e9","raquo":"\\xbb","rarrap":"\\u2975","rarrb":"\\u21e5","rarrbfs":"\\u2920","rarrc":"\\u2933","rarr":"\\u2192","Rarr":"\\u21a0","rArr":"\\u21d2","rarrfs":"\\u291e","rarrhk":"\\u21aa","rarrlp":"\\u21ac","rarrpl":"\\u2945","rarrsim":"\\u2974","Rarrtl":"\\u2916","rarrtl":"\\u21a3","rarrw":"\\u219d","ratail":"\\u291a","rAtail":"\\u291c","ratio":"\\u2236","rationals":"\\u211a","rbarr":"\\u290d","rBarr":"\\u290f","RBarr":"\\u2910","rbbrk":"\\u2773","rbrace":"}","rbrack":"]","rbrke":"\\u298c","rbrksld":"\\u298e","rbrkslu":"\\u2990","Rcaron":"\\u0158","rcaron":"\\u0159","Rcedil":"\\u0156","rcedil":"\\u0157","rceil":"\\u2309","rcub":"}","Rcy":"\\u0420","rcy":"\\u0440","rdca":"\\u2937","rdldhar":"\\u2969","rdquo":"\\u201d","rdquor":"\\u201d","rdsh":"\\u21b3","real":"\\u211c","realine":"\\u211b","realpart":"\\u211c","reals":"\\u211d","Re":"\\u211c","rect":"\\u25ad","reg":"\\xae","REG":"\\xae","ReverseElement":"\\u220b","ReverseEquilibrium":"\\u21cb","ReverseUpEquilibrium":"\\u296f","rfisht":"\\u297d","rfloor":"\\u230b","rfr":"\\ud835\\udd2f","Rfr":"\\u211c","rHar":"\\u2964","rhard":"\\u21c1","rharu":"\\u21c0","rharul":"\\u296c","Rho":"\\u03a1","rho":"\\u03c1","rhov":"\\u03f1","RightAngleBracket":"\\u27e9","RightArrowBar":"\\u21e5","rightarrow":"\\u2192","RightArrow":"\\u2192","Rightarrow":"\\u21d2","RightArrowLeftArrow":"\\u21c4","rightarrowtail":"\\u21a3","RightCeiling":"\\u2309","RightDoubleBracket":"\\u27e7","RightDownTeeVector":"\\u295d","RightDownVectorBar":"\\u2955","RightDownVector":"\\u21c2","RightFloor":"\\u230b","rightharpoondown":"\\u21c1","rightharpoonup":"\\u21c0","rightleftarrows":"\\u21c4","rightleftharpoons":"\\u21cc","rightrightarrows":"\\u21c9","rightsquigarrow":"\\u219d","RightTeeArrow":"\\u21a6","RightTee":"\\u22a2","RightTeeVector":"\\u295b","rightthreetimes":"\\u22cc","RightTriangleBar":"\\u29d0","RightTriangle":"\\u22b3","RightTriangleEqual":"\\u22b5","RightUpDownVector":"\\u294f","RightUpTeeVector":"\\u295c","RightUpVectorBar":"\\u2954","RightUpVector":"\\u21be","RightVectorBar":"\\u2953","RightVector":"\\u21c0","ring":"\\u02da","risingdotseq":"\\u2253","rlarr":"\\u21c4","rlhar":"\\u21cc","rlm":"\\u200f","rmoustache":"\\u23b1","rmoust":"\\u23b1","rnmid":"\\u2aee","roang":"\\u27ed","roarr":"\\u21fe","robrk":"\\u27e7","ropar":"\\u2986","ropf":"\\ud835\\udd63","Ropf":"\\u211d","roplus":"\\u2a2e","rotimes":"\\u2a35","RoundImplies":"\\u2970","rpar":")","rpargt":"\\u2994","rppolint":"\\u2a12","rrarr":"\\u21c9","Rrightarrow":"\\u21db","rsaquo":"\\u203a","rscr":"\\ud835\\udcc7","Rscr":"\\u211b","rsh":"\\u21b1","Rsh":"\\u21b1","rsqb":"]","rsquo":"\\u2019","rsquor":"\\u2019","rthree":"\\u22cc","rtimes":"\\u22ca","rtri":"\\u25b9","rtrie":"\\u22b5","rtrif":"\\u25b8","rtriltri":"\\u29ce","RuleDelayed":"\\u29f4","ruluhar":"\\u2968","rx":"\\u211e","Sacute":"\\u015a","sacute":"\\u015b","sbquo":"\\u201a","scap":"\\u2ab8","Scaron":"\\u0160","scaron":"\\u0161","Sc":"\\u2abc","sc":"\\u227b","sccue":"\\u227d","sce":"\\u2ab0","scE":"\\u2ab4","Scedil":"\\u015e","scedil":"\\u015f","Scirc":"\\u015c","scirc":"\\u015d","scnap":"\\u2aba","scnE":"\\u2ab6","scnsim":"\\u22e9","scpolint":"\\u2a13","scsim":"\\u227f","Scy":"\\u0421","scy":"\\u0441","sdotb":"\\u22a1","sdot":"\\u22c5","sdote":"\\u2a66","searhk":"\\u2925","searr":"\\u2198","seArr":"\\u21d8","searrow":"\\u2198","sect":"\\xa7","semi":";","seswar":"\\u2929","setminus":"\\u2216","setmn":"\\u2216","sext":"\\u2736","Sfr":"\\ud835\\udd16","sfr":"\\ud835\\udd30","sfrown":"\\u2322","sharp":"\\u266f","SHCHcy":"\\u0429","shchcy":"\\u0449","SHcy":"\\u0428","shcy":"\\u0448","ShortDownArrow":"\\u2193","ShortLeftArrow":"\\u2190","shortmid":"\\u2223","shortparallel":"\\u2225","ShortRightArrow":"\\u2192","ShortUpArrow":"\\u2191","shy":"\\xad","Sigma":"\\u03a3","sigma":"\\u03c3","sigmaf":"\\u03c2","sigmav":"\\u03c2","sim":"\\u223c","simdot":"\\u2a6a","sime":"\\u2243","simeq":"\\u2243","simg":"\\u2a9e","simgE":"\\u2aa0","siml":"\\u2a9d","simlE":"\\u2a9f","simne":"\\u2246","simplus":"\\u2a24","simrarr":"\\u2972","slarr":"\\u2190","SmallCircle":"\\u2218","smallsetminus":"\\u2216","smashp":"\\u2a33","smeparsl":"\\u29e4","smid":"\\u2223","smile":"\\u2323","smt":"\\u2aaa","smte":"\\u2aac","smtes":"\\u2aac\\ufe00","SOFTcy":"\\u042c","softcy":"\\u044c","solbar":"\\u233f","solb":"\\u29c4","sol":"/","Sopf":"\\ud835\\udd4a","sopf":"\\ud835\\udd64","spades":"\\u2660","spadesuit":"\\u2660","spar":"\\u2225","sqcap":"\\u2293","sqcaps":"\\u2293\\ufe00","sqcup":"\\u2294","sqcups":"\\u2294\\ufe00","Sqrt":"\\u221a","sqsub":"\\u228f","sqsube":"\\u2291","sqsubset":"\\u228f","sqsubseteq":"\\u2291","sqsup":"\\u2290","sqsupe":"\\u2292","sqsupset":"\\u2290","sqsupseteq":"\\u2292","square":"\\u25a1","Square":"\\u25a1","SquareIntersection":"\\u2293","SquareSubset":"\\u228f","SquareSubsetEqual":"\\u2291","SquareSuperset":"\\u2290","SquareSupersetEqual":"\\u2292","SquareUnion":"\\u2294","squarf":"\\u25aa","squ":"\\u25a1","squf":"\\u25aa","srarr":"\\u2192","Sscr":"\\ud835\\udcae","sscr":"\\ud835\\udcc8","ssetmn":"\\u2216","ssmile":"\\u2323","sstarf":"\\u22c6","Star":"\\u22c6","star":"\\u2606","starf":"\\u2605","straightepsilon":"\\u03f5","straightphi":"\\u03d5","strns":"\\xaf","sub":"\\u2282","Sub":"\\u22d0","subdot":"\\u2abd","subE":"\\u2ac5","sube":"\\u2286","subedot":"\\u2ac3","submult":"\\u2ac1","subnE":"\\u2acb","subne":"\\u228a","subplus":"\\u2abf","subrarr":"\\u2979","subset":"\\u2282","Subset":"\\u22d0","subseteq":"\\u2286","subseteqq":"\\u2ac5","SubsetEqual":"\\u2286","subsetneq":"\\u228a","subsetneqq":"\\u2acb","subsim":"\\u2ac7","subsub":"\\u2ad5","subsup":"\\u2ad3","succapprox":"\\u2ab8","succ":"\\u227b","succcurlyeq":"\\u227d","Succeeds":"\\u227b","SucceedsEqual":"\\u2ab0","SucceedsSlantEqual":"\\u227d","SucceedsTilde":"\\u227f","succeq":"\\u2ab0","succnapprox":"\\u2aba","succneqq":"\\u2ab6","succnsim":"\\u22e9","succsim":"\\u227f","SuchThat":"\\u220b","sum":"\\u2211","Sum":"\\u2211","sung":"\\u266a","sup1":"\\xb9","sup2":"\\xb2","sup3":"\\xb3","sup":"\\u2283","Sup":"\\u22d1","supdot":"\\u2abe","supdsub":"\\u2ad8","supE":"\\u2ac6","supe":"\\u2287","supedot":"\\u2ac4","Superset":"\\u2283","SupersetEqual":"\\u2287","suphsol":"\\u27c9","suphsub":"\\u2ad7","suplarr":"\\u297b","supmult":"\\u2ac2","supnE":"\\u2acc","supne":"\\u228b","supplus":"\\u2ac0","supset":"\\u2283","Supset":"\\u22d1","supseteq":"\\u2287","supseteqq":"\\u2ac6","supsetneq":"\\u228b","supsetneqq":"\\u2acc","supsim":"\\u2ac8","supsub":"\\u2ad4","supsup":"\\u2ad6","swarhk":"\\u2926","swarr":"\\u2199","swArr":"\\u21d9","swarrow":"\\u2199","swnwar":"\\u292a","szlig":"\\xdf","Tab":"\\\\t","target":"\\u2316","Tau":"\\u03a4","tau":"\\u03c4","tbrk":"\\u23b4","Tcaron":"\\u0164","tcaron":"\\u0165","Tcedil":"\\u0162","tcedil":"\\u0163","Tcy":"\\u0422","tcy":"\\u0442","tdot":"\\u20db","telrec":"\\u2315","Tfr":"\\ud835\\udd17","tfr":"\\ud835\\udd31","there4":"\\u2234","therefore":"\\u2234","Therefore":"\\u2234","Theta":"\\u0398","theta":"\\u03b8","thetasym":"\\u03d1","thetav":"\\u03d1","thickapprox":"\\u2248","thicksim":"\\u223c","ThickSpace":"\\u205f\\u200a","ThinSpace":"\\u2009","thinsp":"\\u2009","thkap":"\\u2248","thksim":"\\u223c","THORN":"\\xde","thorn":"\\xfe","tilde":"\\u02dc","Tilde":"\\u223c","TildeEqual":"\\u2243","TildeFullEqual":"\\u2245","TildeTilde":"\\u2248","timesbar":"\\u2a31","timesb":"\\u22a0","times":"\\xd7","timesd":"\\u2a30","tint":"\\u222d","toea":"\\u2928","topbot":"\\u2336","topcir":"\\u2af1","top":"\\u22a4","Topf":"\\ud835\\udd4b","topf":"\\ud835\\udd65","topfork":"\\u2ada","tosa":"\\u2929","tprime":"\\u2034","trade":"\\u2122","TRADE":"\\u2122","triangle":"\\u25b5","triangledown":"\\u25bf","triangleleft":"\\u25c3","trianglelefteq":"\\u22b4","triangleq":"\\u225c","triangleright":"\\u25b9","trianglerighteq":"\\u22b5","tridot":"\\u25ec","trie":"\\u225c","triminus":"\\u2a3a","TripleDot":"\\u20db","triplus":"\\u2a39","trisb":"\\u29cd","tritime":"\\u2a3b","trpezium":"\\u23e2","Tscr":"\\ud835\\udcaf","tscr":"\\ud835\\udcc9","TScy":"\\u0426","tscy":"\\u0446","TSHcy":"\\u040b","tshcy":"\\u045b","Tstrok":"\\u0166","tstrok":"\\u0167","twixt":"\\u226c","twoheadleftarrow":"\\u219e","twoheadrightarrow":"\\u21a0","Uacute":"\\xda","uacute":"\\xfa","uarr":"\\u2191","Uarr":"\\u219f","uArr":"\\u21d1","Uarrocir":"\\u2949","Ubrcy":"\\u040e","ubrcy":"\\u045e","Ubreve":"\\u016c","ubreve":"\\u016d","Ucirc":"\\xdb","ucirc":"\\xfb","Ucy":"\\u0423","ucy":"\\u0443","udarr":"\\u21c5","Udblac":"\\u0170","udblac":"\\u0171","udhar":"\\u296e","ufisht":"\\u297e","Ufr":"\\ud835\\udd18","ufr":"\\ud835\\udd32","Ugrave":"\\xd9","ugrave":"\\xf9","uHar":"\\u2963","uharl":"\\u21bf","uharr":"\\u21be","uhblk":"\\u2580","ulcorn":"\\u231c","ulcorner":"\\u231c","ulcrop":"\\u230f","ultri":"\\u25f8","Umacr":"\\u016a","umacr":"\\u016b","uml":"\\xa8","UnderBar":"_","UnderBrace":"\\u23df","UnderBracket":"\\u23b5","UnderParenthesis":"\\u23dd","Union":"\\u22c3","UnionPlus":"\\u228e","Uogon":"\\u0172","uogon":"\\u0173","Uopf":"\\ud835\\udd4c","uopf":"\\ud835\\udd66","UpArrowBar":"\\u2912","uparrow":"\\u2191","UpArrow":"\\u2191","Uparrow":"\\u21d1","UpArrowDownArrow":"\\u21c5","updownarrow":"\\u2195","UpDownArrow":"\\u2195","Updownarrow":"\\u21d5","UpEquilibrium":"\\u296e","upharpoonleft":"\\u21bf","upharpoonright":"\\u21be","uplus":"\\u228e","UpperLeftArrow":"\\u2196","UpperRightArrow":"\\u2197","upsi":"\\u03c5","Upsi":"\\u03d2","upsih":"\\u03d2","Upsilon":"\\u03a5","upsilon":"\\u03c5","UpTeeArrow":"\\u21a5","UpTee":"\\u22a5","upuparrows":"\\u21c8","urcorn":"\\u231d","urcorner":"\\u231d","urcrop":"\\u230e","Uring":"\\u016e","uring":"\\u016f","urtri":"\\u25f9","Uscr":"\\ud835\\udcb0","uscr":"\\ud835\\udcca","utdot":"\\u22f0","Utilde":"\\u0168","utilde":"\\u0169","utri":"\\u25b5","utrif":"\\u25b4","uuarr":"\\u21c8","Uuml":"\\xdc","uuml":"\\xfc","uwangle":"\\u29a7","vangrt":"\\u299c","varepsilon":"\\u03f5","varkappa":"\\u03f0","varnothing":"\\u2205","varphi":"\\u03d5","varpi":"\\u03d6","varpropto":"\\u221d","varr":"\\u2195","vArr":"\\u21d5","varrho":"\\u03f1","varsigma":"\\u03c2","varsubsetneq":"\\u228a\\ufe00","varsubsetneqq":"\\u2acb\\ufe00","varsupsetneq":"\\u228b\\ufe00","varsupsetneqq":"\\u2acc\\ufe00","vartheta":"\\u03d1","vartriangleleft":"\\u22b2","vartriangleright":"\\u22b3","vBar":"\\u2ae8","Vbar":"\\u2aeb","vBarv":"\\u2ae9","Vcy":"\\u0412","vcy":"\\u0432","vdash":"\\u22a2","vDash":"\\u22a8","Vdash":"\\u22a9","VDash":"\\u22ab","Vdashl":"\\u2ae6","veebar":"\\u22bb","vee":"\\u2228","Vee":"\\u22c1","veeeq":"\\u225a","vellip":"\\u22ee","verbar":"|","Verbar":"\\u2016","vert":"|","Vert":"\\u2016","VerticalBar":"\\u2223","VerticalLine":"|","VerticalSeparator":"\\u2758","VerticalTilde":"\\u2240","VeryThinSpace":"\\u200a","Vfr":"\\ud835\\udd19","vfr":"\\ud835\\udd33","vltri":"\\u22b2","vnsub":"\\u2282\\u20d2","vnsup":"\\u2283\\u20d2","Vopf":"\\ud835\\udd4d","vopf":"\\ud835\\udd67","vprop":"\\u221d","vrtri":"\\u22b3","Vscr":"\\ud835\\udcb1","vscr":"\\ud835\\udccb","vsubnE":"\\u2acb\\ufe00","vsubne":"\\u228a\\ufe00","vsupnE":"\\u2acc\\ufe00","vsupne":"\\u228b\\ufe00","Vvdash":"\\u22aa","vzigzag":"\\u299a","Wcirc":"\\u0174","wcirc":"\\u0175","wedbar":"\\u2a5f","wedge":"\\u2227","Wedge":"\\u22c0","wedgeq":"\\u2259","weierp":"\\u2118","Wfr":"\\ud835\\udd1a","wfr":"\\ud835\\udd34","Wopf":"\\ud835\\udd4e","wopf":"\\ud835\\udd68","wp":"\\u2118","wr":"\\u2240","wreath":"\\u2240","Wscr":"\\ud835\\udcb2","wscr":"\\ud835\\udccc","xcap":"\\u22c2","xcirc":"\\u25ef","xcup":"\\u22c3","xdtri":"\\u25bd","Xfr":"\\ud835\\udd1b","xfr":"\\ud835\\udd35","xharr":"\\u27f7","xhArr":"\\u27fa","Xi":"\\u039e","xi":"\\u03be","xlarr":"\\u27f5","xlArr":"\\u27f8","xmap":"\\u27fc","xnis":"\\u22fb","xodot":"\\u2a00","Xopf":"\\ud835\\udd4f","xopf":"\\ud835\\udd69","xoplus":"\\u2a01","xotime":"\\u2a02","xrarr":"\\u27f6","xrArr":"\\u27f9","Xscr":"\\ud835\\udcb3","xscr":"\\ud835\\udccd","xsqcup":"\\u2a06","xuplus":"\\u2a04","xutri":"\\u25b3","xvee":"\\u22c1","xwedge":"\\u22c0","Yacute":"\\xdd","yacute":"\\xfd","YAcy":"\\u042f","yacy":"\\u044f","Ycirc":"\\u0176","ycirc":"\\u0177","Ycy":"\\u042b","ycy":"\\u044b","yen":"\\xa5","Yfr":"\\ud835\\udd1c","yfr":"\\ud835\\udd36","YIcy":"\\u0407","yicy":"\\u0457","Yopf":"\\ud835\\udd50","yopf":"\\ud835\\udd6a","Yscr":"\\ud835\\udcb4","yscr":"\\ud835\\udcce","YUcy":"\\u042e","yucy":"\\u044e","yuml":"\\xff","Yuml":"\\u0178","Zacute":"\\u0179","zacute":"\\u017a","Zcaron":"\\u017d","zcaron":"\\u017e","Zcy":"\\u0417","zcy":"\\u0437","Zdot":"\\u017b","zdot":"\\u017c","zeetrf":"\\u2128","ZeroWidthSpace":"\\u200b","Zeta":"\\u0396","zeta":"\\u03b6","zfr":"\\ud835\\udd37","Zfr":"\\u2128","ZHcy":"\\u0416","zhcy":"\\u0436","zigrarr":"\\u21dd","zopf":"\\ud835\\udd6b","Zopf":"\\u2124","Zscr":"\\ud835\\udcb5","zscr":"\\ud835\\udccf","zwj":"\\u200d","zwnj":"\\u200c"}\');\n}, function(t) {\n t.exports = JSON.parse(\'{"amp":"&","apos":"\\\'","gt":">","lt":"<","quot":"\\\\""}\');\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.isTag = function(t) {\n return "tag" === t.type || "script" === t.type || "style" === t.type;\n }, e.Text = "text", e.Directive = "directive", e.Comment = "comment", e.Script = "script", \n e.Style = "style", e.Tag = "tag", e.CDATA = "cdata", e.Doctype = "doctype";\n}, function(t, e, r) {\n "use strict";\n var n, i = this && this.__extends || (n = function(t, e) {\n return (n = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function(t, e) {\n t.__proto__ = e;\n } || function(t, e) {\n for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n })(t, e);\n }, function(t, e) {\n function r() {\n this.constructor = t;\n }\n n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n new r);\n }), s = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var o = s(r(17)), a = r(35), u = new Set([ "input", "option", "optgroup", "select", "button", "datalist", "textarea" ]), c = new Set([ "p" ]), l = {\n tr: new Set([ "tr", "th", "td" ]),\n th: new Set([ "th" ]),\n td: new Set([ "thead", "th", "td" ]),\n body: new Set([ "head", "link", "script" ]),\n li: new Set([ "li" ]),\n p: c,\n h1: c,\n h2: c,\n h3: c,\n h4: c,\n h5: c,\n h6: c,\n select: u,\n input: u,\n output: u,\n button: u,\n datalist: u,\n textarea: u,\n option: new Set([ "option" ]),\n optgroup: new Set([ "optgroup", "option" ]),\n dd: new Set([ "dt", "dd" ]),\n dt: new Set([ "dt", "dd" ]),\n address: c,\n article: c,\n aside: c,\n blockquote: c,\n details: c,\n div: c,\n dl: c,\n fieldset: c,\n figcaption: c,\n figure: c,\n footer: c,\n form: c,\n header: c,\n hr: c,\n main: c,\n nav: c,\n ol: c,\n pre: c,\n section: c,\n table: c,\n ul: c,\n rt: new Set([ "rt", "rp" ]),\n rp: new Set([ "rt", "rp" ]),\n tbody: new Set([ "thead", "tbody" ]),\n tfoot: new Set([ "thead", "tbody" ])\n }, h = new Set([ "area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr" ]), d = new Set([ "math", "svg" ]), p = new Set([ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ]), f = /\\s|\\//, _ = function(t) {\n function e(r, n) {\n var i = t.call(this) || this;\n return i._tagname = "", i._attribname = "", i._attribvalue = "", i._attribs = null, \n i._stack = [], i._foreignContext = [], i.startIndex = 0, i.endIndex = null, i.parseChunk = e.prototype.write, \n i.done = e.prototype.end, i._options = n || {}, i._cbs = r || {}, i._tagname = "", \n i._attribname = "", i._attribvalue = "", i._attribs = null, i._stack = [], i._foreignContext = [], \n i.startIndex = 0, i.endIndex = null, i._lowerCaseTagNames = "lowerCaseTags" in i._options ? !!i._options.lowerCaseTags : !i._options.xmlMode, \n i._lowerCaseAttributeNames = "lowerCaseAttributeNames" in i._options ? !!i._options.lowerCaseAttributeNames : !i._options.xmlMode, \n i._tokenizer = new (i._options.Tokenizer || o.default)(i._options, i), i._cbs.onparserinit && i._cbs.onparserinit(i), \n i;\n }\n return i(e, t), e.prototype._updatePosition = function(t) {\n null === this.endIndex ? this._tokenizer._sectionStart <= t ? this.startIndex = 0 : this.startIndex = this._tokenizer._sectionStart - t : this.startIndex = this.endIndex + 1, \n this.endIndex = this._tokenizer.getAbsoluteIndex();\n }, e.prototype.ontext = function(t) {\n this._updatePosition(1), this.endIndex--, this._cbs.ontext && this._cbs.ontext(t);\n }, e.prototype.onopentagname = function(t) {\n if (this._lowerCaseTagNames && (t = t.toLowerCase()), this._tagname = t, !this._options.xmlMode && Object.prototype.hasOwnProperty.call(l, t)) for (var e = void 0; l[t].has(e = this._stack[this._stack.length - 1]); this.onclosetag(e)) ;\n !this._options.xmlMode && h.has(t) || (this._stack.push(t), d.has(t) ? this._foreignContext.push(!0) : p.has(t) && this._foreignContext.push(!1)), \n this._cbs.onopentagname && this._cbs.onopentagname(t), this._cbs.onopentag && (this._attribs = {});\n }, e.prototype.onopentagend = function() {\n this._updatePosition(1), this._attribs && (this._cbs.onopentag && this._cbs.onopentag(this._tagname, this._attribs), \n this._attribs = null), !this._options.xmlMode && this._cbs.onclosetag && h.has(this._tagname) && this._cbs.onclosetag(this._tagname), \n this._tagname = "";\n }, e.prototype.onclosetag = function(t) {\n if (this._updatePosition(1), this._lowerCaseTagNames && (t = t.toLowerCase()), (d.has(t) || p.has(t)) && this._foreignContext.pop(), \n !this._stack.length || !this._options.xmlMode && h.has(t)) this._options.xmlMode || "br" !== t && "p" !== t || (this.onopentagname(t), \n this._closeCurrentTag()); else {\n var e = this._stack.lastIndexOf(t);\n if (-1 !== e) if (this._cbs.onclosetag) for (e = this._stack.length - e; e--; ) this._cbs.onclosetag(this._stack.pop()); else this._stack.length = e; else "p" !== t || this._options.xmlMode || (this.onopentagname(t), \n this._closeCurrentTag());\n }\n }, e.prototype.onselfclosingtag = function() {\n this._options.xmlMode || this._options.recognizeSelfClosing || this._foreignContext[this._foreignContext.length - 1] ? this._closeCurrentTag() : this.onopentagend();\n }, e.prototype._closeCurrentTag = function() {\n var t = this._tagname;\n this.onopentagend(), this._stack[this._stack.length - 1] === t && (this._cbs.onclosetag && this._cbs.onclosetag(t), \n this._stack.pop());\n }, e.prototype.onattribname = function(t) {\n this._lowerCaseAttributeNames && (t = t.toLowerCase()), this._attribname = t;\n }, e.prototype.onattribdata = function(t) {\n this._attribvalue += t;\n }, e.prototype.onattribend = function() {\n this._cbs.onattribute && this._cbs.onattribute(this._attribname, this._attribvalue), \n this._attribs && !Object.prototype.hasOwnProperty.call(this._attribs, this._attribname) && (this._attribs[this._attribname] = this._attribvalue), \n this._attribname = "", this._attribvalue = "";\n }, e.prototype._getInstructionName = function(t) {\n var e = t.search(f), r = e < 0 ? t : t.substr(0, e);\n return this._lowerCaseTagNames && (r = r.toLowerCase()), r;\n }, e.prototype.ondeclaration = function(t) {\n if (this._cbs.onprocessinginstruction) {\n var e = this._getInstructionName(t);\n this._cbs.onprocessinginstruction("!" + e, "!" + t);\n }\n }, e.prototype.onprocessinginstruction = function(t) {\n if (this._cbs.onprocessinginstruction) {\n var e = this._getInstructionName(t);\n this._cbs.onprocessinginstruction("?" + e, "?" + t);\n }\n }, e.prototype.oncomment = function(t) {\n this._updatePosition(4), this._cbs.oncomment && this._cbs.oncomment(t), this._cbs.oncommentend && this._cbs.oncommentend();\n }, e.prototype.oncdata = function(t) {\n this._updatePosition(1), this._options.xmlMode || this._options.recognizeCDATA ? (this._cbs.oncdatastart && this._cbs.oncdatastart(), \n this._cbs.ontext && this._cbs.ontext(t), this._cbs.oncdataend && this._cbs.oncdataend()) : this.oncomment("[CDATA[" + t + "]]");\n }, e.prototype.onerror = function(t) {\n this._cbs.onerror && this._cbs.onerror(t);\n }, e.prototype.onend = function() {\n if (this._cbs.onclosetag) for (var t = this._stack.length; t > 0; this._cbs.onclosetag(this._stack[--t])) ;\n this._cbs.onend && this._cbs.onend();\n }, e.prototype.reset = function() {\n this._cbs.onreset && this._cbs.onreset(), this._tokenizer.reset(), this._tagname = "", \n this._attribname = "", this._attribs = null, this._stack = [], this._cbs.onparserinit && this._cbs.onparserinit(this);\n }, e.prototype.parseComplete = function(t) {\n this.reset(), this.end(t);\n }, e.prototype.write = function(t) {\n this._tokenizer.write(t);\n }, e.prototype.end = function(t) {\n this._tokenizer.end(t);\n }, e.prototype.pause = function() {\n this._tokenizer.pause();\n }, e.prototype.resume = function() {\n this._tokenizer.resume();\n }, e;\n }(a.EventEmitter);\n e.Parser = _;\n}, function(t, e, r) {\n "use strict";\n var n = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var i = n(r(18)), s = n(r(13)), o = n(r(19)), a = n(r(14));\n function u(t) {\n return " " === t || "\\n" === t || "\\t" === t || "\\f" === t || "\\r" === t;\n }\n function c(t, e, r) {\n var n = t.toLowerCase();\n return t === n ? function(t, i) {\n i === n ? t._state = e : (t._state = r, t._index--);\n } : function(i, s) {\n s === n || s === t ? i._state = e : (i._state = r, i._index--);\n };\n }\n function l(t, e) {\n var r = t.toLowerCase();\n return function(n, i) {\n i === r || i === t ? n._state = e : (n._state = 3, n._index--);\n };\n }\n var h = c("C", 23, 16), d = c("D", 24, 16), p = c("A", 25, 16), f = c("T", 26, 16), _ = c("A", 27, 16), m = l("R", 34), g = l("I", 35), b = l("P", 36), E = l("T", 37), y = c("R", 39, 1), v = c("I", 40, 1), A = c("P", 41, 1), C = c("T", 42, 1), T = l("Y", 44), x = l("L", 45), D = l("E", 46), N = c("Y", 48, 1), O = c("L", 49, 1), w = c("E", 50, 1), S = c("#", 52, 53), L = c("X", 55, 54), M = function() {\n function t(t, e) {\n this._state = 1, this._buffer = "", this._sectionStart = 0, this._index = 0, this._bufferOffset = 0, \n this._baseState = 1, this._special = 1, this._running = !0, this._ended = !1, this._cbs = e, \n this._xmlMode = !(!t || !t.xmlMode), this._decodeEntities = !(!t || !t.decodeEntities);\n }\n return t.prototype.reset = function() {\n this._state = 1, this._buffer = "", this._sectionStart = 0, this._index = 0, this._bufferOffset = 0, \n this._baseState = 1, this._special = 1, this._running = !0, this._ended = !1;\n }, t.prototype._stateText = function(t) {\n "<" === t ? (this._index > this._sectionStart && this._cbs.ontext(this._getSection()), \n this._state = 2, this._sectionStart = this._index) : this._decodeEntities && 1 === this._special && "&" === t && (this._index > this._sectionStart && this._cbs.ontext(this._getSection()), \n this._baseState = 1, this._state = 51, this._sectionStart = this._index);\n }, t.prototype._stateBeforeTagName = function(t) {\n "/" === t ? this._state = 5 : "<" === t ? (this._cbs.ontext(this._getSection()), \n this._sectionStart = this._index) : ">" === t || 1 !== this._special || u(t) ? this._state = 1 : "!" === t ? (this._state = 15, \n this._sectionStart = this._index + 1) : "?" === t ? (this._state = 17, this._sectionStart = this._index + 1) : (this._state = this._xmlMode || "s" !== t && "S" !== t ? 3 : 31, \n this._sectionStart = this._index);\n }, t.prototype._stateInTagName = function(t) {\n ("/" === t || ">" === t || u(t)) && (this._emitToken("onopentagname"), this._state = 8, \n this._index--);\n }, t.prototype._stateBeforeClosingTagName = function(t) {\n u(t) || (">" === t ? this._state = 1 : 1 !== this._special ? "s" === t || "S" === t ? this._state = 32 : (this._state = 1, \n this._index--) : (this._state = 6, this._sectionStart = this._index));\n }, t.prototype._stateInClosingTagName = function(t) {\n (">" === t || u(t)) && (this._emitToken("onclosetag"), this._state = 7, this._index--);\n }, t.prototype._stateAfterClosingTagName = function(t) {\n ">" === t && (this._state = 1, this._sectionStart = this._index + 1);\n }, t.prototype._stateBeforeAttributeName = function(t) {\n ">" === t ? (this._cbs.onopentagend(), this._state = 1, this._sectionStart = this._index + 1) : "/" === t ? this._state = 4 : u(t) || (this._state = 9, \n this._sectionStart = this._index);\n }, t.prototype._stateInSelfClosingTag = function(t) {\n ">" === t ? (this._cbs.onselfclosingtag(), this._state = 1, this._sectionStart = this._index + 1) : u(t) || (this._state = 8, \n this._index--);\n }, t.prototype._stateInAttributeName = function(t) {\n ("=" === t || "/" === t || ">" === t || u(t)) && (this._cbs.onattribname(this._getSection()), \n this._sectionStart = -1, this._state = 10, this._index--);\n }, t.prototype._stateAfterAttributeName = function(t) {\n "=" === t ? this._state = 11 : "/" === t || ">" === t ? (this._cbs.onattribend(), \n this._state = 8, this._index--) : u(t) || (this._cbs.onattribend(), this._state = 9, \n this._sectionStart = this._index);\n }, t.prototype._stateBeforeAttributeValue = function(t) {\n \'"\' === t ? (this._state = 12, this._sectionStart = this._index + 1) : "\'" === t ? (this._state = 13, \n this._sectionStart = this._index + 1) : u(t) || (this._state = 14, this._sectionStart = this._index, \n this._index--);\n }, t.prototype._stateInAttributeValueDoubleQuotes = function(t) {\n \'"\' === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n }, t.prototype._stateInAttributeValueSingleQuotes = function(t) {\n "\'" === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n }, t.prototype._stateInAttributeValueNoQuotes = function(t) {\n u(t) || ">" === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8, \n this._index--) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n }, t.prototype._stateBeforeDeclaration = function(t) {\n this._state = "[" === t ? 22 : "-" === t ? 18 : 16;\n }, t.prototype._stateInDeclaration = function(t) {\n ">" === t && (this._cbs.ondeclaration(this._getSection()), this._state = 1, this._sectionStart = this._index + 1);\n }, t.prototype._stateInProcessingInstruction = function(t) {\n ">" === t && (this._cbs.onprocessinginstruction(this._getSection()), this._state = 1, \n this._sectionStart = this._index + 1);\n }, t.prototype._stateBeforeComment = function(t) {\n "-" === t ? (this._state = 19, this._sectionStart = this._index + 1) : this._state = 16;\n }, t.prototype._stateInComment = function(t) {\n "-" === t && (this._state = 20);\n }, t.prototype._stateAfterComment1 = function(t) {\n this._state = "-" === t ? 21 : 19;\n }, t.prototype._stateAfterComment2 = function(t) {\n ">" === t ? (this._cbs.oncomment(this._buffer.substring(this._sectionStart, this._index - 2)), \n this._state = 1, this._sectionStart = this._index + 1) : "-" !== t && (this._state = 19);\n }, t.prototype._stateBeforeCdata6 = function(t) {\n "[" === t ? (this._state = 28, this._sectionStart = this._index + 1) : (this._state = 16, \n this._index--);\n }, t.prototype._stateInCdata = function(t) {\n "]" === t && (this._state = 29);\n }, t.prototype._stateAfterCdata1 = function(t) {\n this._state = "]" === t ? 30 : 28;\n }, t.prototype._stateAfterCdata2 = function(t) {\n ">" === t ? (this._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2)), \n this._state = 1, this._sectionStart = this._index + 1) : "]" !== t && (this._state = 28);\n }, t.prototype._stateBeforeSpecial = function(t) {\n "c" === t || "C" === t ? this._state = 33 : "t" === t || "T" === t ? this._state = 43 : (this._state = 3, \n this._index--);\n }, t.prototype._stateBeforeSpecialEnd = function(t) {\n 2 !== this._special || "c" !== t && "C" !== t ? 3 !== this._special || "t" !== t && "T" !== t ? this._state = 1 : this._state = 47 : this._state = 38;\n }, t.prototype._stateBeforeScript5 = function(t) {\n ("/" === t || ">" === t || u(t)) && (this._special = 2), this._state = 3, this._index--;\n }, t.prototype._stateAfterScript5 = function(t) {\n ">" === t || u(t) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 6, \n this._index--) : this._state = 1;\n }, t.prototype._stateBeforeStyle4 = function(t) {\n ("/" === t || ">" === t || u(t)) && (this._special = 3), this._state = 3, this._index--;\n }, t.prototype._stateAfterStyle4 = function(t) {\n ">" === t || u(t) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 5, \n this._index--) : this._state = 1;\n }, t.prototype._parseNamedEntityStrict = function() {\n if (this._sectionStart + 1 < this._index) {\n var t = this._buffer.substring(this._sectionStart + 1, this._index), e = this._xmlMode ? a.default : s.default;\n Object.prototype.hasOwnProperty.call(e, t) && (this._emitPartial(e[t]), this._sectionStart = this._index + 1);\n }\n }, t.prototype._parseLegacyEntity = function() {\n var t = this._sectionStart + 1, e = this._index - t;\n for (e > 6 && (e = 6); e >= 2; ) {\n var r = this._buffer.substr(t, e);\n if (Object.prototype.hasOwnProperty.call(o.default, r)) return this._emitPartial(o.default[r]), \n void (this._sectionStart += e + 1);\n e--;\n }\n }, t.prototype._stateInNamedEntity = function(t) {\n ";" === t ? (this._parseNamedEntityStrict(), this._sectionStart + 1 < this._index && !this._xmlMode && this._parseLegacyEntity(), \n this._state = this._baseState) : (t < "a" || t > "z") && (t < "A" || t > "Z") && (t < "0" || t > "9") && (this._xmlMode || this._sectionStart + 1 === this._index || (1 !== this._baseState ? "=" !== t && this._parseNamedEntityStrict() : this._parseLegacyEntity()), \n this._state = this._baseState, this._index--);\n }, t.prototype._decodeNumericEntity = function(t, e) {\n var r = this._sectionStart + t;\n if (r !== this._index) {\n var n = this._buffer.substring(r, this._index), s = parseInt(n, e);\n this._emitPartial(i.default(s)), this._sectionStart = this._index;\n } else this._sectionStart--;\n this._state = this._baseState;\n }, t.prototype._stateInNumericEntity = function(t) {\n ";" === t ? (this._decodeNumericEntity(2, 10), this._sectionStart++) : (t < "0" || t > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(2, 10), \n this._index--);\n }, t.prototype._stateInHexEntity = function(t) {\n ";" === t ? (this._decodeNumericEntity(3, 16), this._sectionStart++) : (t < "a" || t > "f") && (t < "A" || t > "F") && (t < "0" || t > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(3, 16), \n this._index--);\n }, t.prototype._cleanup = function() {\n this._sectionStart < 0 ? (this._buffer = "", this._bufferOffset += this._index, \n this._index = 0) : this._running && (1 === this._state ? (this._sectionStart !== this._index && this._cbs.ontext(this._buffer.substr(this._sectionStart)), \n this._buffer = "", this._bufferOffset += this._index, this._index = 0) : this._sectionStart === this._index ? (this._buffer = "", \n this._bufferOffset += this._index, this._index = 0) : (this._buffer = this._buffer.substr(this._sectionStart), \n this._index -= this._sectionStart, this._bufferOffset += this._sectionStart), this._sectionStart = 0);\n }, t.prototype.write = function(t) {\n this._ended && this._cbs.onerror(Error(".write() after done!")), this._buffer += t, \n this._parse();\n }, t.prototype._parse = function() {\n for (;this._index < this._buffer.length && this._running; ) {\n var t = this._buffer.charAt(this._index);\n 1 === this._state ? this._stateText(t) : 12 === this._state ? this._stateInAttributeValueDoubleQuotes(t) : 9 === this._state ? this._stateInAttributeName(t) : 19 === this._state ? this._stateInComment(t) : 8 === this._state ? this._stateBeforeAttributeName(t) : 3 === this._state ? this._stateInTagName(t) : 6 === this._state ? this._stateInClosingTagName(t) : 2 === this._state ? this._stateBeforeTagName(t) : 10 === this._state ? this._stateAfterAttributeName(t) : 13 === this._state ? this._stateInAttributeValueSingleQuotes(t) : 11 === this._state ? this._stateBeforeAttributeValue(t) : 5 === this._state ? this._stateBeforeClosingTagName(t) : 7 === this._state ? this._stateAfterClosingTagName(t) : 31 === this._state ? this._stateBeforeSpecial(t) : 20 === this._state ? this._stateAfterComment1(t) : 14 === this._state ? this._stateInAttributeValueNoQuotes(t) : 4 === this._state ? this._stateInSelfClosingTag(t) : 16 === this._state ? this._stateInDeclaration(t) : 15 === this._state ? this._stateBeforeDeclaration(t) : 21 === this._state ? this._stateAfterComment2(t) : 18 === this._state ? this._stateBeforeComment(t) : 32 === this._state ? this._stateBeforeSpecialEnd(t) : 38 === this._state ? y(this, t) : 39 === this._state ? v(this, t) : 40 === this._state ? A(this, t) : 33 === this._state ? m(this, t) : 34 === this._state ? g(this, t) : 35 === this._state ? b(this, t) : 36 === this._state ? E(this, t) : 37 === this._state ? this._stateBeforeScript5(t) : 41 === this._state ? C(this, t) : 42 === this._state ? this._stateAfterScript5(t) : 43 === this._state ? T(this, t) : 28 === this._state ? this._stateInCdata(t) : 44 === this._state ? x(this, t) : 45 === this._state ? D(this, t) : 46 === this._state ? this._stateBeforeStyle4(t) : 47 === this._state ? N(this, t) : 48 === this._state ? O(this, t) : 49 === this._state ? w(this, t) : 50 === this._state ? this._stateAfterStyle4(t) : 17 === this._state ? this._stateInProcessingInstruction(t) : 53 === this._state ? this._stateInNamedEntity(t) : 22 === this._state ? h(this, t) : 51 === this._state ? S(this, t) : 23 === this._state ? d(this, t) : 24 === this._state ? p(this, t) : 29 === this._state ? this._stateAfterCdata1(t) : 30 === this._state ? this._stateAfterCdata2(t) : 25 === this._state ? f(this, t) : 26 === this._state ? _(this, t) : 27 === this._state ? this._stateBeforeCdata6(t) : 55 === this._state ? this._stateInHexEntity(t) : 54 === this._state ? this._stateInNumericEntity(t) : 52 === this._state ? L(this, t) : this._cbs.onerror(Error("unknown _state"), this._state), \n this._index++;\n }\n this._cleanup();\n }, t.prototype.pause = function() {\n this._running = !1;\n }, t.prototype.resume = function() {\n this._running = !0, this._index < this._buffer.length && this._parse(), this._ended && this._finish();\n }, t.prototype.end = function(t) {\n this._ended && this._cbs.onerror(Error(".end() after done!")), t && this.write(t), \n this._ended = !0, this._running && this._finish();\n }, t.prototype._finish = function() {\n this._sectionStart < this._index && this._handleTrailingData(), this._cbs.onend();\n }, t.prototype._handleTrailingData = function() {\n var t = this._buffer.substr(this._sectionStart);\n 28 === this._state || 29 === this._state || 30 === this._state ? this._cbs.oncdata(t) : 19 === this._state || 20 === this._state || 21 === this._state ? this._cbs.oncomment(t) : 53 !== this._state || this._xmlMode ? 54 !== this._state || this._xmlMode ? 55 !== this._state || this._xmlMode ? 3 !== this._state && 8 !== this._state && 11 !== this._state && 10 !== this._state && 9 !== this._state && 13 !== this._state && 12 !== this._state && 14 !== this._state && 6 !== this._state && this._cbs.ontext(t) : (this._decodeNumericEntity(3, 16), \n this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData())) : (this._decodeNumericEntity(2, 10), \n this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData())) : (this._parseLegacyEntity(), \n this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData()));\n }, t.prototype.getAbsoluteIndex = function() {\n return this._bufferOffset + this._index;\n }, t.prototype._getSection = function() {\n return this._buffer.substring(this._sectionStart, this._index);\n }, t.prototype._emitToken = function(t) {\n this._cbs[t](this._getSection()), this._sectionStart = -1;\n }, t.prototype._emitPartial = function(t) {\n 1 !== this._baseState ? this._cbs.onattribdata(t) : this._cbs.ontext(t);\n }, t;\n }();\n e.default = M;\n}, function(t, e, r) {\n "use strict";\n var n = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var i = n(r(34));\n e.default = function(t) {\n if (t >= 55296 && t <= 57343 || t > 1114111) return "\\ufffd";\n t in i.default && (t = i.default[t]);\n var e = "";\n return t > 65535 && (t -= 65536, e += String.fromCharCode(t >>> 10 & 1023 | 55296), \n t = 56320 | 1023 & t), e += String.fromCharCode(t);\n };\n}, function(t) {\n t.exports = JSON.parse(\'{"Aacute":"\\xc1","aacute":"\\xe1","Acirc":"\\xc2","acirc":"\\xe2","acute":"\\xb4","AElig":"\\xc6","aelig":"\\xe6","Agrave":"\\xc0","agrave":"\\xe0","amp":"&","AMP":"&","Aring":"\\xc5","aring":"\\xe5","Atilde":"\\xc3","atilde":"\\xe3","Auml":"\\xc4","auml":"\\xe4","brvbar":"\\xa6","Ccedil":"\\xc7","ccedil":"\\xe7","cedil":"\\xb8","cent":"\\xa2","copy":"\\xa9","COPY":"\\xa9","curren":"\\xa4","deg":"\\xb0","divide":"\\xf7","Eacute":"\\xc9","eacute":"\\xe9","Ecirc":"\\xca","ecirc":"\\xea","Egrave":"\\xc8","egrave":"\\xe8","ETH":"\\xd0","eth":"\\xf0","Euml":"\\xcb","euml":"\\xeb","frac12":"\\xbd","frac14":"\\xbc","frac34":"\\xbe","gt":">","GT":">","Iacute":"\\xcd","iacute":"\\xed","Icirc":"\\xce","icirc":"\\xee","iexcl":"\\xa1","Igrave":"\\xcc","igrave":"\\xec","iquest":"\\xbf","Iuml":"\\xcf","iuml":"\\xef","laquo":"\\xab","lt":"<","LT":"<","macr":"\\xaf","micro":"\\xb5","middot":"\\xb7","nbsp":"\\xa0","not":"\\xac","Ntilde":"\\xd1","ntilde":"\\xf1","Oacute":"\\xd3","oacute":"\\xf3","Ocirc":"\\xd4","ocirc":"\\xf4","Ograve":"\\xd2","ograve":"\\xf2","ordf":"\\xaa","ordm":"\\xba","Oslash":"\\xd8","oslash":"\\xf8","Otilde":"\\xd5","otilde":"\\xf5","Ouml":"\\xd6","ouml":"\\xf6","para":"\\xb6","plusmn":"\\xb1","pound":"\\xa3","quot":"\\\\"","QUOT":"\\\\"","raquo":"\\xbb","reg":"\\xae","REG":"\\xae","sect":"\\xa7","shy":"\\xad","sup1":"\\xb9","sup2":"\\xb2","sup3":"\\xb3","szlig":"\\xdf","THORN":"\\xde","thorn":"\\xfe","times":"\\xd7","Uacute":"\\xda","uacute":"\\xfa","Ucirc":"\\xdb","ucirc":"\\xfb","Ugrave":"\\xd9","ugrave":"\\xf9","uml":"\\xa8","Uuml":"\\xdc","uuml":"\\xfc","Yacute":"\\xdd","yacute":"\\xfd","yen":"\\xa5","yuml":"\\xff"}\');\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = r(36);\n e.Node = n.Node, e.Element = n.Element, e.DataNode = n.DataNode, e.NodeWithChildren = n.NodeWithChildren;\n var i = /\\s+/g, s = {\n normalizeWhitespace: !1,\n withStartIndices: !1,\n withEndIndices: !1\n }, o = function() {\n function t(t, e, r) {\n this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = null, \n "function" == typeof e && (r = e, e = s), "object" == typeof t && (e = t, t = void 0), \n this._callback = t || null, this._options = e || s, this._elementCB = r || null;\n }\n return t.prototype.onparserinit = function(t) {\n this._parser = t;\n }, t.prototype.onreset = function() {\n this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = this._parser || null;\n }, t.prototype.onend = function() {\n this._done || (this._done = !0, this._parser = null, this.handleCallback(null));\n }, t.prototype.onerror = function(t) {\n this.handleCallback(t);\n }, t.prototype.onclosetag = function() {\n this._lastNode = null;\n var t = this._tagStack.pop();\n t && this._parser && (this._options.withEndIndices && (t.endIndex = this._parser.endIndex), \n this._elementCB && this._elementCB(t));\n }, t.prototype.onopentag = function(t, e) {\n var r = new n.Element(t, e);\n this.addNode(r), this._tagStack.push(r);\n }, t.prototype.ontext = function(t) {\n var e = this._options.normalizeWhitespace, r = this._lastNode;\n if (r && "text" === r.type) e ? r.data = (r.data + t).replace(i, " ") : r.data += t; else {\n e && (t = t.replace(i, " "));\n var s = new n.DataNode("text", t);\n this.addNode(s), this._lastNode = s;\n }\n }, t.prototype.oncomment = function(t) {\n if (this._lastNode && "comment" === this._lastNode.type) this._lastNode.data += t; else {\n var e = new n.DataNode("comment", t);\n this.addNode(e), this._lastNode = e;\n }\n }, t.prototype.oncommentend = function() {\n this._lastNode = null;\n }, t.prototype.oncdatastart = function() {\n var t = new n.DataNode("text", ""), e = new n.NodeWithChildren("cdata", [ t ]);\n this.addNode(e), t.parent = e, this._lastNode = t;\n }, t.prototype.oncdataend = function() {\n this._lastNode = null;\n }, t.prototype.onprocessinginstruction = function(t, e) {\n var r = new n.ProcessingInstruction(t, e);\n this.addNode(r);\n }, t.prototype.handleCallback = function(t) {\n if ("function" == typeof this._callback) this._callback(t, this.dom); else if (t) throw t;\n }, t.prototype.addNode = function(t) {\n var e = this._tagStack[this._tagStack.length - 1], r = e ? e.children : this.dom, n = r[r.length - 1];\n this._parser && (this._options.withStartIndices && (t.startIndex = this._parser.startIndex), \n this._options.withEndIndices && (t.endIndex = this._parser.endIndex)), r.push(t), \n n && (t.prev = n, n.next = t), e && (t.parent = e), this._lastNode = null;\n }, t.prototype.addDataNode = function(t) {\n this.addNode(t), this._lastNode = t;\n }, t;\n }();\n e.DomHandler = o, e.default = o;\n}, function(t, e, r) {\n "use strict";\n var n, i = this && this.__extends || (n = function(t, e) {\n return (n = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function(t, e) {\n t.__proto__ = e;\n } || function(t, e) {\n for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n })(t, e);\n }, function(t, e) {\n function r() {\n this.constructor = t;\n }\n n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n new r);\n }), s = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n }, o = this && this.__importStar || function(t) {\n if (t && t.__esModule) return t;\n var e = {};\n if (null != t) for (var r in t) Object.hasOwnProperty.call(t, r) && (e[r] = t[r]);\n return e.default = t, e;\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var a = s(r(20)), u = o(r(22)), c = r(16), l = function(t) {\n function e(e, r) {\n return "object" == typeof e && null !== e && (r = e = void 0), t.call(this, e, r) || this;\n }\n return i(e, t), e.prototype.onend = function() {\n var t = {}, e = d(m, this.dom);\n if (e) if ("feed" === e.name) {\n var r = e.children;\n t.type = "atom", _(t, "id", "id", r), _(t, "title", "title", r);\n var n = f("href", d("link", r));\n n && (t.link = n), _(t, "description", "subtitle", r), (i = p("updated", r)) && (t.updated = new Date(i)), \n _(t, "author", "email", r, !0), t.items = h("entry", r).map((function(t) {\n var e = {}, r = t.children;\n _(e, "id", "id", r), _(e, "title", "title", r);\n var n = f("href", d("link", r));\n n && (e.link = n);\n var i = p("summary", r) || p("content", r);\n i && (e.description = i);\n var s = p("updated", r);\n return s && (e.pubDate = new Date(s)), e;\n }));\n } else {\n var i;\n r = d("channel", e.children).children;\n t.type = e.name.substr(0, 3), t.id = "", _(t, "title", "title", r), _(t, "link", "link", r), \n _(t, "description", "description", r), (i = p("lastBuildDate", r)) && (t.updated = new Date(i)), \n _(t, "author", "managingEditor", r, !0), t.items = h("item", e.children).map((function(t) {\n var e = {}, r = t.children;\n _(e, "id", "guid", r), _(e, "title", "title", r), _(e, "link", "link", r), _(e, "description", "description", r);\n var n = p("pubDate", r);\n return n && (e.pubDate = new Date(n)), e;\n }));\n }\n this.feed = t, this.handleCallback(e ? null : Error("couldn\'t find root of feed"));\n }, e;\n }(a.default);\n function h(t, e) {\n return u.getElementsByTagName(t, e, !0);\n }\n function d(t, e) {\n return u.getElementsByTagName(t, e, !0, 1)[0];\n }\n function p(t, e, r) {\n return void 0 === r && (r = !1), u.getText(u.getElementsByTagName(t, e, r, 1)).trim();\n }\n function f(t, e) {\n return e ? e.attribs[t] : null;\n }\n function _(t, e, r, n, i) {\n void 0 === i && (i = !1);\n var s = p(r, n, i);\n s && (t[e] = s);\n }\n function m(t) {\n return "rss" === t || "feed" === t || "rdf:RDF" === t;\n }\n e.FeedHandler = l;\n var g = {\n xmlMode: !0\n };\n e.parseFeed = function(t, e) {\n void 0 === e && (e = g);\n var r = new l(e);\n return new c.Parser(r, e).end(t), r.feed;\n };\n}, function(t, e, r) {\n "use strict";\n function n(t) {\n for (var r in t) e.hasOwnProperty(r) || (e[r] = t[r]);\n }\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), n(r(37)), n(r(41)), n(r(42)), n(r(25)), n(r(43)), n(r(44)), n(r(12));\n}, function(t, e, r) {\n "use strict";\n var n = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.decodeHTML = e.decodeHTMLStrict = e.decodeXML = void 0;\n var i = n(r(13)), s = n(r(19)), o = n(r(14)), a = n(r(18));\n function u(t) {\n var e = Object.keys(t).join("|"), r = l(t), n = new RegExp("&(?:" + (e += "|#[xX][\\\\da-fA-F]+|#\\\\d+") + ");", "g");\n return function(t) {\n return String(t).replace(n, r);\n };\n }\n e.decodeXML = u(o.default), e.decodeHTMLStrict = u(i.default);\n var c = function(t, e) {\n return t < e ? 1 : -1;\n };\n function l(t) {\n return function(e) {\n if ("#" === e.charAt(1)) {\n var r = e.charAt(2);\n return "X" === r || "x" === r ? a.default(parseInt(e.substr(3), 16)) : a.default(parseInt(e.substr(2), 10));\n }\n return t[e.slice(1, -1)];\n };\n }\n e.decodeHTML = function() {\n for (var t = Object.keys(s.default).sort(c), e = Object.keys(i.default).sort(c), r = 0, n = 0; r < e.length; r++) t[n] === e[r] ? (e[r] += ";?", \n n++) : e[r] += ";";\n var o = new RegExp("&(?:" + e.join("|") + "|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)", "g"), a = l(i.default);\n function u(t) {\n return ";" !== t.substr(-1) && (t += ";"), a(t);\n }\n return function(t) {\n return String(t).replace(o, u);\n };\n }();\n}, function(t, e, r) {\n "use strict";\n var n = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.escape = e.encodeHTML = e.encodeXML = void 0;\n var i = u(n(r(14)).default), s = c(i);\n e.encodeXML = d(i, s);\n var o = u(n(r(13)).default), a = c(o);\n function u(t) {\n return Object.keys(t).sort().reduce((function(e, r) {\n return e[t[r]] = "&" + r + ";", e;\n }), {});\n }\n function c(t) {\n for (var e = [], r = [], n = 0, i = Object.keys(t); n < i.length; n++) {\n var s = i[n];\n 1 === s.length ? e.push("\\\\" + s) : r.push(s);\n }\n e.sort();\n for (var o = 0; o < e.length - 1; o++) {\n for (var a = o; a < e.length - 1 && e[a].charCodeAt(1) + 1 === e[a + 1].charCodeAt(1); ) a += 1;\n var u = 1 + a - o;\n u < 3 || e.splice(o, u, e[o] + "-" + e[a]);\n }\n return r.unshift("[" + e.join("") + "]"), new RegExp(r.join("|"), "g");\n }\n e.encodeHTML = d(o, a);\n var l = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\n function h(t) {\n return "&#x" + t.codePointAt(0).toString(16).toUpperCase() + ";";\n }\n function d(t, e) {\n return function(r) {\n return r.replace(e, (function(e) {\n return t[e];\n })).replace(l, h);\n };\n }\n var p = c(i);\n e.escape = function(t) {\n return t.replace(p, h).replace(l, h);\n };\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = r(12);\n function i(t, e, r, s) {\n for (var o = [], a = 0, u = e; a < u.length; a++) {\n var c = u[a];\n if (t(c) && (o.push(c), --s <= 0)) break;\n if (r && n.hasChildren(c) && c.children.length > 0) {\n var l = i(t, c.children, r, s);\n if (o.push.apply(o, l), (s -= l.length) <= 0) break;\n }\n }\n return o;\n }\n e.filter = function(t, e, r, n) {\n return void 0 === r && (r = !0), void 0 === n && (n = 1 / 0), Array.isArray(e) || (e = [ e ]), \n i(t, e, r, n);\n }, e.find = i, e.findOneChild = function(t, e) {\n return e.find(t);\n }, e.findOne = function t(e, r, i) {\n void 0 === i && (i = !0);\n for (var s = null, o = 0; o < r.length && !s; o++) {\n var a = r[o];\n n.isTag(a) && (e(a) ? s = a : i && a.children.length > 0 && (s = t(e, a.children)));\n }\n return s;\n }, e.existsOne = function t(e, r) {\n return r.some((function(r) {\n return n.isTag(r) && (e(r) || r.children.length > 0 && t(e, r.children));\n }));\n }, e.findAll = function(t, e) {\n for (var r, i, s = [], o = e.filter(n.isTag); i = o.shift(); ) {\n var a = null === (r = i.children) || void 0 === r ? void 0 : r.filter(n.isTag);\n a && a.length > 0 && o.unshift.apply(o, a), t(i) && s.push(i);\n }\n return s;\n };\n}, function(t, e, r) {\n "use strict";\n e.a = {\n LETTER_PATTERN: "A-Za-z\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B4\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0AF9\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58-\\\\u0C5A\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D5F-\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16F1-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FD5\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6E5\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA7AD\\\\uA7B0-\\\\uA7B7\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA8FD\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB65\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC",\n COMMENT_UNDERLAY_FOCUSED_COLOR: "#eaf3ff",\n COMMENT_UNDERLAY_TARGET_COLOR: "#ffedb8",\n COMMENT_UNDERLAY_NEW_COLOR: "#e8ffd1",\n COMMENT_UNDERLAY_OWN_COLOR: "#f7ebff",\n COMMENT_UNDERLAY_SIDE_MARGIN: 5,\n HIGHLIGHT_NEW_COMMENTS_INTERVAL: 15,\n CHECK_FOR_NEW_COMMENTS_INTERVAL: 15,\n BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL: 60,\n SECONDS_IN_A_DAY: 86400,\n MILLISECONDS_IN_A_MINUTE: 6e4,\n POPULAR_NOT_INLINE_ELEMENTS: [ "BLOCKQUOTE", "DD", "DIV", "DL", "FORM", "H1", "H2", "H3", "H4", "H5", "H6", "HR", "INPUT", "LI", "OL", "P", "PRE", "TABLE", "TBODY", "TR", "TH", "TD", "UL" ],\n POPULAR_INLINE_ELEMENTS: [ "A", "ABBR", "B", "BIG", "BR", "CITE", "CODE", "EM", "FONT", "I", "IMG", "KBD", "Q", "S", "SAMP", "SMALL", "SPAN", "STRIKE", "STRONG", "SUB", "SUP", "TT", "U", "VAR" ],\n UNHIGHLIGHTABLE_ELEMENTS_CLASSES: [ "mw-empty-elt", "tleft", "tright", "floatleft", "floatright" ],\n BAD_COMMENT_BEGINNINGS: [ /^\x3c!--[^]*?--\x3e *\\n*/, /^(?:----+|<hr>) *\\n*/, /^\\{\\|.*?\\|\\} *\\n*(?=[*:#])/ ],\n FLOATING_ELEMENTS_SELECTORS: [ ".cd-floating", ".tright", ".floatright", \'*[style*="float:right"]\', \'*[style*="float: right"]\', \'*[style*="float:left"]\', \'*[style*="float: left"]\' ],\n SIGN_CODE: "~~".concat("~~")\n };\n}, function(t, e, r) {\n "use strict";\n e.a = {\n init() {\n this.timerTotal = {}, this.timerStartTimestamps = {}, this.timerRunCount = {}, this.timerAllRunsTotal = {}, \n this.initCounters(), this.array = [], this.object = {};\n },\n initCounters() {\n this.counters = "undefined" == typeof Proxy ? {} : new Proxy({}, {\n get: (t, e) => e in t ? t[e] : 0\n });\n },\n startTimer(t) {\n this.timerStartTimestamps[t] = Date.now();\n },\n stopTimer(t) {\n if (void 0 === this.timerStartTimestamps[t]) return;\n void 0 === this.timerTotal[t] && (this.timerTotal[t] = 0);\n const e = Date.now() - this.timerStartTimestamps[t];\n this.timerTotal[t] += e, delete this.timerStartTimestamps[t], void 0 === this.timerAllRunsTotal[t] && (this.timerAllRunsTotal[t] = 0, \n this.timerRunCount[t] = 0), this.timerAllRunsTotal[t] += e, this.timerRunCount[t]++;\n },\n resetTimer(t) {\n void 0 !== this.timerStartTimestamps[t] && this.stopTimer(t), delete this.timerTotal[t];\n },\n fullResetTimer(t) {\n this.resetTimer(t), delete this.timerAllRunsTotal[t], delete this.timerRunCount[t];\n },\n logAndResetTimer(t) {\n void 0 !== this.timerStartTimestamps[t] && this.stopTimer(t), void 0 !== this.timerTotal[t] && (console.debug("".concat(t, ": ").concat(this.timerTotal[t])), \n this.resetTimer(t));\n },\n logAndResetEverything(t) {\n const e = Object.keys(this.timerTotal);\n t && e.sort(), e.forEach(t => {\n this.logAndResetTimer(t);\n });\n const r = Object.keys(this.counters);\n t && r.sort(), r.forEach(t => {\n console.debug("counter ".concat(t, ": ").concat(this.counters[t]));\n }), this.initCounters(), this.array.length && (console.debug("array: ", this.array), \n this.array = []), Object.keys(this.object).length && (console.debug("object: ", this.object), \n this.object = {});\n },\n averageTimerTime(t) {\n if (!this.timerAllRunsTotal[t]) return void console.error("No data for timer ".concat(t));\n const e = this.timerAllRunsTotal[t] / this.timerRunCount[t];\n console.debug("".concat(t, ": ").concat(e.toFixed(1), " average for ").concat(this.timerRunCount[t], " runs"));\n },\n incrementCounter(t) {\n this.counters[t]++;\n }\n };\n}, function(t, e, r) {\n "use strict";\n r.d(e, "a", (function() {\n return h;\n }));\n var n = r(4), i = r.n(n), s = r(8), o = r.n(s), a = r(1), u = r(0), c = new WeakMap, l = new WeakMap;\n class h {\n constructor(t, e) {\n c.set(this, {\n writable: !0,\n value: void 0\n }), l.set(this, {\n writable: !0,\n value: void 0\n }), o()(this, c, t);\n let r = i()(this, c).collectParts(e.element);\n r = i()(this, c).removeNestedParts(r), r = i()(this, c).encloseInlineParts(r, e.element), \n r = i()(this, c).filterParts(r), r.reverse(), r = i()(this, c).replaceListsWithItems(r, e.element), \n this.id = u.a.comments.length, this.date = e.date || null, this.timestamp = e.timestampText, \n this.authorName = e.authorName, this.own = this.authorName === u.a.g.CURRENT_USER_NAME, \n this.anchor = e.anchor, this.unsigned = e.unsigned, this.parts = r, this.elements = this.parts.map(t => t.node);\n if (this.highlightables = this.elements.filter(t => !/^H[1-6]$/.test(t.tagName) && !u.a.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(e => t.classList.contains(e)) && !/float: *(?:left|right)/.test(t.getAttribute("style"))), \n !this.highlightables.length) throw new a.a;\n if (this.addAttributes(), this.setLevels(), this.parts[0].isHeading ? (this.followsHeading = !0, \n 0 !== this.level && (this.parts.splice(0, 1), this.elements.splice(0, 1))) : this.followsHeading = !0, \n this.parts[0].isHeading) {\n this.isOpeningSection = !0;\n const t = this.parts[0].node.tagName.match(/^H([1-6])$/);\n this.openingSectionOfLevel = t && Number(t[1]);\n } else this.isOpeningSection = !1;\n }\n addAttributes() {\n this.anchor && !this.elements[0].getAttribute("id") && this.elements[0].setAttribute("id", this.anchor), \n this.elements[0].classList.add("cd-commentPart-first"), this.elements[this.elements.length - 1].classList.add("cd-commentPart-last"), \n this.elements.forEach(t => {\n t.classList.add("cd-commentPart"), t.setAttribute("data-comment-id", String(this.id));\n });\n }\n setLevels() {\n const t = {};\n t.top = i()(this, c).getLevelsUpTree(this.highlightables[0]), t.bottom = this.highlightables.length > 1 ? i()(this, c).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : t.top, \n this.level = Math.min(t.top.length, t.bottom.length);\n for (let e = 0; e < this.level; e++) t.top[e] && t.top[e].classList.add("cd-commentLevel", "cd-commentLevel-".concat(e + 1)), \n t.bottom[e] && t.bottom[e] !== t.top[e] && t.bottom[e].classList.add("cd-commentLevel", "cd-commentLevel-".concat(e + 1));\n }\n getSection() {\n return u.a.sections.slice().reverse().find(t => t.comments.includes(this)) || null;\n }\n get section() {\n return void 0 === i()(this, l) && o()(this, l, this.getSection()), i()(this, l);\n }\n get sourcePage() {\n return this.section ? this.section.sourcePage : u.a.g.CURRENT_PAGE;\n }\n }\n}, function(t, e, r) {\n "use strict";\n r.d(e, "a", (function() {\n return h;\n }));\n var n = r(4), i = r.n(n), s = r(8), o = r.n(s), a = r(1), u = r(0), c = r(7), l = new WeakMap;\n class h {\n constructor(t, e) {\n if (l.set(this, {\n writable: !0,\n value: void 0\n }), o()(this, l, t), this.headlineElement = i()(this, l).context.getElementByClassName(e, "mw-headline"), \n !this.headlineElement) throw new a.a;\n this.anchor = this.headlineElement.getAttribute("id");\n const r = [ "mw-headline-number", ...u.a.config.foreignElementsInHeadlinesClasses ], n = Array.from(this.headlineElement.childNodes).filter(t => t.nodeType !== Node.ELEMENT_NODE || !Array.from(t.classList).some(t => r.includes(t)));\n this.headline = n.map(t => t.textContent).join("").trim();\n const s = e.tagName.match(/^H([2-6])$/);\n this.level = s && Number(s[1]);\n const h = new c.c(u.a.g.rootElement, t => ![ "STYLE", "LINK" ].includes(t.tagName) && !t.classList.contains("cd-sectionButtonContainer"), !0, e);\n for (this.headingNestingLevel = 0; h.parentNode(); ) this.headingNestingLevel++;\n h.currentNode = e;\n const d = [ e ], p = new RegExp("^H[1-".concat(this.level, "]$"));\n let f, _, m = !1;\n for (;h.nextSibling() && !p.test(h.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(h.currentNode.tagName) && (m = !0, \n this.lastElementInFirstChunk = d[d.length - 1]), d.push(h.currentNode);\n if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || d[d.length - 1], \n !d.length) throw new a.a;\n if (d[1]) {\n for (h.currentNode = d[d.length - 1]; h.lastChild(); ) ;\n const t = h.currentNode;\n h.currentNode = d[1];\n do {\n h.currentNode.classList.contains("cd-commentPart") && (f = h.currentNode);\n } while (!f && h.currentNode !== t && h.nextNode());\n h.currentNode = t;\n do {\n h.currentNode.classList.contains("cd-commentPart") && (_ = h.currentNode);\n } while (!_ && h.currentNode !== d[1] && h.previousNode());\n }\n if (f) {\n const t = Number(f.getAttribute("data-comment-id")), e = Number(_.getAttribute("data-comment-id"));\n if (this.comments = u.a.comments.slice(t, e + 1), m) {\n const t = this.comments.findIndex(t => !(i()(this, l).context.follows(this.lastElementInFirstChunk, t.elements[0]) || this.lastElementInFirstChunk.contains(t.elements[0])));\n this.commentsInFirstChunk = this.comments.slice(0, t || 0);\n }\n }\n this.id = u.a.sections.length, this.comments = this.comments || [], this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments, \n this.elements = d;\n }\n }\n}, function(t, e, r) {\n "use strict";\n r.d(e, "a", (function() {\n return a;\n }));\n var n = r(6), i = r(0), s = r(9);\n function o(t, e, r) {\n if (r && e(t)) return !0;\n for (let r = t.firstChild; r; r = r.nextSibling) if (o(r, e, !0)) return !0;\n }\n function a() {\n let t = [];\n return o(i.a.g.rootElement, e => {\n e.nodeType === Node.TEXT_NODE && t.push(e);\n }), t;\n }\n self.Node = {\n TEXT_NODE: 3,\n ELEMENT_NODE: 1\n };\n const u = Object(n.parseDOM)("<a>a</a>"), c = u[0].constructor, l = u[0].childNodes[0].constructor, h = Object.getPrototypeOf(l);\n Object.defineProperty(c.prototype, "childElements", {\n get: function() {\n return this.childNodes.filter(t => t.nodeType === Node.ELEMENT_NODE);\n }\n }), Object.defineProperty(c.prototype, "previousElementSibling", {\n get: function() {\n for (let t = this.previousSibling; t; t = t.previousSibling) if (t.nodeType === Node.ELEMENT_NODE) return t;\n return null;\n }\n }), Object.defineProperty(c.prototype, "nextElementSibling", {\n get: function() {\n for (let t = this.nextSibling; t; t = t.nextSibling) if (t.nodeType === Node.ELEMENT_NODE) return t;\n return null;\n }\n }), Object.defineProperty(c.prototype, "firstElementChild", {\n get: function() {\n let t;\n for (t = this.firstChild; t && t.nodeType !== Node.ELEMENT_NODE; t = t.nextSibling) ;\n return t || null;\n }\n }), Object.defineProperty(c.prototype, "lastElementChild", {\n get: function() {\n let t;\n for (t = this.lastChild; t && t.nodeType !== Node.ELEMENT_NODE; t = t.previousSibling) ;\n return t || null;\n }\n }), Object.defineProperty(c.prototype, "textContent", {\n get: function() {\n i.a.debug.startTimer("textContent");\n let t = "";\n return this.childNodes.forEach(e => {\n t += e.textContent;\n }), i.a.debug.stopTimer("textContent"), t;\n }\n }), Object.defineProperty(c.prototype, "outerHTML", {\n get: function() {\n return n.DomUtils.getOuterHTML(this);\n }\n }), c.prototype.getAttribute = function(t) {\n let e = this.attribs[t];\n return e && "string" == typeof e && -1 !== e.indexOf("&") && (e = e.replace(/&/g, "&").replace(/"/g, \'"\')), \n e;\n }, c.prototype.setAttribute = function(t, e) {\n e && "string" == typeof e && (-1 !== e.indexOf("&") && (e = e.replace(/&/g, "&")), \n -1 !== e.indexOf(\'"\') && (e = e.replace(/"/g, """))), this.attribs[t] = e || "";\n }, c.prototype.appendChild = function(t) {\n i.a.debug.startTimer("appendChild"), t.parentNode && t.remove(), n.DomUtils.appendChild(this, t), \n i.a.debug.stopTimer("appendChild");\n }, c.prototype.insertBefore = function(t, e) {\n i.a.debug.startTimer("insertBefore"), e ? (t.parentNode && t.remove(), n.DomUtils.prepend(e, t)) : this.appendChild(t), \n i.a.debug.stopTimer("insertBefore");\n }, c.prototype.removeChild = function(t) {\n t.parentNode === this && n.DomUtils.removeElement(t);\n }, c.prototype.contains = function(t) {\n if (i.a.debug.startTimer("contains"), t === this) return !0;\n if (!this.childNodes.length) return !1;\n for (let e = t; e; e = e.parentNode) if (e === this) return !0;\n return i.a.debug.stopTimer("contains"), !1;\n }, c.prototype.follows = function(t) {\n if (i.a.debug.startTimer("follows"), this.startIndex && t.startIndex) return this.startIndex > t.startIndex;\n if (this === t) return !1;\n const e = [], r = [];\n let n, s, o;\n for (let r = this; r; r = r.parentNode) {\n if (r === t) return !0;\n e.unshift(r);\n }\n for (let i = t; i; i = i.parentNode) if (r.unshift(i), e.includes(i)) {\n n = i, s = e[e.indexOf(i) + 1], o = r[1];\n break;\n }\n const a = !n || n.childNodes.indexOf(s) > n.childNodes.indexOf(o);\n return i.a.debug.stopTimer("follows"), a;\n }, Object.defineProperty(c.prototype, "tagName", {\n get: function() {\n return this.name.toUpperCase();\n }\n }), Object.defineProperty(c.prototype, "classList", {\n get: function() {\n return this._classList || (this._classList = {\n list: [],\n movedFromClassAttr: !1,\n moveFromClassAttr(t) {\n this.list = (t || "").split(" "), this.movedFromClassAttr = !0;\n },\n add: (...t) => {\n t.forEach(t => {\n i.a.debug.startTimer("addClass");\n let e = this.getAttribute("class") || "";\n e && (e += " "), e += t, this.setAttribute("class", e), this._classList.movedFromClassAttr ? this._classList.list.push(t) : this._classList.moveFromClassAttr(e), \n i.a.debug.stopTimer("addClass");\n });\n },\n contains: t => {\n i.a.debug.startTimer("containsClass");\n const e = this.getAttribute("class");\n if (!e) return i.a.debug.stopTimer("containsClass"), !1;\n this._classList.movedFromClassAttr || this._classList.moveFromClassAttr(e);\n const r = Boolean(this._classList.list.length) && -1 !== this._classList.list.indexOf(t);\n return i.a.debug.stopTimer("containsClass"), r;\n }\n }), this._classList;\n }\n }), c.prototype.getElementsByClassName = function(t, e, r) {\n i.a.debug.startTimer("getElementsByClassName");\n let n = [];\n return o(this, i => {\n if (i.nodeType === Node.ELEMENT_NODE) return !(i.nodeType !== Node.ELEMENT_NODE || !i.classList.contains(t, r) || (n.push(i), \n !e || n.length !== e)) || void 0;\n }), i.a.debug.stopTimer("getElementsByClassName"), n;\n }, c.prototype.getElementsByTagName = function(t) {\n i.a.debug.startTimer("getElementsByTagName");\n const e = n.DomUtils.getElementsByTagName(t, this);\n return i.a.debug.stopTimer("getElementsByTagName"), e;\n }, Object.defineProperty(l.prototype, "textContent", {\n get: function() {\n return Object(s.a)(this.data);\n },\n set: function(t) {\n this.data = t;\n }\n }), h.prototype.remove = function() {\n n.DomUtils.removeElement(this), this.prev = null, this.next = null;\n };\n class d extends c {\n constructor(t) {\n super("body", {});\n for (const e of t) this.appendChild(e);\n }\n createElement(t) {\n return new c(t, {});\n }\n createTextNode(t) {\n return new l("text", t);\n }\n }\n d.prototype.getElementsByClassName = c.prototype.getElementsByClassName, self.Document = d;\n}, function(t, e, r) {\n "use strict";\n t.exports = function(t, e) {\n var n = r(48), i = "", s = "", o = "";\n i = t.toString();\n var a = n("HTML_ENTITIES", e);\n if (!1 === a) return !1;\n for (o in delete a["&"], a["&"] = "&", a) s = a[o], i = i.split(s).join(o);\n return i = i.split("'").join("\'");\n };\n}, function(t, e, r) {\n "use strict";\n r.d(e, "a", (function() {\n return u;\n }));\n var n = r(0), i = r(7), s = r(2), o = r(5);\n function a(t) {\n const e = t.getAttribute("href");\n if (!e) return null;\n const r = function(t) {\n if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) {\n t = t.replace(/^(?:https?:)?\\/\\/[^/]+/, "").replace(/^\\/wiki\\//, "").replace(/^\\/w\\/index.php\\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " ");\n try {\n t = decodeURIComponent(t);\n } catch (t) {\n return null;\n }\n return t;\n }\n {\n const e = new mw.Uri(t), r = e.path.match(n.a.g.ARTICLE_PATH_REGEXP);\n if (r) try {\n return decodeURIComponent(r[1]);\n } catch (t) {\n return null;\n }\n return e.query.title ? e.query.title : null;\n }\n }(e);\n if (!r) return null;\n let i;\n const o = r.match(n.a.g.USER_NAMESPACES_REGEXP);\n return o ? i = o[1] : r.startsWith(n.a.g.CONTRIBS_PAGE + "/") && (i = r.replace(n.a.g.CONTRIBS_PAGE_LINK_REGEXP, "")), \n i && Object(s.b)(Object(s.i)(i.replace(/\\/.*/, ""))).trim();\n }\n class u {\n constructor(t) {\n this.context = t;\n }\n createComment(t) {\n return new this.context.CommentClass(this, t);\n }\n createSection(t, e) {\n return new this.context.SectionClass(this, t, e);\n }\n findTimestamps() {\n const t = [ ...Array.from(n.a.g.rootElement.getElementsByTagName("blockquote")), ...Object(s.c)(n.a.config.elementsToExcludeClasses.map(t => Array.from(n.a.g.rootElement.getElementsByClassName(t)))) ];\n return this.context.getAllTextNodes().map(e => {\n const r = e.textContent, {date: n, match: i} = Object(o.b)(r) || {};\n if (n && !t.some(t => t.contains(e))) return {\n node: e,\n date: n,\n match: i\n };\n }).filter(s.a).map(t => {\n const {node: e, match: r, date: n} = t, i = this.context.document.createElement("span");\n i.classList.add("cd-timestamp");\n const s = this.context.document.createTextNode(r[2]);\n i.appendChild(s);\n const o = e.textContent.slice(r.index + r[0].length);\n let a;\n return o && (a = this.context.document.createTextNode(o)), e.textContent = e.textContent.slice(0, r.index + r[1].length), \n e.parentNode.insertBefore(i, e.nextSibling), a && e.parentNode.insertBefore(a, i.nextSibling), \n {\n element: i,\n date: n\n };\n });\n }\n findSignatures(t) {\n const e = t.map(t => {\n const e = t.date, r = t.element, u = t.element.textContent;\n let c, l;\n for (let e = t.element; !l; e = e.parentNode) Object(s.g)(e) ? e.classList.contains(n.a.config.unsignedClass) && (c = e) : l = e;\n const h = Boolean(c);\n if (l) {\n const e = Array.from(l[this.context.childElementsProperty]), r = new i.b(t.element);\n let n = !1;\n for (;!n && r.nextNode() && l.contains(r.currentNode) && (!e.includes(r.currentNode) || Object(s.g)(r.currentNode)); ) r.currentNode.classList.contains("cd-timestamp") && (n = !0);\n if (n) return;\n }\n const d = c || t.element, p = new i.a(d);\n let f, _, m = 0;\n const g = [];\n c ? _ = d : (g.push(d), p.previousSibling());\n do {\n const t = p.currentNode;\n if (m += t.textContent.length, t.nodeType === Node.ELEMENT_NODE) {\n if (t.classList.contains("cd-timestamp")) break;\n let e = !1;\n if ("A" === t.tagName) {\n const r = a(t);\n r && (f || (f = r), f === r && (e = !0));\n } else {\n Array.from(t.getElementsByTagName("a")).some(t => {\n const r = a(t);\n if (r && (f || (f = r), f === r)) return e = !0, !0;\n });\n }\n e && (_ = t);\n }\n g.push(t);\n } while (p.previousSibling() && m < n.a.config.signatureScanLimit);\n const b = g.indexOf(_);\n g.splice(-1 === b ? 1 : b + 1);\n const E = Object(o.a)(t.date, f, !0);\n Object(o.c)(E);\n const y = d.parentNode, v = d.nextSibling, A = this.context.document.createElement("span");\n if (A.classList.add("cd-signature"), g.reverse().forEach(A.appendChild.bind(A)), \n y.insertBefore(A, v), f) return {\n element: A,\n timestampElement: r,\n timestampText: u,\n date: e,\n authorName: f,\n anchor: E,\n unsigned: h\n };\n }).filter(s.a);\n return n.a.config.unsignedClass && Array.from(n.a.g.rootElement.getElementsByClassName(n.a.config.unsignedClass)).forEach(t => {\n if (!this.context.getElementByClassName(t, "cd-timestamp")) {\n Array.from(t.getElementsByTagName("a")).some(r => {\n const n = a(r);\n if (n) {\n t.classList.add("cd-signature");\n const r = !0;\n return e.push({\n element: t,\n authorName: n,\n unsigned: r\n }), !0;\n }\n });\n }\n }), e.sort((t, e) => this.context.follows(t.element, e.element) ? 1 : -1), e;\n }\n collectParts(t) {\n const e = new i.a(t);\n let r, o = [];\n for (;!r; ) {\n for (;!e.currentNode.nextSibling && e.parentNode(); ) ;\n if (!e.nextSibling()) break;\n Object(s.g)(e.currentNode, !0) || (r = e.currentNode);\n }\n if (r && t.parentNode.contains(r)) {\n for (e.currentNode = t; e.nextSibling() && Object(s.g)(e.currentNode, !0); ) o.push({\n node: e.currentNode,\n isTextNode: e.currentNode.nodeType === Node.TEXT_NODE,\n isHeading: !1,\n hasCurrentSignature: !1,\n hasForeignComponents: !1,\n lastStep: "start"\n });\n o.reverse(), e.currentNode = t;\n } else e.currentNode = t.parentNode;\n o.push({\n node: e.currentNode,\n isTextNode: !1,\n isHeading: !1,\n hasCurrentSignature: !0,\n hasForeignComponents: !1,\n lastStep: "start"\n });\n const a = new RegExp(n.a.g.TIMEZONE_REGEXP.source + "\\\\s*$");\n for (let i = 0; i < 500; i++) {\n let i;\n const u = o[o.length - 1];\n if (!u.isTextNode && !u.hasCurrentSignature) {\n const t = u.node.textContent;\n if (!Object(s.g)(u.node, !0) && (a.test(t) || n.a.config.signatureEndingRegexp && n.a.config.signatureEndingRegexp.test(t))) {\n u.hasForeignComponents = !0;\n break;\n }\n }\n if (!u.hasCurrentSignature && u.hasForeignComponents) {\n let t, r = !1;\n for (;(t = e.currentNode) && e.lastChild(); ) {\n if (Object(s.g)(e.currentNode, !0)) {\n e.currentNode = t;\n break;\n }\n r = !0;\n }\n if (!r) break;\n i = "dive";\n } else if (e.previousSibling()) i = "back"; else {\n if (!e.parentNode()) break;\n i = "up";\n }\n const c = e.currentNode, l = c.nodeType === Node.TEXT_NODE;\n if ("back" === i && [ "OL", "UL" ].includes(u.node.tagName) && !([ "DL", "OL", "UL" ].includes(c.tagName) || l && c.previousSibling && [ "DL", "OL", "UL" ].includes(c.previousSibling.tagName)) && u.node[this.context.childElementsProperty].length && u.node[this.context.childElementsProperty][0].contains(t)) break;\n let h = null, d = null, p = null;\n if (!l) {\n if (c.classList.contains("cd-commentPart") || "toc" === c.getAttribute("id") || "TD" === c.tagName || "HR" === c.tagName && c.previousElementSibling && this.context.getElementByClassName(c.previousElementSibling, "cd-signature") || n.a.config.checkForCustomForeignComponents && n.a.config.checkForCustomForeignComponents(c, this.context)) break;\n h = /^H[1-6]$/.test(c.tagName), d = c.contains(t), p = c.getElementsByClassName("cd-signature", Number(d) + 1).length - Number(d) > 0 || r && c.contains(r);\n }\n if (o.push({\n node: c,\n isTextNode: l,\n isHeading: h,\n hasCurrentSignature: d,\n hasForeignComponents: p,\n lastStep: i\n }), h) break;\n }\n return o;\n }\n removeNestedParts(t) {\n for (let e = t.length - 1; e >= 0; e--) {\n const r = t[e];\n if ("up" === r.lastStep && !r.hasForeignComponents) {\n let r = 0;\n for (let n = e - 1; n > 0; n--) if ("dive" === t[n].lastStep) {\n r = n;\n break;\n }\n t.splice(r, e - r), e = r;\n }\n }\n return t;\n }\n encloseInlineParts(t, e) {\n const r = [];\n let n = null, i = !1;\n for (let e = 0; e <= t.length; e++) {\n const o = t[e];\n if (!o || null !== n && ![ "back", "start" ].includes(o.lastStep) || o.hasForeignComponents || o.isHeading) {\n if (null !== n) {\n if (i) {\n const t = e - 1;\n r.push({\n start: n,\n end: t\n });\n }\n n = null, i = !1;\n }\n } else {\n if (null === n) {\n if (Object(s.g)(o.node.parentNode)) {\n for (let r = e + 1; r < t.length; r++) "up" !== t[r].lastStep || (e = r - 1);\n break;\n }\n n = e;\n }\n !i && (o.isTextNode && o.node.textContent.trim() || Object(s.g)(o.node)) && (i = !0);\n }\n }\n for (let n = r.length - 1; n >= 0; n--) {\n const i = r[n], s = this.context.document.createElement("div"), o = t[i.start].node.nextSibling, a = t[i.start].node.parentNode;\n for (let e = i.end; e >= i.start; e--) s.appendChild(t[e].node);\n a.insertBefore(s, o);\n const u = {\n node: s,\n isTextNode: !1,\n isHeading: !1,\n hasCurrentSignature: s.contains(e),\n hasForeignComponents: !1,\n lastStep: "replaced"\n };\n t.splice(i.start, i.end - i.start + 1, u);\n }\n return t;\n }\n filterParts(t) {\n for (let e = (t = t.filter(t => !t.hasForeignComponents && !t.isTextNode)).length - 1; e > 0; e--) {\n const r = t[e];\n if ("P" !== r.node.tagName || r.node.textContent.trim()) break;\n t.splice(e, 1);\n }\n return t;\n }\n replaceListsWithItems(t, e) {\n const r = t[t.length - 1];\n for (let n = t.length - 1; n >= 0; n--) {\n const i = t[n];\n if ([ "UL", "DL", "OL", "LI", "DD" ].includes(i.node.tagName) && ("up" === i.lastStep && (!t[n - 1] || "back" !== t[n - 1].lastStep) || ("DD" === r.node.tagName || "DD" === r.node.parentNode.tagName || "DL" === r.node.tagName) && !t.slice(n + 1).some(t => "P" === t.node.tagName))) {\n const r = i.node.textContent.replace(/\\s+/g, "");\n let s, o = [ i.node ];\n do {\n s = o.reduce((t, e) => t.concat(Array.from(e[this.context.childElementsProperty])), []);\n } while (s.length && s.every(t => [ "UL", "DL", "OL", "LI", "DD" ].includes(t.tagName)) && s.map(t => t.textContent).join("").replace(/\\s+/g, "") === r && (o = s));\n if (o.length > 1) {\n const r = o.map(t => ({\n node: t,\n isTextNode: !1,\n hasCurrentSignature: t.contains(e),\n hasForeignComponents: !1,\n lastStep: "replaced"\n }));\n t.splice(n, 1, ...r);\n } else o[0] !== i.node && Object.assign(i, {\n node: o[0],\n lastStep: "replaced"\n });\n }\n }\n return t;\n }\n getLevelsUpTree(t) {\n const e = [], r = new i.b(t);\n for (;r.parentNode(); ) {\n const t = r.currentNode;\n if ([ "UL", "DL", "OL" ].includes(t.tagName)) {\n if (t.classList.contains("cd-commentLevel")) {\n const r = t.getAttribute("class").match(/cd-commentLevel-(\\d+)/);\n return r && e.unshift(...Array(Number(r[1]))), e;\n }\n e.unshift(t);\n }\n }\n return e;\n }\n findHeadings() {\n const t = [ ...n.a.g.rootElement.getElementsByTagName("h2"), ...n.a.g.rootElement.getElementsByTagName("h3"), ...n.a.g.rootElement.getElementsByTagName("h4"), ...n.a.g.rootElement.getElementsByTagName("h5"), ...n.a.g.rootElement.getElementsByTagName("h6") ];\n return t.sort((t, e) => this.context.follows(t, e) ? 1 : -1), t;\n }\n }\n}, function(module, __webpack_exports__, __webpack_require__) {\n "use strict";\n __webpack_require__.r(__webpack_exports__);\n var _CdError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1), _CommentSkeleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28), _Parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32), _SectionSkeleton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29), _cd__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(0), _debug__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(27), _staticGlobals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(26), _treeWalker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(30), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9___default = __webpack_require__.n(_htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__), _timestamp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(5);\n self.cd = _cd__WEBPACK_IMPORTED_MODULE_4__.a, _cd__WEBPACK_IMPORTED_MODULE_4__.a.g = _staticGlobals__WEBPACK_IMPORTED_MODULE_6__.a, \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug = _debug__WEBPACK_IMPORTED_MODULE_5__.a, \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.init();\n const context = {\n CommentClass: _CommentSkeleton__WEBPACK_IMPORTED_MODULE_1__.a,\n SectionClass: _SectionSkeleton__WEBPACK_IMPORTED_MODULE_3__.a,\n childElementsProperty: "childElements",\n follows: (t, e) => t.follows(e),\n getAllTextNodes: _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__.a,\n getElementByClassName: (t, e) => t.getElementsByClassName(e, 1)[0] || null\n };\n let alarmTimeout;\n function setAlarm(t) {\n clearTimeout(alarmTimeout), alarmTimeout = setTimeout(() => {\n postMessage({\n type: "wakeUp"\n });\n }, t);\n }\n function parse() {\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments = [], _cd__WEBPACK_IMPORTED_MODULE_4__.a.sections = [], \n Object(_timestamp__WEBPACK_IMPORTED_MODULE_10__.d)(), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("processing comments");\n const t = new _Parser__WEBPACK_IMPORTED_MODULE_2__.a(context);\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find timestamps");\n const e = t.findTimestamps();\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find timestamps"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find signatures");\n const r = t.findSignatures(e);\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find signatures"), r.forEach(e => {\n try {\n const r = t.createComment(e);\n void 0 !== r.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.push(r);\n } catch (t) {\n t instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(t);\n }\n }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("processing comments"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("processing sections"), \n t.findHeadings().forEach(e => {\n try {\n const r = t.createSection(e);\n void 0 !== r.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.sections.push(r);\n } catch (t) {\n t instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(t);\n }\n }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.forEach((t, e) => {\n if (e !== _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.length - 1) {\n if (_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.specialElements.pageHasOutdents) {\n const e = new _treeWalker__WEBPACK_IMPORTED_MODULE_7__.b(t.elements[t.elements.length - 1]);\n let r;\n for (;!r && e.nextNode() && !e.currentNode.classList.contains("cd-commentPart"); ) r = e.currentNode.classList.contains("outdent-template");\n r && (_cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[t.id + 1].targetComment = t);\n }\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[t.id + 1].targetComment !== t && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.slice(t.id + 1).some(e => {\n if (!(e.section === t.section && e.level > t.level)) return !0;\n e.level !== t.level + 1 && e.id !== t.id + 1 || (e.targetComment = t);\n });\n }\n t.section && (t.sectionHeadline = t.section.headline, t.sectionAnchor = t.section.anchor, \n delete t.section), t.targetComment && (t.targetCommentAuthorName = t.targetComment.authorName, \n t.toMe = t.targetComment.own, delete t.targetComment), delete t.elements, delete t.parts, \n delete t.highlightables, delete t.addAttributes, delete t.setLevels, delete t.getSection;\n }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("processing sections"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("post message from the worker"), \n postMessage({\n type: "parse",\n comments: _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments\n }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("post message from the worker"), \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("worker operations"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.logAndResetEverything();\n }\n function onMessageFromWindow(e) {\n const message = e.data;\n if ("setAlarm" === message.type && setAlarm(message.interval), "removeAlarm" === message.type && clearTimeout(alarmTimeout), \n "parse" === message.type) {\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("worker operations"), Object.assign(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g, message.g), \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.config = message.config;\n let checker = _cd__WEBPACK_IMPORTED_MODULE_4__.a.config.checkForCustomForeignComponents;\n !checker || /^ *function +/.test(checker) || /^.+=>/.test(checker) || (checker = "function " + checker), \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.config.checkForCustomForeignComponents = eval(checker), \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.TIMESTAMP_PARSER = eval(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.TIMESTAMP_PARSER), \n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("parse html");\n const dom = Object(_htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__.parseDOM)(message.text, {\n withStartIndices: !0,\n withEndIndices: !0\n });\n _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("parse html"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement = new Document(dom), \n context.document = _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement, _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.specialElements = {\n pageHasOutdents: Boolean(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement.getElementsByClassName("outdent-template", 1).length)\n }, parse();\n }\n }\n onmessage = onMessageFromWindow;\n}, function(t) {\n t.exports = JSON.parse(\'{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}\');\n}, function(t, e, r) {\n "use strict";\n var n, i = "object" == typeof Reflect ? Reflect : null, s = i && "function" == typeof i.apply ? i.apply : function(t, e, r) {\n return Function.prototype.apply.call(t, e, r);\n };\n n = i && "function" == typeof i.ownKeys ? i.ownKeys : Object.getOwnPropertySymbols ? function(t) {\n return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t));\n } : function(t) {\n return Object.getOwnPropertyNames(t);\n };\n var o = Number.isNaN || function(t) {\n return t != t;\n };\n function a() {\n a.init.call(this);\n }\n t.exports = a, a.EventEmitter = a, a.prototype._events = void 0, a.prototype._eventsCount = 0, \n a.prototype._maxListeners = void 0;\n var u = 10;\n function c(t) {\n if ("function" != typeof t) throw new TypeError(\'The "listener" argument must be of type Function. Received type \' + typeof t);\n }\n function l(t) {\n return void 0 === t._maxListeners ? a.defaultMaxListeners : t._maxListeners;\n }\n function h(t, e, r, n) {\n var i, s, o, a;\n if (c(r), void 0 === (s = t._events) ? (s = t._events = Object.create(null), t._eventsCount = 0) : (void 0 !== s.newListener && (t.emit("newListener", e, r.listener ? r.listener : r), \n s = t._events), o = s[e]), void 0 === o) o = s[e] = r, ++t._eventsCount; else if ("function" == typeof o ? o = s[e] = n ? [ r, o ] : [ o, r ] : n ? o.unshift(r) : o.push(r), \n (i = l(t)) > 0 && o.length > i && !o.warned) {\n o.warned = !0;\n var u = new Error("Possible EventEmitter memory leak detected. " + o.length + " " + String(e) + " listeners added. Use emitter.setMaxListeners() to increase limit");\n u.name = "MaxListenersExceededWarning", u.emitter = t, u.type = e, u.count = o.length, \n a = u, console && console.warn && console.warn(a);\n }\n return t;\n }\n function d() {\n if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, \n 0 === arguments.length ? this.listener.call(this.target) : this.listener.apply(this.target, arguments);\n }\n function p(t, e, r) {\n var n = {\n fired: !1,\n wrapFn: void 0,\n target: t,\n type: e,\n listener: r\n }, i = d.bind(n);\n return i.listener = r, n.wrapFn = i, i;\n }\n function f(t, e, r) {\n var n = t._events;\n if (void 0 === n) return [];\n var i = n[e];\n return void 0 === i ? [] : "function" == typeof i ? r ? [ i.listener || i ] : [ i ] : r ? function(t) {\n for (var e = new Array(t.length), r = 0; r < e.length; ++r) e[r] = t[r].listener || t[r];\n return e;\n }(i) : m(i, i.length);\n }\n function _(t) {\n var e = this._events;\n if (void 0 !== e) {\n var r = e[t];\n if ("function" == typeof r) return 1;\n if (void 0 !== r) return r.length;\n }\n return 0;\n }\n function m(t, e) {\n for (var r = new Array(e), n = 0; n < e; ++n) r[n] = t[n];\n return r;\n }\n Object.defineProperty(a, "defaultMaxListeners", {\n enumerable: !0,\n get: function() {\n return u;\n },\n set: function(t) {\n if ("number" != typeof t || t < 0 || o(t)) throw new RangeError(\'The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received \' + t + ".");\n u = t;\n }\n }), a.init = function() {\n void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = Object.create(null), \n this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n }, a.prototype.setMaxListeners = function(t) {\n if ("number" != typeof t || t < 0 || o(t)) throw new RangeError(\'The value of "n" is out of range. It must be a non-negative number. Received \' + t + ".");\n return this._maxListeners = t, this;\n }, a.prototype.getMaxListeners = function() {\n return l(this);\n }, a.prototype.emit = function(t) {\n for (var e = [], r = 1; r < arguments.length; r++) e.push(arguments[r]);\n var n = "error" === t, i = this._events;\n if (void 0 !== i) n = n && void 0 === i.error; else if (!n) return !1;\n if (n) {\n var o;\n if (e.length > 0 && (o = e[0]), o instanceof Error) throw o;\n var a = new Error("Unhandled error." + (o ? " (" + o.message + ")" : ""));\n throw a.context = o, a;\n }\n var u = i[t];\n if (void 0 === u) return !1;\n if ("function" == typeof u) s(u, this, e); else {\n var c = u.length, l = m(u, c);\n for (r = 0; r < c; ++r) s(l[r], this, e);\n }\n return !0;\n }, a.prototype.addListener = function(t, e) {\n return h(this, t, e, !1);\n }, a.prototype.on = a.prototype.addListener, a.prototype.prependListener = function(t, e) {\n return h(this, t, e, !0);\n }, a.prototype.once = function(t, e) {\n return c(e), this.on(t, p(this, t, e)), this;\n }, a.prototype.prependOnceListener = function(t, e) {\n return c(e), this.prependListener(t, p(this, t, e)), this;\n }, a.prototype.removeListener = function(t, e) {\n var r, n, i, s, o;\n if (c(e), void 0 === (n = this._events)) return this;\n if (void 0 === (r = n[t])) return this;\n if (r === e || r.listener === e) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete n[t], \n n.removeListener && this.emit("removeListener", t, r.listener || e)); else if ("function" != typeof r) {\n for (i = -1, s = r.length - 1; s >= 0; s--) if (r[s] === e || r[s].listener === e) {\n o = r[s].listener, i = s;\n break;\n }\n if (i < 0) return this;\n 0 === i ? r.shift() : function(t, e) {\n for (;e + 1 < t.length; e++) t[e] = t[e + 1];\n t.pop();\n }(r, i), 1 === r.length && (n[t] = r[0]), void 0 !== n.removeListener && this.emit("removeListener", t, o || e);\n }\n return this;\n }, a.prototype.off = a.prototype.removeListener, a.prototype.removeAllListeners = function(t) {\n var e, r, n;\n if (void 0 === (r = this._events)) return this;\n if (void 0 === r.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), \n this._eventsCount = 0) : void 0 !== r[t] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete r[t]), \n this;\n if (0 === arguments.length) {\n var i, s = Object.keys(r);\n for (n = 0; n < s.length; ++n) "removeListener" !== (i = s[n]) && this.removeAllListeners(i);\n return this.removeAllListeners("removeListener"), this._events = Object.create(null), \n this._eventsCount = 0, this;\n }\n if ("function" == typeof (e = r[t])) this.removeListener(t, e); else if (void 0 !== e) for (n = e.length - 1; n >= 0; n--) this.removeListener(t, e[n]);\n return this;\n }, a.prototype.listeners = function(t) {\n return f(this, t, !0);\n }, a.prototype.rawListeners = function(t) {\n return f(this, t, !1);\n }, a.listenerCount = function(t, e) {\n return "function" == typeof t.listenerCount ? t.listenerCount(e) : _.call(t, e);\n }, a.prototype.listenerCount = _, a.prototype.eventNames = function() {\n return this._eventsCount > 0 ? n(this._events) : [];\n };\n}, function(t, e, r) {\n "use strict";\n var n, i = this && this.__extends || (n = function(t, e) {\n return (n = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function(t, e) {\n t.__proto__ = e;\n } || function(t, e) {\n for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n })(t, e);\n }, function(t, e) {\n function r() {\n this.constructor = t;\n }\n n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n new r);\n });\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var s = new Map([ [ "tag", 1 ], [ "script", 1 ], [ "style", 1 ], [ "directive", 1 ], [ "text", 3 ], [ "cdata", 4 ], [ "comment", 8 ] ]), o = function() {\n function t(t) {\n this.type = t, this.parent = null, this.prev = null, this.next = null, this.startIndex = null, \n this.endIndex = null;\n }\n return Object.defineProperty(t.prototype, "nodeType", {\n get: function() {\n return s.get(this.type) || 1;\n },\n enumerable: !0,\n configurable: !0\n }), Object.defineProperty(t.prototype, "parentNode", {\n get: function() {\n return this.parent || null;\n },\n set: function(t) {\n this.parent = t;\n },\n enumerable: !0,\n configurable: !0\n }), Object.defineProperty(t.prototype, "previousSibling", {\n get: function() {\n return this.prev || null;\n },\n set: function(t) {\n this.prev = t;\n },\n enumerable: !0,\n configurable: !0\n }), Object.defineProperty(t.prototype, "nextSibling", {\n get: function() {\n return this.next || null;\n },\n set: function(t) {\n this.next = t;\n },\n enumerable: !0,\n configurable: !0\n }), t;\n }();\n e.Node = o;\n var a = function(t) {\n function e(e, r) {\n var n = t.call(this, e) || this;\n return n.data = r, n;\n }\n return i(e, t), Object.defineProperty(e.prototype, "nodeValue", {\n get: function() {\n return this.data;\n },\n set: function(t) {\n this.data = t;\n },\n enumerable: !0,\n configurable: !0\n }), e;\n }(o);\n e.DataNode = a;\n var u = function(t) {\n function e(e, r) {\n var n = t.call(this, "directive", r) || this;\n return n.name = e, n;\n }\n return i(e, t), e;\n }(a);\n e.ProcessingInstruction = u;\n var c = function(t) {\n function e(e, r) {\n var n = t.call(this, e) || this;\n return n.children = r, n;\n }\n return i(e, t), Object.defineProperty(e.prototype, "firstChild", {\n get: function() {\n return this.children[0] || null;\n },\n enumerable: !0,\n configurable: !0\n }), Object.defineProperty(e.prototype, "lastChild", {\n get: function() {\n return this.children[this.children.length - 1] || null;\n },\n enumerable: !0,\n configurable: !0\n }), Object.defineProperty(e.prototype, "childNodes", {\n get: function() {\n return this.children;\n },\n set: function(t) {\n this.children = t;\n },\n enumerable: !0,\n configurable: !0\n }), e;\n }(o);\n e.NodeWithChildren = c;\n var l = function(t) {\n function e(e, r) {\n var n = t.call(this, "script" === e ? "script" : "style" === e ? "style" : "tag", []) || this;\n return n.name = e, n.attribs = r, n.attribs = r, n;\n }\n return i(e, t), Object.defineProperty(e.prototype, "tagName", {\n get: function() {\n return this.name;\n },\n set: function(t) {\n this.name = t;\n },\n enumerable: !0,\n configurable: !0\n }), e;\n }(c);\n e.Element = l;\n}, function(t, e, r) {\n "use strict";\n var n = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var i = r(12), s = n(r(38));\n function o(t, e) {\n return s.default(t, e);\n }\n e.getOuterHTML = o, e.getInnerHTML = function(t, e) {\n return i.hasChildren(t) ? t.children.map((function(t) {\n return o(t, e);\n })).join("") : "";\n }, e.getText = function t(e) {\n return Array.isArray(e) ? e.map(t).join("") : i.isTag(e) ? "br" === e.name ? "\\n" : t(e.children) : i.isCDATA(e) ? t(e.children) : i.isText(e) ? e.data : "";\n };\n}, function(t, e, r) {\n var n = r(15), i = r(39), s = r(40);\n s.elementNames.__proto__ = null, s.attributeNames.__proto__ = null;\n var o = {\n __proto__: null,\n style: !0,\n script: !0,\n xmp: !0,\n iframe: !0,\n noembed: !0,\n noframes: !0,\n plaintext: !0,\n noscript: !0\n };\n var a = {\n __proto__: null,\n area: !0,\n base: !0,\n basefont: !0,\n br: !0,\n col: !0,\n command: !0,\n embed: !0,\n frame: !0,\n hr: !0,\n img: !0,\n input: !0,\n isindex: !0,\n keygen: !0,\n link: !0,\n meta: !0,\n param: !0,\n source: !0,\n track: !0,\n wbr: !0\n }, u = t.exports = function(t, e) {\n Array.isArray(t) || t.cheerio || (t = [ t ]), e = e || {};\n for (var r = "", i = 0; i < t.length; i++) {\n var s = t[i];\n "root" === s.type ? r += u(s.children, e) : n.isTag(s) ? r += l(s, e) : s.type === n.Directive ? r += h(s) : s.type === n.Comment ? r += f(s) : s.type === n.CDATA ? r += p(s) : r += d(s, e);\n }\n return r;\n }, c = [ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ];\n function l(t, e) {\n "foreign" === e.xmlMode && (t.name = s.elementNames[t.name] || t.name, t.parent && c.indexOf(t.parent.name) >= 0 && (e = Object.assign({}, e, {\n xmlMode: !1\n }))), !e.xmlMode && [ "svg", "math" ].indexOf(t.name) >= 0 && (e = Object.assign({}, e, {\n xmlMode: "foreign"\n }));\n var r = "<" + t.name, n = function(t, e) {\n if (t) {\n var r, n = "";\n for (var o in t) r = t[o], n && (n += " "), "foreign" === e.xmlMode && (o = s.attributeNames[o] || o), \n n += o, (null !== r && "" !== r || e.xmlMode) && (n += \'="\' + (e.decodeEntities ? i.encodeXML(r) : r.replace(/\\"/g, """)) + \'"\');\n return n;\n }\n }(t.attribs, e);\n return n && (r += " " + n), !e.xmlMode || t.children && 0 !== t.children.length ? (r += ">", \n t.children && (r += u(t.children, e)), a[t.name] && !e.xmlMode || (r += "</" + t.name + ">")) : r += "/>", \n r;\n }\n function h(t) {\n return "<" + t.data + ">";\n }\n function d(t, e) {\n var r = t.data || "";\n return !e.decodeEntities || t.parent && t.parent.name in o || (r = i.encodeXML(r)), \n r;\n }\n function p(t) {\n return "<![CDATA[" + t.children[0].data + "]]>";\n }\n function f(t) {\n return "\\x3c!--" + t.data + "--\\x3e";\n }\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.encode = e.decodeStrict = e.decode = void 0;\n var n = r(23), i = r(24);\n e.decode = function(t, e) {\n return (!e || e <= 0 ? n.decodeXML : n.decodeHTML)(t);\n }, e.decodeStrict = function(t, e) {\n return (!e || e <= 0 ? n.decodeXML : n.decodeHTMLStrict)(t);\n }, e.encode = function(t, e) {\n return (!e || e <= 0 ? i.encodeXML : i.encodeHTML)(t);\n };\n var s = r(24);\n Object.defineProperty(e, "encodeXML", {\n enumerable: !0,\n get: function() {\n return s.encodeXML;\n }\n }), Object.defineProperty(e, "encodeHTML", {\n enumerable: !0,\n get: function() {\n return s.encodeHTML;\n }\n }), Object.defineProperty(e, "escape", {\n enumerable: !0,\n get: function() {\n return s.escape;\n }\n }), Object.defineProperty(e, "encodeHTML4", {\n enumerable: !0,\n get: function() {\n return s.encodeHTML;\n }\n }), Object.defineProperty(e, "encodeHTML5", {\n enumerable: !0,\n get: function() {\n return s.encodeHTML;\n }\n });\n var o = r(23);\n Object.defineProperty(e, "decodeXML", {\n enumerable: !0,\n get: function() {\n return o.decodeXML;\n }\n }), Object.defineProperty(e, "decodeHTML", {\n enumerable: !0,\n get: function() {\n return o.decodeHTML;\n }\n }), Object.defineProperty(e, "decodeHTMLStrict", {\n enumerable: !0,\n get: function() {\n return o.decodeHTMLStrict;\n }\n }), Object.defineProperty(e, "decodeHTML4", {\n enumerable: !0,\n get: function() {\n return o.decodeHTML;\n }\n }), Object.defineProperty(e, "decodeHTML5", {\n enumerable: !0,\n get: function() {\n return o.decodeHTML;\n }\n }), Object.defineProperty(e, "decodeHTML4Strict", {\n enumerable: !0,\n get: function() {\n return o.decodeHTMLStrict;\n }\n }), Object.defineProperty(e, "decodeHTML5Strict", {\n enumerable: !0,\n get: function() {\n return o.decodeHTMLStrict;\n }\n }), Object.defineProperty(e, "decodeXMLStrict", {\n enumerable: !0,\n get: function() {\n return o.decodeXML;\n }\n });\n}, function(t) {\n t.exports = JSON.parse(\'{"elementNames":{"altglyph":"altGlyph","altglyphdef":"altGlyphDef","altglyphitem":"altGlyphItem","animatecolor":"animateColor","animatemotion":"animateMotion","animatetransform":"animateTransform","clippath":"clipPath","feblend":"feBlend","fecolormatrix":"feColorMatrix","fecomponenttransfer":"feComponentTransfer","fecomposite":"feComposite","feconvolvematrix":"feConvolveMatrix","fediffuselighting":"feDiffuseLighting","fedisplacementmap":"feDisplacementMap","fedistantlight":"feDistantLight","fedropshadow":"feDropShadow","feflood":"feFlood","fefunca":"feFuncA","fefuncb":"feFuncB","fefuncg":"feFuncG","fefuncr":"feFuncR","fegaussianblur":"feGaussianBlur","feimage":"feImage","femerge":"feMerge","femergenode":"feMergeNode","femorphology":"feMorphology","feoffset":"feOffset","fepointlight":"fePointLight","fespecularlighting":"feSpecularLighting","fespotlight":"feSpotLight","fetile":"feTile","feturbulence":"feTurbulence","foreignobject":"foreignObject","glyphref":"glyphRef","lineargradient":"linearGradient","radialgradient":"radialGradient","textpath":"textPath"},"attributeNames":{"definitionurl":"definitionURL","attributename":"attributeName","attributetype":"attributeType","basefrequency":"baseFrequency","baseprofile":"baseProfile","calcmode":"calcMode","clippathunits":"clipPathUnits","diffuseconstant":"diffuseConstant","edgemode":"edgeMode","filterunits":"filterUnits","glyphref":"glyphRef","gradienttransform":"gradientTransform","gradientunits":"gradientUnits","kernelmatrix":"kernelMatrix","kernelunitlength":"kernelUnitLength","keypoints":"keyPoints","keysplines":"keySplines","keytimes":"keyTimes","lengthadjust":"lengthAdjust","limitingconeangle":"limitingConeAngle","markerheight":"markerHeight","markerunits":"markerUnits","markerwidth":"markerWidth","maskcontentunits":"maskContentUnits","maskunits":"maskUnits","numoctaves":"numOctaves","pathlength":"pathLength","patterncontentunits":"patternContentUnits","patterntransform":"patternTransform","patternunits":"patternUnits","pointsatx":"pointsAtX","pointsaty":"pointsAtY","pointsatz":"pointsAtZ","preservealpha":"preserveAlpha","preserveaspectratio":"preserveAspectRatio","primitiveunits":"primitiveUnits","refx":"refX","refy":"refY","repeatcount":"repeatCount","repeatdur":"repeatDur","requiredextensions":"requiredExtensions","requiredfeatures":"requiredFeatures","specularconstant":"specularConstant","specularexponent":"specularExponent","spreadmethod":"spreadMethod","startoffset":"startOffset","stddeviation":"stdDeviation","stitchtiles":"stitchTiles","surfacescale":"surfaceScale","systemlanguage":"systemLanguage","tablevalues":"tableValues","targetx":"targetX","targety":"targetY","textlength":"textLength","viewbox":"viewBox","viewtarget":"viewTarget","xchannelselector":"xChannelSelector","ychannelselector":"yChannelSelector","zoomandpan":"zoomAndPan"}}\');\n}, function(t, e, r) {\n "use strict";\n function n(t) {\n return t.children || null;\n }\n function i(t) {\n return t.parent || null;\n }\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.getChildren = n, e.getParent = i, e.getSiblings = function(t) {\n var e = i(t);\n return e ? n(e) : [ t ];\n }, e.getAttributeValue = function(t, e) {\n var r;\n return null === (r = t.attribs) || void 0 === r ? void 0 : r[e];\n }, e.hasAttrib = function(t, e) {\n return !!t.attribs && Object.prototype.hasOwnProperty.call(t.attribs, e) && null != t.attribs[e];\n }, e.getName = function(t) {\n return t.name;\n };\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n }), e.removeElement = function(t) {\n if (t.prev && (t.prev.next = t.next), t.next && (t.next.prev = t.prev), t.parent) {\n var e = t.parent.children;\n e.splice(e.lastIndexOf(t), 1);\n }\n }, e.replaceElement = function(t, e) {\n var r = e.prev = t.prev;\n r && (r.next = e);\n var n = e.next = t.next;\n n && (n.prev = e);\n var i = e.parent = t.parent;\n if (i) {\n var s = i.children;\n s[s.lastIndexOf(t)] = e;\n }\n }, e.appendChild = function(t, e) {\n if (e.parent = t, 1 !== t.children.push(e)) {\n var r = t.children[t.children.length - 2];\n r.next = e, e.prev = r, e.next = null;\n }\n }, e.append = function(t, e) {\n var r = t.parent, n = t.next;\n if (e.next = n, e.prev = t, t.next = e, e.parent = r, n) {\n if (n.prev = e, r) {\n var i = r.children;\n i.splice(i.lastIndexOf(n), 0, e);\n }\n } else r && r.children.push(e);\n }, e.prepend = function(t, e) {\n var r = t.parent;\n if (r) {\n var n = r.children;\n n.splice(n.lastIndexOf(t), 0, e);\n }\n t.prev && (t.prev.next = e), e.parent = r, e.prev = t.prev, e.next = t, t.prev = e;\n };\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = r(25), i = r(12);\n function s(t) {\n return "text" === t.type;\n }\n var o = {\n tag_name: function(t) {\n return "function" == typeof t ? function(e) {\n return i.isTag(e) && t(e.name);\n } : "*" === t ? i.isTag : function(e) {\n return i.isTag(e) && e.name === t;\n };\n },\n tag_type: function(t) {\n return "function" == typeof t ? function(e) {\n return t(e.type);\n } : function(e) {\n return e.type === t;\n };\n },\n tag_contains: function(t) {\n return "function" == typeof t ? function(e) {\n return s(e) && t(e.data);\n } : function(e) {\n return s(e) && e.data === t;\n };\n }\n };\n function a(t, e) {\n return "function" == typeof e ? function(r) {\n return i.isTag(r) && e(r.attribs[t]);\n } : function(r) {\n return i.isTag(r) && r.attribs[t] === e;\n };\n }\n function u(t, e) {\n return function(r) {\n return t(r) || e(r);\n };\n }\n function c(t) {\n var e = Object.keys(t).map((function(e) {\n var r = t[e];\n return e in o ? o[e](r) : a(e, r);\n }));\n return 0 === e.length ? null : e.reduce(u);\n }\n e.testElement = function(t, e) {\n var r = c(t);\n return !r || r(e);\n }, e.getElements = function(t, e, r, i) {\n void 0 === i && (i = 1 / 0);\n var s = c(t);\n return s ? n.filter(s, e, r, i) : [];\n }, e.getElementById = function(t, e, r) {\n return void 0 === r && (r = !0), Array.isArray(e) || (e = [ e ]), n.findOne(a("id", t), e, r);\n }, e.getElementsByTagName = function(t, e, r, i) {\n return void 0 === i && (i = 1 / 0), n.filter(o.tag_name(t), e, r, i);\n }, e.getElementsByTagType = function(t, e, r, i) {\n return void 0 === r && (r = !0), void 0 === i && (i = 1 / 0), n.filter(o.tag_type(t), e, r, i);\n };\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = r(12);\n function i(t, e) {\n var r = [], i = [];\n if (t === e) return 0;\n for (var s = n.hasChildren(t) ? t : t.parent; s; ) r.unshift(s), s = s.parent;\n for (s = n.hasChildren(e) ? e : e.parent; s; ) i.unshift(s), s = s.parent;\n for (var o = 0; r[o] === i[o]; ) o++;\n if (0 === o) return 1;\n var a = r[o - 1], u = a.children, c = r[o], l = i[o];\n return u.indexOf(c) > u.indexOf(l) ? a === e ? 20 : 4 : a === t ? 10 : 2;\n }\n e.removeSubsets = function(t) {\n for (var e = t.length; --e >= 0; ) {\n var r = t[e];\n if (e > 0 && t.lastIndexOf(r, e - 1) >= 0) t.splice(e, 1); else for (var n = r.parent; n; n = n.parent) if (t.indexOf(n) > -1) {\n t.splice(e, 1);\n break;\n }\n }\n return t;\n }, e.compareDocumentPosition = i, e.uniqueSort = function(t) {\n return (t = t.filter((function(t, e, r) {\n return !r.includes(t, e + 1);\n }))).sort((function(t, e) {\n var r = i(t, e);\n return 2 & r ? -1 : 4 & r ? 1 : 0;\n })), t;\n };\n}, function(t, e) {}, function(t, e, r) {\n "use strict";\n var n, i = this && this.__extends || (n = function(t, e) {\n return (n = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function(t, e) {\n t.__proto__ = e;\n } || function(t, e) {\n for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n })(t, e);\n }, function(t, e) {\n function r() {\n this.constructor = t;\n }\n n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n new r);\n }), s = this && this.__importDefault || function(t) {\n return t && t.__esModule ? t : {\n default: t\n };\n };\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var o = function(t) {\n function e(e) {\n void 0 === e && (e = {});\n var r = t.call(this, (function(t) {\n for (var e, n = [], i = 1; i < arguments.length; i++) n[i - 1] = arguments[i];\n r.events.push([ t ].concat(n)), r._cbs[t] && (e = r._cbs)[t].apply(e, n);\n })) || this;\n return r._cbs = e, r.events = [], r;\n }\n return i(e, t), e.prototype.onreset = function() {\n this.events = [], this._cbs.onreset && this._cbs.onreset();\n }, e.prototype.restart = function() {\n var t;\n this._cbs.onreset && this._cbs.onreset();\n for (var e = 0; e < this.events.length; e++) {\n var r = this.events[e], n = r[0], i = r.slice(1);\n this._cbs[n] && (t = this._cbs)[n].apply(t, i);\n }\n }, e;\n }(s(r(47)).default);\n e.CollectingHandler = o;\n}, function(t, e, r) {\n "use strict";\n Object.defineProperty(e, "__esModule", {\n value: !0\n });\n var n = function() {\n function t(t) {\n this._func = t;\n }\n return t.prototype.onattribute = function(t, e) {\n this._func("onattribute", t, e);\n }, t.prototype.oncdatastart = function() {\n this._func("oncdatastart");\n }, t.prototype.oncdataend = function() {\n this._func("oncdataend");\n }, t.prototype.ontext = function(t) {\n this._func("ontext", t);\n }, t.prototype.onprocessinginstruction = function(t, e) {\n this._func("onprocessinginstruction", t, e);\n }, t.prototype.oncomment = function(t) {\n this._func("oncomment", t);\n }, t.prototype.oncommentend = function() {\n this._func("oncommentend");\n }, t.prototype.onclosetag = function(t) {\n this._func("onclosetag", t);\n }, t.prototype.onopentag = function(t, e) {\n this._func("onopentag", t, e);\n }, t.prototype.onopentagname = function(t) {\n this._func("onopentagname", t);\n }, t.prototype.onerror = function(t) {\n this._func("onerror", t);\n }, t.prototype.onend = function() {\n this._func("onend");\n }, t.prototype.onparserinit = function(t) {\n this._func("onparserinit", t);\n }, t.prototype.onreset = function() {\n this._func("onreset");\n }, t;\n }();\n e.default = n;\n}, function(t, e, r) {\n "use strict";\n t.exports = function(t, e) {\n var r, n, i, s = {}, o = {}, a = {}, u = {};\n if (a[0] = "HTML_SPECIALCHARS", a[1] = "HTML_ENTITIES", u[0] = "ENT_NOQUOTES", u[2] = "ENT_COMPAT", \n u[3] = "ENT_QUOTES", n = isNaN(t) ? t ? t.toUpperCase() : "HTML_SPECIALCHARS" : a[t], \n i = isNaN(e) ? e ? e.toUpperCase() : "ENT_COMPAT" : u[e], "HTML_SPECIALCHARS" !== n && "HTML_ENTITIES" !== n) throw new Error("Table: " + n + " not supported");\n for (r in s[38] = "&", "HTML_ENTITIES" === n && (s[160] = " ", s[161] = "¡", \n s[162] = "¢", s[163] = "£", s[164] = "¤", s[165] = "¥", s[166] = "¦", \n s[167] = "§", s[168] = "¨", s[169] = "©", s[170] = "ª", s[171] = "«", \n s[172] = "¬", s[173] = "­", s[174] = "®", s[175] = "¯", s[176] = "°", \n s[177] = "±", s[178] = "²", s[179] = "³", s[180] = "´", s[181] = "µ", \n s[182] = "¶", s[183] = "·", s[184] = "¸", s[185] = "¹", s[186] = "º", \n s[187] = "»", s[188] = "¼", s[189] = "½", s[190] = "¾", \n s[191] = "¿", s[192] = "À", s[193] = "Á", s[194] = "Â", \n s[195] = "Ã", s[196] = "Ä", s[197] = "Å", s[198] = "Æ", \n s[199] = "Ç", s[200] = "È", s[201] = "É", s[202] = "Ê", \n s[203] = "Ë", s[204] = "Ì", s[205] = "Í", s[206] = "Î", \n s[207] = "Ï", s[208] = "Ð", s[209] = "Ñ", s[210] = "Ò", s[211] = "Ó", \n s[212] = "Ô", s[213] = "Õ", s[214] = "Ö", s[215] = "×", \n s[216] = "Ø", s[217] = "Ù", s[218] = "Ú", s[219] = "Û", \n s[220] = "Ü", s[221] = "Ý", s[222] = "Þ", s[223] = "ß", \n s[224] = "à", s[225] = "á", s[226] = "â", s[227] = "ã", \n s[228] = "ä", s[229] = "å", s[230] = "æ", s[231] = "ç", \n s[232] = "è", s[233] = "é", s[234] = "ê", s[235] = "ë", \n s[236] = "ì", s[237] = "í", s[238] = "î", s[239] = "ï", \n s[240] = "ð", s[241] = "ñ", s[242] = "ò", s[243] = "ó", \n s[244] = "ô", s[245] = "õ", s[246] = "ö", s[247] = "÷", \n s[248] = "ø", s[249] = "ù", s[250] = "ú", s[251] = "û", \n s[252] = "ü", s[253] = "ý", s[254] = "þ", s[255] = "ÿ"), \n "ENT_NOQUOTES" !== i && (s[34] = """), "ENT_QUOTES" === i && (s[39] = "'"), \n s[60] = "<", s[62] = ">", s) s.hasOwnProperty(r) && (o[String.fromCharCode(r)] = s[r]);\n return o;\n };\n} ]);', null);
};
}, function(e, t, n) {
"use strict";
e.exports = function(e, t) {
var n, i, o, s = {}, r = {}, a = {}, c = {};
if (a[0] = "HTML_SPECIALCHARS", a[1] = "HTML_ENTITIES", c[0] = "ENT_NOQUOTES", c[2] = "ENT_COMPAT",
c[3] = "ENT_QUOTES", i = isNaN(e) ? e ? e.toUpperCase() : "HTML_SPECIALCHARS" : a[e],
o = isNaN(t) ? t ? t.toUpperCase() : "ENT_COMPAT" : c[t], "HTML_SPECIALCHARS" !== i && "HTML_ENTITIES" !== i) throw new Error("Table: " + i + " not supported");
for (n in s[38] = "&", "HTML_ENTITIES" === i && (s[160] = " ", s[161] = "¡",
s[162] = "¢", s[163] = "£", s[164] = "¤", s[165] = "¥", s[166] = "¦",
s[167] = "§", s[168] = "¨", s[169] = "©", s[170] = "ª", s[171] = "«",
s[172] = "¬", s[173] = "­", s[174] = "®", s[175] = "¯", s[176] = "°",
s[177] = "±", s[178] = "²", s[179] = "³", s[180] = "´", s[181] = "µ",
s[182] = "¶", s[183] = "·", s[184] = "¸", s[185] = "¹", s[186] = "º",
s[187] = "»", s[188] = "¼", s[189] = "½", s[190] = "¾",
s[191] = "¿", s[192] = "À", s[193] = "Á", s[194] = "Â",
s[195] = "Ã", s[196] = "Ä", s[197] = "Å", s[198] = "Æ",
s[199] = "Ç", s[200] = "È", s[201] = "É", s[202] = "Ê",
s[203] = "Ë", s[204] = "Ì", s[205] = "Í", s[206] = "Î",
s[207] = "Ï", s[208] = "Ð", s[209] = "Ñ", s[210] = "Ò", s[211] = "Ó",
s[212] = "Ô", s[213] = "Õ", s[214] = "Ö", s[215] = "×",
s[216] = "Ø", s[217] = "Ù", s[218] = "Ú", s[219] = "Û",
s[220] = "Ü", s[221] = "Ý", s[222] = "Þ", s[223] = "ß",
s[224] = "à", s[225] = "á", s[226] = "â", s[227] = "ã",
s[228] = "ä", s[229] = "å", s[230] = "æ", s[231] = "ç",
s[232] = "è", s[233] = "é", s[234] = "ê", s[235] = "ë",
s[236] = "ì", s[237] = "í", s[238] = "î", s[239] = "ï",
s[240] = "ð", s[241] = "ñ", s[242] = "ò", s[243] = "ó",
s[244] = "ô", s[245] = "õ", s[246] = "ö", s[247] = "÷",
s[248] = "ø", s[249] = "ù", s[250] = "ú", s[251] = "û",
s[252] = "ü", s[253] = "ý", s[254] = "þ", s[255] = "ÿ"),
"ENT_NOQUOTES" !== o && (s[34] = """), "ENT_QUOTES" === o && (s[39] = "'"),
s[60] = "<", s[62] = ">", s) s.hasOwnProperty(n) && (r[String.fromCharCode(n)] = s[n]);
return r;
};
}, function(e, t, n) {
var i = n(3), o = n(15);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".tribute-container {\n position: absolute;\n top: 0;\n left: 0;\n height: auto;\n max-height: 300px;\n max-width: 500px;\n overflow: auto;\n display: block;\n z-index: 999999;\n}\n.tribute-container ul {\n margin: 0;\n margin-top: 2px;\n padding: 0;\n list-style: none;\n background: #efefef;\n}\n.tribute-container li {\n padding: 5px 5px;\n cursor: pointer;\n}\n.tribute-container li.highlight {\n background: #ddd;\n}\n.tribute-container li span {\n font-weight: bold;\n}\n.tribute-container li.no-match {\n cursor: default;\n}\n.tribute-container .menu-highlighted {\n font-weight: bold;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
"use strict";
var i = window.URL || window.webkitURL;
e.exports = function(e, t) {
try {
try {
var n;
try {
(n = new (window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder)).append(e),
n = n.getBlob();
} catch (t) {
n = new Blob([ e ]);
}
return new Worker(i.createObjectURL(n));
} catch (t) {
return new Worker("data:application/javascript," + encodeURIComponent(e));
}
} catch (e) {
if (!t) throw Error("Inline worker is not supported");
return new Worker(t);
}
};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, "a:not([href]) {\n cursor: pointer;\n}\n", "" ]), e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(19);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".cd-commentPart-first {\n margin-top: 0.5em;\n}\n.cd-commentPart-last {\n margin-bottom: 0.5em;\n}\nol > li.cd-commentPart-first {\n margin-top: 0;\n}\nol > li.cd-commentPart-last {\n margin-bottom: 0.1em;\n}\n.cd-commentLevel.cd-commentLevel:not(ol) {\n list-style-type: none;\n list-style-image: none;\n padding: 0 0 0 1em;\n margin: 0 0 0 1em;\n border: 1px solid #c8ccd1;\n border-width: 0 0 0 1px;\n}\n.mw-content-ltr .cd-commentLevel.cd-commentLevel:not(ol) {\n padding: 0 0 0 1em;\n margin: 0 0 0 1em;\n border-width: 0 0 0 1px;\n}\n.mw-content-rtl .cd-commentLevel.cd-commentLevel:not(ol) {\n padding: 0 1em 0 0;\n margin: 0 1em 0 0;\n border-width: 0 1px 0 0;\n}\ndl.cd-commentLevel > dd {\n margin-left: 0;\n}\n.mw-content-ltr dl.cd-commentLevel > dd {\n margin-left: 0;\n}\n.mw-content-rtl dl.cd-commentLevel > dd {\n margin-right: 0;\n}\n.cd-button-pending.cd-button-pending.cd-button-pending .oo-ui-buttonElement-button {\n cursor: wait;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(21);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, '.cd-commentForm.cd-commentForm {\n display: flow-root;\n -ms-display: grid;\n margin: 0.5em 0;\n}\n.cd-commentForm.cd-commentForm.cd-commentLevel {\n margin-top: 0.5em;\n}\n.cd-commentForm.cd-commentForm-addSection,\n.cd-commentForm.cd-commentForm-addSubsection,\n.cd-commentForm.cd-commentForm-replyInSection:not(.cd-commentForm-inNumberedList),\n.cd-commentForm.cd-commentForm-sectionOpeningComment {\n margin-top: 1em;\n}\n.cd-commentForm .cd-headlineInput {\n margin-bottom: 0.25em;\n}\n.cd-commentForm .oo-ui-textInputWidget {\n max-width: none;\n}\n.cd-commentForm .cd-summaryInput {\n margin-top: 0.25em;\n}\n.cd-commentForm .cd-checkboxesContainer {\n margin-top: 0.5em;\n}\n.cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n margin-right: 1em;\n}\n.cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n margin-right: 0;\n}\n.cd-commentForm .cd-buttonsContainer {\n margin-top: 0.5em;\n display: flow-root;\n -ms-display: grid;\n}\n.cd-commentForm .cd-leftButtonsContainer {\n float: left;\n}\n.cd-commentForm .cd-rightButtonsContainer {\n float: right;\n}\n.cd-commentForm .cd-rightButtonsContainer > .oo-ui-buttonWidget:last-child {\n margin-right: -0.3125em;\n}\n.cd-commentForm .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {\n vertical-align: middle;\n}\n.cd-commentForm .cd-scriptSettingsButton {\n margin: -1em 0 0;\n}\n.cd-commentForm table.diff {\n margin-bottom: 0.5em;\n}\n.cd-commentForm + .cd-commentLevel,\n.cd-commentForm + dd > .cd-commentLevel:first-child,\n.cd-commentForm + li > .cd-commentLevel:first-child {\n padding-top: 0.1px;\n}\n.cd-commentForm + .cd-commentForm {\n padding-top: 0.5em;\n}\n.cd-commentForm .wikiEditor-ui-left {\n float: none;\n}\n.cd-commentForm .wikiEditor-ui-toolbar {\n z-index: 1;\n}\n.cd-commentForm-innerWrapper {\n margin-bottom: 0;\n display: flow-root;\n -ms-display: grid;\n}\n.cd-commentForm-signature {\n opacity: 0.67;\n}\n.cd-commentForm-dummyElement {\n height: 0;\n}\n.ltr .cd-commentForm .cd-summaryInput {\n margin-right: 8px;\n margin-left: 0;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer {\n direction: ltr;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n margin-right: 1em;\n margin-left: 0;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n margin-right: 0;\n}\n.ltr .cd-commentForm .cd-buttonsContainer {\n direction: ltr;\n}\n.ltr .cd-commentForm .cd-leftButtonsContainer {\n float: left;\n}\n.ltr .cd-commentForm .cd-rightButtonsContainer {\n float: right;\n}\n.rtl .cd-commentForm .cd-summaryInput {\n margin-left: 8px;\n margin-right: 0;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer {\n direction: rtl;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n margin-left: 1em;\n margin-right: 0;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n margin-left: 0;\n}\n.rtl .cd-commentForm .cd-buttonsContainer {\n direction: rtl;\n}\n.rtl .cd-commentForm .cd-leftButtonsContainer {\n float: right;\n}\n.rtl .cd-commentForm .cd-rightButtonsContainer {\n float: left;\n}\nol > li.cd-commentForm.cd-commentForm {\n display: list-item;\n -ms-display: list-item;\n}\n.cd-replyWrapper,\n.cd-sectionButtonContainer .cd-commentForm.cd-commentForm {\n margin-top: 0.5em;\n}\n.cd-commentInput {\n margin-top: 1px;\n border: 1px solid #a2a9b1;\n}\n.cd-commentInput .wikiEditor-ui .wikiEditor-ui-top {\n border-color: #a2a9b1;\n}\n.cd-commentInput .wikiEditor-ui .wikiEditor-ui-view {\n border: 0;\n}\n.ltr .cd-commentInput {\n margin-right: 8px;\n margin-left: 0;\n}\n.rtl .cd-commentInput {\n margin-left: 8px;\n margin-right: 0;\n}\n.cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input {\n width: calc(100% + 2px);\n margin: -1px;\n position: relative;\n}\nbody:not(.skin-monobook) .cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input {\n border: 1px solid #a2a9b1;\n box-shadow: none;\n}\nbody:not(.skin-monobook) .cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input:focus {\n outline: 2px solid #36c;\n outline-offset: -2px;\n}\n.cd-previewArea {\n margin-top: 0.5em;\n padding: 0.5em 0.75em;\n background-color: #f8f9fa;\n display: flow-root;\n -ms-display: grid;\n}\n.cd-previewArea > .mw-parser-output > *:first-child {\n margin-top: 0;\n}\n.cd-previewArea > .mw-parser-output > *:last-child {\n margin-bottom: 0;\n}\n.cd-previewArea .mw-editsection {\n display: none;\n}\n.cd-previewArea:empty {\n margin: 0;\n padding: 0;\n}\n.cd-previewArea-above {\n margin-top: 0;\n margin-bottom: 0.5em;\n width: calc(100% - 1.5em);\n}\n.cd-previewArea-indentedComment > .mw-parser-output > dl > dd {\n margin-left: 0;\n margin-bottom: 0;\n}\n.cd-messageArea {\n width: 100%;\n}\n.cd-previewArea,\n.cd-messageArea {\n position: relative;\n clear: both;\n}\n.cd-previewArea .cd-closeButton,\n.cd-messageArea .cd-closeButton {\n background-color: #f8f9fa;\n}\n.cd-previewArea:hover .cd-closeButton,\n.cd-messageArea:hover .cd-closeButton {\n opacity: 1;\n}\n.cd-previewArea-above,\n.cd-messageArea {\n float: left;\n}\n.cd-previewArea-above + *,\n.cd-messageArea + * {\n clear: both;\n}\n.cd-commentForm-blockLabel {\n color: #72777d;\n margin-bottom: 0.5em;\n}\n.cd-closeButton {\n position: absolute;\n z-index: 1;\n top: 0;\n right: 0;\n width: 20px;\n height: 20px;\n background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/18/OOjs_UI_icon_close-ltr.svg);\n background-position: center center;\n background-repeat: no-repeat;\n opacity: 0;\n transition: opacity 0.2s ease-in;\n}\n.cd-message {\n margin-bottom: 0.5em;\n}\n.cd-popupsOverlay {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n font-size: 14px;\n}\n.cd-insertButtons {\n background-color: #f8f9fa;\n border-color: #a2a9b1;\n border-width: 0 1px 1px;\n border-style: solid;\n font-size: 0.928571em;\n line-height: 1.384616em;\n}\n.cd-insertButtons::after {\n display: block;\n content: "";\n clear: both;\n}\n.cd-insertButtons:empty {\n border: 0;\n}\n.cd-insertButtons-item {\n color: #222;\n padding: 2px 0.5em 3px;\n white-space: nowrap;\n display: block;\n float: left;\n}\n.cd-insertButtons-item:hover,\n.cd-insertButtons-item:focus {\n text-decoration: none;\n color: #222;\n background-color: rgba(0, 23, 70, 0.086);\n}\n.cd-toolbarPlaceholder {\n background-color: #f8f9fa;\n border-color: #a2a9b1;\n border-width: 1px 1px 0;\n border-style: solid;\n height: 32px;\n margin: 1px 0 -1px;\n}\n.cd-commentForm-disabled .wikiEditor-ui-top,\n.cd-commentForm-disabled .cd-insertButtons {\n pointer-events: none;\n}\n.tribute-container.cd-mentionsContainer {\n font-size: 14px;\n margin-top: 3px;\n line-height: 20px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\n border: 1px solid #a2a9b1;\n}\n.tribute-container.cd-mentionsContainer ul {\n background-color: #fff;\n margin: 0;\n}\n.tribute-container.cd-mentionsContainer li {\n padding: 5px 7px;\n margin: 0;\n}\n.tribute-container.cd-mentionsContainer li span {\n font-weight: normal;\n}\n.tribute-container.cd-mentionsContainer .highlight {\n background-color: rgba(0, 23, 70, 0.086);\n font-weight: normal;\n}\n', "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(23);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, '.cd-sectionLinkWrapper::before {\n content: " | ";\n color: #54595d;\n}\n.cd-sectionLink-pending.cd-sectionLink-pending {\n opacity: 0.5;\n cursor: wait;\n text-decoration: none;\n}\n.cd-sectionButtonContainer {\n margin-top: 0.5em;\n}\n.cd-replyWrapper:not(.cd-commentForm) {\n margin-left: -1px;\n}\n.mw-content-ltr .cd-replyWrapper:not(.cd-commentForm) {\n margin-left: -1px;\n margin-right: 0;\n}\n.mw-content-rtl .cd-replyWrapper:not(.cd-commentForm) {\n margin-right: -1px;\n margin-left: 0;\n}\n.cd-sectionButton .oo-ui-buttonElement-button {\n padding-top: 0;\n}\nol .cd-sectionButton {\n margin-top: -2px;\n}\n', "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(25);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".cd-commentUnderlay {\n position: absolute;\n z-index: -1;\n}\n.cd-commentUnderlay-focused.cd-commentUnderlay-focused {\n background-color: var(--cd-comment-underlay-focused-color);\n}\n.cd-commentUnderlay-target.cd-commentUnderlay-target {\n background-color: var(--cd-comment-underlay-target-color);\n}\n.cd-commentUnderlay-new {\n background-color: var(--cd-comment-underlay-new-color);\n}\n.cd-commentUnderlay-own {\n background-color: var(--cd-comment-underlay-own-color);\n}\n.cd-commentOverlay {\n position: absolute;\n display: none;\n pointer-events: none;\n justify-content: flex-end;\n}\n.cd-commentOverlay-focused {\n display: flex;\n}\n.cd-commentOverlay-innerWrapper {\n position: absolute;\n z-index: 1;\n bottom: 0;\n font-size: 14px;\n line-height: normal;\n pointer-events: all;\n display: flex;\n flex-direction: row;\n}\n.cd-commentOverlay-gradient {\n width: 1.4em;\n display: inline-block;\n padding: 0 1px 4px;\n line-height: 1.28571429em;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n}\n.cd-commentOverlay-content {\n display: inline-flex;\n padding: 0 0.5em 2px;\n background-color: var(--cd-comment-underlay-focused-color);\n flex-direction: row;\n}\n.cd-commentOverlay-content .oo-ui-buttonWidget {\n margin-right: 0;\n}\n.cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n margin-left: 1em;\n}\n.cd-commentOverlay .cd-button.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover,\n.cd-commentOverlay .cd-button.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active {\n background-color: transparent;\n}\n.sitedir-ltr .cd-commentOverlay-content .oo-ui-buttonWidget {\n margin-right: 0;\n}\n.sitedir-ltr .cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n margin-left: 1em;\n}\n.sitedir-rtl .cd-commentOverlay-content .oo-ui-buttonWidget {\n margin-left: 0;\n}\n.sitedir-rtl .cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n margin-right: 1em;\n}\n.cd-commentLayersContainerParent {\n position: relative;\n z-index: 0;\n display: flow-root;\n -ms-display: grid;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(27);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, '#cd-navPanel {\n position: fixed;\n top: 44%;\n left: 0;\n z-index: 5;\n width: 32px;\n background-color: #fff;\n border: 1px solid #a2a9b1;\n border-left-width: 0;\n opacity: 0.695;\n font-size: 13px;\n line-height: 1.2;\n color: #000;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n}\n#cd-navPanel:hover {\n opacity: 1;\n}\n#cd-navPanel-refreshButton {\n padding: 4px;\n width: 24px;\n height: 24px;\n background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/17/OOjs_UI_icon_reload.svg);\n background-size: 20px 20px;\n}\n#cd-navPanel-refreshButton:not(:empty) {\n background-image: none;\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: bold;\n}\n#cd-navPanel-previousButton {\n background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/10/OOjs_UI_icon_collapse.svg);\n background-size: 14px 14px;\n}\n#cd-navPanel-nextButton {\n background-image: url(https://upload.wikimedia.org/wikipedia/commons/9/90/OOjs_UI_icon_expand.svg);\n background-size: 14px 14px;\n}\n#cd-navPanel-firstUnseenButton {\n height: 15px;\n padding: 7px 0;\n}\n#cd-navPanel-commentFormButton {\n background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/ac/OOjs_UI_icon_ongoingConversation-ltr.svg);\n background-size: 16px 16px;\n}\n.sitedir-ltr #cd-navPanel {\n left: 0;\n right: unset;\n border-left-width: 0;\n border-right-width: 1px;\n}\n.sitedir-rtl #cd-navPanel {\n right: 0;\n left: unset;\n border-left-width: 1px;\n border-right-width: 0;\n}\n.cd-navPanel-button {\n display: block;\n text-align: center;\n background-position: center center;\n background-repeat: no-repeat;\n cursor: pointer;\n}\n.cd-navPanel-button:hover {\n background-color: #f3f4f5;\n}\n.cd-navPanel-button:not(:first-child) {\n position: relative;\n height: 29px;\n margin-top: 1px;\n}\n.cd-navPanel-button:not(:first-child)::before {\n position: absolute;\n top: -1px;\n left: 4px;\n margin: 0 auto 1px;\n width: 24px;\n height: 0;\n border-top: 1px solid #a2a9b1;\n content: "";\n}\n.cd-navPanel-refreshButton-interesting {\n color: #7d00cc;\n}\n', "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(29);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".skin-monobook .cd-commentUnderlay {\n z-index: -1;\n}\n.skin-monobook .cd-commentOverlay-innerWrapper {\n z-index: 2;\n}\n.skin-monobook .cd-commentButton.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {\n line-height: 1.172em;\n}\n.skin-monobook .cd-commentInput {\n border: 1px solid #ccc;\n}\n.skin-monobook .cd-commentInput .wikiEditor-ui .wikiEditor-ui-top {\n border-color: #ccc;\n}\n.skin-monobook .cd-insertButtons {\n border-color: #ccc;\n}\n.skin-monobook .cd-toolbarPlaceholder {\n border-color: #ccc;\n}\n.skin-timeless .mw-body-content,\n.skin-modern #mw-content-text {\n position: relative;\n}\n.skin-minerva #mw-content-text dl {\n margin-left: 0;\n}\n.skin-minerva #mw-content-text dd {\n margin-left: 1em;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(31);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".cd-commentButton.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button,\n.cd-sectionButton.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button {\n padding: 0;\n}\n.cd-commentButton.oo-ui-buttonElement-frameless.oo-ui-labelElement:first-child,\n.cd-sectionButton.oo-ui-buttonElement-frameless.oo-ui-labelElement:first-child {\n margin-left: 0;\n margin-right: 0;\n}\n.cd-button.oo-ui-buttonElement > .oo-ui-buttonElement-button {\n min-height: unset;\n}\nol > .cd-replyWrapper:not(.cd-replyWrapper-hasCommentForm) {\n list-style-type: none;\n}\n.action-view .cd-hidden:not(#cd-notExistingClass) {\n display: none;\n}\np.cd-shown {\n display: block !important;\n}\n.cd-destructiveText {\n color: #d33;\n}\n.cd-loadingPopup {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 1.5em;\n z-index: 111;\n margin: 0 auto;\n padding: 17px 17px 11px 17px;\n background-color: #fff;\n border: 1px solid #c8ccd1;\n}\n.cd-loadingPopup-logo {\n display: block;\n margin: 0 auto;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
var i = n(3), o = n(33);
"string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
var s = {
insert: "head",
singleton: !1
};
i(o, s);
e.exports = o.locals || {};
}, function(e, t, n) {
(t = n(4)(!1)).push([ e.i, ".cd-commentLink-interesting a {\n font-weight: bold;\n}\n.cd-watchlistMenu {\n display: inline-block;\n border: 1px solid #a2a9b1;\n border-radius: 2px;\n padding: 0 0.5em 0.5em;\n vertical-align: top;\n margin: -10px 1em 0 0.5em;\n}\n.sitedir-ltr .cd-watchlistMenu {\n margin: -10px 1em 0 0.5em;\n}\n.sitedir-rtl .cd-watchlistMenu {\n margin: -10px 0.5em 0 1em;\n}\n#mw-watchlist-options .cd-watchlistMenu {\n float: right;\n}\n.cd-watchlistMenu-legend {\n padding: 0 0.5em;\n}\n.cd-watchlistMenu-button {\n margin: 0;\n}\n.cd-watchlistMenu-button-switchInteresting {\n margin-bottom: -2px;\n}\n.cd-editWatchedSections-input {\n margin: 1px 0;\n}\n.cd-editWatchedSections-input textarea {\n resize: none;\n}\n", "" ]),
e.exports = t;
}, function(e, t, n) {
"use strict";
n.r(t);
var i = n(1), o = n.n(i), s = n(6), r = n(0), a = n.n(r), c = n(2), u = n.n(c);
class l extends Error {
constructor(e) {
let t;
e ? (t = e.type, e.code && (t += "/".concat(e.code)), e.apiData && e.apiData.error && e.apiData.error.code && (t += "/".concat(e.apiData.error.code))) : t = "",
super(t), this.name = "CdError", this.data = e;
}
}
var d = n(11), h = n.n(d);
const m = "undefined" == typeof window ? self : window;
m.convenientDiscussions = m.convenientDiscussions || {}, "object" != typeof m.convenientDiscussions && (m.convenientDiscussions = {});
var p = m.convenientDiscussions, g = n(10), f = n.n(g), b = {
users: {},
getUser(e) {
if (e.includes("#") && (e = e.slice(0, e.indexOf("#"))), e = Pe(Re(e)).trim(), !this.users[e]) {
const t = e === p.g.CURRENT_USER_NAME ? {
gender: p.g.CURRENT_USER_GENDER
} : {};
this.users[e] = new w(e, t);
}
return this.users[e];
}
}, y = new WeakMap;
class w {
constructor(e, t = {}) {
y.set(this, {
writable: !0,
value: void 0
}), this.name = e, this.options = new mw.Map, Object.keys(t).forEach(e => {
this[e] = t[e];
});
}
get registered() {
return void 0 === a()(this, y) && u()(this, y, !mw.util.isIPAddress(this.name)),
a()(this, y);
}
set gender(e) {
this.options.set("gender", e);
}
get gender() {
return this.options.get("gender");
}
}
let E, v;
function _(e, t) {
E || (E = new RegExp("^([^]*)(".concat(p.g.TIMESTAMP_REGEXP.source, ")"))), v || (v = new RegExp("^([^]*)(".concat(p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")")));
const n = void 0 === t ? E : v, i = e.match(n);
if (!i) return null;
let o = p.g.TIMESTAMP_PARSER(i, p.g.TIMESTAMP_MATCHING_GROUPS, p.g.DIGITS, p.g.LOCAL_TIMEZONE_OFFSET);
return t && (o = new Date(o.getTime() - t * p.g.MILLISECONDS_IN_A_MINUTE)), {
date: o,
match: i
};
}
function C(e, t) {
return ("0000" + e).slice(-t);
}
function x(e) {
const t = p.g.DATE_FORMAT;
let n = "";
for (let i = 0; i < t.length; i++) {
let o = t[i];
switch ("x" === o && i < t.length - 1 && (o += t[++i]), "xk" === o && i < t.length - 1 && (o += t[++i]),
o) {
case "xx":
n += "x";
break;
case "xg":
n += Be([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ])[e.getUTCMonth()];
break;
case "d":
n += C(e.getUTCDate(), 2);
break;
case "D":
n += Be([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ])[e.getUTCDay()];
break;
case "j":
n += e.getUTCDate();
break;
case "l":
n += Be([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ])[e.getDay()];
break;
case "F":
n += Be([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ])[e.getUTCMonth()];
break;
case "M":
n += Be([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ])[e.getUTCMonth()];
break;
case "n":
n += e.getUTCMonth() + 1;
break;
case "Y":
n += e.getUTCFullYear();
break;
case "xkY":
n += e.getUTCFullYear() + 543;
break;
case "G":
n += e.getUTCHours();
break;
case "H":
n += C(e.getUTCHours(), 2);
break;
case "i":
n += C(e.getUTCMinutes(), 2);
break;
case "\\":
i < t.length - 1 ? n += t[++i] : n += "\\";
break;
case '"':
if (i < t.length - 1) {
const e = t.indexOf('"', i + 1);
-1 === e ? n += '"' : (n += t.substr(i + 1, e - i - 1), i = e);
} else n += '"';
break;
default:
n += t[i];
}
}
return n;
}
function T(e, t, n = !1) {
let i = e.getUTCFullYear(), o = e.getUTCMonth(), s = e.getUTCDate(), r = e.getUTCHours(), a = e.getUTCMinutes(), c = C(i, 4) + C(o + 1, 2) + C(s, 2) + C(r, 2) + C(a, 2) + (t ? "_" + Le(t) : "");
if (n && A.includes(c)) {
let e = 2;
const t = c;
do {
c = "".concat(t, "_").concat(e), e++;
} while (A.includes(c));
}
return c;
}
let A = [];
function S(e) {
e && A.push(e);
}
function k() {
A = [];
}
function N(e) {
const t = e.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})_(.+)$/);
if (!t) return null;
const n = Number(t[1]), i = Number(t[2]) - 1, o = Number(t[3]), s = Number(t[4]), r = Number(t[5]), a = t[6];
return {
date: new Date(Date.UTC(n, i, o, s, r)),
author: a
};
}
function O(e) {
return e.replace(/<!--([^]*?)-->/g, (e, t) => "\x3c!--" + " ".repeat(t.length) + "--\x3e");
}
function I(e) {
const t = M(e);
return t.length ? t[0].timestamp : null;
}
function P(e) {
return e.replace(/<!--[^]*?-->/g, "").replace(/(\[\[:?(?:[^|[\]<>\n:]+:)?([^|[\]<>\n]+)\|)(\]\])/g, "$1$2$3").replace(/\[\[:?(?:[^|[\]<>\n]+\|)?(.+?)\]\]/g, "$1").replace(/\{\{:?(?:[^|{}<>\n]+)(?:\|(.+?))?\}\}/g, "$1").replace(/\[https?:\/\/[^[\]<>"\n ]+ *([^\]]*)\]/g, "$1").replace(/'''(.+?)'''/g, "$1").replace(/''(.+?)''/g, "$1").replace(/<br ?\/?>/g, " ").replace(/<\w+(?: [\w ]+?=[^<>]+?| ?\/?)>/g, "").replace(/<\/\w+ ?>/g, "").replace(/ {2,}/g, " ").trim();
}
function L(e) {
return e.replace(/</g, "<").replace(/>/g, ">").replace(/[/g, "[").replace(/]/g, "]").replace(/{/g, "{").replace(/|/g, "|").replace(/}/g, "}").replace(/\s+/g, " ");
}
function F(e) {
return e.replace(/</g, "<").replace(/>/g, ">").replace(/\[/g, "[").replace(/\]/g, "]").replace(/\{/g, "{").replace(/\|/g, "|").replace(/\}/g, "}").replace(/\s+/g, " ");
}
function M(e, t) {
const n = O(e).replace(p.g.QUOTE_REGEXP, (e, t, n, i) => t + " ".repeat(n.length) + i).replace(p.g.COMMENT_ANTIPATTERNS_REGEXP, e => " ".repeat(e.length));
let i = function(e) {
const t = new RegExp("^((.*)(".concat(p.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}|</small>)?).*(?:\n*|$)"), "igm"), n = new RegExp("^((.*)(".concat(p.g.CAPTURE_USER_NAME_PATTERN, ".{1,").concat(251, "}((").concat(p.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}|</small>)?)).*)(\n*|$)"), "igm"), i = new RegExp(p.g.CAPTURE_USER_NAME_PATTERN, "ig");
let o, s = [];
for (;o = t.exec(e); ) {
const t = o[0];
n.lastIndex = 0;
const r = n.exec(t);
let a, c, u, l, d, h;
if (r) {
let t;
a = b.getUser(R(r[4])), c = r[7], u = o.index + r[2].length, l = o.index + r[1].length,
d = o.index + r[0].length, h = r[3], i.lastIndex = 0;
const n = Math.max(0, r[0].length - r[6].length - r[r.length - 1].length - 251), s = r[0].slice(n);
for (;t = i.exec(s); ) {
if (t[2]) continue;
if (b.getUser(R(t[1])) === a) {
u = o.index + n + t.index, h = e.slice(u, l);
break;
}
}
} else c = o[3], u = o.index + o[2].length, l = o.index + o[1].length, d = o.index + o[0].length,
h = c;
s.push({
author: a,
timestamp: c,
startIndex: u,
endIndex: l,
dirtyCode: h,
nextCommentStartIndex: d
});
}
return s;
}(n);
const o = function(e, t) {
const n = [];
if (p.g.UNSIGNED_TEMPLATES_REGEXP) {
let i;
for (;i = p.g.UNSIGNED_TEMPLATES_REGEXP.exec(e); ) {
let e, o;
p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(i[2]) ? (o = i[2], e = i[3]) : p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(i[3]) ? (o = i[3],
e = i[2]) : e = i[2], e = b.getUser(R(e));
let s = i.index;
const r = i.index + i[1].length;
let a = i[1];
const c = i.index + i[0].length, u = t.findIndex(e => e.nextCommentStartIndex === c);
-1 !== u && t.splice(u, 1), n.push({
author: e,
timestamp: o,
startIndex: s,
endIndex: r,
dirtyCode: a,
nextCommentStartIndex: c
});
}
}
return n;
}(n, i);
return i.push(...o), o.length && i.sort((e, t) => e.startIndex > t.startIndex ? 1 : -1),
i = i.filter(e => e.author), i.forEach((e, t) => {
e.commentStartIndex = 0 === t ? 0 : i[t - 1].nextCommentStartIndex;
}), t && k(), i.forEach((e, n) => {
const {date: i} = e.timestamp && _(e.timestamp) || {};
if (e.id = n, e.date = i, delete e.nextCommentStartIndex, t) {
const t = i ? T(i, e.author.name, !0) : void 0;
e.anchor = t, S(t);
}
}), i;
}
function R(e) {
if (-1 === e.indexOf("&")) return e;
{
let t = e;
return -1 !== t.indexOf("&amp;") && (t = t.replace(/&amp;/g, "&amp;")),
t = -1 === t.indexOf("&#") ? t : t.replace(/&#(\d+);/g, (e, t) => String.fromCharCode(t)),
-1 === t.indexOf("&") ? t : f()(t);
}
}
function B(e) {
const t = [], n = (n, i) => {
e = He(e, n, t, i);
};
return (() => {
n(/\{\{(?:[^{]\{?)+?\}\}/g);
let i = 0;
const o = [];
let s, r, a;
for (;r = e.indexOf("{{", i), a = e.indexOf("}}", i), -1 !== r || -1 !== a || o.length; ) if (-1 !== r && (r < a || -1 === a)) o.push(r),
i = r + 2; else {
if (r = o.pop(), void 0 === r) {
if (-1 === a) {
i += 2;
continue;
}
r = 0;
}
-1 === a && (a = e.length), a += 2, s = e.substring(r, a), e = e.substring(0, r) + "\x01" + t.push(s) + "\x02" + e.substr(a),
i = a - s.length;
}
})(), n(/^(:* *)(\{\|[^]*?\n\|\})/gm, !0), ((...e) => {
e.forEach(e => {
n(new RegExp("<".concat(e, "(?: [^>]+)?>[\\s\\S]+?<\\/").concat(e, ">"), "gi"));
});
})("nowiki", "pre", "source", "syntaxhighlight"), {
code: e,
hidden: t
};
}
function D(e) {
return e.replace(/([^\n])\n?$/, "$1\n\n");
}
var j = n(5), H = n.n(j);
function U(e) {
return Object.keys(e).map(t => "".concat(t, ",").concat(e[t].join(","), "\n")).join("").trim();
}
function Y() {
return q.apply(this, arguments);
}
function q() {
return (q = o()((function*(e = !1) {
const {options: t} = yield re(e);
let n;
try {
n = JSON.parse(t[p.g.SETTINGS_OPTION_FULL_NAME]) || {};
} catch (e) {
n = p.settings;
}
return n;
}))).apply(this, arguments);
}
function W(e) {
return G.apply(this, arguments);
}
function G() {
return (G = o()((function*(e) {
e = e || p.settings;
const t = {}, n = {};
Object.keys(e).forEach(i => {
p.localSettingNames.includes(i) ? n[i] = e[i] : t[i] = e[i];
});
const i = ge(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME, JSON.stringify(n)), o = be(p.g.SETTINGS_OPTION_FULL_NAME, JSON.stringify(t));
try {
yield Promise.all([ i, o ]);
} catch (e) {
if (!(e instanceof l && e.data.apiData && "badvalue" === e.data.apiData.error.code)) throw e;
ge(p.g.SETTINGS_OPTION_FULL_NAME, JSON.stringify(t));
}
}))).apply(this, arguments);
}
function V() {
return z.apply(this, arguments);
}
function z() {
return (z = o()((function*(e = !1) {
const t = yield p.g.firstRun && null === mw.user.options.get(p.g.VISITS_OPTION_FULL_NAME) ? Promise.resolve({}) : re(e).then(e => e.visits), n = mw.config.get("wgArticleId");
let i;
return n && (t[n] = t[n] || [], i = t[n]), p.g.visits = t, p.g.thisPageVisits = i,
{
visits: t,
thisPageVisits: i
};
}))).apply(this, arguments);
}
function K(e) {
const t = Object.assign({}, e), n = Object.keys(t).reduce((e, n) => e.concat(t[n]), []);
n.sort();
const i = n[Math.floor(n.length / 10)];
return Object.keys(t).forEach(e => {
t[e] = t[e].filter(e => e >= i), t[e].length || delete t[e];
}), t;
}
function X(e) {
return J.apply(this, arguments);
}
function J() {
return (J = o()((function*(e) {
if (!e) return;
const t = U(e), n = H.a.compressToEncodedURIComponent(t);
try {
yield ge(p.g.VISITS_OPTION_FULL_NAME, n);
} catch (t) {
if (t instanceof l) {
const {type: n, code: i} = t.data;
"internal" === n && "sizeLimit" === i ? X(K(e)) : console.error(t);
} else console.error(t);
}
}))).apply(this, arguments);
}
function Q() {
return Z.apply(this, arguments);
}
function Z() {
return (Z = o()((function*(e = !1, t = {}, n = !1) {
const i = yield p.g.firstRun && null === mw.user.options.get(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME) ? Promise.resolve({}) : re(e).then(e => e.watchedSections), o = mw.config.get("wgArticleId");
let s;
return o && (i[o] = i[o] || [], s = i[o], t.justWatchedSection && (s.includes(t.justWatchedSection) || s.push(t.justWatchedSection)),
t.justUnwatchedSection && s.includes(t.justUnwatchedSection) && s.splice(s.indexOf(t.justUnwatchedSection), 1)),
{
watchedSections: i,
thisPageWatchedSections: s
};
}))).apply(this, arguments);
}
function ee(e) {
const t = function(e) {
return Object.keys(e).filter(t => e[t].length).map(t => " ".concat(t, " ").concat(e[t].join("\n"), "\n")).join("").trim();
}(e), n = H.a.compressToEncodedURIComponent(t);
ge(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME, n);
}
let te, ne;
function ie(e, t = "get") {
return new Promise((n, i) => {
p.g.api[t](e, {
success: e => {
e.error ? i("api", e) : n(e);
},
error: (e, t) => {
i("http", t);
}
});
});
}
function oe(e, t) {
return se.apply(this, arguments);
}
function se() {
return (se = o()((function*(e, t) {
const n = {
action: "parse",
text: e,
prop: [ "text", "modules" ],
pst: !0,
disablelimitreport: !0,
formatversion: 2
};
return p.g.api.post(Object.assign({}, n, t)).then(e => {
const t = e && e.parse && e.parse.text;
if (!t) throw new l({
type: "api",
code: "noData"
});
return mw.loader.load(e.parse.modules), mw.loader.load(e.parse.modulestyles), {
html: t,
parsedSummary: e.parse.parsedsummary
};
}, Ie);
}))).apply(this, arguments);
}
function re(e = !1) {
return e && te || (te = ie({
action: "query",
meta: "userinfo",
uiprop: [ "options", "rights" ],
formatversion: 2
}).then(e => {
const t = e && e.query && e.query.userinfo, n = t && t.options, i = t && t.rights;
if (!n || !i) throw new l({
type: "api",
code: "noData"
});
const o = n[p.g.VISITS_OPTION_FULL_NAME], s = function(e) {
const t = {}, n = /^(\d+), *(.+)$/gm;
let i;
for (;i = n.exec(e); ) t[i[1]] = i[2].split(",");
return t;
}(o ? H.a.decompressFromEncodedURIComponent(o) : ""), r = n[p.g.WATCHED_SECTIONS_OPTION_FULL_NAME], a = function(e) {
const t = {}, n = e.split(/(?:^|\n )(\d+) /).slice(1);
let i;
for (let e = 0, o = !0; e < n.length; e++, o = !o) o ? i = n[e] : t[i] = n[e].split("\n");
return t;
}(r ? H.a.decompressFromEncodedURIComponent(r) : "");
return p.g.CURRENT_USER_RIGHTS = i, {
options: n,
visits: s,
watchedSections: a,
rights: i
};
}, Ie)), te;
}
function ae(e, t) {
return ce.apply(this, arguments);
}
function ce() {
return (ce = o()((function*(e, t) {
let n;
if (e && (n = p.s("error-api", e) + " ", t)) try {
const {html: e} = yield oe(t);
n += e;
} catch (e) {
n += t;
}
return n;
}))).apply(this, arguments);
}
function ue(e) {
return le.apply(this, arguments);
}
function le() {
return (le = o()((function*(e) {
const t = [], n = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
let i;
for (;i = e.splice(0, n).join("|"); ) {
const e = yield p.g.api.post({
action: "query",
pageids: i,
formatversion: 2
}).catch(Ie);
if (e.error) throw new l({
type: "api",
code: "error",
apiData: e
});
const n = e && e.query, o = n && n.pages;
if (!o) throw new l({
type: "api",
code: "noData"
});
t.push(...o);
}
return t;
}))).apply(this, arguments);
}
function de(e) {
return he.apply(this, arguments);
}
function he() {
return (he = o()((function*(e) {
const t = [], n = [], i = [], o = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
let s;
for (;s = e.splice(0, o).join("|"); ) {
const e = yield p.g.api.post({
action: "query",
titles: s,
redirects: !0,
formatversion: 2
}).catch(Ie);
if (e.error) throw new l({
type: "api",
code: "error",
apiData: e
});
const o = e && e.query, r = o && o.pages;
if (!r) throw new l({
type: "api",
code: "noData"
});
const a = o.normalized || [], c = o.redirects || [];
n.push(...a), i.push(...c), t.push(...r);
}
return {
pages: t,
normalized: n,
redirects: i
};
}))).apply(this, arguments);
}
function me(e, t, n) {
return pe.apply(this, arguments);
}
function pe() {
return (pe = o()((function*(e, t, n) {
if (t.length > 65535) throw new l({
type: "internal",
code: "sizeLimit",
details: {
action: n
}
});
const i = yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser({
action: n,
optionname: e,
optionvalue: t
})).catch(Ie);
if (!i || "success" !== i[n]) throw new l({
type: "api",
code: "noSuccess",
details: {
action: n
}
});
}))).apply(this, arguments);
}
function ge(e, t) {
return fe.apply(this, arguments);
}
function fe() {
return (fe = o()((function*(e, t) {
yield me(e, t, "options");
}))).apply(this, arguments);
}
function be(e, t) {
return ye.apply(this, arguments);
}
function ye() {
return (ye = o()((function*(e, t) {
yield me(e, t, "globalpreferences");
}))).apply(this, arguments);
}
function we(e) {
return Ee.apply(this, arguments);
}
function Ee() {
return (Ee = o()((function*(e, {noTimers: t = !1} = {}) {
const n = e.filter(e => !e.gender).map(e => e.name), i = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
let o;
for (;o = n.splice(0, i).join("|"); ) {
const e = {
action: "query",
list: "users",
ususers: o,
usprop: "gender",
formatversion: 2
}, n = t ? ie(e, "post").catch(Ie) : p.g.api.post(e).catch(Ie), i = yield n, s = i && i.query && i.query.users;
if (!s) throw new l({
type: "api",
code: "noData"
});
s.forEach(e => {
b.getUser(e.name).gender = e.gender;
});
}
}))).apply(this, arguments);
}
class ve {
constructor(e) {
const t = e instanceof mw.Title ? e : mw.Title.newFromText(Re(e));
this.name = Pe(e), this.namespace = t.namespace, this.fragment = t.fragment;
}
getUrl(e) {
return mw.util.getUrl(this.name, e);
}
getCode() {
var e = this;
return o()((function*() {
if (!mw.config.get("wgArticleId")) return {
code: ""
};
const t = yield p.g.api.get({
action: "query",
titles: e.name,
prop: "revisions",
rvprop: [ "ids", "content" ],
redirects: !0,
curtimestamp: !0,
formatversion: 2
}).catch(Ie), n = t.query, i = n && n.pages && n.pages[0], o = i && i.revisions && i.revisions[0];
if (!n || !i) throw new l({
type: "api",
code: "noData"
});
if (i.missing) throw new l({
type: "api",
code: "missing"
});
if (i.invalid) throw new l({
type: "api",
code: "invalid"
});
if (!o) throw new l({
type: "api",
code: "noData"
});
const s = n.redirects && n.redirects[0] && n.redirects[0].to;
Object.assign(e, {
pageId: i.pageid,
code: o.content + "\n",
revisionId: o.revid,
redirectTarget: s,
realName: s || e.name,
queryTimestamp: t.curtimestamp
});
}))();
}
parse({noTimers: e = !1, markAsRead: t = !1} = {}) {
var n = this;
return o()((function*() {
const i = {
action: "parse",
page: n.realName || n.name,
prop: [ "text", "revid", "modules", "jsconfigvars" ],
formatversion: 2
}, o = e ? ie(i).catch(Ie) : p.g.api.get(i).catch(Ie);
t && $.get(n.getUrl());
const s = yield o;
if (void 0 === s.parse) throw new l({
type: "api",
code: "noData"
});
return s.parse;
}))();
}
modifyCode(e, {commentForm: t}) {
const {commentCode: n} = t.commentTextToCode("submit");
let i, o;
if (t.isNewTopicOnTop) {
const t = O(e).search(/^(=+).*?\1/m);
o = e.slice(0, t), i = o + n + "\n" + e.slice(t);
} else o = (e + "\n").trimStart(), i = o + n;
return {
newPageCode: i,
codeBeforeInsertion: o,
commentCode: n
};
}
edit(e) {
var t = this;
return o()((function*() {
let n;
try {
n = yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser(Object.assign(e, {
title: t.realName || t.name,
action: "edit",
formatversion: 2
}))).catch(Ie);
} catch (e) {
if (e instanceof l) {
const {type: t, apiData: i} = e.data;
if ("network" === t) throw e;
{
const e = i && i.error;
let t, o, s, r = !1;
if (e) {
switch (s = e.code, s) {
case "spamblacklist":
t = p.s("error-spamblacklist", e.spamblacklist.matches[0]);
break;
case "titleblacklist":
t = p.s("error-titleblacklist");
break;
case "abusefilter-warning":
case "abusefilter-disallowed":
{
yield p.g.api.loadMessagesIfMissing([ s ]);
const n = mw.message(s, e.abusefilter.description).plain();
({html: t} = (yield oe(n)) || {}), t ? r = !0 : t = p.s("error-abusefilter", e.abusefilter.description);
break;
}
case "editconflict":
t = p.s("error-editconflict");
break;
case "blocked":
t = p.s("error-blocked");
break;
case "missingtitle":
t = p.s("error-pagedeleted");
break;
default:
t = p.s("error-pagenotedited") + " " + (yield ae(s, e.info));
}
o = [ s, i ];
} else o = i;
throw new l({
type: "api",
code: "error",
apiData: n,
details: {
code: s,
message: t,
isRawMessage: r,
logMessage: o
}
});
}
}
throw e;
}
return t.pageId = n.edit.pageid, n.edit.newtimestamp;
}))();
}
analyzeNewTopicPlacement() {
if (void 0 === this.code) throw new l("Can't analyze if the new topics are on top: Page#code is undefined.");
let e;
p.config.areNewTopicsOnTop && (e = p.config.areNewTopicsOnTop(this.name, this.code));
const t = O(this.code), n = /^==[^=].*?==[ \t]*(?:<!--[^]*?-->[ \t]*)*\n/gm;
let i, o;
if (!1 !== e && (o = n.exec(t), i = o.index, n.lastIndex = 0), void 0 === e) {
let i;
p.debug.startTimer("areNewTopicsOnTop");
let s = 0;
for (;o = n.exec(t); ) {
const e = I(this.code.slice(o.index)), {date: t} = e && _(e) || {};
t && (i && (s += t > i ? -1 : 1), i = t);
}
e = 0 === s ? this.namespace % 2 == 0 : s > 0, p.debug.logAndResetTimer("areNewTopicsOnTop");
}
Object.assign(this, {
areNewTopicsOnTop: e,
firstSectionStartIndex: i
});
}
}
function _e(e) {
return e && "object" == typeof e ? e.filter((t, n) => e.indexOf(t) === n) : null;
}
function Ce(e, t) {
return !(!t || e.nodeType !== Node.TEXT_NODE) || (e.nodeType !== Node.ELEMENT_NODE ? null : !!p.g.POPULAR_INLINE_ELEMENTS.includes(e.tagName) || !p.g.POPULAR_NOT_INLINE_ELEMENTS.includes(e.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline() called for:", e),
"inline" === window.getComputedStyle(e).display) : null));
}
function xe(e) {
const t = e[0];
return (t.toUpperCase() !== t.toLowerCase() ? "[" + t.toUpperCase() + t.toLowerCase() + "]" : mw.util.escapeRegExp(t)) + mw.util.escapeRegExp(e.slice(1));
}
function Te(e, t) {
let n;
if (e instanceof ve) n = e.name, t = e.namespace; else if (void 0 === t) {
n = e, t = new mw.Title.newFromText(e).namespace;
}
return (t % 2 == 1 || p.g.PAGE_WHITE_LIST_REGEXP && p.g.PAGE_WHITE_LIST_REGEXP.test(n) || !p.g.PAGE_WHITE_LIST_REGEXP && p.config.customTalkNamespaces.includes(t)) && (!p.g.PAGE_BLACK_LIST_REGEXP || !p.g.PAGE_BLACK_LIST_REGEXP.test(n));
}
function Ae(e) {
return e && (e.includes("".concat(p.s("es-edit"), " ").concat(p.s("es-reply-genitive"))) || e.includes("".concat(p.s("es-edit"), " ").concat(p.s("es-addition-genitive"))));
}
function Se(e) {
return e && p.config.undoTexts.some(t => e.includes(t));
}
function ke(e) {
return void 0 !== e;
}
function Ne(e) {
return null != e;
}
function Oe(e, t, n = !1) {
return n ? e.slice(t + 1).concat(e.slice(0, t + 1)).reverse() : e.slice(t).concat(e.slice(0, t));
}
function Ie(e, t) {
throw new l("http" === e ? {
type: "network"
} : {
type: "api",
code: "error",
apiData: t
});
}
function Pe(e) {
return e.replace(/_/g, " ");
}
function Le(e) {
return e.replace(/ /g, "_");
}
function Fe(e) {
return e.replace(/ {2,}/g, " ");
}
function Me(e, ...t) {
const n = e instanceof $ ? e : p.util.wrapInElement(e);
return t.forEach(([e, t]) => {
n.find(".".concat(e)).on("click", t);
}), n;
}
function Re(e) {
return e.length ? e[0].toUpperCase() + e.slice(1) : "";
}
function Be(e) {
return e.map(mw.msg);
}
function De() {
return $(":focus:input").length || $(":focus").prop("isContentEditable");
}
function je(e) {
if (!e) return null;
const t = e.map(e => e.source || e).join("|");
return t ? new RegExp("(".concat(t, ")")) : null;
}
function He(e, t, n, i) {
return e.replace(t, (e, t, o) => ("number" == typeof t && (t = "", o = ""), (t || "") + (i ? "\x03" : "\x01") + n.push(o || e) + (i ? "\x04" : "\x02")));
}
function Ue(e, t) {
for (;e.match(/(?:\x01|\x03)\d+(?:\x02|\x04)/); ) e = e.replace(/(?:\x01|\x03)(\d+)(?:\x02|\x04)/g, (e, n) => t[n - 1]);
return e;
}
class Ye {
constructor({types: e, inputs: t, comments: i}) {
const o = this.getCollections(e, i);
n(14), this.tribute = new h.a({
collection: o,
allowSpaces: !0,
menuItemLimit: 10,
noMatchTemplate: () => null,
containerClass: "tribute-container cd-mentionsContainer",
replaceTextSuffix: ""
}), t.forEach(e => {
const t = e.$input.get(0);
this.tribute.attach(t), t.cdInput = e, t.addEventListener("tribute-replaced", t => {
const n = e.getRange().to, i = n - t.detail.item.original.value.length, o = e.getValue();
e.setValue(o.slice(0, n) + o.slice(n));
const s = t.detail.item.original.endOffset, r = null === t.detail.item.original.startOffset ? t.detail.item.original.value.length - s : t.detail.item.original.startOffset;
e.selectRange(i + r, n - s);
});
});
}
getCollections(e, t) {
var n = this;
const i = e => e ? e.original.value : "", s = (e, t) => _e(e).filter(ke).map(e => {
let n;
return n = Array.isArray(e) ? e[0] : e.key ? e.key : e, {
key: n,
value: t.transform ? t.transform(e) : e,
startOffset: t.getStartOffset ? t.getStartOffset(e) : null,
endOffset: t.getEndOffset ? t.getEndOffset(e) : 0
};
}), r = new RegExp(mw.msg("word-separator"), "g"), a = {
mentions: {
trigger: "@",
searchOpts: {
skip: !0
},
requireLeadingSpace: !0,
selectTemplate: i,
values: (h = o()((function*(e, t) {
if ((e = Fe(e)).startsWith(n.mentions.snapshot) || (n.mentions.cache = []), n.mentions.snapshot = e,
e.includes("[[")) t([]); else if (n.mentions.byText[e]) t(s(n.mentions.byText[e], n.mentions)); else {
const i = Ye.search(e, n.mentions.default);
let o = i.slice();
const a = e && e.length <= 85 && !/[#<>[\]|{}/@:]/.test(e) && (e.match(r) || []).length <= 4;
if (a && (i.length || o.push(...n.mentions.cache), o = Ye.search(e, o), o[9] = e.trim()),
t(s(o, n.mentions)), a && !i.length) {
let i;
try {
i = yield function(e) {
const t = new Promise((n, i) => {
setTimeout(() => {
try {
if (t !== ne) throw new l;
p.g.api.get({
action: "opensearch",
search: e,
namespace: 3,
redirects: "resolve",
limit: 10,
formatversion: 2
}).then(e => {
const t = e && e[1] && e[1].map(e => (e.match(p.g.USER_NAMESPACES_REGEXP) || [])[1]).filter(ke).filter(e => !e.includes("/"));
if (!t) throw new l({
type: "api",
code: "noData"
});
n(t);
}, e => {
Ie(e);
});
} catch (e) {
i(e);
}
}, 100);
});
return ne = t, t;
}(e);
} catch (e) {
return;
}
if (i = n.mentions.removeSelf(i), n.mentions.cache = i.slice(), i[9] = e.trim(),
n.mentions.byText[e] = i, n.mentions.snapshot !== e) return;
t(s(i, n.mentions));
}
}
})), function(e, t) {
return h.apply(this, arguments);
})
},
wikilinks: {
trigger: "[[",
searchOpts: {
skip: !0
},
selectTemplate: i,
values: (d = o()((function*(e, t) {
if (e = Fe(e), p.g.COLON_NAMESPACES_PREFIX_REGEXP.test(e) && (e = e.slice(1)), e.startsWith(n.wikilinks.snapshot) || (n.wikilinks.cache = []),
n.wikilinks.snapshot = e, n.wikilinks.byText[e]) t(s(n.wikilinks.byText[e], n.wikilinks)); else {
let i = [];
const o = e && e.length <= 255 && !/[#<>[\]|{}]/.test(e) && (!/^:/.test(e) || p.g.COLON_NAMESPACES_PREFIX_REGEXP.test(e)) && (e.match(r) || []).length <= 9;
if (o && (i.push(...n.wikilinks.cache), i = Ye.search(e, i), i[9] = e.trim()), t(s(i, n.wikilinks)),
o) {
let i;
try {
i = yield function(e) {
const t = new Promise((n, i) => {
setTimeout(() => {
try {
if (t !== ne) throw new l;
p.g.api.get({
action: "opensearch",
search: e,
redirects: "return",
limit: 10,
formatversion: 2
}).then(t => {
const i = new RegExp("^" + mw.util.escapeRegExp(e[0]), "i"), o = t && t[1] && t[1].map(t => t.replace(i, () => e[0]));
if (!o) throw new l({
type: "api",
code: "noData"
});
n(o);
}, e => {
Ie(e);
});
} catch (e) {
i(e);
}
}, 100);
});
return ne = t, t;
}(e);
} catch (e) {
return;
}
if (n.wikilinks.cache = i.slice(), i[9] = e.trim(), n.wikilinks.byText[e] = i, n.wikilinks.snapshot !== e) return;
t(s(i, n.wikilinks));
}
}
})), function(e, t) {
return d.apply(this, arguments);
})
},
templates: {
trigger: "{{",
searchOpts: {
skip: !0
},
selectTemplate: e => {
if (e) {
const t = this.tribute.current.element.cdInput;
return t.setDisabled(!0), t.pushPending(), p.g.api.get({
action: "templatedata",
titles: "Template:".concat(e.original.key),
redirects: !0
}).catch(Ie).then(e => {
const n = e && e.pages;
let i = "", o = 0;
Object.keys(n).forEach(e => {
const t = n[e], s = t.params || [];
(t.paramOrder || Object.keys(s)).filter(e => s[e].required || s[e].suggested).forEach(e => {
"block" === t.format ? i += "\n| ".concat(e, " = ") : isNaN(e) ? i += "|".concat(e, "=") : i += "|",
o || (o = i.length);
}), "block" === t.format && i && (i += "\n");
});
const s = t.getRange().to, r = t.getValue();
t.setValue(r.slice(0, s) + i + r.slice(s)), t.selectRange(s + o);
}, e => {
mw.notify(p.s("cf-mentions-notemplatedata"), {
type: "error"
}), console.warn(e);
}).always(() => {
t.setDisabled(!1), t.popPending(), t.focus();
}), e.original.value;
}
return "";
},
values: (u = o()((function*(e, t) {
if ((e = Fe(e)).startsWith(n.templates.snapshot) || (n.templates.cache = []), n.templates.snapshot = e,
e.includes("{{")) t([]); else if (n.templates.byText[e]) t(s(n.templates.byText[e], n.templates)); else {
let i = [];
const o = e && e.length <= 255 && !/[#<>[\]|{}]/.test(e) && (e.match(r) || []).length <= 9;
if (o && (i.push(...n.templates.cache), i = Ye.search(e, i), i[9] = e.trim()), t(s(i, n.templates)),
o) {
let i;
try {
i = yield function(e) {
const t = new Promise((n, i) => {
setTimeout(() => {
try {
if (t !== ne) throw new l;
p.g.api.get({
action: "opensearch",
search: e.startsWith(":") ? e.slice(1) : "Template:" + e,
redirects: "return",
limit: 10,
formatversion: 2
}).then(t => {
const i = new RegExp("^" + mw.util.escapeRegExp(e[0]), "i"), o = t && t[1] && t[1].filter(e => !e.endsWith("/doc")).map(t => e.startsWith(":") ? t : t.slice(t.indexOf(":") + 1)).map(t => t.replace(i, () => e[0]));
if (!o) throw new l({
type: "api",
code: "noData"
});
n(o);
}, e => {
Ie(e);
});
} catch (e) {
i(e);
}
}, 100);
});
return ne = t, t;
}(e);
} catch (e) {
return;
}
if (n.templates.cache = i.slice(), i[9] = e.trim(), n.templates.byText[e] = i, n.templates.snapshot !== e) return;
t(s(i, n.templates));
}
}
})), function(e, t) {
return u.apply(this, arguments);
})
},
tags: {
trigger: "<",
searchOpts: {
skip: !0
},
selectTemplate: i,
values: (e, t) => {
const n = new RegExp("^" + mw.util.escapeRegExp(e), "i");
if (!e || !/^[a-z]+$/i.test(e) && !this.tags.withSpace.some(e => n.test(e))) return void t([]);
const i = this.tags.default.filter(e => n.test(e));
t(s(i, this.tags));
}
},
commentLinks: {
trigger: "##",
requireLeadingSpace: !0,
selectTemplate: i,
values: (c = o()((function*(e, t) {
e = Fe(e), n.commentLinks.default || (n.commentLinks.default = [], n.commentLinks.comments.forEach(({anchor: e, author: t, timestamp: i, text: o}) => {
let s;
if (o.length > 80) {
s = o.slice(0, 80);
const e = s.lastIndexOf(mw.msg("word-separator"));
-1 !== e && (s = s.slice(0, e));
} else s = o;
n.commentLinks.default.push({
key: "".concat(t.name).concat(mw.msg("comma-separator")).concat(i).concat(mw.msg("colon-separator")).concat(s),
anchor: e,
author: t.name,
timestamp: i
});
})), n.commentLinks.snapshot = e;
const i = n.tribute.search.filter(e, n.commentLinks.default, {
extract: e => e.key
}).map(e => e.original);
t(s(i, n.commentLinks));
})), function(e, t) {
return c.apply(this, arguments);
})
}
};
var c, u, d, h;
let m = t.map(e => e.author.name);
this.targetComment && "edit" !== this.mode && m.unshift(this.targetComment.author.name),
m = _e(m);
const g = {
mentions: m,
commentLinks: t
}, f = [];
return e.forEach(e => {
this[e] = Ye["get".concat(Re(e), "Config")].call(null, g[e]), f.push(a[e]);
}), f;
}
static getMentionsConfig(e = []) {
const t = mw.config.get("wgFormattedNamespaces")[2], n = {
byText: {},
cache: [],
transform: e => (e = e.trim(), "@[[".concat(t, ":").concat(e, "|").concat(e, "]]")),
removeSelf: e => {
for (;e.includes(p.g.CURRENT_USER_NAME); ) e.splice(e.indexOf(p.g.CURRENT_USER_NAME), 1);
return e;
}
};
return n.default = n.removeSelf(e), n;
}
static getWikilinksConfig() {
const e = mw.config.get("wgFormattedNamespaces"), t = new RegExp("^(".concat(e[6], "|").concat(e[14], "):"), "i");
return {
byText: {},
cache: [],
transform: e => (e = e.trim(), t.test(e) && (e = ":" + e), "[[".concat(e, "]]"))
};
}
static getTemplatesConfig() {
return {
byText: {},
cache: [],
transform: e => (e = e.trim(), "{{".concat(e, "}}")),
getEndOffset: () => 2
};
}
static getTagsConfig() {
const e = {
default: [ "abbr", "b", "bdi", "bdo", "blockquote", [ "br", "<br>" ], "caption", "cite", "code", [ "codenowiki", "<code><nowiki>+</nowiki></code>" ], "data", "dd", "del", "dfn", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", [ "hr", "<hr>" ], "i", "ins", "kbd", "li", "link", "mark", "meta", "ol", "p", "pre", "q", "rp", "rt", "rtc", "ruby", "s", "samp", "small", "span", "strong", "sub", "sup", "table", "td", "th", "time", "tr", "u", "ul", "var", [ "wbr", "<wbr>" ], "gallery", "includeonly", "noinclude", "nowiki", "onlyinclude", "categorytree", "charinsert", "chem", "ce", "graph", "hiero", "imagemap", "indicator", "inputbox", "mapframe", "maplink", "math", "math chem", "poem", "ref", [ "references", "<references />" ], "score", "section", "syntaxhighlight", [ 'syntaxhighlight lang=""', '<syntaxhighlight lang="+"></syntaxhighlight>' ], "templatedata", [ "templatestyles", '<templatestyles src="+" />' ], "timeline" ],
transform: e => Array.isArray(e) ? e[1].replace(/\+/, "") : "<".concat(e, "></").concat(e, ">"),
getEndOffset: e => Array.isArray(e) ? e[1].includes("+") ? e[1].length - 1 - e[1].indexOf("+") : 0 : e.length + 3
};
return e.default.sort(), e.withSpace = e.default.filter(e => e.includes(" ")), e;
}
static getCommentLinksConfig(e = []) {
return {
comments: e,
transform: ({anchor: e, author: t, timestamp: n}) => "[[#".concat(e, "|").concat(p.s("cf-mentions-commentlinktext", t, n), "]]"),
getStartOffset: ({anchor: e} = {}) => "[[#".concat(e, "|").length,
getEndOffset: () => 2
};
}
static search(e, t) {
const n = new RegExp(mw.util.escapeRegExp(e), "i"), i = new RegExp("^" + mw.util.escapeRegExp(e), "i");
return t.filter(e => n.test(e)).sort((e, t) => {
const n = i.test(e), o = i.test(t);
return n && !o ? -1 : o && !n ? 1 : 0;
});
}
}
class $e {
constructor(e, t, n = !1, i = e) {
this.acceptNode = t, this.root = e, this.currentNode = i, n ? (this.firstChildProperty = "firstElementChild",
this.lastChildProperty = "lastElementChild", this.previousSiblingProperty = "previousElementSibling",
this.nextSiblingProperty = "nextElementSibling") : (this.firstChildProperty = "firstChild",
this.lastChildProperty = "lastChild", this.previousSiblingProperty = "previousSibling",
this.nextSiblingProperty = "nextSibling");
}
tryMove(e) {
let t = this.currentNode;
if (t === this.root && !e.includes("Child")) return null;
do {
t = t[e];
} while (t && this.acceptNode && !this.acceptNode(t));
return t && (this.currentNode = t), t || null;
}
parentNode() {
return this.tryMove("parentNode");
}
firstChild() {
return this.tryMove(this.firstChildProperty);
}
lastChild() {
return this.tryMove(this.lastChildProperty);
}
previousSibling() {
return this.tryMove(this.previousSiblingProperty);
}
nextSibling() {
return this.tryMove(this.nextSiblingProperty);
}
nextNode() {
let e = this.currentNode;
do {
if (e[this.firstChildProperty]) e = e[this.firstChildProperty]; else {
for (;e && !e[this.nextSiblingProperty] && e.parentNode !== this.root; ) e = e.parentNode;
e && (e = e[this.nextSiblingProperty]);
}
} while (e && this.acceptNode && !this.acceptNode(e));
return e && (this.currentNode = e), e;
}
previousNode() {
let e = this.currentNode;
if (e !== this.root) {
do {
if (e[this.previousSiblingProperty]) for (e = e[this.previousSiblingProperty]; e[this.lastChildProperty]; ) e = e[this.lastChildProperty]; else e = e.parentNode;
} while (e && this.acceptNode && !this.acceptNode(e));
return e && (this.currentNode = e), e;
}
}
}
class qe extends $e {
constructor(e) {
super(p.g.rootElement, e => ![ "STYLE", "LINK" ].includes(e.tagName), !0), e && (this.currentNode = e);
}
}
class We extends $e {
constructor(e) {
super(p.g.rootElement, e => e.nodeType === Node.TEXT_NODE || e.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(e.tagName)),
e && (this.currentNode = e);
}
}
var Ge = new WeakMap;
var Ve = {
underlays: [],
layersContainers: [],
redrawIfNecessary(e = !1) {
if (!this.underlays.length || document.hidden) return;
const t = [], n = p.g.$root.get(0).getBoundingClientRect().bottom + window.pageYOffset;
let i, o = 0;
p.comments.slice().reverse().some(s => {
const r = s.newness || s.own && p.settings.highlightOwnComments;
if ((e || s.positions && s.positions.bottom > n) && !r && s.$underlay) s.removeLayers(); else if (r && !s.editForm) {
i = i || p.g.specialElements.floating.map(e => e.getBoundingClientRect());
const e = s.configureLayers(!1, i);
if (e) o = 0, t.push(s); else if (!1 === e && !s.getLayersContainer().closest(".cd-commentLayersContainer") && (o++,
2 === o)) return !0;
}
}), t.forEach(e => {
e.updateLayersPositions();
});
},
reset() {
this.underlays = [], this.layersContainers.forEach(e => {
e.innerHTML = "";
});
}
}, ze = {
cdRemoveNonElementNodes: function() {
return this.filter((function() {
return this.nodeType === Node.ELEMENT_NODE;
}));
},
cdScrollTo(e = "top", t = !0, n) {
p.g.autoScrollInProgress = !0;
let i, o = this.cdRemoveNonElementNodes();
const s = o.first().offset().top, r = o.last().offset().top + o.last().height();
return i = "center" === e ? Math.min(s, s + .5 * (r - s) - .5 * $(window).height()) : "bottom" === e ? r - $(window).height() : s,
t ? $("body, html").animate({
scrollTop: i
}, {
complete: () => {
p.g.autoScrollInProgress = !1, gn.isMounted() && (gn.registerSeenComments(), gn.updateCommentFormButton()),
n && n();
}
}) : (window.scrollTo(0, i), p.g.autoScrollInProgress = !1, gn.isMounted() && (gn.registerSeenComments(),
gn.updateCommentFormButton())), this;
},
cdIsInViewport(e = !1) {
const t = this.cdRemoveNonElementNodes(), n = t.get().every(e => "none" === e.style.display);
n && t.show();
const i = t.first().offset().top, o = t.last().offset().top + t.last().height();
n && t.hide();
const s = $(window).scrollTop(), r = s + $(window).height();
return e ? o > s && i < r : i >= s && o <= r;
},
cdScrollIntoView(e, t = !0) {
return this.cdIsInViewport() || this.cdScrollTo(e, t), this;
},
cdGetText() {
let e;
const t = document.createElement("div");
return Array.from(this.get(0).childNodes).forEach(e => {
t.appendChild(e.cloneNode(!0));
}), document.body.appendChild(t), e = t.innerText, document.body.removeChild(t),
e;
},
cdAddCloseButton() {
if (this.find(".cd-closeButton").length) return this;
const e = $("<a>").attr("title", p.s("cf-block-close")).addClass("cd-closeButton").on("click", () => {
this.empty();
});
return this.prepend(e), this;
}
};
function Ke(e) {
const t = e.getAttribute("href");
if (!t) return null;
const n = function(e) {
if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) {
e = e.replace(/^(?:https?:)?\/\/[^/]+/, "").replace(/^\/wiki\//, "").replace(/^\/w\/index.php\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " ");
try {
e = decodeURIComponent(e);
} catch (e) {
return null;
}
return e;
}
{
const t = new mw.Uri(e), n = t.path.match(p.g.ARTICLE_PATH_REGEXP);
if (n) try {
return decodeURIComponent(n[1]);
} catch (e) {
return null;
}
return t.query.title ? t.query.title : null;
}
}(t);
if (!n) return null;
let i;
const o = n.match(p.g.USER_NAMESPACES_REGEXP);
return o ? i = o[1] : n.startsWith(p.g.CONTRIBS_PAGE + "/") && (i = n.replace(p.g.CONTRIBS_PAGE_LINK_REGEXP, "")),
i && Re(Pe(i.replace(/\/.*/, ""))).trim();
}
class Xe {
constructor(e) {
this.context = e;
}
createComment(e) {
return new this.context.CommentClass(this, e);
}
createSection(e, t) {
return new this.context.SectionClass(this, e, t);
}
findTimestamps() {
const e = [ ...Array.from(p.g.rootElement.getElementsByTagName("blockquote")), ...(t = p.config.elementsToExcludeClasses.map(e => Array.from(p.g.rootElement.getElementsByClassName(e))),
[].concat(...t)) ];
var t;
return this.context.getAllTextNodes().map(t => {
const n = t.textContent, {date: i, match: o} = _(n) || {};
if (i && !e.some(e => e.contains(t))) return {
node: t,
date: i,
match: o
};
}).filter(ke).map(e => {
const {node: t, match: n, date: i} = e, o = this.context.document.createElement("span");
o.classList.add("cd-timestamp");
const s = this.context.document.createTextNode(n[2]);
o.appendChild(s);
const r = t.textContent.slice(n.index + n[0].length);
let a;
return r && (a = this.context.document.createTextNode(r)), t.textContent = t.textContent.slice(0, n.index + n[1].length),
t.parentNode.insertBefore(o, t.nextSibling), a && t.parentNode.insertBefore(a, o.nextSibling),
{
element: o,
date: i
};
});
}
findSignatures(e) {
const t = e.map(e => {
const t = e.date, n = e.element, i = e.element.textContent;
let o, s;
for (let t = e.element; !s; t = t.parentNode) Ce(t) ? t.classList.contains(p.config.unsignedClass) && (o = t) : s = t;
const r = Boolean(o);
if (s) {
const t = Array.from(s[this.context.childElementsProperty]), n = new qe(e.element);
let i = !1;
for (;!i && n.nextNode() && s.contains(n.currentNode) && (!t.includes(n.currentNode) || Ce(n.currentNode)); ) n.currentNode.classList.contains("cd-timestamp") && (i = !0);
if (i) return;
}
const a = o || e.element, c = new We(a);
let u, l, d = 0;
const h = [];
o ? l = a : (h.push(a), c.previousSibling());
do {
const e = c.currentNode;
if (d += e.textContent.length, e.nodeType === Node.ELEMENT_NODE) {
if (e.classList.contains("cd-timestamp")) break;
let t = !1;
if ("A" === e.tagName) {
const n = Ke(e);
n && (u || (u = n), u === n && (t = !0));
} else {
Array.from(e.getElementsByTagName("a")).some(e => {
const n = Ke(e);
if (n && (u || (u = n), u === n)) return t = !0, !0;
});
}
t && (l = e);
}
h.push(e);
} while (c.previousSibling() && d < p.config.signatureScanLimit);
const m = h.indexOf(l);
h.splice(-1 === m ? 1 : m + 1);
const g = T(e.date, u, !0);
S(g);
const f = a.parentNode, b = a.nextSibling, y = this.context.document.createElement("span");
if (y.classList.add("cd-signature"), h.reverse().forEach(y.appendChild.bind(y)),
f.insertBefore(y, b), u) return {
element: y,
timestampElement: n,
timestampText: i,
date: t,
authorName: u,
anchor: g,
unsigned: r
};
}).filter(ke);
return p.config.unsignedClass && Array.from(p.g.rootElement.getElementsByClassName(p.config.unsignedClass)).forEach(e => {
if (!this.context.getElementByClassName(e, "cd-timestamp")) {
Array.from(e.getElementsByTagName("a")).some(n => {
const i = Ke(n);
if (i) {
e.classList.add("cd-signature");
const n = !0;
return t.push({
element: e,
authorName: i,
unsigned: n
}), !0;
}
});
}
}), t.sort((e, t) => this.context.follows(e.element, t.element) ? 1 : -1), t;
}
collectParts(e) {
const t = new We(e);
let n, i = [];
for (;!n; ) {
for (;!t.currentNode.nextSibling && t.parentNode(); ) ;
if (!t.nextSibling()) break;
Ce(t.currentNode, !0) || (n = t.currentNode);
}
if (n && e.parentNode.contains(n)) {
for (t.currentNode = e; t.nextSibling() && Ce(t.currentNode, !0); ) i.push({
node: t.currentNode,
isTextNode: t.currentNode.nodeType === Node.TEXT_NODE,
isHeading: !1,
hasCurrentSignature: !1,
hasForeignComponents: !1,
lastStep: "start"
});
i.reverse(), t.currentNode = e;
} else t.currentNode = e.parentNode;
i.push({
node: t.currentNode,
isTextNode: !1,
isHeading: !1,
hasCurrentSignature: !0,
hasForeignComponents: !1,
lastStep: "start"
});
const o = new RegExp(p.g.TIMEZONE_REGEXP.source + "\\s*$");
for (let s = 0; s < 500; s++) {
let s;
const r = i[i.length - 1];
if (!r.isTextNode && !r.hasCurrentSignature) {
const e = r.node.textContent;
if (!Ce(r.node, !0) && (o.test(e) || p.config.signatureEndingRegexp && p.config.signatureEndingRegexp.test(e))) {
r.hasForeignComponents = !0;
break;
}
}
if (!r.hasCurrentSignature && r.hasForeignComponents) {
let e, n = !1;
for (;(e = t.currentNode) && t.lastChild(); ) {
if (Ce(t.currentNode, !0)) {
t.currentNode = e;
break;
}
n = !0;
}
if (!n) break;
s = "dive";
} else if (t.previousSibling()) s = "back"; else {
if (!t.parentNode()) break;
s = "up";
}
const a = t.currentNode, c = a.nodeType === Node.TEXT_NODE;
if ("back" === s && [ "OL", "UL" ].includes(r.node.tagName) && !([ "DL", "OL", "UL" ].includes(a.tagName) || c && a.previousSibling && [ "DL", "OL", "UL" ].includes(a.previousSibling.tagName)) && r.node[this.context.childElementsProperty].length && r.node[this.context.childElementsProperty][0].contains(e)) break;
let u = null, l = null, d = null;
if (!c) {
if (a.classList.contains("cd-commentPart") || "toc" === a.getAttribute("id") || "TD" === a.tagName || "HR" === a.tagName && a.previousElementSibling && this.context.getElementByClassName(a.previousElementSibling, "cd-signature") || p.config.checkForCustomForeignComponents && p.config.checkForCustomForeignComponents(a, this.context)) break;
u = /^H[1-6]$/.test(a.tagName), l = a.contains(e), d = a.getElementsByClassName("cd-signature", Number(l) + 1).length - Number(l) > 0 || n && a.contains(n);
}
if (i.push({
node: a,
isTextNode: c,
isHeading: u,
hasCurrentSignature: l,
hasForeignComponents: d,
lastStep: s
}), u) break;
}
return i;
}
removeNestedParts(e) {
for (let t = e.length - 1; t >= 0; t--) {
const n = e[t];
if ("up" === n.lastStep && !n.hasForeignComponents) {
let n = 0;
for (let i = t - 1; i > 0; i--) if ("dive" === e[i].lastStep) {
n = i;
break;
}
e.splice(n, t - n), t = n;
}
}
return e;
}
encloseInlineParts(e, t) {
const n = [];
let i = null, o = !1;
for (let t = 0; t <= e.length; t++) {
const s = e[t];
if (!s || null !== i && ![ "back", "start" ].includes(s.lastStep) || s.hasForeignComponents || s.isHeading) {
if (null !== i) {
if (o) {
const e = t - 1;
n.push({
start: i,
end: e
});
}
i = null, o = !1;
}
} else {
if (null === i) {
if (Ce(s.node.parentNode)) {
for (let n = t + 1; n < e.length; n++) "up" !== e[n].lastStep || (t = n - 1);
break;
}
i = t;
}
!o && (s.isTextNode && s.node.textContent.trim() || Ce(s.node)) && (o = !0);
}
}
for (let i = n.length - 1; i >= 0; i--) {
const o = n[i], s = this.context.document.createElement("div"), r = e[o.start].node.nextSibling, a = e[o.start].node.parentNode;
for (let t = o.end; t >= o.start; t--) s.appendChild(e[t].node);
a.insertBefore(s, r);
const c = {
node: s,
isTextNode: !1,
isHeading: !1,
hasCurrentSignature: s.contains(t),
hasForeignComponents: !1,
lastStep: "replaced"
};
e.splice(o.start, o.end - o.start + 1, c);
}
return e;
}
filterParts(e) {
for (let t = (e = e.filter(e => !e.hasForeignComponents && !e.isTextNode)).length - 1; t > 0; t--) {
const n = e[t];
if ("P" !== n.node.tagName || n.node.textContent.trim()) break;
e.splice(t, 1);
}
return e;
}
replaceListsWithItems(e, t) {
const n = e[e.length - 1];
for (let i = e.length - 1; i >= 0; i--) {
const o = e[i];
if ([ "UL", "DL", "OL", "LI", "DD" ].includes(o.node.tagName) && ("up" === o.lastStep && (!e[i - 1] || "back" !== e[i - 1].lastStep) || ("DD" === n.node.tagName || "DD" === n.node.parentNode.tagName || "DL" === n.node.tagName) && !e.slice(i + 1).some(e => "P" === e.node.tagName))) {
const n = o.node.textContent.replace(/\s+/g, "");
let s, r = [ o.node ];
do {
s = r.reduce((e, t) => e.concat(Array.from(t[this.context.childElementsProperty])), []);
} while (s.length && s.every(e => [ "UL", "DL", "OL", "LI", "DD" ].includes(e.tagName)) && s.map(e => e.textContent).join("").replace(/\s+/g, "") === n && (r = s));
if (r.length > 1) {
const n = r.map(e => ({
node: e,
isTextNode: !1,
hasCurrentSignature: e.contains(t),
hasForeignComponents: !1,
lastStep: "replaced"
}));
e.splice(i, 1, ...n);
} else r[0] !== o.node && Object.assign(o, {
node: r[0],
lastStep: "replaced"
});
}
}
return e;
}
getLevelsUpTree(e) {
const t = [], n = new qe(e);
for (;n.parentNode(); ) {
const e = n.currentNode;
if ([ "UL", "DL", "OL" ].includes(e.tagName)) {
if (e.classList.contains("cd-commentLevel")) {
const n = e.getAttribute("class").match(/cd-commentLevel-(\d+)/);
return n && t.unshift(...Array(Number(n[1]))), t;
}
t.unshift(e);
}
}
return t;
}
findHeadings() {
const e = [ ...p.g.rootElement.getElementsByTagName("h2"), ...p.g.rootElement.getElementsByTagName("h3"), ...p.g.rootElement.getElementsByTagName("h4"), ...p.g.rootElement.getElementsByTagName("h5"), ...p.g.rootElement.getElementsByTagName("h6") ];
return e.sort((e, t) => this.context.follows(e, t) ? 1 : -1), e;
}
}
function Je() {
const e = document.evaluate(".//descendant::text()", p.g.rootElement, null, XPathResult.ANY_TYPE, null), t = [];
let n;
for (;n = e.iterateNext(); ) t.push(n);
return t;
}
function Qe() {
const e = [ ...p.g.FLOATING_ELEMENTS_SELECTORS, ...p.config.customFloatingElementsSelectors ].join(", "), t = p.g.$root.find(e).get().filter(e => !e.classList.contains("cd-ignoreFloating"));
t.forEach(e => {
const t = window.getComputedStyle(e);
e.setAttribute("data-margin-top", parseFloat(t.marginTop)), e.setAttribute("data-margin-bottom", parseFloat(t.marginBottom));
});
const n = p.config.closedDiscussionsClasses.map(e => ".".concat(e)).join(", ");
return {
floating: t,
closedDiscussions: p.g.$root.find(n).get(),
pageHasOutdents: Boolean(p.g.$root.find(".outdent-template").length)
};
}
function Ze(e, t, n) {
const i = document.createElement(t);
for (;e.firstChild; ) i.appendChild(e.firstChild);
Array.from(e.attributes).forEach(e => {
i.setAttribute(e.name, e.value);
}), e.parentNode.replaceChild(i, e);
let o = e.getAttribute("data-comment-id");
if (null !== o) {
o = Number(o);
const t = p.comments[o];
t.elements.splice(t.elements.indexOf(e), 1, i), t.highlightables.includes(e) && (t.highlightables.splice(t.highlightables.indexOf(e), 1, i),
t.bindEvents(i));
}
return e === n.element && (n.element = i), i;
}
function et(e) {
const t = p.g.rootElement.querySelectorAll(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)");
if (!t.length) return;
const n = e => e.classList.contains("cd-commentLevel") && "OL" !== e.tagName || e.querySelector(".cd-commentLevel:not(ol)");
Array.from(t).forEach(t => {
const i = t.previousElementSibling;
if (!i) return;
let o = i, s = t;
do {
const t = o.tagName, i = {};
let r;
if ("UL" === t ? i.DD = "LI" : "DL" === t && (i.LI = "DD"), n(o)) {
for (;s.childNodes.length; ) {
let t = s.firstChild;
if (t.nodeType === Node.ELEMENT_NODE) i[t.tagName] && (t = Ze(t, i[t.tagName], e)),
void 0 === r && (r = t); else if (void 0 === r && t.textContent.trim()) {
r = null;
const e = document.createElement("span");
e.appendChild(t), t = e;
}
o.appendChild(t);
}
s.parentNode.removeChild(s);
}
s = r, o = r && r.previousElementSibling;
} while (o && s && n(s));
});
}
function tt(e) {
return nt.apply(this, arguments);
}
function nt() {
return (nt = o()((function*({messagesRequest: e}) {
p.g.$root = p.g.$content.children(".mw-parser-output"), p.g.$root.length || (p.g.$root = p.g.$content),
p.g.rootElement = p.g.$root.get(0), p.comments = [], p.sections = [], p.g.firstRun ? yield St({
messagesRequest: e
}) : (k(), Ve.reset());
}))).apply(this, arguments);
}
function it() {
let e, t;
if (0 !== window.pageYOffset && p.g.rootElement.getBoundingClientRect().top <= 0) {
const n = new qe(p.g.rootElement.firstElementChild);
for (;;) {
if (!Ce(n.currentNode.tagName)) {
const i = n.currentNode.getBoundingClientRect();
if (i.bottom >= 0 && 0 !== i.height) {
if (e = n.currentNode, t = i.top, n.firstChild()) continue;
break;
}
}
if (!n.nextSibling()) break;
}
}
return {
element: e,
top: t
};
}
function ot(e, t) {
const n = e.findTimestamps();
e.findSignatures(n).forEach(t => {
try {
const n = e.createComment(t);
n.highlightables.length && p.comments.push(n);
} catch (e) {
e instanceof l || console.error(e);
}
}), function(e) {
et(e), et(e), p.g.rootElement.querySelector(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)") && console.warn(".cd-commentLevel adjacencies have left."),
$("dl").has("dt").each((e, t) => {
Array.from(t.classList).filter(e => e.startsWith("cd-commentLevel")).forEach(e => t.classList.remove(e));
});
}(t), mw.hook("convenientDiscussions.commentsReady").fire(p.comments);
}
function st(e, t) {
e.findHeadings().forEach(n => {
try {
const i = e.createSection(n, t);
void 0 !== i.id && p.sections.push(i);
} catch (e) {
e instanceof l || console.error(e);
}
}), Kn.adjustSections(), mw.hook("convenientDiscussions.sectionsReady").fire(p.sections);
}
function rt() {
$(p.g.ADD_TOPIC_SELECTORS).off("click.cd").on("click.cd", (function(e) {
const t = $(this).attr("href");
if (e.ctrlKey || e.shiftKey || mw.util.getParamValue("preload", t)) return;
e.preventDefault();
const n = mw.util.getParamValue("editintro", t), i = p.g.CURRENT_PAGE.addSectionForm;
i ? (i.$element.cdScrollIntoView("center"), i.headlineInput.focus()) : p.g.CURRENT_PAGE.addSectionForm = new ci({
mode: "addSection",
target: p.g.CURRENT_PAGE,
$addSectionLink: $(this),
scrollIntoView: !0,
editintro: n
});
})).attr("title", p.s("addtopicbutton-tooltip"));
}
function at(e) {
e.find('a[href^="#"]').filter((function() {
return /^#\d{12}_.+$/.test($(this).attr("href"));
})).on("click", (function(e) {
e.preventDefault();
const t = Ni.getCommentByAnchor($(this).attr("href").slice(1));
t && t.scrollToAndHighlightTarget();
}));
}
function ct(e, t) {
return ut.apply(this, arguments);
}
function ut() {
return (ut = o()((function*(e, t) {
let n, i, o, s, r, a, c, u;
if (p.g.firstRun) {
n = location.hash.slice(1);
try {
i = decodeURIComponent(n);
} catch (e) {
console.error(e);
}
o = $.escapeSelector(n), s = i && $.escapeSelector(i), /^\d{12}_.+$/.test(n) && (r = i);
} else r = e;
if (r) {
if (({date: a, author: c} = N(r) || {}), u = Ni.getCommentByAnchor(r), !e && !u) {
let e;
for (let t = 1; !u && t <= 5; t++) {
e = T(new Date(a.getTime() - p.g.MILLISECONDS_IN_A_MINUTE * t), c), u = Ni.getCommentByAnchor(e);
}
}
u && setTimeout(() => {
u.scrollToAndHighlightTarget(!1);
});
}
if (t) {
const e = Kn.getSectionByAnchor(t);
e && e.$elements.first().cdScrollTo("top", !1);
}
if (p.g.firstRun) {
const e = i && !u && !p.config.idleFragments.includes(i) && !i.startsWith("/media/") && !$(":target").length && !$('a[name="'.concat(s, '"]')).length && !$('*[id="'.concat(s, '"]')).length && !$('a[name="'.concat(o, '"]')).length && !$('*[id="'.concat(o, '"]')).length;
i && e && p.g.isPageActive && (yield Un(i, a));
}
}))).apply(this, arguments);
}
function lt() {
p.settings.highlightOwnComments && Ni.configureAndAddLayers(p.comments.filter(e => e.own));
}
function dt() {
return ht.apply(this, arguments);
}
function ht() {
return (ht = o()((function*() {
"unknown" === p.settings.desktopNotifications && "denied" !== Notification.permission && Y(!0).then(e => {
if ("unknown" === e.desktopNotifications) {
const t = [ {
label: p.s("dn-confirm-yes"),
action: "accept",
flags: "primary"
}, {
label: p.s("dn-confirm-no"),
action: "reject"
} ];
Tn(p.s("dn-confirm"), {
size: "medium",
actions: t
}).then(t => {
let n;
"accept" === t ? "default" === Notification.permission ? (OO.ui.alert(p.s("dn-grantpermission")),
Notification.requestPermission(t => {
"granted" === t ? (p.settings.desktopNotifications = e.desktopNotifications = "all",
n = W(e)) : "denied" === t && (p.settings.desktopNotifications = e.desktopNotifications = "none",
n = W(e));
})) : "granted" === Notification.permission && (p.settings.desktopNotifications = e.desktopNotifications = "all",
n = W(e)) : "reject" === t && (p.settings.desktopNotifications = e.desktopNotifications = "none",
n = W(e)), n && n.catch(e => {
mw.notify(p.s("error-settings-save"), {
type: "error"
}), console.warn(e);
});
});
}
}), "unknown" !== p.settings.desktopNotifications && "default" === Notification.permission && (yield OO.ui.alert(p.s("dn-grantpermission-again"), {
title: p.s("script-name")
}), Notification.requestPermission());
}))).apply(this, arguments);
}
function mt() {
const e = (p.debug.timerTotal["main code"] + p.debug.timerTotal["final code and rendering"]) / p.comments.length;
p.debug.logAndResetTimer("total time"), console.debug("number of comments: ".concat(p.comments.length)),
console.debug("per comment: ".concat(e.toFixed(2))), p.debug.logAndResetEverything();
}
function pt() {
return gt.apply(this, arguments);
}
function gt() {
return (gt = o()((function*(e = {}) {
p.debug.stopTimer(p.g.firstRun ? "loading data" : "laying out HTML"), p.debug.startTimer("preparations"),
yield tt(e);
const t = p.g.firstRun ? it() : {};
p.debug.stopTimer("preparations"), p.debug.startTimer("main code"), p.g.IS_ARCHIVE_PAGE = Boolean(p.g.ARCHIVE_PATHS_REGEXP && p.g.ARCHIVE_PATHS_REGEXP.test(p.g.CURRENT_PAGE.name));
const n = !mw.config.get("wgArticleId") || mw.config.get("wgIsRedirect");
let i;
p.g.isPageActive = !(n || p.g.IS_ARCHIVE_PAGE || (mw.util.getParamValue("diff") || mw.util.getParamValue("oldid")) && mw.config.get("wgRevisionId") !== mw.config.get("wgCurRevisionId")),
p.g.editWatchedSections = Mn, p.g.settingsDialog = Ln, mw.config.get("wgArticleId") && (i = Q(!0, e),
i.catch(e => {
console.warn("Couldn't load the settings from the server.", e);
}));
const o = p.g.isPageActive ? V(!0) : void 0;
mw.hook("convenientDiscussions.beforeParse").fire(p), p.g.specialElements = Qe(),
p.debug.startTimer("process comments");
const s = new Xe({
CommentClass: Ni,
SectionClass: Kn,
childElementsProperty: "children",
document: document,
follows: (e, t) => e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_PRECEDING,
getAllTextNodes: Je,
getElementByClassName: (e, t) => e.querySelector(".".concat(t))
});
try {
ot(s, t);
} catch (e) {
console.error(e);
}
if (p.debug.stopTimer("process comments"), !p.g.isPageActive || p.comments.length || $("#ca-addsection").length || p.g.PAGE_WHITE_LIST_REGEXP && p.g.PAGE_WHITE_LIST_REGEXP.test(p.g.CURRENT_PAGE.name) || (p.g.isPageActive = !1),
p.debug.startTimer("process sections"), st(s, i), p.debug.stopTimer("process sections"),
rt(), p.debug.stopTimer("main code"), p.debug.startTimer("final code and rendering"),
t.element || e.scrollPosition) {
const n = t.element ? window.pageYOffset + t.element.getBoundingClientRect().top - t.top : e.scrollPosition;
window.scrollTo(0, n);
}
lt(), ct(e.commentAnchor, e.sectionAnchor), p.g.isPageActive && (p.g.firstRun || e.wasPageCreated ? gn.mount() : gn.reset(),
gn.processVisits(o, e.unseenCommentAnchors)), (p.g.isPageActive || n) && Ut(), p.g.firstRun && ($(document).on("mousemove mouseover", vn),
$(window).on("resize orientationchange", bn), yn("commentForms", () => (Ht(), mw.user.options.get("useeditwarning") && (ci.getLastActiveAlteredCommentForm() || r && p.commentForms.length))),
mw.hook("wikipage.content").add(at), mw.hook("convenientDiscussions.previewReady").add(at)),
(p.g.firstRun && p.g.isPageActive || e.wasPageCreated) && ($(document).on("keydown", En).on("scroll resize orientationchange", () => {
gn.registerSeenComments(), gn.updateCommentFormButton();
}), setInterval(() => {
Ve.redrawIfNecessary();
}, 1e3), setTimeout(() => {
new MutationObserver(e => {
e.every(e => /^cd-comment(Underlay|Overlay|Layers)/.test(e.target.className)) || Ve.redrawIfNecessary();
}).observe(p.g.$content.get(0), {
attributes: !0,
childList: !0,
subtree: !0
});
}, 500));
let r = !1;
mw.user.options.get("editondblclick") && mw.loader.using("mediawiki.action.view.dblClickEdit").then(() => {
$("#ca-edit").off("click"), r = !0;
}), mw.user.options.get("editsectiononrightclick") && mw.loader.using("mediawiki.action.view.rightClickEdit").then(() => {
$(".mw-editsection a").off("click"), r = !0;
}), p.g.firstRun && dt(), mw.hook("convenientDiscussions.pageReady").fire(p), Bt(),
p.g.firstRun = !1, p.g.rootElement.getBoundingClientRect(), p.debug.stopTimer("final code and rendering"),
p.debug.stopTimer("total time"), mt();
}))).apply(this, arguments);
}
/**
* Timestamp regexp generator, timestamp parser generator, date formats, digits, and timezones.
*
* The code is based on {@link
* https://gerrit.wikimedia.org/r/#/c/mediawiki/core/+/539305/3/signaturedetector.js}.
*
* @module dateFormat
* @author Bartosz Dziewoński <matma.rex@gmail.com>
* @license GPL-2.0-only
*/ const ft = {
ab: "H:i, j xg Y",
abs: "j F Y H.i",
ace: "j F Y H.i",
"ady-cyrl": "H:i, j F Y",
"aeb-arab": "H:i\u060c j xg Y",
"aeb-latn": "H:i, j F Y",
af: "H:i, j F Y",
ais: "H:i, j F Y",
ak: "H:i, j F Y",
aln: "j F Y H:i",
ami: "H:i, j F Y",
am: "H:i, j F Y",
ang: "H:i, j F Y",
an: "H:i j M Y",
anp: "H:i, j F Y",
arc: "H:i, j F Y",
ar: "H:i\u060c j xg Y",
arn: "H:i j M Y",
arq: "H:i\u060c j xg Y",
ary: "H:i, j F Y",
arz: "H:i\u060c j xg Y",
ase: "H:i, j F Y",
as: "H:i, j F Y",
ast: "H:i j M Y",
atj: "j F Y \xe0 H:i",
av: "H:i, j xg Y",
avk: "H:i, j F Y",
awa: "H:i, j F Y",
ay: "H:i j M Y",
azb: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
az: "H:i, j F Y",
ba: "H:i, j xg Y",
ban: "j F Y H.i",
bar: "H:i, j. M Y",
"bbc-latn": "j F Y H.i",
bcc: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
bcl: "H:i, j F Y",
be: "H:i, j xg Y",
"be-tarask": "H:i, j xg Y",
bg: "H:i, j F Y",
bgn: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
bho: "H:i, j F Y",
bi: "H:i, j F Y",
bjn: "j F Y H.i",
bm: "j F Y \xe0 H:i",
bn: "H:i, j F Y",
bo: "H:i, j F Y",
bpy: "H:i, j F Y",
bqi: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
brh: "H:i, j F Y",
br: 'j M Y "da" H:i',
bs: "H:i, j F Y",
btm: "j F Y H.i",
bto: "H:i, j F Y",
bug: "j F Y H.i",
bxr: "H:i, j xg Y",
ca: "H:i, j M Y",
"cbk-zam": "H:i j M Y",
cdo: 'Y "ni\xe8ng" n "ngu\u014fk" j "h\xf4\u0324" (D) H:i',
ceb: "H:i, j F Y",
ce: "Y, j F, H:i",
ch: "H:i, j F Y",
chr: "H:i, j F Y",
chy: "H:i, j F Y",
ckb: "H:i\u060c j\u06cc xg Y",
co: "H:i, j M Y",
cps: "H:i, j F Y",
"crh-cyrl": 'H:i, Y "\u0441." xg j',
"crh-latn": 'H:i, Y "s." xg j',
cr: "H:i, j F Y",
csb: "H:i, j M Y",
cs: "j. n. Y, H:i",
cu: "H:i, xg j \u0447\u0438\u0441\u043b\u0430, Y",
cv: "H:i, j xg Y",
cy: "H:i, j F Y",
da: "j. M Y, H:i",
"de-at": "H:i, j. M Y",
"de-ch": "H:i, j. M Y",
"de-formal": "H:i, j. M Y",
de: "H:i, j. M Y",
din: "H:i, j F Y",
diq: "H:i, j F Y",
dsb: "j. xg Y, H:i",
dtp: "H:i, j F Y",
dty: "H:i, j F Y",
dv: "H:i, j F Y",
dz: "H:i, j F Y",
ee: "H:i, j F Y",
egl: "H:i, j M Y",
el: "H:i, j xg Y",
eml: "H:i, j M Y",
"en-ca": "H:i, j F Y",
"en-gb": "H:i, j F Y",
en: "H:i, j F Y",
eo: "H:i, j M. Y",
"es-formal": "H:i j M Y",
es: "H:i j M Y",
et: 'j. F Y, "kell" H:i',
eu: "H:i, j F Y",
exif: "H:i, j F Y",
ext: "H:i j M Y",
fa: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
ff: "j F Y \xe0 H:i",
fi: 'j. F"ta" Y "kello" H.i',
fit: 'j. F"ta" Y "kello" H.i',
fj: "H:i, j F Y",
fo: 'j. M Y "kl." H:i',
frc: "j F Y \xe0 H:i",
fr: "j F Y \xe0 H:i",
frp: 'j F Y "a" H:i',
frr: "H:i, j. M Y",
fur: 'j "di" M Y "a lis" H:i',
fy: "j M Y, H.i",
gag: "H.i, j F Y",
ga: "H:i, j F Y",
"gan-hans": "Y\u5e74n\u6708j\u65e5 (D) H:i",
"gan-hant": "Y\u5e74n\u6708j\u65e5 (D) H:i",
gan: "Y\u5e74n\u6708j\u65e5 (D) H:i",
gcr: "j F Y \xe0 H:i",
gd: "H:i, j F Y",
gl: 'j \\d\\e F \\d\\e Y "\xe1s" H:i',
glk: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
gn: "H:i j M Y",
gom: "H:i, j F Y",
"gom-deva": "H:i, j F Y",
"gom-latn": "H:i, j F Y",
gor: "j F Y H.i",
got: "H:i, j F Y",
grc: "H:i, j xg Y",
gsw: "H:i, j. M Y",
gu: "H:i, j F Y",
gv: "H:i, j F Y",
ha: "H:i, j F Y",
hak: "H:i, j F Y",
haw: "H:i, j F Y",
he: "H:i, j xg Y",
"hif-latn": "H:i, j F Y",
hi: "H:i, j F Y",
hil: "H:i, j F Y",
hr: "H:i, j. F Y.",
hrx: "H:i, j. M Y",
hsb: "j. xg Y, H:i",
ht: "j F Y \xe0 H:i",
"hu-formal": "Y. F j., H:i",
hu: "Y. F j., H:i",
hy: "H:i, j xg Y",
hyw: "H:i, j xg Y",
ia: "H:i, j F Y",
id: "j F Y H.i",
ie: "H:i, j F Y",
ig: "H:i, j F Y",
ii: "Y\u5e74n\u6708j\u65e5 (D) H:i",
"ike-cans": "H:i, j F Y",
"ike-latn": "H:i, j F Y",
ik: "H:i, j F Y",
ilo: "H:i, j F Y",
inh: "H:i, j xg Y",
io: "H:i, j M. Y",
is: 'j. F Y "kl." H:i',
it: "H:i, j M Y",
ja: "Y\u5e74n\u6708j\u65e5 (D) H:i",
jam: "H:i, j F Y",
jbo: "H:i, j F Y",
jut: "j. M Y, H:i",
jv: "j F Y H.i",
kaa: 'H:i, Y "j." xg j',
kab: "H:i, j F Y",
ka: "H:i, j F Y",
"kbd-cyrl": "H:i, j F Y",
kbp: "j F Y \xe0 H:i",
kg: "H:i, j F Y",
khw: "H:i\u060c j xg Y\u0621",
ki: "H:i, j F Y",
kiu: "H.i, j F Y",
kjp: ' H:i"\u104a" j F Y',
"kk-arab": 'H:i\u060c Y "\u062c." xg j',
"kk-cyrl": 'H:i, Y "\u0436." xg j',
kk: 'H:i, Y "\u0436." xg j',
"kk-latn": 'H:i, Y "j." xg j',
kl: "j. M Y, H:i",
km: "\u1798\u17c4\u1784H:i l \u1791d F \u1786\u17d2\u1793\u17b6Y",
kn: "H:i, j F Y",
krc: "H:i, j xg Y",
kri: "H:i, j F Y",
krj: "H:i, j F Y",
krl: 'j. F"ta" Y "kello" H.i',
"ks-arab": "H:i, j F Y",
"ks-deva": "H:i, j F Y",
ksh: "H:i, j. M Y",
ks: "H:i, j F Y",
"ku-arab": "H:i\u060c j\u06cc xg Y",
"ku-latn": "H:i, j F Y",
kum: "H:i, j xg Y",
kv: "H:i, j xg Y",
kw: "H:i, j F Y",
ky: "H:i, j F Y",
lad: "H:i j M Y",
la: "H:i, j xg Y",
lbe: "H:i, j xg Y",
lb: "H:i, j. M Y",
lez: "H:i, j xg Y",
lfn: "H:i, j F Y",
lg: "H:i, j F Y",
lij: "H:i, j M Y",
li: "j M Y H:i",
liv: 'j. F Y, "kell" H:i',
lki: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
lmo: "H:i, j M Y",
ln: "j F Y \xe0 H:i",
lo: "H:i, j F Y",
loz: "H:i, j F Y",
lrc: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
ltg: 'Y". gada" j. F", plkst." H.i',
lt: "H:i, j F Y",
lus: "H:i, j F Y",
luz: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
lv: 'Y". gada" j. F", plkst." H.i',
lzh: "Y\u5e74n\u6708j\u65e5 \uff08D\uff09 H\u6642i\u5206",
lzz: "H.i, j F Y",
mai: "H:i, j F Y",
"map-bms": "j F Y H.i",
mdf: "H:i, j xg Y",
mg: "j F Y \xe0 H:i",
mhr: "H:i, j xg Y",
mi: "H:i, j F Y",
min: "j F Y H.i",
mk: "H:i, j F Y",
ml: "H:i, j F Y",
mni: "H:i, j F Y",
mn: "H:i, j F Y",
mnw: ' H:i"\u104a" j F Y',
mo: "j F Y H:i",
mrj: "H:i, j xg Y",
mr: "H:i, j F Y",
ms: "H:i, j F Y",
mt: "H:i, j F Y",
mwl: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y",
my: ' H:i"\u104a" j F Y',
myv: "H:i, j xg Y",
mzn: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
nah: "H:i j M Y",
na: "H:i, j F Y",
nan: 'Y-"n\xee" n-"goe\u030dh" j-"ji\u030dt" (D) H:i',
nap: "H:i, j M Y",
nb: 'j. M Y "kl." H:i',
nds: "H:i, j. M Y",
"nds-nl": "H:i, j M Y",
ne: "H:i, j F Y",
new: "H:i, j F Y",
niu: "H:i, j F Y",
"nl-informal": "j M Y H:i",
nl: "j M Y H:i",
nn: 'j. F Y "kl." H:i',
nov: "H:i, j F Y",
nqo: "H:i, j F Y",
nrm: "j F Y \xe0 H:i",
nso: "H:i, j F Y",
nv: "H:i, j F Y",
ny: "H:i, j F Y",
nys: "H:i, j F Y",
oc: 'j F "de" Y "a" H.i',
olo: 'j. F"ta" Y "kello" H.i',
om: "H:i, j F Y",
or: "H:i, j F Y",
os: "H:i, j xg Y",
pag: "H:i, j F Y",
pa: "H:i, j F Y",
pam: "H:i, j F Y",
pap: "H:i, j F Y",
pcd: "j F Y \xe0 H:i",
pdc: "H:i, j. M Y",
pdt: "H:i, j. M Y",
pfl: "H:i, j. M Y",
pih: "H:i, j F Y",
pi: "H:i, j F Y",
pl: "H:i, j M Y",
pms: "H:i, j M Y",
pnb: "H:i, j F Y",
pnt: "H:i, j xg Y",
prg: "H:i, j F Y",
ps: "H:i, j F Y",
"pt-br": 'H"h"i"min" "de" j "de" F "de" Y',
pt: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y",
qqq: "H:i, j F Y",
qug: "H:i j M Y",
qu: "H:i j M Y",
rgn: "H:i, j M Y",
rif: "H:i, j F Y",
rm: "H:i, j F Y",
rmy: "j F Y H:i",
"roa-tara": "H:i, j M Y",
ro: "j F Y H:i",
rue: "H:i, j xg Y",
ru: "H:i, j xg Y",
rup: "j F Y H:i",
"ruq-cyrl": "H:i, j F Y",
"ruq-latn": "j F Y H:i",
rw: "H:i, j F Y",
sah: "H:i, j xg Y",
sa: "H:i, j F Y",
sat: "H:i, j F Y",
sc: "H:i, j M Y",
scn: "H:i, j M Y",
sco: "H:i, j F Y",
sdc: "H:i, j F Y",
sdh: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i",
sd: "H:i, j F Y",
sei: "H:i, j F Y",
se: 'xg j "b." Y "dii." G.i',
ses: "j F Y \xe0 H:i",
sg: "j F Y \xe0 H:i",
sgs: "H:i, j F Y",
shi: "H:i, j F Y",
sh: "H:i, j F Y",
shn: "H:i, j F Y",
"shy-latn": "H:i, j F Y",
si: "H:i, j F Y",
sk: "H:i, j. F Y",
"skr-arab": "H:i\u060c j xg Y\u0621",
sli: "H:i, j. M Y",
sl: "H:i, j. F Y",
sma: "H:i, j F Y",
sm: "H:i, j F Y",
sn: "H:i, j F Y",
so: "H:i, j F Y",
sq: "j F Y H:i",
"sr-ec": "H:i, j. F Y.",
"sr-el": "H:i, j. F Y.",
srn: "j M Y H:i",
ss: "H:i, j F Y",
st: "H:i, j F Y",
stq: "H:i, j. M Y",
sty: "H:i, j xg Y",
su: "j F Y H.i",
sv: 'j F Y "kl." H.i',
sw: "H:i, j F Y",
szl: "H:i, j M Y",
ta: "H:i, j F Y",
tay: "H:i, j F Y",
tcy: "H:i, j F Y",
te: "H:i, j F Y",
tet: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y",
"tg-cyrl": "H:i, j xg Y",
"tg-latn": "H:i, j F Y",
th: "H:i, j F xkY",
ti: "H:i, j F Y",
tk: "H:i, j F Y",
tl: "H:i, j F Y",
tly: "H:i, j F Y",
tn: "H:i, j F Y",
to: "H:i, j F Y",
tpi: "H:i, j F Y",
tr: "H.i, j F Y",
tru: "H:i, j F Y",
trv: "H:i, j F Y",
ts: "H:i, j F Y",
"tt-cyrl": "j M Y, H:i",
"tt-latn": "j M Y, H:i",
tw: "H:i, j F Y",
ty: "j F Y \xe0 H:i",
tyv: "H:i, j xg Y",
tzm: "H:i, j F Y",
udm: "H:i, j xg Y",
"ug-arab": "H:i, j F Y",
"ug-latn": "H:i, j F Y",
uk: "H:i, j xg Y",
ur: "H:i\u060c j xg Y\u0621",
uz: "H:i, j-F Y",
vec: "H:i, j M Y",
ve: "H:i, j F Y",
vep: 'j. F Y, "kell" H:i',
vi: 'H:i, "ng\xe0y" j "th\xe1ng" n "n\u0103m" Y',
vls: "j M Y H:i",
vmf: "H:i, j. M Y",
vo: 'H:i, Y F j"id"',
vot: 'j. F"ta" Y "kello" H.i',
vro: 'j. F Y, "kell" H:i',
wa: "j F Y \xe0 H:i",
war: "H:i, j F Y",
wo: "j F Y \xe0 H:i",
wuu: "Y\u5e74n\u6708j\u53f7 (D) H:i",
xal: "H:i, j xg Y",
xh: "H:i, j F Y",
xmf: "H:i, j F Y",
xsy: "H:i, j F Y",
yi: "H:i, j xg Y",
yo: "H:i, j F Y",
yue: "Y\u5e74n\u6708j\u865f (D) H:i",
za: "Y\u5e74n\u6708j\u65e5 (D) H:i",
zea: "j M Y H:i",
zgh: "H:i, j F Y",
"zh-hans": "Y\u5e74n\u6708j\u65e5 (D) H:i",
"zh-hant": "Y\u5e74n\u6708j\u65e5 (D) H:i",
"zh-hk": "Y\u5e74n\u6708j\u65e5 (D) H:i",
zh: "Y\u5e74n\u6708j\u65e5 (D) H:i",
"zh-sg": "Y\u5e74n\u6708j\u65e5 (D) H:i",
"zh-tw": "Y\u5e74n\u6708j\u65e5 (D) H:i",
zu: "H:i, j F Y"
}, bt = {
"aeb-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
anp: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
ar: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
as: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef",
azb: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
bcc: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
bgn: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
bho: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
bn: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef",
bo: "\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29",
bpy: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef",
bqi: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
ckb: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
dty: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
dz: "\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29",
fa: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
glk: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
"gom-deva": "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
gu: "\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef",
hi: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
kjp: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049",
"kk-arab": "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
km: "\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9",
kn: "\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef",
"ks-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
"ks-deva": "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
ks: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
"ku-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
lki: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
lo: "\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9",
lrc: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
luz: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
lzh: "\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d",
mai: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
mni: "\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9",
mnw: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049",
mr: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
my: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049",
mzn: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
ne: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
new: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
nqo: "\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9",
or: "\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f",
pi: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
ps: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
sa: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
sat: "\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59",
sdh: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9",
"skr-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",
tcy: "\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef"
}, yt = [ "acdt", "acst", "act", "acwdt", "acwst", "addt", "adt", "aedt", "aest", "aft", "ahdt", "ahst", "akdt", "akst", "amst", "amt", "ant", "apt", "arst", "art", "ast", "awdt", "awst", "awt", "azomt", "azost", "azot", "bdst", "bdt", "beat", "beaut", "bmt", "bnt", "bortst", "bort", "bost", "bot", "brst", "brt", "bst", "btt", "burt", "cant", "capt", "cast", "cat", "cawt", "cct", "cddt", "cdt", "cemt", "cest", "cet", "cgst", "cgt", "chadt", "chast", "chdt", "chost", "chot", "chut", "ckhst", "ckt", "clst", "clt", "cmt", "cost", "cot", "cpt", "cst", "cut", "cvst", "cvt", "cwt", "cxt", "chst", "dact", "dmt", "easst", "east", "eat", "ect", "eddt", "edt", "eest", "eet", "egst", "egt", "ehdt", "emt", "ept", "est", "ewt", "ffmt", "fjst", "fjt", "fkst", "fkt", "fmt", "fnst", "fnt", "galt", "gamt", "gbgt", "gft", "ghst", "gilt", "gmt", "gst", "gyt", "hdt", "hkst", "hkt", "hmt", "hovst", "hovt", "hst", "ict", "iddt", "idt", "ihst", "imt", "iot", "irdt", "irst", "isst", "ist", "javt", "jcst", "jdt", "jmt", "jst", "jwst", "kart", "kdt", "kmt", "kost", "kst", "kwat", "lhdt", "lhst", "lint", "lkt", "lrt", "lst", "madmt", "madst", "madt", "malst", "malt", "mart", "mddt", "mdst", "mdt", "mest", "met", "mht", "mist", "mmt", "most", "mot", "mpt", "msd", "msk", "mst", "must", "mut", "mvt", "mwt", "myt", "ncst", "nct", "nddt", "ndt", "negt", "nest", "net", "nfst", "nft", "nmt", "npt", "nrt", "nst", "nut", "nwt", "nzdt", "nzmt", "nzst", "pddt", "pdt", "pest", "pet", "pgt", "phot", "phst", "pht", "pkst", "pkt", "plmt", "pmdt", "pmmt", "pmst", "pmt", "pnt", "pont", "ppmt", "ppt", "pst", "pwt", "pyst", "pyt", "qmt", "ret", "rmt", "sast", "sbt", "sct", "sdmt", "sdt", "set", "sgt", "sjmt", "smt", "srt", "sst", "swat", "taht", "tbmt", "tkt", "tlt", "tmt", "tost", "tot", "tvt", "uct", "ulast", "ulat", "utc", "uyhst", "uyst", "uyt", "vet", "vust", "vut", "wakt", "warst", "wart", "wast", "wat", "wemt", "west", "wet", "wft", "wgst", "wgt", "wib", "wita", "wit", "wmt", "wsdt", "wsst", "xjt", "yddt", "ydt", "ypt", "yst", "ywt", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" ];
function wt() {
const e = [];
mw.messages.set(p.config.messages), p.g.CONTRIBS_PAGE = p.config.contribsPage, p.g.LOCAL_TIMEZONE_OFFSET = p.config.localTimezoneOffset;
const t = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat", "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december", "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen", "parentheses", "parentheses-start", "parentheses-end", "word-separator", "comma-separator", "colon-separator" ], n = [];
for (let e = 0; e < t.length; e += 50) {
const i = t.slice(e, e + 50);
n.push(p.g.api.loadMessagesIfMissing(i, {
amlang: mw.config.get("wgContentLanguage")
}));
}
if (Promise.all(n).then(() => {
p.g.MESSAGES = {}, t.forEach(e => {
p.g.MESSAGES[e] = mw.msg(e);
});
}), e.push(...n), !Object.keys(p.config.messages).some(e => e.startsWith("timezone-"))) {
const t = p.g.api.loadMessages(void 0, {
amlang: mw.config.get("wgContentLanguage"),
amincludelocal: 1,
amfilter: "timezone-"
});
e.push(t);
}
if (!p.g.CONTRIBS_PAGE || null === p.g.LOCAL_TIMEZONE_OFFSET) {
const t = p.g.api.get({
action: "query",
meta: "siteinfo",
siprop: [ "specialpagealiases", "general" ]
}).then(e => {
e.query.specialpagealiases.some(e => {
if ("Contributions" === e.realname) return p.g.CONTRIBS_PAGE = mw.config.get("wgFormattedNamespaces")[-1] + ":" + e.aliases[0],
!0;
}), p.g.LOCAL_TIMEZONE_OFFSET = e.query.general.timeoffset;
});
e.push(t);
}
return Promise.all(e);
}
function Et() {
const e = function(e, t) {
const n = e => "(" + e.map(mw.util.escapeRegExp).join("|") + ")";
let i = "\\b";
for (let o = 0; o < e.length; o++) {
let s = !1, r = e[o];
switch ("x" === r && o < e.length - 1 && (r += e[++o]), "xk" === r && o < e.length - 1 && (r += e[++o]),
r) {
case "xx":
i += "x";
break;
case "xg":
i += n(Be([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ]));
break;
case "d":
s = "2";
break;
case "D":
i += n(Be([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ]));
break;
case "j":
s = "1,2";
break;
case "l":
i += n(Be([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ]));
break;
case "F":
i += n(Be([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ]));
break;
case "M":
i += n(Be([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ]));
break;
case "n":
s = "1,2";
break;
case "Y":
case "xkY":
s = "4";
break;
case "G":
s = "1,2";
break;
case "H":
case "i":
s = "2";
break;
case "\\":
o < e.length - 1 ? i += e[++o] : i += "\\";
break;
case '"':
if (o < e.length - 1) {
const t = e.indexOf('"', o + 1);
-1 === t ? i += '"' : (i += e.substr(o + 1, t - o - 1), o = t);
} else i += '"';
break;
default:
i += e[o];
}
!1 !== s && (i += "(" + (t + "{" + s + "}") + ")");
}
return i;
}(p.g.DATE_FORMAT, p.g.DIGITS ? "[" + p.g.DIGITS + "]" : "\\d"), t = Object.keys(p.config.messages).filter(e => e.startsWith("timezone-")).map(e => e.slice(9)), n = "\\((?:" + (t.length ? t : yt).map(e => {
const t = mw.message("timezone-" + e);
return t.exists() ? t.text() : e;
}).map(mw.util.escapeRegExp).join("|").toUpperCase() + ")\\)", i = e + " " + n;
p.g.TIMESTAMP_REGEXP = new RegExp(i), p.g.TIMESTAMP_REGEXP_NO_TIMEZONE = new RegExp(e),
p.g.TIMEZONE_REGEXP = new RegExp(n, "g");
}
function vt() {
!function() {
const e = mw.config.get("wgContentLanguage");
p.g.DATE_FORMAT = ft[e], p.g.DIGITS = mw.config.get("wgTranslateNumerals") ? bt[e] : null;
}(), Et(), function() {
const e = p.g.DATE_FORMAT, t = [];
for (let n = 0; n < e.length; n++) {
let i = e[n];
switch ("x" === i && n < e.length - 1 && (i += e[++n]), "xk" === i && n < e.length - 1 && (i += e[++n]),
i) {
case "xx":
break;
case "xg":
case "d":
case "j":
case "D":
case "l":
case "F":
case "M":
case "n":
case "Y":
case "xkY":
case "G":
case "H":
case "i":
t.push(i);
break;
case "\\":
n < e.length - 1 && ++n;
break;
case '"':
if (n < e.length - 1) {
const t = e.indexOf('"', n + 1);
-1 !== t && (n = t);
}
}
}
p.g.TIMESTAMP_PARSER = (e, t, n, i) => {
const o = e => n ? e.replace(new RegExp("[" + n + "]", "g"), e => n.indexOf(e)) : e, s = e => e.map(e => p.g.MESSAGES[e]);
let r = 0, a = 0, c = 0, u = 0, l = 0;
for (let n = 0; n < t.length; n++) {
const i = t[n], d = e[n + 3];
switch (i) {
case "xg":
a = s([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ]).indexOf(d);
break;
case "d":
case "j":
c = Number(o(d));
break;
case "D":
case "l":
break;
case "F":
a = s([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ]).indexOf(d);
break;
case "M":
a = s([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ]).indexOf(d);
break;
case "n":
a = Number(o(d)) - 1;
break;
case "Y":
r = Number(o(d));
break;
case "xkY":
r = Number(o(d)) - 543;
break;
case "G":
case "H":
u = Number(o(d));
break;
case "i":
l = Number(o(d));
break;
default:
throw "Not implemented";
}
}
return new Date(Date.UTC(r, a, c, u, l) - 60 * i * 1e3);
}, p.g.TIMESTAMP_MATCHING_GROUPS = t;
}();
}
function _t() {
p.settings = p.settings || {}, p.defaultSettings = {
allowEditOthersComments: !1,
alwaysExpandSettings: !1,
autopreview: !0,
desktopNotifications: "unknown",
defaultCommentLinkType: "diff",
defaultSectionLinkType: "wikilink",
highlightOwnComments: !0,
insertButtons: p.config.defaultInsertButtons || [],
insertButtonsChanged: !1,
signaturePrefix: "",
notifications: "all",
notificationsBlacklist: [],
showLoadingOverlay: !0,
showToolbar: !0,
watchOnReply: !0,
watchSectionOnReply: !0
}, p.localSettingNames = [ "insertButtons", "insertButtonsChanged" ];
const e = {
allowEditOthersMsgs: [ "allowEditOthersComments" ],
desktopNotifications: [ "browserNotifications" ],
signaturePrefix: [ "mySignature", "mySig" ]
};
let t, n;
try {
t = JSON.parse(mw.user.options.get(p.g.SETTINGS_OPTION_FULL_NAME)) || {};
} catch (e) {
t = {};
}
try {
n = JSON.parse(mw.user.options.get(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME)) || {};
} catch (e) {
n = {};
}
Object.keys(p.defaultSettings).forEach(i => {
(e[i] || []).concat(i).forEach(e => {
const o = "cd" + Re(e);
o in window && typeof o == typeof p.defaultSettings[i] && (p.settings[i] = window[e]),
void 0 !== t[e] && typeof t[e] == typeof p.defaultSettings[i] && (p.settings[i] = t[e]),
void 0 !== n[e] && typeof n[e] == typeof p.defaultSettings[i] && (p.settings[i] = n[e]);
});
}), p.settings.signaturePrefix && (p.settings.signaturePrefix = p.settings.signaturePrefix.replace(/~~\~~/, "")),
p.settings.insertButtonsChanged || JSON.stringify(t.insertButtons) === JSON.stringify(p.config.defaultInsertButtons) || (p.settings.insertButtons = p.config.defaultInsertButtons),
p.settings = Object.assign({}, p.defaultSettings, p.settings);
const i = Object.assign({}, t, n);
Object.keys(p.settings).some(e => JSON.stringify(p.settings[e]) !== JSON.stringify(i[e])) && W().catch(e => {
console.warn("Couldn't save the settings to the server.", e);
}), Object.keys(p.defaultSettings).forEach(t => {
(e[t] || []).concat(t).forEach(e => {
const n = "cdLocal" + Re(e);
n in window && typeof n == typeof p.defaultSettings[t] && (p.settings[t] = window[e]);
});
});
}
function Ct() {
const e = window.getComputedStyle(document.documentElement).getPropertyValue("--cd-comment-underlay-focused-color"), t = $("#content").length ? window.getComputedStyle($("#content").get(0)).backgroundColor : "white";
document.documentElement.style.setProperty("--cd-comment-underlay-focused-transparent-color", function(e) {
const t = document.createElement("span");
return t.style.color = e, (e = t.style.color).includes("rgba") ? e.replace(/\d+(?=\))/, "0") : e.replace(/rgb/, "rgba").replace(/\)/, ", 0)");
}(e || p.g.COMMENT_UNDERLAY_FOCUSED_COLOR)), p.g.nanoCss.put(":root", {
"--cd-comment-underlay-focused-color": p.g.COMMENT_UNDERLAY_FOCUSED_COLOR,
"--cd-comment-underlay-target-color": p.g.COMMENT_UNDERLAY_TARGET_COLOR,
"--cd-comment-underlay-new-color": p.g.COMMENT_UNDERLAY_NEW_COLOR,
"--cd-comment-underlay-own-color": p.g.COMMENT_UNDERLAY_OWN_COLOR
}), p.g.nanoCss.put(".cd-commentOverlay-gradient", {
backgroundImage: "linear-gradient(to left, var(--cd-comment-underlay-focused-color), var(--cd-comment-underlay-focused-transparent-color))"
}), p.g.nanoCss.put(".cd-messageArea .cd-closeButton", {
backgroundColor: t
});
}
function xt() {
p.config.tagName ? (p.g.SUMMARY_POSTFIX = "", p.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit")) : (p.g.SUMMARY_POSTFIX = " ([[".concat(p.config.helpWikilink, "|").concat(p.s("script-name-short"), "]])"),
p.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit") - p.g.SUMMARY_POSTFIX.length),
p.g.CURRENT_PAGE = new ve(p.g.CURRENT_PAGE_NAME), p.g.CONTRIBS_PAGE_LINK_REGEXP = new RegExp("^".concat(p.g.CONTRIBS_PAGE, "/")),
p.g.CURRENT_USER_GENDER = mw.user.options.get("gender"), p.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"),
p.g.GENDER_AFFECTS_USER_STRING = /\{\{ *gender *:[^}]+?\|[^}]+?\|/i.test(p.s("es-reply-to", !0) + p.s("es-edit-comment-by", !0) + p.s("thank-confirm", !0)),
p.g.dontHandleScroll = !1, p.g.autoScrollInProgress = !1;
}
function Tt() {
const e = mw.config.get("wgNamespaceIds"), t = Object.keys(e).filter(t => [ 2, 3 ].includes(e[t])), n = Pe(t.join("|"));
p.g.USER_NAMESPACES_REGEXP = new RegExp("(?:^|:)(?:".concat(n, "):(.+)"), "i");
const i = e => e.replace(/:/g, " : ").replace(/[ _]/g, "[ _]*"), o = i(t.join("|")), s = i(p.g.CONTRIBS_PAGE);
p.g.CAPTURE_USER_NAME_PATTERN = "\\[\\[[ _]*:?(?:\\w*:){0,2}(?:(?:".concat(o, ")[ _]*:[ _]*|") + "(?:Special[ _]*:[ _]*Contributions|".concat(s, ")\\/[ _]*)([^|\\]/]+)(/)?");
const r = i(Object.keys(e).filter(t => 2 === e[t]).join("|"));
if (p.g.USER_NAMESPACE_ALIASES_REGEXP = new RegExp("^:?(?:".concat(r, "):([^/]+)$"), "i"),
p.config.unsignedTemplates.length) {
const e = p.config.unsignedTemplates.join("|");
p.g.UNSIGNED_TEMPLATES_REGEXP = new RegExp("(\\{\\{ *(?:".concat(e, ") *\\|[ \\u200E]*([^}|]+?)[ \\u200E]*(?:\\|[ \\u200E]*([^}]+?)[ \\u200E]*)?\\}\\}).*\\n"), "ig");
}
p.g.CURRENT_USER_SIGNATURE = p.settings.signaturePrefix + p.g.SIGN_CODE;
const a = mw.user.options.get("nickname"), c = a.match(new RegExp(p.g.CAPTURE_USER_NAME_PATTERN, "i"));
if (c) {
const e = mw.util.escapeRegExp(p.settings.signaturePrefix), t = mw.util.escapeRegExp(a.slice(0, c.index));
p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP = new RegExp(e + t + "$");
}
const u = p.g.POPULAR_INLINE_ELEMENTS.join("|");
p.g.PIE_PATTERN = "(?:".concat(u, ")");
const l = p.g.POPULAR_NOT_INLINE_ELEMENTS.join("|");
p.g.PNIE_PATTERN = "(?:".concat(l, ")");
const d = [];
if (p.config.elementsToExcludeClasses.length || p.config.templatesToExclude.length || p.config.commentAntipatterns.length) {
if (p.config.elementsToExcludeClasses) {
const e = p.config.elementsToExcludeClasses.join("\\b|\\b");
d.push("class=(['\"])[^'\"\\n]*(?:\\b".concat(e, "\\b)[^'\"\\n]*\\1"));
}
if (p.config.templatesToExclude.length) {
const e = p.config.templatesToExclude.map(xe).join("|");
d.push("\\{\\{ *(?:".concat(e, ") *(?:\\||\\}\\})"));
}
p.config.commentAntipatterns && d.push(...p.config.commentAntipatterns);
const e = d.join("|");
p.g.COMMENT_ANTIPATTERNS_REGEXP = new RegExp("^.*(?:".concat(e, ").*$"), "mg");
}
p.g.ARTICLE_PATH_REGEXP = new RegExp(mw.util.escapeRegExp(mw.config.get("wgArticlePath")).replace(mw.util.escapeRegExp("$1"), "(.*)"));
const h = [ "<blockquote>", "<q>" ], m = [ "</blockquote>", "</q>" ];
p.config.pairQuoteTemplates.forEach(e => {
h.push("{{".concat(e[0])), m.push("{{".concat(e[1]));
});
const g = h.map(mw.util.escapeRegExp).join("|"), f = m.map(mw.util.escapeRegExp).join("|");
p.g.QUOTE_REGEXP = new RegExp("(".concat(g, ")([^]*?)(").concat(f, ")"), "ig"),
p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES = p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.concat(p.config.customUnhighlightableElementsClasses);
const b = i(Object.keys(e).filter(t => 6 === e[t]).join("|"));
p.g.FILE_PREFIX_PATTERN = "(?:".concat(b, "):");
const y = i(Object.keys(e).filter(t => [ 6, 14 ].includes(e[t])).join("|"));
p.g.COLON_NAMESPACES_PREFIX_REGEXP = new RegExp("^:(?:".concat(y, "):"), "i"), p.g.BAD_COMMENT_BEGINNINGS = p.g.BAD_COMMENT_BEGINNINGS.concat([ new RegExp("^\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\n*(?=[*:#])")) ]).concat(p.config.customBadCommentBeginnings),
p.g.ADD_TOPIC_SELECTORS = [ "#ca-addsection a" ].concat(p.config.customAddTopicLinkSelectors).join(", "),
p.g.ARCHIVE_PATHS_REGEXP = je(p.config.archivePaths), p.g.PAGES_WITHOUT_ARCHIVES_REGEXP = je(p.config.pagesWithoutArchives);
}
function At() {
xn(), p.g.COMMENT_ELEMENT_PROTOTYPES = {}, p.g.SECTION_ELEMENT_PROTOTYPES = {},
p.g.COMMENT_ELEMENT_PROTOTYPES.goToParentButton = new OO.ui.ButtonWidget({
label: p.s("cm-gotoparent"),
title: p.s("cm-gotoparent-tooltip"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0);
const e = "cm-copylink-tooltip-".concat(p.settings.defaultCommentLinkType.toLowerCase());
p.g.COMMENT_ELEMENT_PROTOTYPES.linkButton = new OO.ui.ButtonWidget({
label: p.s("cm-copylink"),
title: p.s(e) + " " + p.s("cld-invitation"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.pendingLinkButton = new OO.ui.ButtonWidget({
label: p.s("cm-copylink"),
title: p.s(e) + " " + p.s("cld-invitation"),
framed: !1,
disabled: !0,
classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.thankButton = new OO.ui.ButtonWidget({
label: p.s("cm-thank"),
title: p.s("cm-thank-tooltip"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.pendingThankButton = new OO.ui.ButtonWidget({
label: p.s("cm-thank"),
title: p.s("cm-thank-tooltip"),
framed: !1,
disabled: !0,
classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.disabledThankButton = new OO.ui.ButtonWidget({
label: p.s("cm-thank"),
title: p.s("cm-thank-disabled-tooltip"),
framed: !1,
disabled: !0,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.editButton = new OO.ui.ButtonWidget({
label: p.s("cm-edit"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({
label: p.s("cm-reply"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
}).$element.get(0), p.g.SECTION_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({
label: p.s("section-reply"),
framed: !1,
classes: [ "cd-button", "cd-sectionButton" ]
}).$element.get(0), p.g.SECTION_ELEMENT_PROTOTYPES.addSubsectionButton = new OO.ui.ButtonWidget({
label: "",
framed: !1,
classes: [ "cd-button", "cd-sectionButton" ]
}).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.underlay = document.createElement("div"),
p.g.COMMENT_ELEMENT_PROTOTYPES.underlay.className = "cd-commentUnderlay", p.g.COMMENT_ELEMENT_PROTOTYPES.overlay = document.createElement("div"),
p.g.COMMENT_ELEMENT_PROTOTYPES.overlay.className = "cd-commentOverlay";
const t = document.createElement("div");
t.className = "cd-commentOverlay-innerWrapper", p.g.COMMENT_ELEMENT_PROTOTYPES.overlay.appendChild(t);
const n = document.createElement("div");
n.textContent = "\xa0", n.className = "cd-commentOverlay-gradient", t.appendChild(n);
const i = document.createElement("div");
i.className = "cd-commentOverlay-content", t.appendChild(i);
}
function St(e) {
return kt.apply(this, arguments);
}
function kt() {
return (kt = o()((function*({messagesRequest: e}) {
p.g.api = p.g.api || new mw.Api, yield e || wt(), _t(), vt(), xt(), p.commentForms = [],
Tt(), At(), $.fn.extend(ze);
}))).apply(this, arguments);
}
function Nt() {
return p.comments.filter(e => "unseen" === e.newness).map(e => e.anchor);
}
function Ot(e, t) {
return It.apply(this, arguments);
}
function It() {
return (It = o()((function*(e, t) {
p.debug.stopTimer("getting HTML"), p.debug.startTimer("laying out HTML"), p.g.$content.children(".mw-parser-output").remove(),
p.g.$content.append(e);
try {
yield pt(Object.assign({}, t, {
unseenCommentAnchors: Nt()
}));
} catch (e) {
mw.notify(p.s("error-processpage"), {
type: "error"
}), console.error(e), Bt();
}
mw.hook("wikipage.content").fire(p.g.$content);
}))).apply(this, arguments);
}
let Pt, Lt, Ft;
function Mt() {
return p.settings && !1 === p.settings.showLoadingOverlay || !p.settings && void 0 !== window.cdShowLoadingOverlay && !1 === window.cdShowLoadingOverlay;
}
function Rt() {
Mt() || (Pt ? Pt.show() : (Pt = $("<div>").addClass("cd-loadingPopup"), $("<img>").addClass("cd-loadingPopup-logo").attr("src", p.config.logoDataUrl).appendTo(Pt),
$(document.body).append(Pt)));
}
function Bt() {
Pt && !Mt() && Pt.hide();
}
function Dt() {
return jt.apply(this, arguments);
}
function jt() {
return (jt = o()((function*(e = {}) {
let t;
Ht(), e.scrollPosition = window.pageYOffset, gn.closeAllNotifications(), p.debug.init(),
p.debug.startTimer("total time"), p.debug.startTimer("getting HTML"), Rt(), re().catch(e => {
console.warn(e);
});
try {
t = yield p.g.CURRENT_PAGE.parse({
markAsRead: !0
});
} catch (t) {
if (Bt(), e.didSubmitCommentForm) throw t;
return mw.notify(p.s("error-reloadpage"), {
type: "error"
}), void console.warn(t);
}
p.commentForms.forEach(e => {
e.$element.detach();
}), mw.config.set({
wgRevisionId: t.revid,
wgCurRevisionId: t.revid
}), mw.loader.load(t.modules), mw.loader.load(t.modulestyles), mw.config.set(t.jsconfigvars),
history.replaceState(history.state, "", location.pathname + location.search), rn(0, !1),
Ot(t.text, e);
}))).apply(this, arguments);
}
function Ht() {
const e = p.commentForms.map(e => {
let t;
const n = e.target;
return e.target instanceof Ni ? t = {
anchor: n.anchor
} : n instanceof Kn && (t = {
headline: n.headline,
firstCommentAnchor: n.comments[0] && n.comments[0].anchor,
index: n.id
}), {
mode: e.mode,
targetData: t,
addSectionLinkHref: e.$addSectionLink && e.$addSectionLink.attr("href"),
headline: e.headlineInput && e.headlineInput.getValue(),
comment: e.commentInput.getValue(),
summary: e.summaryInput.getValue(),
minor: e.minorCheckbox && e.minorCheckbox.isSelected(),
watch: e.watchCheckbox && e.watchCheckbox.isSelected(),
watchSection: e.watchSectionCheckbox && e.watchSectionCheckbox.isSelected(),
noSignature: e.noSignatureCheckbox && e.noSignatureCheckbox.isSelected(),
delete: e.deleteCheckbox && e.deleteCheckbox.isSelected(),
originalHeadline: e.originalHeadline,
originalComment: e.originalComment,
summaryAltered: e.summaryAltered,
lastFocused: e.lastFocused
};
}), t = e.length ? {
forms: e,
saveUnixTime: Date.now()
} : {}, n = localStorage.getItem("convenientDiscussions-commentForms");
let i;
try {
i = n && JSON.parse(n) || {};
} catch (e) {
console.error(e), i = {};
}
i[mw.config.get("wgPageName")] = t, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(i));
}
function Ut() {
if (p.g.firstRun) {
const t = localStorage.getItem("convenientDiscussions-commentForms");
if (t) {
let n;
try {
n = JSON.parse(t) || {};
} catch (e) {
return void console.error(e);
}
e = n, Object.keys(e).forEach(t => {
(!e[t].forms || !e[t].forms.length || e[t].saveUnixTime < Date.now() - 1e3 * p.g.SECONDS_IN_A_DAY * 30) && delete e[t];
}), n = e, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(n));
const i = n[mw.config.get("wgPageName")] || {};
if (i.forms) {
!function(e) {
let t = !1;
const n = [];
e.forms.forEach(e => {
const i = ci.modeToProperty(e.mode);
if (e.targetData && e.targetData.anchor) {
const o = Ni.getCommentByAnchor(e.targetData.anchor);
if (o && o.actionable && !o["".concat(i, "Form")]) try {
o[i](e), t = !0;
} catch (t) {
console.warn(t), n.push(e);
} else n.push(e);
} else if (e.targetData && e.targetData.headline) {
const o = Kn.search({
headline: e.targetData.headline,
firstCommentAnchor: e.targetData.firstCommentAnchor,
index: e.targetData.index
});
if (o && o.actionable && !o["".concat(i, "Form")]) try {
o[i](e), t = !0;
} catch (t) {
console.warn(t), n.push(e);
} else n.push(e);
} else if ("addSection" === e.mode) if (p.g.CURRENT_PAGE.addSectionForm) n.push(e); else {
const n = $("<a>").attr("href", e.addSectionLinkHref);
p.g.CURRENT_PAGE.addSectionForm = new ci({
target: p.g.CURRENT_PAGE,
mode: e.mode,
$addSectionLink: n,
dataToRestore: e
}), t = !0;
}
}), t && Ht(), n.length && Hn(n);
}(i), mw.notification.notify(p.s("restore-restored-text"), {
title: p.s("restore-restored-title")
}).$notification.on("click", () => {
gn.isMounted() && gn.goToNextCommentForm();
});
}
}
} else {
const e = [], t = t => {
e.push({
headline: t.headlineInput && t.headlineInput.getValue(),
comment: t.commentInput.getValue(),
summary: t.summaryInput.getValue()
});
};
p.commentForms.forEach(e => {
e.checkCodeRequest = null;
const n = e.target;
if (n instanceof Ni) {
if (n.anchor) {
const i = Ni.getCommentByAnchor(n.anchor);
if (i && i.actionable) try {
e.setTargets(i), i[ci.modeToProperty(e.mode)](e), e.addToPage();
} catch (n) {
console.warn(n), t(e);
} else t(e);
}
} else if (n instanceof Kn) {
const i = Kn.search({
headline: n.headline,
firstCommentAnchor: n.comments[0] && n.comments[0].anchor,
index: n.id
});
if (i && i.actionable) try {
e.setTargets(i), i[ci.modeToProperty(e.mode)](e), e.addToPage();
} catch (n) {
console.warn(n), t(e);
} else t(e);
} else "addSection" === e.mode && (e.addToPage(), p.g.CURRENT_PAGE.addSectionForm = e);
}), e.length && Hn(e);
}
var e;
Ht(), gn.isMounted() && gn.updateCommentFormButton();
}
let Yt, $t, qt, Wt, Gt, Vt, zt, Kt = null, Xt = [], Jt = [], Qt = [], Zt = !1;
function en(e) {
p.g.worker.postMessage({
type: "setAlarm",
interval: e
});
}
function tn() {
p.g.worker.postMessage({
type: "removeAlarm"
});
}
function nn() {
return on.apply(this, arguments);
}
function on() {
return (on = o()((function*() {
if (!p.g.worker) return;
if (document.hidden && !Zt) {
const e = () => {
$(document).off("visibilitychange", e), Zt = !1, tn(), nn();
};
return $(document).on("visibilitychange", e), en(1e3 * Math.abs(p.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL - p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL)),
void (Zt = !0);
}
Zt = !1;
const e = Xt.length ? Xt[Xt.length - 1] : mw.config.get("wgRevisionId");
try {
const t = yield ie({
action: "query",
titles: p.g.CURRENT_PAGE.name,
prop: "revisions",
rvprop: [ "ids", "flags", "size", "comment" ],
rvdir: "newer",
rvstartid: e,
rvlimit: 500,
redirects: !0,
formatversion: 2
}).catch(Ie), n = t && t.query && t.query.pages && t.query.pages[0] && t.query.pages[0].revisions;
if (!n) throw new l({
type: "api",
code: "noData"
});
const i = n.filter((e, t) => 0 !== t && !e.minor && Math.abs(e.size - n[t - 1].size) >= p.config.bytesToDeemComment && !Ae(e.comment)).map(e => e.revid);
if (Xt.push(...i), Xt = _e(Xt), i.length) {
const {text: e} = (yield p.g.CURRENT_PAGE.parse({
noTimers: !0,
markAsRead: !1
})) || {};
void 0 === e ? console.error("No page text.") : p.g.worker.postMessage({
type: "parse",
text: e,
g: {
TIMESTAMP_REGEXP: p.g.TIMESTAMP_REGEXP,
TIMESTAMP_REGEXP_NO_TIMEZONE: p.g.TIMESTAMP_REGEXP_NO_TIMEZONE,
TIMESTAMP_PARSER: p.g.TIMESTAMP_PARSER.toString(),
TIMESTAMP_MATCHING_GROUPS: p.g.TIMESTAMP_MATCHING_GROUPS,
TIMEZONE_REGEXP: p.g.TIMEZONE_REGEXP,
DIGITS: p.g.DIGITS,
LOCAL_TIMEZONE_OFFSET: p.g.LOCAL_TIMEZONE_OFFSET,
MESSAGES: p.g.MESSAGES,
CONTRIBS_PAGE: p.g.CONTRIBS_PAGE,
CONTRIBS_PAGE_LINK_REGEXP: p.g.CONTRIBS_PAGE_LINK_REGEXP,
ARTICLE_PATH_REGEXP: p.g.ARTICLE_PATH_REGEXP,
USER_NAMESPACES_REGEXP: p.g.USER_NAMESPACES_REGEXP,
UNHIGHLIGHTABLE_ELEMENTS_CLASSES: p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES,
CURRENT_USER_NAME: p.g.CURRENT_USER_NAME,
CURRENT_USER_GENDER: p.g.CURRENT_USER_GENDER,
CURRENT_PAGE_NAME: p.g.CURRENT_PAGE.name,
CURRENT_NAMESPACE_NUMBER: p.g.CURRENT_NAMESPACE_NUMBER
},
config: {
customFloatingElementsSelectors: p.config.customFloatingElementsSelectors,
closedDiscussionsClasses: p.config.closedDiscussionsClasses,
elementsToExcludeClasses: p.config.elementsToExcludeClasses,
signatureScanLimit: p.config.signatureScanLimit,
foreignElementsInHeadlinesClasses: p.config.foreignElementsInHeadlinesClasses,
checkForCustomForeignComponents: p.config.checkForCustomForeignComponents ? p.config.checkForCustomForeignComponents.toString() : p.config.checkForCustomForeignComponents
}
});
}
} catch (e) {
console.warn(e);
}
document.hidden ? (en(1e3 * p.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL), Zt = !0) : en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL);
}))).apply(this, arguments);
}
function sn(e, t) {
const n = {};
let i;
e.forEach(e => {
n[e.sectionAnchor] || (n[e.sectionAnchor] = []), n[e.sectionAnchor].push(e);
}), e.length ? (i = "".concat(p.s("navpanel-newcomments-count", e.length), " ").concat(mw.msg("parentheses", "R")),
Object.keys(n).forEach(e => {
const t = n[e][0].sectionHeadline ? p.s("navpanel-newcomments-insection", n[e][0].sectionHeadline) : mw.msg("parentheses", p.s("navpanel-newcomments-outsideofsections"));
i += "\n\n".concat(t), n[e].forEach(e => {
i += "\n";
const t = e.targetCommentAuthor && e.level > 1 ? p.s("newpanel-newcomments-reply", e.author.name, e.targetCommentAuthor.name) : e.author.name, n = e.date ? p.util.formatDate(e.date) : p.s("navpanel-newcomments-unknowndate");
i += t + mw.msg("comma-separator") + n;
});
})) : i = "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R")),
qt.text(e.length ? "+".concat(e.length) : "").attr("title", i), t ? qt.addClass("cd-navPanel-refreshButton-interesting") : qt.removeClass("cd-navPanel-refreshButton-interesting");
}
function rn(e, t) {
const n = t ? "*" : "", i = e ? "(".concat(e).concat(n, ") ") : "";
document.title = document.title.replace(/^(?:\(\d+\*?\) )?/, i);
}
function an(e) {
$(".cd-refreshButtonContainer").remove(), _e(e.map(e => e.sectionAnchor)).forEach(t => {
const n = Kn.getSectionByAnchor(t);
if (!n) return;
const i = new OO.ui.ButtonWidget({
label: p.s("section-newcomments"),
framed: !1,
classes: [ "cd-button", "cd-sectionButton" ]
});
i.on("click", () => {
Dt({
commentAnchor: e.find(e => e.sectionAnchor === t).anchor
});
});
const o = n.$replyButton ? n.$replyButton.closest("ul, ol") : n.$elements[n.$elements.length - 1];
$("<div>").addClass("cd-refreshButtonContainer").addClass("cd-sectionButtonContainer").append(i.$element).insertAfter(o);
});
}
function cn(e, t) {
return un.apply(this, arguments);
}
function un() {
return (un = o()((function*(e, t) {
const n = e.filter(e => !Jt.some(t => t.anchor === e.anchor));
let i = [];
"all" === p.settings.desktopNotifications ? i = n : "toMe" === p.settings.desktopNotifications && (i = n.filter(e => e.toMe));
let o = [];
"all" === p.settings.notifications ? o = n : "toMe" === p.settings.notifications && (o = n.filter(e => e.toMe)),
"none" !== p.settings.notifications && o.length && Qt.slice().reverse().some(e => !e.notification.isOpen || (o.push(...e.comments),
!1));
const s = _e(o.concat(i)).map(e => e.author).filter(ke);
if (yield we(s, {
noTimers: !0
}), o.length) {
let e, n;
const i = p.commentForms.some(e => e.isAltered()) ? " " + mw.msg("parentheses", p.s("notification-formdata")) : "", s = p.s("notification-reload", n, i);
if (1 === o.length) {
const t = o[0], i = p.g.CURRENT_PAGE.name + (t.anchor ? "#" + t.anchor : "");
if (n = mw.util.getUrl(i), t.toMe) {
const n = t.watchedSectionHeadline ? mw.msg("word-separator") + p.s("notification-part-insection", t.watchedSectionHeadline) : mw.msg("word-separator") + p.s("notification-part-onthispage");
e = p.s("notification-toyou", t.author.name, t.author, n) + " " + s;
} else e = p.s("notification-insection", t.author.name, t.author, t.watchedSectionHeadline) + " " + s;
} else {
const i = o.every(e => e.watchedSectionHeadline === o[0].watchedSectionHeadline) ? o[0].watchedSectionHeadline : void 0, r = p.g.CURRENT_PAGE.name + (i ? "#" + i : "");
n = mw.util.getUrl(r);
const a = i ? mw.msg("word-separator") + p.s("notification-part-insection", i) : mw.msg("word-separator") + p.s("notification-part-onthispage");
let c = p.s("notification-newcomments-maybeinteresting");
c.startsWith(",") || (c = mw.msg("word-separator") + c);
const u = i && t.includes(i) ? "" : c;
e = p.s("notification-newcomments", o.length, a, u) + " " + s;
}
pn.closeAllNotifications();
const r = Me(e, [ "cd-notification-reloadPage", e => {
e.preventDefault(), Dt({
commentAnchor: o[0].anchor
}), a.close();
} ]), a = mw.notification.notify(r);
Qt.push({
notification: a,
comments: o
});
}
if (!document.hasFocus() && "granted" === Notification.permission && i.length) {
let e, n = "convenient-discussions-";
const o = i[0];
if (1 === i.length) if (n += o.anchor, o.toMe) {
const t = o.sectionHeadline ? mw.msg("word-separator") + p.s("notification-part-insection", o.sectionHeadline) : "";
e = p.s("notification-toyou-desktop", o.author.name, o.author, t, p.g.CURRENT_PAGE.name);
} else e = p.s("notification-insection-desktop", o.author.name, o.author, o.sectionHeadline, p.g.CURRENT_PAGE.name); else {
const o = i.every(e => e.watchedSectionHeadline === i[0].watchedSectionHeadline) ? i[0].watchedSectionHeadline : void 0, s = o ? mw.msg("word-separator") + p.s("notification-part-insection", o) : "";
let r = p.s("notification-newcomments-maybeinteresting");
r.startsWith(",") || (r = mw.msg("word-separator") + r);
const a = o && t.includes(o) ? "" : r;
e = p.s("notification-newcomments-desktop", i.length, s, p.g.CURRENT_PAGE.name, a),
n += i[i.length - 1].anchor;
}
new Notification(mw.config.get("wgSiteName"), {
body: e,
tag: n
}).onclick = () => {
parent.focus(), window.focus(), Dt({
commentAnchor: o.anchor
});
};
}
Jt.push(...n);
}))).apply(this, arguments);
}
function ln(e) {
return dn.apply(this, arguments);
}
function dn() {
return (dn = o()((function*(e) {
let t;
try {
({thisPageWatchedSections: t} = (yield Q(!0)) || {});
} catch (e) {
console.warn("Couldn't load the settings from the server.");
}
e.forEach(e => {
e.author = b.getUser(e.authorName), delete e.authorName, e.targetCommentAuthorName && (e.targetCommentAuthor = b.getUser(e.targetCommentAuthorName),
delete e.targetCommentAuthorName);
});
const n = e.filter(e => e.anchor && !Ni.getCommentByAnchor(e.anchor)), i = n.filter(e => {
if (e.own || p.settings.notificationsBlacklist.includes(e.author.name) || !t) return !1;
if (e.toMe) return !0;
const n = Kn.getSectionsByHeadline(e.sectionHeadline);
for (const t of n) {
const n = t.getWatchedAncestor(!0);
if (n) return e.watchedSectionHeadline = n.headline, !0;
}
});
i[0] ? Yt = i[0].anchor : n[0] && (Yt = n[0].anchor), sn(n, i.length), rn(n.length, i.length),
an(n), cn(i, t);
}))).apply(this, arguments);
}
function hn(e) {
return mn.apply(this, arguments);
}
function mn() {
return (mn = o()((function*(e) {
const t = e.data;
if ("wakeUp" === t.type && nn(), "parse" === t.type) {
const {comments: e} = t;
ln(e);
}
}))).apply(this, arguments);
}
const pn = {
mouseOverNavPanel: !1,
mount() {
var e = this;
return o()((function*() {
$t = $("<div>").attr("id", "cd-navPanel").on("mouseenter", () => {
e.isMouseOver = !0;
}).on("mouseleave", () => {
e.isMouseOver = !1;
}).appendTo(document.body), qt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-refreshButton").attr("title", "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R"))).on("click", () => {
e.refreshClick();
}).appendTo($t), Wt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-previousButton").attr("title", "".concat(p.s("navpanel-previous"), " ").concat(mw.msg("parentheses", "W"))).on("click", () => {
e.goToPreviousNewComment();
}).hide().appendTo($t), Gt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-nextButton").attr("title", "".concat(p.s("navpanel-next"), " ").concat(mw.msg("parentheses", "S"))).on("click", () => {
e.goToNextNewComment();
}).hide().appendTo($t), Vt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-firstUnseenButton").attr("title", "".concat(p.s("navpanel-firstunseen"), " ").concat(mw.msg("parentheses", "F"))).on("click", () => {
e.goToFirstUnseenComment();
}).hide().appendTo($t), zt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-commentFormButton").attr("title", p.s("navpanel-commentform")).on("click", () => {
e.goToNextCommentForm();
}).hide().appendTo($t), p.g.worker && (p.g.worker.onmessage = hn, en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL));
}))();
},
isMounted: () => Boolean($t),
processVisits(e, t = []) {
var n = this;
return o()((function*() {
let i, o;
try {
({visits: i, thisPageVisits: o} = yield e);
} catch (e) {
return void console.warn("Couldn't load the settings from the server.", e);
}
p.g.visits = i, p.g.thisPageVisits = o;
const s = Math.floor(Date.now() / 1e3);
for (let e = o.length - 1; e >= 0; e--) if (o[e] < s - 60 * p.g.HIGHLIGHT_NEW_COMMENTS_INTERVAL) {
o.splice(0, e);
break;
}
if (o.length) {
const e = p.comments.filter(e => {
if (e.newness = null, !e.date) return !1;
const n = t.some(t => t === e.anchor), i = Math.floor(e.date.getTime() / 1e3);
return i > o[0] && (e.newness = i > o[o.length - 1] && !e.own || n ? "unseen" : "new",
!0);
});
Ni.configureAndAddLayers(e);
}
o.push(String(s)), X(i), n.fill(), n.registerSeenComments(), mw.hook("convenientDiscussions.newCommentsMarked").fire(p);
}))();
},
reset() {
Kt = null, Xt = [], Jt = [], Yt = null, tn(), en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL),
Zt = !1, qt.empty().attr("title", "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R"))),
Wt.hide(), Gt.hide(), Vt.hide(), zt.hide();
},
fill() {
Lt = p.comments.filter(e => e.newness).length, Ft = p.comments.filter(e => "unseen" === e.newness).length,
Lt && (Gt.show(), Wt.show(), Ft && (Vt.show(), this.updateFirstUnseenButton()));
},
areAllCommentsSeen: () => 0 === Ft,
decrementUnseenCommentCount() {
Ft--;
},
updateFirstUnseenButton() {
Ft ? Vt.text(Ft) : Vt.hide();
},
refreshClick() {
Dt({
commentAnchor: Yt
});
},
closeAllNotifications() {
Qt.forEach(e => {
e.notification.$notification.hide(), e.notification.close();
}), Qt = [];
},
goToPreviousNewComment() {
if (p.g.autoScrollInProgress) return;
const e = Ni.findInViewport("backward");
if (!e) return;
const t = Oe(p.comments, e.id, !0).find(e => e.newness && !1 === e.isInViewport(!0));
t && t.$elements.cdScrollTo("center", !0, () => {
t.registerSeen("backward", !0), this.updateFirstUnseenButton();
});
},
goToNextNewComment() {
if (p.g.autoScrollInProgress) return;
const e = Ni.findInViewport("forward");
if (!e) return;
const t = Oe(p.comments, e.id).find(e => e.newness && !1 === e.isInViewport(!0));
t && t.$elements.cdScrollTo("center", !0, () => {
t.registerSeen("forward", !0), this.updateFirstUnseenButton();
});
},
goToFirstUnseenComment() {
if (!p.g.autoScrollInProgress && Ft) {
const e = p.comments.slice(Kt || 0).find(e => "unseen" === e.newness);
e && (e.$elements.cdScrollTo("center", !0, () => {
e.registerSeen("forward", !0), this.updateFirstUnseenButton();
}), Kt = e.id);
}
},
goToNextCommentForm() {
const e = p.commentForms.filter(e => !e.$element.cdIsInViewport(!0)).sort((e, t) => {
const n = e.$element.get(0).getBoundingClientRect().top, i = t.$element.get(0).getBoundingClientRect().top;
return i > 0 && n < 0 || n > i ? 1 : n > 0 && i < 0 || i > n ? -1 : 0;
})[0];
e && (e.$element.cdScrollIntoView("center"), e.commentInput.focus());
},
registerSeenComments() {
!Ft || p.g.dontHandleScroll || p.g.autoScrollInProgress || (p.g.dontHandleScroll = !0,
setTimeout(() => {
p.g.dontHandleScroll = !1;
const e = Ni.findInViewport();
if (!e) return;
const t = e => {
const t = e.isInViewport(!0);
if (t) e.registerSeen(); else if (!1 === t) return !0;
};
p.comments.slice(0, e.id).reverse().some(t), p.comments.slice(e.id).some(t), this.updateFirstUnseenButton();
}, 300));
},
updateCommentFormButton() {
p.g.autoScrollInProgress || (p.commentForms.some(e => !e.$element.cdIsInViewport(!0)) ? zt.show() : zt.hide());
}
};
var gn = pn;
const fn = {};
function bn() {
Ve.redrawIfNecessary(!0), gn.isMounted() && gn.updateCommentFormButton(), p.commentForms.forEach(e => {
e.adjustLabels();
});
}
function yn(e, t) {
fn[e] = e => {
if (t()) return e.preventDefault(), e.returnValue = "", "";
}, $(window).on("beforeunload", fn[e]);
}
function wn(e) {
fn[e] && $(window).off("beforeunload", fn[e]);
}
function En(e) {
if (!p.util.isPageOverlayOn()) {
if (e.ctrlKey && !e.shiftKey && e.altKey && 81 === e.keyCode || !e.ctrlKey && !e.shiftKey && !e.altKey && 81 === e.keyCode && !De()) {
e.preventDefault();
const t = ci.getLastActiveCommentForm();
t && t.quote(!e.ctrlKey);
}
gn.isMounted() && (e.ctrlKey || e.shiftKey || e.altKey || 82 !== e.keyCode || De() || gn.refreshClick(),
e.ctrlKey || e.shiftKey || e.altKey || 87 !== e.keyCode || De() || gn.goToPreviousNewComment(),
e.ctrlKey || e.shiftKey || e.altKey || 83 !== e.keyCode || De() || gn.goToNextNewComment(),
e.ctrlKey || e.shiftKey || e.altKey || 70 !== e.keyCode || De() || gn.goToFirstUnseenComment());
}
}
function vn(e) {
if (p.util.isPageOverlayOn() || p.g.dontHandleScroll || p.g.autoScrollInProgress) return;
const t = p.g.rootElement.getBoundingClientRect().left;
e.pageX < t - p.g.COMMENT_UNDERLAY_SIDE_MARGIN ? Ve.underlays.filter(e => e.classList.contains("cd-commentUnderlay-focused")).forEach(e => {
e.cdTarget.unhighlightFocused();
}) : p.comments.filter(e => e.$underlay).forEach(t => {
const n = t.$underlay.get(0);
if (!n.classList.contains("cd-commentUnderlay")) return;
const i = Number(n.style.top.replace("px", "")), o = Number(n.style.left.replace("px", "")), s = Number(n.style.width.replace("px", "")), r = Number(n.style.height.replace("px", "")), a = t.getLayersContainerOffset();
!gn.isMouseOver && e.pageY >= i + a.top && e.pageY <= i + r + a.top && e.pageX >= o + a.left && e.pageX <= o + s + a.left ? n.classList.contains("cd-commentUnderlay-focused") || n.cdTarget.highlightFocused() : n.classList.contains("cd-commentUnderlay-focused") && n.cdTarget.unhighlightFocused();
});
}
function _n({value: e, selected: t, label: n, help: i, tabIndex: o, title: s}) {
const r = new OO.ui.CheckboxInputWidget({
value: e,
selected: t,
tabIndex: o
});
return [ new OO.ui.FieldLayout(r, {
label: n,
align: "inline",
help: i,
helpInline: !0,
title: s
}), r ];
}
function Cn({label: e, selected: t, help: n, options: i}) {
const o = i.map(e => new OO.ui.RadioOptionWidget(e)), s = new OO.ui.RadioSelectWidget({
items: o
}), r = new OO.ui.FieldLayout(s, {
label: e,
align: "top",
help: n,
helpInline: !0
});
return s.selectItemByData(t), [ r, s, ...o ];
}
function xn() {
p.g.windowManager || (p.g.windowManager = (new OO.ui.WindowManager).on("closing", function() {
var e = o()((function*(e, t) {
yield t, p.g.windowManager.clearWindows();
}));
return function(t, n) {
return e.apply(this, arguments);
};
}()), $(document.body).append(p.g.windowManager.$element));
}
function Tn(e) {
return An.apply(this, arguments);
}
function An() {
return (An = o()((function*(e, t = {}) {
const n = {
message: e,
actions: [ {
action: "accept",
label: OO.ui.deferMsg("ooui-dialog-message-accept"),
flags: "primary"
}, {
action: "reject",
label: OO.ui.deferMsg("ooui-dialog-message-reject"),
flags: "safe"
} ]
}, i = new OO.ui.MessageDialog;
p.g.windowManager.addWindows([ i ]);
const o = p.g.windowManager.openWindow(i, Object.assign({}, n, t)), s = yield o.closed;
return s && s.action;
}))).apply(this, arguments);
}
function Sn(e, t = {}) {
const n = {
actions: [ {
label: p.s("".concat(e, "-yes")),
action: "accept",
flags: [ "primary", "destructive" ]
}, {
label: p.s("".concat(e, "-no")),
action: "reject",
flags: "safe"
} ]
};
return OO.ui.confirm(p.s(e), Object.assign({}, n, t));
}
function kn(e) {
const t = e.findSelectedItem();
return t && t.getData();
}
function Nn(e) {
const t = e.actions.get({
actions: "save"
})[0];
return t && !t.isDisabled();
}
function On(e, t) {
return In.apply(this, arguments);
}
function In() {
return (In = o()((function*(e, t) {
Nn(e) && !(yield Sn("".concat(t, "-close-confirm"))) || (e.close({
action: "close"
}), wn("dialog"));
}))).apply(this, arguments);
}
function Pn(e, t, n, i) {
t instanceof l ? e.showErrors(new OO.ui.Error(p.s(n), {
recoverable: i
})) : e.showErrors(new OO.ui.Error(p.s("error-javascript"), {
recoverable: !1
})), console.warn(t), i || e.$errors.find(".oo-ui-buttonElement-button").on("click", () => {
e.close();
}), e.actions.setAbilities({
close: !0
}), p.g.windowManager.updateWindowSize(e), e.popPending();
}
function Ln() {
return Fn.apply(this, arguments);
}
function Fn() {
return (Fn = o()((function*() {
if (p.util.isPageOverlayOn()) return;
function e() {
e.parent.call(this);
}
OO.inheritClass(e, OO.ui.ProcessDialog), e.static.name = "settingsDialog", e.static.title = p.s("sd-title"),
e.static.actions = [ {
action: "close",
modes: [ "settings", "reload", "dataRemoved" ],
flags: [ "safe", "close" ],
disabled: !0
}, {
action: "save",
modes: [ "settings" ],
label: p.s("sd-save"),
flags: [ "primary", "progressive" ],
disabled: !0
}, {
action: "reset",
modes: [ "settings" ],
label: p.s("sd-reset"),
flags: [ "destructive" ],
disabled: !0
}, {
action: "reload",
modes: [ "reload" ],
label: p.s("sd-reload"),
flags: [ "primary", "progressive" ]
} ], e.static.size = "large", e.prototype.getBodyHeight = function() {
return 600;
}, e.prototype.initialize = o()((function*() {
e.parent.prototype.initialize.apply(this, arguments), this.pushPending();
const t = $("<div>").text(p.s("loading-ellipsis"));
this.loadingPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.loadingPanel.$element.append(t), this.settingsPanel = new OO.ui.PanelLayout({
padded: !1,
expanded: !0
});
const n = $("<p>").html(p.s("sd-saved"));
this.reloadPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.reloadPanel.$element.append(n);
const i = $("<p>").html(p.s("sd-dataremoved"));
this.dataRemovedPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.dataRemovedPanel.$element.append(i), this.stackLayout = new OO.ui.StackLayout({
items: [ this.loadingPanel, this.settingsPanel, this.reloadPanel, this.dataRemovedPanel ]
}), this.$body.append(this.stackLayout.$element);
})), e.prototype.getSetupProcess = function(t) {
return e.parent.prototype.getSetupProcess.call(this, t).next(() => {
this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("settings");
});
}, e.prototype.getReadyProcess = function(i) {
var s = this;
return e.parent.prototype.getReadyProcess.call(this, i).next(o()((function*() {
let e;
try {
[e] = yield Promise.all(t);
} catch (e) {
return void Pn(s, e, "error-settings-load", !1);
}
s.settings = Object.assign({}, p.settings, e), p.g.settingsForm = s, s.renderForm(s.settings),
s.stackLayout.setItem(s.settingsPanel), s.bookletLayout.setPage("general"), s.actions.setAbilities({
close: !0
}), p.g.windowManager.updateWindowSize(s), s.popPending(), yn("dialog", () => Nn(n));
})));
}, e.prototype.getActionProcess = function(t) {
var n = this;
return "save" === t ? new OO.ui.Process(o()((function*() {
n.pushPending();
const e = {};
e.allowEditOthersComments = n.allowEditOthersCommentsCheckbox.isSelected(), e.alwaysExpandSettings = n.alwaysExpandSettingsCheckbox.isSelected(),
e.autopreview = n.autopreviewCheckbox.isSelected(), e.desktopNotifications = kn(n.desktopNotificationsSelect) || "unknown",
e.defaultCommentLinkType = kn(n.defaultCommentLinkTypeSelect), e.defaultSectionLinkType = kn(n.defaultSectionLinkTypeSelect),
e.highlightOwnComments = n.highlightOwnCommentsCheckbox.isSelected(), e.insertButtons = n.processInsertButtons(),
e.notifications = kn(n.notificationsSelect), e.notificationsBlacklist = n.notificationsBlacklistMultiselect.getValue(),
e.showToolbar = n.showToolbarCheckbox.isSelected(), e.signaturePrefix = n.signaturePrefixInput.getValue(),
e.watchOnReply = n.watchOnReplyCheckbox.isSelected(), e.watchSectionOnReply = n.watchSectionOnReplyCheckbox.isSelected(),
e.insertButtonsChanged = JSON.stringify(e.insertButtons) !== JSON.stringify(p.defaultSettings.insertButtons);
try {
yield W(e);
} catch (e) {
return void Pn(n, e, "error-settings-save", !0);
}
n.stackLayout.setItem(n.reloadPanel), n.actions.setMode("reload"), n.popPending();
}))) : "reload" === t ? new OO.ui.Process(() => {
this.close({
action: t
}), location.reload();
}) : "close" === t ? new OO.ui.Process(o()((function*() {
yield On(n, "sd");
}))) : "reset" === t ? new OO.ui.Process(o()((function*() {
(yield OO.ui.confirm(p.s("sd-reset-confirm"))) && n.renderForm(p.defaultSettings);
}))) : e.parent.prototype.getActionProcess.call(this, t);
}, e.prototype.renderForm = function(e) {
[this.allowEditOthersCommentsField, this.allowEditOthersCommentsCheckbox] = _n({
value: "allowEditOthersComments",
selected: e.allowEditOthersComments,
label: p.s("sd-alloweditotherscomments")
}), [this.alwaysExpandSettingsField, this.alwaysExpandSettingsCheckbox] = _n({
value: "alwaysExpandSettings",
selected: e.alwaysExpandSettings,
label: p.s("sd-alwaysexpandsettings")
}), [this.autopreviewField, this.autopreviewCheckbox] = _n({
value: "autopreview",
selected: e.autopreview,
label: p.s("sd-autopreview")
}), [this.desktopNotificationsField, this.desktopNotificationsSelect, this.desktopNotificationsRadioAll, this.desktopNotificationsRadioNone, this.desktopNotificationsRadioToMe] = Cn({
options: [ {
label: p.s("sd-desktopnotifications-radio-all"),
data: "all"
}, {
label: p.s("sd-desktopnotifications-radio-tome"),
data: "toMe"
}, {
label: p.s("sd-desktopnotifications-radio-none"),
data: "none"
} ],
selected: e.desktopNotifications,
label: p.s("sd-desktopnotifications"),
help: p.s("sd-desktopnotifications-help", location.host)
});
let t = p.s("sd-defaultcommentlinktype-help") + " " + p.s("sd-defaultcommentlinktype-help-notdifflinks");
[this.defaultCommentLinkTypeField, this.defaultCommentLinkTypeSelect, this.defaultCommentLinkTypeRadioWikilink, this.defaultCommentLinkTypeRadioLink] = Cn({
options: [ {
label: p.s("sd-defaultcommentlinktype-radio-diff"),
data: "diff"
}, {
label: p.s("sd-defaultcommentlinktype-radio-wikilink"),
data: "wikilink"
}, {
label: p.s("sd-defaultcommentlinktype-radio-link"),
data: "link"
} ],
selected: e.defaultCommentLinkType,
label: p.s("sd-defaultcommentlinktype", p.s("cm-copylink")),
help: t
}), [this.defaultSectionLinkTypeField, this.defaultSectionLinkTypeSelect, this.defaultSectionLinkTypeRadioWikilink, this.defaultSectionLinkTypeRadioLink] = Cn({
options: [ {
label: p.s("sd-defaultsectionlinktype-radio-wikilink"),
data: "wikilink"
}, {
label: p.s("sd-defaultsectionlinktype-radio-link"),
data: "link"
} ],
selected: e.defaultSectionLinkType,
label: p.s("sd-defaultsectionlinktype"),
help: p.s("sd-defaultsectionlinktype-help")
}), [this.highlightOwnCommentsField, this.highlightOwnCommentsCheckbox] = _n({
value: "highlightOwnComments",
selected: e.highlightOwnComments,
label: p.s("sd-highlightowncomments")
});
const i = e.insertButtons.map(e => Array.isArray(e) ? e.join(";") : e);
function o(e, t) {
o.super.call(this, e, t), this.$element.append(n.highlightOwnCommentsField.$element, n.allowEditOthersCommentsField.$element, n.defaultCommentLinkTypeField.$element, n.defaultSectionLinkTypeField.$element);
}
function s(e, t) {
s.super.call(this, e, t), this.$element.append(n.autopreviewField.$element, n.watchSectionOnReplyField.$element, n.watchOnReplyField.$element, n.showToolbarField.$element, n.alwaysExpandSettingsField.$element, n.insertButtonsField.$element, n.signaturePrefixField.$element);
}
function r(e, t) {
r.super.call(this, e, t), this.$element.append(n.notificationsField.$element, n.desktopNotificationsField.$element, n.notificationsBlacklistField.$element);
}
function a(e, t) {
a.super.call(this, e, t), this.$element.append(n.removeDataField.$element);
}
this.insertButtonsMultiselect = new OO.ui.TagMultiselectWidget({
placeholder: p.s("sd-insertbuttons-multiselect-placeholder"),
allowArbitrary: !0,
inputPosition: "outline",
tagLimit: 100,
selected: i
}), this.insertButtonsField = new OO.ui.FieldLayout(this.insertButtonsMultiselect, {
label: p.s("sd-insertbuttons"),
align: "top",
help: p.util.wrapInElement(p.s("sd-insertbuttons-help") + " " + p.s("sd-localsetting")),
helpInline: !0
}), [this.notificationsField, this.notificationsSelect, this.notificationsRadioAll, this.notificationsRadioNone, this.notificationsRadioToMe] = Cn({
options: [ {
label: p.s("sd-notifications-radio-all"),
data: "all"
}, {
label: p.s("sd-notifications-radio-tome"),
data: "toMe"
}, {
label: p.s("sd-notifications-radio-none"),
data: "none"
} ],
selected: e.notifications,
label: p.s("sd-notifications"),
help: p.s("sd-notifications-help")
}), this.notificationsBlacklistMultiselect = new mw.widgets.UsersMultiselectWidget({
placeholder: p.s("sd-notificationsblacklist-multiselect-placeholder"),
tagLimit: 100,
selected: e.notificationsBlacklist
}), this.notificationsBlacklistField = new OO.ui.FieldLayout(this.notificationsBlacklistMultiselect, {
label: p.s("sd-notificationsblacklist"),
align: "top"
}), [this.showToolbarField, this.showToolbarCheckbox] = _n({
value: "showToolbar",
selected: e.showToolbar,
label: p.s("sd-showtoolbar")
}), this.signaturePrefixInput = new OO.ui.TextInputWidget({
value: e.signaturePrefix,
maxlength: 100
}), this.signaturePrefixField = new OO.ui.FieldLayout(this.signaturePrefixInput, {
label: p.s("sd-signatureprefix"),
align: "top",
help: p.util.wrapInElement(p.s("sd-signatureprefix-help")),
helpInline: !0
}), [this.watchOnReplyField, this.watchOnReplyCheckbox] = _n({
value: "watchOnReply",
selected: e.watchOnReply,
label: p.s("sd-watchonreply")
}), [this.watchSectionOnReplyField, this.watchSectionOnReplyCheckbox] = _n({
value: "watchSectionOnReply",
selected: e.watchSectionOnReply,
label: p.s("sd-watchsectiononreply")
}), this.insertButtonsMultiselect.connect(this, {
change: "updateActionsAvailability"
}), this.allowEditOthersCommentsCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.alwaysExpandSettingsCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.autopreviewCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.desktopNotificationsSelect.connect(this, {
select: "updateActionsAvailability",
choose: "changeDesktopNotifications"
}), this.defaultCommentLinkTypeSelect.connect(this, {
select: "updateActionsAvailability"
}), this.defaultSectionLinkTypeSelect.connect(this, {
select: "updateActionsAvailability"
}), this.highlightOwnCommentsCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.notificationsSelect.connect(this, {
select: "updateActionsAvailability"
}), this.notificationsBlacklistMultiselect.connect(this, {
change: "updateActionsAvailability"
}), this.showToolbarCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.signaturePrefixInput.connect(this, {
change: "updateActionsAvailability"
}), this.watchSectionOnReplyCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.watchOnReplyCheckbox.connect(this, {
change: "updateActionsAvailability"
}), this.removeDataButton = new OO.ui.ButtonInputWidget({
label: p.s("sd-removedata"),
flags: [ "destructive" ]
}), this.removeDataButton.connect(this, {
click: "removeData"
}), this.removeDataField = new OO.ui.FieldLayout(this.removeDataButton, {
label: p.util.wrapInElement(p.s("sd-removedata-description")),
align: "top",
help: p.util.wrapInElement(p.s("sd-removedata-help")),
helpInline: !0
}), OO.inheritClass(o, OO.ui.PageLayout), o.prototype.setupOutlineItem = function(e) {
o.super.prototype.setupOutlineItem.call(this, e), this.outlineItem.setLabel(p.s("sd-page-talkpage"));
}, OO.inheritClass(s, OO.ui.PageLayout), s.prototype.setupOutlineItem = function() {
this.outlineItem.setLabel(p.s("sd-page-commentform"));
}, OO.inheritClass(r, OO.ui.PageLayout), r.prototype.setupOutlineItem = function() {
this.outlineItem.setLabel(p.s("sd-page-notifications"));
}, OO.inheritClass(a, OO.ui.PageLayout), a.prototype.setupOutlineItem = function() {
this.outlineItem.setLabel(p.s("sd-page-dataremoval"));
};
const c = new o("general"), u = new s("commentForm"), l = new r("notifications"), d = new a("removeData");
this.bookletLayout = new OO.ui.BookletLayout({
outlined: !0
}), this.bookletLayout.addPages([ c, u, l, d ]), this.settingsPanel.$element.empty().append(this.bookletLayout.$element),
this.updateActionsAvailability();
}, e.prototype.processInsertButtons = function() {
return this.insertButtonsMultiselect.getValue().map(e => {
const t = [];
e = He(e, /\\[+;\\]/g, t);
let [, n, i] = e.match(/^(.*?)(?:;(.+))?$/) || [];
if (n && n.replace(/^ +$/, "")) return n = Ue(n, t), i = i && Ue(i, t), [ n, i ].filter(ke);
}).filter(ke);
}, e.prototype.updateActionsAvailability = o()((function*() {
const e = JSON.stringify(this.processInsertButtons());
this.insertButtonsMultiselect.toggleValid(e.length <= 1e4);
const t = JSON.stringify(this.notificationsBlacklistMultiselect.getValue());
this.notificationsBlacklistMultiselect.toggleValid(t.length <= 1e4);
const n = kn(this.desktopNotificationsSelect) || "unknown", i = kn(this.defaultCommentLinkTypeSelect), o = kn(this.defaultSectionLinkTypeSelect), s = kn(this.notificationsSelect);
let r = e !== JSON.stringify(this.settings.insertButtons) || this.allowEditOthersCommentsCheckbox.isSelected() !== this.settings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected() !== this.settings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected() !== this.settings.autopreview || n !== this.settings.desktopNotifications || i !== this.settings.defaultCommentLinkType || o !== this.settings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected() !== this.settings.highlightOwnComments || s !== this.settings.notifications || t !== JSON.stringify(this.settings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected() !== this.settings.showToolbar || this.signaturePrefixInput.getValue() !== this.settings.signaturePrefix || this.watchOnReplyCheckbox.isSelected() !== this.settings.watchOnReply || this.watchSectionOnReplyCheckbox.isSelected() !== this.settings.watchSectionOnReply;
r = r && this.insertButtonsMultiselect.isValid();
try {
yield this.signaturePrefixInput.getValidity();
} catch (e) {
r = !1;
}
const a = this.allowEditOthersCommentsCheckbox.isSelected() !== p.defaultSettings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected() !== p.defaultSettings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected() !== p.defaultSettings.autopreview || n !== p.defaultSettings.desktopNotifications || i !== p.defaultSettings.defaultCommentLinkType || o !== p.defaultSettings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected() !== p.defaultSettings.highlightOwnComments || e !== JSON.stringify(p.defaultSettings.insertButtons) || s !== p.defaultSettings.notifications || t !== JSON.stringify(p.defaultSettings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected() !== p.defaultSettings.showToolbar || this.signaturePrefixInput.getValue() !== p.defaultSettings.signaturePrefix || this.watchOnReplyCheckbox.isSelected() !== p.defaultSettings.watchOnReply || this.watchSectionOnReplyCheckbox.isSelected() !== p.defaultSettings.watchSectionOnReply;
this.actions.setAbilities({
save: r,
reset: a
});
})), e.prototype.changeDesktopNotifications = function(e) {
"none" !== e.data && "granted" !== Notification.permission && (OO.ui.alert(p.s("dn-grantpermission")),
Notification.requestPermission(e => {
"granted" !== e && this.desktopNotificationsSelect.selectItemByData("none");
}));
}, e.prototype.removeData = o()((function*() {
if (yield Sn("sd-removedata-confirm", {
size: "medium"
})) {
this.pushPending();
try {
yield Promise.all([ ge(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME, null), ge(p.g.VISITS_OPTION_FULL_NAME, null), ge(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME, null), be(p.g.SETTINGS_OPTION_FULL_NAME, null) ]);
} catch (e) {
return void Pn(this, e, "sd-error-removedata", !1);
}
localStorage.removeItem("convenientDiscussions-commentForms"), this.stackLayout.setItem(this.dataRemovedPanel),
this.actions.setMode("dataRemoved"), this.popPending();
}
}));
const t = [ Y(), mw.loader.using("mediawiki.widgets.UsersMultiselectWidget") ];
xn();
const n = new e;
p.g.windowManager.addWindows([ n ]), p.g.windowManager.openWindow(n);
}))).apply(this, arguments);
}
function Mn() {
return Rn.apply(this, arguments);
}
function Rn() {
return (Rn = o()((function*() {
if (p.util.isPageOverlayOn()) return;
function e() {
e.parent.call(this);
}
OO.inheritClass(e, OO.ui.ProcessDialog), e.static.name = "editWatchedSectionsDialog",
e.static.title = p.s("ewsd-title"), e.static.actions = [ {
action: "close",
modes: [ "edit", "saved" ],
flags: [ "safe", "close" ],
disabled: !0
}, {
action: "save",
modes: [ "edit" ],
label: p.s("ewsd-save"),
flags: [ "primary", "progressive" ],
disabled: !0
} ], e.static.size = "large", e.prototype.getBodyHeight = function() {
return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight;
}, e.prototype.initialize = o()((function*() {
e.parent.prototype.initialize.apply(this, arguments), this.pushPending();
const t = $("<div>").text(p.s("loading-ellipsis"));
this.loadingPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.loadingPanel.$element.append(t), this.sectionsPanel = new OO.ui.PanelLayout({
padded: !1,
expanded: !1
});
const n = $("<p>").html(p.s("ewsd-saved"));
this.savedPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.savedPanel.$element.append(n), this.stackLayout = new OO.ui.StackLayout({
items: [ this.loadingPanel, this.sectionsPanel, this.savedPanel ]
}), this.$body.append(this.stackLayout.$element);
})), e.prototype.getSetupProcess = function(t) {
return e.parent.prototype.getSetupProcess.call(this, t).next(() => {
this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("edit");
});
}, e.prototype.getReadyProcess = function(i) {
var s = this;
return e.parent.prototype.getReadyProcess.call(this, i).next(o()((function*() {
let e, i;
try {
({watchedSections: e} = yield t), i = yield ue(Object.keys(e).filter(t => e[t].length));
} catch (e) {
return void Pn(s, e, "ewsd-error-processing", !1);
}
i.sort((e, t) => e.title > t.title ? 1 : -1);
const o = i.filter(e => e.title).map(t => e[t.pageid].map(e => "".concat(t.title, "#").concat(e)).join("\n")).join("\n");
s.input = new OO.ui.MultilineTextInputWidget({
value: o,
rows: 30,
classes: [ "cd-editWatchedSections-input" ]
}), s.input.on("change", e => {
s.actions.setAbilities({
save: e !== o
});
}), s.sectionsPanel.$element.append(s.input.$element), s.stackLayout.setItem(s.sectionsPanel),
s.input.focus(), s.actions.setAbilities({
close: !0
}), n.$body.css("overflow", "hidden"), setTimeout(() => {
n.$body.css("overflow", "");
}, 500), p.g.windowManager.updateWindowSize(s), s.popPending(), yn("dialog", () => Nn(n));
})));
}, e.prototype.getActionProcess = function(t) {
var n = this;
return "save" === t ? new OO.ui.Process(o()((function*() {
n.pushPending();
const e = {}, t = [];
let i, o, s;
n.input.getValue().split("\n").forEach(n => {
const i = n.match(/^(.+?)#(.+)$/);
if (i) {
const n = i[1].trim(), o = i[2].trim();
e[n] || (e[n] = [], t.push(n)), e[n].push(o);
}
});
try {
({normalized: i, redirects: o, pages: s} = (yield de(t)) || {});
} catch (e) {
return void Pn(n, e, "ewsd-error-processing", !0);
}
i.concat(o).filter(t => e[t.from]).forEach(t => {
e[t.to] || (e[t.to] = []), e[t.to].push(...e[t.from]), delete e[t.from];
});
const r = {};
s.filter(e => void 0 !== e.pageid).forEach(e => {
r[e.title] = e.pageid;
});
const a = {};
Object.keys(e).filter(e => r[e]).forEach(t => {
a[r[t]] = _e(e[t]);
});
try {
yield ee(a);
} catch (e) {
if (e instanceof l) {
const {type: t, code: i, apiData: o} = e.data;
"internal" === t && "sizeLimit" === i ? n.showErrors(new OO.ui.Error(p.s("ewsd-error-maxsize"), {
recoverable: !1
})) : n.showErrors(new OO.ui.Error(p.s("ewsd-error-processing"), {
recoverable: !0
})), console.warn(t, i, o);
} else n.showErrors(new OO.ui.Error(p.s("error-javascript"), {
recoverable: !1
})), console.warn(e);
return void n.popPending();
}
n.stackLayout.setItem(n.savedPanel), n.actions.setMode("saved"), n.popPending();
}))) : "close" === t ? new OO.ui.Process(o()((function*() {
yield On(n, "ewsd");
}))) : e.parent.prototype.getActionProcess.call(this, t);
};
const t = Q();
xn();
const n = new e;
p.g.windowManager.addWindows([ n ]), p.g.windowManager.openWindow(n);
}))).apply(this, arguments);
}
function Bn(e) {
const t = $("<textarea>").val(e).appendTo(document.body).select(), n = document.execCommand("copy");
t.remove(), n ? e.startsWith("http") ? mw.notify(p.util.wrapInElement(p.s("copylink-copied-url", e))) : mw.notify(p.s("copylink-copied")) : mw.notify(p.s("copylink-error"), {
type: "error"
});
}
function Dn(e, t, n) {
return jn.apply(this, arguments);
}
function jn() {
return (jn = o()((function*(e, t, n) {
if (e.linkBeingCopied) return void (n && n());
e.linkBeingCopied = !0;
let i = e instanceof Ni ? e.anchor : Pe(e.anchor);
i = F(i);
const o = "[[".concat(p.g.CURRENT_PAGE.name, "#").concat(i, "]]");
let s;
try {
s = decodeURI(p.g.CURRENT_PAGE.getUrl());
} catch (t) {
return console.error(t), e.linkBeingCopied = !1, void (n && n());
}
const r = Le(i), a = "https:".concat(mw.config.get("wgServer")).concat(s, "#").concat(r);
if (t) {
let t, n;
if (e instanceof Ni) {
let i, o;
try {
o = i = yield e.getDiffLink(e);
} catch (e) {
if (e instanceof l) {
const {type: t} = e.data;
"api" === t ? o = p.s("cld-diff-error") : "network" === t && (o = p.s("cld-diff-error-network"));
} else o = p.s("cld-diff-error-unknown");
}
t = new OO.ui.TextInputWidget({
value: o || p.s("cld-diff-error"),
disabled: !i
});
const s = new OO.ui.ButtonWidget({
label: p.s("cld-copy"),
icon: "articles",
disabled: !i
});
s.on("click", () => {
Bn(t.getValue()), w.close();
}), n = new OO.ui.ActionFieldLayout(t, s, {
align: "top",
label: p.s("cld-diff")
});
}
const s = e instanceof Ni ? p.s("cld-help-onlycd") : void 0, r = new OO.ui.TextInputWidget({
value: o
}), c = new OO.ui.ButtonWidget({
label: p.s("cld-copy"),
icon: "articles"
});
c.on("click", () => {
Bn(r.getValue()), w.close();
});
const u = new OO.ui.ActionFieldLayout(r, c, {
align: "top",
label: p.s("cld-wikilink"),
help: s,
helpInline: !0
}), d = new OO.ui.TextInputWidget({
value: "[[#".concat(i, "]]")
}), h = new OO.ui.ButtonWidget({
label: p.s("cld-copy"),
icon: "articles"
});
h.on("click", () => {
Bn(d.getValue()), w.close();
});
const m = new OO.ui.ActionFieldLayout(d, h, {
align: "top",
label: p.s("cld-currentpagewikilink")
}), g = new OO.ui.TextInputWidget({
value: a
}), f = new OO.ui.ButtonWidget({
label: p.s("cld-copy"),
icon: "articles"
});
f.on("click", () => {
Bn(g.getValue()), w.close();
});
const b = new OO.ui.ActionFieldLayout(g, f, {
align: "top",
label: p.s("cld-link"),
help: s,
helpInline: !0
}), y = $("<div>").append(n && n.$element).append(u.$element).append(m.$element).append(b.$element), w = new OO.ui.MessageDialog;
p.g.windowManager.addWindows([ w ]), p.g.windowManager.openWindow(w, {
message: y,
actions: [ {
label: p.s("cld-close"),
action: "close"
} ],
size: "large"
}).closed.then(() => {
e.linkBeingCopied = !1;
});
} else {
let t;
switch (p.settings[e instanceof Ni ? "defaultCommentLinkType" : "defaultSectionLinkType"]) {
case "diff":
if (!(e instanceof Ni)) {
t = o;
break;
}
try {
t = yield e.getDiffLink(e);
} catch (t) {
let i = p.s("error-diffnotfound");
if (t instanceof l) {
const {type: e} = t.data;
if ("network" === e) i += " " + p.s("error-network"); else {
const e = this.sourcePage.getUrl({
action: "history"
});
i += " " + p.s("error-diffnotfound-history", e);
}
} else i += " " + p.s("error-unknown");
return mw.notify(p.util.wrapInElement(i), {
type: "error"
}), e.linkBeingCopied = !1, void (n && n());
}
break;
case "link":
t = a;
break;
default:
t = o;
}
Bn(t), e.linkBeingCopied = !1;
}
n && n();
}))).apply(this, arguments);
}
function Hn(e) {
const t = e.map(e => {
let t = void 0 !== e.headline ? "".concat(p.s("rd-headline"), ": ").concat(e.headline, "\n\n") : "";
return t += "".concat(p.s("rd-comment"), ": ").concat(e.comment, "\n\n").concat(p.s("rd-summary"), ": ").concat(e.summary),
t;
}).join("\n\n----\n"), n = new OO.ui.MultilineTextInputWidget({
value: t,
rows: 20
}), i = new OO.ui.FieldLayout(n, {
align: "top",
label: p.s("rd-intro")
}), o = new OO.ui.MessageDialog;
p.g.windowManager.addWindows([ o ]), p.g.windowManager.openWindow(o, {
message: i.$element,
actions: [ {
label: p.s("rd-close"),
action: "close"
} ],
size: "large"
});
}
function Un(e, t) {
return Yn.apply(this, arguments);
}
function Yn() {
return (Yn = o()((function*(e, t) {
const n = $("<span>").addClass("cd-destructiveText").html(t ? p.s("deadanchor-comment-title") : p.s("deadanchor-section-title"));
let i = t ? p.s("deadanchor-comment-text") : p.s("deadanchor-section-text");
if (!p.g.PAGES_WITHOUT_ARCHIVES_REGEXP || !p.g.PAGES_WITHOUT_ARCHIVES_REGEXP.test(p.g.CURRENT_PAGE.name)) {
if (i += " " + p.s("deadanchor-searchinarchive"), yield OO.ui.confirm(i, {
title: n
})) {
let n;
n = t ? p.util.formatDate(t) : e.replace(/_/g, " ").replace(/"/g, "").trim();
const i = Pe(mw.config.get("wgPageName")), o = p.config.getArchivePrefix ? p.config.getArchivePrefix(i) : i, s = '"'.concat(n, '" prefix:').concat(o), r = mw.util.getUrl("Special:Search", {
profile: "default",
fulltext: "Search",
search: s
});
location.assign(mw.config.get("wgServer") + r);
}
} else OO.ui.alert(i, {
title: n
});
}))).apply(this, arguments);
}
var $n = new WeakMap, qn = new WeakMap, Wn = new WeakMap, Gn = new WeakMap, Vn = new WeakMap, zn = new WeakMap;
class Kn extends class {
constructor(e, t) {
if (Ge.set(this, {
writable: !0,
value: void 0
}), u()(this, Ge, e), this.headlineElement = a()(this, Ge).context.getElementByClassName(t, "mw-headline"),
!this.headlineElement) throw new l;
this.anchor = this.headlineElement.getAttribute("id");
const n = [ "mw-headline-number", ...p.config.foreignElementsInHeadlinesClasses ], i = Array.from(this.headlineElement.childNodes).filter(e => e.nodeType !== Node.ELEMENT_NODE || !Array.from(e.classList).some(e => n.includes(e)));
this.headline = i.map(e => e.textContent).join("").trim();
const o = t.tagName.match(/^H([2-6])$/);
this.level = o && Number(o[1]);
const s = new $e(p.g.rootElement, e => ![ "STYLE", "LINK" ].includes(e.tagName) && !e.classList.contains("cd-sectionButtonContainer"), !0, t);
for (this.headingNestingLevel = 0; s.parentNode(); ) this.headingNestingLevel++;
s.currentNode = t;
const r = [ t ], c = new RegExp("^H[1-".concat(this.level, "]$"));
let d, h, m = !1;
for (;s.nextSibling() && !c.test(s.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(s.currentNode.tagName) && (m = !0,
this.lastElementInFirstChunk = r[r.length - 1]), r.push(s.currentNode);
if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || r[r.length - 1],
!r.length) throw new l;
if (r[1]) {
for (s.currentNode = r[r.length - 1]; s.lastChild(); ) ;
const e = s.currentNode;
s.currentNode = r[1];
do {
s.currentNode.classList.contains("cd-commentPart") && (d = s.currentNode);
} while (!d && s.currentNode !== e && s.nextNode());
s.currentNode = e;
do {
s.currentNode.classList.contains("cd-commentPart") && (h = s.currentNode);
} while (!h && s.currentNode !== r[1] && s.previousNode());
}
if (d) {
const e = Number(d.getAttribute("data-comment-id")), t = Number(h.getAttribute("data-comment-id"));
if (this.comments = p.comments.slice(e, t + 1), m) {
const e = this.comments.findIndex(e => !(a()(this, Ge).context.follows(this.lastElementInFirstChunk, e.elements[0]) || this.lastElementInFirstChunk.contains(e.elements[0])));
this.commentsInFirstChunk = this.comments.slice(0, e || 0);
}
}
this.id = p.sections.length, this.comments = this.comments || [], this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments,
this.elements = r;
}
} {
constructor(e, t, n) {
if (super(e, t), $n.set(this, {
writable: !0,
value: void 0
}), qn.set(this, {
writable: !0,
value: void 0
}), Wn.set(this, {
writable: !0,
value: void 0
}), Gn.set(this, {
writable: !0,
value: void 0
}), Vn.set(this, {
writable: !0,
value: void 0
}), zn.set(this, {
writable: !0,
value: void 0
}), u()(this, $n, p.g.SECTION_ELEMENT_PROTOTYPES), this.$headline = $(this.headlineElement),
this.sourcePage = p.g.CURRENT_PAGE, u()(this, Wn, t.querySelector(".mw-editsection")),
a()(this, Wn)) {
u()(this, qn, a()(this, Wn).lastElementChild), a()(this, qn) && a()(this, qn).classList && a()(this, qn).classList.contains("mw-editsection-bracket") || u()(this, qn, null);
const e = a()(this, Wn).querySelector('a[href*="&action=edit"], a[href*="&veaction=editsource"]');
if (e) {
if (this.editUrl = new URL(e.href), this.editUrl) {
this.editUrl.searchParams.get("section").startsWith("T-") && (this.sourcePage = new ve(this.editUrl.searchParams.get("title")));
}
} else console.error("Edit link not found.", this);
this.$heading = $(t), this.actionable = p.g.isPageActive && !p.g.specialElements.closedDiscussions.some(e => e.contains(t)),
this.actionable && this.extendSectionMenu(n);
}
}
addReplyButton() {
const e = a()(this, $n).replyButton.cloneNode(!0);
e.firstChild.onclick = () => {
this.addReply();
};
const t = "OL" === this.lastElementInFirstChunk.tagName && 1 === this.lastElementInFirstChunk.childElementCount && this.lastElementInFirstChunk.children[0].classList.contains("mw-empty-elt");
let n, i = !1;
if (this.lastElementInFirstChunk.classList.contains("cd-commentLevel")) {
const e = this.lastElementInFirstChunk.tagName;
"UL" === e || "OL" === e && (1 === this.lastElementInFirstChunk.querySelectorAll("ol > li").length || this.lastElementInFirstChunk.querySelectorAll("ol > li > .cd-signature").length > 1) ? n = "li" : "DL" === e ? n = "dd" : (n = "li",
i = !0);
} else n = "li", t || (i = !0);
const o = document.createElement(n);
if (o.className = "cd-replyWrapper", o.appendChild(e), i) {
const e = document.createElement("ul");
e.className = "cd-commentLevel cd-sectionButtonContainer", e.appendChild(o), this.lastElementInFirstChunk.parentElement.insertBefore(e, this.lastElementInFirstChunk.nextElementSibling);
} else this.lastElementInFirstChunk.appendChild(o);
this.$replyButton = $(e), this.$replyButtonLink = $(e.firstChild), this.$replyWrapper = $(o),
this.$replyContainer = void 0;
}
addAddSubsectionButton() {
if (2 !== this.level) return;
const e = a()(this, $n).addSubsectionButton.cloneNode(!0), t = e.querySelector(".oo-ui-labelElement-label");
if (!t) return;
t.innerHTML = "", t.appendChild(document.createTextNode(p.s("section-addsubsection-to", this.headline))),
e.firstChild.onclick = () => {
this.addSubsection();
};
const n = document.createElement("div");
n.className = "cd-sectionButtonContainer cd-addSubsectionButtonContainer", n.style.display = "none",
n.appendChild(e);
const i = this.elements[this.elements.length - 1];
i.parentElement.insertBefore(n, i.nextElementSibling);
const o = () => {
a()(this, zn) || u()(this, zn, setTimeout(() => {
this.$addSubsectionButtonContainer.hide();
}, 1e3));
};
e.firstChild.onmouseenter = () => {
clearTimeout(a()(this, zn)), u()(this, zn, null);
}, e.firstChild.onmouseleave = () => {
o();
}, this.replyButtonHoverHandler = () => {
this.addSubsectionForm || (clearTimeout(a()(this, zn)), u()(this, zn, null), a()(this, Vn) || u()(this, Vn, setTimeout(() => {
this.$addSubsectionButtonContainer.show();
}, 1e3)));
}, this.replyButtonUnhoverHandler = () => {
this.addSubsectionForm || (clearTimeout(a()(this, Vn)), u()(this, Vn, null), o());
}, this.$addSubsectionButton = $(e), this.$addSubsectionButtonContainer = $(n);
}
extendSectionMenu(e) {
this.comments.length && this.comments[0].isOpeningSection && this.comments[0].openingSectionOfLevel === this.level && (this.comments[0].own || p.settings.allowEditOthersComments) && this.comments[0].actionable && this.addMenuItem({
label: p.s("sm-editopeningcomment"),
tooltip: p.s("sm-editopeningcomment-tooltip"),
func: () => {
this.comments[0].edit();
},
class: "cd-sectionLink-editOpeningComment"
}), this.addMenuItem({
label: p.s("sm-addsubsection"),
tooltip: p.s("sm-addsubsection-tooltip"),
func: () => {
this.addSubsection();
},
class: "cd-sectionLink-addSubsection"
}), 2 === this.level && this.addMenuItem({
label: p.s("sm-move"),
tooltip: p.s("sm-move-tooltip"),
func: () => {
this.move();
},
class: "cd-sectionLink-moveSection"
}), e && e.then(({thisPageWatchedSections: e}) => {
this.headline && (this.watched = e.includes(this.headline), this.addMenuItem({
label: p.s("sm-unwatch"),
tooltip: p.s("sm-unwatch-tooltip"),
func: () => {
this.unwatch();
},
class: "cd-sectionLink-unwatch",
visible: this.watched
}), this.addMenuItem({
label: p.s("sm-watch"),
tooltip: p.s("sm-watch-tooltip"),
func: () => {
this.watch();
},
class: "cd-sectionLink-watch",
visible: !this.watched
}));
}, () => {}).finally(() => {
const e = "sm-copylink-tooltip-".concat(p.settings.defaultSectionLinkType.toLowerCase());
this.addMenuItem({
label: p.s("sm-copylink"),
func: this.copyLink.bind(this),
class: "cd-sectionLink-copyLink",
tooltip: p.s(e) + " " + p.s("cld-invitation"),
href: "".concat(p.g.CURRENT_PAGE.getUrl(), "#").concat(this.anchor)
});
});
}
addReply(e) {
this.addReplyForm || (this.addReplyForm = e instanceof ci ? e : new ci({
mode: "replyInSection",
target: this,
dataToRestore: e
})), this.$replyButton.hide();
const t = 2 === this.level ? this : this.baseSection;
t && t.$addSubsectionButtonContainer && (t.$addSubsectionButtonContainer.hide(),
clearTimeout(a()(t, Vn)), u()(t, Vn, null));
}
addSubsection(e) {
this.addSubsectionForm ? (this.addSubsectionForm.$element.cdScrollIntoView("center"),
this.addSubsectionForm.headlineInput.focus()) : this.addSubsectionForm = e instanceof ci ? e : new ci({
mode: "addSubsection",
target: this,
dataToRestore: e,
scrollIntoView: !0
}), this.$addSubsectionButtonContainer && this.$addSubsectionButtonContainer.hide();
}
move() {
var e = this;
return o()((function*() {
function t() {
t.parent.call(this);
}
OO.inheritClass(t, OO.ui.ProcessDialog), t.static.name = "moveSectionDialog", t.static.title = p.s("msd-title"),
t.static.actions = [ {
action: "close",
modes: [ "move", "reload" ],
flags: [ "safe", "close" ],
disabled: !0
}, {
action: "move",
modes: [ "move" ],
label: p.s("msd-move"),
flags: [ "primary", "progressive" ],
disabled: !0
}, {
action: "reload",
modes: [ "reload" ],
label: p.s("msd-reload"),
flags: [ "primary", "progressive" ]
} ], t.prototype.onTitleInputChange = o()((function*() {
let e = !0;
try {
yield this.titleInput.getValidity();
} catch (t) {
e = !1;
}
this.actions.setAbilities({
move: e
});
})), t.prototype.loadSourcePage = o()((function*() {
try {
yield n.sourcePage.getCode();
} catch (e) {
if (!(e instanceof l)) throw [ p.s("error-javascript"), !1 ];
{
const {type: t, code: n} = e.data;
if ("api" === t) throw "missing" === n ? [ p.s("msd-error-sourcepagedeleted"), !0 ] : [ p.s("error-api", n), !0 ];
if ("network" === t) throw [ p.s("error-network"), !0 ];
}
}
try {
n.locateInCode(n.sourcePage.code);
} catch (e) {
if (e instanceof l) {
const {code: t} = e.data;
let n;
throw n = "locateSection" === t ? p.s("error-locatesection") : p.s("error-unknown"),
[ n, !0 ];
}
throw [ p.s("error-javascript"), !1 ];
}
return Object.assign({}, n.sourcePage, {
sectionInCode: n.inCode,
sectionWikilink: "".concat(n.sourcePage, "#").concat(n.headline)
});
})), t.prototype.loadTargetPage = function() {
var e = o()((function*(e) {
try {
yield e.getCode();
} catch (e) {
if (!(e instanceof l)) throw [ p.s("error-javascript"), !1 ];
{
const {type: t, code: n} = e.data;
if ("api" === t) throw "missing" === n ? [ p.s("msd-error-targetpagedoesntexist"), !0 ] : "invalid" === n ? [ p.s("msd-error-invalidpagename"), !1 ] : [ p.s("error-api", n), !0 ];
if ("network" === t) throw [ p.s("error-network"), !0 ];
}
}
e.analyzeNewTopicPlacement();
const t = "".concat(e.realName, "#").concat(n.headline), i = mw.util.getUrl(t);
return Object.assign({}, e, {
sectionWikilink: t,
sectionUrl: i
});
}));
return function(t) {
return e.apply(this, arguments);
};
}(), t.prototype.editTargetPage = function() {
var e = o()((function*(e, t) {
const i = p.config.getMoveTargetPageCode ? p.config.getMoveTargetPageCode(e.sectionWikilink, p.g.CURRENT_USER_SIGNATURE) : void 0, o = Array.isArray(i) ? i[0] + "\n" : i, s = Array.isArray(i) ? "\n" + i[1] : "", r = D(e.sectionInCode.code.slice(0, e.sectionInCode.relativeContentStartIndex) + o + e.sectionInCode.code.slice(e.sectionInCode.relativeContentStartIndex) + s);
let a;
t.areNewTopicsOnTop ? (void 0 === t.firstSectionStartIndex && (t.firstSectionStartIndex = t.code.length),
a = D(t.code.slice(0, t.firstSectionStartIndex)) + r + t.code.slice(t.firstSectionStartIndex)) : a = t.code + "\n\n" + r;
const c = this.summaryEndingInput.getValue(), u = p.s("es-move-from", e.sectionWikilink) + (c ? ": " + c : "");
try {
yield t.edit({
text: a,
summary: p.util.buildEditSummary({
text: u,
section: n.headline
}),
tags: p.config.tagName,
baserevid: t.revisionId,
starttimestamp: t.queryTimestamp
});
} catch (e) {
if (e instanceof l) {
const {type: t, details: n} = e.data;
if ("network" === t) throw [ p.s("msd-error-editingtargetpage") + " " + p.s("error-network"), !0 ];
{
let {code: e, message: t, logMessage: i} = n;
throw "editconflict" === e && (t += " " + p.s("msd-error-editconflict-retry")),
console.warn(i), [ p.s("msd-error-editingtargetpage") + " " + t, !0 ];
}
}
throw console.warn(e), [ p.s("msd-error-editingtargetpage") + " " + p.s("error-javascript"), !0 ];
}
}));
return function(t, n) {
return e.apply(this, arguments);
};
}(), t.prototype.editSourcePage = function() {
var e = o()((function*(e, t) {
const i = I(e.sectionInCode.code) || p.g.SIGN_CODE + "~", o = p.config.getMoveSourcePageCode ? p.config.getMoveSourcePageCode(t.sectionWikilink, p.g.CURRENT_USER_SIGNATURE, i) : void 0, s = o ? e.sectionInCode.code.slice(0, e.sectionInCode.relativeContentStartIndex) + o + "\n\n" : "", r = e.code.slice(0, e.sectionInCode.startIndex) + s + e.code.slice(e.sectionInCode.endIndex), a = this.summaryEndingInput.getValue(), c = p.s("es-move-to", t.sectionWikilink) + (a ? ": " + a : "");
try {
yield e.edit({
text: r,
summary: p.util.buildEditSummary({
text: c,
section: n.headline
}),
tags: p.config.tagName,
baserevid: e.revisionId,
starttimestamp: e.queryTimestamp
});
} catch (e) {
if (e instanceof l) {
const {type: t, details: n} = e.data;
if ("network" === t) throw [ p.s("msd-error-editingsourcepage") + " " + p.s("error-network"), !1 ];
{
let {message: e, logMessage: t} = n;
throw console.warn(t), [ p.s("msd-error-editingsourcepage") + " " + e, !1 ];
}
}
throw console.warn(e), [ p.s("msd-error-editingsourcepage") + " " + p.s("error-javascript"), !1 ];
}
}));
return function(t, n) {
return e.apply(this, arguments);
};
}(), t.prototype.abort = function(e, t) {
const n = Me(e, [ "cd-message-reloadPage", () => {
this.close(), Dt();
} ]);
this.showErrors(new OO.ui.Error(n, {
recoverable: t
})), this.$errors.find(".oo-ui-buttonElement-button").on("click", () => {
t ? p.g.windowManager.updateWindowSize(this) : this.close();
}), this.actions.setAbilities({
close: !0,
move: t
}), p.g.windowManager.updateWindowSize(this), this.popPending();
}, t.prototype.getBodyHeight = function() {
return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight;
}, t.prototype.initialize = function() {
t.parent.prototype.initialize.apply(this, arguments), this.pushPending();
const e = $("<div>").text(p.s("loading-ellipsis"));
this.loadingPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.loadingPanel.$element.append(e), this.movePanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.reloadPanel = new OO.ui.PanelLayout({
padded: !0,
expanded: !1
}), this.stackLayout = new OO.ui.StackLayout({
items: [ this.loadingPanel, this.movePanel, this.reloadPanel ]
}), this.$body.append(this.stackLayout.$element);
}, t.prototype.getSetupProcess = function(e) {
return t.parent.prototype.getSetupProcess.call(this, e).next(() => {
this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("move");
});
}, t.prototype.getReadyProcess = function(e) {
var r = this;
return t.parent.prototype.getReadyProcess.call(this, e).next(o()((function*() {
let e;
try {
[e] = yield Promise.all(i);
} catch (e) {
return void r.abort(p.s("cf-error-getpagecode"), !1);
}
try {
n.locateInCode(e.code);
} catch (e) {
if (e instanceof l) {
const {data: t} = e.data, n = "locateSection" === t ? p.s("error-locatesection") : p.s("error-unknown");
r.abort(n, !1);
} else r.abort(p.s("error-javascript"), !1);
return;
}
const t = n.inCode.code;
r.titleInput = new mw.widgets.TitleInputWidget({
$overlay: r.$overlay,
excludeCurrentPage: !0,
showMissing: !1,
validate: () => {
let e = r.titleInput.getMWTitle();
return e && e.toText() !== n.sourcePage && Te(e.toText());
}
}), r.titleField = new OO.ui.FieldLayout(r.titleInput, {
label: p.s("msd-targetpage"),
align: "top"
}), r.titleInput.connect(r, {
change: "onTitleInputChange"
}), r.titleInput.connect(r, {
enter: () => {
r.actions.get({
actions: "move"
})[0].isDisabled() || r.executeAction("move");
}
});
let o = $("<div>");
$("<pre>").text(t.slice(0, 300) + (t.length >= 300 ? "..." : "")).appendTo(o), $("<p>").css("font-size", "85%").text(p.s("msd-bottom")).appendTo(o),
r.summaryEndingInput = new OO.ui.TextInputWidget({
maxLength: 250
}), r.summaryEndingAutocomplete = new Ye({
types: [ "mentions", "wikilinks" ],
inputs: [ r.summaryEndingInput ]
}), r.summaryEndingField = new OO.ui.FieldLayout(r.summaryEndingInput, {
label: p.s("msd-summaryending"),
align: "top"
}), r.movePanel.$element.append(r.titleField.$element, o, r.summaryEndingField.$element),
r.stackLayout.setItem(r.movePanel), r.titleInput.focus(), r.actions.setAbilities({
close: !0
}), s.$body.css("overflow", "hidden"), setTimeout(() => {
s.$body.css("overflow", "");
}, 500), p.g.windowManager.updateWindowSize(r), r.popPending();
})));
}, t.prototype.getActionProcess = function(e) {
var i = this;
return "move" === e ? new OO.ui.Process(o()((function*() {
i.pushPending(), i.titleInput.$input.blur();
let e, t, o = new ve(i.titleInput.getMWTitle());
if (o.name !== n.sourcePage.name && Te(o)) {
try {
[e, t] = yield Promise.all([ i.loadSourcePage(), i.loadTargetPage(o) ]), yield i.editTargetPage(e, t),
yield i.editSourcePage(e, t);
} catch (e) {
return void i.abort(...e);
}
i.reloadPanel.$element.html(p.util.wrapInElement(p.s("msd-moved", t.sectionUrl), "div")),
i.stackLayout.setItem(i.reloadPanel), i.actions.setMode("reload"), i.popPending();
} else i.abort(p.s("msd-error-wrongpage"), !1);
}))) : "reload" === e ? new OO.ui.Process(() => {
this.close({
action: e
}), Dt({
sectionAnchor: n.anchor
});
}) : "close" === e ? new OO.ui.Process(() => {
this.close();
}) : t.parent.prototype.getActionProcess.call(this, e);
};
const n = e, i = [ e.sourcePage.getCode(), mw.loader.using("mediawiki.widgets") ], s = new t;
p.g.windowManager.addWindows([ s ]), p.g.windowManager.openWindow(s);
}))();
}
updateWatchMenuItems() {
this.watched ? (this.$heading.find(".cd-sectionLink-unwatch").parent().show(), this.$heading.find(".cd-sectionLink-watch").parent().hide()) : (this.$heading.find(".cd-sectionLink-watch").parent().show(),
this.$heading.find(".cd-sectionLink-unwatch").parent().hide());
}
watch(e = !1) {
let t;
if (!e) {
if (t = this.$heading.find(".cd-sectionLink-watch"), t.hasClass("cd-sectionLink-pending")) return;
t.addClass("cd-sectionLink-pending");
}
Kn.watchSection(this.headline, {
silent: e,
successCallback: () => {
this.watched = !0, t && t.removeClass("cd-sectionLink-pending"), Kn.getSectionsByHeadline(this.headline).forEach(e => {
e.updateWatchMenuItems();
});
},
errorCallback: () => {
t && t.removeClass("cd-sectionLink-pending");
}
});
}
unwatch(e = !1) {
let t;
if (!e) {
if (t = this.$heading.find(".cd-sectionLink-unwatch"), t.hasClass("cd-sectionLink-pending")) return;
t.addClass("cd-sectionLink-pending");
}
const n = this.getWatchedAncestor();
Kn.unwatchSection(this.headline, {
silent: e,
successCallback: () => {
this.watched = !1, t && t.removeClass("cd-sectionLink-pending"), Kn.getSectionsByHeadline(this.headline).forEach(e => {
e.updateWatchMenuItems();
});
},
errorCallback: () => {
t && t.removeClass("cd-sectionLink-pending");
},
watchedAncestorHeadline: n && n.headline
});
}
copyLink(e) {
e.preventDefault(), Dn(this, e.shiftKey);
}
locateInCode(e) {
this.inCode = null;
const t = {
firstComment: this.comments[0],
headline: L(this.headline),
pageCode: e,
adjustedPageCode: O(e)
};
p.debug.startTimer("locate section");
const n = this.searchInCode(t);
let i;
if (p.debug.stopTimer("locate section"), n.forEach(e => {
(!i || e.score > i.score) && (i = e);
}), !i) throw new l({
type: "parse",
code: "locateSection"
});
this.inCode = i;
}
modifyCode(e, {action: t, commentForm: n}) {
if ("replyInSection" === t) {
const [, t] = this.inCode.firstChunkCode.match(/\n([#*]) *\n+$/) || [];
if (t) this.inCode.lastCommentIndentationChars = t; else {
const t = this.comments[this.comments.length - 1];
if (t && ("ol" === this.containerListType || "mimic" === p.config.indentationCharMode)) try {
t.locateInCode(e);
} finally {
!t.inCode || t.inCode.indentationChars.startsWith("#") && "ol" !== this.containerListType || (this.inCode.lastCommentIndentationChars = t.inCode.indentationChars);
}
}
}
let i, o, s;
switch (!i && n && ({commentCode: i} = n.commentTextToCode("submit")), t) {
case "replyInSection":
s = e.slice(0, this.inCode.firstChunkContentEndIndex), o = s + i + e.slice(this.inCode.firstChunkContentEndIndex);
break;
case "addSubsection":
s = D(e.slice(0, this.inCode.contentEndIndex)), o = s + i + e.slice(this.inCode.contentEndIndex);
break;
}
return {
newPageCode: o,
codeBeforeInsertion: s,
commentCode: i
};
}
getWatchedAncestor(e) {
for (let t = e ? this : this.parent; t; t = t.parent) if (t.watched) return t;
return null;
}
getCode() {
var e = this;
return o()((function*() {
try {
yield e.sourcePage.getCode(), e.locateInCode(e.sourcePage.code);
} catch (e) {
throw e instanceof l ? new l(Object.assign({}, {
message: p.s("cf-error-getpagecode")
}, e.data)) : e;
}
}))();
}
addMenuItem({label: e, href: t, func: n, class: i, tooltip: o, visible: s = !0}) {
if (a()(this, qn)) {
const r = document.createElement("span");
r.className = "cd-sectionLinkWrapper", s || (r.style.display = "none");
const c = document.createElement("a");
c.textContent = e, t && (c.href = t), n && (c.onclick = n), c.className = "cd-sectionLink",
i && (c.className += " " + i), o && (c.title = o), r.appendChild(c), a()(this, Wn).insertBefore(r, a()(this, qn));
}
}
get $elements() {
return void 0 === a()(this, Gn) && u()(this, Gn, $(this.elements)), a()(this, Gn);
}
set $elements(e) {
u()(this, Gn, e), this.elements = e.get();
}
searchInCode({firstComment: e, headline: t, pageCode: n, adjustedPageCode: i}) {
const o = /^((=+)(.*?)\2[ \t]*(?:<!--[^]*?-->[ \t]*)*)\n/gm, s = [], r = [];
let a, c = 0;
for (;a = o.exec(i); ) {
const o = L(P(a[3])), u = o === t;
let l = 3;
const d = r.slice(-l).reverse(), h = p.sections.slice(Math.max(0, this.id - l), this.id).reverse().map(e => e.headline).every((e, t) => L(e) === d[t]);
r.push(o);
const m = this.id === c;
c++;
const g = a[1], f = a[2], b = "={1,".concat(f.length, "}"), y = n.slice(a.index), w = i.slice(a.index), E = w.match("(" + mw.util.escapeRegExp(g) + "[^]*?\n)" + b + "[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || y.match("(" + mw.util.escapeRegExp(g) + "[^]*$)"), v = w.match("(" + mw.util.escapeRegExp(g) + "[^]*?\n)\n*={1,6}[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || y.match("(" + mw.util.escapeRegExp(g) + "[^]*$)"), _ = E && y.substr(E.index, E[1].length), C = v && y.substr(v.index, v[1].length);
if (!_ || !C) {
console.log("Couldn't read the \"".concat(o, '" section contents.'));
continue;
}
const x = M(_);
let T;
T = x.length ? Boolean(e) && (x[0].timestamp === e.timestamp || x[0].author === e.author) : !this.comments.length;
const A = 1 * u + 1 * T + .5 * m + .25 * h;
if (A <= 1) continue;
const S = a.index, k = S + _.length, N = a.index + a[0].length, O = S + C.length, I = N - S;
let F = O, R = k;
p.config.keepInSectionEnding.forEach(e => {
const t = C.match(e);
t && (F -= t[0].length - 1);
const n = _.match(e);
n && (R -= n[0].length - 1);
});
const B = C.match(/\n([#*] *\n+)$/);
if (B && (F -= B[1].length), s.push({
headlineMatched: u,
firstCommentMatched: T,
sectionIndexMatched: m,
previousHeadlinesMatched: h,
score: A,
startIndex: S,
endIndex: k,
code: _,
contentStartIndex: N,
contentEndIndex: R,
relativeContentStartIndex: I,
firstChunkEndIndex: O,
firstChunkContentEndIndex: F,
firstChunkCode: C
}), 2.75 === A) break;
}
return s;
}
static watchSection(e, {silent: t = !1, successCallback: n, errorCallback: i}) {
return o()((function*() {
if (!e) return;
let o, s;
try {
({watchedSections: o, thisPageWatchedSections: s} = yield Q());
} catch (e) {
return mw.notify(p.s("section-watch-error-load"), {
type: "error"
}), void (i && i());
}
s.includes(e) || s.push(e);
try {
yield ee(o);
} catch (e) {
if (e instanceof l) {
const {type: t, code: n} = e.data;
if ("internal" === t && "sizeLimit" === n) {
const e = Me(p.s("section-watch-error-maxsize"), [ "cd-notification-editWatchedSections", e => {
e.preventDefault(), Mn();
} ]);
mw.notify(e, {
type: "error",
autoHideSeconds: "long"
});
} else mw.notify(p.s("section-watch-error-save"), {
type: "error"
});
} else mw.notify(p.s("section-watch-error-save"), {
type: "error"
});
return void (i && i());
}
if (!t) {
let t, n = p.s("section-watch-success", e);
$("#ca-watch").length && (n += " ".concat(p.s("section-watch-pagenotwatched")),
t = "long"), mw.notify(p.util.wrapInElement(n), {
autoHideSeconds: t
});
}
n && n();
}))();
}
static unwatchSection(e, {silent: t = !1, successCallback: n, errorCallback: i, watchedAncestorHeadline: s}) {
return o()((function*() {
if (!e) return;
let o, r;
try {
({watchedSections: o, thisPageWatchedSections: r} = yield Q());
} catch (e) {
return mw.notify(p.s("section-watch-error-load"), {
type: "error"
}), void (i && i());
}
r.includes(e) && r.splice(r.indexOf(e), 1), r.length || delete o[mw.config.get("wgArticleId")];
try {
yield ee(o);
} catch (e) {
return mw.notify(p.s("section-watch-error-save"), {
type: "error"
}), void (i && i());
}
let a, c = p.s("section-unwatch-success", e);
s && (c += " ".concat(p.s("section-unwatch-stillwatched", s)), a = "long"), t && !s || mw.notify(p.util.wrapInElement(c), {
autoHideSeconds: a
}), n && n();
}))();
}
static getSectionByAnchor(e) {
return p.sections && e && p.sections.find(t => t.anchor === e) || null;
}
static getSectionsByHeadline(e) {
return p.sections.filter(t => t.headline === e);
}
static search({headline: e, firstCommentAnchor: t, index: n}) {
const i = [ ...p.sections.filter(t => t.headline === e), ...p.sections.filter(e => e.comments[0] && e.comments[0].anchor === t) ];
p.sections[n] && i.push(p.sections[n]);
const o = {};
i.forEach(e => {
o[e.id] || (o[e.id] = 0), o[e.id]++;
});
const s = Object.keys(o).reduce((e, t) => o[t] >= 2 && (null === e || o[t] > o[e]) ? t : e, null);
return null !== s ? p.sections[s] : null;
}
static adjustSections() {
p.sections.forEach((e, t) => {
if (e.isLastSection = t === p.sections.length - 1, e.subsections = [], p.sections.slice(t + 1).some(t => {
if (!(t.level > e.level)) return !0;
e.subsections.push(t), 2 === e.level && (t.baseSection = e);
}), e.level > 2 && p.sections.slice(0, t).reverse().some(t => {
if (t.level < e.level) return e.parent = t, !0;
}), e.actionable) {
const n = p.sections.slice(t + 1).find(t => t.level === e.level);
n && n.headingNestingLevel !== e.headingNestingLevel || e.addAddSubsectionButton(),
p.sections[t + 1] && p.sections[t + 1].headingNestingLevel !== e.headingNestingLevel ? e.$heading.find(".cd-sectionLink-addSubsection").parent().remove() : e.addReplyButton();
}
}), p.sections.filter(e => e.actionable && 2 === e.level).forEach(e => {
const t = e.subsections.length ? e.subsections[e.subsections.length - 1] : e;
t.$replyButtonLink && t.$replyButtonLink.on("mouseenter", e.replyButtonHoverHandler).on("mouseleave", e.replyButtonUnhoverHandler);
});
}
}
let Xn = 0;
function Jn(e, t) {
const n = e.lastFocused || new Date(0), i = t.lastFocused || new Date(0);
return i > n ? 1 : i < n ? -1 : 0;
}
var Qn = new WeakMap, Zn = new WeakMap, ei = new WeakMap, ti = new WeakMap, ni = new WeakMap, ii = new WeakMap, oi = new WeakMap, si = new WeakMap, ri = new WeakMap, ai = new WeakMap;
class ci {
constructor({mode: e, target: t, $addSectionLink: n, dataToRestore: i, scrollIntoView: o, editintro: s}) {
if (Qn.set(this, {
writable: !0,
value: void 0
}), Zn.set(this, {
writable: !0,
value: void 0
}), ei.set(this, {
writable: !0,
value: void 0
}), ti.set(this, {
writable: !0,
value: void 0
}), ni.set(this, {
writable: !0,
value: void 0
}), ii.set(this, {
writable: !0,
value: void 0
}), oi.set(this, {
writable: !0,
value: void 0
}), si.set(this, {
writable: !0,
value: void 0
}), ri.set(this, {
writable: !0,
value: void 0
}), ai.set(this, {
writable: !0,
value: void 0
}), this.mode = e, this.setTargets(t), this.$addSectionLink = n, this.target instanceof Ni ? u()(this, Qn, this.target.section && this.target.section.headline) : this.target instanceof Kn && u()(this, Qn, this.target.headline),
this.id = Xn++, this.summaryAltered = !!i && i.summaryAltered, s && oe("{{".concat(s, "}}"), {
title: p.g.CURRENT_PAGE.name
}).then(e => {
this.$messageArea.append(e.html).cdAddCloseButton();
}), this.createContents(i), this.addEvents(), this.initAutocomplete(), this.addToPage(),
this.operations = [], p.commentForms.push(this), i) this.originalComment = i.originalComment,
this.originalHeadline = i.originalHeadline, i.lastFocused && (this.lastFocused = new Date(i.lastFocused)); else if ("edit" === this.mode) {
const e = this.registerOperation({
type: "load"
});
this.target.getCode(!0).then(({commentText: t, headline: n}) => {
this.target.inCode.inSmallFont && (t = "<small>".concat(t, "</small>")), this.commentInput.setValue(t),
this.originalComment = t, this.headlineInput && (this.headlineInput.setValue(n),
this.originalHeadline = n), this.closeOperation(e), Ht(), this.commentInput.focus();
}, t => {
t instanceof l ? this.handleError(Object.assign({}, t.data, {
doCancel: !0,
currentOperation: e
})) : this.handleError({
type: "javascript",
logMessage: t,
doCancel: !0,
currentOperation: e
});
});
} else this.originalComment = "", this.headlineInput && (this.originalHeadline = ""),
this.target instanceof ve ? Ht() : this.checkCode(), o && this.$element.cdScrollIntoView("center"),
this[this.headlineInput ? "headlineInput" : "commentInput"].focus();
mw.hook("convenientDiscussions.commentFormCreated").fire(this);
}
checkCode() {
if (!this.checkCodeRequest) {
const e = $.Deferred();
this.checkCodeRequest = e.then(() => {
Ht();
}, e => {
e instanceof l ? this.handleError(Object.assign({}, e.data)) : this.handleError({
type: "javascript",
logMessage: e
});
}), this.target.getCode(this).then(() => {
e.resolve();
}, t => {
e.reject(t);
});
}
return this.checkCodeRequest;
}
setTargets(e) {
if (this.target = e, this.target instanceof Ni) this.targetSection = this.target.section,
this.targetComment = this.target; else if (this.target instanceof Kn) {
if (this.targetSection = this.target, "replyInSection" === this.mode && !this.target.$replyButton) throw new l;
if ("addSubsection" === this.mode && !this.targetSection.$heading.find(".cd-sectionLink-addSubsection").length) throw new l;
this.target.comments[0] && this.target.comments[0].isOpeningSection && (this.targetComment = this.target.comments[0]);
}
this.targetPage = this.targetSection ? this.targetSection.sourcePage : this.target;
}
addToolbar() {
const e = $("<div>").addClass("cd-toolbarPlaceholder").insertBefore(this.commentInput.$element), t = [ "ext.wikiEditor" ];
p.config.customCommentFormModules.filter(e => !e.checkFunc || e.checkFunc()).forEach(e => {
t.push(e.name);
}), mw.loader.using(t).then(() => {
e.hide();
const t = this.commentInput.$input;
t.wikiEditor("addModule", mw.loader.moduleRegistry["ext.wikiEditor"].packageExports["jquery.wikiEditor.toolbar.config.js"]);
const n = mw.loader.moduleRegistry["ext.wikiEditor"].packageExports["jquery.wikiEditor.dialogs.config.js"];
n.replaceIcons(t), t.wikiEditor("addModule", n.getDefaultConfig()), this.commentInput.$element.find('.tool[rel="redirect"], .tool[rel="signature"], .tool[rel="newline"], .tool[rel="gallery"], .tool[rel="reference"], .option[rel="heading-2"]').remove(),
t.wikiEditor("addToToolbar", {
section: "main",
groups: {
"convenient-discussions": {
tools: {
mention: {
label: p.s("cf-mentions-tooltip"),
type: "button",
icon: "https://upload.wikimedia.org/wikipedia/commons/9/98/OOjs_UI_icon_userAvatar.svg",
action: {
type: "callback",
execute: () => {
this.mention();
}
}
},
quote: {
label: "".concat(p.s("cf-quote-tooltip"), " ").concat(mw.msg("parentheses", "Q".concat(mw.msg("comma-separator"), "Ctrl+Alt+Q"))),
type: "button",
icon: "https://upload.wikimedia.org/wikipedia/commons/c/c0/OOjs_UI_icon_quotes-ltr.svg",
action: {
type: "callback",
execute: () => {
this.quote();
}
}
}
}
}
}
}), mw.hook("convenientDiscussions.commentFormToolbarReady").fire(this);
});
}
addInsertButton(e, t) {
const n = [];
e = He(e, /\\[+;\\]/g, n);
let [, i, o] = e.match(/^(.*?)(?:\+(.*))?$/) || [];
if (!i) return;
o = o || "";
const s = e => e.replace(/\\([+;\\])/g, "$1");
i = s(Ue(i, n)), o = s(Ue(o, n)), t = t ? s(t) : i + o;
const r = $("<a>").text(t).addClass("cd-insertButtons-item").on("click", e => {
e.preventDefault(), this.commentInput.$input.textSelection("encapsulateSelection", {
pre: i,
peri: "",
post: o
});
});
this.$insertButtons.append(r, " ");
}
createContents(e) {
this.target instanceof ve ? this.containerListType = null : this.containerListType = this.target instanceof Ni ? this.target.$elements.last().parent().prop("tagName").toLowerCase() : this.target.$replyWrapper.parent().prop("tagName").toLowerCase();
let t = "div";
if ([ "reply", "edit" ].includes(this.mode)) {
const e = this.target.$elements.last();
e.is("li") ? "ol" === this.containerListType && "edit" !== this.mode || (t = "li") : e.is("dd") ? t = "dd" : "reply" === this.mode && (t = "ul");
}
if (u()(this, si, "edit" === this.mode && this.target.isOpeningSection), this.$element = $(document.createElement(t)).addClass("cd-commentForm").addClass("cd-commentForm-".concat(this.mode)),
"ol" === this.containerListType && this.$element.addClass("cd-commentForm-inNumberedList"),
a()(this, si) && this.$element.addClass("cd-commentForm-sectionOpeningComment"),
"addSubsection" === this.mode && this.$element.addClass("cd-commentForm-addSubsection-".concat(this.target.level)),
"reply" === this.mode) {
const e = "ul" === t ? this.$element : $("<ul>").appendTo(this.$element);
this.$innerWrapper = $("<li>").addClass("cd-commentForm-innerWrapper").appendTo(e),
e.addClass("cd-commentLevel");
} else this.$innerWrapper = $("<div>").addClass("cd-commentForm-innerWrapper").appendTo(this.$element);
this.$messageArea = $("<div>").addClass("cd-messageArea"), ([ "addSection", "addSubsection" ].includes(this.mode) || a()(this, si)) && ("addSubsection" === this.mode ? u()(this, ri, p.s("cf-headline-subsection", this.targetSection.headline)) : "edit" === this.mode && this.targetSection.parent ? u()(this, ri, p.s("cf-headline-subsection", this.targetSection.parent.headline)) : u()(this, ri, p.s("cf-headline-topic")),
this.headlineInput = new OO.ui.TextInputWidget({
value: e ? e.headline : "",
placeholder: a()(this, ri),
classes: [ "cd-headlineInput" ],
tabIndex: String(this.id) + "11"
}));
let n, i = this.headlineInput ? 5 : 3;
"firefox" === $.client.profile().name && (i -= 1), p.config.commentInputPlaceholderEmpty || ("replyInSection" === this.mode || "reply" === this.mode && this.target.isOpeningSection ? n = p.s("cf-comment-placeholder-replytosection", this.targetSection.headline) : "reply" === this.mode && this.target.requestAuthorGenderIfNeeded(() => {
this.commentInput.$input.attr("placeholder", Fe(p.s("cf-comment-placeholder-replytocomment", this.target.author.name, this.target.author)));
}, !0)), this.commentInput = new OO.ui.MultilineTextInputWidget({
value: e ? e.comment : "",
placeholder: n,
autosize: !0,
rows: i,
maxRows: 30,
classes: [ "cd-commentInput" ],
tabIndex: String(this.id) + "12"
}), this.$settings = $("<div>").addClass("cd-commentFormSettings"), this.summaryInput = new OO.ui.TextInputWidget({
value: e ? e.summary : "",
maxLength: p.g.SUMMARY_LENGTH_LIMIT,
placeholder: p.s("cf-summary-placeholder"),
classes: [ "cd-summaryInput" ],
tabIndex: String(this.id) + "13"
}), this.summaryInput.$input.codePointLimit(p.g.SUMMARY_LENGTH_LIMIT), mw.widgets.visibleCodePointLimit(this.summaryInput, p.g.SUMMARY_LENGTH_LIMIT),
this.updateAutoSummary(!e), this.$summaryPreview = $("<div>").addClass("cd-summaryPreview"),
"edit" === this.mode && ([this.minorField, this.minorCheckbox] = _n({
value: "minor",
selected: !e || e.minor,
label: p.s("cf-minor"),
tabIndex: String(this.id) + "20"
}));
const o = p.settings.watchOnReply && "edit" !== this.mode || $("#ca-unwatch").length || mw.user.options.get(mw.config.get("wgArticleId") ? "watchdefault" : "watchcreations");
if ([this.watchField, this.watchCheckbox] = _n({
value: "watch",
selected: e ? e.watch : o,
label: p.s("cf-watch"),
tabIndex: String(this.id) + "21"
}), this.targetSection || "addSection" === this.mode) {
const t = "addSubsection" !== this.mode && (this.targetSection && this.targetSection.level <= 2 || "addSection" === this.mode) ? p.s("cf-watchsection-topic") : p.s("cf-watchsection-subsection"), n = p.settings.watchSectionOnReply && "edit" !== this.mode || this.targetSection && this.targetSection.watched;
[this.watchSectionField, this.watchSectionCheckbox] = _n({
value: "watchSection",
selected: e ? e.watchSection : n,
label: t,
tabIndex: String(this.id) + "22",
title: p.s("cf-watchsection-tooltip")
});
}
if (this.headlineInput && ([this.noSignatureField, this.noSignatureCheckbox] = _n({
value: "noSignature",
selected: !!e && e.noSignature,
label: p.s("cf-nosignature"),
tabIndex: String(this.id) + "25"
})), "edit" === this.mode && (!this.target.isOpeningSection || this.target.section && 1 === this.target.section.comments.length)) {
const t = this.target.isOpeningSection ? void 0 : !this.target.section || this.target.section.comments.slice(this.target.section.comments.indexOf(this.target)).some(e => e.parent === this.target);
if (this.target.isOpeningSection || !t) {
const t = !!e && e.delete;
[this.deleteField, this.deleteCheckbox] = _n({
value: "delete",
selected: t,
label: p.s("cf-delete"),
tabIndex: String(this.id) + "26"
});
}
}
switch (this.scriptSettingsButton = new OO.ui.ButtonWidget({
framed: !1,
icon: "settings",
label: p.s("cf-scriptsettings-tooltip"),
invisibleLabel: !0,
title: p.s("cf-scriptsettings-tooltip"),
classes: [ "cd-button", "cd-scriptSettingsButton" ],
tabIndex: String(this.id) + "27"
}), this.horizontalLayout = new OO.ui.HorizontalLayout({
classes: [ "cd-checkboxesContainer" ]
}), this.horizontalLayout.addItems([ this.minorField, this.watchField, this.watchSectionField, this.noSignatureField, this.deleteField, this.scriptSettingsButton ].filter(ke)),
this.$buttonsContainer = $("<div>").addClass("cd-buttonsContainer"), this.$leftButtonsContainer = $("<div>").addClass("cd-leftButtonsContainer"),
this.$rightButtonsContainer = $("<div>").addClass("cd-rightButtonsContainer"), this.mode) {
case "edit":
u()(this, ei, p.s("cf-save")), u()(this, ti, p.s("cf-save"));
break;
case "addSection":
u()(this, ei, p.s("cf-addtopic")), u()(this, ti, p.s("cf-addtopic-short"));
break;
case "addSubsection":
u()(this, ei, p.s("cf-addsubsection")), u()(this, ti, p.s("cf-addsubsection-short"));
break;
default:
u()(this, ei, p.s("cf-reply")), u()(this, ti, p.s("cf-reply-short"));
}
this.settingsButton = new OO.ui.ButtonWidget({
label: p.s("cf-settings"),
framed: !1,
classes: [ "cd-button", "cd-settingsButton" ],
tabIndex: String(this.id) + "30"
}), p.g.$popupsOverlay || (p.g.$popupsOverlay = $("<div>").addClass("cd-popupsOverlay").appendTo(document.body)),
this.helpPopupButton = new OO.ui.PopupButtonWidget({
label: p.s("cf-help"),
framed: !1,
classes: [ "cd-button" ],
popup: {
head: !1,
$content: p.util.wrapInElement(p.s("cf-help-content"), "div"),
padded: !0,
align: "center"
},
$overlay: p.g.$popupsOverlay,
tabIndex: String(this.id) + "31"
}), this.cancelButton = new OO.ui.ButtonWidget({
label: p.s("cf-cancel"),
flags: "destructive",
framed: !1,
classes: [ "cd-button", "cd-cancelButton" ],
tabIndex: String(this.id) + "32"
}), this.viewChangesButton = new OO.ui.ButtonWidget({
label: p.s("cf-viewchanges"),
classes: [ "cd-viewChangesButton" ],
tabIndex: String(this.id) + "33"
}), this.previewButton = new OO.ui.ButtonWidget({
label: p.s("cf-preview"),
classes: [ "cd-previewButton" ],
tabIndex: String(this.id) + "34"
}), p.settings.autopreview && this.previewButton.$element.hide(), this.submitButton = new OO.ui.ButtonInputWidget({
type: "submit",
label: a()(this, ei),
flags: [ "progressive", "primary" ],
classes: [ "cd-submitButton" ],
tabIndex: String(this.id) + "35"
}), this.deleteCheckbox && this.deleteCheckbox.isSelected() && this.updateFormOnDeleteCheckboxChange(!0),
this.$settings.append(this.summaryInput.$element, this.$summaryPreview, this.horizontalLayout.$element),
this.$leftButtonsContainer.append(this.settingsButton.$element, this.helpPopupButton.$element),
this.$rightButtonsContainer.append(this.cancelButton.$element, this.viewChangesButton.$element, this.previewButton.$element, this.submitButton.$element),
this.$buttonsContainer.append(this.$leftButtonsContainer, this.$rightButtonsContainer),
this.$form = $("<form>"), this.$form.append(...[ this.headlineInput && this.headlineInput.$element, this.commentInput.$element, this.$settings, this.$buttonsContainer ].filter(ke)),
this.$innerWrapper.append(this.$messageArea, this.$form), "edit" === this.mode || p.settings.alwaysExpandSettings || this.$settings.hide(),
this.$previewArea = $("<div>").addClass("cd-previewArea"), p.settings.autopreview ? this.$previewArea.addClass("cd-previewArea-below").appendTo(this.$innerWrapper) : this.$previewArea.addClass("cd-previewArea-above").prependTo(this.$innerWrapper),
"ol" === this.containerListType && "webkit" !== $.client.profile().layout && $("<div>").html(" ").addClass("cd-commentForm-dummyElement").prependTo(this.$innerWrapper),
p.settings.showToolbar && this.addToolbar(), p.settings.insertButtons.length && (this.$insertButtons = $("<div>").addClass("cd-insertButtons").insertAfter(this.commentInput.$element),
p.settings.insertButtons.forEach(e => {
let t, n;
Array.isArray(e) ? (t = e[0], n = e[1]) : t = e, this.addInsertButton(t, n);
}));
}
addToPage() {
switch (mw.config.get("wgArticleId") || p.g.$root.empty(), this.mode) {
case "reply":
this.$element.insertAfter(this.target.$elements.last());
break;
case "edit":
this.target.isOpeningSection ? this.$element.insertAfter(this.target.$elements.last()) : this.$element.insertBefore(this.target.$elements.first());
break;
case "replyInSection":
this.$element.appendTo(this.target.$replyWrapper), this.target.$replyWrapper.addClass("cd-replyWrapper-hasCommentForm");
break;
case "addSection":
this.isNewTopicOnTop = this.$addSectionLink && this.$addSectionLink.is('[href*="section=0"]'),
this.isNewTopicOnTop && p.sections[0] ? this.$element.insertBefore(p.sections[0].$heading) : this.$element.appendTo(p.g.$root);
break;
case "addSubsection":
{
const e = new RegExp("\\bcd-commentForm-addSubsection-[".concat(this.target.level, "-6]\\b"));
let t, n = this.target.$elements.last();
do {
t = n, n = n.next();
} while (n.is(".cd-sectionButtonContainer") || n.length && n.get(0).className.match(e));
this.$element.insertAfter(t);
break;
}
}
this.adjustLabels();
}
addEvents() {
const e = () => {
Ht();
}, t = () => {
this.preview();
}, n = () => {
this.preview(!1);
}, i = [ {
pattern: new RegExp(p.g.SIGN_CODE + "\\s*$"),
message: p.s("cf-reaction-signature", p.g.SIGN_CODE),
name: "signatureNotNeeded",
type: "notice"
}, {
pattern: /<pre/,
message: p.s("cf-reaction-pre"),
name: "dontUsePre",
type: "warning"
} ].concat(p.config.customTextReactions);
this.$form.on("submit", e => {
e.preventDefault(), this.submit();
}).on("keydown", e => {
!e.ctrlKey || e.shiftKey || e.altKey || 13 !== e.keyCode || this.submit(), e.ctrlKey || e.shiftKey || e.altKey || 27 !== e.keyCode || this.cancel();
}).on("focusin", () => {
this.lastFocused = new Date;
}), this.headlineInput && this.headlineInput.on("change", e => {
this.updateAutoSummary(!0, !0), e.includes("{{") ? this.showMessage(p.s("cf-reaction-templateinheadline"), {
type: "warning",
name: "templateInHeadline"
}) : this.hideMessage("templateInHeadline");
}).on("change", t).on("change", e), this.commentInput.on("change", e => {
this.updateAutoSummary(!0, !0), i.forEach(({pattern: t, checkFunc: n, message: i, type: o, name: s}) => {
t.test(e) && ("function" != typeof n || n(this)) ? this.showMessage(i, {
type: o,
name: s
}) : this.hideMessage(s);
});
}).on("change", t).on("change", e), this.commentInput.$input.get(0).addEventListener("tribute-replaced", e => {
"@" === e.detail.instance.trigger && ("edit" === this.mode && this.showMessage(p.s("cf-reaction-mention-edit"), {
type: "notice",
name: "mentionEdit"
}), this.noSignatureCheckbox && this.noSignatureCheckbox.isSelected() && this.showMessage(p.s("cf-reaction-mention-nosignature"), {
type: "notice",
name: "mentionNoSignature"
}));
}), this.summaryInput.on("change", () => {
a()(this, oi) || t();
}).on("change", e), this.summaryInput.$input.on("keypress", () => {
this.summaryAltered = !0, u()(this, oi, !1);
}), this.minorCheckbox && this.minorCheckbox.on("change", e), this.watchCheckbox.on("change", e),
this.watchSectionCheckbox && this.watchSectionCheckbox.on("change", e), this.noSignatureCheckbox && this.noSignatureCheckbox.on("change", n).on("change", e),
this.deleteCheckbox && this.deleteCheckbox.on("change", e => {
this.updateAutoSummary(!0, !0), this.updateFormOnDeleteCheckboxChange(e);
}).on("change", t).on("change", e), this.scriptSettingsButton.on("click", () => {
Ln();
}), this.settingsButton.on("click", () => {
this.toggleSettings();
}), this.cancelButton.on("click", () => {
this.cancel();
}), this.viewChangesButton.on("click", () => {
this.viewChanges();
}), this.previewButton.on("click", () => {
this.preview(!0, !1);
});
}
initAutocomplete() {
let e = [];
if (this.targetSection) {
const t = 2 === this.targetSection.level ? this.targetSection : this.targetSection.baseSection;
e = t.comments;
} else "addSection" !== this.mode && p.comments.some(t => !!t.section || (e.push(t),
!1));
"edit" === this.mode && (e = e.filter(e => e !== this.target)), this.autocomplete = new Ye({
types: [ "mentions", "wikilinks", "templates", "tags", "commentLinks" ],
inputs: [ this.commentInput ],
comments: e
}), this.croppedAutocomplete = new Ye({
types: [ "mentions", "wikilinks" ],
inputs: [ this.headlineInput, this.summaryInput ].filter(ke),
comments: e
});
}
toggleSettings() {
this.$settings.is(":hidden") ? this.$settings.show() : this.$settings.hide();
}
adjustLabels() {
let e = this.$innerWrapper.width();
this.$element.hasClass("cd-commentForm-short") ? e >= a()(this, Zn) + 7 && (this.$element.removeClass("cd-commentForm-short"),
this.submitButton.setLabel(a()(this, ei)), this.previewButton.setLabel(p.s("cf-preview")),
this.viewChangesButton.setLabel(p.s("cf-viewchanges")), this.cancelButton.setLabel(p.s("cf-cancel"))) : (u()(this, Zn, this.submitButton.$element.outerWidth(!0) + (this.previewButton.$element.is(":visible") ? this.previewButton.$element.outerWidth(!0) : 0) + (this.viewChangesButton.$element.is(":visible") ? this.viewChangesButton.$element.outerWidth(!0) : 0) + this.settingsButton.$element.outerWidth(!0) + this.helpPopupButton.$element.outerWidth(!0) + this.cancelButton.$element.outerWidth(!0)),
e < a()(this, Zn) + 7 && (this.$element.addClass("cd-commentForm-short"), this.submitButton.setLabel(a()(this, ti)),
this.previewButton.setLabel(p.s("cf-preview-short")), this.viewChangesButton.setLabel(p.s("cf-viewchanges-short")),
this.cancelButton.setLabel(p.s("cf-cancel-short"))));
}
pushPending(e = !1) {
this.commentInput.pushPending(), this.summaryInput.pushPending(), this.headlineInput && this.headlineInput.pushPending(),
e && (this.submitButton.setDisabled(!0), this.previewButton.setDisabled(!0), this.viewChangesButton.setDisabled(!0),
this.cancelButton.setDisabled(!0));
}
popPending(e = !1) {
this.commentInput.popPending(), this.summaryInput.popPending(), this.headlineInput && this.headlineInput.popPending(),
e && (this.submitButton.setDisabled(!1), this.previewButton.setDisabled(!1), this.viewChangesButton.setDisabled(!1),
this.cancelButton.setDisabled(!1));
}
showMessage(e, {type: t = "notice", name: n, isRaw: i = !1} = {}) {
if (this.destroyed || n && this.$messageArea.children(".cd-message-".concat(n)).length) return;
let o;
if (i) o = e; else {
const i = e instanceof $ ? e : p.util.wrapInElement(e), s = [ "cd-message", n && "cd-message-".concat(n) ].filter(ke);
o = new OO.ui.MessageWidget({
type: t,
inline: !0,
label: i,
classes: s
}).$element;
}
this.$messageArea.append(o).cdAddCloseButton().cdScrollIntoView("top");
}
hideMessage(e) {
const t = this.$messageArea.children(".cd-message-".concat(e));
t.length && t.remove();
}
abort({message: e, messageType: t = "error", isRawMessage: n = !1, logMessage: i, doCancel: o = !1, currentOperation: s}) {
s && this.closeOperation(s), this.destroyed || (i && console.warn(i), o ? (mw.notify(e, {
type: "error",
autoHideSeconds: "long"
}), this.cancel(!1)) : (s && "preview" === s.type && p.settings.autopreview || this.showMessage(e, {
type: t,
isRaw: n
}), this.$messageArea.cdScrollIntoView("top")));
}
handleError({type: e, code: t, details: n, apiData: i, message: s, messageType: r, logMessage: a, doCancel: c = !1, isRawMessage: u = !1, currentOperation: l}) {
var d = this;
return o()((function*() {
switch (e) {
case "parse":
{
let e;
switch (t) {
case "locateComment":
e = d.targetSection ? d.targetSection.editUrl.href : p.g.CURRENT_PAGE.getUrl({
action: "edit",
section: 0
}), s = p.s("error-locatecomment", e);
break;
case "locateSection":
e = p.g.CURRENT_PAGE.getUrl({
action: "edit"
}), s = p.s("error-locatesection", e);
break;
case "numberedList-list":
s = p.s("cf-error-numberedlist") + " " + p.s("cf-error-numberedlist-list");
break;
case "numberedList-table":
s = p.s("cf-error-numberedlist") + " " + p.s("cf-error-numberedlist-table");
break;
case "findPlace":
s = p.s("cf-error-findplace");
break;
case "findPlace-unexpectedHeading":
s = p.s("cf-error-findplace-unexpectedheading");
break;
case "delete-repliesToComment":
s = p.s("cf-error-delete-repliestocomment");
break;
case "delete-repliesInSection":
s = p.s("cf-error-delete-repliesinsection");
break;
case "commentLinks-commentNotFound":
s = p.s("cf-error-commentlinks-commentnotfound", n.anchor);
}
const i = function() {
var t = o()((function*(t) {
t.preventDefault(), (yield d.confirmClose()) && (d.forget(), location.assign(e));
}));
return function(e) {
return t.apply(this, arguments);
};
}();
s = Me(s, [ "cd-message-reloadPage", o()((function*() {
(yield d.confirmClose()) && d.reloadPage();
})) ], [ "cd-message-editSection", i ], [ "cd-message-editPage", i ]);
break;
}
case "api":
switch (t) {
case "missing":
s = p.s("cf-error-pagedoesntexist");
break;
case "error":
{
const {code: e, info: t} = i.error;
switch (e) {
case "missingtitle":
s = p.s("cf-error-pagedoesntexist");
break;
default:
s = yield ae(e, t);
}
break;
}
}
(s = p.util.wrapInElement(s)).find(".mw-parser-output").css("display", "inline"),
a = a || [ t, i ];
break;
case "network":
case "javascript":
s = (s ? "".concat(s, " ") : "") + p.s("error-".concat(e));
}
d.abort({
message: s,
messageType: r,
isRawMessage: u,
logMessage: a,
doCancel: c,
currentOperation: l
});
}))();
}
addIndentationChars(e, t) {
return t + (t && !/^[:*#]/.test(e) && p.config.spaceAfterIndentationChars ? " " : "") + e;
}
commentTextToCode(e) {
let t, n = !1;
switch (this.mode) {
case "reply":
t = this.target.inCode.replyIndentationChars, n = !0;
break;
case "edit":
t = this.target.inCode.indentationChars, n = Boolean(t);
break;
case "replyInSection":
t = p.config.defaultIndentationChar, this.target.inCode.lastCommentIndentationChars && ("#" === this.target.inCode.lastCommentIndentationChars[0] ? t = "#" : "mimic" === p.config.indentationCharMode && (t = this.target.inCode.lastCommentIndentationChars[0])),
n = !0;
break;
default:
t = "";
}
const i = "preview" === e || [ "addSection", "addSubsection" ].includes(this.mode) || "edit" === this.mode && !t, o = t.replace(/\*/g, ":");
let s, r = this.commentInput.getValue();
p.config.preTransformCode && (r = p.config.preTransformCode(r, this)), r = r.trim(),
({code: r, hidden: s} = B(r));
let c, u = !1;
if (this.headlineInput || (r = r.replace(/^<small>([^]*)<\/small>$/i, (e, t) => (u = !0,
t))), r = r.replace(/^(?:[ \t\xA0\uFEFF]*\n)+(?! )/gm, e => e.replace(/^[ \t\uFEFF\xA0]+/gm, "")),
c = this.noSignatureCheckbox && this.noSignatureCheckbox.isSelected() ? "" : "edit" === this.mode ? this.target.inCode.signatureCode : p.g.CURRENT_USER_SIGNATURE,
!c || "edit" === this.mode && /^[ \t]*\n/.test(c) || !/\n[:*#].*$/.test(r) || (r += "\n",
"edit" === this.mode && (c = c.replace(/^\s+/, ""))), !i && (r = r.replace(/\n([:*#]+)/g, (e, t) => "\n" + o + t),
n && (/^[:*#]/m.test(r) || r.includes("\x03")))) {
if ("#" === o) throw new l({
type: "parse",
code: "numberedList-list"
});
if (o.includes("#") && r.includes("\x03")) throw new l({
type: "parse",
code: "numberedList-table"
});
r = r.replace(/\n(?!:)/g, () => "\n" + o + (p.config.spaceAfterIndentationChars ? " " : ""));
}
if (n) {
r = r.replace(/^ +/gm, "");
const e = p.config.paragraphTemplates.length ? "$1{{".concat(p.config.paragraphTemplates[0], "}}") : "$1<br><br>";
r = r.replace(/^((?![:*#= ]).*)\n\n(?![:*#=])/gm, e);
}
const d = new RegExp("^(?:\\x01.+?\\x02|\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\]\\]) *$"), "i"), h = new RegExp("(?:<".concat(p.g.PNIE_PATTERN, "(?: [\\w ]+?=[^<>]+?| ?\\/?)>|<\\/").concat(p.g.PNIE_PATTERN, ">|\\x04) *$"), "i"), m = new RegExp("^(?:<\\/".concat(p.g.PNIE_PATTERN, ">|<").concat(p.g.PNIE_PATTERN, ")"), "i");
if (r = r.replace(/^((?![:*#= ]).+)\n(?![\n:*#= \x03])(?=(.*))/gm, (e, t, i) => t + (d.test(t) || d.test(i) || h.test(t) || m.test(i) ? "" : "<br>") + (n ? "" : "\n")),
r = r.replace(/\s*~{3,}$/, ""), !i && /^(#|.*\x03)/.test(r) && (t = o), this.headlineInput) {
let e;
e = "addSection" === this.mode ? 2 : "addSubsection" === this.mode ? this.target.level + 1 : this.target.inCode.headingLevel;
const t = "=".repeat(e);
a()(this, si) && /^\n/.test(this.target.inCode.code) && (r = "\n" + r), r = "".concat(t, " ").concat(this.headlineInput.getValue().trim(), " ").concat(t, "\n").concat(r);
}
if ("preview" === e && c && (c = '<span class="cd-commentForm-signature">'.concat(c, "</span>")),
/^\s/.test(c) || !r || /[\s>]$/.test(r) || (r += " "), /(?:^|\n) .*$/.test(r) && (r += "\n"),
r += c, !this.headlineInput && u) {
const e = o + (/^[:*#]/.test(r) || !p.config.spaceAfterIndentationChars ? "" : " "), t = /^[:*# ]/.test(r) ? "\n".concat(e) : "";
if (p.config.blockSmallTemplate && !/^[:*#]/m.test(r)) {
const e = r.replace(/\|/g, "{{!}}");
r = "{{".concat(p.config.blockSmallTemplate, "|1=").concat(e, "}}");
} else r = "<small>".concat(t).concat(r, "</small>");
}
let g;
return "edit" !== this.mode && (r += "\n"), "submit" === e && (r = this.addIndentationChars(r, t),
n && "edit" === this.mode && /^[:*]/.test(this.target.inCode.code) && !/^[:*]/.test(r) && (r = " " + r),
"addSubsection" === this.mode && (r += "\n")), "preview" === e && n && this.commentInput.getValue().trim() ? (r = r.replace(/^/gm, ":"),
g = !0) : g = !1, r = Ue(r, s), p.config.postTransformCode && (r = p.config.postTransformCode(r, this)),
{
commentCode: r,
doImitateList: g
};
}
prepareNewPageCode(e, t) {
const n = this.deleteCheckbox && this.deleteCheckbox.isSelected();
this.target instanceof ve || this.target.locateInCode(e);
let {newPageCode: i, codeBeforeInsertion: o, commentCode: s} = this.target.modifyCode(e, {
action: this.mode,
doDelete: n,
commentForm: this
});
"submit" !== t || n || M(o, !0);
const r = /\[\[#(\d{12}_[^|\]]+)/g, a = [];
let c;
for (;c = r.exec(s); ) a.push(c[1]);
return a.forEach(e => {
const t = Ni.getCommentByAnchor(e);
if (t) {
t.locateInCode(i);
const n = p.config.getAnchorCode(e);
if (t.inCode.code.includes(n)) return;
let o = this.addIndentationChars(t.inCode.code, t.inCode.indentationChars);
const s = o.match(/^[:*#]* */)[0].length;
o = o.slice(0, s) + n + o.slice(s);
const r = (t.inCode.headingCode || "") + o + t.inCode.signatureDirtyCode;
({newPageCode: i} = t.modifyCode(i, {
action: "edit",
commentCode: r
}));
} else if (!$("#" + e).length) throw new l({
type: "parse",
code: "commentLinks-commentNotFound",
details: {
anchor: e
}
});
}), i;
}
tryPrepareNewPageCode(e) {
var t = this;
return o()((function*() {
try {
yield t.targetPage.getCode();
} catch (e) {
return void (e instanceof l ? t.handleError(Object.assign({}, {
message: p.s("cf-error-getpagecode")
}, e.data)) : t.handleError({
type: "javascript",
logMessage: e
}));
}
let n;
try {
n = t.prepareNewPageCode(t.targetPage.code, e);
} catch (e) {
return void (e instanceof l ? t.handleError(e.data) : t.handleError({
type: "javascript",
logMessage: e
}));
}
return n;
}))();
}
registerOperation(e) {
return this.operations.push(e), e.closed = !1, "preview" === e.type && e.auto || (this.$messageArea.empty(),
this.pushPending([ "load", "submit" ].includes(e.type))), e;
}
closeOperationIfNecessary(e, t) {
if (e.closed) return !0;
const n = function(e, t) {
for (let n = e.length - 1; n >= 0; n--) if (t(e[n])) return n;
return null;
}(this.operations, t => e !== t && [ "preview", "viewChanges" ].includes(t.type) && !t.delayed);
return !!(null !== n && n > this.operations.indexOf(e) || t) && (this.closeOperation(e),
!0);
}
closeOperation(e) {
e.closed = !0, "preview" === e.type && e.auto || this.popPending([ "load", "submit" ].includes(e.type));
}
unregisterOperation(e) {
this.operations.includes(e) && this.operations.splice(this.operations.indexOf(e), 1),
"preview" === e.type && e.auto || this.popPending("submit" === e.type);
}
isBeingSubmitted() {
return this.operations.some(e => "submit" === e.type && !e.closed);
}
preview(e = !0, t = !0, n) {
var i = this;
return o()((function*() {
if (i.operations.some(e => !e.closed && "load" === e.type) || !(i.target instanceof ve) && !i.target.inCode && i.checkCodeRequest && "resolved" === i.checkCodeRequest.state() || i.isBeingSubmitted() || t && !p.settings.autopreview) return void (n && i.closeOperation(n));
const o = n || i.registerOperation({
type: "preview",
auto: t
});
if (t) {
const t = Date.now() - a()(i, ni) < 1e3;
if (t || i.operations.some(e => !e.closed && "preview" === e.type && e !== o)) return void (a()(i, ii) ? i.unregisterOperation(o) : (o.delayed = !0,
u()(i, ii, setTimeout(() => {
u()(i, ii, null), i.preview(e, !0, o);
}, t ? 1e3 - (Date.now() - a()(i, ni)) : 100))));
u()(i, ni, Date.now());
}
if (i.closeOperationIfNecessary(o)) return;
if (!(i.target instanceof ve || i.target.inCode) && (yield i.checkCode(), i.closeOperationIfNecessary(o, !i.target.inCode))) return;
const s = !(i.commentInput.getValue().trim() || i.headlineInput && i.headlineInput.getValue().trim());
if (s && !e) return void i.closeOperation(o);
const {commentCode: r, doImitateList: c} = i.commentTextToCode("preview");
let d, h;
try {
({html: d, parsedSummary: h} = yield oe(r, {
title: i.targetPage.name,
summary: p.util.buildEditSummary({
text: i.summaryInput.getValue()
})
}));
} catch (e) {
return void (e instanceof l ? i.handleError(Object.assign({}, e.data, {
message: p.s("cf-error-preview"),
currentOperation: o
})) : i.handleError({
type: "javascript",
logMessage: e,
currentOperation: o
}));
}
if (!i.closeOperationIfNecessary(o)) {
if (d) {
if (t && s || i.deleteCheckbox && i.deleteCheckbox.isSelected()) i.$previewArea.empty(); else {
const e = $("<div>").addClass("cd-commentForm-blockLabel").text(p.s("cf-block-preview"));
i.$previewArea.html(d).prepend(e).cdAddCloseButton(), c ? i.$previewArea.addClass("cd-previewArea-indentedComment") : i.$previewArea.removeClass("cd-previewArea-indentedComment"),
mw.hook("convenientDiscussions.previewReady").fire(i.$previewArea), t || mw.hook("wikipage.content").fire(i.$previewArea);
}
const e = h && p.util.wrapInElement(h);
e.length && i.$element.find(".cd-summaryPreview").html("".concat(p.s("cf-summary-preview"), ': <span class="comment">').concat(e.html(), "</span>"));
}
p.settings.autopreview && (i.previewButton.$element.hide(), i.viewChangesButton.$element.show(),
i.adjustLabels()), i.$previewArea.hasClass("cd-previewArea-above") && i.$previewArea.cdScrollIntoView("top"),
i.closeOperation(o);
}
}))();
}
viewChanges() {
var e = this;
return o()((function*() {
if (e.isBeingSubmitted()) return;
const t = e.registerOperation({
type: "viewChanges"
}), n = (yield e.tryPrepareNewPageCode("viewChanges")) || {};
if (e.closeOperationIfNecessary(t, void 0 === n)) return;
let i;
mw.loader.load("mediawiki.diff.styles");
try {
const t = {
action: "compare",
toslots: "main",
"totext-main": n,
prop: "diff",
formatversion: 2
};
mw.config.get("wgArticleId") ? t.fromrev = e.targetPage.revisionId : (t.fromslots = "main",
t["fromtext-main"] = ""), i = yield p.g.api.post(t).catch(Ie);
} catch (n) {
return void (n instanceof l ? e.handleError(Object.assign({}, n.data, {
message: p.s("cf-error-viewchanges"),
currentOperation: t
})) : e.handleError({
type: "javascript",
logMessage: n,
currentOperation: t
}));
}
if (e.closeOperationIfNecessary(t)) return;
let o = i && i.compare && i.compare.body;
if (o) {
o = p.util.wrapDiffBody(o);
const t = $("<div>").addClass("cd-commentForm-blockLabel").text(p.s("cf-block-viewchanges"));
e.$previewArea.html(o).prepend(t).cdAddCloseButton();
} else e.$previewArea.empty(), void 0 !== o && e.showMessage(p.s("cf-notice-nochanges"));
p.settings.autopreview && (e.viewChangesButton.$element.hide(), e.previewButton.$element.show(),
e.adjustLabels()), e.$previewArea.cdScrollIntoView(e.$previewArea.hasClass("cd-previewArea-above") ? "top" : "bottom"),
e.closeOperation(t);
}))();
}
reloadPage(e, t) {
var n = this;
return o()((function*() {
n.forget();
try {
yield Dt(e);
} catch (e) {
e instanceof l ? n.handleError(Object.assign({}, e.data, {
message: p.s("error-reloadpage-saved"),
doCancel: !0,
currentOperation: t
})) : n.handleError({
type: "javascript",
logMessage: e,
doCancel: !0,
currentOperation: t
}), Bt();
}
}))();
}
runChecks({doDelete: e}) {
var t = this;
return o()((function*() {
const n = [ {
condition: t.headlineInput && "" === t.headlineInput.getValue(),
confirmation: (u = o()((function*() {
const e = a()(t, ri) === p.s("cf-headline-topic") ? p.s("cf-confirm-noheadline-topic") : p.s("cf-confirm-noheadline-subsection");
return yield OO.ui.confirm(e + " " + p.s("cf-confirm-noheadline-question"));
})), function() {
return u.apply(this, arguments);
})
}, {
condition: !(t.commentInput.getValue().trim() || p.config.noConfirmPostEmptyCommentPageRegexp && p.config.noConfirmPostEmptyCommentPageRegexp.test(p.g.CURRENT_PAGE.name)),
confirmation: (c = o()((function*() {
return yield OO.ui.confirm(p.s("cf-confirm-empty"));
})), function() {
return c.apply(this, arguments);
})
}, {
condition: t.commentInput.getValue().trim().length > p.config.longCommentThreshold,
confirmation: (r = o()((function*() {
return yield OO.ui.confirm(p.s("cf-confirm-long", p.config.longCommentThreshold));
})), function() {
return r.apply(this, arguments);
})
}, {
condition: /^==[^=]/m.test(t.commentInput.getValue()) && "edit" !== t.mode,
confirmation: (s = o()((function*() {
return yield OO.ui.confirm(p.s("cf-confirm-secondlevelheading"));
})), function() {
return s.apply(this, arguments);
})
}, {
condition: e,
confirmation: (i = o()((function*() {
return yield Sn("cf-confirm-delete");
})), function() {
return i.apply(this, arguments);
})
} ];
var i, s, r, c, u;
for (const e of n) if (e.condition && !(yield e.confirmation())) return t.commentInput.focus(),
!1;
return !0;
}))();
}
tryEditPage(e, t, n) {
var i = this;
return o()((function*() {
let o;
try {
o = i.targetPage.edit({
text: t,
summary: p.util.buildEditSummary({
text: i.summaryInput.getValue()
}),
tags: p.config.tagName,
baserevid: e.revisionId,
starttimestamp: e.queryTimestamp,
minor: i.minorCheckbox && i.minorCheckbox.isSelected(),
watchlist: i.watchCheckbox.isSelected() ? "watch" : "unwatch"
});
} catch (e) {
if (e instanceof l) {
const {type: t, details: o} = e.data;
if ("network" === t) i.handleError({
type: t,
message: p.s("cf-error-couldntedit"),
currentOperation: n
}); else {
let e, {code: s, message: r, isRawMessage: a, logMessage: c} = o;
"editconflict" === s && (r += " " + p.s("cf-notice-editconflict-retrying"), e = "notice",
i.submit()), i.handleError({
type: t,
message: r,
messageType: e,
isRawMessage: a,
logMessage: c,
currentOperation: n
});
}
} else i.handleError({
type: "javascript",
logMessage: e,
currentOperation: n
});
return null;
}
return o;
}))();
}
submit() {
var e = this;
return o()((function*() {
if (e.operations.some(e => !e.closed && "load" === e.type)) return;
const t = e.deleteCheckbox && e.deleteCheckbox.isSelected();
if (!(yield e.runChecks({
doDelete: t
}))) return;
const n = e.registerOperation({
type: "submit"
}), i = (yield e.tryPrepareNewPageCode("submit")) || {};
if (void 0 === i) return void e.closeOperation(n);
const o = yield e.tryEditPage(e.targetPage, i, n);
if (!o) return;
let s = {
didSubmitCommentForm: !0
};
if (mw.config.get("wgArticleId") || (mw.config.set("wgArticleId", e.targetPage.pageId),
s.wasPageCreated = !0), e.watchSectionCheckbox) if (e.watchSectionCheckbox.isSelected()) {
const t = a()(e, si) && e.headlineInput.getValue() !== e.originalHeadline;
if ("addSection" === e.mode || "addSubsection" === e.mode || t) {
const n = P(e.headlineInput.getValue());
if (Kn.watchSection(n, {
silent: !0
}), s.justWatchedSection = n, t) {
const t = P(e.originalHeadline);
Kn.unwatchSection(t, {
silent: !0
}), s.justUnwatchedSection = t;
}
} else {
const t = e.targetSection;
t && !t.watched && (t.watch(!0), s.justWatchedSection = t.headline);
}
} else {
const t = e.targetSection;
t && t.watched && (t.unwatch(!0), s.justUnwatchedSection = t.headline);
}
e.watchCheckbox.isSelected() && $("#ca-watch").length && $("#ca-watch").attr("id", "cd-unwatch"),
!e.watchCheckbox.isSelected() && $("#ca-unwatch").length && $("#ca-unwatch").attr("id", "cd-watch"),
t || (s.commentAnchor = "edit" === e.mode ? e.target.anchor : T(new Date(o), p.g.CURRENT_USER_NAME, !0)),
e.reloadPage(s, n);
}))();
}
confirmClose() {
var e = this;
return o()((function*() {
return !e.isAltered() || (yield Sn("cf-confirm-close"));
}))();
}
cancel(e = !0) {
var t = this;
return o()((function*() {
p.util.isPageOverlayOn() || t.isBeingSubmitted() || (!e || (yield t.confirmClose()) ? (t.destroy(),
"reply" === t.mode ? t.target.scrollIntoView("top") : "replyInSection" === t.mode ? (t.target.$replyButton.show(),
t.target.$replyWrapper.removeClass("cd-replyWrapper-hasCommentForm")) : "edit" === t.mode && (t.target.$elements.removeClass("cd-hidden"),
t.target.scrollIntoView("top"), t.target.configureLayers())) : t.commentInput.focus());
}))();
}
destroy() {
this.operations.filter(e => !e.closed).forEach(this.closeOperation.bind(this)),
this.forget(), this.$element.remove(), this.destroyed = !0;
}
forget() {
delete this.target[ci.modeToProperty(this.mode) + "Form"], p.commentForms.includes(this) && p.commentForms.splice(p.commentForms.indexOf(this), 1),
Ht();
}
isAltered() {
return void 0 !== this.originalComment && this.originalComment !== this.commentInput.getValue() || this.autoSummary !== this.summaryInput.getValue() || this.headlineInput && void 0 !== this.originalHeadline && this.originalHeadline !== this.headlineInput.getValue();
}
updateAutoSummary(e = !0, t = !1) {
if (this.summaryAltered) return;
u()(this, oi, t);
const n = this.autoText(), i = this.headlineInput && "addSubsection" !== this.mode ? P(this.headlineInput.getValue()) : a()(this, Qn);
let o;
if ([ "reply", "replyInSection" ].includes(this.mode)) {
const e = this.commentInput.getValue().trim().replace(/\s+/g, " ").replace(/\[\[:?(?:([^|[\]<>\n]+)\|)?(.+?)\]\]/g, (e, t, n) => p.g.USER_NAMESPACE_ALIASES_REGEXP.test(t) ? n : e);
e && e.length <= p.config.summaryCommentTextLengthLimit && (o = ": ".concat(e, " (-)"));
} else if ("addSubsection" === this.mode) {
const e = P(this.headlineInput.getValue());
e && (o = ": /* ".concat(e, " */"));
}
this.autoSummary = p.util.buildEditSummary({
text: n,
section: i,
optionalText: o,
addPostfix: !1
}), e && this.summaryInput.setValue(this.autoSummary);
}
autoText() {
switch (u()(this, ai, a()(this, ai) || this.updateAutoSummary.bind(this)), this.mode) {
case "reply":
return this.target.isOpeningSection ? p.s("es-reply") : (this.target.requestAuthorGenderIfNeeded(a()(this, ai)),
this.target.own ? p.s("es-addition") : Fe(p.s("es-reply-to", this.target.author.name, this.target.author)));
case "edit":
return (e => {
let t, n = this.target;
return this.target.own ? this.target.parent ? 0 === this.target.parent.level ? t = "reply" : (this.target.parent.requestAuthorGenderIfNeeded(a()(this, ai)),
t = this.target.parent.own ? "addition" : "reply-to", n = this.target.parent) : t = this.target.isOpeningSection ? this.targetSection.parent ? "subsection" : "topic" : "comment" : this.target.isOpeningSection ? t = this.targetSection.parent ? "subsection" : "topic" : (this.target.requestAuthorGenderIfNeeded(a()(this, ai)),
t = "comment-by"), Fe(p.s("es-".concat(e, "-").concat(t), n.author.name, n.author));
})(this.deleteCheckbox && this.deleteCheckbox.isSelected() ? "delete" : "edit");
case "replyInSection":
return p.s("es-reply");
case "addSection":
{
let e;
if (this.$addSectionLink) {
const t = new mw.Uri(this.$addSectionLink.attr("href")).query.summary;
e = t && t.replace(/^.+?\*\/ */, "");
}
return e || p.s("es-new-topic");
}
case "addSubsection":
return p.s("es-new-subsection");
}
}
updateFormOnDeleteCheckboxChange(e) {
e ? (this.initialMinorCheckboxSelected = this.minorCheckbox.isSelected(), this.minorCheckbox.setSelected(!1),
this.commentInput.setDisabled(!0), this.headlineInput && this.headlineInput.setDisabled(!0),
this.minorCheckbox.setDisabled(!0), this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!0),
this.$element.addClass("cd-commentForm-disabled"), u()(this, ei, p.s("cf-delete-button")),
u()(this, ti, p.s("cf-delete-button-short")), this.submitButton.clearFlags().setFlags([ "destructive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? a()(this, ei) : a()(this, ti))) : (this.minorCheckbox.setSelected(this.initialMinorCheckboxSelected),
this.commentInput.setDisabled(!1), this.headlineInput && this.headlineInput.setDisabled(!1),
this.minorCheckbox.setDisabled(!1), this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!1),
this.$element.removeClass("cd-commentForm-disabled"), u()(this, ei, p.s("cf-save")),
u()(this, ti, p.s("cf-save-short")), this.submitButton.clearFlags().setFlags([ "progressive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? a()(this, ei) : a()(this, ti)));
}
mention() {
if (!this.autocomplete) return;
const e = this.commentInput.getRange().to, t = e && this.commentInput.getValue().slice(e - 1, e);
e && " " !== t && "\n" !== t && this.commentInput.insertContent(" "), this.commentInput.insertContent("@");
const n = this.commentInput.$input.get(0);
n.dispatchEvent(new Event("keydown")), n.dispatchEvent(new Event("input")), n.dispatchEvent(new Event("keyup"));
}
quote(e = !1) {
const t = De() ? document.activeElement.value.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd) : window.getSelection().toString().trim();
if (t || !e) {
const e = this.commentInput.$input.is(":focus"), n = this.commentInput.getRange(), i = n.to, o = Math.min(n.to, n.from), s = Math.max(n.to, n.from), r = this.commentInput.getValue(), a = p.config.quoteFormatting[0], c = p.config.quoteFormatting[1], u = a + (t || p.s("cf-quote-placeholder")) + c, l = (e ? o : i) + (t ? u.length : a.length), d = t ? l : l + p.s("cf-quote-placeholder").length, h = e ? r.slice(0, o) + u + r.slice(s) : r.slice(0, i) + u + r.slice(i);
this.commentInput.setValue(h), this.commentInput.selectRange(l, d);
}
}
static modeToProperty(e) {
return "replyInSection" === e ? "addReply" : e;
}
static getLastActiveCommentForm() {
return p.commentForms.slice().sort(Jn)[0] || null;
}
static getLastActiveAlteredCommentForm() {
return p.commentForms.slice().sort(Jn).find(e => e.isAltered()) || null;
}
}
var ui = new WeakMap, li = new WeakMap;
function di(e, t) {
const n = new RegExp("[".concat(p.g.LETTER_PATTERN, "]{3,}"), "g"), i = _e(e.match(n)), o = _e(t.match(n));
if (!i || !o) return 0;
let s = o.length, r = 0;
return i.forEach(e => {
o.some(t => t === e) ? r++ : s++;
}), r / s;
}
var hi = new WeakMap, mi = new WeakMap, pi = new WeakMap, gi = new WeakMap, fi = new WeakMap, bi = new WeakMap, yi = new WeakMap, wi = new WeakMap, Ei = new WeakMap, vi = new WeakMap, _i = new WeakMap, Ci = new WeakMap, xi = new WeakMap, Ti = new WeakMap, Ai = new WeakMap, Si = new WeakMap, ki = new WeakMap;
class Ni extends class {
constructor(e, t) {
ui.set(this, {
writable: !0,
value: void 0
}), li.set(this, {
writable: !0,
value: void 0
}), u()(this, ui, e);
let n = a()(this, ui).collectParts(t.element);
n = a()(this, ui).removeNestedParts(n), n = a()(this, ui).encloseInlineParts(n, t.element),
n = a()(this, ui).filterParts(n), n.reverse(), n = a()(this, ui).replaceListsWithItems(n, t.element),
this.id = p.comments.length, this.date = t.date || null, this.timestamp = t.timestampText,
this.authorName = t.authorName, this.own = this.authorName === p.g.CURRENT_USER_NAME,
this.anchor = t.anchor, this.unsigned = t.unsigned, this.parts = n, this.elements = this.parts.map(e => e.node);
if (this.highlightables = this.elements.filter(e => !/^H[1-6]$/.test(e.tagName) && !p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(t => e.classList.contains(t)) && !/float: *(?:left|right)/.test(e.getAttribute("style"))),
!this.highlightables.length) throw new l;
if (this.addAttributes(), this.setLevels(), this.parts[0].isHeading ? (this.followsHeading = !0,
0 !== this.level && (this.parts.splice(0, 1), this.elements.splice(0, 1))) : this.followsHeading = !0,
this.parts[0].isHeading) {
this.isOpeningSection = !0;
const e = this.parts[0].node.tagName.match(/^H([1-6])$/);
this.openingSectionOfLevel = e && Number(e[1]);
} else this.isOpeningSection = !1;
}
addAttributes() {
this.anchor && !this.elements[0].getAttribute("id") && this.elements[0].setAttribute("id", this.anchor),
this.elements[0].classList.add("cd-commentPart-first"), this.elements[this.elements.length - 1].classList.add("cd-commentPart-last"),
this.elements.forEach(e => {
e.classList.add("cd-commentPart"), e.setAttribute("data-comment-id", String(this.id));
});
}
setLevels() {
const e = {};
e.top = a()(this, ui).getLevelsUpTree(this.highlightables[0]), e.bottom = this.highlightables.length > 1 ? a()(this, ui).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : e.top,
this.level = Math.min(e.top.length, e.bottom.length);
for (let t = 0; t < this.level; t++) e.top[t] && e.top[t].classList.add("cd-commentLevel", "cd-commentLevel-".concat(t + 1)),
e.bottom[t] && e.bottom[t] !== e.top[t] && e.bottom[t].classList.add("cd-commentLevel", "cd-commentLevel-".concat(t + 1));
}
getSection() {
return p.sections.slice().reverse().find(e => e.comments.includes(this)) || null;
}
get section() {
return void 0 === a()(this, li) && u()(this, li, this.getSection()), a()(this, li);
}
get sourcePage() {
return this.section ? this.section.sourcePage : p.g.CURRENT_PAGE;
}
} {
constructor(e, t) {
super(e, t), hi.set(this, {
writable: !0,
value: void 0
}), mi.set(this, {
writable: !0,
value: void 0
}), pi.set(this, {
writable: !0,
value: void 0
}), gi.set(this, {
writable: !0,
value: void 0
}), fi.set(this, {
writable: !0,
value: void 0
}), bi.set(this, {
writable: !0,
value: void 0
}), yi.set(this, {
writable: !0,
value: void 0
}), wi.set(this, {
writable: !0,
value: void 0
}), Ei.set(this, {
writable: !0,
value: void 0
}), vi.set(this, {
writable: !0,
value: void 0
}), _i.set(this, {
writable: !0,
value: void 0
}), Ci.set(this, {
writable: !0,
value: void 0
}), xi.set(this, {
writable: !0,
value: void 0
}), Ti.set(this, {
writable: !0,
value: void 0
}), Ai.set(this, {
writable: !0,
value: void 0
}), Si.set(this, {
writable: !0,
value: void 0
}), ki.set(this, {
writable: !0,
value: void 0
}), u()(this, hi, p.g.COMMENT_ELEMENT_PROTOTYPES), this.author = b.getUser(this.authorName),
delete this.authorName, this.signatureElement = t.element, this.timestampElement = t.timestampElement,
this.actionable = p.g.isPageActive && !p.g.specialElements.closedDiscussions.some(e => e.contains(this.elements[0])),
this.highlightables.forEach(e => {
this.bindEvents(e);
});
}
bindEvents(e) {
e.onmouseenter = this.highlightFocused.bind(this), e.onmouseleave = this.unhighlightFocused.bind(this),
e.ontouchstart = this.highlightFocused.bind(this);
}
getPositions(e = {}) {
if (void 0 === e.considerFloating && (e.considerFloating = !1), this.positions = null,
this.editForm) return;
let t = e.rectTop || this.highlightables[0].getBoundingClientRect(), n = e.rectBottom || (1 === this.elements.length ? t : this.highlightables[this.highlightables.length - 1].getBoundingClientRect());
if (0 === t.left) return;
const i = window.pageYOffset + t.top, o = window.pageYOffset + n.bottom;
if (e.considerFloating) {
const i = (e.floatingRects || p.g.specialElements.floating.map(e => {
const t = e.getBoundingClientRect();
return {
top: t.top - Number(e.getAttribute("data-margin-top")),
bottom: t.bottom + Number(e.getAttribute("data-margin-bottom"))
};
})).some(e => {
const t = window.pageYOffset + e.top, n = window.pageYOffset + e.bottom;
return o > t && o < n + p.g.REGULAR_LINE_HEIGHT;
}), s = [];
if (i) for (let e = 0; e < this.elements.length; e++) s[e] = this.elements[e].style.overflow,
this.elements[e].style.overflow = "hidden";
if (t = this.highlightables[0].getBoundingClientRect(), n = 1 === this.elements.length ? t : this.highlightables[this.highlightables.length - 1].getBoundingClientRect(),
i) for (let e = 0; e < this.elements.length; e++) this.elements[e].style.overflow = s[e];
}
const s = window.pageXOffset + Math.min(t.left, n.left), r = window.pageXOffset + Math.max(t.right, n.right), a = o - i > window.innerHeight - 200 ? i + (window.innerHeight - 200) : o;
this.positions = {
top: i,
bottom: o,
left: s,
right: r,
downplayedBottom: a
};
}
calculateLayersPositions(e = {}) {
if (this.getPositions(Object.assign({}, e, {
considerFloating: !0
})), !this.positions) return null;
u()(this, mi, this.highlightables[0].offsetWidth);
const t = this.getLayersContainerOffset();
return {
underlayTop: -t.top + this.positions.top,
underlayLeft: -t.left + this.positions.left - p.g.COMMENT_UNDERLAY_SIDE_MARGIN,
underlayWidth: this.positions.right - this.positions.left + 2 * p.g.COMMENT_UNDERLAY_SIDE_MARGIN,
underlayHeight: this.positions.bottom - this.positions.top
};
}
createLayers() {
u()(this, pi, a()(this, hi).underlay.cloneNode(!0)), this.newness && a()(this, pi).classList.add("cd-commentUnderlay-new"),
p.settings.highlightOwnComments && this.own && a()(this, pi).classList.add("cd-commentUnderlay-own"),
a()(this, pi).cdTarget = this, Ve.underlays.push(a()(this, pi)), u()(this, wi, a()(this, hi).overlay.cloneNode(!0)),
u()(this, Ei, a()(this, wi).firstChild), a()(this, Ei).oncontextmenu = e => {
e.preventDefault(), a()(this, wi).style.display = "none";
}, u()(this, _i, a()(this, Ei).firstChild), u()(this, vi, a()(this, Ei).lastChild),
this.parent && (this.goToParentButton = a()(this, hi).goToParentButton.cloneNode(!0),
this.goToParentButton.firstChild.onclick = () => {
this.goToParent();
}, a()(this, vi).appendChild(this.goToParentButton)), !this.anchor || p.g.IS_ARCHIVE_PAGE && "diff" === p.settings.defaultCommentLinkType || (this.linkButton = a()(this, hi).linkButton.cloneNode(!0),
this.linkButton.firstChild.onclick = this.copyLink.bind(this), a()(this, vi).appendChild(this.linkButton)),
this.author.registered && this.date && !this.own && !p.g.IS_ARCHIVE_PAGE && (this.thankButton = a()(this, hi).thankButton.cloneNode(!0),
this.thankButton.firstChild.onclick = () => {
this.thank();
}, a()(this, vi).appendChild(this.thankButton)), this.actionable && ((this.own || p.settings.allowEditOthersComments) && (this.editButton = a()(this, hi).editButton.cloneNode(!0),
this.editButton.firstChild.onclick = () => {
this.edit();
}, a()(this, vi).appendChild(this.editButton)), this.replyButton = a()(this, hi).replyButton.cloneNode(!0),
this.replyButton.firstChild.onclick = () => {
this.replyForm ? this.replyForm.cancel() : this.reply();
}, a()(this, vi).appendChild(this.replyButton)), this.$underlay = $(a()(this, pi)),
this.$overlay = $(a()(this, wi)), this.$overlayContent = $(a()(this, vi)), this.$overlayGradient = $(a()(this, _i)),
mw.hook("convenientDiscussions.commentLayersCreated").fire(this);
}
configureLayers(e = !0, t) {
if (this.editForm) return null;
const n = {
doSet: e,
floatingRects: t
};
n.rectTop = this.highlightables[0].getBoundingClientRect(), n.rectBottom = 1 === this.elements.length ? n.rectTop : this.highlightables[this.highlightables.length - 1].getBoundingClientRect();
const i = this.getLayersContainerOffset(), o = a()(this, pi) && (-i.top + window.pageYOffset + n.rectTop.top !== a()(this, gi) || n.rectBottom.bottom - n.rectTop.top !== a()(this, yi) || this.highlightables[0].offsetWidth !== a()(this, mi));
if (!a()(this, pi) || o) {
const e = this.calculateLayersPositions(n);
e && (u()(this, gi, e.underlayTop), u()(this, fi, e.underlayLeft), u()(this, bi, e.underlayWidth),
u()(this, yi, e.underlayHeight));
}
return void 0 === a()(this, fi) ? null : a()(this, pi) ? (this.newness && !a()(this, pi).classList.contains("cd-commentUnderlay-new") && a()(this, pi).classList.add("cd-commentUnderlay-new"),
o && n.doSet && this.updateLayersPositions(), o) : (this.createLayers(), n.doSet && this.addLayers(),
!1);
}
addLayers() {
a()(this, pi) && (this.updateLayersPositions(), this.getLayersContainer().appendChild(a()(this, pi)),
this.getLayersContainer().appendChild(a()(this, wi)));
}
updateLayersPositions() {
a()(this, pi).style.top = a()(this, wi).style.top = a()(this, gi) + "px", a()(this, pi).style.left = a()(this, wi).style.left = a()(this, fi) + "px",
a()(this, pi).style.width = a()(this, wi).style.width = a()(this, bi) + "px", a()(this, pi).style.height = a()(this, wi).style.height = a()(this, yi) + "px";
}
highlightFocused() {
p.util.isPageOverlayOn() || !this.configureLayers() && a()(this, pi) && (a()(this, pi).classList.add("cd-commentUnderlay-focused"),
a()(this, wi).classList.add("cd-commentOverlay-focused"));
}
unhighlightFocused() {
a()(this, pi) && (a()(this, pi).classList.remove("cd-commentUnderlay-focused"),
a()(this, wi).classList.remove("cd-commentOverlay-focused"), a()(this, wi).style.display = "");
}
highlightTarget() {
if (this.configureLayers(), !this.$underlay) return;
const e = this.$underlay.add(this.$overlayContent).add(this.$overlayGradient).css("background-image", "none").css("background-color", "");
let t = window.getComputedStyle(this.$underlay.get(0)).backgroundColor;
"rgba(0, 0, 0, 0)" === t && this.backgroundColor && (t = this.backgroundColor),
this.$underlay.addClass("cd-commentUnderlay-target");
const n = window.getComputedStyle(this.$underlay.get(0)).backgroundColor;
this.$underlay.removeClass("cd-commentUnderlay-target"), e.stop().css("background-color", n),
clearTimeout(a()(this, Ci)), u()(this, Ci, setTimeout(() => {
this.newness && (t = p.g.COMMENT_UNDERLAY_NEW_COLOR), e.animate({
backgroundColor: t
}, 400, "swing", (function() {
$(this).css("background-image", "").css("background-color", "");
}));
}, 1500));
}
scrollIntoView(e) {
(this.editForm ? this.editForm.$element : this.$elements).cdScrollIntoView(e);
}
scrollToAndHighlightTarget(e = !0) {
(this.editForm ? this.editForm.$element : this.$elements).cdScrollIntoView(this.isOpeningSection || this.editForm ? "top" : "center", e),
this.highlightTarget();
}
replaceButton(e, t, n) {
a()(this, vi).insertBefore(t, e), e.parentNode.removeChild(e), this[n + "Button"] = t;
}
goToParent() {
if (!this.parent) return void console.error("This comment has no parent.");
this.parent.scrollToAndHighlightTarget("center");
const e = new OO.ui.ButtonWidget({
label: p.s("cm-gotochild"),
title: p.s("cm-gotochild-tooltip"),
framed: !1,
classes: [ "cd-button", "cd-commentButton" ]
});
e.on("click", () => {
this.parent.goToChild();
}), this.parent.configureLayers(), this.parent.goToChildButton && this.parent.goToChildButton.$element.remove(),
this.parent.$overlayContent.prepend(e.$element), this.parent.goToChildButton = e,
this.parent.childToScrollBackTo = this;
}
goToChild() {
this.childToScrollBackTo ? this.childToScrollBackTo.scrollToAndHighlightTarget("center") : console.error("This comment has no child from which the user had navigated earlier.");
}
copyLink(e) {
const t = this.linkButton;
this.replaceButton(this.linkButton, a()(this, hi).pendingLinkButton.cloneNode(!0), "link"),
Dn(this, e.shiftKey, () => {
this.replaceButton(this.linkButton, t, "link");
});
}
findAddingEdit(e = !1, t = !1) {
var n = this;
return o()((function*() {
if (e && n.addingEditOneTimestamp) return n.addingEditOneTimestamp;
if (!e && n.addingEdit) return n.addingEdit;
const i = new Date(n.date.getTime() - 2 * p.g.MILLISECONDS_IN_A_MINUTE).toISOString(), o = new Date(n.date.getTime() + 2 * p.g.MILLISECONDS_IN_A_MINUTE).toISOString(), s = p.g.api.get({
action: "query",
titles: n.sourcePage,
prop: "revisions",
rvprop: [ "ids", "flags", "comment", "timestamp" ],
rvdir: "newer",
rvstart: i,
rvend: o,
rvuser: n.author.name,
rvlimit: 500,
redirects: !0,
formatversion: 2
}).catch(Ie);
let [r] = yield Promise.all([ s, t && n.author.registered ? we([ n.author ]) : void 0 ].filter(ke));
const a = r && r.query && r.query.pages && r.query.pages[0] && r.query.pages[0].revisions;
if (!a) throw new l({
type: "api",
code: "noData"
});
const c = a.map(e => p.g.api.get({
action: "compare",
fromtitle: n.sourcePage,
fromrev: e.revid,
torelative: "prev",
prop: "diff|diffsize",
formatversion: 2
}).catch(Ie)), u = yield Promise.all(c), d = /<td colspan="2" class="diff-empty"> <\/td>\s*<td class="diff-marker">\+<\/td>\s*<td class="diff-addedline"><div>(?!=)(.+?)<\/div><\/td>\s*<\/tr>/g, h = n.getText(!1) + " ".concat(n.signatureElement.innerText);
let m;
if (u.map((e, t) => {
const i = e && e.compare && e.compare.body;
if (!i) return null;
let o, s = "", r = 0;
for (;o = d.exec(i); ) {
const e = P(R(o[1])), t = di(e, h);
t > .66 && (!r || t > r) && (r = t), s += e + "\n";
}
if (s = s.trim(), !s) return null;
a[t].diffBody = i;
const c = new Date(a[t].timestamp).getTime(), u = n.date.getTime() + 3e4, l = di(s, h), m = s.match(p.g.TIMEZONE_REGEXP);
return {
revision: a[t],
overlap: Math.max(r, l),
dateProximity: Math.abs(u - c),
minor: a[t].minor,
moreThanOneTimestamp: s.includes("\n") && m && m.length > 1
};
}).filter(Ne).forEach(e => {
e.overlap < .66 || ((!m || e.overlap > m.overlap) && (m = e), m && e.overlap === m.overlap && (e.dateProximity > m.dateProximity && (m = e),
e.dateProximity === m.dateProximity && !e.minor && m.minor && (m = e)));
}), e && m && m.moreThanOneTimestamp) throw new l({
type: "parse",
code: "moreThanOneTimestamp",
data: {
edit: m.revision
}
});
if (!m) throw new l({
type: "parse"
});
const g = m.revision;
return e ? n.addingEditOneTimestamp = g : n.addingEdit = g, g;
}))();
}
getDiffLink() {
var e = this;
return o()((function*() {
const t = yield e.findAddingEdit(), n = decodeURI(p.g.CURRENT_PAGE.getUrl({
diff: t.revid
}));
return "https:".concat(mw.config.get("wgServer")).concat(n);
}))();
}
thankFail(e, t) {
const {type: n, code: i, data: o} = e.data;
let s;
switch (n) {
case "parse":
if ("moreThanOneTimestamp" === i) {
const e = this.sourcePage.getUrl({
diff: o.edit.revid
});
return s = p.util.wrapInElement(p.s("thank-error-multipletimestamps", e)), void OO.ui.alert(s);
}
{
const e = this.sourcePage.getUrl({
action: "history"
});
s = p.s("error-diffnotfound") + " " + p.s("error-diffnotfound-history", e);
}
break;
case "api":
default:
if ("noData" === i) {
const e = this.sourcePage.getUrl({
action: "history"
});
s = p.s("error-diffnotfound") + " " + p.s("error-diffnotfound-history", e);
} else s = p.s("thank-error"), console.warn(e);
break;
case "network":
s = p.s("error-diffnotfound") + " " + p.s("error-network");
}
mw.notify(p.util.wrapInElement(s), {
type: "error"
}), this.replaceButton(this.thankButton, t, "thank");
}
thank() {
var e = this;
return o()((function*() {
const t = e.thankButton;
let n;
e.replaceButton(e.thankButton, a()(e, hi).pendingThankButton.cloneNode(!0), "thank");
try {
n = yield e.findAddingEdit(!0, p.g.GENDER_AFFECTS_USER_STRING);
} catch (n) {
return void e.thankFail(n, t);
}
mw.loader.load("mediawiki.diff.styles");
const i = e.sourcePage.getUrl({
diff: n.revid
}), o = p.util.wrapInElement(p.s("thank-confirm", e.author.name, e.author, i), "div"), s = $("<div>").append(o, p.util.wrapDiffBody(n.diffBody));
if (yield OO.ui.confirm(s, {
size: "larger"
})) {
try {
yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser({
action: "thank",
rev: n.revid,
source: p.config.scriptCodeName
})).catch(Ie);
} catch (n) {
return void e.thankFail(n, t);
}
mw.notify(p.s("thank-success")), e.replaceButton(e.thankButton, a()(e, hi).disabledThankButton.cloneNode(!0), "thank");
} else e.replaceButton(e.thankButton, t, "thank");
}))();
}
locateInCode(e) {
this.inCode = null;
const t = this.searchInCode(e);
let n;
if (t.forEach(e => {
(e.overlap > .66 || 0 === this.id && e.previousCommentsMatched && e.headlineMatched) && (!n || e.overlap > n.overlap || !n.headlineMatched && e.headlineMatched || n.headlineMatched === e.headlineMatched && !n.previousCommentMatched && e.previousCommentMatched) && (n = e);
}), n || (n = t.find(e => 0 !== this.id && e.previousCommentsMatched)), !n) throw new l({
type: "parse",
code: "locateComment"
});
this.inCode = this.adjustCommentCodeData(n);
}
reply(e) {
this.replyForm || (this.replyForm = e instanceof ci ? e : new ci({
mode: "reply",
target: this,
dataToRestore: e
}));
}
edit(e) {
this.editForm || (this.editForm = e instanceof ci ? e : new ci({
mode: "edit",
target: this,
dataToRestore: e
})), this.$elements.addClass("cd-hidden"), this.removeLayers();
}
codeToText() {
if (!this.inCode) return void console.error("The Comment#inCode property should contain an object with the comment code data.");
let e, {code: t, indentationChars: n} = this.inCode;
if (void 0 === t || void 0 === n) return void console.error('No "code" or "indentationChars" property is set for Comment#inCode.');
({code: t, hidden: e} = B(t));
let i = t;
if (0 === this.level) {
const e = new RegExp("^(?:\\x01.+?\\x02|\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\]\\]) *$"), "i"), t = new RegExp("(?:<".concat(p.g.PNIE_PATTERN, "(?: [\\w ]+?=[^<>]+?| ?\\/?)>|<\\/").concat(p.g.PNIE_PATTERN, ">|\\x04) *$"), "i"), n = new RegExp("^(?:<\\/".concat(p.g.PNIE_PATTERN, ">|<").concat(p.g.PNIE_PATTERN, ")"), "i");
i = i.replace(/^((?![:*#= ]).+)\n(?![\n:*#= \x03])(?=(.*))/gm, (i, o, s) => o + (e.test(o) || e.test(s) || t.test(o) || n.test(s) ? "\n" : " "));
}
if (i = i.replace(/^(?![:*# ]).*<br[ \n]*\/?>.*$/gim, e => e.replace(/<br[ \n]*\/?>\n? */gi, () => "\n")).replace(/\n([:*#]*[:*])([ \t]*)/g, (e, t, i) => {
const o = t.slice(n.length);
return "\n" + (t.length >= n.length ? o + (t.length > n.length ? i : "") : t + i);
}), i = Ue(i, e), p.config.paragraphTemplates.length) {
const e = p.config.paragraphTemplates.map(xe).join("|"), t = "\\{\\{(?:".concat(e, ")\\}\\}"), n = new RegExp(t, "g"), o = new RegExp("^(?![:*#]).*".concat(t), "gm");
i = i.replace(o, e => e.replace(n, "\n\n"));
}
return i.trim();
}
getCode() {
var e = this;
return o()((function*() {
try {
yield e.sourcePage.getCode(), e.locateInCode(e.sourcePage.code);
} catch (e) {
throw e instanceof l ? new l(Object.assign({}, {
message: p.s("cf-error-getpagecode")
}, e.data)) : e;
}
return {
commentText: e.codeToText(),
headline: e.inCode.headlineCode
};
}))();
}
registerSeen(e, t = !1) {
if ("unseen" === this.newness && (this.newness = "new", gn.decrementUnseenCommentCount(),
t && this.highlightTarget()), e && !gn.areAllCommentsSeen()) {
const n = p.comments[this.id + ("forward" === e ? 1 : -1)];
n && n.isInViewport(!0) && n.registerSeen(e, t);
}
}
isInViewport(e = !1, t = !1) {
const n = window.pageYOffset, i = n + window.innerHeight;
return !e && this.positions || this.getPositions(), this.positions ? t ? this.positions.downplayedBottom > n && this.positions.top < i : this.positions.top >= n && this.positions.downplayedBottom <= i : null;
}
removeLayers() {
a()(this, pi) && (Ve.underlays.splice(Ve.underlays.indexOf(a()(this, pi)), 1), a()(this, pi).parentElement.removeChild(a()(this, pi)),
u()(this, pi, null), this.$underlay = null, a()(this, wi).parentElement.removeChild(a()(this, wi)),
u()(this, wi, null), this.$overlay = null);
}
get $elements() {
return void 0 === a()(this, xi) && u()(this, xi, $(this.elements)), a()(this, xi);
}
get text() {
return void 0 === a()(this, Ti) && u()(this, Ti, this.getText()), a()(this, Ti);
}
get parent() {
return void 0 === a()(this, Ai) && u()(this, Ai, this.getParent()), a()(this, Ai);
}
getParent() {
let e = this.level;
if (p.g.specialElements.pageHasOutdents) {
const e = new qe(this.elements[0]);
let t;
for (;!t && e.previousNode() && !e.currentNode.classList.contains("cd-commentPart"); ) t = e.currentNode.classList.contains("outdent-template");
if (t && p.comments[this.id - 1]) return p.comments[this.id - 1];
}
return 0 === e ? null : p.comments.slice(0, this.id).reverse().find(t => t.section === this.section && t.level < e) || null;
}
getText(e = !0) {
const t = this.$elements.not("h1, h2, h3, h4, h5, h6").clone().removeClass("cd-hidden"), n = $("<div>").append(t), i = [ ".cd-signature", p.config.unsignedClass ? ".".concat(p.config.unsignedClass) : void 0 ].filter(ke).join(", ");
n.find(i).remove();
let o = n.cdGetText();
return e && (p.config.signatureEndingRegexp && (o = o.replace(p.config.signatureEndingRegexp, "")),
p.config.signaturePrefixRegexp && (o = o.replace(p.config.signaturePrefixRegexp, ""))),
o;
}
adjustCommentBeginning({code: e, startIndex: t}) {
let n = "", i = t;
const o = e.match(/(^[^]*(?:^|\n))((=+)(.*?)\2[ \t]*(?:<!--[^]*?-->[ \t]*)*\n)/);
let s, r, a, c;
if (o && (s = o[2], r = t + o[1].length, a = o[3].length, c = o[4].trim(), t += o[0].length,
e = e.slice(o[0].length)), p.config.signatureEndingRegexp) {
const n = new RegExp(p.config.signatureEndingRegexp.source, "m"), o = /^(.+)\n/gm;
let s, r;
for (;s = o.exec(e); ) if (n.test(P(s[1]))) {
const t = s.index + s[0].length;
if (t === e.length) break;
r = t;
}
r && (e = e.slice(r), i += r, t += r);
}
if (this.level > 0) {
const o = (e, o, s) => (n = s, i += o.length, t += e.length, "");
e = e.replace(new RegExp("^()".concat(p.config.indentationCharsPattern)), o), "" === n && (e = e.replace(new RegExp("(^[^]*?(?:^|\n))".concat(p.config.indentationCharsPattern, "(?![^]*\\n[^:*#])")), o));
}
return p.g.BAD_COMMENT_BEGINNINGS.forEach(n => {
"^" !== n.source[0] && console.debug('Regexps in cd.config.customBadCommentBeginnings should have "^" as the first character.');
const i = e.match(n);
i && (t += i[0].length, e = e.slice(i[0].length));
}), {
code: e,
startIndex: t,
lineStartIndex: i,
headingMatch: o,
headingCode: s,
headingStartIndex: r,
headingLevel: a,
headlineCode: c,
indentationChars: n
};
}
adjustCommentCodeData(e) {
const t = Object.assign({}, e), n = e => (t.signatureDirtyCode = e + t.signatureDirtyCode,
t.endIndex -= e.length, "");
this.own && p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP && (t.code = t.code.replace(p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP, n));
const i = new RegExp("(<".concat(p.g.PIE_PATTERN, "(?: [\\w ]+?=[^<>]+?)?> *)+$"), "i");
var o;
t.code = (o = t.code, [ p.config.signaturePrefixRegexp, i, p.config.signaturePrefixRegexp, i, /<small class="autosigned">.*$/, /<!-- *Template:Unsigned.*$/, p.config.signaturePrefixRegexp ].forEach(e => {
o = o.replace(e, n);
}), o);
const s = [ {
start: /^<small>/,
end: /<\/small>[ \u00A0\t]*$/
} ];
if (p.config.blockSmallTemplate && s.push({
start: new RegExp("^(?:\\{\\{".concat(p.config.blockSmallTemplate, "\\|1=)")),
end: /\}\}[ \u00A0\t]*$/
}), t.signatureCode = t.signatureDirtyCode, t.inSmallFont = !1, s.some(e => {
if (e.start.test(t.code) && e.end.test(t.signatureCode)) return t.inSmallFont = !0,
t.code = t.code.replace(e.start, ""), t.signatureCode = t.signatureCode.replace(e.end, ""),
!0;
}), t.replyIndentationChars = t.indentationChars, !this.isOpeningSection) {
const e = t.code.match(/\n([:*#]*[:*]).*$/);
if (e && (t.replyIndentationChars = e[1], t.replyIndentationChars.length < t.indentationChars.length)) {
const e = t.indentationChars.slice(t.replyIndentationChars.length) + " ";
t.code = e + t.code, t.indentationChars = t.indentationChars.slice(0, t.replyIndentationChars.length),
t.startIndex -= e.length;
}
}
return t.replyIndentationChars += p.config.defaultIndentationChar, t;
}
searchInCode(e) {
const t = M(e), n = t.filter(e => e.author === this.author && (this.timestamp === e.timestamp || this.timestamp && this.timestamp.startsWith(e.timestamp)));
const i = p.comments.slice(Math.max(0, this.id - 2), this.id).reverse(), o = n.map(e => ({
id: e.id,
author: e.author,
timestamp: e.timestamp,
date: e.date,
anchor: e.anchor,
signatureDirtyCode: e.dirtyCode,
startIndex: e.commentStartIndex,
endIndex: e.startIndex
}));
return o.forEach(n => {
if (n.code = e.slice(n.startIndex, n.endIndex), i.length) for (let e = 0; e < i.length; e++) {
const o = t[n.id - 1 - e];
if (n.previousCommentsMatched = o && o.timestamp === i[e].timestamp && o.author === i[e].author,
0 === e && (n.previousCommentMatched = n.previousCommentsMatched), !n.previousCommentsMatched) break;
} else n.previousCommentsMatched = 0 === n.id, n.previousCommentMatched = 0 === n.id;
Object.assign(n, this.adjustCommentBeginning(n)), n.headlineMatched = this.followsHeading ? n.headingMatch && this.section && this.section.headline && L(P(n.headlineCode)) === L(this.section.headline) : !n.headingMatch;
const o = P(n.code);
n.overlap = di(this.text, o);
}), o;
}
modifyCode(e, {action: t, doDelete: n, commentCode: i, commentForm: o}) {
let s, r, a;
if ("reply" === t) {
s = this.inCode.endIndex;
const t = new RegExp("^([^]*?(?:" + mw.util.escapeRegExp(this.inCode.signatureCode) + "|" + p.g.TIMESTAMP_REGEXP.source + ".*)\\n)\\n*" + (this.inCode.indentationChars.length > 0 ? "[:*#]{0,".concat(this.inCode.indentationChars.length, "}") : "") + "(?![:*#])"), [, n] = t.exec(e.slice(s)) || [];
if (void 0 === n) throw new l({
type: "parse",
code: "findPlace"
});
const [, i] = n.match(/\n([:*#]{2,}).*\n$/) || [];
if (i && (this.inCode.replyIndentationChars = i.slice(0, this.inCode.replyIndentationChars.length).replace(/:$/, p.config.defaultIndentationChar)),
/\n=+.*?\1[ \t]*\n/.test(O(n))) throw new l({
type: "parse",
code: "findPlace-unexpectedHeading"
});
s += n.length;
}
switch (i || !o || n || ({commentCode: i} = o.commentTextToCode("submit")), t) {
case "reply":
a = e.slice(0, s), r = a + i + e.slice(s);
break;
case "edit":
if (n) {
let t, n;
if (this.isOpeningSection && void 0 !== this.inCode.headingStartIndex) {
if (this.section.locateInCode(e), M(this.section.inCode.code).length > 1) throw new l({
type: "parse",
code: "delete-repliesInSection"
});
({startIndex: t, contentEndIndex: n} = this.section.inCode);
} else {
n = this.inCode.endIndex + this.inCode.signatureDirtyCode.length + 1;
const i = e.slice(this.inCode.endIndex);
if (new RegExp("^.+\\n+[:*#]{".concat(this.inCode.indentationChars.length + 1, ",}")).exec(i)) throw new l({
type: "parse",
code: "delete-repliesToComment"
});
t = this.inCode.lineStartIndex;
}
r = e.slice(0, t) + e.slice(n);
} else {
const t = this.isOpeningSection && void 0 !== this.inCode.headingStartIndex ? this.inCode.headingStartIndex : this.inCode.lineStartIndex;
a = e.slice(0, t), r = a + i + e.slice(this.inCode.endIndex + this.inCode.signatureDirtyCode.length);
}
}
return {
newPageCode: r,
codeBeforeInsertion: a,
commentCode: i
};
}
getLayersContainer() {
if (void 0 === a()(this, Si)) {
let e;
const t = new $e(document.body, null, !0, this.elements[0]);
for (;t.parentNode(); ) {
let n = t.currentNode.cdStyle;
if (n || (n = window.getComputedStyle(t.currentNode), t.currentNode.cdStyle = n),
[ "absolute", "relative" ].includes(n.position)) {
e = t.currentNode;
break;
}
const i = n.backgroundColor;
if (i.includes("rgb(")) {
this.backgroundColor = i, e = t.currentNode, e.classList.add("cd-commentLayersContainerParent");
break;
}
}
e || (e = document.body);
let n = e.firstElementChild;
n.classList.contains("cd-commentLayersContainer") || (n = document.createElement("div"),
n.classList.add("cd-commentLayersContainer"), e.insertBefore(n, e.firstChild)),
u()(this, Si, n), Ve.layersContainers.includes(n) || Ve.layersContainers.push(n);
}
return a()(this, Si);
}
getLayersContainerOffset() {
let e, t = this.getLayersContainer(), n = 0, i = 0;
for (;e = t.offsetParent; ) n += e.offsetTop, i += e.offsetLeft, t = e;
return {
top: n,
left: i
};
}
requestAuthorGenderIfNeeded(e, t = !1) {
if (p.g.GENDER_AFFECTS_USER_STRING && this.author.registered && null === this.author.gender) {
let t;
u()(this, ki, a()(this, ki) || []), this.genderRequest || (this.genderRequest = we([ this.author ]),
t = e => {
console.warn("Couldn't get the gender of user ".concat(this.author.name, "."), e);
}), a()(this, ki).includes(e) || (this.genderRequest.then(e, t), a()(this, ki).push(e));
} else t && setTimeout(e);
}
static configureAndAddLayers(e) {
let t;
e.forEach(e => {
t = t || p.g.specialElements.floating.map(e => e.getBoundingClientRect()), e.configureLayers(!1, t);
}), e.forEach(e => {
e.addLayers();
});
}
static findInViewport(e) {
const t = window.pageYOffset, n = t + window.innerHeight, i = e => (e.getPositions(),
Boolean(e.positions)), o = (e, t = 0) => Oe(p.comments, t, "backward" === e).find(i) || null, s = o("forward"), r = o("backward", p.comments.length - 1);
if (!s) return null;
let a, c = {
top: s,
bottom: r
}, u = c.top;
const l = (e, t, n = !1) => "forward" === e ? o(e, n ? t.top.id : t.bottom.id) : "backward" === e ? o(e, n ? t.bottom.id : t.top.id) : null;
for (let i = 0; i < p.comments.length; i++) {
if (u.isInViewport(!0)) {
a = u;
break;
}
if (u.positions && u === s && n < u.positions.downplayedBottom || u === r && t > u.positions.top) {
a = l(e, c, !0);
break;
}
if (c.top === c.bottom) {
a = l(e, c);
break;
}
if (u.positions) if (u === s) u = c.bottom; else {
if (c[t > u.positions.top ? "top" : "bottom"] = u, c.bottom.id - c.top.id <= 1) {
a = l(e, c);
break;
}
const i = c.top.positions.top, o = (t - i) / (c.bottom.positions.downplayedBottom - n + (t - i));
(o < 0 || o >= 1) && console.warn("The proportion shouldn't be more than 0 or less or equal to 1.", "proportion", o, "searchArea", c),
u = p.comments[Math.round((c.bottom.id - c.top.id - 1) * o + c.top.id + .5)];
} else u = p.comments[c.top.id + 1], c.top = u;
}
return a || null;
}
static getCommentByAnchor(e) {
return p.comments && e && p.comments.find(t => t.anchor === e) || null;
}
}
var Oi = n(12), Ii = n.n(Oi);
let Pi, Li, Fi, Mi, Ri, Bi, Di, ji, Hi, Ui, Yi = !0;
function $i(e) {
return qi.apply(this, arguments);
}
function qi() {
return (qi = o()((function*({messagesRequest: e}) {
p.g.api = p.g.api || new mw.Api;
const t = Q(!0).catch(e => {
console.warn("Couldn't load the settings from the server.", e);
});
let n;
e = e || wt();
try {
[n] = yield Promise.all([ t, e ]);
} catch (e) {
throw [ "Couldn't load the messages required for the script.", e ];
}
({watchedSections: ji, thisPageWatchedSections: Hi} = n || {}), vt(), p.g.nanoCss = Object(s.create)(),
p.g.nanoCss.put(".cd-commentLink-innerWrapper", {
"::before": {
content: '"'.concat(mw.msg("parentheses-start"), '"')
},
"::after": {
content: '"'.concat(mw.msg("parentheses-end"), '"')
}
}), p.g.CURRENT_PAGE = new ve(p.g.CURRENT_PAGE_NAME), p.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"),
[Pi] = p.s("es-move-from").match(/^[^[$]+/) || [], [Li] = p.s("es-move-to").match(/^[^[$]+/) || [],
Fi = "".concat(p.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", p.s("lp-comment-toyou"))),
Mi = "".concat(p.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", p.s("lp-comment-watchedsection")));
const i = $("<a>").text(p.s("lp-comment")).attr("title", p.s("lp-comment-tooltip")), o = $("<span>").addClass("cd-commentLink-innerWrapper").append(i);
Bi = $("<span>").addClass("cd-commentLink").append(o)[p.g.IS_DIFF_PAGE ? "append" : "prepend"](document.createTextNode(" ")),
Di = Bi.clone().addClass("cd-commentLink-interesting");
const r = xe(p.g.CURRENT_USER_NAME).replace(/ /g, "[ _]");
Ri = new RegExp("(?:^|[^".concat(p.g.LETTER_PATTERN, "])").concat(r, "(?![").concat(p.g.LETTER_PATTERN, "])"));
}))).apply(this, arguments);
}
function Wi() {
mw.hook("wikipage.content").add(() => {
Ui && Ui.setFlags({
progressive: !1
});
});
const e = $("<fieldset>").addClass("cd-watchlistMenu"), t = $("<legend>").addClass("cd-watchlistMenu-legend").appendTo(e);
$("<a>").attr("href", mw.util.getUrl(p.config.helpWikilink)).html(p.s("script-name-short")).appendTo(t),
Ui = new OO.ui.ButtonWidget({
framed: !1,
icon: "speechBubble",
label: p.s("wl-button-switchinteresting-tooltip"),
invisibleLabel: !0,
title: p.s("wl-button-switchinteresting-tooltip"),
classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-switchInteresting" ],
disabled: !ji
}), Ui.on("click", () => {
!function() {
const e = !$(".mw-changeslist").find("ul.special").length, t = p.g.$content.find(".mw-changeslist .mw-collapsible:not(.mw-changeslist-legend)"), n = p.g.$content.find(".mw-changeslist-line:not(.mw-collapsible)");
Ui.hasFlag("progressive") ? (e ? n.filter("table").show() : n.not(":has(.cd-commentLink-interesting)").show(),
t.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").show(),
t.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click()) : (t.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click(),
t.has(".cd-commentLink-interesting").find(".mw-enhancedchanges-arrow").click(),
t.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").hide(),
n.not(":has(.cd-commentLink-interesting)").hide()), Ui.setFlags({
progressive: !Ui.hasFlag("progressive")
});
}();
}), Ui.$element.appendTo(e);
const n = new OO.ui.ButtonWidget({
framed: !1,
icon: "listBullet",
label: p.s("wl-button-editwatchedsections-tooltip"),
invisibleLabel: !0,
title: p.s("wl-button-editwatchedsections-tooltip"),
classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-editWatchedSections" ]
});
n.on("click", Mn), n.$element.appendTo(e);
const i = new OO.ui.ButtonWidget({
framed: !1,
icon: "settings",
label: p.s("wl-button-scriptsettings-tooltip"),
invisibleLabel: !0,
title: p.s("wl-button-scriptsettings-tooltip"),
classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-scriptSettings" ]
});
i.on("click", () => {
Ln();
}), i.$element.appendTo(e), p.g.$content.find(".mw-rcfilters-ui-changesLimitAndDateButtonWidget").prepend(e),
p.g.$content.find("#mw-watchlist-options .mw-changeslist-legend").after(e);
}
function Gi(e) {
const t = e.querySelector(".mw-userlink");
if (!t) return null;
let n = t.textContent;
return "MediaWiki message delivery" === n ? null : (mw.util.isIPv6Address(n) && (n = n.toUpperCase()),
n);
}
function Vi(e) {
return Pi && e.includes(": ".concat(Pi)) || Li && e.includes(": ".concat(Li));
}
function zi(e) {
return e.includes("Archiving");
}
function Ki(e) {
"Watchlist" !== mw.config.get("wgCanonicalSpecialPageName") || p.g.$content.find(".cd-watchlistMenu").length || (_t(),
mw.user.options.get("wlenhancedfilters-disable") ? Wi() : mw.hook("structuredChangeFilters.ui.initialized").add(() => {
Wi();
}), $(".mw-rcfilters-ui-filterWrapperWidget-showNewChanges a").on("click", o()((function*() {
try {
({watchedSections: ji} = yield Q());
} catch (e) {
console.warn("Couldn't load the settings from the server.", e);
}
})))), e.get(0).querySelectorAll(".mw-changeslist-line:not(.mw-collapsible)").forEach(e => {
const t = e.className.match(/mw-changeslist-ns(\d+)/), n = t && Number(t[1]);
if (null === n) return;
const i = ("TR" === e.tagName ? e.parentElement : e).querySelector(".mw-changeslist-title");
if (!i) return;
if (!Te(i.textContent, n)) return;
if (e.querySelector(".minoredit")) return;
const o = e.querySelector(".comment"), s = o && o.textContent;
if (s && (Ae(s) || Se(s) || Vi(s))) return;
const r = e.querySelector(".mw-plusminus-pos");
if (!r) return;
if ("STRONG" !== r.tagName) {
const e = r.textContent.match(/\d+/), t = e && Number(e[0]);
if (!t || t < p.config.bytesToDeemComment) return;
}
let a = e.getAttribute("data-mw-ts");
if (a = a && a.slice(0, 12), !a) return;
const c = Gi(e);
if (!c) return;
const u = a + "_" + Le(c), l = i.href;
if (!l) return;
let d;
if (s && Ri.test(" ".concat(s, " "))) d = Di.get(0).cloneNode(!0), d.lastChild.lastChild.title = Fi; else {
let t = !1;
if (s) {
const n = e.querySelector(".mw-changeslist-diff-cur") || e.querySelector(".mw-changeslist-history"), i = n && n.href && n.href.match(/[&?]curid=(\d+)/), o = i && Number(i[1]);
if (o) {
const e = ji && ji[o] || [];
if (e.length) {
for (let n = 0; n < e.length; n++) if (s.includes("\u2192\u200e" + e[n])) {
t = !0;
break;
}
t && (d = Di.get(0).cloneNode(!0), d.lastChild.lastChild.title = Mi);
}
}
}
t || (d = Bi.get(0).cloneNode(!0));
}
d.lastChild.lastChild.href = "".concat(l, "#").concat(u);
const h = e.querySelector(".mw-usertoollinks");
h && h.parentElement.insertBefore(d, h.nextSibling);
});
}
function Xi(e) {
const t = mw.user.options.get("timecorrection"), n = t && t.split("|"), i = n && Number(n[1]);
if (null == i || isNaN(i)) return;
const o = e.get(0).querySelector(".mw-contributions-list");
Array.from(o.children).forEach(e => {
const t = e.querySelector(".mw-contributions-title");
if (!t) return;
if (!Te(t.textContent)) return;
const n = t.href;
if (!n) return;
if (e.querySelector(".minoredit")) return;
const o = e.querySelector(".comment"), s = o && o.textContent;
if (s && (Ae(s) || Se(s) || Vi(s))) return;
const r = e.querySelector(".mw-plusminus-pos");
if (!r) return;
if ("STRONG" !== r.tagName) {
const e = r.textContent.match(/\d+/), t = e && Number(e[0]);
if (!t || t < p.config.bytesToDeemComment) return;
}
const a = e.querySelector(".mw-changeslist-date");
if (!a) return;
const {date: c} = _(a.textContent, i) || {};
if (!c) return;
const u = T(c, mw.config.get("wgRelevantUserName"));
let l;
s && Ri.test(" ".concat(s, " ")) ? (l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Fi) : l = Bi.get(0).cloneNode(!0),
l.lastChild.lastChild.href = "".concat(n, "#").concat(u), t.nextSibling && (t.nextSibling.textContent = t.nextSibling.textContent.replace(/^\s/, "")),
t.parentElement.insertBefore(l, t.nextSibling);
});
}
function Ji(e) {
const t = mw.user.options.get("timecorrection"), n = t && t.split("|"), i = n && Number(n[1]);
if (null == i || isNaN(i)) return;
const o = e.get(0).querySelector("#pagehistory"), s = Array.from(o.children), r = p.g.CURRENT_PAGE.getUrl();
s.forEach(e => {
if (e.querySelector(".minoredit")) return;
const t = e.querySelector(".comment"), n = t && t.textContent;
if (n && (Ae(n) || Se(n) || Vi(n))) return;
const o = e.querySelector(".mw-plusminus-pos");
if (!o) return;
if ("STRONG" !== o.tagName) {
const e = o.textContent.match(/\d+/), t = e && Number(e[0]);
if (!t || t < p.config.bytesToDeemComment) return;
}
const s = e.querySelector(".mw-changeslist-date");
if (!s) return;
const {date: a} = _(s.textContent, i) || {};
if (!a) return;
const c = Gi(e);
if (!c) return;
const u = T(a, c);
let l;
if (n && Ri.test(" ".concat(n, " "))) l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Fi; else {
let e = !1;
if (n) {
const t = ji && ji[mw.config.get("wgArticleId")] || [];
if (t.length) {
for (let i = 0; i < t.length; i++) if (n.includes("\u2192\u200e" + t[i])) {
e = !0;
break;
}
e && (l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Mi);
}
}
e || (l = Bi.get(0).cloneNode(!0));
}
l.lastChild.lastChild.href = "".concat(r, "#").concat(u);
const d = e.querySelectorAll(".mw-changeslist-separator"), h = d && d[d.length - 1];
h && h.parentElement.insertBefore(l, h.nextSibling);
});
}
function Qi() {
return Zi.apply(this, arguments);
}
function Zi() {
return (Zi = o()((function*() {
if (!Yi) return;
const e = mw.user.options.get("timecorrection"), t = e && e.split("|"), n = t && Number(t[1]);
null == n || isNaN(n) || ([ document.querySelector(".diff-otitle"), document.querySelector(".diff-ntitle") ].filter(Ne).forEach(e => {
if (e.querySelector(".minoredit")) return;
const t = e.querySelector(".comment"), i = t && t.textContent;
if (i && (Ae(i) || Se(i) || Vi(i) || zi(i))) return;
const o = e.querySelector("#mw-diff-otitle1 a, #mw-diff-ntitle1 a");
if (!o) return;
const {date: s} = _(o.textContent, n) || {};
if (!s) return;
const r = Gi(e);
if (!r) return;
const a = T(s, r);
let c = Ni.getCommentByAnchor(a);
if (!c) {
let e;
for (let t = 1; !c && t <= 5; t++) {
e = T(new Date(s.getTime() - p.g.MILLISECONDS_IN_A_MINUTE * t), r), c = Ni.getCommentByAnchor(e);
}
}
if (c) {
let t;
if (i && Ri.test(" ".concat(i, " "))) t = Di.get(0).cloneNode(!0), t.firstChild.lastChild.title = Fi; else {
let e = !1;
if (i && Hi.length) {
for (let t = 0; t < Hi.length; t++) if (i.includes("\u2192\u200e" + Hi[t])) {
e = !0;
break;
}
e && (t = Di.get(0).cloneNode(!0), t.firstChild.lastChild.title = Mi);
}
e || (t = Bi.get(0).cloneNode(!0));
}
t.firstChild.lastChild.href = "#".concat(a), t.onclick = function(e) {
e.preventDefault(), c.scrollToAndHighlightTarget(!1);
};
const n = e.querySelector("#mw-diff-otitle3, #mw-diff-ntitle3");
if (!n) return;
n.insertBefore(t, n.firstChild);
}
}), mw.hook("convenientDiscussions.commentLinksCreated").fire(p), Yi = !1);
}))).apply(this, arguments);
}
function eo(e) {
return to.apply(this, arguments);
}
function to() {
return (to = o()((function*(e) {
e.parent().length && ([ "Recentchanges", "Watchlist" ].includes(mw.config.get("wgCanonicalSpecialPageName")) ? Ki(e) : "Contributions" === mw.config.get("wgCanonicalSpecialPageName") ? Xi(e) : "history" === mw.config.get("wgAction") && Te(p.g.CURRENT_PAGE) && Ji(e),
mw.hook("convenientDiscussions.commentLinksCreated").fire(p));
}))).apply(this, arguments);
}
function no() {
return (no = o()((function*({messagesRequest: e}) {
try {
yield $i({
messagesRequest: e
});
} catch (e) {
return void console.warn(...e);
}
p.g.IS_DIFF_PAGE ? mw.hook("convenientDiscussions.pageReady").add(Qi) : mw.hook("wikipage.content").add(eo);
}))).apply(this, arguments);
}
var io = n(7), oo = {
init() {
this.timerTotal = {}, this.timerStartTimestamps = {}, this.timerRunCount = {}, this.timerAllRunsTotal = {},
this.initCounters(), this.array = [], this.object = {};
},
initCounters() {
this.counters = "undefined" == typeof Proxy ? {} : new Proxy({}, {
get: (e, t) => t in e ? e[t] : 0
});
},
startTimer(e) {
this.timerStartTimestamps[e] = Date.now();
},
stopTimer(e) {
if (void 0 === this.timerStartTimestamps[e]) return;
void 0 === this.timerTotal[e] && (this.timerTotal[e] = 0);
const t = Date.now() - this.timerStartTimestamps[e];
this.timerTotal[e] += t, delete this.timerStartTimestamps[e], void 0 === this.timerAllRunsTotal[e] && (this.timerAllRunsTotal[e] = 0,
this.timerRunCount[e] = 0), this.timerAllRunsTotal[e] += t, this.timerRunCount[e]++;
},
resetTimer(e) {
void 0 !== this.timerStartTimestamps[e] && this.stopTimer(e), delete this.timerTotal[e];
},
fullResetTimer(e) {
this.resetTimer(e), delete this.timerAllRunsTotal[e], delete this.timerRunCount[e];
},
logAndResetTimer(e) {
void 0 !== this.timerStartTimestamps[e] && this.stopTimer(e), void 0 !== this.timerTotal[e] && (console.debug("".concat(e, ": ").concat(this.timerTotal[e])),
this.resetTimer(e));
},
logAndResetEverything(e) {
const t = Object.keys(this.timerTotal);
e && t.sort(), t.forEach(e => {
this.logAndResetTimer(e);
});
const n = Object.keys(this.counters);
e && n.sort(), n.forEach(e => {
console.debug("counter ".concat(e, ": ").concat(this.counters[e]));
}), this.initCounters(), this.array.length && (console.debug("array: ", this.array),
this.array = []), Object.keys(this.object).length && (console.debug("object: ", this.object),
this.object = {});
},
averageTimerTime(e) {
if (!this.timerAllRunsTotal[e]) return void console.error("No data for timer ".concat(e));
const t = this.timerAllRunsTotal[e] / this.timerRunCount[e];
console.debug("".concat(e, ": ").concat(t.toFixed(1), " average for ").concat(this.timerRunCount[e], " runs"));
},
incrementCounter(e) {
this.counters[e]++;
}
}, so = {
messages: {},
contribsPage: null,
localTimezoneOffset: null,
customTalkNamespaces: null,
pageWhiteList: [],
pageBlackList: [],
archivePaths: [],
pagesWithoutArchives: [],
idleFragments: [],
defaultIndentationChar: ":",
spaceAfterIndentationChars: !0,
indentationCharMode: "mimic",
signaturePrefixRegexp: /(?:\s+>+)?(?:\xb7|-|\u2013|\u2014|\u2015|~|\/|\u2192|\u21d2|\s|—|–|→|·| | )*'*$/,
signatureEndingRegexp: null,
tagName: null,
scriptCodeName: "convenient-discussions",
optionsPrefix: "convenientDiscussions",
helpWikilink: "commons:User:JWBTH/CD",
unsignedTemplates: [],
unsignedClass: "autosigned",
pairQuoteTemplates: [],
blockSmallTemplate: null,
paragraphTemplates: [],
quoteFormatting: [ "> ''", "''\n" ],
elementsToExcludeClasses: [],
templatesToExclude: [],
commentAntipatterns: [],
customBadCommentBeginnings: [],
keepInSectionEnding: [],
signatureScanLimit: 80,
foreignElementsInHeadlinesClasses: [],
customFloatingElementsSelectors: [],
closedDiscussionsClasses: [],
customUnhighlightableElementsClasses: [],
customAddTopicLinkSelectors: [],
defaultInsertButtons: [],
logoDataUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUQAAAAoCAYAAACGq4NTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAL0AAAC9ABdzF0jwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA+hSURBVHic7Z17tFdFFcc/916RhyKpUYSaCSKEhs8UzEzFQtOrheYrM8oytcxaqJiP0pYVlavI1HybhkqW4fKRj7Q0zeyh+VZQQAmEEFBEeXNvf3zPrDNnn8fv/O793d8PuPNda9b9zZk9c/aZM7Nnz957zgVhGDAVeBto7+K0ELgWeB8BAQEB6xiGAW/S9YLQpleAzevwfAEBAQGlMZX6C0OXflCH5wsICAgojXpsk/PSP+rwfAEBAQGl0Az0beD9N2vgvXs38N7rO/oCxwNjgR4N5mVdwnbAicA+jWZkHcFI4CvAkEYzUg0qaXHPAJOB10rQtgNtwAPAFGBpBdoX6/B8DiOAi4HngHej+y8HpgGXEwZxWWwGTCd+h38FNmooRx3HAGBGQXoGjeVLgVagZ0FbewHLiPvl+13G9fqBbxP3xUrgk41lpzyKBNaVSIsEaVSPVqBvB4712h4MLCqgrYdA7AvcAKwtwfvdBO93JRxPut8+3lCOJKhagc8BO1dRb2uqM/HMRhpPU0Zbvza07wItVT/JhoPZJPvjj41lpzyKBsBAQ3tYBfosAfeLKulriQFola9m0P+pi3la35E1BkY0lCM42ePlZ1XUq1YgujSFtMnlEkMzn2zB2V3wHMn+uKWx7JRH0YsfYGgPr0D/XEb7dqBkCcQdvWsLkGa6ZSefqwfwSMY9FwM3AxOj+7zkla0AduvkfTd0NKPB3Y607h81lh0AfkvtBOJlwIQoXYiE35IMultICryBxEJgCZor3RkHoLnWjkwsgxvLTnkUCbjLiF96H7IFjE1Hem1vT7kt844ZZS/QOYfPaRlt3gq8x9A1AUcBjwMndOJ+3Q1b0/lFq1aYS+0E4sgMui2B2zJo7XhpQRO/TxU8bMjojWTAemM6aEIvtghPoW3n/sA2JdpsA+5HDpWDKBZqLwEfRgIxS7s8j47FKm4EvAps5V37O7AvsKYD7Q1CW8WPoOdZBPwbuAN4I4P+ZKAfsBppEvOAUcBnUR8uBu4E7o3om4BvARtH+YXI7ml57Q18MWobtPJO9cr7R/fYHQW9LwQeQ5N5uWmrFRiO3v99wNNo8B4LDAVWIYfJTdFzOGwEjPfyy4BfZvTB5sgLvQcSKIvRovN74B1DOwbYJfr9IOrbbYHPo/GxFtmvJyMtHtRXuyJn2MVeW48Cd0W/3amoPGwN/NdcGxXxadECPAx8zLs2C9gBvaftgSO8shfQO/axC9Ict0fvfA4y0fyZ7HnYL6LfE73bd4Dn0ft8zaM7i1hxWU16URhP7PhqA35qyj+AlIKdgU2A/6FxcyeyhfrYOOJpn6jeUuBZ4HY05xwOAD7q5e9BcsRiN+AQtJD0RPPJvcNlhrYnmidEfF2LxsOhyGkzAPXLFOCJjHuBxtNYNMZb0Nx8EMmstdAxG0qtUpGG2A78JeehKmHvjLYO7EA7vdG2ek0Of++QHIwOMz2aKcCNOfVvJnZaWQ3k5Ax+zjU0J3llp5Pv1Z8HjDZt3eSVT4ueY2VG3SdIaoK9TPmCDD6/Sv7ppzfQAPZxhVc+F2n3yzPqPo8mIcB+Oe37KWuR9VFWQ3TYJ4P+E1FZq7l+k1evB1rg8vh8Es0BHyeQv7tahUw+TvPyHYZ2sYFkX64yZacioZJ1n/kkhfwI5H3Pol2NzGPOE/8zU/4Vc98ByNGS1yfzzL1BEQ4+zUS0aNu6bcA5pm4zWrjbcu73Alq8qxJgtU6VBGKelK+Ec0w7S6lebe+BBHKZ57jY1J1Zsl478I2oziHm+n0ZPD3llS8j3v5fWOI+y5Hm6HBTiTouTfbqVRKIZ5RobxVJz/QVJeq4dEdUZ/cStLUWiCDtyad3O5gigTixBK8nevRfK9kX+0f0HRWIY8gXEC7dHNFugrTpItoFwHsj+iKB2J9yc6SNpFnCCsRKdff16p5Vos6ZRfFjS5CxurMYRMe0s85gK5OfTqQOV4HxSAtxmI+2GjPRSnIG8Wo4Hk3Uv+a09Sayx74EHENSQzoFxbndiwacM0vsjwTeW1F+O5IhJbdGZXsB53vXZ6MJ9XTE51VoNe4F/JzkIPGxBrgGbVf2BL7plR0d5Rfn1HXYiaSTZX7Ey7+QdnF19Hw9UPRBngOrDYWxPBS1eSaxFn4oEmRPou3tkSS38LchAQvp7V4t8DzJ0KwPVqBvQX3gMAeNgUVoSzkOeB24LirfGphk2rgRmV76IJPGEUjb+UvV3CdxCnG/tqOQqn+iQOovoDHntqitEW8ON6B3vRnaQrcC30Nmikq4JGrb4Vk0PxZGbX0hut4E/AqZFebltDUT7eJeR+PAmV6aUL+7OXmqV2cRMhHMjejHod3Rz6FYwlYT05WHWwvu0VUa4mTTTp6gykMzaU3ACnW7fb3dK7Or3zCvbBPiwHDXz84I/wNT72iv3pmmzAk227+fMnyeaMqdwLUa4jhT73FT7rSRIg3xGlNmtzxHmfLh0XWrIZ5m6t1vyg8reL6ucKr4uMPQOzthnoa4pbn+L4oD2b9v6O/KoNmSpJmmoxrif7zrK0lHlfiYYPg6pYAW8jXEbQy/K0mH9/3e1L0wum41xIXApl69XU35S9H1ZpKa8HRie30CzVkXIzShAV4UnV8Jh5P0OtcLS0y+2iOCO5PUAuYiw6uP35j8aPK35f6q+S7SEhyaiLe+TqA4+KEbn/V+z0Qef0ieAGhDWuEEL+1CEjbvsMjkp5u89c5nwZ5G2Mnwsqcp37ULeekq2LFUSWteQtI5sAcSRN8m20lpbb3XZNA422Jn4WtdGyOnx0Sy38t8k/8lso8fjhbJshhNUu48gLQ7Hzea/JictlaQXACmmXL3Na02pOA4DEHmlAkkNdVCgQh6eXcT2wWqwVGkY7XqhbkmP5TqXtq2Ju+OLfqYQ9ILvCnlw1DaTN710SyS2uyn0UDdCm2NHa6O+OlLUjg0Iy1zope+QRL9KAdrYqg0VppJmyouMLyMN+VlF6pqeekqNCEh7+PVCnXWoKOhPnZCGtSraGcxyCv7kKF9uRoGq4SNDuiPhMSTUfIXuKkkPfItaAdze3T9XMqda8+aWxb2mq2Th7x5BTLR+BiCxuQMZK7aEcoNrNFI8n6XysGVvZCN5x5kf2zUBxQeMflewGeqqG+3NNYzB+p8GxaTqYZXCT9MpB9yPhxC/K7WEK+gfjiMK5tZkKaRHfpQC7SRFFxtFXiZjjSl9QkHkF707i9R73xkI7SLajPSsJ4k1lTs2LPvuJa4By2YNiQLpCXeh45Dgr6KdRhpbR2kMF1EudMoZebWSpOvxQdELkZCMUtojkGmjI+UXWm3QPv4V5D29RiypVyPOuEB5AFdgmwqB3WS+c7icdJG2ItI2huK8D+Tz7KtbE5S61xLdkxitbiN5Jb/0yS3DPcSbzFWIIeNQztyXgzOScPoOoEIyT5vQlptHi9DyY73W1fRA2kUPl6m3DOsQLbOHYGfkNYq+yENC9Je+zKxv53BZcgxNJ705/iaEL8OT6FnGAv8jrQgPYJyXnof78+gsfPNbtc7gjXIQbQDkgVWsPcGLuzI1mMg8u61IkP8MUiL3JnaaEi1wGrSKvJgtJoPSpPzCaSm34Ge4d/EAcCgybu9qWOF/j9Jr2wdwTKSK+2BJO1K1yXJedj73YO0I8OhHqYLf7vfRNIpVC9euqLtgWih38NcP4/qohdeRFvSQSjA3ofTEP9urmfZ4O0z+oKpD9WflFmItvAjkefft+ltS3InuQZtn49C/eIfDID0lt/iMZM/kLSf4mCTtzu+zmAG0tiHIu3c1xi3a5QtxuHtLmx7Eukt2Sg0KO9HK+M1aFV8CK2SrchDvYqkUGpC2rA7hjSKtLZgBVVn4Lc1gtjut4C01/Eqk5+EFqlNkUf7YKTBr6A6s0FHYHn5EZr4m6FJeiAKxl2BQjxqgbdMfm8kXKy3vSxOJbZ5/gLZ0F8hbdi/Dnn4y2AfNN5GRXnnPfa3w87RZh0KX45Szyidgp75Co/G13aakHmrL7JVTiHffj4QhXwdRyz0niJpK3wdCY0m4GwUWrNFVPYWCtPyMYdi/Idk9Mh7UdjM+5EyMpZkiEw7tZlbu6N3cIB37UEUo+wwx92wUckFtdY67MZhEBrM1fDktMSBaAtoy1dnXHuUpJ3Dht1Yp9SLptw6IyAZhO2SPXLlkHXONiu9TbwdsWE3rabN60250zwrBWbbenlpObFWZMNujjNt2i8mjfPKhhXcY2yqp5Lo6NduriW9G8oLu9mCZAjX00gYzjX0vsDNClVbSfrE1DER/dlV8O7b7O71rs9Gwv9ZQ++2zF/yrr2DYiAfIDkfZhDbCIsCs0eSfToma25d6dWzYTdW+OaNzT7IYemuv4DewauG/jiq6Mhap5eJ3eKjcmg6KxBB4TM2rikrrUETz1ffi44qufQw8s75qIVAPD3jXsMz6ECa4B8q8LkK+LpXp6sEYi/ScaBZfX2WV6czAhHkHMi6zxyKHXvVCsRp5JsB8gTiflT+UPKPTVt9kUOjqM5U79l6I8dMFt0i4G9e3gnE/mgOVhrbm0T0lU4TLSIZVlXp6N4hVP7ndteTnI8dFYi7E395Jy9dBTQ14kvHC5EW9h1ih0BXnmRZgOwwe6LBPBqdh90COUHcAfub0SkEH8+gbcdJKA5wOPFHE55AE/9W0p6r50jGp1lv9PMkT1FkeRIno22lsxdNRytbFt5F2tChaHs1kvhjAC+jgX0pyXCGWSQXHLv1fM2Uu3fVlnPdwW2Hb0BnmvdGi9IytFA4XmZ4dWabNm1s339NuY1TPBIZyo9AW6/X0Lu7lGwPqsMqihfd5WiMvIi0oUfI/zjIW6atWdHfh5Cp5avIfPFhZM5YgBwyl6OPO/hYGtEejzSzXdFkd3WuJXm0czkKnL+AuA/mIfPED9GCfAnSlBz/b6CPlXye+IMg/dH7fBbNh1979CcjIT8ORT5sE5XNQgvSJJJOtTmmP+wJlruRg+O06FmHIME+H9kZryJ9EmetadMuxnlj84mo/S+jOTIchau9gbzLV+OZooqk5gS6HkPIXylqoSEGBAQElEaeMDy7i+/bH6nRCwp4CAIxICCgrsgSROdFZX1yyuuVgkAMCAioK/KEIQSBGBAQ0M2QJwxBsUmraIwwDAIxICCg7nDC5/yc8kru/yAQAwICNhi0o8j2PIygchxVEIgBAQEbBL5XgmYndJaz3oIxCMSAgIBugxb0odUgEAMCAgIoFopBIAYEBHQ75AnFIBADAgK6JVpIfxQgCMSAgIBuixaSX2EJAjEgIKBbwxeKQSAGBATUDY34/FclrAVOQJ+9GtpgXgICAgLWCfQAzmk0EwEBAd0H/wd1jJzKq1cF/QAAAABJRU5ErkJggg==",
logoWidth: "324px",
logoHeight: "40px",
longCommentThreshold: 1e4,
bytesToDeemComment: 50,
summaryCommentTextLengthLimit: 50,
noConfirmPostEmptyCommentPageRegexp: null,
indentationCharsPattern: "\\n*([:*#]*) *",
undoTexts: [],
customTextReactions: [],
customCommentFormModules: [],
commentInputPlaceholderEmpty: !1,
getArchivePrefix: null,
transformSummary: null,
preTransformCode: null,
postTransformCode: null,
checkForCustomForeignComponents: null,
areNewTopicsOnTop: null,
getMoveSourcePageCode: function(e, t, n) {
return p.s("move-sourcepagecode", e, t, n) + "\n";
},
getMoveTargetPageCode: function(e, t) {
return p.s("move-targetpagecode", e, t) + "\n";
},
getAnchorCode: e => '<span id="'.concat(e, '"></span>')
}, ro = n(9), ao = {
LETTER_PATTERN: "A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC",
COMMENT_UNDERLAY_FOCUSED_COLOR: "#eaf3ff",
COMMENT_UNDERLAY_TARGET_COLOR: "#ffedb8",
COMMENT_UNDERLAY_NEW_COLOR: "#e8ffd1",
COMMENT_UNDERLAY_OWN_COLOR: "#f7ebff",
COMMENT_UNDERLAY_SIDE_MARGIN: 5,
HIGHLIGHT_NEW_COMMENTS_INTERVAL: 15,
CHECK_FOR_NEW_COMMENTS_INTERVAL: 15,
BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL: 60,
SECONDS_IN_A_DAY: 86400,
MILLISECONDS_IN_A_MINUTE: 6e4,
POPULAR_NOT_INLINE_ELEMENTS: [ "BLOCKQUOTE", "DD", "DIV", "DL", "FORM", "H1", "H2", "H3", "H4", "H5", "H6", "HR", "INPUT", "LI", "OL", "P", "PRE", "TABLE", "TBODY", "TR", "TH", "TD", "UL" ],
POPULAR_INLINE_ELEMENTS: [ "A", "ABBR", "B", "BIG", "BR", "CITE", "CODE", "EM", "FONT", "I", "IMG", "KBD", "Q", "S", "SAMP", "SMALL", "SPAN", "STRIKE", "STRONG", "SUB", "SUP", "TT", "U", "VAR" ],
UNHIGHLIGHTABLE_ELEMENTS_CLASSES: [ "mw-empty-elt", "tleft", "tright", "floatleft", "floatright" ],
BAD_COMMENT_BEGINNINGS: [ /^<!--[^]*?--> *\n*/, /^(?:----+|<hr>) *\n*/, /^\{\|.*?\|\} *\n*(?=[*:#])/ ],
FLOATING_ELEMENTS_SELECTORS: [ ".cd-floating", ".tright", ".floatright", '*[style*="float:right"]', '*[style*="float: right"]', '*[style*="float:left"]', '*[style*="float: left"]' ],
SIGN_CODE: "~~".concat("~~")
}, co = {
wrapInElement: (e, t = "span") => $($.parseHTML(e)).wrapAll("<".concat(t, ">")).parent(),
buildEditSummary(e) {
void 0 === e.addPostfix && (e.addPostfix = !0);
let t, n = (e.section ? "/* ".concat(e.section, " */ ") : "") + e.text.trim();
if (e.optionalText) {
let i = n + e.optionalText;
p.config.transformSummary && (i = p.config.transformSummary(i)), i.length <= p.g.SUMMARY_LENGTH_LIMIT && (n = i,
t = !0);
}
return t || (p.config.transformSummary && (n = p.config.transformSummary(n)), n.length > p.g.SUMMARY_LENGTH_LIMIT && (n = n.slice(0, p.g.SUMMARY_LENGTH_LIMIT - 1) + "\u2026")),
e.addPostfix && (n += p.g.SUMMARY_POSTFIX), n;
},
isPageOverlayOn: () => document.body.classList.contains("oo-ui-windowManager-modal-active") || Boolean(Pt && Pt[0] && "block" === Pt[0].style.display),
wrapDiffBody: e => '<table class="diff"><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content">' + e + "</table>"
};
function uo(e, ...t) {
if (!e) return null;
const n = "convenient-discussions-".concat(e);
if (p.g.QQX_MODE || "string" != typeof mw.messages.get(n)) {
const e = t.length ? ": ".concat(t.join(", ")) : "";
return "(".concat(n).concat(e, ")");
}
{
const e = mw.message(n, ...t.filter(e => "boolean" != typeof e));
return "boolean" == typeof t[t.length - 1] && t[t.length - 1] ? e.plain() : e.toString();
}
}
function lo() {
p.config = Object.assign(so, p.config), p.strings = Object.assign({}, ro, p.strings),
Object.keys(p.strings).forEach(e => {
mw.messages.set("convenient-discussions-".concat(e), p.strings[e]);
}), p.g.SETTINGS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-settings"),
p.g.LOCAL_SETTINGS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-localSettings"),
p.g.VISITS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-visits");
const e = "ru.wikipedia.org" === location.host ? "watchedTopics" : "watchedSections";
if (p.g.WATCHED_SECTIONS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-").concat(e),
p.g.IS_DIFF_PAGE = mw.config.get("wgIsArticle") && /[?&]diff=[^&]/.test(location.search),
p.g.CURRENT_PAGE_NAME = mw.config.get("wgPageName"), p.g.CURRENT_NAMESPACE_NUMBER = mw.config.get("wgNamespaceNumber"),
p.g.CURRENT_USER_NAME = mw.config.get("wgUserName"), p.g.PAGE_WHITE_LIST_REGEXP = je(p.config.pageWhiteList),
p.g.PAGE_BLACK_LIST_REGEXP = je(p.config.pageBlackList), p.g.$content = $("#mw-content-text"),
p.config.customTalkNamespaces || (p.config.customTalkNamespaces = mw.config.get("wgExtraSignatureNamespaces"),
p.config.customTalkNamespaces.includes(0) && p.config.customTalkNamespaces.splice(p.config.customTalkNamespaces.indexOf(0))),
mw.config.get("wgIsArticle") && (Te(p.g.CURRENT_PAGE_NAME, p.g.CURRENT_NAMESPACE_NUMBER) || $("#ca-addsection").length || p.g.$content.find(".cd-talkPage").length)) {
let e;
p.g.firstRun = !0, p.g.nanoCss = Object(s.create)(), p.g.nanoCss.put(".cd-loadingPopup", {
width: p.config.logoWidth
}), p.g.nanoCss.put(".cd-loadingPopup-logo", {
width: p.config.logoWidth,
height: p.config.logoHeight
}), Rt(), p.debug.stopTimer("start"), p.debug.startTimer("loading data"), p.g.worker = new Ii.a,
"ready" === mw.loader.getState("mediawiki.api") && (p.g.api = new mw.Api, e = wt(),
re().catch(e => {
console.warn(e);
}));
const t = $.when(...[ mw.loader.using([ "jquery.color", "jquery.client", "mediawiki.Title", "mediawiki.api", "mediawiki.cookie", "mediawiki.jqueryMsg", "mediawiki.notification", "mediawiki.user", "mediawiki.util", "mediawiki.widgets.visibleLengthLimit", "oojs", "oojs-ui", "oojs-ui.styles.icons-alerts", "oojs-ui.styles.icons-content", "oojs-ui.styles.icons-interactions", "user.options" ]), e ].filter(ke)).then(() => {
try {
pt({
messagesRequest: e
});
} catch (e) {
mw.notify(p.s("error-processpage"), {
type: "error"
}), Bt(), console.error(e);
}
}, e => {
mw.notify(p.s("error-loaddata"), {
type: "error"
}), Bt(), console.error(e);
});
setTimeout(() => {
"resolved" !== t.state() && (Bt(), console.warn('The promise is in the "pending" state for 10 seconds; removing the loading overlay.'));
}, 1e4), p.g.REGULAR_LINE_HEIGHT = parseFloat(window.getComputedStyle(p.g.$content.get(0)).lineHeight),
Ct(), n(8), n(18), n(20), n(22), n(24), n(26), n(28), n(30);
}
if ([ "Watchlist", "Contributions", "Recentchanges" ].includes(mw.config.get("wgCanonicalSpecialPageName")) || "history" === mw.config.get("wgAction") && Te(p.g.CURRENT_PAGE_NAME, p.g.CURRENT_NAMESPACE_NUMBER) || p.g.IS_DIFF_PAGE) {
let e;
"ready" === mw.loader.getState("mediawiki.api") && (p.g.api = new mw.Api, e = wt(),
re().catch(e => {
console.warn(e);
})), mw.loader.using([ "user.options", "mediawiki.Title", "mediawiki.api", "mediawiki.jqueryMsg", "mediawiki.util", "mediawiki.user", "oojs", "oojs-ui", "oojs-ui.styles.icons-interactions", "oojs-ui.styles.icons-editing-list", "oojs-ui.styles.icons-alerts" ]).then(() => {
!function(e) {
no.apply(this, arguments);
}({
messagesRequest: e
}), n(8), n(32);
}, e => {
mw.notify(p.s("error-loaddata"), {
type: "error"
}), console.error(e);
});
}
}
/**
* Helper function to decode base64 strings.
*
* @param {string} s
* @returns {string}
* @author Sophivorus
* @license GPL-2.0-only
* @license CC-BY-SA-3.0
* @license GFDL-1.3
* @private
*/ function ho() {
return new Promise((e, t) => {
io[location.host] ? mw.loader.getScript(io[location.host]).then(() => {
e();
}, e => {
t([ "Convenient Discussions can't run: couldn't load the configuration.", e ]);
}) : e();
});
}
function mo() {
const e = mw.config.get("wgUserLanguage");
return new Promise(t => {
"en" === e ? t() : $.get("https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/gadgets/ConvenientDiscussions/+/master/i18n/".concat(e, ".json?format=text")).then(e => {
var n;
p.strings = JSON.parse((n = e, decodeURIComponent(window.atob(n).split("").map(e => "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2)).join("")))),
t();
}, () => {
t();
});
});
}
function po() {
return (po = o()((function*() {
if (!location.host.endsWith(".m.wikipedia.org") && !$(".flow-board-page").length) if (p.running) console.warn("One instance of Convenient Discussions is already running."); else {
p.running = !0, p.debug = oo, p.g = ao, p.s = uo, p.util = co, p.getCommentByAnchor = Ni.getCommentByAnchor,
p.getSectionByAnchor = Kn.getSectionByAnchor, p.getSectionsByHeadline = Kn.getSectionsByHeadline,
p.getLastActiveCommentForm = ci.getLastActiveCommentForm, p.getLastActiveAlteredCommentForm = ci.getLastActiveAlteredCommentForm,
p.util.parseCommentAnchor = N, p.util.formatDate = x, p.util.setVisits = X, p.debug.init(),
p.debug.startTimer("total time"), p.debug.startTimer("start"), mw.hook("convenientDiscussions.launched").fire(p);
try {
yield Promise.all([ !p.config && ho(), !p.strings && (p.getStringsPromise || mo()) ].filter(ke));
} catch (e) {
return void console.error(e);
}
lo();
}
}))).apply(this, arguments);
}
$((function() {
return po.apply(this, arguments);
}));
} ]);